• الإعلانات

    • فيصل الحربي

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

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

Eng.Fouad

اعضاء
  • عدد المشاركات

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

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

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

18 عادي

عن Eng.Fouad

  • الرتبة
    عضو
  • تاريخ الميلاد 05/10/1989

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

  • الجنس ذكر
  • الدولة : Saudi Arabia
  1. arabic font problem in JavaFx

    هذا هو الحل: System.setProperty("prism.text", "t2k"); System.setProperty("prism.lcdtext", "false");  
  2. ما هو الـ Thread؟

    قبل مدة ليست بالبعيدة كتبت تعريف عن ماهية الثريد رداً على سؤال سألني إياه أحد الأشخاص على الفيسبوك، وأحببت أن أشارككم إياه.     ما هو الـ Thread؟     تعريف الـ Thread: الثريد “Thread” باختصار هو “خيط” أو سلسلة من الأوامر البرمجية. سنعتبر مجازاً بأن الأمر البرمجي يمثل سطر واحد من كود لبرنامج معين.–∎–∎–∎–∎–∎–∎–∎–∎– المسؤول عن تشغيل هذا الخيط من الأوامر البرمجية هو الـ CPU “وحدة المعالجة المركزية”. يحتوي أي برنامج على ثريد واحد على الأقل، ويسمى الثريد الرئيسي main thread. في لغة الجافا مثلاً، دالة main تحتوي على مجموعة من الأوامر البرمجية اللتي ينفذها الـ CPU على الـ main thread عند تشغيل البرنامج. عند إحتواء البرنامج على أكثر من ثريد، فإن نظام التشغيل OS يقوم بجدولة الـ CPU للعمل على تنفيذ الأوامر الموجودة في “الثريدات”. وتختلف الطريقة بحسب مواصفات جهاز الحاسب المشغل ونظام التشغيل. لو كان الجهاز يحتوي على CPU واحد فقط، فإن نظام التشغيل يجبر هذا الـ CPU بالعمل على تنفيذ الأوامر الموجودة بالثريدات بشكل متزامن “concurrently”. مثال: لدينا 3 ثريدات، كيف يقوم الـ CPU بتنفيذها؟ في الحقيقة، تختلف الطريقة المتبعة من نظام تشغيل إلى آخر ولكن أغلب الأنظمة الحديثة تتبع طريقة round-robin algorithm، وتعتمد هذه الطريقة على المساواة في الأوقات المعطاة لكل ثريد time slices. الشكل التالي يوضح الطريقة (بافتراض كل ثريد يحتوي على 4 أوامر برمجية): ∎–∎-………………-∎–∎ ………∎–∎-………………-∎–∎ ………………∎–∎-………………-∎–∎   كما يُلاحظ في الشكل السابق، قام نظام التشغيل بجدولة الـ CPU على جميع الثريدات لتشغيلها جميعاً بشكل متزامن. قام الـ CPU بتنفيذ أمرين من الثريد الأولى ثم قام بالانتقال “context-switching” إلى الثريد الثانية وقام بتنفيذ أمرين، ثم انتقل إلى الثريد الثالثة وقام بتنفيذ أمرين أيضاً، ثم عاد إلى الثريد الأولى ونفذ أمرين … وهكذا. في الحقيقة، ليس هناك طريقة ثابتة متبعة من قبل أنظمة التشغيل لتنفيذ الثريدات. في المثال السابق مثلاً، ربما سيقوم نظام التشغيل بتنفيذ الثريد الأول كاملاً ثم ينتقل إلى البقية. ربما أيضاً يقوم بتنفيذ الثريد الثاني أو الثالث قبل البقية. حتى أن الترتيب أيضاً سيختلف مع كل مرة تقوم فيها بتشغيل البرنامج. الترتيب غير مهم في أغلب الحالات، ولكن إن لزم ترتيبها، توجد عدة طرق للتحكم بالترتيب، ومنها جعل ثريد معين بأولوية أعلى للتنفيذ، أو تشغيل ثريد معين عند الانتهاء من تنفيذ ثريد آخر. عندما يحتوي جهاز الحاسب على أكثر من CPU واحد، أو يحتوي الـ CPU الواحد على عدة أنوية “cores”، يتم التنفيذ بشكل متوازي “in parallel”. لنطبق المثال السابق ولكن هذه المرة مع وجود CPU ثنائي النواة:∎–∎–∎–∎……… ∎–∎-………-∎–∎ ………∎–∎–∎–∎ مع وجود CPU ثنائي النواة، زادت سرعة التنفيذ إلى الضعف (قل زمن التنفيذ إلى النصف)! أيضاً، الترتيب هنا مجهول ومتغير ويختلف في كل مرة يتم فيها تشغيل البرنامج. لنأخذ مثال بسيط لتتضح الصورة بشكل أكبر:أ/ مطعم يقدم وجبات سريعة. يوجد به عامل واحد فقط يقوم بتقديم الطعام إلى الزبائن. الزبائن عادةً يقفون في صف واحد وكل واحد ينتظر دوره. هذا مثال لجهاز حاسب (مطعم) به CPU واحد (العامل) وثريد وحدة من الأوامر البرمجية (صف واحد من الزبائن). ب/ مطعم يوجد به عامل واحد مشابه للمطعم السابق، ولكن هذه المرة الزبائن يقفون على 3 صفوف والعامل يقوم بخدمة الصفوف الثلاثة بأسلوب الـ round-robin. هذا مثال لجهاز حاسب (مطعم) به CPU واحد (العامل) و 3 ثريدات من الأوامر البرمجية (3 صفوف من الزبائن). ج/ مطعم يوجد به عاملان، والزبائن تقف في 3 صفوف. هذا مثال لجهاز حاسب (مطعم) به 2 من الـ CPU أو CPU ثنائي النواة (العاملان) و3 ثريدات من الأوامر البرمجية (3 صفوف من الزبائن). هنا الإنتاجية ستزيد :) ملحوظة أخيرة وهي بأن نظام التشغيل يحتوي على الآلاف من الثريدات ونظام التشغيل يقوم بجدولة الـ CPUs المتوفرة لتنفيذها، وليس برنامجك وحده من يتم خدمته من قبل الـ CPUs :)
  3. أعتقد أن الأخ حسن قد وجد حل لهذه المشكلة هنا: http://www.arabteam2000-forum.com/index.php?showtopic=209165
  4. موقع Area 51 هو موقع تابع لشبكة StackExchange العالمية. في هذا الموقع يمكن تقديم مقترحات لإفتتاح موقع أسئلة/إجابات في أي مجال كان. طبعاً لإفتتاح الموقع، لابد أن يمر بـ 3 مراحل: define و commit ثم beta. عند إنشاء الموقع، سيحتوي على جميع الخصائص والمميزات الخاصة بالمواقع الأخرى من نفس الشبكة كموقع stackoverflow مثلاً. قمت بتقديم مقترح لإنشاء موقع شبيه بموقع stackoverflow ولكن باللغة العربية. stackoverflow هو موقع أسئلة/إجابات في شتى مجالات البرمجة وتطوير البرمجيات. حالياً الموقع في حالة define ويحتاج إلى 60 followers و 40 سؤال بـ 10 up-votes أو أكثر. لذلك أتمنى من الجميع المشاركة في الموقع ابتداءاً بالضغط على زر following ووضع الايميلز أعتذر إن كان هذا الموضوع يتعارض مع سياسة المنتدى، ولكن هدفي من الموضوع هو نشر الفائدة للمجتمع التقني العربي. رابط المقترح: http://area51.stackexchange.com/proposals/39345/stackoverflow-in-arabic
  5. ما فائدة serialVersionUID؟

    السلام عليكم ورحمة الله وبركاته دائماً ما أشاهد هذا المتغير موجود في بعض الكلاسات وخصوصاً المتعلقة بالـ Swing، فماذا يعني؟ قرأت أنه يتعلق بشيء يسمى التوافقية لكن لم أفهم المعنى وأتمنى أن أجد المعنى في هذا الموضوع .. وشكراً
  6. مشكل النسح و اللصق في JTextField

    java.awt.datatransfer.StringSelection strsel = new java.awt.datatransfer.StringSelection(textField.getText()); java.awt.datatransfer.Clipboard clbrd = java.awt.Toolkit.getDefaultToolkit().getSystemClipboard(); clbrd.setContents(strsel, strsel);
  7. مشكل action

    تقوم بعمل thread خاص بالـ swing عملت لك مثال بسيط، يقوم بتوليد أرقام عشوائية من نوع int وتتراوح قيمتها ما بين 0 و 100: import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.util.concurrent.Executor; import java.util.concurrent.Executors; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.SwingUtilities; import javax.swing.SwingWorker; import javax.swing.Timer; public class Main extends JFrame { private int s = 0; private JLabel label; private Executor executor = Executors.newCachedThreadPool(); private Timer timer; private int delay = 1000; // every 1 second public Main() { super("أرقام عشوائية"); setDefaultCloseOperation(EXIT_ON_CLOSE); setSize(300, 65); label = new JLabel("" + s); setLayout(new FlowLayout()); getContentPane().add(label, "Center"); prepareStartShedule(); setVisible(true); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { new Main(); } }); } private void prepareStartShedule() { timer = new javax.swing.Timer(delay, startCycle()); timer.start(); } private Action startCycle() { return new AbstractAction() { @Override public void actionPerformed(ActionEvent e) { executor.execute(new MyTask()); } }; } private class MyTask extends SwingWorker<Void, Void> { @Override protected Void doInBackground() throws Exception { doTasksInBackground(); return null; } } private void doTasksInBackground() { generateRandomS(); label.setText("" + s); } private void generateRandomS() { s = (int)(Math.random() * 101); System.out.println(s); // to see it through the console } }
  8. مشكل action

    تقصد بأنك تريد مراقبة المتغير s وعندما يتغير يقوم البرنامج بتغيير نص الـ label بشكل مستمر؟ إذا كان كذلك يمكنك استخدام SwingWorker
  9. ترآكيب البيانات والخوارزميات في الجآفآ

    بالانغليزي: Data Structure & Algorithms
  10. نزلت النسخة أخيراً: http://msdn.microsoft.com/ar-sa/windows/apps/br229516/
  11. مشكلة في التعامل مع الحزمة htmlunit

    تعاملت مع هذه المكتبة في الآونة الأخيرة، وصراحة أبهرت بعملها جرب هذا الكود: WebClient webClient = new WebClient(BrowserVersion.INTERNET_EXPLORER_8); // There are many browsers available and you can choose any HtmlPage currentPage = null; try { currentPage = (HtmlPage) webClient.getPage("http://www.google.com"); } catch(Exception e) { // Cannot get the page } System.out.println(currentPage.getTitleText());
  12. مشلكة في مسئلة متعلقة ب (boolean data type)

    نعم من الممكن استخدام bitwise operators String[] arr = {"You have entered an invalid value", Double.toString(radius*radius*Math.PI)}; String answer = arr[- (int) Math.ceil(radius) >>> 31]; أما إذا أردت تضمين الصفر، يمكنك استخدام الآتي: String[] arr = {Double.toString(radius*radius*Math.PI), "You have entered an invalid value"}; String answer = arr[(int) Math.ceil(radius) >>> 31];
  13. السلام عليكم ورحمة الله وبركاته المعروف في الجافا بأنها تقوم بتمرير القيم فقط pass-by-value وليس في مثل بعض اللغات الأخرى pass-by-reference لكن في المثال التالي: public class test { public static void main(String[] args) { int temp = 1; editPrimitive(temp); System.out.println(temp); // prints 1 int[] temp_array = {1}; editObject(temp_array); System.out.println(temp_array[0]); // prints 2 } public static void editPrimitive(int n) { n = 2; } public static void editObject(int[] n) { n[0] = 2; } } عندما قمنا بتمرير primitive لم تتعدل القيمة، وهذا متوقع لأن التمرير تم بالقيمة pass-by-value، ولكن عندما قمنا بتمرير الـ array وهو object تعدلت القيمة!! أليس صحيحاً أن الجافا لا يمرر المرجع pass-by-reference؟ أتمنى أن أجد إجابة مرضية لتساؤلاتي، وشكراً
  14. تشغيل ملف

    Desktop.getDesktop().open(new File(filepath)); أو Runtime.getRuntime().exec("rundll32 SHELL32.DLL,ShellExec_RunDLL "+ filepath); والطريقة الثانية تعمل على الويندوز فقط