-
المساهمات
6975 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
218
إجابات الأسئلة
-
إجابة Wael Aljamal سؤال في كيف يمكنني استخدام المعامل LIKE خلال الدمج JOIN في SQL كانت الإجابة المقبولة
يمكن استخدام LIKE في أي مكان يمكن استخدام الشروط فيه مثل = , != , IN , وغيرهم
بعض قواعد البيانات لاتدعم معامل دمج النصوص + مثلا في SQL SERVER نحتاج لاستخدام دالة CONCATE
SELECT * FROM A INNER JOIN B ON B.MYCOL LIKE CONCAT('%', A.KEY, '%'); ^^^^^^^ == ^^^^^^^^^^^^^^^^^^^^^^^^ كما يمكن استخدام كامل ميزات LIKE فيها
-
إجابة Wael Aljamal سؤال في التعامل مع wibhook في بوابة الدفع utrust كانت الإجابة المقبولة
إن PHP ليس لديها طريقة مثل GET و POST لاستقبال البيانات على شكل طلبية PUT أو غيرها لذلك تتعامل معهم على شكل مختلف:
لذلك نستخدم php://input لقراءة بيانات الطلبية نستقبلهم كملف، ثم نحول المحتوى عن طريق parse_str
parse_str(file_get_contents("php://input"),$payload); echo $payload['success']; // true حسب التوثيق نجاح الطلبية يعيد { success: true }
parse_str تستقبل سلسلة نصية وتعيد إما متغيرات لكل مفتاح/قيمة أو تعيد مصفوفة في حال تمرير وسيط ثاني:
<?php parse_str("name=WAEL&age=25"); echo $name."<br>"; echo $age; ?> <?php parse_str("name=WAEL&age=25",$myDataArray); print_r($myDataArray); ?>
-
إجابة Wael Aljamal سؤال في تطوير موقع ويب وتطبيق في نفس الوقت كانت الإجابة المقبولة
عليك استخدام بيئة برمجية Cross Platform أي أنها تعمل على عدة منصات (أنظمة تشغيل) ويوجد العديد منهم،
ملاحظة: في كل فترة تحدث تطويرات وقد تدعم البيئة منصات أكثر في المستقبل..
Flutter وتعمل بلغة Dart وتعمل على جميع المنصات android - ios - web - windows - mac .. React Native تعمل بلغة JavaScript بالإضافة للغات الويب HTML - CSS وتعمل أيضا على مختلف المنصات android - ios - web .. تقنيات هجينة Hybrid:
Cordova تعمل بلغة JavaScript بالإضافة للغات الويب HTML - CSS وتعمل أيضا على مختلف المنصات android - ios - web Xamarin تعمل بلغة #C .. وغيرهم، ما يهمك أول 3 من القائمة فهم الأكثر دعماً وفرص عمل.
Flutter + React Native توفر شيفرة مصدرية أصلية لذلك أداء تطبيقاها أفضل.
-
إجابة Wael Aljamal سؤال في تصميم موقع تسويق الكتروني مع فيدوهات شرح PHP كانت الإجابة المقبولة
لايوجد سعر ثابت للمواقع، لوجود العديد من المتغيرات في طريقة حساب الكلفة، منها مكان إقامة المطور و خبرته وحجم المشروع إمكانية شراء إضافات أو توظيف مصمم وغيرها، وهذه عليك الاتفاق عليها مع المطور الذي سيعمل معك.
يمكنك التوجه لموقعي خمسات ومستقل وإضافة مشروع، ثم التواصل مع المطورين هناك والتفاوض معهم لإنشاء الموقع.
-
إجابة Wael Aljamal سؤال في تحديد عدد الصور المدرجه في image_picker بستخدام Flutter كانت الإجابة المقبولة
_imageFileList = _imageFileList != null ? (_imageFileList.length > 4 ? _imageFileList.take(4)) : _imageFileList,
-
إجابة Wael Aljamal سؤال في إظهار إشعار حسب اليوم في تطبيق أندرويد كانت الإجابة المقبولة
يمكنك الآن تطبيق الفكرتين من خلال السؤالين:
كيفية عمل اشعار في وقت محدد:
كيفية حساب المدة الزمنية لتاريخ معين:
إذا قمتي بقراءة الإجابتين بشكل جيد أضمن لك أنك ستستطيعين برمجة الحل.
يمكن المساعدة بأسئلة محددة خلال تطبيقك للفكرة البرمجية في حال لم تعمل لاحقاً عليك الآن التجريب
-
إجابة Wael Aljamal سؤال في كيف أقوم بفلترة النتائج WHERE قبل الحصول على ناتج JOIN لتسريع الاستعلام؟ كانت الإجابة المقبولة
حسب ترتيب خطوات تنفيذ الاستعلام في SQL سيتم تنفيذ جزء ON قبل جزء WHERE لذلك يمكننا نقل الشرط لتتم الفلترة بناءً عليه بخطوة قبل وهذا يسرع الأداء، حيث لا نحتاج WHERE بعدها
SELECT * FROM Table1 LEFT JOIN Table2 ON Table1.id = Table2.user_id AND Table2.role='Admin' ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^^^ لاحظ نقل شرط WHERE ودمجه مع شرط الربط.
WHERE تعمل على الجدول الناتج من عملية الربط، أي سيكون هنالك بيانات أكثر لاختبارها، لذلك نضع الشرط مع جزء ON
ضع دائمًا شروط الدمج في جملة ON إذا كنت تقوم بإجراء INNER JOIN. أي لا تضف أي شروط من WHERE إلى جملة ON ، بل ضعها في جملة WHERE
إذا كنت تقوم بتنفيذ LEFT JOIN ، فقم بإضافة أي شروط WHERE إلى جملة ON للجدول الموجود في الجانب الأيمن من الدمج. هذا أمر لا بد منه ، لأن إضافة جملة WHERE تشير إلى الجانب الأيمن من الدمج ستحوله إلى INNER JOIN.
الاستثناء هو عندما تبحث عن السجلات غير الموجودة في جدول معين. يمكنك إضافة المرجع إلى معرّف فريد (ليس فارغًا أبدًا) في جدول RIGHT JOIN إلى جملة WHERE بهذه الطريقة: WHERE t2.idfield IS NULL. لذا ، فإن المرة الوحيدة التي يجب أن تشير فيها إلى جدول على الجانب الأيمن من الصلة هي العثور على تلك السجلات غير الموجودة في الجدول.
-
إجابة Wael Aljamal سؤال في ما هو ترتريب تنفيذ استعلام SQL كانت الإجابة المقبولة
لنفترض أنه لدينا استعلام فيه العديد من الكلمات المفتاحية سيكون ترتيب التنفيذ كالتالي:
تحديد الجداول وخاصة الجدول اليساري FROM LEFT TABLE تحديد علاقة الربط ON التي تخص حقول الربط تحديد نمط الربط والجدول الثانوي (يميني - يساري - كامل LEFT - RIGHT - FULL ..) تطبيق الفلترة باستخدام الشرط الخاص بعبارة WHERE عملية التجميع التي تحددها GROUP BY عملية الفلترة على المجموعات الجزئية أي تطبيق شرط HAVING تحديد الأعمدة المراد جلب قيمها وهنا ينفذ جزء SELECT تحديد الفلترة الخاصة ب DISTINCT عمل الترتيب بواسطة ORDER BY تحديد عدد الحقول المعادة مثل LIMIT - OFFSET - TOP (خطوة 7) SELECT (خطوة 8) DISTINCT (خطوة 10) <top_specification> <select_list> (خطوة 1) FROM left_table (خطوة 3) join_type JOIN right_table (خطوة 2) ON join_condition (خطوة 4) WHERE where_condition (خطوة 5) GROUP BY group_by_list (خطوة 6) HAVING having_clause (خطوة 9) ORDER BY order_by_list
-
إجابة Wael Aljamal سؤال في كيفية الاحتفاط بصور السابقه في image_picker كانت الإجابة المقبولة
لنحاول التعديل:
try { final pickedFileList = await _picker.pickMultiImage( maxWidth: 66, maxHeight: 66, imageQuality: 66, ); if (_imageFileList == null) { if ( pickedFileList == null) return; setState(() { _imageFileList =pickedFileList; }); } else { if (pickedFileList != null) { setState(() { _imageFileList = [..._imageFileList, ...pickedFileList].toSet().toList(); }); } // لا تغيير } } catch (e) { setState(() { _pickImageError = e; }); }
-
إجابة Wael Aljamal سؤال في الاشتراك في دوره علوم الحاسوب كانت الإجابة المقبولة
إن الفترة 6 أشهر، هي المدة التي يضمن فيها الطالب استرداد أمواله في حال لم يجد عمل بعد اجنياز الامتحان.
الأعمال التي تؤهلك لها الدورة:
بالإضافة لسهولة تعلم أي مجال برمجي آخر أو تخصصي.
استرداد الأموال:
بالإضافة لمشاركات مفيدة:
-
إجابة Wael Aljamal سؤال في انشاء تطبيق server app بسيط باستخدام node - express كانت الإجابة المقبولة
لقد طرحت سؤالاً متقدماً أكثر ويتعامل مع قواعد البيانات، فأعتقد أنك تستطيع حل هذه المشكلة..
const express = require('express') // تضمين المخدم const app = express() // بناء الغرض // تحديد المنفذ const port = 4000 // استقبال الطلبيات في المسار الجذر app.get('/', (req, res) => { // إرسال رد للمستخدم res.send('Hello World!') }) // تشغيل المخدم app.listen(port, () => { // ^^^^ تحديد المنذ من المتغير console.log(`Example app listening at http://localhost:${port}`) }) // التشغيل ضمن cmd node app.js
-
إجابة Wael Aljamal سؤال في لا أستطيع إنشاء مشروع من نوع Material design أيضًا android x لا يتم تحميل الملفات اللازمة من أجل تشغيله كانت الإجابة المقبولة
أهلا مجدداً،
يوجد عدة أسباب لعدم عمليها،
أولا حاول استبدالها بالتالي:
implementation group: 'com.google.android.material', name: 'material', version: '1.1.0-alpha05' ثم علينا تحديث android sdk حيث يتطلب android-p . من مدير مهام SDK
ثم في gradle.properties أضف السطر
android.useAndroidX = true ****
حل آخر هو في Go to >> Gradle module.app:
نضيف أو نتأكد من الإصدار:
implementation 'com.google.android.material:material:1.2.1' ****
عند استخدام إصدار حديث من أحد المكتبات، يوجد متطلبات توافقية مع غيرهم، وهذا صعب تحقيقه بدون بعض المشاكل
إن كنت تتبع دورة عليك تحديد إصدارات جميع المكتبات كما حددها المدرب.
بعض القيم التي حددها أحدهم لحل المشكلة:
compileSdkVersion to 'android-P' Support Libraries to '28.0.0-alpha1' include api 'com.android.support:design:28.0.0-alpha1' in the dependencies block. SDK Platform update - Android P Preview (latest) targetSdkVersion 'P' .........
ثم بعد كل تعديل كبير (مثل إصدار مكتبة أو تثبيت مكتبات أو حدف) من قائمة File اختر
'Invalidate Caches / Restart' ثم أعد بناء المشروع rebuild
الخطأ البرمجي يسبب توقف عمل التطبيق مثلما ظهر ضمن المحاكي، هذا قصدي
خطأ ببناء الواجهات أو بناء XML أو استثناء لم يتم الأخذ به بالحسبان.
-
إجابة Wael Aljamal سؤال في استبدال كلمات معينة من سلسلة نصية في بايثون كانت الإجابة المقبولة
اولا يطلب البرنامج من المستخدم إدخال نص، ويكتب له > مثل إشارة لمربع النص.
وبعد استقبال الدخل من المستخدم، يفصل الكلامات عن طريق الفراغ، أي يحول السلسلة النصية إلى مصفوقة كل عنصر منها كلمة باستخدام التابع split.
وثم يقوم بالمرور على الكلمات و يستبدل الكلمة و برمز إيموجي.
عليك ان تجرب البرنامج، مثلاً أدخلت رسالة ترحيب ستظهر:
Hello wael :) => Hello wael 😄
massage = input("> ") # قراءة سلسلة نصية words = massage.split(" ") # تقسم السلسلة لكلمات حسب الفراغات وتصبح مصفوفة # تهيئة قاموس يقابل كل كلمة بالتي نريد تبديلها بها emojes = { ":(" : "😞", ":)" : "😄" } output = "" # تهيئة السلسلة الناتجة for word in words : # المرور على المصفوفة # إضافة ناتج استبدال الكلمة الحالية حسب مقابلها في القاموس، وفي حال لايوجد مقابل نعيد نفس الكلمة output += emojes.get(word , word) + " " print(output) # إضافة ناتج استبدال الكلمة الحالية حسب مقابلها في القاموس، وفي حال لايوجد مقابل نعيد نفس الكلمة
التابع get يأخذ مفتاح للبحث عنه ضمن القاموس، ولدينا : ( لها مقابل، فيعي الرمز التعبيري ايموجي بدالها ، وإلا يعيد نفس الكلمة
-
إجابة Wael Aljamal سؤال في التسجيل في دورة ألعاب الفيديو كانت الإجابة المقبولة
إن أكاديمية حسوب لاتوفر دورات خاصة ببرمجة الألعاب,
حتى تستطيع برمجة الألعاب يجب أن يتوفر لديك مهارات التفكير المنطقي و الخوارزميات وأساسيات البرمجة، فإن كنت مبتدئ أنصح بالتعلم بشكل صحيح من البداية ليكون لديك معرفة واسعة.
وبشكل متقدم، برمجة الألعاب تحتاج لمهارات في الرياضيات..
إن قمت بتسجيل دورة علوم الحاسب المقدمة من أكاديمية حسوب سوف تستطيع تعلم لغة برمجة سكراتس وإنشاء ألعاب تفاعلية مع تحريك الأجسام وتغيير الخلفيات والقفز و إطلاق الرصاص من الدبابة وكلها أساسيات عالم الألعاب وغيرها من الأمور الأساسية لكي تصبح قادراً على تعلم لغة برمجة حقيقية ثم بعدها برمجة الألعاب. أنصح بهذه الدورة.
مدخل إلى علوم الحاسوب أساسيات البرمجة أنظمة التشغيل ونظام لينكس قواعد البيانات إلى عالم الويب البرمجة كائنية التوجه الخوارزميات وبنى المعطيات أنماط التصميم
هذه أمثلة تدرس في الدورة
-
إجابة Wael Aljamal سؤال في تمثيل ثنائي التكميلي للرقم العشري - حساب المتمم الثنائي للعدد كانت الإجابة المقبولة
ملاحظات:
عندما نريد 16 بت للعدد نضع أصغر افي الجزء الأيسر للتمثيل الثنائي للعدد لنضمن عدد الخانات عملية تحويل العدد للنظام الثانئي تتمثل باستخراج باقي القسمة لهذا العدد على العدد 2 وتكرار الخطوة لناتج القسمة على 2 لنفس العدد المتمم الأحادي هو مقلوب تمثيل العدد الثنائي أي نبدل كل 0 ب 1 والعكس 1 ب 0 المتمم الثاني هو 1 + المتمم الأحادي تحويل عدد عشري لثائي:
بداية الحلقة نأخذ باق القسمة على 2 للعدد ونضع القيم من اليمين لليسار نقسم العدد على 2 نكرر الحلقة مثال لتحويل الرقم 64 من عشري لثنائي من 16 خانة:
64 = 0000000001000100 المتمم الأحادي، كل بت نقلب قيمته:
64 = 0000000001000100 64 متمم = 1111111110111011 المتمم الثنائي ينتج عن المتمم الأحادي بجمع 1
64 متمم أولي = 1111111110111011 + 0000000000000001 64 متمم ثانوي = 1111111110111111
حاولي نفس الخطوات
-
إجابة Wael Aljamal سؤال في هل يمكنني الاستعلام من قاعدتي بيانات معاً في MySQL أو SQL Server مستخدماً SQL كانت الإجابة المقبولة
نعم يمكن الاستعلام من قاعدتي بيانات مختلفتين، الفرق هو وضع اسم قاعدة البيانات التي ينتمي لها الجدول قبل اسمه
الشكل العام:
SELECT table_1.*, table_2.* FROM [Database_1].[Table_Schema].[Table_Name_1] table_1 JOIN [Database_2].[Table_Schema].[Table_Name_2] table_2 ON table_1.id = table_2.id مثال تقريبي:
SELECT t1.*, t2.name -- تحديد الحقول FROM DataBase_A.table1 t1 -- تحديد الجدول الأول من قاعدة البيانات الأولى JOIN DataBase_B.table2 t2 -- تحديد الجدول الثاني من قاعدة البيانات الثانية ON t2.column2 = t1.column1; -- عمل ربط معين لاحظ أن استخدام الاسم المستعار يسهل الوصول للجداول يكون اسم قاعدة البيانات التي ينتمي لها الجدول بادئة prefix للمجال الذي ينتمي منه الجدول مثال فعلي:
لنفرض لدينا قاعدة بيانات أولى فيها جدول المستخدمين، وقاعدة بيانات ثانية فيها جدول الرسائل / المحادثات
فيمكنا عمل ربط وجلب رسائل أحد المستخدمين بعمل الربط بشكل عادي كالتالي:
select * from DataBase_A.dbo.Users u join DataBase_B.dbo.Messages m on u.UserId = m.UserId
-
إجابة Wael Aljamal سؤال في كيفية تطبيق مبدأ التصفيح pagination في SQL أي جلب عدد استعلامات محدد على شكل صفحات كانت الإجابة المقبولة
يوجد عدة طرق لتحقيق المطلوب وهذا يعتمد على نوع مخدم قاعدة البيانات وما يدعمه.
في SQL Server يوجد الكلمتين المفتاحيتين:
OFFSET وتعني تطبيق إزاحة skip وتجاهل عدد من السجلات (نبدأ جلب السجلات التي رقمها من بعد قيمتها) FETCH NEXT تفيد في تحديد عدد الأسطر التالية المطلوبة SELECT col1, col2, -- تحديد الأعمدة FROM ... -- تحديد الجدول WHERE ... -- كتابة شرط الفلترة ORDER BY -- يفضل وبشكل ضروري ترتيب البيانات حسب حقل معين ليتم جلبهم بطريقة صحيحة -- الجزء التالي يحدد الإزاحة وعدد السجلات الذي سيعيده الاستعلام OFFSET 10 ROWS -- تخطي عشر سجلات 10 rows FETCH NEXT 10 ROWS ONLY; -- جلب العشر سجلات التالية 10 rows يمكن تعريف متغيرات وتمرير قيمة لها ثم استخدامها في الاستعلام
DECLARE @Skip TINYINT = 10 , @Fetch TINYINT = 10; كما يمكن تطبيقها بواسطة ROW_NUMBER التي تعيد رقم السطر ضمن النتيجة وبهذا نقوم بفلترة النتائج
select * -- جلب أعمدة from ( select *, ROW_NUMBER() OVER (ORDER BY columnid) AS ROW_NUM -- جلب ترقيم النتائج بترتيب حسب المعرف from table_name ) table_x WHERE -- تحديد شرط الفلترة RowNum >= 10 AND RowNum <= 20 ORDER BY RowNum -- إعادة ترتريب حسب رقم السطر وفي MySQL يمكن استخدام LIMIT + OFFSET
LIMIT + OFFSET => SELECT column FROM table LIMIT 10 OFFSET 10 LIMIT 2 params => SELECT * FROM table LIMIT 10, 50 -- النتيجة هي الأسطر 11-60 skip 10, take 50 تجاهل أول 10 أسطر وجلب 50 سطر التالي لجلب كل القيم بعد النتيجة 10، نضع الوسيط الثاني قيمة كبيرة جدا
SELECT * FROM tbl LIMIT 10,18446744073709551615; وباستخدام المتغيرات
SET @skip=1; SET @numrows=5; PREPARE STMT FROM 'SELECT * FROM tbl LIMIT ?, ?'; EXECUTE STMT USING @skip, @numrows;
-
إجابة Wael Aljamal سؤال في كيف أدفع لدورة أكاديمية حسوب بعملة الدينار العراقي كانت الإجابة المقبولة
أهلا يعقوب،
حاول التواصل مع مركز مساعدة حسوب وسوف يشرحون الخطوات في حال وجود طريقة
-
إجابة Wael Aljamal سؤال في ما هي مكتبة FFmpeg وكيف أستفيد منها في موقعي في تعديل ملفات الفيديو كانت الإجابة المقبولة
لتنصيب المكتبة على نظام لينوكس / اوبنتو علينا استخدام sudo مع تنفيذ الأوامر:
sudo apt update sudo apt install ffmpeg للتأكد من الإصدار ffmpeg -version استعمالاتها، تغيير نمط الفيديو vedio / صيغة الفيديو وملفات الصوت audio:
مثلا من mp4 إلى webm من mp3 إلى ogg ffmpeg -i vedio.mp4 vedio.webm ffmpeg -i audio.mp3 audio.ogg تدعم استخدام ترميز خارجي مثل libopus , libvorbis
التحكم بمعدل البيانات bitrate:
64 kbit/s: ffmpeg -i vedio.avi -b:v 64k -bufsize 64k vedio.avi التحكم بمعدل عد الإطارات:
frame rate / FPS to 24 fps: ffmpeg -i vedio.avi -r 24 vedio.avi كما يمكن تعديل بيانات توصيف الفيديو metadata بتغيير العنوان أو اللغة
ffmpeg -i in.avi -metadata title="my title" out.flv ffmpeg -i INPUT -metadata:s:a:0 language=eng OUTPUT ****
وضمن المشروع بافتراض استعمال php
require 'vendor/autoload.php'; $ffmpeg = FFMpeg\FFMpeg::create(); إنشاء غرض $video = $ffmpeg->open('video.mpg'); تحديد ملف الفيديو # اقتطاع أول 10 ثواني $video ->frame(FFMpeg\Coordinate\TimeCode::fromSeconds(10)) ->save('frame.jpg'); # تصدير الفيديو لعدة صيغ مختلفة $video ->save(new FFMpeg\Format\Video\X264(), 'export-x264.mp4') ->save(new FFMpeg\Format\Video\WMV(), 'export-wmv.wmv') ->save(new FFMpeg\Format\Video\WebM(), 'export-webm.webm'); قطع قسم من الفيديو باستخدام CLIP
$clip = $video->clip(FFMpeg\Coordinate\TimeCode::fromSeconds(30), # بداية 15 FFMpeg\Coordinate\TimeCode::fromSeconds(15)); # المدة 30 $clip->save(new FFMpeg\Format\Video\X264(), 'video.avi');
-
إجابة Wael Aljamal سؤال في أريد مدرس لشرح مادة الخوارزميات كانت الإجابة المقبولة
يمكنك التوجه لموقع خمسات بالإضافة لموقع مستقل وتوظيف مبرمج أو مهندس برمجيات لشرح المقرر، اذكري في العرض كامل التفاصيل والطريقة التي تفضلينها في أخذ الدرس،
إن كان لديك أسئلة محددة يمكن طرح أسئلة في قسم أسئلة / البرمجة
-
إجابة Wael Aljamal سؤال في هل تغيير ترتيب الجداول عند استخدام JOIN يؤثر على النتيجة SQL؟ كانت الإجابة المقبولة
تبديل تررتيب الجداول يؤثر على نتيجة استعلام LEFT - RIGHT _ FULL حيث أن فيهم الربط يعتمد على عرض جميع بيانات أحد الجدولين (حسب جهة العرض) ثم البحث عن عنصر مقابل في الجدول الآخر، لذلك البيانات تختلف.
أما في الربط الداخلي INNER JOIN نحصل على نفس النتيجة لكن ترتريب الأعمدة يختلف باختلاف ترتيب الدمج
Table col1 col2 A a1 a2 B b1 b2 select * from A, B => a1, a2, b1, b2 select * from B, A => b1, b2, a1, a2 ولتثبيت ترتريب الأعمدة علينا تحديدهم في عبارة SELECT
select a1, b1, b2, a2 from B, A => a1, b1, b2, a2 بالنسبة للدمج اليساري: سوف نثبت جدول الزبائن، ولكل زبون نبحث عن الطلبية التي تعود له
LEFT JOIN Example SELECT cust_id, cust_name, order_num, order_date FROM customer LEFT JOIN orders ON customer.cust_id = orders.order_id WHERE order_date < '2020-04-30';
بالنسبة للدمج اليميني: سوف نثبت جدول الطلبيات، ولكل طلبية نبحث عن الزبون صاحبها الذي يعود إليها
RIGHT JOIN Example SELECT cust_id, cust_name, occupation, order_num, order_date FROM customer RIGHT JOIN orders ON cust_id = order_id ORDER BY order_date;
عندما لانجد بيانات من الجدول الثانوي سيعيد NULL
وفي حال عمل FULL JOIN سنلحظ ربما وجود قيم فارغة في كلا الحقلين لأنه ليس شرطا تقابل القيم من كلا الجدولين
-
إجابة Wael Aljamal سؤال في هل نستطيع دمج أو ربط عدة جداول في نفس الاستعلام في SQL كانت الإجابة المقبولة
نعم بالطبع يمكن دمج أي عدد من الجداول باستخدام الكلمة المفتاحية JOIN مع الأخذ بالملاحظات ليكون الأداء سريع:
نحاول عمل الدمج مع المفاتيح الثانوية للجداول الأخرى نحاول عمل الدمج بالاعتماد على الحقول التي تم عمل فهرسة لها ربط الجداول بتسلسل منطقي بين بعضها لدينا المثال التالي حيث نريد جلب بيانات الزبائن الذين استخدموا خدمة الدفع الالكتروني في الموقع:
جدول sales يحوي جميع المبيعات (رقم الفاتورة وقيمتها)، جدول online_customer يحوي معلومات الزبائن المسجلين بالطريقة الاكترونية، وجدول الطلبيات (رقم الزبون ورقم الطلبية)
نربط جدول بينات الزبائن الإلكترونية مع جدول الطلبيات (حسب معرف الزبون) نربط جدول الطلبيات مع جدول المبيعات (حسب معرف الطلبية) نستخدم اسم مستعار لكل جدول SELECT oc.customer_Name, oc.city, oc.email, s.total FROM online_customer AS oc INNER JOIN orders AS o ON oc.customerid = o.customerid INNER JOIN sales AS s ON o.orderId = s.orderId
إن عملية الدمج تتم على مراحل، كل عملية JOIN نتج عنها جدول فرعي مؤقت، لذلك إن استطعت دمج الجداول الصغيرة في أول العلاقة هذا يقلل من عدد العمليات المطلوبة للخطوات التالية
-
إجابة Wael Aljamal سؤال في ما الفرق بين عمل SQL JOIN وجلب النتيجة كجدول كبير وبين دمج الجداول في لغة البرمجة بعد عمل استعلامات خاصة لكل جدول أو جزء من البيانات كانت الإجابة المقبولة
إن قواعد البيانات العلائقية والتي تعتمد على SQL مبنية بطريقة مٌحسّنة لعمل دمج بين الجداول وبطريقة سريعة وأقل استهلاك للموارد، مثلا قواعد البيانات لديها مفهوم الفهرسة وتعمل بحث وربط القيم بسرعة كبيرة وأفضل من البحث الخطي في لغة البرمجة بعد جلب الاستعلام كما أن الربط بالمفتاح الأجنبي بين الجداول يسرع الدمج كما يوجد query optimizer يأخذ الاستعلام الذي يكتبه المبرمج ويعدل عليه ليصبح أسرع.
بالإضافة لذلك، الحصول على النتيجة النهائية من قاعدة البيانات تقلل من حجم البيانات المرسل عبر الاتصال و الشبكة في حال أن المخدم الخاص بالمشروع (مخدم الويب web server) بعيد عن مدير قاعدة البيانات RDBM أي يحتاج لاتصال انترنت.
ولا يوجد داعي لتحميل كامل البيانات في ذاكرة المخدم أو العميل ثم عمل فلترة للنتائج، لأن هذا يضعف الأداء.
نقاط مهمة للأداء:
حجم ذاكرة مدير قاعدة البيانات (إن كانت صغيرة أو استضافة مشتركة يمكن عمل الربط في المخدم) سرعة الشبكة بين قاعدة البيانات والسيرفر (إن كان حجم الجداول الفعلي صغير يمكن نقلهم عبر الشبكة للمخدم ثم الربط) إن كان أداء مخدم قاعدة البيانات سيئاً وأدى لأن تصبح قاعدة البيانات لديك bottleneck لابأس من نقل المعالجة للمخدم -
إجابة Wael Aljamal سؤال في مشكلة في حجم الذاكرة وضبط إعداد gradle كانت الإجابة المقبولة
إن عملت المعالجة بدون مشكلة فهذا جيد،
مضاد الفيروسات يتفحص التعديلات على مجلد المشروع، يمكنك الدخول ل windows defender / security له وعمل تحديد لبرنامج محرر الأوامر و مجلد المشروع لكي لا يتفحصهم Exclude إن كان لديك متسع من الذاكرة RAM قم بزيادة حجم gradle deamon max heap size إلى 4 غيغابايت مثلا يوجد خيار آخر لتعديل حجم الذاكرة ل gradle
على مستوى المشروع: (حاليا نفذ هذه الخطوة)
ضمن ملف gradle.properties أضف السطر:
org.gradle.jvmargs=-Xmx4096m على مستوى جميع المشاريع:
توجه لمسار تثبيت gradle ربما لديك مع android sdk:
C:\Users\user\.gradle وأضف نفس السطر السابق للملف واحفظ التغييرات،
*************************************************
إعداد مضاد الفيروسات لكي لايتفحص ملفات المشاريع ويعمل على هدر الذاكرة و المعالجة: كيف نمنع windows defender من تفحص مشروع برمجي:
-
إجابة Wael Aljamal سؤال في كيف نستخدم بروتوكول SFTP وما فائدته؟ كانت الإجابة المقبولة
إن FTP هو اختصار ل File Transfer Protocol الذي هو بروتوكول نقل الملفات ويعمل عبر الشبكة بين حاسوبين محلي أو بعيد، أما SFTP فهو الإصدار الأحدث من FTP الذي يعتمد على بروتوكول التشفير SSH أي يصبح SFTP (اختصار لـSecure File Transfer Protocol أو SSH File Transfer Protocol) أي بروتوكول نقل الملفات الآمن.
يمكن استخدام FTP فقط في الشبكات الآمنة لأنه لا يدعم التشفير، أما SFTP يمكن استخدامه في جميع الحالات (مستحسن).
يعمل على المنفذ port 22
حتى تستخدم بروتوكول SFTP يجب أن تكون قمت بتهيئة SSH لديك
للاتصال عن طريق SFTP نكتب اسم المستخدم مع عنوان الحاسوب البعد:
sftp username@remote_hostname_or_IP sftp wael@hsoub.com أو sftp wael@14.5.1.98 إن كان الحاسوب البعيد قد غير المنفذ 22 الافتراضي مكن الاتصال بمنفذ مختلف بتمريره كالتالي:
sftp -oPort=custom_port wael@hsoub.com sftp -oPort=1234 wael@hsoub.com الآن ومثل SSH يصبح لدينا وصول لمحرر الأوامر البعيد، لمعرفة المسار الحالي واستعراض الملفات ضمنه نكتب الأمر:
pwd => Remote working directory: /home/wael ======== ls => Summary.txt info.html temp.txt testDirectory كما يمكن أيضاً استخدام الأمر cd للتنقل بين المسارات، والأمرين chgrp و chown لتعديل الصلاحيات..
لاستخدام نفس الأوامر لكن على الحاسوب المحلي نكتب حرف ل قبلها مثل
lcd lls lpwd أي يمكن تنفيذ أي أمر من نظام لينوكس.. لأن SFTP يشغل بالأصل SSH مع FTP
تحميل ملف من الحاسوب البعيد للحاسوب المحلي: نستخدم الأمر get لرفع ملف من الحاسوب المحلي للحاسوب البعيد: نستخدم put مثال get
get remoteFile ^^^^^^^^^^ تحميل الملف بالاسم المكتوب من الحاسوب البعيد get remoteFile localFile ^^^^^^^^^ اسم الملف المحفوظ محليا get /home/wael/remoteFile افتراضيا يحفظ الملف بنفس الاسم مثال put
put local-File ^^^^^^^^^^ رفع الملف بالاسم المكتوب من الحاسوب المحلي get remoteFile localFile ^^^^^^^^^ اسم الملف المحفوظ على الحاسوب البعيد put /home/local-wael/remoteFile افتراضيا يحفظ الملف بنفس الاسم يمكن تمرير r- في كل من get - put للعمل تحميل أو رفع مجلدات مع محتوياتها recursive
محررات أكواد تدعم SFTP للتعديل المباشر:
filezilla Aptana Sublime SFTP نستخدم SFTP بدل البرتوكول SCP, ويعمل SFTP بالإصدار 6 حاليا
مقالة