• الإعلانات

    • فيصل الحربي

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

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

Khaled Alshaya

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

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

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

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

  1. برنامج لقرأة البطاقة الذكية .

    و الله يا أخ محمد, كنت أتمنى لو أنني عملت على Financial Transactions الحقيقية, و لكنني قمت ببناء dummy payment system بحيث أن الـ Cards لا تملك قيمة إلا في نظامنا. تحتاج إلى معرفة format الرسائل التي تتبع هذا المعيار, و لا أدري إن كان هناك API مع الـ readers لهذه الواجهة. لا أدري كيف يمكنني المساعدة, و لكن حقيقة أتمنى لك التوفيق, يبدو مشروع كبير. ======== لا أدري إن كنت مررت على المقال التالي, و لكنه يبدو جيداً من النظرة الأولى: http://www.codeproject.com/KB/scrapbook/ISO8583.aspx تحياتي...
  2. برنامج لقرأة البطاقة الذكية .

    عزيزي, يجب عليك تحديد أي معيار تعمل من خلاله البطاقة لكي تستطيع اختيار القارئ المناسب. من ثم تستعمل الـ API الخاص به. لو كانت هذه البطاقة بطاقة تستعمل بشكل فعلي, فعلى الأرجح أنه لا يمكنك قراءة ما عليها دون عملية تحقق Authentication. لذلك حدد نوع البطاقة التي لديك, و احصل على القارئ المناسب. ========== بالمناسبة عملت أيضاً على هذا القارئ و أنصح به كبداية, لأنه سهل البرمجة و الـ API متوفرة بعدة لغات(عملي كان بلغة C). ACR120 Contactless Smart Card Reader عموماً, لم اختر المنصة و لكنها الأسهل بين الذين عملت عليهم. لذلك, لا تعتمد على كلامي في اختيارها لعملك و احصل على استشارة ممن لديه خبرة أكبر في السوق.
  3. برنامج لقرأة البطاقة الذكية .

    مالذي تريده بالضبط؟ هناك أجهزة قراءة, تعمل مع أنواع معينة من البطاقات. البطاقات قد تكون Contact أو Contactless أو Dual Interface و قد تصل إلى أن تكون Hybrid! مع الشريط المغناطيسي. هناك Standards للبطاقات. و لكن قل قارئ أو سلسلة تأتي مع API, يمكنك استخدامها. هناك Instruction Set للعمليات المالية(حسب ما أذكر لـ Visa و خلافه). البطاقات تتدرج من كونها عبارة عن كروت بلاستيكية تحمل ID عبارة عن بايتين إلى أجهزة كاملة مع co-proccesors لعمليات التشفير و الـ Hashing و نظام ملفات و نظام تشغيل و حتى Virtual Machine في داخل ذلك النظام الموضوع على البطاقة!!! منذ سنة تقريباً, شاركت في مشروع تضمن Passive/Active RFID Tags و Contactless Reader تتبع ISO/IEC 14443 كـ dummy payment card. غالباً أنت تبحث عن البطاقات التي تتبع ISO/IEC 14443, لذلك ابدأ البحث من هذه النقطة و عد لنا بما تريد بالتحديد حتى نتمكن من المساعدة. غير ذلك, طرحك للسؤال بهذه الطريقة سيضيع من وقتك لأنه لا أحد يستطيع الإجابة على سؤال لا نعرف ماذا تريد فيه.
  4. كيف يمكن تحويل هذه الداله إلى template class

    عندما تقوم بعمل declaration فإن الـ specializations المعرفة فقط هي المسموحة و إلا يصدر خطأ, و في هذه الحالة بالذات لا فرق, لأن هناك قيمتان true و false. قام بكتابة الأمر بطريقة أنيقة لا أكثر بدلاً من أن تكون false(أو true إذا أردت) هي الـ generic definition.
  5. كيف يمكن تحويل هذه الداله إلى template class

    لا أخ محمد, و إلا احتجنا "لمفسر" كامل لـ ++C يعمل وقت الترجمة. constexpr هي عبارة عن subset من ++C, بحيث أنها تسمح بـ return و عبارة بعدها, و لكن الـ recursion مسموح و الـ conditional مسموح, فهي لغة برمجة كاملة يمكنك فعل أي شيء تريده(لا يعتمد على مدخل أو مخرج وقت التشغيل بالطبع). بالطبع يمكنك استخدامها مع متغيرات وقت التشغيل و لكنها في تلك الحالة تنفذ وقت التشغيل و ليس وقت الترجمة. لذلك ليس هناك حاجة لكتابة نسختين من الدالة رغم أنه من الممكن فعل ذلك لاستخدام الحلقات, لأنها أفضل بالطبع من الـ recursion. بالنسبة للصيغة, فهي الطريقة المعتادة أخ محمد, و الحقيقة لم أكن أعرف أن الـ templates ليست lazy!!! عندما كتبت المثال, كنت أتوقع أن الخطأ من الكود الذي كتبته و لكن عندما جاءت الإجابة في SO تذكرت أنني فعلاً لم أقم بكتابة أي meta function بهذه الطريقة أبداً! طريقة الـ specialization عبارة pattern matching توجد في لغات أخرى عديدة كـ run-time feature و لكنها غير موجودة في ++C غير في الـ metaprogramming! تحياتي,
  6. عزيزي, يجب عليك تكرار الإعدادات لنسخة الـ debug كما وضحت في الموضوع, من ثم قم باختيار release و اختيار نفس الإعدادات في وضع release. نفس الخطوات بالضبط, و ستقوم boost باختيار المكتبة الستاتيكية المناسبة تلقائياً. و تأكد أنك اتبعت الخطوات التي شرحتها في الموضوع لكي يتم بناء Boost بشكل كامل.
  7. كيف يمكن تحويل هذه الداله إلى template class

    و الله يا أخ محمد كنت سأقوم بكتابة نسخة مشابهة للإجابة المطروحة في SO لأنني حقيقة لم أكتب recursive template بدون specialization من قبل و لكن لم أتوقع أن كتابتها بهذا الشكل غير ممكنة في ++C! و لكن بالفعل سؤالك فتح أفق جديد بالنسبة لي في ++C. لم أكن أعلم أن الـ templates في ++C ليست Lazy Evaluated و هذا يشرح سبب الخطأ بكل بساطة. طرحت سؤالاً في SO و جاءت الإجابة و الحمدلله لتشرح السبب. شكراً لك على الموضوع القيم.
  8. عزيزي بالنسبة للسؤال الأول, قام أخي محمد بالإجابة عليه. بالنسبة للثاني, فهذا الخطأ ناتج عن عدم معرفة المترجم أين يجد الـ static lib الخاصة بـ boost::file_system. تأكد من أنك أعددت Boost بطريقة صحيحة, و لا تنسى ترجمة برنامجك كـ release كما قال محمد, لكي تستطيع توزيعه دون الحاجة للمكتبات التي توفر خصائص التنقيح.
  9. كيف يمكن تحويل هذه الداله إلى template class

    هذه هي الطريقة باستخدام constexpr, أجدها أسهل للإنسان الطبيعي العاقل من اللعب مع الـ structs :lol: قمت بتجربتها و تعمل بشكل سليم, و سأحاول جعل النسخة الأولى تعمل! constexpr std::size_t isqrt_impl (std::size_t sq, std::size_t dlt, std::size_t value){ return sq <= value ? isqrt_impl(sq+dlt, dlt+2, value) : (dlt >> 1) - 1; } constexpr std::size_t isqrt(std::size_t value){ return isqrt_impl(1, 3, value); } int main(){ std::cout << isqrt(24) << std::endl; // prints: 4 }
  10. كيف يمكن تحويل هذه الداله إلى template class

    السلام عليكم.... لم أقم بتجربة الكود و لكن العملية مجرد تحويل التكرار إلى recursion: #include <cstddef> #include <iostream> template <std::size_t value, std::size_t sq, std::size_t dlt> struct isqrt_impl{ static const std::size_t square_root = sq <= value ? isqrt_impl<value, sq+dlt, dlt+2>::square_root : (dlt >> 1) - 1; }; template <std::size_t value> struct isqrt{ static const std::size_t square_root = isqrt_impl<value, 1, 3>::square_root; }; int main(){ std::cout << isqrt<25>::square_root << std::endl; }
  11. يمكنك استخدام الطريقة التالية: $ git diff v1 v2 مكان v1 و v2 هي الـ commits التي تريد مقارنتها, و يمكنك الإشارة إليها بالـ hash أو رقم النسخة المحلي, أو الـ tag حسب علمي. عموماً, الطريقة من هنا: http://learn.github.com/p/diff.html تحت بند: changes between two commits
  12. جميل أخ محمد, لم أكن أعرف أنها موجودة في Clojure :D
  13. كما قلت في تعليقي الأول يا جماعة, الهدف من تحويلها إلى Javascript هو إعطائها فرصة للانتشار و جعل المبرمجين يجربونها في أي مكان. و لكن Dart بكل بساطة لديها potential لكي تكون efficiently compiled مثلها مثل أي لغة كـ Java أو #C. نقطة الأداء, سوف تظهر عندما يتم كتابة VM لها باستخدام ++C/C و سترى كيف يمكن للغة scripting كـ dart أن ينتج عنها كود يعادل المكتوب بأي لغة static. هذا الأمر من المستحيل فعله في حالة js أو python على سبيل المثال, لأن الأنواع لابد أن تكون متوفرة لحظة التشغيل, بينما في dart الأنواع معروفة وقت الترجمة(إلا إن كنت تستخدم الـ dynamic typing فيها). عموماً, سنرى في الأيام القادمة ماذا ستوفر google لهذه اللغة.
  14. بالفعل خسرت البشرية عقلية فريدة من نوعها.
  15. هل يمكنك الإشارة إلى رابط يشرح الميزة فيها, لا أعتقد أن هذه الميزة بالذات موجودة. و الـ Optional Type Annotation لا تعني أنه يمكن التحويل بين الـ dynamic و static و إنما يمكنك الاستغناء عن var في #C على سبيل المثال, و لكن النوع لا بد من تحديده.
  16. حسب ما أفهمه, Scala ليس فيها optional typing كالموجود في Dart. الطريقة المتبعة في Scala هي استخلاص النوع من الـ initializer و هي مثل استخدام var في #C و auto في ++C. في Dart يمكنك التنقل بين الـ dynamic typing و الـ static typing.
  17. سأطرح بعض النقاط, و يمكن أن نتناقش فيها. أتمنى لو كنت مبرمج ويب جيد و لكن للأسف حلمي لم يتحقق بعد لذلك, سأطرح النقاط من وجهة نظر اللغة نفسها :) الأمر الأول, هو أن لغة Dart حسب رأيي المتواضع لها أهداف حقيقية بتغيير خارطة الـ scripting! أنا أقول هذا الأمر لأن هناك قرارات تم اتخاذها تحتاج إلى تعمق في فهم الأهداف لمعرفة الأسباب الحقيقية وارء بعض القرارات. أولاً, اختارت Dart أن تتبع أسلوب الـ Classic Inheritance و لا تذهب في طريق الـ Prototype Inheritance. على الرغم من أن الثاني أكثر مرونة, إلا أن الأول يعمل بشكل أكثر من ممتاز في حالة وجود Static Typing. لأن Dart توفر Optional Typing و هذه ميزة حقيقة من المرات القلائل التي أراها في لغة, و أول مرة في لغة C-like لا أدري حقيقة ما مستقبل هذه الميزة. و لكن بلا شك أنها ثورية. و بوجود الـ Classic Inheritance سيكون بالإمكان كتابة كود كفؤ بوجود الـ Static Typing. الجميل في الأمر أنك يمكن أن تبدأ في كتابة code يتبع dynamic typing, و بمجرد أنك قد رأيت أن الـ Prototype ناجح, ستبدأ في إضافة الـ Type Annotation و بالتالي فإنك ستكسب أمرين رئيسيين بهذه الطريقة. أولاً, التطبيق سوف يعمل دون اللجوء لتحديد الأنواع لمرونة الطريقة, ثم عند إضافة الأنواع سينتج لديك كود كفؤ و في نفس الوقت ستتيح الفرصة لاكتشاف أخطاء باستخدام المترجم فقط, كان يجب كتابة unit-testi مملة لها لتغطية جميع مسارات البرنامج! اختيارهم الـ C-like syntax ليس مستغرباً بالنسبة لي. ليس لأنه الأفضل(أفضل الطريقة البايثونية), و لكن لأن c-like أفضل طريقة للوصول إلى قلب المبرمجين بسرعة. و لكن الغريب في الأمر, أنهم قاموا بكتابة الآلة الافتراضية لـ Dart باستخدام Javascript؟! فكرت في هذا الأمر قليلاً, و كنت سأشعل فتيل الحرب ضد هذه اللغة, و لكن فجأة فهمت المطلوب. هم يريدون أن تتطور اللغة في البداية في كل مكان. الطريقة الوحيدة هي أن تعمل في كل مكان من خلال JS Implementation. الغريب أنهم لا يريدون عمل compilation كما هو الحال في CoffeScript و لكنهم يريدون توفير المرونة في البداية. النتيجة, أن هذه الآلة الافتراضية ستراها على Chrome في وقت ليس ببعيد. ربما بـ Compatibility Mode بحيث إذا كانت الآلة الافتراضية المكتوبة بـ JS موجودة في موقعك سيقوم Chrome بالتقاطها و التعامل مع الأمر. كما قلت, Dart لا تريد أن تكون standard أخرى على الويب, و لكنها تريد أن تكون الـ standard "للتطبيقات" التي تحتاج إلى أداء عالي(و أنا أشير هنا إلى HTML 5)! عموماً, لدي رأي ظاهري في المكتبات و لكن دون تجربة اللغة بشكل حقيقي لا يمكن الحكم على المكتبات. و قبل أن أنسى, Dart لغة concurrency من المقام الرفيع من أتباع الـ message passing. قد لا أرى هذه الميزة مهمة الآن, و لكن عند توفر concurrent implementations من الآلة الافتراضية ستجبر العديد من المبرمجين على استخدامها لتوفير تطبيقات فعالة. تحياتي...
  18. الـ vm مكتوبة بلغة js و لذلك ستكون مضمنة مع موقعك.
  19. اللغة صدرت اليوم, و فيها ميزات جميلة: http://www.dartlang.org/
  20. عندما تكون الإحصائية موضوعة بشكل علمي, و الـ sample تكون مأخوذة بشكل عشوائي, و طريقة التعميم تأخذ المنحى العملي عندها أوافقك الرأي. و لكن أي شخص يفهم كلمتين في الإحصاء يعلم أن هذه "الإحصائية" لا علاقة لها بالعلم لا من قريب و لا من بعيد, و لا علاقة لها بالمختصين لا من قريب و لا من بعيد.
  21. الذين "يعملون" على C لا يبحثون عن لغة C و إنما عن تطبيقاتها: device drivers, posix, win api, glib, و خلافه. الذي يعمل بلغة C دون وجود المواصفات على مكتبه أو على الأقل K&R فهو يلعب. و بالمناسبة 99% من الإحصائيات غير حقيقية, بما فيهم هذه الإحصائية. و إذا كنت تأخذ هذه الإحصائية أكثر من المتعة للنظر, و تتخذ عليها قرار(الإحصائيات يتخذ عليها قرارات صحيح؟): The language should have an own entry on Wikipedia and it should clearly state that it concerns a programming language. This is the reason why ColdFusion, (Ruby on) Rails, Excel, Cocoa, ASP and AJAX are not considered programming languages for the index. هذا أول ضابط. طبعاً ضابط إيقاع. The ratings are calculated by counting hits of the most popular search engines. The search query that is used is +"<language> programming" This search query is executed for the top 7 websites of Alexa that meet the following conditions: The entry page of the site contains a search facility The result of querying the site contains an indication of the number of page hits Based on these criteria currently the following search engines are used: Google: 32% Blogger: 32% Wikipedia: 16% YouTube: 10% Yahoo!: 3% Bing: 3% Baidu: 3% مرة أخرى يا عزيزي, هذا ليس إلا كمية البحث على أوزان مختلفة لأين يتم البحث! Besides the rating of programming languages, there is also a status indicated in the TIOBE chart. Programming languages that have status "A" are considered to be mainstream languages. Status "A-" and "A--" indicate that a programming language is between status "A" and "B". If a programming language has a rating that is higher than 0.7% (yes, this number is arguable but we had to fix it somewhere) for at least 3 months it is rewarded status "A". The first two months the programming language will receive status "A--" and "A-" respectively. The opposite holds for languages that go from status "A" to status "B". So if a language had status "A" 2 months ago, a rating of "0.607%" last month and a rating of "0.687%" now, it will have status "A--". From a supportability point of view, it is strongly advised to stick to mainstream languages for industrial, mission-critical software systems. This is for three reasons: The pool of skilled engineers is much smaller for non-mainstream languages Tool vendors do not write and maintain tools for non-mainstream languages In general fewer libraries are available for non-mainstream languages It is important to note that this is only one of many criteria to be used before taking a decision to adopt a language. Other criteria are: suitability for the application domain, reliability of compilers, expression power, performance, and scalability. Hence, Ada can still be used for mission-critical systems although one should consider alternatives. This is what you also see in daily practice: Ada is hardly used for new mission-critical systems anymore. The other way around is also true. Everybody will agree that it is not wise to program missile software in JavaScript. مرة أخرى, من وضع هذه التصنيفات! ماذا تعني mainstream language؟ هو قام بتعريفها. يعني بالعربي, أنا ما أشتري أي شيء أقرأه. و لمعلوماتك الـ sample التي يستخدمها تعتبر convenient sample و ليست random sample حتى يعمم منها على الـ population و هو أصلاً لم يشرح طريقة التعميم على الـ population من الـ sample التي لديه.
  22. bitbucket يدعم git

    بصراحة الـ centralized SC بشكل عام معقدة أكثر من اللازم خصوصاً في المشاريع الشخصية. و أرى أن hg سهل الاستخدام جداً, استخدمته فترة طويلة قبل أن أبدأ في استخدام bitbucket.
  23. bitbucket يدعم git

    جميل, أنا أجد hg مع bitbucket أسهل في التعامل, و لكن github يضم مستخدمين كثر و أكثر نشاطاً.
  24. أفكار لمشروع باستخدام CUDA؟

    شكراً أخ محمد, الكتاب يحوي الكثير من الأفكار الجيدة.
  25. السلام عليكم ... أود سماع أفكاركم حول مشاريع صغيرة على منصة CUDA. هل لدى أحدكم فكرة معينة يود رؤيتها تطبق في العالم المتوازي و العالم المتتالي مع مقارنة بسيطة؟ الفكرة التي سأطبقها إن شاء الله, إن لم يكن هناك فكرة أكثر فائدة :sad: هي إيجاد الـ Transitive Closure لـ Undirected Graph(و Directed Graph بالمحصلة). هذه ستتضمن العديد من الأجزاء الجيدة و السهلة التطبيق, إضافة إلى أنها أكثر من مناسبة للعمل بشكل متوازي. إضافة إلى ذلك, سأقوم بمقارنة أداء النسخة المكتوبة على CUDA بنسخة مكتوبة بـ Standard Cpp و ربما بنسخة أخرى مكتبة بـ Boost.uBlas! الهدف هو التعرف على CUDA لا أكثر, و هذه مسألة يسهل كتابة برنامج متوازي لحلها. ربما أقوم بكتابة نسخة منقحة مثلاً ليكون رفع المصفوفات لأس ما باستخدام exponentiation by squaring أو ربما أتهور أكثر و أقوم بكتابة addition chain exponentiation و لكن لا أدري حقيقة إن كنت سأصل إلى هذه النقطة, ادعوا لنا بالتوفيق في تعلم CUDA :) فائدة المشروع تكمن في أننا يمكن أن نستخدم الفكرة في التالي: تصور أن لدينا الأعضاء في الفريق العربي للبرمجة, و مع كل عضو لدينا قائمة بأصدقائه. نريد أن نقسم الأعضاء إلى disjoint subsets بحيث أن الأعضاء في أي مجموعة أصدقاء مباشرين أو غير مباشرين(صديق صديقك هو صديقك, و صديق صديق صديقك هو صديقك و هلم جرا). ببساطة, أي عضو في أي مجموعة ليس هناك علاقة مباشرة أو غير مباشرة بينه و بين أي عضو في أي مجموعة أخرى. يمكن أن يكون نظام للدعايات في الموقع, أو خلافه ربما من يستفيد من هكذا تحليل. عموماً هذه هي الفكرة! تحياتي...