‏إظهار الرسائل ذات التسميات برمجة. إظهار كافة الرسائل
‏إظهار الرسائل ذات التسميات برمجة. إظهار كافة الرسائل

2010/08/26

وضع مقرر دراسي جامعي للعبة بورتال

New U.S. College Course Requires Collective  Portal  Playthrough
هذا أحد الأخبار التي أحب أن أسمعها دائما،و هو التشجيع الأكاديمي للجامعات و التي غالبا ما تكون جامعات أجنبية
المهم
هذا الخبر يعني بتدريس نص لعبة Portal كمقرر دراسي في كلية Wabash بجامعة Crawfordsville في إنديانا.
و أعتقد أن السبب في ذلك هو أساس اللعبة التي تمت برمجتها من قبل طلاب مبرمجين في المرحلة الجامعية و أيضا لشعبيتها و حصدها لجوائز عدة.

المميز هنا أن هناك العديد مما يمكن تدريسه في هذه اللعبة (الفكرة و كيفية تحويلها من العقل البشري إلى الكمبيوتر، كتابة النص، كيفية تخيل هذا التحول في اللعبة كعالم ثنائي أو ثلاثي الأبعاد، استخدام محرك اللعبة، الخ)

المصدر:
Gamasutra.com

2009/07/17

ملاحظات برمجية لبرنامج مستخلص أسماء الملفات

لماذا/كيف عملت برنامج "مستخلص أسماء الملفات"؟

مقدمة:
كثير من الأوقات تكون لدينا مهام بسيطة نود عملها في الحاسب لكننا نفاجأ بعد ذلك بمدى تعقيد خطواتها. فيسأل أحدنا "لماذا هذا التعقيد فأنا لا أريد إلا الشيء اليسير، أو لماذا يجب علي أن أتعلم الصعب حتى أعمل شيء من البديهيات؟".
و هذا فعلا ما حيرني عندما أردت أن أسرد ما لدي من برامج، فعوضًا عن كتابتها جميعا يدويا أريد أن آخذها كلها ثم احذفها في الnotepad.
طبعا هذا لم يحدث، جربت عن طريق الWindows explorer و word و Find فلم أجد طريقة لذلك، فأصبحت أبحث عن طرق أخرى في الويندوز لكن لا فائدة "أهذا معقول؟"، حتى قلت خلاص.. سأستخدم الCommand prompt و قد عمل اللازم، لكن هناك أمر آخر.
ماذا عن الذي لا يعرف استخدام الcommand prompt أو من هو غير متمرس في استخدام الحاسب؟
لذلك قلت لابد من محاولة كتابة برنامج يسهل هذه العملية.

المحتوى:
يعتبر هذا الموضوع مثال بسيط لكتابة برنامج للإستخدام الشخصي و من ثم تغييره ليتناسب مع المستخدمين الآخرين على اختلاف احتياجاتهم.
و ما يلي استعراض الإصدارات التي نزلتها و أسباب برمجتها بالإضافة الي المشاكل التي حصلت مع حلولها.

البداية (1.0.0-1.2.0)

كانت فكرتي أن أجعل البرنامج يعمل مباشرة من الFolder الذي هو فيه و يقوم -تلقائيا- بإنشاء ملف txt به (أسماء) جميع المجلدات و الملفات الحالية (من دون ملفات الSubfolders)، بالإضافة إلى خيار انه اذا أردت الملفات مع الامتداد (Extension type) أم لا

المزايا: سريع، واجهة مباشرة و غير معقدة
العيوب: عملية نقل ملف التشغيل (البرنامج نفسه) إلى كل مجلد كانت متعبة.
الملاحظ من الصورة أنه لا يوجد هناك مكان لتحديد المجلد، فهو فقط يعرض الملفات الموجودة من المجلد الذي هو فيه (البرنامج)

(1.3.0-1.6.4)
حتى تسهُل امكانية
استخدام البرنامج أضفت خاصية اختيار المجلد - Choose a folder، و أيضا إضافة خاصية حفظ ملف الtxt لأي مكان يحدده المستخدم
المزايا: البرنامج يؤدي الوظيفة بشكل جيد
العيوب: يعتبر البرنامج بسيط جدا و محدود الاستخدام (فقط يعرض "جميع الملفات" في مجلد معين لا أكثر و لا أقل)


يقوم المستخدم باختيار المجلد ثم يضغط على الزر المخصص لكتابة ملف الText

(1.7.0-1.9.0)
لكي يكون البرنامج أكثر فاعلية، قمت بإضافة صندوق (text) لإظهار الملفات (عرضها و/أو تغيير محتواها في البرنامج قبل حفظها).
إضافة خاصية الفلترة (filter) و هي البحث عن أحرف أو كلمة محددة لاسم الملف
إضافة خاصية اختيار البحث للمجلدات فقط أو الملفات أو كلاهما
أيضا خاصية إظهار ناتج عدد الملفات و التاريخ و مسار المجلد

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

المزايا: خواص جديدة تجعل البرنامج أكثر فائدة و محببة أكثر للمستخدم
العيوب: تظل مشكلة إظهار ملفات لمجلد واحد فقط

الشكل الجديد للبرنامج

2.0.0-2.0.6
التحول هنا كانت مثير و صعب في نفس الوقت، فقد أضفت ميزة البحث داخل المجلدات Subfolders (و غيرت محرك البحث المستخدَم)، بالإضافة إلى قائمة اختيار المجلدات فبالإمكان الذهاب إلى المجلد الذي قبله أو المجلدات المتفرعة منه
و أيضا خاصية استعراض المجلد الحالي بالWindows Explorer

المشاكل التي واجهتني:
- البطء الحاصل عن استعراض ملفات كثيرة جدا، ما اضطرني إلى تغيير أساس البرنامج في عملية البحث إلى ايجاد طريقة أفضل، عملت مقارنة بين طرق البحث المتوفرة (في موقع الAutoit) جربت معظمها و أخذت الأسرع
- كيفية التحكم بالملفات و كيف أظهرها هل بإسمها الكامل أو المختصر أو حسب مكانها من المجلد العادي، فجعلت ذلك على المستخدم أيها يختار.
- طريقة البحث الجديدة تعمل بكفاءة عالية، و إن استخدمت نفس الطريقة السابقة بعرض المجلدات أولا ثم الملفات قد يقلل من كفاءتها. فغيرت الطريقة إلى أنه يتم الاستعراض بشكل طبيعي و أضع علامة تميز الملفات من المجلدات حتى أستفيد من خاصية امتداد الملفات
- حصلت لي مشكلة أخرى ألا و هي عدم امكانية عرض أسماء الملفات الغير oem فالذي يظهر فقط الأحرف و الأرقام الانجليزية (مع رموز غريبة)، أي أن الأحرف العربية لا تظهر، و الحمدلله وجدت طريقة في الويندوز (Dll file) تحل هذه المشكلة بترجمة الoem إلى الansi

المزايا: طرق أكثر في كيفية عرض أسماء الملفات، و التغيير الآني في عرض الملفات قبل حفظها لملف text، و عملية البحث أصبحت أسرع الآن



الشكل الأخير للبرنامج

الخلاصة
مر هذا البرنامج على أربعة مراحل تغيير، و ما يزال يؤدي نفس الوظيفة لكن بخصائص أكثر
و ذلك بسبب إضافة مزايا جديدة و جعله محببا أكثر للمستخدم من ناحية الشكل و السهولة

و في الختام يجب ألا أنسى جميع من ساعدني و شجعني لإظهار هذا البرنامج بهذه الصورة. فشكرا لهم و لكم على القراءة :)

----------------

وصلات
  • طرق البحث التي جربتها Recursive و FileListToArrayEx و FileSearchSshrum و Larry's FileSearch (المستخدمة في البرنامج منذ نوفمبر 2005) و أسرعها (حتى july 2009) كان FileListToArrayEx


File Names Extractor - 2nd Version

السلام عليكم

إليكم الإصدار الجديد من برنامج مستخلص أسماء الملفات
(2.0.6) (2.0.7)

الخصائص الجديدة
1- امكانية استعراض ملفات ما داخل المجلدات
2- التحكم في كيفية عرض مسار الملفات(
Files paths)
3- التنقل بين المجلدات أصبح أسهل
4- تحسين/تسريع أداء البحث
5- خاصية الLive output و هي عرض الناتج عند إحداث أية تغييرات على البرنامج، ما يسهل البحث عن الملفات و ايضا عملية حفظ الملف النصي لاحقا

مميزات البرنامج:
  1. عرض الملفات و المجلدات بصيغة text باستخدام GUI
  2. البحث عن ملفات أو مجلدات محددة بسرعة
  3. يساعد في أرشفة الملفات
  4. خفيف على المعالج صغير الحجم و لا يحتاج ل.NET Framework أو أية DLL Libraries
  5. متنقل فلا يحتاج لـInstall فقط شغل ملف ال.exe
  6. يعمل على Windows 2000/Windows XP/Vista/Windows 7




للتنزيل/تحميل/داونلود:
Filenames_2.0.7 - 285 KB

2009/04/24

File Names Extractor


أقدم لكم برنامجي "مستخلص أسماء الملفات" أو File names extractor

عن البرنامج:
يقوم هذا البرنامج بأخذ اسماء الملفات و المجلدات و وضعها في ملف كتابي ".txt" باستخدام واجهة ويندوز بسيطة يعمل على جميع إصدارات الويندوز ;)

ما فائدة هذا البرنامج ؟
مثلا .. لديك مجلد به جميع ملفات الفيديو مثلا (أو مجلد الألعاب أو البرامج أو...) و أحد أصدقائك طلب منك قائمة الملفات التي في جهازك، فماذا تفعل !؟
=> الحل: تشغل هذا البرنامج.
و ايضا هناك استخدامات كثيرة قد يحتاجها الGeeks

ما الجديد في هذا الإصدار؟
- قابلية إظهار عدد النتائج(اسماء الملفات) و التاريخ و مسار المجلد
و بهذا تكون المعلومة أفيد [شكرا للصديق Dark Night :) ]

لتنزيل الملف:

2009/04/19

Heroes of Might and Magic 5 - Music Changer Mod


أهلا بالجميع
لا أخفي عليكم حبي لألعاب الكمبيوتر الاستراتيجية و بالذات لعبة Heroes of Might and Magic.
و آخر جزء نزل حتى الآن هو الخامس، و ما سأتحدث عنه الآن ليس عن طريقة اللعب أو رسومياتها و إنما الموسيقى فيها
فمع استمراري في اللعب (و خصوصا أوقات القتال الطويلة) مللت من سماع نفس الموسيقى مرارا و تكرارا
لذا قررت أن أغيرها بسابقاتها الجميلة -في رأيي- و المتعددة.
المهم و بينما أحاول إضافة ملف جديد لموسيقى محددة، اتضح لي أن هذا ليس بالشيء السهل/السريع
فذلك يتطلب خطوات متعددة مثل تغيير سطر في أحد الملفات ثم إنشاء ملف جديد في مجلد آخر و من بعدها إضافة مسار الملف المراد في الملف الأصلي!
فلم لا أعمل برنامج يسهل هذه الخطوات و يجعلها بكبسة زر؟ ;)

ماذا يفعل هذا البرنامج
  1. تغيير/حذف الموسيقى لمدينة
  2. إضافة/حذف موسيقى للمعارك

كيفية الإستخدام:
  1. Extract the file into 'Heroes5\Data' folder
  2. Run the file 'H5_Music_Files_Changer_x.x.x.exe' then specify the Heroes5\Data folder, you should see the list of the music files used in the game
  3. Add/remove the files you want :)

ما الملفات التي يقبلها:
  • الكثير من ملفات الملتميديا كـmp3/mpeg/wma/ogg

ملاحظات أخرى:
  • عند إضافة أكثر من ملف للمعارك (Combat) فسيتم تشغيلهم -في اللعبة- من غير ترتيب محدد
  • حاليا في هذا الاصدار أنه فقط يمكن إضافة ملفات موسيقى للمدن(Towns) و المعارك (Combat)

لتنزيل البرنامج
:


This topic also available in English here

2007/03/11

Scripting and Autoit

السلام عليكم و رحمة الله و بركاته
أما بعد ..
صراحة ترددت أكثر من مرة في طرح هذا الموضوع أو عمل هذا الدرس .. و ذلك ليس بسبب صعوبة هذا النوع من البرمجة .. و إنما العكس تماما ..أي بسبب سهولتها الكبيرة مقارنة باللغات الاعتيادية (كالبيسك و السي و غيرهما).
لكن الضرورة تحتم علينا معرفتها و استخدامها لانها تختصر الكثير من الوقت و تفتح المجال للتطور (و لو مؤقتا)
لذلك كان لابد من تجربتها أو على الأقل فهم كيفية عملها ...
و نبدأ اليوم بهذه الأسئلة ...
س: ما السكريبت - Script ؟
بالعربي يعني مستند أو نص مكتوب
أما المعنى التقني له فهو:
برنامج مكتوب بإحدى لغات البرمجة لغرض عام أو خاص اعتمادا على التطبيقات المستخدمة المرادة.
س: ما الفرق بين برمجة الScript و البرمجة باللغات المعروفة كالBasic و الJava و الC++ ؟
Scripting Language قد تكون High-Level Language أو أمر أو لغة سريعة الترجمة (interpreted)
على غرار التدقيق (Compiled) التي في اللغات الأخرى.. ولذلك السكريبت اسرع منها بكثير.
و أيضا اختلاف آخر و هو في الـ"نحو" (Syntax) و هي في السكريبت أبسط .
س: ما الVBScript و ما الويندوز سكريبت ؟
الVBScript : هي لغة برمجة سكريبت من ميكروسوفت و هي جزء من لغة الVisual Basic .. و من أمثلة إستخداماتها => برمجة مواقع الASP ..
Windows Script - wscript : هي الscrpits التي يشغلها الويندوز، و كثيرا ما تستخدم أوامر الدوس و بالتالي الBatches (.bat files) و أيضا تستخدم الVBscript بشكل كبير
س: ما الأوتو إت Autoit Script ؟
و هو automation scripts لبرامج الويندوز .. معروف عنه بأنه الأفضل في مجال اعادة عمل .
س: لماذا الAutoit Script ؟
لأنه الأفضل و الأسهل و الأشهر و أيضا مجاني (و ما يحتاج إني أقول لكم انه open source)
س: و الآن ... مما سبق يبدو الscript أسهل من باقي اللغات .. فلماذا لم تكن تريدنا أن نتعلمه ؟
.... كما في التعريف السابق .. أنها لغة تستخدم لغرض محدد ... فإن زادت المتطلبات أو لم تجدوا ما تريدونه في هذه اللغة .. فلن تستطيعوا فعلها .. و بالتالي سيكون البديل صعب جدا .. و هو تعلم لغة جديدة .. للأسف .. !
طبعا بالنسبة للمبرمجين المتمرسين لن يشكل هذا عائقا لهم أبدا .. لأن لديهم البديل
أما بالنسبة للمبتدئين .. فقد يجدوا ضالتهم فيه .. كعمل برنامج بسيط و صغير و مفيد .. دون أن يضطروا للخوض في أعماق اللغات الأخرى .. و أيضا قد يساعدهم و يحفزهم لتعلم المزيد و من ثم تعلم إحدى اللغات الأخرى ..
و في إطار هذا الحديث أنصحكم بقراءة هذا الموضوع الجميل :
لاتتعلم السي# او الفجوال بيسك
س: أين أجد الAutoit Script ؟
هذا هو البرنامج autoit3 مع المحرر له SciTE
س: طيب و ماذا بعد ؟
من الممكن لمن لديهم معرفة كافية في البرمجة .. أن يطوروا أحد برامجي الأخيرة المصممة بنفس اللغة .. أو على الأقل أن يلقوا عليه نظرة..
===> تفضل مشروع كامل لعمل برنامج مفتوح المصدر .. حصريا <===
__________________
الكاتب Well-knownQ8
استخدمت بعض من المعلومات من موقع
http://www.answers.com/
------------------------------------------------------
أول ظهور لهذا الموضوع كان في منتدى المنتدى بتاريخ 6 فبراير 2006

2006/12/17

نظرة عامة على المصدر المفتوح و برمجة الألعاب

السلام عليكم و رحمة الله و بركاته*

اقدم لكم مجموعة من محركات ألعاب كاملة و مفتوحة المصدر تستطيعون استخدامها في

برمجة الألعاب ==> يعني طريقة أخرى غير الGame Maker

بسم الله نبدأ..


محركات الألعاب:

MasterX SDK

و هو عبارة عن Classes و وظائف Functions للمساعدة على برمجة العاب الDirectX

و به دروس جيدة جدا للمبتدئين


Quake 2 Engine

محرك ممتاز و مشهور بألعابه الجيدة مثل Soldier of Fortune مكتوب بلغة C++



Allegiance

لعبة فضاء ضخمة، لاكثر من لاعب من ميكروسوفت

http://www.freeallegiance.org/


Pygame

نظام لبرمجة الالعاب باستخدام لغة الPython


PPTactical Engine

محرك رائع لعمل العاب استراتيجية (حقيقية أو تكتيكية)

يستخدم الSDL و الDirectX

http://aspc.cs.utt.ro/~karg/ppt/ss/0.9.6/easyrecon_respiro_m.jpg


Golden T Game Engine

محرك جافا ثنائي الأبعاد و هو بسيط و سلس.



Crystal Space

محرك قوي ثلاثي الأبعاد مكتوب بلغة C++

http://community.crystalspace3d.org/show_image.php?id=293&thumb=1


ClanLib

نظام متكامل ثنائي و ثلاثي الأبعاد متوافق مع DirectX و OpenGL


OGRE

محرك ثلاثي الابعاد رائع مكتوب بC++


Irrlicht

محرك ثلاثي الابعاد ممتاز و مرن، يستخدم الC++/C, C#, VB.NET


jME

محرك جافا ثلاثي الأبعاد => رائع



Pand3D

محرك رهيب => C++


Nebula

لا أعرف ماذا أقول لوصف هذا المحرك .!


ألعاب جاهزة للتطوير:

و أيضا .. لمن يريد تطوير ألعاب كاملة و جاهزة، فعليه الدخول هنا:

https://sourceforge.net/softwaremap/trove_list.php?form_cat=80


ما قد تحتاجه:

- مكتبة SDL

- Python Compilers

- C/C++ Compiler

- Java Compilers

- Pathlib: يتضمن خوارزميات لايجاد اقصر الطرق و تتبع الحركات و التوقيت و التصادم و التخلص من الطرق المسدودة


مصطلحات:

* محركات الألعاب - Game Engines

هو اساس برمجي لمحتويات لعبة فيديو، و يتعامل مع تصيير الرسوميات Graphical Rendering و التقنيات الأخرى الضرورية و قد يكون منها الذكاء الاصطناعي و بعض قوانين الفيزياء collision detection، و ايضا من خواص المحركات انها تكون جاهزة لكي تعمل على نظام معين (ويندوز او game consoles)

SDL

اختصار لSimple DirectMedia Layer

و هي مكتبة نظام ربط للوسائط المتعددة Cross-Platform multimedia library تركب على النظم (رسوميات، صوتيات، تطبيقات) و تستخدم لبرمجة الألعاب أو تطبيقات برمجية للوسائط المتعددة.

DirectX

عبارة عن مجموعة تطبيقات برمجية لتسهيل برمجة الالعاب مع النظام ويندوز.

OpenGL

اختصار لOpen Graphics Library و هو نظام ربط للتطبيقات الثلاثية و الثنائية الأبعاد، و يتميز بواجهة تضم اكثر من 250 وظيفة لانشاء مشاهد معقدة.

الSDK Software Development Kit - (حزمة تطوير البرمجيات)
هي مجموعة من الادوات اللازمة لتطوير البرامج و غالبا ما تكون لها واجهة سهلة الاستخدام .. تسهل على المبرمجين عمل البرامج .. تماما كما في برنامج الGameMaker..


المصادر:

http://en.wikipedia.org

http://www.devmaster.net/engines/

http://www.lostsidedead-software.com/ => شكرا لArgonaut

http://cyberloonies.com/game-engines.html

Free Game Programming Libraries and Source Code


و أخيرا .. أتمنى ان يعجبكم و يفيدكم هذا الموضوع .. و لعل وعسى يحفزكم على البرمجة و التطلع للأفضل ;)

كتب بلوحة مفاتيح Well-knownQ8

و شكرا و السلام ^^

-------------

كتب هذا الموضوع في الثالث من ديسمبر 2005

2006/11/24

ما هو المصدر المفتوح Open Source ؟

السلام عليكم و رحمة الله و بركاته


بين ايديكم بحث بسيط قمت به عن موضوع الـ Open Source ، لما يعد من المواضيع المثيرة جدا
و المهمة في عالم الكمبيوتر و الانترنت...

بسم الله الرحمن الرحيم

البداية:
المصدر المفتوح -Open Source- هو أحد السياسات المتبعة في إدارة عملية كتابة برمجيات الحاسوب والأنظمة وإدارتها. إذ أن البرمجيات المفتوحة المصدر توفر النص المصدري - Source Code- كما كتب من المبرمج، ومع السماح بقراءة هذا النص، وتوزيعه، والتعديل عليه.
ظهر مصطلح Open Source ، في نهاية التسعينات من قبل اريك ريموند في محاوله منه لإيجاد مصطلح بديل عن مصطلح برمجيات حرة Free Software الذي كان يفهم خطأ على أنه برمجيات مجانية، إذ كان قطاع الأعمال يتخوف من إستعمال وتوظيف والعمل في لينكس (مثلا) والبرمجيات الحرة، لأن كلمة Free كانت تعني لهم المجانية، وبالتالي عدم وجود أرباح، و لكن مع المصطلح الجديد قل هذا اللبس.

حاليا، يتم إستعمال مصطلح البرمجيات المفتوحة المصدر في الإعلام بشكل أساسي، للدلالة على البرمجيات الحرة. لكن خلال تطور مفهوم المصدر المفتوحة، قام بروس بيرنز بتطوير تعريف للبرمجيات المفتوحة المصدر.


التعريف:

من الممكن إختصار تعريف البرمجيات المفتوحة المصدر، بأنها البرمجيات التي تحقق الشروط التالية:
- حرية إعادة توزيع البرنامج.
- توفر النص المصدري للبرنامج، وحرية توزيع النص المصدري.
- حرية إنتاج برمجيات مشتقة أو معدلة من البرنامج الأصلي، وحرية توزيعها تحت نفس الترخيص للبرمجيات الأصلي.
- من الممكن أن يمنع الترخيص توزيع النص المصدري للنسخ المعدلة على شرط السماح بتوزيع ملفات التي تحتوي على التعديلات بجانب النص الأصلي.
- عدم وجود أي تمييز في الترخيص لأي مجموعة أو أشخاص.
- عدم وجود أي تحديد لمجالات إستخدام البرنامج.
- الحقوق الموجودة في الترخيص يجب أن تعطى لكل من يتم توزيع البرنامج إليه.


هذه المييزات الأساسية لأي ترخيص من الممكن أن يطلق عليه ترخيص مفتوح المصدر.


فائدته و أهميته:
يعتبر المصدر المفتوح الآن أحد أهم عوامل تطوير البرمجيات، و قد لاحظنا ذلك في الفترة الأخرة من ظهور برمجيات عالية المستوى في مختلف التخصصات و الأصناف من وسائط متعددة Multimedia و نظم تشغيل Operating Systems و متصفحات انترنت و مضادات الفيروسات و الملفات المشبوهة و برامج الحماية و حتى الألعاب.
و ما يعطي الموضوع حلاوة خاصة هو انه يمكن لأي شخص التعديل و الإضافة و التطوير لأي برنامج ثم يضع ما قام به في الانترنت، و من ثم يعلق عليه الآخرون و يبلغونه بأي مشكلة حصلت أو ثغرات Bugs ، بالاضافة الى انه يمكن لأشخاص آخرون أخذ هذا البرنامج ثم تطويره و هكذا (طبعا باتباع الشروط السابقة).


أمثلة:
- نظام التشغيل لينيكس
نبذه سريعة:
في نهاية عام 1990 قام طالب في جامعة هلسينكي في فنلندا بالإعلان عن مشروع يعمل عليه. الطالب هو لينوس تورفالدس، والمشروع كان نظام تشغيل بسيط. وقد اختار لينوس تورفالدس أن يضع مشروعه تحت ترخيص البرامج الحرة، مما أتاح لمن يريد إمكانية الاطلاع على النص المصدري لهذا النظام، والعمل على تعديله وتطويره، نتيجة لذلك، شارك الآلاف من المبرمجين المتطوعين حول العالم في المشروع.

- المتصفح Firefox
نبذه سريعة:
هو متصفح ويب، يتم تطويره من قبل مؤسسة موزيلا.
تهدف مؤسسة موزيلا بفايرفوكس الى تطوير متصفح سريع، صغير، قابل للتوسيع و التطوير ، منفصل عن طقم موزيلا.
و بذلك يستطيع المبرمجين المتطوعين إضافة الplug-ins له و تطويره.

هذان مثالان قد لمسنا نتائجهما الرائعة و المثيرة للجدل، و بالطبع فهناك الكثير و الكثير من برامج مفتوحة المصدر المشهورة...


الخلاصة:
مما سبق اتضحت لنا أهمية تطوير برامج مجانية Free Software أو مفتوحة المصدر Open Source ، لما ليس لها من قيود لمحبي و متطوعي البرمجة و ايضا بعيدا عن احتكار الشركات ، و هذا ما يزيد من شريحة المبدعين في عالم البرمجة و الكمبيوتر و التكنولوجيا :)

---------
المصادر:
http://en.wikipedia.org
http://www.opensource.org
http://www.redhat.com

================
تمت كتابة هذا الموضوع في 2 ابريل 2005 في منتدى المنتدى و منتديات طموح

2006/11/21

هل تهتم بكفاءة البرمجة - Do you care about Programming Efficiency؟

السلام عليكم و رحمة الله و بركاته

أهلا بعلماء المستقبل ..
--------------------

بسم الله ..

حدثـْت مؤخرا جهاز البالم Treo 650p من 1.05 إلى 1.2 و الذي به تصحيح لبعض الأخطاء المهمة و زيادة أداء الجهاز (توفير البطارية)،
و فرحتي لهذا التحديث، أني قمت بتنزيل بعض البرامج و الألعاب (المجانية) من موقع الشركة.


و طبعا بعدها أخذني الوقت في تجربة هذه البرامج .. و بعد مدة .. اغلقت البرامج .. و إذ اني أرى علامة البطارية أصبحت باللون الأحمر (أي قرب نفاذ شحن البطارية) !!!

قلت مو مشكلة .. يبدو ان ذلك من آثار التحديث و انه جديد و و و ..
في اليوم التالي .. لعبت قليلا بإحدى الألعاب .. ثم رأيت هبوطا واضحا في نسبة استهلاك

البطارية !.. غريب .. فالجهاز كان يستمر معي طوال 3 أيام .. فماذا به أصبح و كأنه ليوم واحد فقط !
قلت مو مشكلة .. يمكن ذلك بسبب أن اللعبة بها الكثير من المؤثرات الصوتية و المرئية .. ناهيك عن عمل الشاشة طوال الوقت (حجم الشاشة كبير)..

بعد ذلك .. أخذت بتجربة لعبة بسيطة جدا جدا .. ألوانها لا تزيد عن الأربعة ألوان .. وليس هناك مؤثرات لا صوتية و لا مرئية (لعبة الEight Queens المشهورة)..!
ثم أيضا .. نفس النتيجة .. إذ أن النسبة قلت كثيرا ... ! ما هذا ..!

الصراحة .. خفت على جهازي .. و خفت أن يكون ذلك بسبب التحديث ..!
و حتى أقتل الشك باليقين .. استخدمت الجهاز كالسابق .. و لم أشغل عليه أي برنامج خارجي .. ثم .....
س
الجهاز استمر معي لمدة 3 أيام كالسابق ^_^..
و عندها تأكدت مما كنت أشك في أهميته و استخداماته ..
ألا وهو "الكفاءة - Efficiency" ...

المقدمة

منذ أن أخذت مادة "الرياضيات متقطعة" (أيام الجامعة) و بالتحديد عند موضوع Big O ntation (اضغط هنا لمعرفة المزيد عنه).. وذكر الدكتور أن استخدام مجرد حلقتين مشبوكتين (2 nested loops) في البرنامج يعتبر إضاعة لمجهود المعالج من دون فائدة، و ضرورة إيجاد بديل "أبسط و أخف"

و مثال على ذلك .. ترتيب المصفوفة (array) إذ أن لترتيبها تصاعدا يلزمنا حلقتين مشبوكتين .. كالتالي:


1: for (int i = 1 ; i < n ; i++) {
2: for (int j = 0 ; j < n-i ; j++) {
3: if (data[j] > data[j+1]) {
4: double temp = data[j];
5: data[j] = data[j+1];
6: data[j+1] = temp;
7: } else {
8: break;
9: }
10: }
11: }
اضغط هنا لرؤية مثال على طريقة الترتيب ..
طبعا هذا حل صحيح .. و يؤدي الغرض .. لكن قد تلاحظون أن المسألة جدا بسيطة .. لكنها تأخذ من الوقت الكثير.. !

فلنفترض أن كل عملية تبديل(الأسطر من 4 إلى 6) تأخذ ثانية واحدة .. فإذا أردنا ترتيب أسماء 10 أشخاص، اذا فسيكون الوقت الكلي 100 ثانية !
فتخيل .. كم سيستغرق من الوقت (و الجهد) اذا كنت تريد تريتب أسماء عدد سكان مدينة كاملة !
و تخيل انك تملك جهاز صغير(ساعة يد مثلا) فيها هذه الاسماء .. فهل ستتمكن الشركة من وضع معالج جبار لتطبيق عملية قد تكون تافهة ...

أعلم ان الأجهزة الآن قادرة على تطبيق مئات الملايين من العمليات في الثانية الواحدة .. لكن هناك اجهزة ابسط مثل(التفونات النقالة و الPDA و الportable devices بشتى أنواعها)

فالحل ليس بانتاج معالج أسرع .. و إنما بتبسيط و تحسين(optimizing) البرنامج..

لماذا التحسين ؟

ببساطة .. لانه ليس سهلا على الجميع الحصول على جهاز خارق السرعة لكي يحل المسألة بسهولة، و ايضا .. لماذا نستهلك جهد كبير للجهاز لأداء عمليات بسيطة، بالرغم من أن هناك عمليات أخرى أهم تستخدم هذه القوة!، لذلك وجدت دراسات كثيرة لعمل طرق و حلول و بدائل للكثير من الخوارزميات في عالم البرمجة.


و هنا قد يتبادر هذا السؤال في ذهن المبرمج:


و ما هي مشكلتي إذا كانت بعض الأجهزة ضعيفة لتشغل برنامجي؟
فنرد عليه بـ:
ألا تريد نشر برنامجك الى أكبر عدد ممكن !؟
أو هل تريد أن تقل سمعتك إذا وجد الناس أن برنامجك يأخذ مصادر الجهاز كلها ..؟
أو بطريقة أخرى .
تخيلوا لعبة كمبيوتر جديدة نزلت .. و تتطلب هذه المواصفات (على الأقل لتشغيل اللعبة)
Pentium D 3.8 gigaHz
4 gigaByte Ram
كرت شاشة Geforce 7900
و بالنهاية تجد أن أداء اللعبة برسومياتها و أصواتها مثل لعبة HalfLife 2 مثلا ..!؟


-----

من البديهي أن المبرمج يريد للغالبية العظمى أن يستخدم برنامجه بسهولة و من دون مشاكل .. و هذا ما يتم بتحسين الكفاءة.

طرق كيفية تحسين الكفاءة:
1- جعل كل ما في البرنامج صغير:
من دوال و متغيرات و وظائف حتى تبدو بسيطة و مرنة

2- عدم تكرار العمليات المنجزة، و هذا شي بديهي

3- تحديد و تقليص المتغيرات - Make data sets small(limit variables)
يعني اذا انت تعلم انك لن تستخدم اشارة السالب في الأرقام -مثلا- .. فبدلا من انك تستخدم int x تستبدلها بunsigned int x
أو اذا تستخدم الأعداد الصحيحة فقط .. فبدلا من أن تستخدم double x تستبدلها ب int x
و هكذا لبقية المتغيرات

4- Selective Processing With an IF
و هذا يوفر كثير من العمليات التي لاداعي لها.

5- If-Then-Else and Cases
نفس السبب السابق

6- طول الجمل
و ذلك لتوفير مساحات في الذاكرة و الوقت اللازم لاسترجاعها،
فبدلا من انشاء ذاكرة لكل كلمة، يتم انشاء ذاكرة واحدة لجملة تتضمن تلك الكلمات.

7- تحويل بين الأرقام و الأحرف
تقريبا كسابقتها، بدلا من انشاء ذاكرة جديدة لمتغير جديد، نستخدم نفس الذاكرة السابقة لهذا المتغير الجديد.

و ماذا علينا أن نفعل؟
طبعا ليس بشرط استخدام النقاط السابقة جميعها، و انما محاولة استخدام ما يمكن من هذه النقاط بما يتناسب مع البرنامج.

الخلاصة:
بعد أن عرفنا ماهية الكفاءة و لماذا نحسنها و استعراض طرق تحسينها، عرفنا الآن أهميتها الكبيرة في توفير الوقت و الجهد لإجراء العمليات البرمجية في أي معالج و أي نظام بصورة ممتازة و مناسبة و مقبولة.
و أحب أن أشير إلى أنه حتى هذه اللحظة و العلم يبحث الكثير و الكثير من طرق التلخيص و التوفير لرفع الكفاءة في جميع الصناعات و الخدمات في عالمنا المعاصر.

---------------------
*هذا الموضوع كتب في منتدى المنتدى من تاريخ 25 من شهر يونيو 2006
[مقال] هل تهتم بالكفاءة - Do you care about Efficiency ؟
و ايضا في الموضوع هناك إضافات جميلة فحبذا لو تقرأوها.