Wednesday, June 30, 2010

Dynamic Building for Qt Apps on Windows


قبل التحدث عن كيفية بناء مشروع Qt , أريد أن أوضح الفرق بين شيئين: Debug & Release

Debug Version : يحتوي البرنامج الناتج على بعض الإضافات التي تساعد في عملية الـdebugging مثل مراقبة المتغيرات داخل البرنامج و معرفة أي خطوة داخل البرنامج يتم تنفيذها الآن.


Release Version : يحدث شيء مختلف هنا و هو Code Optimization. أي قد تتم بعض التعديلات على الكود الخاص بك للزيادة من سرعة البرنامج أو توفيرا للذاكرة المستخدمة أو..... (للمزيد) . نتيجة لذلك يكون البرنامج أكثر سرعة من الـDebug Version و أقل حجما و لكن قد تلاحظ  بعض المشكلات نتيجة لعملية الـoptimization فيجب التأكد من ذلك بإعادة تجربة البرنامج بعد بنائه كـ release version .

طريقة البناء في Qt :

1-      قم باختيار  Build -> Set Build Configuration -> Release
(أو Build -> Open Build/Run Target Selector -> Desktop -> Release في إصدارة Nokia Qt SDK 1.0.1 )

2-      قم بالبناء من خلال Build -> Build Project

3-      الآن تجد البرنامج الناتج في مجلد Release داخل مجلد المشروع. و لكنه لن يعمل بعد

4-      الآن هناك بعض الـDLLs التي يجب وضعها بجانب البرنامج كي يعمل. سوف نأخذ نسخة منها من مجلد Qt . على سبيل المثال: المجلد الذي سآخذ منه هو C:\Qt\2010.01\qt\bin (قد يختلف قليلا حسب الإصدار أو مكان تثبيت Qt )

الملفات التي سآخذها أولا هي:
libgcc_s_dw2-1.dll
mingwm10.dll
QtCore4.dll

هناك بعض الملفات الإضافية التي آخذها حسب الـModules التي اخترتها عند إنشائي للمشروع. فمثلا إذا كان مشروعي قد استخدم GUI Module فسأحتاج لـ QtGui4.dll, و إذا استخدمت XML Module فسأحتاج إلى QtXml4.dll .... و هكذا. لابد من ملاحظة شيء مهم وهو أن هناك ملفات باسم مشابه و لكن مضاف إليها حرف d مثل QtCored4.dll و QtGuid4.dll .. و هي خاصة بالـdebug version فلا يجب أن نخلط بينهم (الملفات الخاصة بالـDebug أكبر في الحجم من الـRelease عدة مرات).


كل هذه الملفات أضعها بجانب البرنامج في نفس المجلد لأضمن عمله على أي جهاز.

هناك طريقة أخرى لجمع هذه الملفات بداخل البرنامج تسمى Static Building, و سأتحدث عنها لاحقا إن شاء الله.

Tuesday, June 29, 2010

C++ for Beginners: 2/2



هذا هو الجزء الثاني من C++ for Beginners و هدفه الأساسي التعريف ببعض الـ IDEs المستخدمة لإنشاء برامج C++ ذات واجهة رسومية GUI. لقد استخدمت اثنين بشكل أساسي و هما
Visual Studio
Qt
بالإضافة لمن رشّحوا استخدام NetBeans و Eclipse  و لكن لم أستخدمهم بعد. لذلك سأكتفي بالمقارنة بين ما استخدمته.

Platform:
Visual Studio : Works only on Windows
Qt: Works on Windows, Linux, Mac, Symbian … You just recompile your project on that platform to make a copy for it.
But if you only develop on Windows, this piece of info is not important.

GUI Design:
I liked the GUI in Qt much more than Visual Studio, because it has many useful elements, a variety of 3rd party classes, and a very very  important feature called ‘Layout’. It means that if you change the size of program window, the design will still fit inside it.

Debugging:
The debugging in Visual Studio is easier when debugging very big programs. But for normal programs, both Visual Studio and Qt are fine.

IntelliSense  (auto complete):
Both are fine, but Visual Studio has a more fancy one.

Event Handling:
Qt uses something called ‘Signals and Slots’ which makes event handling a lot easier than Visual Studio.

Documentation and Help:
Visual Studio is very popular, so there are a lot of forums that can help you. There are also lots of forums for Qt but not as much as Visual Studio.
For documentation, I found the documentation of Qt  more helpful than the MSDN of Visual Studio






بالنسبة لي فأنا أفضّل Qt أكثر من Visual Studio... و لكن يمكنكم أن تختبروهما و أي IDE آخر  تختارونه. ففي النهاية كل شخص يختار بناء على خبرات أو نقاط ذات اهتمام أكثر من الأخرى.


Websites to help:

NetBeans

Qt Free Reference:

Friday, June 25, 2010

C++ for Beginners: 1/2





لغة C++ هي واحدة من أقوى لغات البرمجة التي يمكنك تعلّمها دون مجهود كبير. فأساسيات اللغة ليست بالكثيرة و بالتالي سريعة الفهم و التعلّم. برامجها تمتاز بالسرعة. لا تعتمد على نظام تشغيل محدد فيمكن استخدامها على Windows, Linux, Mac.. بدون اختلافات. كما أنها لا تزال تتطوّر منذ ظهورها و بالتالي فهي تنافس لغات البرمجة الأخرى.


هذه بعض المصادر التي أنصح باستخدامها لتعلّم أساسيات C++ , و هي أساسيات يمكن تعلّمها في أبسط أشكال البرامج: Console Applications (أي برامج تتعامل فقط من خلال نصوص تظهر للمستخدم أو يدخلها المستخدم)


cplusplus.com
مصدر مثالي لتعلّم C++ من الصفر. يتكون من حوالي 140 صفحة تشمل الأساسيات التي يجب تعلّمها و تحتوي على بعض الأمثلة الصغيرة للتوضيح. هي غير كافية للتمكن من اللغة و لكنها تشكّل صورة كاملة عن اللغة يمكن البناء عليها من مصادر أكبر.


cprogramming.com
هذا المصدر أيضا يبدأ من الصفر و لكنه يحتوى على العديد من المواضيع المتقدمة التي يمكن الدخول فيها بعد التمكن من الأساسيات. و هو أيضا يشرح باستخدام أمثلة بسيطة لتوضيح كل نقطة.


C Frequently Asked Questions
أنصح بتصفحه و لكن بعد تعلّم أساسيات C++ , لأنه يناقش بعض الأخطاء التي قد نقع فيها أثناء البرمجة. أجده مفيدا للتأكد من مدى فهمي لبعض النقاط في C++


ثم المصدر المفضّل لدي:
C++ How to Program
هذا الكتاب رغم كثرة صفحاتة و طول الشرح في كل نقطة في C++ و كثرة الأمثلة التي قد تبدو مملة (على الأقل بالنسبة لي), إلا أنه مثالي في الشرح. فهو لا يعرّفني على إحدى النقاط و لكنه يشرحها بالفصيل و باحتمالاتها المختلفة, بل أيضا أفضل ممارسات البرمجة لكل نقطة من حيث تجنّب الأخطاء و زيادة السرعة. و مع الكتاب تأتي اسطوانة بها جميع الأمثلة المذكورة بالمتاب لتوفير وقت إعادة كتابتها. كما أن النسخة الجديدة من الكتاب بها مواضيع مهمة تخص تطوير C++ و أسباب بقاء C++ قوية و مستخدمة بكثرة حتى الآن.




أي من المصادر السابقة أجده كافيا لتعلّم C++ (مع اختلاف درجات الإتقان و تغطية المواضيع الجديدة). و بمعرفة هذه الأساسيات, نكون مستعدين للإنشاء البرامج ذات الواجهة الرسومية التي نستخدمها في كل برامجنا, و التي سأتحدث عنها في المرة القادمة.




بعض البرامج التي يمكن استخدامها:
في هذه المرحلة من تعلّم C++ , لا داعى لاستخدام أي من البرامج الكبيرة مثل Visual C++, و لكن تكفينا برامج بسيطة مثل:

Friday, June 18, 2010

المقدمة Introduction



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


هذه هي أول مدونة لي في مجال تخصصي – و هو مجال الحاسبات و النظم - , السبب في إنشائها كان مشاركة ما أعرفه من علم و إن كان قليلا بالإضافة لتسجيل المستوى الذي أنا عليه كل فترة لأعرف مدى تقدمي و تكون سببا في دفعى للتقدم أكثر. هناك بعض الخطوط التي أحاول الالتزام بها, و منها:
  • ما أكتبه يجب أن أتأكد منه بنفسي, و بخاصة الأكواد.
  •  المهم في العلم ليس مجرد التلقي , و إنما معرفة كيفية الوصول لهذا العلم و تطبيقه. و هذا هو الأسلوب الذي أحاول اتباعه في تعلّمي.
  • لا فائدة من إعادة كتابة بعض المواضيع التي أجدها, و لكن يمكنني تلخيص الموضوع أو خلاصة ما بحثت عنه مع وضع المصادر التي استخدمتها.
  • يمكنكم استخدام و توزيع ما أنشره - طالما لم أذكر غير ذلك - فمن حق الجميع أن يتعلّم.
  • التعليق على ما أكتبه يكون محل ترحيب شديد. لأنه أسلوب جيد لمعرفة أخطائي و تطوير أسلوبي.


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





This is my first technical blog in my speciality, Computers and Systems. The reason for making it was sharing what I know, even if it was a little, in addition to leaving a record of my current level to observe my development and find a way to push me forward. There are some guidelines I'm trying to stick to:
  • I make sure of what I write, especially the codes.
  • Learning is not about materials or sources, but how to learn and apply. And this is the way I'm trying to apply in my learning.
  • There is no use of rewriting the topics I find, but I can summarize the topic or a summary of my search, aside with the resources I used.
  • You are free to use or distribute what I publish, unless I mention anything else. It is the right of everyone to learn.
  • Commenting on my posts is more than welcomed. Because it is a good way of knowing my mistakes and developing my style.

I hope I be useful through this blog, and waiting for your opinions ... stay tuned :)