• الإعلانات

    • فيصل الحربي

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

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

Khaled Alshaya

المشرفون
  • عدد المشاركات

    2,052
  • تاريخ الانضمام

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

كل شيء نشر بواسطة Khaled Alshaya

  1. السلام عليكم و رحمة الله و بركاته, دائماً ما اسمع عن الـ Unit Testing و عن فوائده و لكن الحقيقة تقال, حتى الآن لم أفهم مالمقصود منه بالضبط, و كيف تكون اختباراتي لمكتبة أقوم بكتباتها Unit Testing. قبل أن ندخل في استخدام أدوات الـ Unit Testing أود أن يعطينا أحد الأخوة أمثلة عن ماهية هذه الطريقة, و لماذا هي منتشرة بين مبرمجي العالم؟ هل من مجيب... تحياتي,,,
  2. السلام عليكم هذا الموضوع هو عبارة عن محاولة لجمع مجموعة من الكتب المفيدة في مجال البرمجة بلغة C++ / C في كل رد ستجد الكتاب مع الإشارة إلى مستوى الشخص الموجه له الكتاب ( مبتدئ , متوسط , محترف ) ,, تحياتي ,, ملاحظة :أتمنى عدم الرد حتى يكون الموضوع دليلاً للكتب فقط ,, و عند الرغبة في إضافة كتاب غير موجود الرجاء إرسال رسالة على البريد الخاص بالمنتدى لي أو لأحد الأخوة المشرفين في المنتدى.. ========================= عناوين المكتبة المكتبة مرتبة من الأحدث للأقدم لكاتبته الأخت رغد The Bracelet OReilly C In A Nutshell C For Dummies The C Programming Language C++ Primer C++ in a Nutshell Effective C++ Third Edition 55 Specific Ways to Improve Your Programs and Designs Elixir by Sultan Althubity C++ Cookbook The Art of C++ Memory as a Programming Concept in C and C++ Wrox Professional C++ Osborne - GCC Complete Reference ANSI/ISO C++ Professional Programmer's Handbook ========================= طبعاُ لا يسعني إلا أن أشكر صاحب الموقع المتميز دائماُ ,, الأخ علاء السلال ,, لأن معظم هذه الكتب توفرت عن طريق مكتبته العملاقة ,, tipsclub
  3. الله يرحمه و يغفر له و يدخله جنات النعيم
  4. نتيجة السؤال الثاني عشر 12

    Project Euler 35 :)
  5. السلام عليكم و رحمة الله و بركاته, لا أعتقد أن هناك مبرمج لم يسمع عن Vim و Emacs, و عن "أسطورية" هذين المحررين. في الماضي, قمت بتجربة Emacs و لكني لسبب ما لم أكمل الطريق, رغم إعجابي بـ Emacs الذي رأيت فيه إمكانيات هائلة. أما Vim فقد لازمتني عقدة كرهه حتى وقت ليس بالبعيد. كنت أسأل نفسي, بعد تجربته لعدة مرات و محاولة تعلم هذه الأسطورة التي كنت أرى فيها كذبة كبرى في عصر المحررات الحديثة كـ ++Notepad و Textmate و Sublimetext و خلافه, كيف سأعيش في عصر الثمانينات؟! منذ عدة أشهر, أخذت على نفسي عهداً بأن "أتعلم" Vim, حتى لو كلفني ذلك وقتاً كثيراً و لم يكن الأمر حب استطلاع هذه المرة. قمت بتحميل A Byte of Vim و بدأت القراءة و التطبيق. و الحق يقال, أنك لا يمكنك تعلم Vim, و إنما يجب أن يصبح "عادة". عانيت معاناة كبيرة في الأسابيع الأولى, و فجأة عندما عدت للمحررات المتقدمة السالف ذكرها (الحقيقة, المحررات البدائية) ظهر جلياً السبب الذي يجعل الـ Vimmers لا يستغنون عن Vim. هناك الكثيرون ممكن يعتقدون أن Vim محرر أسطوري لأنه يعتمد على لوحة المفاتيح في فعل كل شيء, و لكن هذا أمر خاطئ بكل تأكيد. الذي يجعل Vim محرراً أسطورياً هو فلسفته في تعريف ماهية "النصوص" text! كل المحررات التي عملت عليها سابقاً تعامل النصوص على أنها "حروف" مجردة, مهما كانت إمكانياتها متقدمة. و لكن Vim يأخذ الأمر إلى منظور آخر. في Vim, النصوص ليست حروف فقط, و إنما حروف و كلمات و سطور و قطع و الكثير من الاصطلاحات التي ستصطدم بها في البداية و التي ستجعل Vim أشبه بالجحيم. عدا عن ذلك, فكم اختصارات لوحة المفاتيح كبير جداً, و لهذا لا يصح "تعلمه" و لكن يجب أن تعتاد عليه. أعترف بأني مازلت مبتدئاً, فكل يوم أكتشف أمراً جديداً, و الجميل في Vim أنك لا تتعلم أوامر جامدة و إنما أوامر أولية تقوم بدمجها مع بعضها البعض لتحصل على ما تريد. في المرفقات, ستجد ملف vimrc الذي يقوم بتخصيص Vim. الغريب في الموضوع أني لم أجد شخصان يستخدمان نفس التخصيصات! و لكن يتم نشرها على سبيل الاستفادة بين الـ Vimmers. و هناك أيضاً theme أعجبني جداً مرفق أيضاً! هل هناك من يستخدم هذا المحرر الأسطوري في منتدانا؟ ما رأيكم فيه؟ و منذ متى تستخدمه؟ و لأي أغراض تستخدمه؟ تحياتي... vimmer.zip
  6. السلام عليكم,   جربتها قليلاً رغم أني لم أعمل عليها بشكل مكثف. مشكلتي الوحيدة معها و مع cpp netlib و مع جميع المكتبات التي توفر asynchronous model أنها تعتمد على الـ callbacks رغم أن الـ coroutines أسهل بكثير في كتابة منطق البرامج. أعلم أن هناك عدة مكتبات, و لكن توفير الـ coroutines في اللغة أمر آخر في غاية الأهمية. رغم كل ذلك فأنا أجدها سلسة في الاستخدام كمنصة, و Javascript هي لغة معروفة بالنسبة لي أصلاً, بالتالي لن تجد صعوبة في البداية بها.   تحياتي...
  7. TFS و Source Controls

    وائل,   هذه مقالة تتحدث بالتفصيل عن النقاط التي تريد معرفتها, و أكثر. On Git's Shortcomings
  8. بغض النظر عن اللغة أو التقنية التي ستعمل بها, لا تعمل في شيء لست (محترفاً) فيه, لكي تترك انطباعاً جيداً لدى الشخص الذي تقدم له عملك. الاحترافية هنا بمعناها العملي, و ليس الفخري, أي أنك يمكن أن تعمل مباشرة مع الاستعانة بالله في تعلم التفاصيل المطلوبة لإكمال المشروع.   منصة Net. تعمل على mono و هي عابرة للمنصات بشكل أو بآخر, ربما ليست الأفضل في هذا المجال و لكن الأمر ممكن بكل بساطة. يمكنك تجربة لغة Go فهي جميلة في مجال الويب و توفر الكثير مما لا يتوفر في اللغات الديناميكية.   تحياتي,
  9. ويكيبديا تنتقل إلى MariaDB

    فعلاً؟ يمكنك الحصول مقابل 10$ على خادم المواصفات التالية: 1GB Memory1 Core30GB SSD Disk2TB Transfer من https://www.digitalocean.com
  10. أهلاً أخي بسام, أمامك عدة خيارات, و كل خيار له مميزاته و سلبياته.   يمكن أن تطلق المشروع بنسختين, الأولى رخصتها GPL و الثانية تجارية. هذا يضمن حقك بأن أي شخص يقوم بتحسين مشروعك للاستفادة منه يجب أن ينشر التحسينات. و لك الحق وحدك في التصرف في النسخة التجارية بحيث أنك توفرها مع مميزات إضافية أو دعم و هكذا. هذا هو الأسلوب المتبع في حالة Qt.   يمكنك أيضاً, أن تنشر مشروعك تحت رخصة مفتوحة, بحيث توفر الدعم بشكل غير مجاني. هذه الطريقة المتبعة في الغالبية العظمى من المشاريع المفتوحة. لاحظ أنك ستوفر كخدمات تجارية الدعم و التركيب و التدريب و التحسينات.   الطريقة الثالثة, أن تسمح بالاستخدام الشخصي فقط غير التجاري و كمثال على هذا الأمر رخصة Affero GNU Public License و هذه الرخصة غير معتمدة حسب علمي كرخصة حرة, و لكنه أسلوب متبع في مشاريع شهيرة كمكتبة iText.   عموماً, الفائدة التي ستجنيها في كل الأحوال عند استخدام رخصة حرة, هو أن تبني المشروع سيكون أسرع بكل تأكيد مما لو كانت الرخصة تجارية بحتة, عدا عن التحسينات التي ستأتي من مجتمع المطورين الذين قاموا بتبني مشروعك. لاحظ أن أي جهة جادة في استخدام مشروعك لن تعبث بالمشروع من أجل توفير القليل من المال, و لكنها ستبحث عن شخص خبير بالمشروع لتركيبه و التدريب عليه و هكذا. الفكرة أنك المطور الأصلي للمشروع و بالتالي فإنك ستكون المرشح الأقوى في هذه الحالة كـ consultant أو freelancer للعمل على تطبيق المشروع لدى تلك الجهة.   تحياتي,
  11. و عليكم السلام,   أخي هل قمت بتعريبه يدوياً؟ مهمة شاقة جداً, ماذا عن الإصدارات اللاحقة؟   قم بتحميل Bootstrap و nodejs. ثم قم بتحميل R2 عن طريق npm. بعدها قم بتحويل أي style sheet تريدها بكل سهولة.   و هذا موقع صممته لتجربة النتيجة, و كانت أكثر من رائعة : ) Free Syria ID   تحياتي,
  12. السلام عليكم .... سنستعرض سوية كيفية بناء Boost باستخدام Visual Cpp 2008, بناؤها على مترجمات أخرى سهل, و الوثائق الخاصة بها موجهة للمبتدئين نسبياً. لذلك إن كنت تستخدم مترجماً آخر, أدع لك الإطلاع على وثائقها. في البداية قم بتحميل ملفات المكتبة من على العنوان التالي, قم بتحميل آخر نسخة من المكتبة و هي لحظة كتابة الموضوع 1.39.0 :: Boost Downloads ثانياً تأكد من أن الـ Visual Cpp من ضمن الـ path و لمعرفة الطريقة اطلع على الموضوع التالي إن لم يكن كذلك :: الأعداد العملاقة في ++c بمنتهى السهولة - شرح كامل بعد أن تقوم بالتحميل قم بفك الضغط عن الملف و إعادة تسمية مجلد المكتبة إلى boost. قم بالدخول إلى هذا المجلد عن طريق سطر الأوامر و اكتب الأمر التالي :: ثم قم بكتابة الأمر التالي :: الآن انتظر حتى يتم الانتهاء من بناء المكتبة لأنه سيأخذ بعض الوقت. في هذه الوقت سنتحدث عن Boost قليلاً :) Boost هي عبارة عن مظلة تضم تحتها 95 مكتبة حسب آخر مرة قمت بعد المكتبات. كل ما تحلم به و تتمناه موجود, أرجوك لا تقل لي لا يوجد هناك GUI, في الحقيقية Boost مكتبة لبناء الأنظمة, عندما تفكر في شيء و تريد إنجازه أختر الأدوات المناسبة من Boost و قم بمزجها بسهولة لتحصل على ما تريد, هناك bjam التي لو لاحظت قم باستدعائها من سطر الأوامر, هي أداة في Boost لكي تستطيع كتابة makefile و هذا الـ makefile يتم تحويله لكل مترجم بشكل تلقائي... لا داعي بعد اليوم لكتابة makefile مختلف لكل مترجم. هناك مكتبتان تستهوياني كثيراً, هما قطع فنية في الحقيقة, قصتي مع boost بدأت حينما أخذت مادة عن لغات البرمجة و كيفية بناء إحداها. ما يلفت النظر هو صعوبة كتابة lexer أو parser حتى و لو كانت اللغة بسيطة. المكتبة الأولى التي شدت انتباهي هي المكتبة spirit. يمكنك متابعة الموضوع حولها على الرابط التالي :: هل تستطيع لغة البرمجة المفضلة لديك أن تفعل ذلك ؟! طبعاً القصة لم تنتهي هنا.... من المعلومات التي خرجت بها من المادة, أن الـ refactoring tools عبارة أدوات تعمل بعد عمل lexing للكود و لا تتعامل مع الملفات النصية للكود مباشرة. الحقيقة أن الـ preprocessor عبارة عن refactoring tool لا أكثر :) و هو يعمل بعد عمل lexing ,كل ما يقوم به هو تحوير الكود من شكل إلى شكل آخر, سواء كانت القواعد معقدة أم لا فهذا يرجع للأداة نفسها. مرة أخرى, و من نفس مصمم spirit بالمناسبة, مكتبة wave, عبارة عن standard cpp lexer من أرقى التصاميم في عالم البرمجيات, سهل الاستخدام جداً مع قوة مطلقة لبناء ما تريد مع تخصيصه كما تحب :), مصمم المكتبتين شاب كان يعمل في معامل البحوث اليابانية, و لكنه ليس يابانياً كما أعتقد. و لكن بالذات هاتان المكتبتان تستعرضان عضلات ++C بكل وضوح :) كل ما تكلمنا عنه حتى الآن مكتبتان من أصل 95 مكتبة :), الأولى parser generator و الأخرى cpp lexer. هذه اهتماماتي هذه الأيام لذلك أتكلم عنها هنا :P عموماً إذا كنت تريد الاستفادة القصوى, أنصحك بتعلم مجموعة الـ smart pointers و الـ regex اللذان سيصبحان ضمن cpp0x في القريب العاجل بالإضافة إلى بعض المكتبات الأخرى. هناك مكتبة جميلة للـ file system, هل عانيت من إنشاء مجلد, قم بعمل ما تريد و اكتب الكود مرة و سيعمل أينما تريد على أي نظام مدعوم دون تدخل. هل تريد مكتبات رياضيات ؟ هل تريد مكتبات للتعامل مع المصفوفات الرياضية ؟ uBlas هل تريد مولدات أعداد عشوائية من الطراز الرفيع ؟ هل تريد data structure و لم تجدها ضمن STL ؟ ما رأيك بأن جميع خوارزميات STL تعمل مع تلك الـ data structure أيضاً ؟ هل ما زلت تتعامل مع دوال التاريخ و الوقت في C حتى الآن ؟؟؟!!!! هل تريد بناء مكتبات لـ python ؟؟!! بكل سهولة! هل تريد - و هذه هي المفضلة لدي :) - إضافة ميزات و لمسات جمالية للغة ؟ هل أنت أحد مجانين البرمجة, و تريد تطويع ++C لبناء المستحيل ؟ ما عليك سوى أن تكون "خبيراً" و تستخدم مكتبات الـ metaprogramming في boost لكي تفعل ما تشاء فعلياً. هل تريد التعامل مع النصوص بطريقة احترافية ؟ الخوارزميات الشائعة للنصوص ؟ إن لم ينفع فعليك بالـ tokenizer ؟ إن لم ينفع عليك بالـ regex ؟ إن لم ينفع فعليك بـ xpressive الذي هو في الحقيقة بين الـ parser و بين الـ regex B) ؟ لم ينفع ؟ عليك إذاً بالمدرعة spirit!!! لا أعلم عن لغة يمكنها التعامل مع ما أريده على هذا المستوى من "داخل اللغة" نفسها, و ليس عن طريق توليد كود في مكان آخر و قص و لصق و ما شابه! الكثير و الكثير و الذي لا أدري كيف كنت أستخدم ++C بدونها, عموماً أدع اكتشاف المكتبة لك :) الآن سنقوم بربط المكتبة مع المترجم لكي تعامل كما تعامل المكتبات القياسية..... أولاً قم باختيار Tools من القائمة, ثم options ثم قم بالوصول إلى التالي كما في الصورة :: سوف نخبر VC أنه يجب أن يعامل Boost على أنها مكتبة قياسية... قم بإضافة مجلد boost الرئيسي, ثم قم بإضافة مجلد المكتبات اللازمة لـ boost :: و هكذا انتهينا.... قم الآن بإنشاء مشروع جديد, و جرب الكود التالي :: #include <boost/filesystem.hpp> int main() { boost::filesystem::path newFolder("New Folder"); boost::filesystem::create_directory(newFolder); return 0; } إذا نتج عن تنفيذ الكود مجلد جديد باسم New Folder هذا معناه أننا نجحنا, أدع المجال لكم الآن.... و إذا كان هناك استفسار حول بناء المكتبة أرجو مشاركته مع الجميع لكي يصبح الموضوع بذرة لمن يريد استخدام المكتبة :) تحياتي ....
  13. CTRL + F5 لتشغيل البرنامج في نافذة مستقلة و بالتالي لا يتم العودة إلى Visual Studio مباشرة.
  14. حاويات من جوجل تحفظ الوقت والذاكرة

      أخي لاحظ أنه في حالة أي عملية تقوم بتعديل الشجرة, في حالة الـ Containers الجديدة من Google فإن الـ Iterators تعتبر غير صالحة بعد تلك العملية. السبب بسيط, هو أن كل Node في الـ B-Tree تحمل أكثر من قيمة و بالتالي فإنه من غير الممكن (عملياً) تحديد أي Node تم تعديلها و بالتالي أي مجموعة قيمة تم تعديلها و بالتالي لا يمكن ضمان صلاحية الـ Iterators بعد هكذا عملية.   هناك مكتبة من Boost من أحد مؤسسيها في الحقيقة تقترح إضافة B-Tree Containers و لكن للـ Disk-Based و لكن لم يتم ضمها بعد, يمكنك الاطلاع عليها من هنا: https://github.com/Beman/Boost-Btree   تحياتي...
  15. سؤال لتحريك الأذهان

    عبارة عن declaration لدالة اسمها b و تعيد كائن من نوع a. أما عن الـ parameters لهذه الدالة فهي عبارة عن دالة أيضاً, تعيد كائن من نوع a و لا تستقبل parameters :) يسمى هذا الـ most vexing parse لأن هناك ambiguity في تفسير هذا السطر, و المواصفات القياسية تحدد التفسير المذكور على أنه التفسير القياسي.
  16. هندسة البرمجيات في معظم الجامعات عبارة عن نسخة مخففة من علوم الحاسب مع بعض المواد الإنشائية التي لا يمكن أن تكتسب عن طريق الدراسة و إنما عن طريق التجربة و الخبرة في العمل ^_^
  17. هناك أمران, الأمر الأول نعم يمكن أن تستغني عن المكتبات القياسية بسهولة, أما مكتبات الدعم وقت التشغيل فهي أمر آخر. بمعنى أن برنامجك أصبح لا يعتمد على أي شيء إطلاقاً كأنه skeleton exe. طرحت الموضوع منذ فترة و كانت تجربة لإنتاج ملفات تنفيذية بأصغر حجم ممكن.
  18. حسب Wikipedia فإنها تعتمد على المنطقة, و لكن نعم يمكن أن تصل الضريبة إلى أكثر من 15% في بعض المناطق: http://en.wikipedia.org/wiki/Sales_taxes_in_Canada
  19. السلام عليكم... مقال أقل ما يقال عنه أنه من السهل الممتنع, قرأت المقال عدة مرات و بحثت كثيراً حتى استوعب النقاط التي يتكلم عنها المقال. ملخص المقال, هو الحديث عن انحراف الـ nix* عن الـ elegance الذي بنيت عليه أساساً بضياعها في متاهات ما أسمي hacking مغالطة, و الحقيقة أنها ليست الـ hacking الذي بني عليها النظام و لكن كتابة الكود دون جودة في التصميم مما أدى إلى ترهلات كبيرة في النظام و الأدوات الأساسية القائمة عليه. A Generation Lost in the Bazaar
  20. وقعت شركة Digia اتفاقية مع شركة Nokia لنقل ملكية Qt. المثير للانتباه أن Digia تنوي توسيع الأنظمة التي يعمل عليها ليشمل Windows 8 و Android و iOS.
  21. هل يمكنك إيجاد جميع الإحتمالات !؟

    هذا مثال باستخدام Cpp11, فقط قم بتغيير numbers_count لتنتج العدد الذي تريده من الأعداد العشوائية. استخدمت g++ 7.1 لترجمة البرنامج: #include <cstdint> #include <cstddef> #include <fstream> #include <iomanip> #include <random> int main(){ // specify the min/max range of the vouchers we want to generate const std::uint64_t min = 0x0ul, max = 0xfffffffffffful; // specify how many vouchers we want to generate, and the width // of the vouchers when represented in text const std::size_t numbers_count = 1000000, field_width = 12; std::random_device seed; std::mt19937_64 engine(seed()); std::uniform_int_distribution<std::uint64_t> range(min, max); auto rnd = [&](){ return range(engine); }; std::ofstream output("output.txt"); output << std::hex << std::setfill('0'); for(std::size_t i = 0; i < numbers_count; ++i) output << std::setw(field_width) << rnd() << '\n'; }
  22. هل يمكنك إيجاد جميع الإحتمالات !؟

    لنحسب عدد الاحتمالات ببساطة: |solution space| = 16^12 = 281474976710656 for each solution, we have 12 digits. Lets assume that each digit is represented with one byte only for simplicity. solution space size = 281474976710656 * 12 Bytes = 3377699720527872 Bytes = 3298534883328 KiB = 3221225472 MiB = 3145728 GiB أود أن أرى من لديه ثلاثة ملايين GiB لتخزين كل الاحتمالات :sad: إن كان المطلوب هو إنتاج عينات عشوائية من هذا المجال, فالموضوع يتم ببساطة عن طريق uniform distributed random number في الحالة البسيطة إن كانت جميع الاحتمالات متساوية في الأهمية. أما محاولة إنتاجها و تخزين كل الاحتمالات, فهو أمر غير ممكن على الأقل بالتكنلوجيا المتوفرة.
  23. أنا أيضاً كنت مستخدم Hotmail منذ أن عرفت الانترنت, و لكن انتقلت إلى gmail منذ عدة سنوات لأنه يوفر IMAP مجاناً, هل يوفر ذلك outlook؟
  24. السلام عليكم, و رمضان مبارك علينا و عليكم :) إذا كنت تعرف ماهي الـ Shortest Path Problem فلابد أن تشاهد هذا الفيديو لأنه مذهل حقاً, كيف خلق الله عز و جل القدرة لهذا الكائن أن يتمدد و يكتشف أقصر الطرق. شاهد الفديو ابتداءً من ساعة و ثلاثة دقائق و خمسون ثانية 1:03:50 http://www.youtube.com/watch?v=sNAxrpzc6ws
  25. أخ محمد, خوارزمية Dijkstra هي خوارزمية لحل نسخة مبسطة من المسألة, عندما نريد إيجاد أقصر طريق بين نقطتين. المشكلة يسمونها Travelling Salesman ;)