الواقع الزائد (Augmented Reality) هو مجال في أبحاث الحاسوب يتناول الجمع بين معلومات العالم الحقيقي و بيانات من العالم الإفتراضي حيث يتم دمج الأجسام الرسومية الناتجة عن الحاسوب بالتصوير المرئي الواقعي بشكل آني.
يوليو 16، 2009
يوليو 11، 2009
أرشيف المدونات و المواقع العربية التقنية
لم يعد من الممكن أن أدرج كل المدونات و المواقع على القائمة. التدوين العربي ينموا كما و نوعا :)
لذلك سأخصص هذه التدوينة كمرجع يضم كل المدونات و المواقع التي صادفتها و وجدت محتواها قيم (في نظري)
و حتى أوفر الوقت على من يريد أن يتابعها من خلال قارئ الخلاصات (RSS) يمكن تحميل ملف OPML الذي يضم كل روابط الخلاصات، ثم إستيراده من خلال القارئ.
ملاحظة: الروابط المعلمة باللون البرتقالي هي آخر المدونات و المواقع المدرجة. آخر تحديث كان بتاريخ 11/07/2009
مدونات تقنية متخصصة:
مواقع و منتديات تقنية متخصصة:
مدونات شخصية أو متخصصة في مجالات أخرى:
مدونات و مواقع بلغات أجنبية:
لذلك سأخصص هذه التدوينة كمرجع يضم كل المدونات و المواقع التي صادفتها و وجدت محتواها قيم (في نظري)
و حتى أوفر الوقت على من يريد أن يتابعها من خلال قارئ الخلاصات (RSS) يمكن تحميل ملف OPML الذي يضم كل روابط الخلاصات، ثم إستيراده من خلال القارئ.
ملاحظة: الروابط المعلمة باللون البرتقالي هي آخر المدونات و المواقع المدرجة. آخر تحديث كان بتاريخ 11/07/2009
مدونات تقنية متخصصة:
- مدونة برامج مفتوحة المصدر
- مدونة فضفضة مبرمج
- مدونة مدونة محمد
- مدونة أخبار وفوائد تقنية
- مدونة أبو حبيبة جرافيك
- مدونة أزهار قلبي
- مدونة نواف
- مدونة Arab Techies
- مدونة ChArLoK_16
- مدونة B!n@ry-z0ne
- مدونة Another Freak !
- مدونة المعتصم بالله
- مدونة رفيق تــك
- مدونة تكنوإعلام
- مدونة قابلية الاستخدام
- مدونة تعلم كيف تنشئ مدونة
- مدونة Ubuntu in arabic
- مدونة WiiPod
- مدونة نانونيّة
- مدونة حواديت شبكات
- مدونة حسام
- مدونة Djug
- مدونة Data_Sniper
- مدونة Amaiko
- مدونة Fez-Soft
- مدونة Abozeyd
- مدونة daif.net->php
- مدونة بلندر و بايثون
- مدونة سماتكس
- مدونة طارق التقنية
- مدونة فراس
- مدونة meGenius
- مدونة ArabiCms
- مدونة بوابة الحرية
- مدونة محمد المشيقح لأمن المعلومات
- مدونة عبد المجيد المحارب لأمن المعلومات
- مدونة وليد الروضان لأمن المعلومات
- مدونة لغة روبي
- مدونة عالم أوبونتو
- مدونة Wordpress بالعربي
- مدونة WPaon
- مدونة Lazarus Tutorial
- مدونة Adur [ IT ] Team
- باحث عن المعرفة
- مدونة الدعم العربي للأبونتو
- مدونة JavaNux
- مدونة اصدقاء الثعلب
- مدونة كلام ثنائي
- مدونة مبدع
- مدونة الأنـوار
- مدونة كريم
- مدونة مطورو عُـمان
- مدونة CssGuy
- مدونة أوبجكت
- مدونة Abouo'of
- مدونة Ahmed Youssef
- مدونة Amaiko
- مدونة Arab Geek
- مدونة ماك
- مدونة أحمد ملياني
- مدونة Bruce
- مدونة CSSBit
- مدونة Mutation
- مدونة skeleton eel
- مدونة Technology is life style
- مدونة Teedoz
- مدونة أبجدية التقنية
- مدونة أمين 27
- مدونة أنس طويلة
- مدونة الأباتش
- مدونة الصادق
- مدونة المصادر المفتوحة الآن
- مدونة المعاصر
- مدونة تصميم مصري
- مدونة رحلة ضوء
- مدونة سلوى
- مدونة طريق الابونتو
- مدونة عالم التقنية
- مدونة عبد الملك الثاري
- مدونة لينوكس الجزائر
- مدونة مبرمج من جرش
- مدونة محمد بشير النعيمي
- مدونة ناهض
- مدونة هالة ديب
- مدونة يوسف
- مدونة يُوسِــف
- مدونة عالم الإبداع
- مدونة الشبح
- مدونة Root Jerais
- مدونة Web 2.0
- مدونة What I Know
- مدونة نيارت
- مدونة عبد المهيمن
- مدونة SBR للبرمجة
مواقع و منتديات تقنية متخصصة:
- منتدى أوبنتو العربي
- نادي طالبات الحاسب
- منتدى موج
- منتدى عرب Wordpress
- منتدى الدروس العربية (البرمجة و التصميم)
- منتدى PHP
- منتدى Programming Freaks
- منتدى الفريق العربي للبرمجة
- منتدى فجوال سي للعرب
- منتدى مجتمع لينوكس العربي
- موقع دروس php بالفيديو
- موقع رحى التقنية
- موقع دروس عربية
- موقع Arab Techies
- موقع أوبونتو بالعربي - الموسوعة
- موقع دروس HTML وCSS
- موقع لينكس العرب
- موقع "أعجوبة"
- موقع GadgetsArabia
- موقع Qt العربي
- موقع أرسن
- موقع البوابة العربية للأخبار التقنية
- موقع العموميات العربية
- موقع المشروع لمطوري المواقع
- موقع سولاف
- موقع شبكة لينوكس العربية
- موقع وادي التقنية
- موقع وثائق لينوكس العربية
- موقع كُتب
- موقع دنيا الأمل
- مشروع "عرب أيز"
مدونات شخصية أو متخصصة في مجالات أخرى:
- مدونة الحياة
- مدونة الحاتمي
- مدونة نشأت
- مدونة الموارد البشرية
- مدونة جرافيكس
- مدونة نقطة بداية
- مدونة ~Muneera’s World~
- مدونة أقلام: ستغيرك
- مدونة ابن الشمال
- مدونة خلد حسني
- مدونة جدد حياتك
- مدونة أبو هارون
- مدونة شبايك
- مدونة مختار الجندي
- مدونة مختار الجندي (السابقة)
- مدونة صفر واحد
- مدونة هل تعلم؟
- مدونة أسامة
- موقع زراعة نت
- مدونة HimtoX
- مدونة TopArt2000
- مدونة إحسان
- مدونة الإمبراطورية المفقودة
- مدونة الفوائد
- مدونة رشيد
- مدونة عونيات
- مدونة كركور
- مدونة محمد
- موقع أفكار
- موقع المجموعة الليبية للبرمجيات الحرة و المفتوحة المصدر
- موقع المعمل اللاسلكي
- موقع الهندسة المعلوماتية في سوريا
- موقع قياسي
- موقع مشروعات عربية
- موقع نادي إقرأ
- موقع Alsmary
- موقع أرقام: أخبار الأسواق المالية و الشركات
مدونات و مواقع بلغات أجنبية:
يوليو 04، 2009
الحصيلة التقنية: 07/2009 - أ
أهم الإصدارات:
تم إصدار بايثون Python 3.1. و يحمل خصائص و وظائف جديدة يمكن الإطلاع عليها هنا. و هذا الإصدار يعوض الإصدار السابق 3.0 بحيث أن هذا الأخير لن يحظى بأية صيانة أو تصحيح في المستقبل.
تم إصدار كيوت Qt 4.5.2 الذي حصل على تصحيحات عديدة و بعض التحسينات الجديدة. و هو أول إصدار حظي بمساهمة مجتمع كيوت بعد أن تمت إتاحة المجال لمشاركات الأفراد في تحسين الشفرة. كما تم إصدار كيوت كرييَتور Qt Creator 1.2 الذي حصل على مزايا جديدة تجعل منه بئة أكثر جاذبية للمطورين بـ C++/Qt.
كما تم عرض و توفير تقنية جديدة ما زالت قيد التطوير من مختبرات كيوت إسمها كيومل QML، و هي تقنية تسمح بتطوير واجهة المستخدم عن طريق الوصف بإستخدام لغة قريبة من XML و JScript (على ما يبدو لي). و هذه التقنية شبيهة بتقنية XAML لمايكروسوفت (على ما أعتقد).
شاهد هذا الفيدو لتأخد فكرة:
المتصفح فايرفوكس Firefox 3.5 صدر أخيرا، يتميز بدعم أفضل للمعايير الموحدة للتصميم المواقع و أدائه تحسن مقارنة مع الإصدار 3.0. يمكن الإطلاع على مزاياه الأخرى هنا (مشكورين على تلك التغطية).
ملاحظة: هذا الإصدار ما زال يعاني من بعض العلل في التشفير و محرك الجافاسكريبت و عرضه للغة العربية عند الإدخال، لذلك يفضل أن تنتظروا بعض الوقت حتى الإصدار التصحيحي 3.5.1 أو 3.5.2
بالنسبة لقواعد البيانات تم إصدار MySQL 5.1.36 و هو إصدار تصحيحي. كما تم إصدار Workbench 5.1.16 الذي يسمح بتصميم قواعد البينات و تسييرها بطريقة مرئية، و هو متوفر حاليا على منصة جنو/لينوكس و ماك بالإضافة إلى ويندوز.
كما تم إصدار PostgreSQL 8.4 الذي ضم تحسينات مهمة و مزايا جديدة متعلقة بالأداء و الأمان. يمكن الإطلاع على ذلك هنا في جدول المقارنات.
بالنسبة للغة البرمجة php تم إصدار 5.3.0 و ضم أكثر من 140 تصحيح بالإضافة مزايا و وظائف جديدة.
الآلة الإفتراضبة VirtualBox 3.0 ضمت مزايا جديدة يستفاد منها في الأنظمة ذات قدرات الإستخدامات المتوازية، بالإضافة إلى دعم أولي لمكتبة الرسوميات DirectX 8/9 و تسريعها بواسطة معالج الرسوميات لبطائق العرض.
ثم بيئة التطوير NetBeans 6.7 بإصدارها الجديد التي تضم المزيد من التحسينات و دعم لأهم لغات البرمجة مع تحسينات في الأداء العام.
إصدارات أخرى:
نواة لينوكس Linux 2.6.30.1 (إصدار تصحيحي)
سامبا Samba 3.4 لمشاركة الملفات على الشبكة.
جينوم Gnome 2.26.3 و هي وجهة مكتبية لمنصة جنو/لينوكس (إصدار تصحيحي)
الحزمة المكتبية KOffice 2.0.1. (إصدار تصحيحي)
إصدارات مترقبة:
خادم الرسومات X.org 7.5
برنامج البريد ThunderBird 3.0
الواجهة المكتبية لمنصة جنو/لينوكس كيدي 4.3 KDE
برنامج التصميم و الرسومات الثلاثية الابعاد Blender 2.5
بالنسبة لي:
مشاغلي على وشك أن تنتهي لأتفرغ لتعلم و تجربة أشياء جديدة. في الوقت الحالي أصمم موقع يدويا بإستخدام XTHML/PHP معتمدا على ما تعلمته قبل سنتين.
تجربتي مع Drupal 6.x كانت جيدة و هو يناسبني. لم أتعلم الشيء الكبير بعد لكن سأخصص له المزيد من الوقت في الفترة المقبلة.
علي أن أجرب إستخدام PyQt 4 مع قواعد البينات و عرض محتواها و هل تدعم الترابط مع مكونات الواجهة بشكل يسهل و يسرع تطوير البرمجيات.
لا أستطيع أن أخرج ruby من تفكيري لأن هذه اللغة جد معبرة و كأنك تصف أو تتحدث مع الحاسوب على أساس انه يفهم ما تقول.
سأقوم بكتابة الجزء الثاني من مشاكل المشروع Euler Project و بكتابة تدوينة جديدة لتعليم بايثون للمبتدئين. و إذا سار كل شيء على ما يرام سيبقى إهتمام المدونة ببايثون لمدة طويلة و ستشمل تقريبا كل ما أفعل أو أتعلم ببايثون.
ملاحظة بخصوص ما أكتب حول مايكروسوفت: قد يُفهم أني إنسان حاقد على مايكرسوفت و أني أكره ويندوز و مستخدميه. في الواقع لا أهتم لمايكرسوفت و لا لغيرها و لا يهمني نجاحها أو فشلها. تماما كما لا يهمني إذا إستخدم كل سكان الأرض جنو/لينوكس لأنه لن يضيف لي شيء (عدى كثرة المساهمين في تطويره :) ). و لن يفيد الكلام في هذا بشيء أكثر من كونه مجرد توعية و تحسيس للأخر. أنا متأكد أن البرمجيات الحرة و المفتوحة المصدر هي المستقبل و أسعى إلى مشاركة ما أعرف هنا من خلال هذه المدونة :)
تم إصدار بايثون Python 3.1. و يحمل خصائص و وظائف جديدة يمكن الإطلاع عليها هنا. و هذا الإصدار يعوض الإصدار السابق 3.0 بحيث أن هذا الأخير لن يحظى بأية صيانة أو تصحيح في المستقبل.
تم إصدار كيوت Qt 4.5.2 الذي حصل على تصحيحات عديدة و بعض التحسينات الجديدة. و هو أول إصدار حظي بمساهمة مجتمع كيوت بعد أن تمت إتاحة المجال لمشاركات الأفراد في تحسين الشفرة. كما تم إصدار كيوت كرييَتور Qt Creator 1.2 الذي حصل على مزايا جديدة تجعل منه بئة أكثر جاذبية للمطورين بـ C++/Qt.
كما تم عرض و توفير تقنية جديدة ما زالت قيد التطوير من مختبرات كيوت إسمها كيومل QML، و هي تقنية تسمح بتطوير واجهة المستخدم عن طريق الوصف بإستخدام لغة قريبة من XML و JScript (على ما يبدو لي). و هذه التقنية شبيهة بتقنية XAML لمايكروسوفت (على ما أعتقد).
شاهد هذا الفيدو لتأخد فكرة:
المتصفح فايرفوكس Firefox 3.5 صدر أخيرا، يتميز بدعم أفضل للمعايير الموحدة للتصميم المواقع و أدائه تحسن مقارنة مع الإصدار 3.0. يمكن الإطلاع على مزاياه الأخرى هنا (مشكورين على تلك التغطية).
ملاحظة: هذا الإصدار ما زال يعاني من بعض العلل في التشفير و محرك الجافاسكريبت و عرضه للغة العربية عند الإدخال، لذلك يفضل أن تنتظروا بعض الوقت حتى الإصدار التصحيحي 3.5.1 أو 3.5.2
بالنسبة لقواعد البيانات تم إصدار MySQL 5.1.36 و هو إصدار تصحيحي. كما تم إصدار Workbench 5.1.16 الذي يسمح بتصميم قواعد البينات و تسييرها بطريقة مرئية، و هو متوفر حاليا على منصة جنو/لينوكس و ماك بالإضافة إلى ويندوز.
كما تم إصدار PostgreSQL 8.4 الذي ضم تحسينات مهمة و مزايا جديدة متعلقة بالأداء و الأمان. يمكن الإطلاع على ذلك هنا في جدول المقارنات.
بالنسبة للغة البرمجة php تم إصدار 5.3.0 و ضم أكثر من 140 تصحيح بالإضافة مزايا و وظائف جديدة.
الآلة الإفتراضبة VirtualBox 3.0 ضمت مزايا جديدة يستفاد منها في الأنظمة ذات قدرات الإستخدامات المتوازية، بالإضافة إلى دعم أولي لمكتبة الرسوميات DirectX 8/9 و تسريعها بواسطة معالج الرسوميات لبطائق العرض.
ثم بيئة التطوير NetBeans 6.7 بإصدارها الجديد التي تضم المزيد من التحسينات و دعم لأهم لغات البرمجة مع تحسينات في الأداء العام.
إصدارات أخرى:
نواة لينوكس Linux 2.6.30.1 (إصدار تصحيحي)
سامبا Samba 3.4 لمشاركة الملفات على الشبكة.
جينوم Gnome 2.26.3 و هي وجهة مكتبية لمنصة جنو/لينوكس (إصدار تصحيحي)
الحزمة المكتبية KOffice 2.0.1. (إصدار تصحيحي)
إصدارات مترقبة:
خادم الرسومات X.org 7.5
برنامج البريد ThunderBird 3.0
الواجهة المكتبية لمنصة جنو/لينوكس كيدي 4.3 KDE
برنامج التصميم و الرسومات الثلاثية الابعاد Blender 2.5
بالنسبة لي:
مشاغلي على وشك أن تنتهي لأتفرغ لتعلم و تجربة أشياء جديدة. في الوقت الحالي أصمم موقع يدويا بإستخدام XTHML/PHP معتمدا على ما تعلمته قبل سنتين.
تجربتي مع Drupal 6.x كانت جيدة و هو يناسبني. لم أتعلم الشيء الكبير بعد لكن سأخصص له المزيد من الوقت في الفترة المقبلة.
علي أن أجرب إستخدام PyQt 4 مع قواعد البينات و عرض محتواها و هل تدعم الترابط مع مكونات الواجهة بشكل يسهل و يسرع تطوير البرمجيات.
لا أستطيع أن أخرج ruby من تفكيري لأن هذه اللغة جد معبرة و كأنك تصف أو تتحدث مع الحاسوب على أساس انه يفهم ما تقول.
سأقوم بكتابة الجزء الثاني من مشاكل المشروع Euler Project و بكتابة تدوينة جديدة لتعليم بايثون للمبتدئين. و إذا سار كل شيء على ما يرام سيبقى إهتمام المدونة ببايثون لمدة طويلة و ستشمل تقريبا كل ما أفعل أو أتعلم ببايثون.
ملاحظة بخصوص ما أكتب حول مايكروسوفت: قد يُفهم أني إنسان حاقد على مايكرسوفت و أني أكره ويندوز و مستخدميه. في الواقع لا أهتم لمايكرسوفت و لا لغيرها و لا يهمني نجاحها أو فشلها. تماما كما لا يهمني إذا إستخدم كل سكان الأرض جنو/لينوكس لأنه لن يضيف لي شيء (عدى كثرة المساهمين في تطويره :) ). و لن يفيد الكلام في هذا بشيء أكثر من كونه مجرد توعية و تحسيس للأخر. أنا متأكد أن البرمجيات الحرة و المفتوحة المصدر هي المستقبل و أسعى إلى مشاركة ما أعرف هنا من خلال هذه المدونة :)
يونيو 29، 2009
ماهو الموقف من مونو Mono بكل حيادية و موضوعية؟
مند الإعلان عن التخلي عن برنامج Tomboy (الذي يعتمد على إطار العمل البرمجي مونو Mono) و تعويضه ببرنامج غنوت Gnote (الذي يعتمد على سي++) في الإصدار القادم من توزيعة فيدورا، و الأخبار تملأ الإنترنت بمخاوف البعض من مونو و المخاطر المستقبلية المتعلقة بالملكية الفكرية في حالة تم الإعتماد عليه لتطوير البرمجيات الحرة.
فما هو وضع مونو Mono من كل المخاوف و المخاطر التي تحوم حوله بكل موضوعية و حيادية؟
أولا، ما هو مونو؟
مونو عبارة عن إطار عمل برمجي حر و مفتوح المصدر صمم خصيصا ليكون بديل مفتوح المصدر للإطار البرمجي دوت نت (Net Framework) على منصة جنو/لينوكس، يونكس، ماك و حتى ويندوز.
و أين تكمن المخاوف؟
تقنية دوت نت هي من إبتكار و تطوير مايكروسوفت Microsoft و هذا يجعلها مالكة لتلك المنصة و بالتالي فهي تملك الأحقية في إمتلاك براءات الإختراع (patents). و فعليا في حوزتها العديد منها.
غير أن مايكروسوفت قامت في صيف 2001 بطلب إجتياز و إعتبار لغة سي شارب C# و اللغة العامة للبنية التحتية (Common Language Infrastructure) كمعيار قياسي موحد و معترف به من طرف ECMA و ISO. و للحصول على هذا الإعتراف يجب توفير التقنية بشروط معقولة وغير تمييزية، و فعلا هذا هو ما حصل. الشيء الذي يسمح للأخرين بإمكانية تطوير برمجيات تستخدم هذه المعايير دون تخوف.
لكن
الإطار البرمجي دوت نت يتكون من أجزاء أخرى لا ينطبق عليها هذا المعيار كـ:
أين مونو من كل هذا؟
في البداية كان هذف مونو هو تطوير إطار عمل متوافق للمعيار القياسي الموحد لـدوت نت (ECMA/ISO). و قد تحقق هذا الهذف و هو مغطى بتصريح يسمح بإستخدامه من طرف اي شخص و لأي غاية.
اما اليوم فقد تمكن مونو من توفير دعم للأجزاء الثلاثة الاساسية الأخرى (WinForms و ADO.Net و ASP.Net) بالإضافة إلى مكونات أخرى (برمجيات و مقاييس مفتوحة المصرد و موحدة) كـ OpenGL و GTK و Mozilla.
فما هو وضع مونو Mono من كل المخاوف و المخاطر التي تحوم حوله بكل موضوعية و حيادية؟
أولا، ما هو مونو؟
مونو عبارة عن إطار عمل برمجي حر و مفتوح المصدر صمم خصيصا ليكون بديل مفتوح المصدر للإطار البرمجي دوت نت (Net Framework) على منصة جنو/لينوكس، يونكس، ماك و حتى ويندوز.
و أين تكمن المخاوف؟
تقنية دوت نت هي من إبتكار و تطوير مايكروسوفت Microsoft و هذا يجعلها مالكة لتلك المنصة و بالتالي فهي تملك الأحقية في إمتلاك براءات الإختراع (patents). و فعليا في حوزتها العديد منها.
غير أن مايكروسوفت قامت في صيف 2001 بطلب إجتياز و إعتبار لغة سي شارب C# و اللغة العامة للبنية التحتية (Common Language Infrastructure) كمعيار قياسي موحد و معترف به من طرف ECMA و ISO. و للحصول على هذا الإعتراف يجب توفير التقنية بشروط معقولة وغير تمييزية، و فعلا هذا هو ما حصل. الشيء الذي يسمح للأخرين بإمكانية تطوير برمجيات تستخدم هذه المعايير دون تخوف.
لكن
الإطار البرمجي دوت نت يتكون من أجزاء أخرى لا ينطبق عليها هذا المعيار كـ:
- WinForms: الذي يوفر الأدوات و المكونات المسؤولة عن توفير الواجهة الرسومية.
- ADO.Net: الذي يوفر مكونات التواصل مع قواعد و خدمات الباينات.
- ASP.Net: الذي يوفر مكونات تصميم المواقع الدينامكية و خدمات و برمجيات النت.
- باﻹضافة إلى WPF, WCF, WF و LINQ
أين مونو من كل هذا؟
في البداية كان هذف مونو هو تطوير إطار عمل متوافق للمعيار القياسي الموحد لـدوت نت (ECMA/ISO). و قد تحقق هذا الهذف و هو مغطى بتصريح يسمح بإستخدامه من طرف اي شخص و لأي غاية.
اما اليوم فقد تمكن مونو من توفير دعم للأجزاء الثلاثة الاساسية الأخرى (WinForms و ADO.Net و ASP.Net) بالإضافة إلى مكونات أخرى (برمجيات و مقاييس مفتوحة المصرد و موحدة) كـ OpenGL و GTK و Mozilla.
و بما أن تلك الأجزاء الأخرى الخاضعة لمايكروسوفت لا يوجد عليها أي ضمان فإن إستخدامها لتطوير البرمجيات يحمل مجازفة يجب و ضعها في الحسبان.
لماذا تعتبر مجازفة؟
لأن مايكروسوفت كأية شركة اخرى تقوم بأبحاث و تنفق الأموال لتطوير التقنيات الجديدة/المبتكرة، و من الطبيعي أن تطالب بالحصول على براءات إختراع من مكتب الولايات المتحدة الامريكية لبراءات الإختراع و العلامات التجارية (USPTO) أو حتى من المكاتب المخصص لذلك في بلدان أجنبية.
و فور حصول أي شركة على براءة إختراع يصبح من حقها ترخيص تلك التقنية لأية جهة أخرى، كما يمكن أن تلاحق أية جهة طورت تقنية مطابقة لها. و مدة إمتلاكها هو 20 سنة!
لكن هل هذا دليل نوايا مايكروسوفت؟
أكدت مايكرسوفت في أكثر من مناسبة انها تريد إستخدام قانوني لملكيتها الفكرية و انها تفضل ترخيصها لصالح إعلاء قيمة و مردود الشركة بالنسبة لمالكي أسهم مايكروسوفت.
كما دخلت في نزاعات قضائية في أكثر من مناسبة و كانت آخرها مع شركة طوم طوم حول إنتهاك الملكية الفكرية بخصوص طريقة حفظ الملفات بإستخدام نظام تسير الملفات FAT. و هذا ما دفع مطويري لينوكس إلى إدخال تعديلات على النواة 2.6.30 لتفادي أي هجوم مسقبلي بخصوص ذلك.
نظام تسيير الملافات FAT يعتبر بديهي و قديم و إستخدامه أصبح محدود، و لكن ورغم ذلك قامت مايكروسوفت بالدفاع عن ملكيتها الفكرية.
ما هي الخلاصة؟
هل ستنتهي هذه الأخبار و المخاوف يوما ما؟
لن تزول المخاوف حتى أن تقوم مايكروسوفت بإحدى الخطوات التالية:
صفحة الملكية الفكرية و الترخيص لمايكروسوفت.
لماذا لا يجب علة البرمجيات الحرة ان تعتمد على مونو أو سي شارب C#
مشروع مونو.
لماذا تعتبر مجازفة؟
لأن مايكروسوفت كأية شركة اخرى تقوم بأبحاث و تنفق الأموال لتطوير التقنيات الجديدة/المبتكرة، و من الطبيعي أن تطالب بالحصول على براءات إختراع من مكتب الولايات المتحدة الامريكية لبراءات الإختراع و العلامات التجارية (USPTO) أو حتى من المكاتب المخصص لذلك في بلدان أجنبية.
و فور حصول أي شركة على براءة إختراع يصبح من حقها ترخيص تلك التقنية لأية جهة أخرى، كما يمكن أن تلاحق أية جهة طورت تقنية مطابقة لها. و مدة إمتلاكها هو 20 سنة!
لكن هل هذا دليل نوايا مايكروسوفت؟
أكدت مايكرسوفت في أكثر من مناسبة انها تريد إستخدام قانوني لملكيتها الفكرية و انها تفضل ترخيصها لصالح إعلاء قيمة و مردود الشركة بالنسبة لمالكي أسهم مايكروسوفت.
كما دخلت في نزاعات قضائية في أكثر من مناسبة و كانت آخرها مع شركة طوم طوم حول إنتهاك الملكية الفكرية بخصوص طريقة حفظ الملفات بإستخدام نظام تسير الملفات FAT. و هذا ما دفع مطويري لينوكس إلى إدخال تعديلات على النواة 2.6.30 لتفادي أي هجوم مسقبلي بخصوص ذلك.
نظام تسيير الملافات FAT يعتبر بديهي و قديم و إستخدامه أصبح محدود، و لكن ورغم ذلك قامت مايكروسوفت بالدفاع عن ملكيتها الفكرية.
ما هي الخلاصة؟
- توفير إطار برمجي بديل لمنصة دوت نت أمر مهم لأنه يساعد على خلق توافقية أفضل بين مختلف المنصات المتواجدة و ربما قد يشجع البعض على إستخدام لينوكس أو الإنتقال إليه.
- إستخدام مونو لتطوير برمجيات بلغة السي شارب مع إستخدام واجهة رسومية مفتوحة المصدر ك GTK يبقى إختيار مناسب و لا خوف منه.
- إستخدام مونو لتعلم لغة سي شارب أو إستخدامه في تطوير البرمجيات الحرة المكملة (التي تقدم خدمات بسيطة) يبقى إختيار شخصي و لا خوف منه تقريبا لانه يسهل إستبدالها ببرمجيات أخرى في حالة نزاع.
- أي إستخدام لمونو لتطوير مكتبات و برمجيات أساسية سيتم إعتمادها لتطوير مكوانات و برمجيات أساسية كواجهة مكتبية أو حزمة مكتبية مثلا يعتبر مجازفة حقيقية قد تحمل عواقب وخيمة في المستقبل.
هل ستنتهي هذه الأخبار و المخاوف يوما ما؟
لن تزول المخاوف حتى أن تقوم مايكروسوفت بإحدى الخطوات التالية:
- ترخيص منصة دوت نت تحت رخصة حرة كـ جيبيئل GPL 3
- الإعلان بشكل رسمي أنها لن تقوم بملاحقة المبرمجين الذي يستخدمون هذه التقنيات في البرمجيات الحرة و المفتوحة المصدر.
روابط إضافية:
الأسئلة الأكثر تكرار حول ترخيص مونو.صفحة الملكية الفكرية و الترخيص لمايكروسوفت.
لماذا لا يجب علة البرمجيات الحرة ان تعتمد على مونو أو سي شارب C#
مشروع مونو.
التصنيفات :
الملكية الفكرية Intellectual Property,
براءات الإختراع Patents,
مايكروسوفت Microsoft,
مونو Mono
| ردود الأفعال : |
يونيو 24، 2009
لمحبي تبريد المعالج بالماء، لما لا تضع الحاسوب بأكمله في حوض أسماك؟
شاهد الفيديو بنفسك ليزول العجب :)
ذلك السائل يسمى بالزيت المعدني و هو غير موصل للتيار الكهربائي.
فكرة ممتعة للتخلص من اصوت المراوح و الحرارة الناتجة و لإضفاء جمالية على الحاسوب و مكان العمل :)
يونيو 21، 2009
مقارنة بين أداء بايثون و لغات البرمجة الأخرى
قضيت الفترة الأخيرة في إختبار أداء بايثون خصوصا أداء الحلاقات التسلسلية for و مقارنته بكل من روبي (Ruby)، بيئتشبي (PHP)، جنوا سي بلاس بلاس (GNU C++)، سي شارب (C#)، جافا (Java) و سكالا (Scala)
عند تعلمي لبايثون لاحظت أن مرونته و أدائه جد قويين في مجموعة من المهام، من بينها إنشاء قاموس يحتوي على 1 مليون مفتاح و قيمة في ثانية واحدة و أشياء أخرى. و أثناء حلي لمشاكل المشروع Euler Project لاحظت بعض البطء في الحلاقات التسلسلية for لكن لم أعر الأمر أي اهتمام لأن حاسوبي يعتبر من الديناصورات (P4 2.4Ghz) و عند تجربتي لنفس الكود على حاسوب آخر (Core 2 Duo 2.4Ghz) كان ينجز نفس المهمة 3 مرات أسرع.
و بعد وضعي للمشكلة رقم 5 تفضل الصديق محمد الجوهري بوضع الحل بلغة C# و عند تجربتي لحله تفاجأت من السرعة التي يتم العثور بها على الحل. قرأت الكود و جربته أكثر من مرة محاولا العثور على شيء يميزه، لكنه عادي. من هنا انطلقت رحلتي لفهم ما يجري في الحلاقات التسلسلية for في بايثون 2.6.2
الكود الاول:
في البداية كان الكود كالتالي و يستغرق 55 ثانية ليجد الحل:
هذا الكود رديء، و غيرته ليصبح كالتالي و هو يستغرق 40 ثانية:
ثم قرأت حول طرق تحسين كود بايثون و وجدت من ينصح باﻹستخدام الدوال التالية lambda, map و filter بدلا من الحلقة التسلسلية for و كانت النتيجة كالتالي:
الكود الثالث يستغرق 5 دقائق و 34 ثانية:
الكود الرابع يستغرق هو أيضا 5 دقائق و 34 ثانية:
الكود الخامس: ثم بعد ذلك قمت بإدراج الكود الثاني داخل دالة و أصبح على الشكل التالي و يستغرق 24 ثانية:
المهم ماذا يجري هنا؟ و لما كل هذا؟
بايثون يعتبر من لغات البرمجة التي تعتمد على التحديد الدينامكي أو المرن للمتغيرات (Dynamically Typed)، بمعنى أن المتغيرة a يمكن أن تحتوي على قيمة رقمية ثم تتحول لتعبر عن قيمة نصية بكل سهولة أثناء عمل البرنامج. و هذا ما يتشابه فيه كل من بايثون python، روبي ruby و بيئيتشبي php. بينما تعتمد كل من لغة سي بلاس بلاس c++ و جافا java و سي شارب c# و سكالا Scala على التحديد الثابت للمتغيرات (Statically Typed). طبعا هنا أقوم بشرح مبسط كما لم أتطرق للأفضلية لأن لكل منها (الغات) نقاط قوتها و ضعفها.
المهم هو أن هذه المرونة تتم على حساب جزء بسيط في ضعف الاداء في بعض العمليات. لكن المثير هو أن ضعف أداء الحلاقات التسلسلية for أكبر بكثير من المتوقع، فما هو السبب؟
اتضح لي فيما بعد أن الفلسفة التي يتبعها مطورو بايثون هي:
1. سهولة قراءة و وضوح الكود أهم من تعقيده لأجل تحسينه (optimization) للإستفادة من أخر جزء من الثانية.
2. هنالك قانون يسمى قانون مور (Moore's law) يقول أن كفائة العتاد تتضاعف كل 18 شهر تقريا. بمعنى أنه مع تطور العتاد سيسبح الفرق بسيطا بين الكود المُحسن و العادي.
3. و إذا كانت السرعة أولوية لا غنى عنها حينها يجب على المبرمج أن يستخدم قاعدة 90/10 بحيث يُفضل أن يكتب الجزء المسرع/المحسن بلغة C أو لغة أخرى.
النقطة المهمة التي تعجبني في مشاكل المشروع يولر Euler Project هي أن كل مشكلة تقريبا يمكن حلها بطريقة تقليدية و أخرى بإستخدام بعض الذكاء و التفكير مع مراعات أن يبقى الحل بسيطا :)
و كما قال لِيُوناردو دا فينشي (Leonardo da Vinci) "البساطة هي منتهى التعقيد"
و هذا هو ما قمت به في الحل الثاني للمشكلة رقم 5 بحيث تظهر النتيجة في جزء من الثانية.
لكن كيف هو أداء باقي لغات البرمجة الأخرى في إيجاد الحل للمشكلة رقم 5؟
1. روبي Ruby 1.8.7 أوجد الحل في دقيقتين و ثلاثين ثانية (2min 30s):
ثم بعد تعديل الحلقة التسلسلية for أوجد الحل في دقيقتين و ثانية (2min 1s)
بيئيتشبي PHP 5.2.9 أوجد الحل في 21 ثانية:
من خلال ما سبق يتضح أن php أسرع من python و ruby. و كلها تصنف كلغات ديناميكية النوعية.
لكن كيف هو أداء اللغات الثابتة النوعية ك C#, Scala و GNU C++ ؟ الجواب هو إنها فائقة السرعة مقارنة مع اللغات الديناميكية المجربة أعلاه.
بالنسبة لجنوا سي++ (GNU C++) أوجد الحل في ثاتية و نصف!:
بالنسبة لسي شارب C# أوجد الحل في ثانيتين. (بإستخدام كود الصديق محمد الجوهري)
بالنسبة لجافا (java) أوجدت الحل في ثانية و ثمانية أعشار الثانية (1.8s)
و أخيرا لغة سكالا (Scala) التي أوجدت الحل في ثانيتين و أربعة أعشار الثانية (2.4s)
كما نلاحظ فإن اللغات دات التحديد الثابت تعرض الحل في حدود ثانيتين، بينما اللغات دات التحديد الديناميكي تسغرق بعض الوقت لتصل إلى النتيجة. هذه الفرق عند إنجاز بعض المهام أو في بعض الحالات قد لا يعجب البعض، لكن في أغلب الأحيان لن تواجهوا هذا النوع من المتطلبات (السرعة أولا و أخيرا) و ستجدون في اللغات دات التحديد الديناميكي المرونة التي ستسمح لكم بتطوير برمجياتكم بسرعة أكبر و مدة أقصر. لكن إن صممت يمكن إعتبار Scala بديل أفضل لأنها تجمع بين مجموعة من المزايا و أنماط البرمجة.
الخلاصة:
1. أكتب دائما كود بسيط و تسهل قرائته.
2. الحلاقات التسلسلية for تستهلك الكثير من وقت المعالج، و يمكن تحسينها بإتباع بعض النصائح.
3. إدا كانت السرعة جد ضرورية في منطقة معينة من برنامجك حينها قم ببرمجة ذلك الجزء بلغة سي أو سي ++
4. سيحصل بايثون على آلة إفتراضية محسنة (LLVM) ستجعل أداءه مشابه للغة سي و سي++
تحديث 1: قمت بتجربة الكود الخامس بإستخدام الإصدار الجديد لبايثون 3.1 الذي توصل إلى الحل في 32 ثانية. (مازل أبطأ في هذا الإختبار لكن أفضل من الإصدار 3.0)
عند تعلمي لبايثون لاحظت أن مرونته و أدائه جد قويين في مجموعة من المهام، من بينها إنشاء قاموس يحتوي على 1 مليون مفتاح و قيمة في ثانية واحدة و أشياء أخرى. و أثناء حلي لمشاكل المشروع Euler Project لاحظت بعض البطء في الحلاقات التسلسلية for لكن لم أعر الأمر أي اهتمام لأن حاسوبي يعتبر من الديناصورات (P4 2.4Ghz) و عند تجربتي لنفس الكود على حاسوب آخر (Core 2 Duo 2.4Ghz) كان ينجز نفس المهمة 3 مرات أسرع.
و بعد وضعي للمشكلة رقم 5 تفضل الصديق محمد الجوهري بوضع الحل بلغة C# و عند تجربتي لحله تفاجأت من السرعة التي يتم العثور بها على الحل. قرأت الكود و جربته أكثر من مرة محاولا العثور على شيء يميزه، لكنه عادي. من هنا انطلقت رحلتي لفهم ما يجري في الحلاقات التسلسلية for في بايثون 2.6.2
الكود الاول:
في البداية كان الكود كالتالي و يستغرق 55 ثانية ليجد الحل:
n = 20
divs = [x for x in range(n, 0, -1)]
i = 0
while True:
i = i+1
nop = False
for x in divs:
if (i*n) % x != 0:
nop = True
break
if nop == False:
print "\nThe answer is ", i*n
break
divs = [x for x in range(n, 0, -1)]
i = 0
while True:
i = i+1
nop = False
for x in divs:
if (i*n) % x != 0:
nop = True
break
if nop == False:
print "\nThe answer is ", i*n
break
هذا الكود رديء، و غيرته ليصبح كالتالي و هو يستغرق 40 ثانية:
i = 20
done = False
seq = range(2, 20+1)
while not done:
for j in seq:
if i % j != 0:
break
elif j == 20:
done = True
i += 20
print i-20
done = False
seq = range(2, 20+1)
while not done:
for j in seq:
if i % j != 0:
break
elif j == 20:
done = True
i += 20
print i-20
ثم قرأت حول طرق تحسين كود بايثون و وجدت من ينصح باﻹستخدام الدوال التالية lambda, map و filter بدلا من الحلقة التسلسلية for و كانت النتيجة كالتالي:
الكود الثالث يستغرق 5 دقائق و 34 ثانية:
i = 20
done = False
seq = range(2, 20+1)
while not done:
if len(filter(None, map(lambda y: i % y == 0, seq))) == len(seq):
done = True
break
i += 20
print i
done = False
seq = range(2, 20+1)
while not done:
if len(filter(None, map(lambda y: i % y == 0, seq))) == len(seq):
done = True
break
i += 20
print i
الكود الرابع يستغرق هو أيضا 5 دقائق و 34 ثانية:
i = 20
done = False
seq = range(2, 20+1)
while not done:
if False in map(lambda x: i % x == 0, seq):
pass
else:
done = True
break
i = i + 20
print i
done = False
seq = range(2, 20+1)
while not done:
if False in map(lambda x: i % x == 0, seq):
pass
else:
done = True
break
i = i + 20
print i
الكود الخامس: ثم بعد ذلك قمت بإدراج الكود الثاني داخل دالة و أصبح على الشكل التالي و يستغرق 24 ثانية:
def euler5():
i = 20
seq = range(2, 20+1)
while True:
for j in seq:
if i % j != 0:
break
elif j == 20:
return i
i += 20
print euler5()
i = 20
seq = range(2, 20+1)
while True:
for j in seq:
if i % j != 0:
break
elif j == 20:
return i
i += 20
print euler5()
المهم ماذا يجري هنا؟ و لما كل هذا؟
بايثون يعتبر من لغات البرمجة التي تعتمد على التحديد الدينامكي أو المرن للمتغيرات (Dynamically Typed)، بمعنى أن المتغيرة a يمكن أن تحتوي على قيمة رقمية ثم تتحول لتعبر عن قيمة نصية بكل سهولة أثناء عمل البرنامج. و هذا ما يتشابه فيه كل من بايثون python، روبي ruby و بيئيتشبي php. بينما تعتمد كل من لغة سي بلاس بلاس c++ و جافا java و سي شارب c# و سكالا Scala على التحديد الثابت للمتغيرات (Statically Typed). طبعا هنا أقوم بشرح مبسط كما لم أتطرق للأفضلية لأن لكل منها (الغات) نقاط قوتها و ضعفها.
المهم هو أن هذه المرونة تتم على حساب جزء بسيط في ضعف الاداء في بعض العمليات. لكن المثير هو أن ضعف أداء الحلاقات التسلسلية for أكبر بكثير من المتوقع، فما هو السبب؟
اتضح لي فيما بعد أن الفلسفة التي يتبعها مطورو بايثون هي:
1. سهولة قراءة و وضوح الكود أهم من تعقيده لأجل تحسينه (optimization) للإستفادة من أخر جزء من الثانية.
2. هنالك قانون يسمى قانون مور (Moore's law) يقول أن كفائة العتاد تتضاعف كل 18 شهر تقريا. بمعنى أنه مع تطور العتاد سيسبح الفرق بسيطا بين الكود المُحسن و العادي.
3. و إذا كانت السرعة أولوية لا غنى عنها حينها يجب على المبرمج أن يستخدم قاعدة 90/10 بحيث يُفضل أن يكتب الجزء المسرع/المحسن بلغة C أو لغة أخرى.
النقطة المهمة التي تعجبني في مشاكل المشروع يولر Euler Project هي أن كل مشكلة تقريبا يمكن حلها بطريقة تقليدية و أخرى بإستخدام بعض الذكاء و التفكير مع مراعات أن يبقى الحل بسيطا :)
و كما قال لِيُوناردو دا فينشي (Leonardo da Vinci) "البساطة هي منتهى التعقيد"
و هذا هو ما قمت به في الحل الثاني للمشكلة رقم 5 بحيث تظهر النتيجة في جزء من الثانية.
لكن كيف هو أداء باقي لغات البرمجة الأخرى في إيجاد الحل للمشكلة رقم 5؟
1. روبي Ruby 1.8.7 أوجد الحل في دقيقتين و ثلاثين ثانية (2min 30s):
def GetResult()
n = 20
i = n
while true do
for j in 2..n do
break if i % j != 0
if j == n
return i
end
end
i += n
end
end
puts GetResult()
n = 20
i = n
while true do
for j in 2..n do
break if i % j != 0
if j == n
return i
end
end
i += n
end
end
puts GetResult()
ثم بعد تعديل الحلقة التسلسلية for أوجد الحل في دقيقتين و ثانية (2min 1s)
def GetResult()
n = 20
i = n
seq = 2..n
while true do
for j in seq do
break if i % j != 0
if j == n
return i
end
end
i = i+n
end
n = 20
i = n
seq = 2..n
while true do
for j in seq do
break if i % j != 0
if j == n
return i
end
end
i = i+n
end
end
بيئيتشبي PHP 5.2.9 أوجد الحل في 21 ثانية:
$i = 20;
$n = $i;
$Done = false;
while (! $Done) {
for ($j = 2; $j <= $n; ++$j) {
if ($i % $j != 0) { break; }
else {
if ($j == $n) { $Done = true; }
}
}
$i = $i + $n;
}
print $i - $n . "\n";
$Done = false;
while (! $Done) {
for ($j = 2; $j <= $n; ++$j) {
if ($i % $j != 0) { break; }
else {
if ($j == $n) { $Done = true; }
}
}
$i = $i + $n;
}
print $i - $n . "\n";
من خلال ما سبق يتضح أن php أسرع من python و ruby. و كلها تصنف كلغات ديناميكية النوعية.
لكن كيف هو أداء اللغات الثابتة النوعية ك C#, Scala و GNU C++ ؟ الجواب هو إنها فائقة السرعة مقارنة مع اللغات الديناميكية المجربة أعلاه.
بالنسبة لجنوا سي++ (GNU C++) أوجد الحل في ثاتية و نصف!:
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int i = 20;
bool Done = false;
while (!Done) {
for (int j = 2; j <= 20; ++j)
{
if (i % j != 0) break;
else
{
if (j == 20) Done = true;
}
}
i += 20;
}
cout << endl << i-20 << endl;
return EXIT_SUCCESS;
}
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int i = 20;
bool Done = false;
while (!Done) {
for (int j = 2; j <= 20; ++j)
{
if (i % j != 0) break;
else
{
if (j == 20) Done = true;
}
}
i += 20;
}
cout << endl << i-20 << endl;
return EXIT_SUCCESS;
}
بالنسبة لسي شارب C# أوجد الحل في ثانيتين. (بإستخدام كود الصديق محمد الجوهري)
بالنسبة لجافا (java) أوجدت الحل في ثانية و ثمانية أعشار الثانية (1.8s)
public class Main {
public static void main(String[] args) {
int i = 20;
boolean Done = false;
while (!Done) {
for (int j = 2; j <= 20; ++j) {
if (i % j != 0) {
break;
} else {
if ( j == 20) {
Done = true;
}
}
}
i=i+1;
}
System.out.println(i-1);
}
}
public static void main(String[] args) {
int i = 20;
boolean Done = false;
while (!Done) {
for (int j = 2; j <= 20; ++j) {
if (i % j != 0) {
break;
} else {
if ( j == 20) {
Done = true;
}
}
}
i=i+1;
}
System.out.println(i-1);
}
}
و أخيرا لغة سكالا (Scala) التي أوجدت الحل في ثانيتين و أربعة أعشار الثانية (2.4s)
def euler5(): Int = {
var n = 20
var i = n
var done = true
while (done)
{
var j = 2
var iter = true
while (iter && j < n+1)
{
if (i % j != 0) iter = false
else j += 1
}
if (iter == true) done = false
i += n
}
i-n
}
println(euler5())
var n = 20
var i = n
var done = true
while (done)
{
var j = 2
var iter = true
while (iter && j < n+1)
{
if (i % j != 0) iter = false
else j += 1
}
if (iter == true) done = false
i += n
}
i-n
}
println(euler5())
كما نلاحظ فإن اللغات دات التحديد الثابت تعرض الحل في حدود ثانيتين، بينما اللغات دات التحديد الديناميكي تسغرق بعض الوقت لتصل إلى النتيجة. هذه الفرق عند إنجاز بعض المهام أو في بعض الحالات قد لا يعجب البعض، لكن في أغلب الأحيان لن تواجهوا هذا النوع من المتطلبات (السرعة أولا و أخيرا) و ستجدون في اللغات دات التحديد الديناميكي المرونة التي ستسمح لكم بتطوير برمجياتكم بسرعة أكبر و مدة أقصر. لكن إن صممت يمكن إعتبار Scala بديل أفضل لأنها تجمع بين مجموعة من المزايا و أنماط البرمجة.
الخلاصة:
1. أكتب دائما كود بسيط و تسهل قرائته.
2. الحلاقات التسلسلية for تستهلك الكثير من وقت المعالج، و يمكن تحسينها بإتباع بعض النصائح.
3. إدا كانت السرعة جد ضرورية في منطقة معينة من برنامجك حينها قم ببرمجة ذلك الجزء بلغة سي أو سي ++
4. سيحصل بايثون على آلة إفتراضية محسنة (LLVM) ستجعل أداءه مشابه للغة سي و سي++
تحديث 1: قمت بتجربة الكود الخامس بإستخدام الإصدار الجديد لبايثون 3.1 الذي توصل إلى الحل في 32 ثانية. (مازل أبطأ في هذا الإختبار لكن أفضل من الإصدار 3.0)
يونيو 14، 2009
مشروع Euler project: المشكلة رقم 10
المشكلة رقم 10:
مجموع العداد الأولية تحت 10 هو: 2 + 3 + 5 + 7 = 17
المطلوب:
أجد مجموع كل الأعداد الأولية تحت مليونين.
الحل:
الشرح:
1. نستدعي وحدة الرياضيات math بواسطة التعليمة import
2. نكتب دالة isPrime وظيفتها إختبار العدد الذي تتوصل به كمعيار n هل هو أولي أم لا. ذاخل هذه الذالة ننشئ قائمة بكل العداد بداية من 2 حتى جدع تربيع العدد n مع تفادي كل مضاعفات العدد 2
3. نكتب دالة وظيفتها إنشاء قائمة primes بكل الأعداد من 2 حتى n مع إجتناب مضاعفات العدد 2 و بشرط أن يكون أوليا، ثم بعد ذلك نستخدم الدالة sum حتى تحسب مجموع أعداد هذه القائمة.
4. يتم عرض النتيجة بإستخدام print
مجموع العداد الأولية تحت 10 هو: 2 + 3 + 5 + 7 = 17
المطلوب:
أجد مجموع كل الأعداد الأولية تحت مليونين.
الحل:
import math
def isPrime(n):
nbrs = [2] + range(3, int(math.sqrt(n))+1, 2)
for i in nbrs:
if n % i == 0:
return False
return True
def sumPrimes(n):
primes = [2] + [x for x in range(3, n, 2) if isPrime(x)]
return sum(primes)
print sumPrimes(2000000)
def isPrime(n):
nbrs = [2] + range(3, int(math.sqrt(n))+1, 2)
for i in nbrs:
if n % i == 0:
return False
return True
def sumPrimes(n):
primes = [2] + [x for x in range(3, n, 2) if isPrime(x)]
return sum(primes)
print sumPrimes(2000000)
الشرح:
1. نستدعي وحدة الرياضيات math بواسطة التعليمة import
2. نكتب دالة isPrime وظيفتها إختبار العدد الذي تتوصل به كمعيار n هل هو أولي أم لا. ذاخل هذه الذالة ننشئ قائمة بكل العداد بداية من 2 حتى جدع تربيع العدد n مع تفادي كل مضاعفات العدد 2
3. نكتب دالة وظيفتها إنشاء قائمة primes بكل الأعداد من 2 حتى n مع إجتناب مضاعفات العدد 2 و بشرط أن يكون أوليا، ثم بعد ذلك نستخدم الدالة sum حتى تحسب مجموع أعداد هذه القائمة.
4. يتم عرض النتيجة بإستخدام print
الاشتراك في:
الرسائل (Atom)



