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

Wael Aljamal

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

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

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

  • عدد الأيام التي تصدر بها

    218

كل منشورات العضو Wael Aljamal

  1. أرجو التأكد من توافق إصدار kotlin plugin أي الإضافة الخاصة باللغة، بالإصدار المسخدم في المشروع مثل رابط الخطأ، وأرجو إضافة أي مستجدات وإخبارنا بها.
  2. كما قال الزملاء، الخطأ بسبب csrf token وعمليات الحماية، لكن بعد تعديل أي قيمة في إعدادات لارافل ينبغي مسح الكاش و ضبط الإعدادات من جديد بتنفيذ الأوامر: php artisan view:clear php artisan route:clear php artisan cache:clear php artisan config:cache ليتم الأخذ بالتعديلات في عملية تشغيل المخدم الجديدة/التالية
  3. إن Node.js تعمل بأسلوب المسلك الواحد single-threaded, non-blocking performance وهذا غير كافي لاتمام عمليات المعالجة الضخمة و الكثيرة. إن كل برنامج يتمثل في نظام التشغيل بعملية process تكون منفصلة في البيانات و الشيفرة البرمجية، ولكن مع تطور أنظمة التشغيل أصبحت المعالجات تدعن تعدد العمليات المتزامنة، لذلك ظهرت خاصية child process والتي هي نسخة من العملية الأب لكنها تعمل بجزء مختلف من الشيفرة البرمجية حيث تتواصل هذه العمليات عن طريق built-in messaging system. لتنفيذ ملف أو سكربت سوف نقوم بتضمين المكتبة Child Processes: ثم يتم تمرير مسار الملف مع المعاملات من خلال الدالة exec: const { exec } = require('child_process'); exec('"/path/to/file file.sh" arg1 arg2'); نمرر سلسلة نصية تحوي مسار الملف مع اسمه ثم الوسطاء أو البيانات طريقة أخرى: const { exec } = require('child_process'); exec('الأمر الذبي نريد تنفيذه', {'shell':'powershell.exe'}, (error, stdout, stderr)=> { // السكربت })
  4. قبل استخدام data نحتاج لاقتطاع الجزء الأول منها لأنه يمثل تريمز البيانات وليس جزءاً من البيانات فعليا. يمكنك استخدام الشيفرة التالية: let data = 'data:image/jpeg;base64,ABCDEEgoAAAANSUhEUgAAA..kJggg=='; // شيفرة لاستقبال سلسلة البيانات و فصل البيانات من نمطها function decodeBase64Image(dataString) { var matches = dataString.match(/^data:([A-Za-z-+\/]+);base64,(.+)$/), response = {}; if (matches.length !== 3) { return new Error('بيانات غير صالحة'); } response.type = matches[1]; // type هنا نمط البيانات response.data = new Buffer(matches[2], 'base64'); // هنا البياناتا لفعلية return response; } var imageBuffer = decodeBase64Image(data); console.log(imageBuffer); أضف الشيفرة السابقة لتعديل قيمة سلسلة البيانات قبل تمريرها ل writeFile. كما أن الاستدعاء سيصبح كالتالي: fs.writeFile('test.jpg', imageBuffer.data, function(err) { ... }); ^^^^^^^^^^^^^^^^^^ لاحظ: imageBuffer.data
  5. تعمل Node.js على نوعين من المسالك: Event Loop: the main loop, the main thread, event thread والتي تعني المسلك الرئيسي/الحلقة الرئيسية التي تدور على الأحداث و تنظم عمل المخدم. Worker Pool :thread pool وهي مجموعة المسالك المنشأة مع تشغيل المخدم والتي تقوم بأداء المهمات التي تأخذ وقت تنفيذ عالِ نسبيا لمنع إسناد هذه المهمة للمسلك الرئيسي وتوزيع المهمام مثل عمليات الإدخال و الإخراج IO بالإضافة لـ CPU-intensive tasks المهمات التي تشغل المعالج. إن نشاء مسلك جديد عند كل مهمة جديدة أو عندما نحتاج له، هي عملية تحتاج وقت لتتم مع حجز الموارد الخاصة بالحاسوب مثل الذاكرة و مجدول المعالج، لذلك يوجد thread pool (مجمع من المسالك) يحوي مسالك جاهزة لبدء العمل على المهمة التي توكل لها (تمرير البيانات و الشيفرة البرمجية التي تنفذها) مما يختصر الوقت و يعطي أداء أفضل من المخدم.
  6. يمكنك عمل إعادة تحويل للاتصالات الواردة عبر بروتوكول HTTP وتحويلها ل HTTPS: res.writeHead(301, { "Location": "https://" + req.headers['host'].replace(http_port,https_port) + req.url }); باستخدام الطريقة السابقة سنقوم بعمل إعادة توجيه لنفسنا ولكن بتغغير البروتوكول، فعليا إعادة استدعاء الرابط بغير بروتوكول سنقوم بوضع الشيفرة السابقة ضمن مخدم HTTP في التطبيق الذي مهمته فقط إعادة التوجيه: https.createServer(options, function (req, res) { res.end('نجاح!'); }).listen(443); // إعادة توجيه من http port 80 to https var http = require('http'); http.createServer(function (req, res) { res.writeHead(301, { "Location": "https://" + req.headers['host'].replace(http_port,https_port) + req.url }); res.end(); }).listen(80);
  7. هل يمكنك الإجابة على استفساري من السؤال السابق، وأين تشغل التطبيق بعد التصدير؟
  8. هل يمكنك عمل flutter clean و إعادة بناء التطبيق؟ هل يتم تحميل الملفات الناقصة من مخدم محلي؟ XAMP - WAMP .. ؟ و عند التجريب على الهاتف الحقيقي لا تعمل؟
  9. هل يمكنك مشاركة الشيفرة من فضلك؟ أخطاء شاىعة: تأكد من تعديل ملف التنسيقات المرتبط مع ملف الصفحة و أنك تقوم بفتح الملف الصحيح عند التجريب تطابق محدد الوصول بين عنصر الصفحة و تنسيقة كتابة التنسيق بشكل سليم لأن أي حرف خطأ يؤدي لعدم ظهور النتيجة
  10. يمكنك مراجعة هذا الشرح المقدم من الأكاديمية لكيفية الاشتراك معهم و كتابة المقالات: اكتب معنا يحوي الشرح اللازم كما يمكنك التواصل مع مركز المساعدة إن احتجت لذلك.
  11. إن وجود البرامج و الملفات على أقراص التخزين C - D - E لا يسبب مشكلة عند تشغيل الحاسوب حيث أن نظام التشغيل لايقوم بتحميل إلا البرامج التي تعمل / أي قمت بتشغيلها / فعليا للذاكرة RAM أما باقِ الملفات تبقى على القرص الصلب ولا تؤثر في عمل الحاسوب. إن وجود ذاكرة RAM بسعة 2 غيغابايت هو قليل جدأ ويكفي فقط لنظام التشغيل و بعض البرامج الخفيفة كمستعرض الصور و المتصفح ولا تستطيع تشغيل برامج التصميم عيلها فهذه البرامج تحتاج لذاكرة 2 غيغا بنفسها. الحل هو شراء ذاكرة RAM متوافقة مع حاسوبك/اللوحة الأم/ بسعة 8 غيغا بايت وهو الأفضل (يمكنك شراء 4 غيغا ولكن ستعاني قليلا في الأداء). اختر حسب قدرتك المادية. أي عليك زيادة سعة الذاكرة RAM وستحل مشكلتك (يفضل استشارة خبير للتأكد من توافق القطعة الجديدة مع القديمة) أي ربما تعمل الذاكرة الحالية مع الجديدة في حال كانتا من نفس النوع ddr3 - ddr4 .. والتردد. أتمنى لك التوفيق
  12. سوف نحتاج لمكتبة querystring لفصل المدخلات عن طريق parser حيث تكون بالشكل التالي: fname=Jermaine&age=29&photo=jermaine-photo.png ^ ^ يوجد إشارة & تفصل بين المدخلات.. وسنذكر مثال عن طريقة POST: const http = require('http'); const { parse } = require('querystring'); const server = http.createServer((req, res) => { if (req.method === 'POST') { // اذا كانت الطريقة post collectRequestData(req, result => { // معالجة المدخلات console.log(result); res.end(`Parsed data belonging to ${result.fname}`); // الرد وهو اختياري }); } وليكن لدينا call back funtion: function collectRequestData(request, callback) { const FORM_URLENCODED = 'application/x-www-form-urlencoded'; if(request.headers['content-type'] === FORM_URLENCODED) { // التحقق من نوع البيانات let body = ''; request.on('data', chunk => { // قراءة البيانات body += chunk.toString(); }); request.on('end', () => { callback(parse(body)); // إعادة البيانات }); } else { callback(null); // حدوث خطأ } } وكمثال آخر لتحويل البيانات لJSON: function (req, res) { body = ''; req.on('data', function (chunk) { body += chunk; }); req.on('end', function () { var postBody = JSON.parse(body); var response = { "text": "Post Request Value is " + postBody.value }; res.statusCode = 200; res.setHeader('Content-Type', 'application/json'); res.end(response); }); }; لاحظ أن الحدث: req.on('data' يدل على وجود بيانات أما الحدث: req.on('end' يعني نهاية قراءة المدخلات لذلك نستكمل العمل على منطق البرنامج في هذا الجزء. يفضل دوما استخدام express لأنه مخدم قوي و سريع ولديه العديد من الميزات، سوف يسهل و ينظم العمل.
  13. يوجد مكتبة مخصصة لقراءة الملفات سطراً سطراً تدعى readline استخدامها بالشكل التالي: const fs = require('fs'); const readline = require('readline'); const rl = readline.createInterface({ input: fs.createReadStream('sample.txt'), // الملف الذي يحوي البيانات crlfDelay: Infinity }); rl.on('line', (line) => { // لكل سطر من الملف سوف تتم الطباعة سطراً بسطر console.log(`Line from file: ${line}`); }); تم تمرير crlfDelay: Infinity لفصل المحارف الخاصة: CR LF ('\r\n') in input.txt as a single line break. للدلالة على سطر جديد. يوجد طرق مختلفة يمكنك إيجادهم على رابط التوثيق: nodejs.org/api/readline
  14. يمكن تحميل الملف من خلال Get method عن طريق مكتبة http: const http = require('http'); // or 'https' for https:// URLs const fs = require('fs'); const file = fs.createWriteStream("directory/file.jpg"); // مكان تخزين الصورة const request = http.get("http://**********/photo.jpg", function(response) { response.pipe(file); }); ومكان تخزين الملف من خلال file والدالة createWriteStream حيث أتينا بها من المكتبة الخاصة بمدير الملفات file system
  15. يمكنك أيضا الاستفادة من الإجابتين هنا:
  16. إن حفظ الملفات بنفس الاسم يؤدي لحذف الملفات القديمة أو عدم حفظ الجديدة. لذلك وليكون اسم الملف مميز وغير مكرر نضيف له قيمة الوقت: $path = "upload_pic/_" . time() . "_$NameImage"; سبب مشكلة عدم فتح الصور ربما بسبب تغيير اللاحقة لكل الصور إلى PNG في المسار.
  17. نعم تكون ملفات ال API موجودة في نفس مجلدات المشروع، ولكن منفصلة بملفاتها الخاصة مثلا نضع المتحكمات الخاصة بها في مجلد منفصل ِApp/Http/controllers/api/controller1.php ِApp/Http/controllers/api/controller2.php ِ...................... ِ/controller3.php ...................... ِ/controller4.php و نضع Routes أيضا في ملف منفضل: Rotes/api.php نضع فيه مسارات المتحكمات الخاصة. إن متحكمات API تصل لنفس موادر المتحكمات العادية و الملفات الأخرى فلا نضعها في مكان آخر ليسهل الربط بينها مع المشروع. و مع الصلاحيات سيكون كل شيئ آمنا فلا داع للقلق.
  18. append: سوف تقوم بإضافة جميع الوسطاء الذين تم تمريرهم لها للقائمة كعنصر واحد، أي مهما كان عدد الوسطاء سوف يزيد طول المصفوفة ب1. extend: تقوم بالمرور بحلقة على الوسطاء الممررة لها و تقوم بإضافتهم واحداً تلوَ الآخر ما يؤدي لزيادة عدد عناصر القائمة بعدد العناصر المضافة. مثال1: append لسلسة نصية يضيفها كاملة كعنصر وحيد >>> my_list ['foo', 'bar'] >>> my_list.append('baz') >>> my_list ['foo', 'bar', 'baz'] مثال2:append لقائمة يضيفها كاملة كعنصر وحيد >>> another_list = [1, 2, 3] >>> my_list.append(another_list) >>> my_list ['foo', 'bar', 'baz', [1, 2, 3]] # ^^^^^^^^^ عنصر وحيد مثال3: extend لقائمة يضيف كل عنصر من عناصر كعنصرها مستقل >>> my_list ['foo', 'bar'] >>> another_list = [1, 2, 3] >>> my_list.extend(another_list) >>> my_list ['foo', 'bar', 1, 2, 3] مثال4:extend لسلسلة نصية يضيف كل عنصر من عناصرها كعنصر مستقل >>> my_list.extend('baz') >>> my_list ['foo', 'bar', 1, 2, 3, 'b', 'a', 'z']
  19. لا يمكن حل المشكلة عن طريق الصور. ارجو اتباع الشرح النظري لان بعض الاكواد قديمة.
  20. من أجل أن يتحسن ترتيب موقعك في الصفحات الاولى بمنصات البحث "غوغل، ياهو، بينغ" لا بد وأن تستخدم SEO بطريقة صحيحة. SEO: يعني ال search engine optimization بمعنى أن تقوم بالعمل على المحتوى المتواجد داخل الموقع الخاص بك بطريقة ذكية تتماشى مع الخواريزميات الخاصة بمحركات البحث. يجب تكرار الكلمات المفتاحية في جسم المقالة و كتابة عنوانها بطريقة مناسبة (كما يمكن أن يبحث عنها شخص آخر لتحقيق أكبر عدد تطابق في الكمات) يمكنك اتباع بعض الخطوات لتحسين SEO: فمن أجل أن تحقق تحسن في ملائمته لمحركات البحث، عليكِ أن: كتابة محتوى ملائم لمجال موقعك بصورة مستمرة. العمل على تحسين ال structure الداخلي الخاص بمحتوى موقعك. الاهتمام بالروابط الداخلية للموقع. حل المشاكل التقنية بالنسبة للموقع. كما يمكن استخدمات الخدمات المدفوعة و الإعلانات. يمكن توظيف مختص من موقع مستقل أو خمسات لإنجاز المهمة.
  21. تختلف الأسعار بين المصمين حيث أن لكل منهم تسعير مختلف وتختلف أيضا حسب مكان سكنه و الأسعار المحلية في بلده، يمكنك عرض المشروع على موقع مستقل أو خمسات واختيار السعر/نوعية التصميم التي تراه مناسبا. على الأغب ستجد خصومات بعد شراء عدد كبير من التصاميم. هذا أمر صعب، يمكنك بعد استلام التصميم/ صورة عنه البحث في محركات غوغل/بينغ بنفس الصورة وإن وجدتها بموقع مختلف سوف تتأكد أن هذا التصميم ليس أصلي وأنه ليس خاص بطلبك/مشروعك.
  22. أول شيفرتين يمثلان برنامج تجريبي واحد، الجزء الأول بعد كلمة جافا و الجزء الخاص بالغرض بعد كلمة xml. ثم ذكرت اسم الدالة الاي تقزم بعمل إعادة التحميل re load. ثم مثال فيه كود جافا و xml سويا. كل مثال يمثل تطبيق تجريبي، اعمل مشروع جانبي و حاول فهم الشيفرة ثم خذ منهم ما تحتاجه لتعديل برنامجك.
  23. في termial ضمن vs code يوجد قائمة منسدلة في الجزء الأيمن تحوي على كل برامج الطرف الثالث التي تعمل مثل cmd - powershell وغرها. وجود أحدهم يعمل بنفس المنفذ /مثلا نسخة من برنامجك/ بدون إغلاقه يؤدي لهذه المشكلة التي تفيد بأن المنفذ port مستخدم، ربما سببها أيضا انك لم تغلق البرنامج الخاص بالاختبار من تجربة سابقة.أرجو محاولة إغلاقهم جميعا. حاول تشغيل الاختبار على منفذ 3001 مثلا.
  24. انتقل إلى الدليل/المجلد الذي تريد دفع التغييرات منه إلى حساب GitHub المختلف. نعمل مفتاح SSH key جديد ssh-keygen -t rsa -C “your-email-address” -t stands for ‘type’ and rsa is type of encryption نمط التشفير -C is for comment تثبيت سوف يظهرتأكيد توليد الملف: Generating public/private rsa key pair. Enter file in which to save the key (/c/Users/your_username/.ssh/id_rsa): أرجو تسمية الملف باسم مختلف عن سابقه الذي يفترض أنه موجود بنفس المسار: /c/Users/your_username/.ssh/id_rsa_IDENTIFIABLE_NAME_HERE ثم نكتب كلمة السر و نأكدها نستعرض الملف الذي قمنا بحفظه ثم ننسخ المفتاح العام منه ونضيفه لحسابنا في github سيكون بهذا الشكل في الملف نجده id_rsa_test.pub => ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDEmSbc7ms4SNIf7G0e9EqdrQRTB17VFTqRtCbQ55sSc11xZP5B07UXf9+ ................a955cf1GUzsNIr60E7VuVxirrr+K2WcleqifnDEg1H/VbyJtEekh4Aav9csBwemTz3 test@test.com نتوجه ل github : GitHub account → Settings → SSH and GPG keys يوجد أوامر مساعدة لتحديد الإعدادت ننفذهم مثل git config core.sshCommand=ssh -i ~/.ssh/id_rsa_test git config -e ثم نتابع بأمور تهيئة المستودع و نحدد المستخدم: git config user.name "test" git config user.email test@test.com git init git add . git commit -m "First commit" git remote add origin git@github.com:your_username/test.git git push origin master
  25. في أي جزء لديك المشكلة وما هي الشيفرة التي تعتمد عليها حاليا؟ لجلب البيانات من API: نستخدم بروتوكول http والطريقة get وبعد اتمام الاتصال نخن النتائج في قائمة import 'dart:async'; import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:clickmeetplay/iam/user/postbean.dart'; import 'package:http/http.dart' as http; class PostHome extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp(home: Scaffold(body: PostScreen(),),); } } class PostScreen extends StatefulWidget { @override _PostScreenState createState() => _PostScreenState(); } class _PostScreenState extends State<PostScreen> { List<Post> _postList =new List<Post>(); Future<List<Post> > fetchPost() async { final response = await http.get('http://alkadhum-col.edu.iq/wp-json/wp/v2/posts/'); if (response.statusCode == 200) { // If the call to the server was successful, parse the JSON List<dynamic> values=new List<dynamic>(); values = json.decode(response.body); if(values.length>0){ for(int i=0;i<values.length;i++){ if(values[i]!=null){ Map<String,dynamic> map=values[i]; _postList .add(Post.fromJson(map)); debugPrint('Id-------${map['id']}'); } } } return _postList; } else { // If that call was not successful, throw an error. throw Exception('Failed to load post'); } } @override Widget build(BuildContext context) { return Container(); } @override void initState() { fetchPost(); } } الاعتماديات: dependencies: http:^0.12.2 import 'package:http/http.dart'; ثم يمكنك عرض البيانات في ListView مثلا. بقي شيفرة PHP التي تستعلم من MySQL وتعيد JSON مثلا: استعلام بسيط يرد ببعض البيانات من جدول listinfo ثم نجمع الرد بمصفوفة ونحولها لكائن JSON <php $result = mysqli_query("SELECT * FROM listinfo"); $json = array(); $total_records = mysql_num_rows($result); if($total_records > 0){ while ($row = mysql_fetch_array($result, MYSQL_ASSOC)){ $json[] = $row; } } echo json_encode($json);
×
×
  • أضف...