طارق جهاد

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

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

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

  • Days Won

    14

السُّمعة بالموقع

82 Excellent

المعلومات الشخصية

5 متابعين

  1. اخي الكريم، منتدى البرمجة هنا مختص بالبرمجيات وليس بصيانة الحاسوب. على أي حال، ربما يكون لديك مشكلة ماس كهربائي في الماوس نفسها، جرب تبديلها. بالتوفيق،،،
  2. أخي الكريم فقط كملاحظة قبل البدء بتعلم php او اي لغة اخرى. حاول ان تفهم بداية ما فائدة هذه اللغة او التقنية مثلاً php هي لغة الموقع على السيرفر بينما html,css, javascript واجهة المستخدم التي يراها ويتفاعل معها، لتنفيذ الكود الموجود على الموقع. لذلك دائماً احرص ان لا تبدأ بتعلم تقنية او لغة بمجرد نصيحة أحد الزملاء فقط، بل حاول الاطلاع على اللغات والتقنيات الموجودة ومقارنتها، ثم اختر ما يناسبك. فمثلاً، انا لا انصحك بتعلم php! لكن ربما انصحك بتعلم ASP.NET Core لذلك أيضاً لا تأخذ بنصيحتي قبل ان تتطلع بنفسك على هذه التقنيات ثم تختار المناسب لك. بالتوفيق،،،
  3. أخي الكريم، من الطبيعي جداً ان تواجه هكذا مشاكل في رحلتك في تعلم البرمجة. ومهما تابعت من الدورات التعليمية يبقى عليك جهد يجب ان تبذله بنفسك ومشاكل تواجهها أيضاً! وهي الضريبة التي يجب أن تدفعها! وإلا لكان الجميع يعمل الآن في مجال البرمجة! لكن يبقى هذا المجال فقط للصبورين اصحاب الشغف فيه. وعند نقطة معينة، تصبح جميع هذه المشاكل هي قاعدة بيانات معرفية تساعدك في تحسين مهاراتك واكتساب مهارات جديدة. ولذلك تأكد دائما ان المشكلة التي ستواجهك لها فائدين: ستقوم بتعليمك معلومة جديدة (غالباً تكون مفهوم معين لم تأخذه بعين الاعتبار مسبقاً) لان المشاكل في البرمجة هي اكبر معلم. تتخلص من عقبة في طريقك (وهي المشكلة نفسها، وطريقة تفاديها لاحقاً). وتصبح الامور اوضح مع مرور الوقت بالتوفيق،،،
  4. من ناحية التنفيذ او الاداء لا يوجد فرق. لكن عند حجم مشروع معين، يصبح تقسيم المشروع إلى أقسام (Packages) ضرورة، ومفيد في عدة نقاط: 1. هيكلية واضحة لملفات المشروع بحيث يسهل الوصول لاي ملف مطلوب. 2. سهولة البحث في نظام الملفات نفسه، فعندما يكون كل كلاس ضمن ملفه الخاص، فإن البحث عن الملف يعني البحث عن الكلاس، بعكس ان يكون مجموعة كلاسات ضمن نفس الملف. 3. إعادة الاستخدام او Reusability بمعنى يمكن اعادة استخدام نفس الخوارزميات في مشاريع اخرى. كما نقوم نحن باعادة استخدام كلاس Input/Output او كلاسات Graphics و Math وغيرها. اخيراً يجب الانتباه ان هذه المفاهيم لم تولد من العدم، لذلك بغض النظر عن مدى فائدتها حالياً إلا انني لا يمكنني ان اتجاهل هذه الفائدة، وسأعمل بمشروعي بحسب المعرفة التي لدي، وعندما اصل لنقطة احتاج فيها لهذه المفاهيم، ستكون الفائدة ظاهرة تمام. الامر مشابه لاسئلة، ما فائدة Abstract Class, Interface, Events, Delegates وغيرها؟ هي بالتأكيد مفيدة، لكن اذا كنت في مشروع ولم احتاج لها حقاً، لا يوجد اي مشكلة، لانني ساحتاجها لاحقاً. بالتوفيق،،،
  5. وعليكم السلام ورحمة الله. انت بحاجة فقط لمجموعة حلقات تكرارية loops للمرور على المصفوفة لتعبئتها اولا ثم لجمع الاسطر والاعمدة والاقطار. using System; namespace ConsoleApp1 { class Program { static void Main(string[] args) { // Read the array dimensions from the user Console.Write("Enter the array size: "); int size = int.Parse(Console.ReadLine()); // If the array size is even (not odd), then break; if (size % 2 == 0) { Console.WriteLine("Please enter en odd number!"); return; } // Define our [Size x Size] array int[,] array = new int[size, size]; // Assume that the array is magic until we make our calculations bool isMagic = true; // Just Print the array, to make it more readable // We have 2 loops, one for rows and the other for columns // It start from the [0,0], then [0,1] index until complete the first row // Then complete for [1,0], then [1,1] index until complete the second row, and so on... Console.WriteLine("Array size:"); for (int row = 0; row < size; row++) { for (int col = 0; col < size; col++) { Console.Write($"[{row},{col}]"); } Console.WriteLine(); } // Fill the array // Also using 2 loops Console.WriteLine(); Console.WriteLine("Please fill the array"); for (int row = 0; row < size; row++) { for (int col = 0; col < size; col++) { Console.Write($"Enter number at [{row},{col}]: "); array[row, col] = int.Parse(Console.ReadLine()); } } // Start our calculations Console.WriteLine(); Console.WriteLine("Calculating:"); // Sum the first row, where other rows, columns and diagonals must match int magicValue = 0; for (int i = 0; i < size; i++) { magicValue += array[i,0]; } // We will start by calculating the first row sum and the first col sum. for (int row = 0; row < size; row++) { int rowValue = 0; int colValue = 0; for (int col = 0; col < size; col++) { rowValue += array[col, row]; colValue += array[row, col]; } // if the current row sum != magicValue then break if(rowValue!= magicValue) { isMagic = false; break; } // Also if the current column sum != magicValue then break if(colValue!= magicValue) { isMagic = false; break; } // first loop match // Reset values to calcaute the rest of rows and cols. rowValue = 0; colValue = 0; } // If we reach this code without any break, then all rows and cols are matched // we need to check if isMagic still true, and not flagged to false inside the loops. if (isMagic) { // Print the final array Console.WriteLine("It's Magic Array :)"); for (int row = 0; row < size; row++) { for (int col = 0; col < size; col++) { Console.Write($"[{array[row,col]}]"); } Console.WriteLine(); } } else { Console.WriteLine("Not match"); } } } } يمكنك التجربة بمصفوفة بحجم 3x3 والمدخلات كالتالي: [2][7][6] [9][5][1] [4][3][8] بالتوفيق،،،
  6. أخي الكريم Convert ليست دالة ولكنها كلاس او Helper class تحوي على مجموعة دوال (دول int.Parse و double.Parse و DateTime.Parse وباقي دوال التحويل الاخرى) بحيث يمكن الوصول لجميع هذه الدوال عن طريق Convert. ولذلك ذكرت بان Convert هي Helper Class بمعنى كلاس يحوي على Static Methods يمكن استدعائها مباشرة (دون الحاجة لعمل اوبجكت من هذا الكلاس). مثال مشابه. لو فرضنا ان لديك كلاس Student بحيث يحوي على FirstName و LastName وكنت بحاجة للحصول على الاسم الكامل لهذا الطالب، فستقوم انت بعمل دالة داخل الكلاس Student بالشكل التالي: public string GetFullName(){ return FirstName + " " + LastName; } الآن لو كان لديك كلاس اخر Customer مثلا، ويحوي ايضا على FirstName و LastName فستوم ايضاً بإضافة نفس الدالة للحصول على الاسم الكامل. لكن ولكي لا تقوم بتكرار نفس الخوارزميات، يمكنك إنشاء Helper Class وليكن اسمه PrintHelper ويكون شكله بالشكل التالي: pulic static class PrintHelper { public static string GetFullName(string firstName, string lastName) { return firstName + " " + lastName; } } الآن ضمن كلاس Student يمكنك عمل التالي: public class Student { ... public string GetFullName() { return PrintHelper.GetFullName(FirstName, LastName); } } ضمن كلاس Customer ايضاً: public class Customer { ... public string GetFullName() { return PrintHelper.GetFullName(FirstName, LastName); } } اذا فعلياً كل ما قمت به أنا هو تسهيل عملية الوصول لهذه الخوارزميات، لكن النتيجة دائماً نفسها. بالتوفيق،،،
  7. وعليكم السلام ورحمة الله. مرفق طريقتين للحل واحدة باستخدام المصفوفات Arrays وواحدة باستخدام Lists طريقة المصفوفة using System; namespace ConsoleApp1 { class Program { static void Main(string[] args) { int[] numbers = new int[10]; int option = 0; for (int i = 0; i < 10; i++) { Console.Write("Enter number " + (i + 1) + ": "); numbers[i] = int.Parse(Console.ReadLine()); } do { Console.WriteLine(); Console.WriteLine("Choose what you want to do:"); Console.WriteLine(" 1. Show the largest number"); Console.WriteLine(" 2. Show the smallest number"); Console.WriteLine(" 3. Show the mean to one decimal"); Console.WriteLine(" 4. Display all input numbers"); Console.WriteLine(" 5. Finish this program"); option = int.Parse(Console.ReadLine()); if (option == 1) { int max = numbers[0]; for (int i = 0; i < 10; i++) { if (numbers[i] > max) max = numbers[i]; } Console.WriteLine("Max = " + max); } else if (option == 2) { int min = numbers[0]; for (int i = 0; i < 10; i++) { if (numbers[i] < min) min = numbers[i]; } Console.WriteLine("Min = " + min); } else if (option == 3) { int sum = 0; int count = 10; double average; for (int i = 0; i < 10; i++) { sum += numbers[i]; } average = sum / count; Console.WriteLine("Average = " + average); } else if (option == 4) { for (int i = 0; i < 10; i++) { Console.WriteLine(numbers[i]); } } } while (option != 5); } } } طريقة List using System; using System.Collections.Generic; using System.Linq; namespace ConsoleApp1 { class Program { static void Main(string[] args) { List<int> numbers = new List<int>(); int option = 0; for (int i = 0; i < 10; i++) { Console.Write("Enter number " + (i + 1) + ": "); numbers.Add(int.Parse(Console.ReadLine())); } do { Console.WriteLine(); Console.WriteLine("Choose what you want to do:"); Console.WriteLine(" 1. Show the largest number"); Console.WriteLine(" 2. Show the smallest number"); Console.WriteLine(" 3. Show the mean to one decimal"); Console.WriteLine(" 4. Display all input numbers"); Console.WriteLine(" 5. Finish this program"); option = int.Parse(Console.ReadLine()); if (option == 1) { Console.WriteLine("Max = " + numbers.Max()); } else if (option == 2) { Console.WriteLine("Min = " + numbers.Min()); } else if (option == 3) { Console.WriteLine("Average = " + numbers.Average()); } else if (option == 4) { for (int i = 0; i < 10; i++) { Console.WriteLine(numbers[i]); } } } while (option != 5); } } } بالتوفيق،،،
  8. وعليكم السلام ورحمة الله. الهدف واحد، وهو التحويل بين الأنواع، وخاصة من القيم النصية إلى القيم العددية. لكن Parse تتبع لكل نوع، مثلا تجد int.Parse و double.Parse و DateTime.Parse و... لكن Convert تجميع بين هذه الدوال (دوال Parse المختلفة) مع خيارات اضافية في التحويل بين الأنواع. استخدم ما يناسبك بحسب السياق. جميعها تعتمد على نفس الخوارزميات في التحويل. بالتوفيق،،،
  9. أخي الكريم انت بحاجة للتعامل مع Package Manager بغض النظر عن لغة البرمجة او التقنية. باختصار Package Manager يقوم بإدارة المكتبات بالنيابة عنك (التنزيل، متابعة الاصدارات الجديدة، متطلبات كل مكتبة) وغيرها من المهام. يرجى الاطلاع على المقالة التالية عن Package Manager http://www.tarekjihad.com/archive/package-manager-ar بالتوفيق،،،
  10. أخي الكريم احترم اجابتك، لكني اراها تزيد من درجة التعقيد وصعبة على الفهم، بالاضافة انها تخلط المفاهيم ببعضها يعمل الويب على اساس نموذج اساسي معياري وهو (خادم - عميل) Server side & Client side بالشكل التالي: 1. Client يرسل طلب معين إلى سيرفر معين (كتابة رابط في المتصفح) 2. Server يقوم باستقبال الطلب وتنفيذه وتوليد النتيجة (صفحة html غالباً) 3. Client يقوم باستقبال النتيجة ويعرضها للمستخدم بالشكل المطلوب. مرة أخرى: 1. Client هو المتصفح (وعنوان IP الخاص بجهازك) 2. Server هو برنامج (مكتوب باحدى لغات Server Side) يوجد على الانترنت بحيث يمكن لاي Client الوصول اليه. 3. Client هو موحد بين جميع الانظمة واللغات، عكس Server side الاختلاف فقط بلغات Server Side فتجد مثلاً: PHP ASP.NET Ruby on Rails Python Java تختلف هذه اللغات فيما بينها، لكنها بالمجمل تتشابه بالية العمل، وتولد نتائج يستطيع اي client قراءتها وعرضها. اذا لا يمكن المقارنة بين Client side و Server side اطلاقا. لكن فعلياً يمكنك المقارنة بين لغات Server side. وكنصيحة شخصية ابتعد عن المقارنات التي هدفها اثبات ان تقنية افضل من الاخرى، واستخدم التقنية التي تتقارب مع حجم ومتطلبات مشروعك. ولا تنحاز إلى تقنية او لغة. ملاحظة: 1. هناك خلط بين مفاهيم لغة البرمجة واطار العمل، مثلاً Ruby هي لغة برمجة متعددة الانماط، لكن Ruby on Rails هو اطار عمل لكتابة تطبيقات الويب بلغة Ruby. ايضا ASP.NET هي اطار عمل لكتابة تطبيقات الويب بلغة سي شارب المتعددة الانماط. هناك لغات هي فقط للويب مثل PHP، عكس اللغات المتعددة الانماط التي تمكنك من كتابة انواع مختلفة من التطبيقات وليس فقط للويب. لكن يمكننا تجاوز هذه النقطة. 2. يمكن كتابة تطبيقات الويب ايضا باستخدام JavaScript باستخدام NodeJS ولكن هذا لن يخرجنا من النموذج (خادم - عميل). بالتوفيق،،،
  11. بإمكانك استخدام Visual Studio Code https://code.visualstudio.com/ وهو محرر نصي يعمل على جميع انظمة التشغيل، وبإمكانك تنفيذ سي شارب من خلاله. سي شارب في الماضي كانت لغة الويندوز فقط، ومرتبطة ارتباطا وثيقا ب فيجوال ستوديو، لكن مع تحول .NET إلى منصة مفتوحة اصبح هناك ادوات اخرى تمكنك من كتابة سي شارب على اكثر من بيئة عمل. بالتوفيق
  12. لديك قوس < اضافي قم بازالته. <script>src="A1.js"></script> Should be <script src="A1.js"></script> اعتقد ان هذا الملف مسؤول عن بعض animation، يمكنك ازالته، وتشغيل الصفحة من جديد، وفي حال لم يكن هناك فرق يمكنك ازالته. <script src="https://cdnjs.cloudflare.com/ajax/libs/animejs/2.0.2/anime.min.js"></script> بالتوفيق،،،
  13. تعرضت لمسألة مثل هذه، كان لدي بيانات عدد كبير من العملاء، يمكنك الاكتفاء بالاسم والرقم او الرقم فقط. قمت بعمل تطبيق بسيط على السي شارب، يقوم فقط بالمرور على هذه البيانات (في حالتي وضعتها في جدول قاعدة بيانات) ومن اجل كل رقم، قمت بتوليد نص، وبالنهاية قمت بكتابة النتيجة إلى ملف contacts.vcf TempContactsEntities db = new TempContactsEntities(); var contacts = await db.Contacts.ToListAsync(); StringBuilder vcf = new StringBuilder(); List<string> names = new List<string>(); foreach (var item in contacts) { if (names.Contains(item.Name)) item.Name = item.Name + names.Count(x => x == item.Name); if(item.Phone.Length>=8) { vcf.AppendLine("BEGIN:VCARD"); vcf.AppendLine("VERSION:2.1"); vcf.AppendLine($"FN:{item.Name}"); vcf.AppendLine($"TEL;CELL:{item.Phone.Substring(0,8)}"); vcf.AppendLine("END:VCARD"); } names.Add(item.Name); } File.WriteAllText("contacts.vcf", vcf.ToString()); لست بحاجة للتقيد بلغة السي شارب أو بأي جزء من هذا الكود، باستثناء كود توليد النص، لاحظ من السطر 11 كيف اقوم بتوليد النص ودمجه مع المتغير vcf ليتكون لدي في النهاية نص طويل هو محتوى ملف vcf if (names.Contains(item.Name)) item.Name = item.Name + names.Count(x => x == item.Name); قمت بإضافة هذا الشرط، لانه في بعض الاحيان قد يتكرر لديك نفس الاسم في الملف الاصلي، لذلك قمت بخطوة بسيطة وهي في حال تكرار الاسم نضع بجانب الاسم عدد مرات التكرار، فيصبح لدي مثلا (أحمد، أحمد 1، أحمد 2، أحمد 3) وهكذا. بالتوفيق،،،
  14. وعليكم السلام ورحمة الله. اخي الكريم فكر في المنبه الموجود في نظام الاندرويد لديك، لو قمنا بضبطه على ساعة معينة، بحيث يعمل يومياً! انت بحاجة لنفس الالية، لكن بدل تنبيه المستخدم صوتياً سنقوم بجلب البيانات من السيرفر. تابع الحل على سؤال على الرابط: https://stackoverflow.com/questions/29058179/android-app-with-daily-notification بالتوفيق،،،
  15. وعليكم السلام ورحمة الله اذا كنت نتيجة الـ JSON تأتي صحيحة من السيرفر، يبقى عليك فقط تشكيل الـ html من هذه النتيجة ثم اضافتها إلى الـ DOM $(document).ready(function () { $('#btnSearch').click(function () { $.ajax({ type: "POST", url: "<?php echo base_url('user/search');?>", data: dataString, success: function (data) { var content = '<table><tr><th>ID</th><th>Full Name</th><th>Mobile</th></tr>'; $.each(data, function (index, value) { content += '<tr><td>' + data.ID + '</td><td>' + data.FULL_NAME + '</td><td>' + data.MOBILE +'</td></tr>'; }); content += '</table>'; $("#searchResult").html(content); } }); return false; }); }); لاحظ كيف قمنا بتشكيل الـ html داخل المتغير content ثم قمنا بالمرور على جميع العناصر، واضافة كل عنصر بشكل سطر. واخيرا اضافة ال html الناتج إلى الصفحة بالتوفيق،،،