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

2013/04/17

أجهزة الRange Extenders و حلول مناسبة

مع انتشار الهواتف الذكية و أهمية الانترنت للجيل الحالي من أجهزة ألعاب الفيديو (XBox360 و PS3 و WiiU) بات من الضروري توفير السرعة المناسبة و التغطية الكافية للشبكة اللاسلكية.
لدي جهاز راوتر واحد في البيت و إشارة الوايرلس لم تكن لتغطي النصف الثاني من البيت، فحاولت تقوية الإشارة بأجهزة الrange extenders (مجازًا سأسميه المقوّي) القديمة لدي فلم تنجح محاولاتي لسبب لم أعرفه إلا للتو، و هي خاصية الWPS-Wifi Protected Setup الموجودة في الأجهزة الجديدة و ذلك لسهولة و ضمان الشبك بين الراوتر و المقوّي.
خطوات التثبيت كانت جدا مباشرة و بسيطة و تشبه كثيرا عملية الربط Pairing بين أجهزة البلوتوث Bluetooth.
 في السنوات القليلة السابقة كان هناك بطء ملحوظ عند استخدام المقوّي، أما الآن فقد اندهشت لأدائه و سرعته إذ لم أحس باني متصل بالمقوّي أم من الراوتر مباشرة، حتى عند اللعب online في لعبة Call of Duty - Black Ops 2 فالأداء كان جدا طيب.

الخلاصة .. أجهزة الRange Extender مفيدة و أداؤها الآن جدا طيب و أسعارها معقولة (حتى كتابة هذا الموضوع تتراوح الأسعار ما بين 12 إلى 20 دينار كويتي)

*مصدر الصورة من موقع www.netgear.com

2010/11/21

العلم و التكنولوجيا في العالم العربي

استوقفني هذا الخبر من جريدة القبس ليو الأحد الموافق 21/11/2010
و الذي يتكلم عن العلم و التكنولوجيا في العالم العربي و مدى "فقر" إهتمام الدول فيهما.
و الصراحة في أن هذا الشيء أحزنني قليلا و يجعلني أتأمل نتائج أفضل للدول العربية في المستقبل القريب - قولوا آمين.

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

وصلة لموضوع العلم و التكنولوجيا في العالم العربي

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


2007/08/08

الجيل المحظوظ و ألعاب الفيديو

هل تعرف جهاز الأتاري، و هل سمعت بجهاز الMSX (صخر)؟
هل لعبت أول جزء من لعبة Super Mario Brothers، و ماذا عن لعبة DOOM هل عاصرت فترة نزولها على الPC؟
هل تعتقد بأنك تحظى بحظ أوفر في عالم الVideo Games؟
اقرأ هذا الموضوع لتعرف من أي جيل أنت في عالم ألعاب الفيديو.


========================================================
بعد تفكير و تمحيص دام لسنين مع مناقشة كثير من الأصدقاء الذين وافقوني الرأي، أقدم لكم ما خلصت إليه عن هذا الجيل و مقارنته بالأجيال اللاحقة و السابقة له.

أتكلم في هذا الموضوع (في المقام الاول) عن ألعاب الفيديو Video Games مع التطرق لبعض الأمور الأخرى ذات العلاقة، و الذي يحتوي على:

1- تعريف الجيل
2- فترات هذا الجيل
3- ما الذي يميز هذا الجيل
4- الجيل في الوقت الراهن
5- الخاتمة
----------------------------

أولا: الجيل
أي جيل هو؟
هو جيل الهمبورجر "كما كانوا يسموننا"، لكن هو بالأصح قبل ذلك.
و باعتقادي هم الجيل الذي تكون سنة ميلادهم من 1979 إلى 1985.
الرقعة السكنية؟
دول الخليج العربي و أوروبا، و احتمال أيضا بعض الدول العربية الأخرى.

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

ثانيا: فترات هذا الجيل

الفترة ما بين 1986 و 1988 (الأتاري)




في هذا الوقت .. كان جهاز الأتاري(1) هو المسيطر على سوق ألعاب الأطفال.
لذا كان من نصيبهم أن لعبوا ألعابه المثيرة، و أذكر كان من أحلاها frogger و Pong و لعبة الاختباء و galaxian و ما شابهها من ألعاب.




86 إلى 94 (كمبيوتر صخر)



هذه الفترة قد تكون خاصة بدول الخليج
فقد تم انتشار الكمبيوتر(2) msx مع التعريب و تطوير برامج عربية كاملة من شركة صخر(العالمية)(3)..

المهم، أن هذا الجهاز انتشر بشكل فظيع خاصة في مجال الألعاب (أغلبها ألعاب KONAMI) و أذكر منها Penguin Adventure و Metal Gear 1&2 و Kings
Valley 1&2 و F1 Spirit و The Castle


و لا ننسى البرامج العربية التي منها
"هيا لنتعلم 1&2" و "اختبر معلوماتك" (3 أجزاء) و "الكلمات المتقاطعة" و "الأقوال و الحكم" و "الحج و العمرة" و "الطاقة" و غيرها الكثير و الكثير.
لذا من استطاع اللحاق بأي مما سبق فبالتأكيد أنه قد استفاد الكثير .




92 إلى 95 (أجهزة ال8 و ال16-بت)




هنا فترة ظهور و انتشار الnintedo و الgame-boy (أجهزة ال8-بت)
و كانت ألعابها تحمل طابع المغامرة و السرعة و الذكاء و الألغاز مثل
ماريو بأجزائه الثلاثة، نينجا جايدن بأجزائه، الكابتن ماجد و جزئيه، الكابتن عمر(تسمية عندنا في الكويت لا اعلم ما اسمها في الدول الاخرى)، castlevania ثلاثة أجزاء،

و مفتاح سليمان و أيضا الالعاب التقليدية المشهورة Dig-Dug-Deeper و Moby و ألعاب Taito و غيرها الكثير مما لا حصر له.




و كان لها -أجهزة ال8-بت- الأثر الكبير في استقطاب المزيد من الناس لألعاب الفيديو، و بعدها بسنين قليلة جدا ..ظهرت أجهزة ال16-بت Sega Mega Drive و SNES



و طبعا هما من أكثر أجهزة الconsole مبيعا على الاطلاق، و ذلك بسبب تنوع الألعاب و كثرتها و جاذبيتها.




وبالتالي، استمتع هذا الجيل بالألعاب الكثيرة الممتعة و المتنوعة و هي تحمل مثل طابع أجهزة ال8-بت، لكن بالطبع مع رسوميات و صوتيات أفضل.

و أيضا في هذه الفترة بدأ انتشار الPC شيئا فشيئا.



و كانت أجهزة ذات مواصفات متواضعة مثل
سرعة المعالج: 66 ميجاهرتز
الذاكرة: 4 ميجابايت رام
كرت الصوت و السي دي كانا optional !
الشاشة: 14 بوصة

و بالنسبة للمنطقة العربية ففي نهاية 1995 اخذ الانترنت بالظهور!


95 إلى98 (الPlayStation)



هنا زمن ظهور البلاي ستيشن و الضجة الكبيرة التي أحدثتها تقنية ال32-بت في مجال ألعاب الفيديو كتجربة جديدة في عوالم ثلاثية الأبعاد و الصوتيات القوية.
طبعا أبناء الجيل الذين نتكلم عنهم لم يجدوا صعوبة في استيعاب هذه الاجهزة الجديدة و التأقلم معها، من استخدام عصا التحكم و تحكم ألعاب الplatform الثلاثية الأبعاد، التي تعتبر معقدة نوعا ما (بالنسبة للجدد).

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

و من الجدير بالذكر (بالنسبة لتكنولوجيا الاتصالات) أن في هذه الفترة قد انتشر جهاز البيجر بشكل كبير.


97 إلى 2000 (الانترنت)



ظهور الانترنت
و هنا ميزة إضافية لهم.
و هي أنهم بعد ما عرفوا الكمبيوتر و كيفية استخدامه استطاعوا دخول الانترنت و الاستفاده منه أكبر استفادة.
بخلاف الجيل الذي بعدهم الذي أول استخدام لهم في الكمبيوتر كان الانترنت أي أن (الانترنت = كمبيوتر) ! و بالتالي اهمال مزايا و قدرات الكمبيوتر و التركيز على النت !

طبعا هذه كانت فترة نشطة جدا في تطور الكمبيوتر و أيضا سوق الconsoles
سيطرة البلاي ستيشن، انتهاء النينتيدو 64، اختفاء السيجا ساترن، و ظهور الدريم كاست.

و أيضا هذه الفترة قد باتت الهواتف النقالة بالانتشار.


2001 إلى 2005( معارك الconsoles)
تعتبر هذه الفترة فترة استخدام و تمحيص للتقنيات الموجودة حاليا مع ملاحظة المستجدات و التطلعات المستقبلية
و طبعا ما يحتاج ان اخبركم بأنها فترة المنافسة بين الأجهزة الثلاثة GameCube و PS2 ثم XBOX
و الاستمتاع بألعابها التفاعلية و الحماسية (لكن للاسف افتقدنا ألعاب الألغاز و الذكاء).


2005 حتى الآن.
هذه الفترة تشهد تغيرات سريعة جدا، ليس من السهل استيعابها جميعا.
فترة انتشار الsmart phone و الNext Generation Consoles و الPortable Devices و الآن الجيل الثالث في الاتصالات، و الكمبيوتر الذي اصبح أساسيا ليس لكل بيت فقط و إنما لكل فرد من المجتمع!
و لا ننسى هيمنة الانترنت و دخولها في كل مجال و في كل بيت، و حتى أجهزة الConsols أصبحت ترتبط بها ارتباطا وثيقا عزيزا لا مجال للاستغناء عنه.

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

ثالثا: ما الذي يميز هذا الجيل؟
أو لماذا نعتّ هذا الجيل بالمحظوظ؟
هذا السؤال يفرض علينا تلخيص ما سبق بالنقاط التالية:

1- هذا الجيل تتبع تطور أجهزة ألعاب الفيديو و الconsoles
أتاري ثم أجهزة ال8-بت ثم ال16-بت ثم ال32 ثم ال64 ثم ال128 و الآن ال256 و ال512-بت

2- تتبع تطور الحاسوب
في الهاردوير:
386 => 486 => بنتيوم => معركة شركات المعالجات الثلاثة cyrix و AMD و Intel => بنتيوم 2 => بنتيوم 3 و ظهور معالجات AMD من جديد K6 و K7 => بنتيوم 4 و Athlon XP => و الآن Intel Core و AMD Turion

في الألعاب:
من معرفة القطع اللازمة لتشغيلها إلى معارك تطور كروت الشاشة.
في البرامج و البرمجيات software:
Dos => Windows 3.1 => Win95 => Win98 => Win2k & WinME => WinXP => Vista
إعلام الMAC-OSX القوي و الأهم هو انتشار الLinux للاستخدام الشخصي و المنزلي بمختلف توزيعاته و أبرزها Ubuntu.

3- تتبع تطور الأجهزة المتنقلة في الألعاب
Game-boy => Game Gear => Gameboy Color => gameboy Advance
=> Java Games on Mobile Devices & Phones
=> NinDS و PSP

4- و أيضا في التلفونات
العادية => مع الملتيميديا => البلوتوث => Smart phones => و الآن اندماجها مع الNotebooks

و من هنا يظهر السؤال التالي:
من هم و أي فئة من الممكن أن يكونوا شباب حاليا، و قد استطاعوا اللحاق(من استخدام أو تأثر) بعصر التكنولوجيا و تطوره، منذ السبعينات حتى الألفية الثالثة ؟!
فمن الملاحظ أن هذا الموضوع أشبه بتاريخ تطور الكمبيوتر و ألعاب الفيديو، لكن الفرق ان هذا التاريخ قد عاشه و حضره أبناء هذا الجيل !


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

رابعا: الجيل في الوقت الراهن
ماذا عن هذا الجيل حاليا؟
حاليا هذا الجيل تكون أعمارهم بالعشرينيات أي القوة، الاهتمام, المسئولية, الادراك و الاستنتاج، الابتكار .. الخ من جميع صفات الشباب المتحمس في هذه السن.
فهم الأقدر على استيعاب هذه التقنيات، لأن التكنولوجيا أصبحت جزء من حياتهم و اهتماماتهم.

_____________________
خامسا: الخاتمة
و أخيرا، هل أنت من هذا الجيل المحظوظ؟
إن كانت الإجابة بنعم، فاحمد الله و اشكره، و تأكد بأن لديك مقومات قوية و فريدة لا يملكها جيل غيرك في هذا العالم، فحاول استغلالها في المفيد و الصالح.

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

و في الختام أسأل الله لكم كل التوفيق
شكرا لحسن متابعتكم و السلام عليكم


كتبه: Well-knownQ8 => حسين
الحقوق محفوظة
_______________________
هامش ..
(1) أتاري- Atari
يعتبر أول جهاز Home Console ظهر في نهاية السبعينيات. المصدر

(2) MSX
يعتبر أهم جهاز و أول كمبيوتر منزلي في اليابان و كوريا و الدول العربية و بعض دول أوروبا و البرازيل. المصدر

(3) معلومات عن الشركة
في عام 1982 تأسست شركة صخر، ثم بدأت العالمية "في السنة التي تليها" العمل في مجال الحاسب العربي. وقد اختارت الشركة مجال التعليم، وخلال فترة زمنية قليلة تمكنت العالمية من تعريب نظام MSX الذي حقق نجاحًا كبيرًا بمبيعات فاقت نصف المليون جهاز. المصدر

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 ؟
و ايضا في الموضوع هناك إضافات جميلة فحبذا لو تقرأوها.