اذهب إلى المحتوى

عبدالله عبدالرحمن11

الأعضاء
  • المساهمات

    526
  • تاريخ الانضمام

  • تاريخ آخر زيارة

كل منشورات العضو عبدالله عبدالرحمن11

  1. يمكنك إستدعاء هذه الحزمة itertools.product و هي متاحة في بايثون من إصدار 2.6 import itertools sections = [ [1, 2, 3], [4, 5], [6, 7] ] for element in itertools.product(*sections): print(element) وهذا الكود مشابه للكود السابق for element in itertools.product([1, 2, 3], [4, 5], [6, 7]): print(element)
  2. عند إنشاء الكائنات Objects يتم إستدعاء دالة البناء Constructor في بايثون تعرف بإسم دالة التهئية __init__ class Person: def __init__(self, name): # دالة التهيئة أو دالة البناء self.name = name من خلال هذه الدالة يمكنك تمرير البيانات عند إنشاء الكائنات objects في الكود السابق أضفنا المُدخل name لتمرير بيانات بإسم هذا المتغير أما self فهي ضرورية لأنها تشير الى الكائن الذي تم إستدعاء دالة البناء عليه والآن يمكن إنشاء كائن وتمرير البيانات هكذا test = Person('Ali') عندما يتم تشغيل هذا الكود فإنه سيتم إستدعاء دالة البناء أو دالة التهيئة وتمرير Ali الى دالة التهيئة
  3. self تشير لنفس الكائن ويتم إضافتها للوصول الى بيانات نفس الكائن وهذه أمثلة للتوضيح أكثر إذا استخدمنا الكود خاصتك بدون تمرير self class MyClass: def myMethod(name): self.name = name فلن يحصل أي خطأ وايضا عند إنشاء كائن من هذا الصنف test = MyClass() فلن يحصل أي خطأ ولكن عندما نقوم بإستدعاء name من هذا الكائن test.name('ali') هنا ستظهر لك مشكلة بأن الكائن test ليس لديه name ، لماذا؟ لأنها عند إستدعاء أي دالة على الكائن وتمرير self فإنه في الخلفية يتم تمرير هذا الكائن تلقائياً والآن الدالة التي تم إستدعائها لديها الوصول الى هذا الكائن class MyClass: def myMethod(self, name): self.name = name والآن عند إستخدام هذا الكود فإن الدالة myMethod عند إستدعائها سيتم تمرير هذا الكائن تلقائياً والآن لديها الوصول الى هذا الكائن
  4. لتحديد عدد المدخلات parameters عند إنشاء كائنات Objects يتم ذلك في دالة البناء constructor أو كما تسمى في لغة البايثون بدالة التهيئة __init__ في الكود التالي سيتم بناء كائن بدون مدخلات parameters class Point: def __init__(self): # لايوجد أي مُدخل self.x = 0 self.y = 0 هنا في الكود السابق لم نضع أي مدخل عدا self لأنه إلزامي في البايثون ويشير الى الكائن نفسه وهنا كود بمدخل واحد class Score: def __init__(self, points): # قمنا بإضافة مُدخل واحد self.points = points
  5. في الحقيقة التعيين Assignment بإستخدام إشارة = لا يقوم بالنسخ للكائنات objects وليس المتغيرات العادية مثل هذا الكود a = 5 b = a b += 1 print(a) # 5 طبع print(b) # 6 طبع ففي هذا الكود تم النسخ لأنها متغيرات عادية وليست كائنات objects أما في الكود الخاص بك عندما قمت newList = Arr هنا لم تقم بالنسخ بل قمت بإنشاء متغير جديد يشير الى مكان المتغير الأول في الذاكرة الآن لديك متغيرين مختلفين بالاسم يشيران الى نفس المكان في الذاكرة أما إذا أردت عمل نسخ للكائنات Object فهناك العديد من الطرق ومنها عمل وظيفة تحتوي على حلقة التكرار بFor وهذا الأمر يأخذ وقت غير ضروري لأن هناك وظائف مدمجة مع بايثون لعمل النسخ لعمل نسخ سطحي Shallow Copy فيمكنك إستخدمه لنسخ الكائنات الذي لا تحتوي على كائنات داخلها كما في الكود import copy Arr = [1, 2, 3] newList = copy.copy(Arr) أما إذا أردت عمل نسخ عميق Deep copy وتستخدمه للكائنات الذي تحتوي على كائنات import copy Arr = [1, 2, 3] newList = copy.deepcopy(Arr)
  6. لم استخدم Recuva من قبل لكن برنامج EaseUS Recovery Wizard إذا لم يجد الملف ، إذاً الملف ضاع نهائياً من الضروري النسخ حتى ملىء القرص 100% لضمان عدم إسترجاع أي ملف مثل برنامج Norton Utilities فهو يقوم بوضع ملفات في القرص المحدد حتى يتملىء القرص 100% ومن ثم يقوم بحذفها وبعدها لاتستطيع إستعادة أي ملف أما إذا كان لديك ملف موجود وتريد حذفه نهائياً بدون المقدرة على إسترجاعه فيمكنك إستخدام نفس البرنامج Norton Utilities بإستخدام خاصية File Shredder بحيث يقوم بإتلاف الملفات المراد حذفها ومن ثم حذفها وإذا أردت إسترجاعها فستقوم بإستعادة ملفات تالفة لاقيمة لها
  7. هي نسخ ملفات مكان الملفات المحذوفة مسبقاً
  8. نعم صحيحة وقد ذكرت لك بعضها في الأعلى أفضل برنامج للإستعادة وهو الذي انا استخدمه هو EaseUS recovery wizard وضروري يكون البحث عميق وطويل وقد يكون لساعات فإذا هذا البرنامج لم يجد الملفات المطلوبة مع الأسف الملفات ضاعت
  9. يتم إستعادة الملفات المحذوفة بناء على عدة عوامل منها مكان الملف المحذوف فإذا كان في قرص النظام C ولم تقم بإستعادة فور حذفه فمن الصعب إستعادته وقد يضيع نهائياً متى تم حذف الملف فكلما كانت الفترة أطول كلما كانت نسبة العثور على الملف أقل إذا كان القرص قيد التشغيل والعمل خلال هذه الفترة عند حذف الملفات بالحذف العادي السريع فإنه في الحقيقة لا يتم حذف الملفات من القرص بل يتم فقط حذف عنوان الملف أي مكان تخزين الملف في القرص ، فعندما تقوم بإضافة ملفات جديدة فإنه قد يتم وضعها في مكان الملف الذي تم حذفه لأن النظام لا يرى أي عنوان حاجز لمكان التخزين هذا لأنه تم حذف عنوان الملف مسبقا فيتم إستبداله لهذا عند حذف أي ملف لا يجب نسخ ملفات الى هذا القرص لأنه قد يتم استبداله
  10. عندما قمت بإعادة تعيين المتغير x من داخل الوظيفة فانت قمت بإعادة تعيين متغير محلي x نسخة من المتغير الأصلي ومن ثم قمت بطباعة المتغير المحلي المعدل وليس الرئيسي أما إذا أردت الوصول الى المتغير الأصلي وتعديله فيجب عليك كتابة الكلمة global واسم المتغير داخل الوظيفة مثل x = 5 def printX(): global x ومن ثم يمكنك التعديل على المتغير الأصلي كما هو موضح في الكود x = 5 def printX(): global x # يجب كتابة هذه الكلمة للوصول للمتغير x = 6 print(x) printX() print(x)
  11. وعليكم السلام ليس هناك أي خطة للإلتزام بها لتعلم هذه الدورة فكل شخص يمكنه التعلم بأسلوبه الخاص ووفقاً لظروفه ولكن هناك بعض النصائح الذي ستساعدك في التعلم كتابة ملاحظات لكل شيء جديد تعلمته فلا تعتمد على الحفظ ولكن اعتمد على تدوين الملاحظات لكي تكون لك مرجع للمذاكرة وإيجاد أي معلومة تنساها رسم خرائط ذهنية بإستخدام الورقة والقلم أو إستخدام أحد برامج الخرائط الذهنية، بحيث تكون لديك صورة كاملة للمواضيع والدروس ونقاط الوصل بينها وهذا يساعدك كثيرا في الفهم مهم جداً ركز على الفهم وليس الحفظ ، اجعل كامل تركيزك وطاقتك لفهم الدروس والمفاهيم واكتب الملاحظات بدل الحفظ وإذا فهمت الدرس ومع الوقت ستحفظ تلقائيا كلما مارست وعملت مشاريع أكثر كلما إزددت خبرة وفهم للمواضيع التي لم تفهما جيداً قسّم الأمور المعقدة أو الكبيرة الى أجزاء صغيرة وركز على فهم الأشياء الصغيرة على جزء جزء لكي تفهم الموضوع المعقد أو الدرس
  12. هناك نوعين لحذف البيانات من القرص الحذف السريع والحذف البطئ الحذف السريع مثل الطريقة التي شرحها محمد وهذه مثل اسمها تتم بثواني ولكن إذا استخدمت هذه الطريقة فيمكنك إستعادة البيانات بكل سهلة بأحد برامج الإستعادة مثل EaseUs Recovery Wizard Stellar Data Recovery Wise Data Recovery Recuva Mini Tool Data Recovery وغيرها الكثير أما إذا أردت تهيئة القرص وعدم إستعادة البيانات نهائيا فيجب عليك عمل الحذف البطئ بإستخدام HDD low level format EaseUs Partition Master Norton Utilities وغيرها الان بإستخدام أحد هذه البرامج يمكنك عمل حذف بطيء وقد يأخذ ساعات بناءً على سعة وسرعة القرص ولا يمكنك إستعادة أي ملف بعد ذلك
  13. المشكلة المكتوبة "ReferenceError at new Blob" ظهرت لأن nodejs ليس لديه Blob ولكن يستخدم مايسمى بال Buffer يمكنك إستخدام هذه الحزمة الذي تسمى node-blob وهي لا تستخدم blob لأنه غير موجود في nodejs وإنما يسمى ب node-blob لأن عمله مثل عمل blob لتثبيت الحزمة اكتب هذا الأمر في موجه الأوامر npm i node-blob وتقوم بإستدعائها وإستخدامها هكذا const Blob = require('node-blob'); let myBlob = new Blob(["something"], { type: 'text/plain' });
  14. يمكنك إستخدام هذا الكود var Http = require('http'); var req = Http.request({ host: 'myproxy.com.zx', // ضع عنوان البروكسي port: 8080, headers:{"Proxy-Authorization": "Basic bXl1c2VyOm15cGFzcw"}, method: 'GET', path: 'http://www.google.com/' }, function (res) { res.on('data', function (data) { console.log(data.toString()); }); }); req.end();
  15. هناك العديد من الطرق لعمل ذلك فيمكنك عمل ذلك بإستخدام الحزمة fs وعمل overload للوظيفة consloe.log كما وضح الأخ وائل وتعتبر هذه أسرع وأبسط طريقة أو يمكنك إستخدام حزمة من حزم npm لكي تحصول على العديد من الميزات الأخرى لكن عليك الأخذ بعين الإعتبار عندما تقوم بإستخدام حزم طرف ثالث 3rd party لعدة عوامل منها الأمان وخبرة مطور الحزمة وعدد التنزيلات يمكنك إستخدام حزمة winston أما إذا أردت حزمة بسيطة وحجم أقل فيمكنك إستخدام simple-node-logger يمكنك تثبيتها بهذا الأمر npm install simple-node-logger --save ومن ثم يمكنك إنشاء logger بكل بساطة ولديك العديد من الخيارات /* إنشاء stdout وملف logger */ const log = require('simple-node-logger').createSimpleLogger('project.log'); أو /* إنشاء ملف logger فقط */ const log = require('simple-node-logger').createSimpleFileLogger('project.log');
  16. يمكنك إستخدام الكود السابق للمدرب وائل أويمكنك بإستخدام express عمل تحويل بكل سهولة بإستخدام هذا الكود var http = express(); /* تحويل المسار من http الى https */ http.get('*', function(req, res) { res.redirect('https://' + req.headers.host + req.url); //أو يمكنك إستخدام هذا الكود وإضافة اسم الدومين يدويا // res.redirect('https://example.com' + req.url); }) http.listen(8080); أو يمكن استخدام هذا الكود في مايسمى بال middleware app.get('/', function(req, res, next) { if (req.protocol == 'http') { res.redirect('https://' + req.get('host') + req.originalUrl); } }); أما إذا أردت عدم إستخدام express الذي تسهل عليك الكثير فيمكنك إستخدام هذا الكود var https = require('https'); var fs = require('fs'); var options = { key: fs.readFileSync('./key.pem'), cert: fs.readFileSync('./cert.pem') }; /* إنشاء خادم https */ https.createServer(options, function (req, res) { res.end('secure!'); }).listen(443); /* تحويل من http الى https */ var http = require('http'); http.createServer(function (req, res) { res.writeHead(301, { "Location": "https://" + req.headers['host'] + req.url }); res.end(); }).listen(80);
  17. يمكنك إستخدام الكود السابق للمدرب سامح أشرف فهو الكود الصحيح الموجود في التوثيق الخاص بNode لكن هناك بعض المعلومات الإضافية والمهمة وهي لأن لديك في الكائن fs وظيفتين وهما fs.readFileSync للقراءة بشكل متزامن fs.readFile للقراءة بشكل غير متزامن ففي حالة إنشاء خادم https يجب عليك إستدعاء الوظيفة المتزامنة fs.readFileSync لكي يتم تشغيل الكود بشكل صحيح فإذا قمت بإستخدام الوظيفة الغير المتزامنة fs.readFile وهي مهمة ولكن ليس في هذه الحالة فسيتم تشغيلها بشكل غير متزامن وينتقل التشغيل الى الكود الآخر المتزامن هذا https.createServer(options, function (req, res) { // options undefined res.writeHead(200); res.end("Hello, World!\n"); }).listen(8000) وسيظهر لك خطأ بأن options هي غير معرفة undefined لأنها ستكون معرفة فيما بعد بعد الإنتهاء من الكود المتزامن لذلك تذكر دائماً في هذه الحالة يجب عليك إستخدام الوظيفة المتزامنة fs.readFileSync لكي لاتحصل على مشاكل
  18. بعيدا عن التعقيد فكلمة this معناها بالعربي "هذا" وهو في اللغة العربية حرف إشارة وعملها في البرمجة ايضاً الإشارة الى السياق أو الكائن الذي تم إستدعائها منه فعندما تستخدم JavaScript في المتصفح وقمت بإنشاء كائن مثل var obj = {num:1} فيمكنك استدعائه بثلاث طرق console.log(obj) console.log(this.obj) console.log(window.obj) وتم ذلك لأننا كنا في سياق الكائن window وهو السياق الرئيسي ففي الإستدعاء الأول تم عبر إستدعائه عبر اسمه فقط ولم نحتاج لإضافة أي شيء لأننا في سياق ال window console.log(obj) وفي الإستدعاء الثاني قمنا بإستخدم this بمعني هذا لأنها تشير الى الكائن window console.log(this.obj) وفي الإستدعاء الثالث قمنا بشكل مباشر بإستدعاء الكائن window والكائن obj الذي داخله console.log(window.obj) وعند تشغيل الكود في node فهو نفس الشيء ولكن الاسم فقط متغير بدل window لدينا global فكلمة this أو هذا هي تشير الى الكائن الذي تم إستدعائها منه
  19. هناك عدة طرق لإستخدام متغيرات البيئة تختلف بإختلاف المكان الذي تريد تخزين هذه المتغيرات فيه مثال إذا أردت حفظ المتغيرات في متغيرات البيئة المخصصة من النظام المستخدم فيجب إستخدام هذا الكود للوصول الى متغيرات البيئة في المكان المخصص من النظام process.env أما إذا انت أردت عدم حفظها في المكان المخصص من النظام وأدرت حفظها في ملف بجانب ملف الكود ففي البداية يجب عليك إنشاء ملف وقم بتسميته .env وفي داخل هذا الملف قم بكتابة المتغيرات على سبيل المثال DB_ADMIN_USERNAME=admin DB_ADMIN_PASSWORD=password وللحصول على هذه المتغيرات يجب عليك تثبيت حزمة dotenv npm install dotenv ومن ثم إستدعائها واستخدامها في الكود الخاص بك /* إستدعاءالحزمة dotenv لقراءة ملف متغيرات البيئةوتعيينها في المتغير process.env عندما يتم تشغيل التطبيق */ require('dotenv').config(); // الان يمكنك استخدام المتغيرات كالآتي connectDatabase({ username: process.env.DB_ADMIN_USERNAME, //admin password: process.env.DB_ADMIN_PASSWORD, // password }); ولكن إذا كنت تستخدم git فتذكر إضافة الملف env. في gitignore. لكي يتم تجاهله
  20. ببساطة يكون في بداية تشفير base64 للصورة مثل الآتي data:image/png;base64,iVBORw0KGgoAAAANSUhEUgA... ويمكنك أن تقوم بإستخدام كود بسيط لإزالة الكود الذي لا ينتمي للصورة كالآتي let base64String = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgA'; // ليست صورة حقيقية // حذف الرأس الذي لا يتنمي للصورة let base64Image = base64String.split(';base64,').pop(); والآن يمكن حفظ الصورة في ملف بكل سهولة import fs from 'fs'; fs.writeFile('image.png', base64Image, {encoding: 'base64'}, function(err) { console.log('Image created'); });
  21. يمكنك استخدام هذا الكود لتنفيذ سكريبت الPowershell بإستخدام عملية فرعية child_process والاستماع لل stdout لمخرجات الأمر ولل stderr للأخطاء var spawn = require("child_process").spawn,child; child = spawn("powershell.exe",["c:\\temp\\helloworld.ps1"]); // هنا تضع السكريبت مع المسار child.stdout.on("data",function(data){ console.log("Powershell Data: " + data); // يقوم بطباعة البيانات من تنفيذ السكريبت }); child.stderr.on("data",function(data){ console.log("Powershell Errors: " + data); // طباعة الأخطاء من تنفيذ السكريبت }); child.on("exit",function(){ console.log("Powershell Script finished"); // طباعة أن السكريبت قد إتنهى من التنفيذ عند الإغلاق }); child.stdin.end(); //إنهاء الإدخال
  22. في البداية يجب عليك تعلم واحدة من اللغتين Kotlin Java ومن ثم تعلم الأساسيات تثبيت Android Studio أساسيات البرمجة للغة الذي اخترتها أساسيات البرمجة الكائنية الموجهة OPP الخوارزميات وهياكل البيانات ماهو Gradle وكيفية إستخدامه مهارات ضرورية تعلم نظام التحكم بالنسخ Version Control System ، تعلم git تعلم كيفية إستخدام Github الان تقوم ببناء مشاريع وتطبيقات وتعلم إستخدام بعض المكتبات الشهيرة مثل Dagger و RxJava وغيرها ومن ثم واصل بناء التطبيقات والمشاريع لاكتساب خبرة أكثر
  23. يمكنك الحصول على عنوان الIP بدون إستخدام إطار عمل مثل Express عن طريق استخدام هذا الكود const http = require('http'); const server = http.createServer((req, res) => { const ip = res.socket.remoteAddress; // هنا تحصل على عنوان الأي بي للمستخدم }).listen(3000);
  24. يمكنك استخدام Buffer لأخذ String أو أي نوع من البيانات وعمل تشفير base64 مثال console.log(Buffer.from("Hello World").toString('base64')); // النتيحة SGVsbG8gV29ybGQ= console.log(Buffer.from("SGVsbG8gV29ybGQ=", 'base64').toString('ascii')) // النتيحة Hello World Buffer هو عبارة عن كائن Global لهذا يمكنك إستدعائه مباشرةً
  25. وعليكم السلام ورحمة الله وبركاته مجال الذكاء الإصطناعي هو حاليا من أكثر الأشياء طلباً وخصوصا في الدول المتقدمة فإذا كنت فاهمه للجبر الخطي والتفاضل والتكامل والإحتمالات وأساسيات البرمجة وأهم شيء يكون عندك شغف لهذا المجال فتوكلي على الله وإبدائي وهناك الكثير من المصادر والمواقع الإنجليزية لتعلم الذكاء الإصطناعي لكن لا يمكنك الدخول في مجالي الذكاء الإصطناعي والطب في نفس الوقت يجب عليك التركيز على شيء واحد ويفضل أن تبدائي بالذكاء الإصطناعي وهذا فيديو قصير عن الذكاء الإصطناعي وتعلم الآلة وهذا كورس مقدمة للذكاء الإصطناعي من جامعة هارفارد بعد الانتهاء من الفيديو والكورس وايضا يجب عليك البحث في جوجل وقراءة بعض المقالات وكل هذا سيأخذ وقت قليل لكي يمكنك التأكد من أن هذا المجال هل يجب عليك تعلمه أم لا
×
×
  • أضف...