• الإعلانات

    • فيصل الحربي

      تسجيل عضوية جديدة في المنتدى   01/31/2016

      السلام عليكم ورحمة الله وبركاته  عزيزي العضو الجديد :  حاليا رسالة الإيميل لتأكيد صحة إيميلكم تذهب للبريد العشوائي ( جاري حل المشكلة )  فإذا لم تجد رسالة التحقق من إيميلكم في صندوق الوارد لديكم إتجه للبريد العشوائي ( JUNK)  وقم بتفعيل إشتراككم من هناك   

Mr.B

الخبراء المعتمدون
  • عدد المشاركات

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

  • تاريخ اخر زياره

السمعه بالموقع

665 ممتاز جدا

4 متابعين

عن Mr.B

  • الرتبة
    خبير C/C++
  • تاريخ الميلاد 09/24/1991

طرق الإتصال

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

  • الجنس ذكر
  • الدولة : السعودية

أحدث الزائرين لملفلك الشخصي

35,445 زياره للملف الشخصي
  1. مؤشر لمصفوفة دوال

    يمكنك تعريف الدالة كنوع هكذا: return_type (*)(parameter_list) وإذا أردت استخدامها في متغير: return_type (*name)(parameter_list) وإذا كان المتغير مصفوفة: return_type (*name[])(parameter_list) مثال: #include <stdio.h> static int func1(const char *s) {   return printf("func1: %s\n", s); } static int func2(const char *s) {   return printf("func2: %s\n", s); } int main(void) {   static int (*array[])(const char *) = {func1, func2};   array[0]("A");   array[1]("B");   return 0; }
  2. هناك طريقتين قياسية للتواصل مع قواعد البيانات في جافا، الأولى أن تستخدم JDBC، وهي طريقة low-level، مناسبة إذا كان تطبيقك صغير وليس معقد (سيبقى هكذا) وتخطط لاستخدام قاعدة بيانات واحدة، تسمح لك بتنفيذ استعلامات مباشرة على قاعدة البيانات، كل ماحتاجه هو مزود JDBC لقاعدة البيانات التي تستخدمها، مثلاً لـMySQL ستحتاج mysql-connector-java. الثانية هي أن تستخدم JPA، وهي ORM ولها لغة استعلام خاصة JPQL (تستخدم غالباً JDBC داخلياً)، ميزتها أنها أقل كود وأنظف، وتغلف العديد من قواعد البيانات، بالإضافة لاستفادك من الـtype safety ، لو أردت استخدام PostgreSQL بدلاً من MySQL، فكل ماتحتاج إليه هو تغيير الـconnector من MySQL JDBC إلى PostgreSQL JDBC مع تغيير بعض الإعدادات، لكنها صعب إعدادها في البداية وتحتاج وقت للتعلم. كلاً من JDBC و JPA مجرد مواصفات لها أكثر من تطبيق implementation لهذه المواصفات، في حال أردت استخدام JBDC فكل ماتحتاج إليه هو الـDriver مثل mysql-connector-java، أما لـJPA فأنت بحاجة لـJDBC و JPA implementation مثل Hibernate أو EclipseLink. ستجد في المرفقات مثالين أحدهما لـJDBC والثاني لـJPA. samples.zip
  3. مساعدة مكتبة curl

    لايوجد على حد علمي كتاب أو شرح عربي لها، لكن لو بحثت ستجد العديد من الشروحات بالعربي لكن لـPHP، يمكنك الاستفادة منها لأن الواجهة مشابهة كثيراً لواجهة السي. libcurl مكتبة بسيطة نسبياً، هذه الـAPI - ليست كثيرة، ستجد هنا قائمة بأمثلة لاستخدامها، الأمثلة غير مرتبة لكن ابدأ بالأمثلة التي فيها كلمة simple، هناك تغليف سي++ أبسط، هذه قائمة بأمثلة لاستخدامها بداً من أبسط الاستخدامات، وهذا التوثيق.
  4. مشكلة javac is not recognized

    طريقتك في الترجمة في الصورة صحيحة، javac Rawan.java للترجمة و java Rawan لتنفيذ البرنامج، لكن يظهر أن تستخدمين package وهذا شيء دعيه لاحقاً، فقط أزيلي السطر package وضعي في الملف Rawan.java فقط: public class Rawan { public static void main(String[] args) { System.out.println("Hello world!"); } }  
  5. مشكلة javac is not recognized

    أنت فعلاً بحاجة لوضع مجلد البرنامج في متغير النظام PATH كي تتمكن من استخدام الأدوات والبرامج في ذلك المجلد في أي مكان دون الحاجة للإشارة لمسارها الكامل أو التواجد في مجلد الأداة. لكن المسار الذي وضعته هو مسار بيئة تشغيل جافا Java Runtime Environment (JRE) الازمة لتشغيل برامج جافا، بينما البرنامج\المترجم javac جزء من بيئة تطوير جافا Java Development Kit (JDK) الخاصة بالتطوير لجافا (المبرمج يحتاج الأولى والثانية، والمستخدم يحتاج الأولى فقط). تأكد أنك ثبت JDK، ثم ضع مسار مجلد bin الخاص ببيئة التطوير في متغيرات النظام كما عملت، هذا المسار تحدده أثناء التثبيت عادة C:\Program Files\Java\jdkX.X.X_XX\bin حيث أن X.X.X_XX هي إصدار JDK لديك، ثم أعد تشغيل سطر الأوامر ليعاد تحميل متغيرات النظام.
  6. accept هي من تسبب لك التوقف الملاحظ في خيط المعالجة الرئيسي main thread، حيث ستوقف خيط المعالجة حتى تستقبل اتصال، والمشكلة ستحدث كذلك مع recv و send، حيث ستسبب الأولى بإيقاف الخيط الى أن تستقبل شيء أو ينهي ارسال البيانات في الثانية، الواجهة الرسومية تحتاج أن لايتوقف خيط المعالجة التي تعمل به كي تتمكن من معالجة الأحداث في mainloop والا ستتجمد الواجهة. يلزمك إعادة هيكلة البرنامج بحيث تفصل الخادم في خيط معالجة فرعي وتترك معالجة أحداث الواجهة الرسومية في خيط المعالجة الرئيسي، مثال سريع: from tkinter import * import socket import threading port = 6000 host = "" class ChatServer(threading.Thread): def __init__(self): super().__init__() def run(self): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.bind((host, port)) sock.listen(5) while True: print('Waiting for incoming connections') clnt, address = sock.accept() print('Accepted a connection from {}, closing'.format(address)) ... clnt.close() chatServer = ChatServer() # Child thread chatServer.start() root = Tk() # Main thread root.mainloop()  
  7. يمكنك أن تبدأ من "بدهيات استعلامات SQL مع قواعد بيانات Sqlite"، فقط انتبه أن بعض الاستعلامات الواردة بالصفحة تحتوي أرقام مثل ٣٠، قم بتحويلها عند كتابتها إلى 30 وإلا فستعطيك syntax error. يمكنك أيضاً البحث عن "قواعد البيانات العلائقية" كمفهوم عام، ستجد هذه السلسلة الجميلة عنها، ومصادر أكثر باللغة الإنجليزية، يمكنك تطبيق معظم المفاهيم والاستعلامات التي تجدها على SQLite.
  8. SQLite ليست لغة بل قاعدة بيانات علائقية (تستخدم العلاقات) صغيرة جداً ولاتحتاج خادم حيث تخزن البيانات في ملف ومكتوبة بلغة C، ميزتها هي قابليتها للتضمين في برامج أخرى، فايرفوكس مثلاً يستخدمها لتخزين ملفات الكوكيز والصفحات التي زرتها والمفضلات، لكنها لاتصلح للتطبيقات التي يستخدمها عدد كبير من المستخدمين في نفس اللحظة مثل تطبيقات الويب، هناك في المقابل قواعد بيانات أخرى ثقيلة على شكل خادم مثل MySQL موجهة للتطبيقات التي يستخدمها عدد كبير من المستخدمين. تأتي SQLite على هيئة برنامج منفصل، وعلى هيئة مكتبة قابلة للتضمين في برامج أخرى مثل C/C++ و بايثون وغيرها، وبايثون تضمّن SQLite كوحدة من وحدات المكتبة القياسية، أي أنه لاتوجد هناك إلا SQLite واحدة. ماتكتبه بين الأقواس مثل SELECT ... و INSERT ... تسمى لغة SQL، وهي لغة قياسية تستخدمها معظم قواعد البيانات العلائقية (مع بعض الإختلافات البسيطة)، لو تعلمتها وفهمت مبادئ قواعد البيانات العلائقية يمكنك العمل على أي قاعدة بيانات من نفس النوع.
  9. لايوجد فرق في الواقع بين C# و VB.NET سوى في اللغة كواجهة، أما الخلفية متطابقة تماماً، كلاهما يترجمان لنفس الـCIL bytecode ويستخدمان نفس إطار الـ.NET ونفس المكتبات، فأي شيء يمكنك عمله بـC# يمكن عمله بـVB.NET، المسألة عائدة في النهاية للتفضيل الشخصي. لكن معرفة لو بسيطة بـC# ضرورية لأي مبرمج .NET، فكما رأيت أن كثير من أكواد الـ.NET والمكتبات مكتوبة بـC#، لذا معرفتك بها ستفيدك في فهم الأكواد وترجمتها إلى مايقابلها في VB.NET، وهي -على الأقل بالنسبة لي- سهلة وأقل إسهاب من VB.NET ويمكنك تعلمها بسرعة لو خصصت بعض الوقت في تعلمها، أفترض أنك قطعت الشوط الأطول في تعلم إطار الـ.NET.
  10. هذه عادة وظيفة مراقب نظام الملفات file system watcher، معظم الأنظمة توفر API خاصة بها لمراقبة والتنبيه حول التغييرات في نظام الملفات، هناك مكتبة بايثون متعددة المنصات اسمها Watchdog، لم يسبق أن جربتها لكن حسب وصفها فهي توفر ماتريد، ستجد هنا الوثائق مع مثال بسيط.
  11. محاكاة خاصية امتصاص اللون في الرسام

    لاتوجد دالة أو مكون مخصص لهذا الغرض، لكن يمكنك عملها عن طريق تخزين الصورة المعروضة في كائن BufferedImage يمثل الـbackbuffer وعندما تريد رسم شيء ترسمه في تلك الصورة المخزنة أولاً ثم تعرضه على النافذة، عند النقر على النافذة حدد موقع النقر x, y، ثم اقرأ قيمة البكسل المقابل في صورة المخزنة باستخدام BufferedImage#getRGB مثلاً والتي تعطيك مركبات الـrgb، للحصول على المركبات منفردة استخدم الفئة Color: Color color = new Color(backbuffer.getRGB(x, y)); int r = color.getRed(); int g = color.getGreen(); int b = color.getBlue(); خذ في الإعتبار أنك قد تحتاج للتحويل من إحداثيات الشاشة لإحداثيات الصورة في حال لم تكن متطابقة. ملاحظة جانبية: إذا كان برنامجك محرر صور، ربما تقرأ عن الـaffine transformations وعن الفئة AffineTransform، قد يكون فهمها صعب في البداية لكنها سيسهل عليك عملك خصوصاً التحويل بين الإحداثيات.
  12. ما فائدة المتقلبة اي "volatile"

    volatile تستخدم لمنع مترجم الـC# أو مترجم الـJIT من إجراء أي تحسين optimization قد يؤدي لعدم القراءة أو الكتابة للمتغير مباشرة في الذاكرة، مثلاً هنا: using System; using System.Threading; namespace ConsoleApplication { internal class Program { private static void Main() { var test = new Test(); new Thread(() => { Thread.Sleep(1000); test.Continue = false; }).Start(); Console.WriteLine("Entering loop"); while (true) { if (test.Continue == false) break; } Console.WriteLine("Leaving loop"); } internal class Test { public bool Continue = true; } } } هناك خيط معالجة فرعي ينتظر لثانية ثم يغير قيمة Continue إلى false، خيط المعالجة الرئيسي يستمر في حلقة تكرار طالما أن Continue = true ثم يخرج من حلقة التكرار إذا تغيرت قيمة Continue إلى false. هذا المفترض، إلا أنه عند بناء البرنامج في وضع الـRelease (تفعل التحسينات)، قد يقوم مترجم الـJIT خطأ بتحسين حلقة التكرار بحيث يحذف جملة if إلى مايكافئ: while (true) { } بحيث تستمر حلقة التكرار للأبد، أي أن البرنامج لم يعد يقرأ القيمة من الذاكرة بل أصبح إما يقرأ من مكان آخر كمسجل المعالج أو لم يعد يقرأ القيمة أصلاً، عندي حسن الكود للتالي: 02B504B8 movzx eax,byte ptr [eax+4] while (true) { if (test.Continue == false) 02B504BC test eax,eax #### ليس لها أي فائدة عند العودة لها مرة أخرى while (true) { if (test.Continue == false) 02B504BE jne 02B504BC #### eax قفزة للتعليمة السابقة دون أي تعليمة قد تغير قيمة المسجل break; } Console.WriteLine("Leaving loop"); 02B504C0 mov ecx,dword ptr ds:[3DB22A8h] أي أنه عملياً حذف جملة if ولم يعد يقرأ القيمة Continue، هذا التحسين معقول لو أن هناك فقط خيط معالجة واحد، فلا يوجد شيء قد يغير قيمة Continue في خيط المعالجة الرئيسي، والمترجم يقوم بالتحسين وفق هذه الفرضية فلايوجد شيء عند تحليله للبرنامج يشير لعكس هذا. لتفادي مثل هذا النوع من التحسينات نحتاج لاستخدام volatile مع Continue هكذا: ... public volatile bool Continue = true; ... لمنع المترجم من عمل أي تحسين يخص هذا المتغير قد يؤدي لتلك النتيجة غير المرغوبة. انتبه أن volatile نادر جداً أن تستخدم، فأي بيانات يتم الوصول لها من أكثر من خيط معالجة عرضة لحالة تسمى التسابق race condition، وجود volatile لن يحميك منها فهي ليست وسيلة مزامنة، هنا مثلاً لدينا خيطان معالجة يقوم كلاً منهما بزيادة Value بواحد: using System; using System.Threading; namespace ConsoleApplication { internal class Program { private static void Main() { var test = new Test(); var thread = new Thread(() => { for (var i = 0; i < 1000000; ++i) { test.Value += 1; } }); thread.Start(); for (var i = 0; i < 1000000; ++i) { test.Value += 1; } thread.Join(); Console.WriteLine(test.Value); // 2000000 ?! } internal class Test { public volatile int Value; } } } النتيجة المتوقعة أن تكون قيمة Value = 2000000، إلا أنك غالباً ستجد قيم عشوائية مختلفة بسبب حالة التسابق، وجود volatile لن يغير شيء، تحتاج دوماً لمزامنة الوصول للمتغير المشترك الذي تقرأه وتكتب له أكثر من خيط معالجة سواء باستخدام مثلاً قفل lock على المتغير test، أو استخدام دوال عائلة Interlocked لمثل هذه الحالة البسيطة: using System; using System.Threading; namespace ConsoleApplication { internal class Program { private static void Main() { var test = new Test(); var thread = new Thread(() => { for (var i = 0; i < 1000000; ++i) { Interlocked.Increment(ref test.Value); // atomic test.Value += 1 } }); thread.Start(); for (var i = 0; i < 1000000; ++i) { Interlocked.Increment(ref test.Value); // atomic test.Value += 1 } thread.Join(); Console.WriteLine(test.Value); // = 2000000 } internal class Test { public int Value; } } } عند استخدام أدوات المزامنة تلك فلا حاجة إلى volatile، لأنها تضمن أن المتغير يقرأ ويكتب مباشرة في الذاكرة. المثال الأول باستخدام القفل: using System; using System.Threading; namespace ConsoleApplication { internal class Program { private static void Main() { var test = new Test(); new Thread(() => { Thread.Sleep(1000); lock (test) { test.Continue = false; } }).Start(); Console.WriteLine("Entering loop"); while (true) { lock (test) { if (test.Continue == false) break; } } Console.WriteLine("Leaving loop"); } internal class Test { public bool Continue = true; } } }  
  13. لم يسبق لي الاطلاع إلا على Linear Algebra and Its Applications، وهو كتاب ممتاز في الجبر الخطي وأعتقد أنه سيكون الكتاب المعتمد في مادة رياضيات بنفس الإسم، الكتب الباقية لم أطلع عليها. حالياً قبل دخولك الجامعة لست بحاجة لهذه الكتب بهذا المستوى من التعمق، لأنك ستدرس هذه المواضيع في الجامعة من الصفر، لكن المبادئ الأساسية في الرياضيات ستفترض الخطة الدراسية أن مادرسته في المتوسطة والثانوية قد غطاها، لذا كتاب مثل No bullshit guide to math and physics أعتقد أنه مناسب لمراجعة هذه المفاهيم. بالمناسبة، غالباً لن تدرس نظرية الإعداد في مادة رياضيات مستقلة في بكالوريوس علوم الحاسب سوى كجزء من مادة عن أمن المعلومات، ستدرس خلالها مقدمة بسيطة لنظرية الأعداد ربما في محاضرة أو محاضرتين فقط لفهم بعض الموضوعات في التشفير.
  14. في الجامعة ستدرس مواد رياضيات مثل التكامل والتفاضل (مثل التي درستها في الثانوية لكنها بتعمق أكبر)، المعادلات التفاضلية، الهندسة التحليلية والجبر الخطي، يفترض أن تعرف أساسيات الرياضيات مثل مفاهيم الدوال، والجبر، وأساسيات الهندسة، هناك عدة كتب تغطي هذه الأشياء لكن معظمها مراجع وتحتاج وقت طويل لتغطيتها. أعتقد أن كتاب No bullshit guide to math and physics سيعجبك، كتاب مختصر وتأسيسي، يغطي معظم المواضيع التي تحتاجها في بدايتك في الجامعة، فقط ألق نظرة على جدول المحتويات، جزء من الكتاب فيزياء حيث ستفيدك في معرفة كيف تطبق المفاهيم الرياضية خصوصاً التكامل والتفاضل.
  15. لايمكن عمل هذا، أي ملف قابل للقراءة فهو ضمنياً قابل للنسخ لأي وسيط يقبل الكتابة.