• الإعلانات

    • فيصل الحربي

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

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

Khaled Alshaya

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

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

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

مشاركه بواسطة Khaled Alshaya


  1. أخي عبدالله, اختلط الأمر علي في البداية كما اختلط على الأخوة :)

    أنت تريد عمل Scaling للنظام الذي لديك. تريد تحويله إلى Distributed System أوتوماتيكي بحيث عند إضافة موارد جديدة الـ Middleware هي التي تطبق الموضوع بشكل تلقائي. هل هذا الفهم صحيح؟

    لا أعرف, و لكن المرات التي رأيت فيها كلمة Middleware كان يقصد بها الـ Abstraction لمجموعة من الأجهزة لكي تتخاطب بلغة واحدة. مجموعة أنظمة قواعد بيانات مختلفة, مجموعة أجهزة RFID Readers مختلفة.

    0

  2. يعنى لو إفترضنا أنك تقوم بتنفيذ هذا الملف الثنائى على أله ليس عليها هذا ال runtime

    عندها لن يكون نظام Windows هو الشيء الذي نعمل عليه, لأننا استخدمنا المكتبات الأساسية التي يقدمها. ربما حتى إن استخدمنا نسخ الـ ANSI القديمة من الدوال, فأتوقع أن يعمل البرنامج من Windows 95 إلى Windows 8 :wacko:

    الفكرة باختصار, أنه حتى في الحالة الطبيعية لترجمة البرنامج في ++C, فإن هناك مكتبات دعم مثل C Run Time الملحقة بـ VC. و لكن في الطريقة المطروحة استغنينا حتى عن هذه المكتبة الصغيرة.

    0

  3. هذا اصغر منه، ويقوم بنفس العمل

    هل أنت متأكد؟

    أستطيع كتابة آلة افتراضية لويندوز تقوم بإنشاء نافذة لملفات ذات امتداد معين و تقريباً هذا يعني أن برنامجي عبارة عن صفر من البايتات, طبعاً سيملأ sector عند تخزينه و لكن لا علاقة لنا بالحجم في هذه الطبقة!

    الطريقة الوحيدة لتصغير الحجم بعد هذه الطريقة, هي أن يكون أحد أفضل أصدقائك مبرمج x86, مع جعبة أدواته يقوم بتحليل الـ PE header و ربما الملف كاملاً, و رمي الحقول الغير مهمة حسب خبرته في ما يحتاجه Windows لإقلاع الملفات التنفيذة. هذه هي الطريقة الوحيدة :wink:

    0

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

    شركة Linode, لم أقرأ أي شكوى حولها على الإطلاق, و دائماً يمدحها الناس. لم أتعامل معها شخصياً, و لكن استفدت كثيراً من مكتبتهم.

    بالنسبة للخدمة المقدمة من Amazon أعرف شخصاً استأجر من عندهم لإيجاد نتائج كود يقوم بحساب سلاسل RNA. يمكنك الحصول على قوة حسابية جبارة لا تستطيع الحصول عليها بسهولة دون دفع $$$.

    0

  5. كان هناك نقاش قديم بين بعض خبراء AT&T لم أستطع التوصل لرابطه للأسف, و لكن سأشرح مضمون ذلك النقاش باختصار.

    جاء مبرمج و طرح الفكرة التالية. المبرمج يريد كتابة Formatter للكود. بحيث أن تمثيل البرنامج نفسه لا يختلف, و إنما ما اختلف هو التمثيل النصي الأولي للبرنامج. المبرمج أراد اختبار البرنامج, و لكنه وجد عملية الاختبار صعبة جداً, لأنه يجب أن يقوم ببناء AST و من ثم يقوم بمقارنة الـ AST الناتجة من عينات الاختبار مع الـ AST الناتجة من مترجم الـ C الذي كان يعمل عليه. ففكر أنه ربما من الأفضل, أن يقوم بمقارنة الـ executable الناتج بحيث إذا كان متطابقاً قبل و بعد الـ Formatting فإنه لا بد أن الـ beautifier لا يؤثر على معنى البرنامج و لكنه يعدل التمثيل النصي للبرنامج فقط. نتيجة النقاش, أنه لا يمكن ذلك لأن هناك مترجمات Indeterministic مثلما قال الأخ A.S Hack! بالطبع النقاش أخذ في عين الاعتبار اهمال اختلاف الـ Timestamp في الملف التنفيذي و باقي الحقول الغير مؤثرة على معنى البرنامج نفسه.

    تحياتي...

    0

  6. بل أن المترجم نفسه وبنفس الاصدار ولنفس الشفرة المصدرية قد يُنتج شفرة منخفضة تختلف عن الشفرة السابقة في تجربة أولى.

    عالم الـ Indeterminism في المترجمات يصيب أي مبرمج بالصداع لذلك ينصح بالابتعاد عنه لمن أراد الحفاظ على الفيوزات الباقية في المخ البشري :lol:

    0

  7. اخي خالد تقصد API, اصلا هذه الدوال واحده لك لغات البرمجة لأنها تبع النظام, اما بالنسبة للتركيبات فأكيد تختلف من لغة الى اخرى ولكن في النهاية تتحول الى كود واحد مقابل لها في الـ IL

    ممم...

    أخي أن تقول بأن Intermidate Code الناتج متطابق, و هو مستحيل. أنا لست خبيراً باللغتين على الإطلاق, و لكن بدون جدال هناك فروق في معاني التركيبات بين اللغتين. و هذا ينتج عنه اختلاف في الكود الناتج. هذا خطأ شائع بين المبرمجين, يعتقدون بأن الكود الناتج متطابق. لاحظ عزيزي أن الكود الناتج من التركيبات قد يختلف بين مترجمين لنفس اللغة, و قد يختلف بين إصدارات المترجم نفسه! الذي يتطابق, هو الـ ABI أو فكر فيها على أنها شكل الكائنات في الذاكرة. الـ Layout Representation للكائنات و "كل" البيانات بين جميع لغات الـ Net. متماثلة و متطابقة و لهذا يمكن التواصل بين لغات الـ Net. ,هذا الامر ليس له علاقة بكون الكود الناتج عن التركيبات اللغوية متشابه أم لا. فمثلاً COM هو ABI يمكن لأي لغة أن تتواصل مع الأخرى من خلاله.

    كما قلت لك لست خبيراً في اللغتين, و لكن وحدة الـ ABI لا تعني وحدة الكود الناتج :happy:

    http://www.codeproject.com/KB/msil/vbvscsmsil.aspx

    http://stackoverflow.com/questions/5300256/will-vb-net-and-c-sharp-cil-look-the-same

    0

  8. اخي خالد لايوجد فرق بين اللغتين على مستوى الـ IL

    أخي, دع موضوع جودة المترجمين خارج الموضوع لأنه من الظاهر أن الموضوع جدلي دون تصريح رسمي من Microsoft لذلك أسحب كلامي حول جودة المترجم.

    بالنسبة, للكود الناتج فلا تخلط وجود ABI واحدة مع اختلاف الكود الناتج من كل لغة. أنا لا أقول أنه يجب أن يكون مختلفاً تماماً, و لكن بكل تأكيد هناك فروق في معاني بعض التركيبات بين VB و #C و هذا يؤدي إلى إنتاج كود مختلف بلاشك. خذ على سبيل المثال, الـ for loop العادية و قارن بينها في #C و بينها في VB هل هي متطابقة تماماً في كل الحالات؟ هل الكود الناتج قد يختلف؟

    بالنسبة للمثال الذي وضعته حضرتك, فهذا قد يكون صحيحاً لتطابق معنى for each في اللغتين بشكل شبه تام. لهذا الكود الناتج قد لا يكون مختلفاً.

    0

  9. اخي hazzom كل لغات الدوت نت يتم تحويل مصدرها الى IL فمن يقول ان السي شارب تنتج كود محسن عن بقية اللغات؟!!

    ليس شرطاً أن اللغة التي يتم التحويل إليها هي نفسها, أن ينتج نفس الكود. اختلاف الناتج ينتج من اختلاف تركيبات اللغة, و جودة المترجم. و ليس هناك داع للقول بأن مترجم #C هو من أكثر المشاريع التي يعمل عليها مبرمجون فطاحلة. أتابع دائماً مدونة Eric Lippert, أحد الذين يعملون على المترجم, و قراءة ما يكتبه يعطيك فكرة عن مستوى المبرمجين الذين يعملون على المترجم الخاص بـ #C.

    0

  10. الملف التنفيذي في المرفقات,

    أخ سنان, الفكرة كلها أنني أردت التجربة و معرفة فائدة الـ CRT. لا أنوي و أنا بكامل قواي العقلية أن أستمر لكتابة أي شيء بهذه الطريقة. على العموم, مبرمجي uTorrent كانو مجانين كفاية لكي يقوموا بكتابة تطبيق بالطريقة اليدوية!

    جرب ان ان تضيف دوال معادلات رياضية وشاهد النتيجة ( بدون ادخال واخراج ) .. !!

    مادام المترجم سيرى حسابات لا تستخدمها في برنامج فسيقوم بإزالتها في مرحلة الـ Optimization, ربما إن قمت بهذا الأمر تذكر أن تجعل المتغيرات volatile :)

    window.zip

    0

  11. استعطت الوصول إلى 648 bytes, في حالة التطبيق الذي لا يقوم بأي شيء مطلقاً! عدا عن كونه استلم القيادة من الـ loader في Windows!

    لكن تحت شروطك فعلا الحجم صغير ورائع، وعلى فكرة تصغير الحجم عامل مهم جدا خصوصا في مجال الأنظمة المضمنة Embedded Systems، علاوة على أنه "هدف" لمبرمجي الفيروسات وبرامج التجسس فغالبا ما تكون الشفرات الخبيثة و "الكارثية" هي بضعة بايتات لطيفة وناعمة!

    بصراحة نعم تحتاج إلى تصغير حجم الكود, و لكن ليس بأهمية ذاكرة البرنامج نفسه. عملت مرة على البطاقات الذكية, و كان هناك الكثير من الروم, بضعة مئات من البايتات في الـ RAM للخربشة, و القليل من EEPROM لكي تحفظ ما تبقى من عقل البرنامج فيها.

    مررت سابقا بمحاولة نجحت في كتابة ملف Hello World وبحجم 142 Bytes فقط ! لكن تحت بنية ملفات الـELF الخاصة بتوزيعات اللنكس.

    جميل سأحاول كتابة script لـ gcc :blush:

    اطلع على الرابط الثالث في آخر الموضوع فهو يقوم بتعديل الملف يدوياً, مثل الموضوع الذي أشرت إليه و يصل إلى أحجام خرافية!

    وكذلك الـ section alignment له متطلبات كثيرة تقضي بإضافة أحجام لبنية الملف في كثير من الأحيان نحن في غنى عنها؟

    السكربت الذي طرحته يستخدم أصغر Alignment استعطت عمل linking بها.

    0

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

    في سالف العصر و الزمان, كان حجم Turbo Pascal المترجم و الـ IDE في نفس الوقت لا يتعدى 40 كيلوبايت! و للعجب فـ uTorrent لا يتعدى حجمه 650 كيلوبايت, و مع هذا فإنه يوفر وظائف لا تعد و لا تحصى في مجاله. كيف استطاع هؤلاء كتابة برامج بهذا الحجم الصغير؟ لو تكلمنا عن Windows حصرياً, فإن الفكرة كلها تكمن في معرفة على ماذا يعتمد ملفنا التنفيذي --> و بالطبع التخلص من تلك الاعتمادية. بالطبع, قليل من اللعب في الـ Linker لتخصيص الملف التنفيذي حتى آخر قطرة! سنأخذ عهداً على أنفسنا أن لا نفتح Hex editor و لا أن ننادي أي مبرمج x86. سنعمل فقط بلغة C و سنستخدم مترجم Microsoft و الأدوات الملحقة به!

    بعد ليلة سهر مليئة بالتجارب, وصلت إلى التالي: برنامج يعرض نافذة فارغة بالشكل التالي:

    post-89451-073152500 1320316220_thumb.pn

    برنامجنا المكتوب بلغة C على الشكل التالي:


    #include "smallexe.h"

    LPCTSTR class_name = TEXT("smallexe");

    LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam){
    switch(msg){
    case WM_CLOSE:
    DestroyWindow(hwnd);
    break;
    case WM_DESTROY:
    PostQuitMessage(0);
    break;
    default:
    return DefWindowProc(hwnd, msg, wParam, lParam);
    }
    return 0;
    }

    int WINAPI win_main(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow){
    WNDCLASSEX wc;
    HWND hwnd;
    MSG Msg;

    //Step 1: Registering the Window Class
    wc.cbSize = sizeof(WNDCLASSEX);
    wc.style = 0;
    wc.lpfnWndProc = WndProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = hInstance;
    wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wc.lpszMenuName = NULL;
    wc.lpszClassName = class_name;
    wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);

    if(!RegisterClassEx(&wc)){
    MessageBox(NULL, TEXT("Window Registration Failed!"), TEXT("Error!"),
    MB_ICONEXCLAMATION | MB_OK);
    return 0;
    }

    // Step 2: Creating the Window
    hwnd = CreateWindowEx(
    WS_EX_CLIENTEDGE,
    class_name,
    TEXT("Small EXE"),
    WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT, CW_USEDEFAULT, 800, 600,
    NULL, NULL, hInstance, NULL);

    if(hwnd == NULL){
    MessageBox(NULL, TEXT("Window Creation Failed!"), TEXT("Error!"),
    MB_ICONEXCLAMATION | MB_OK);
    return 0;
    }

    ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);

    // Step 3: The Message Loop
    while(GetMessage(&Msg, NULL, 0, 0) > 0){
    TranslateMessage(&Msg);
    DispatchMessage(&Msg);
    }
    return Msg.wParam;
    }

    للوصول إلى أصغر حجم, كان لابد من التخلي عن المكتبات القياسية و بالطبع التي تعتمد على الـ C Runtime Library. لذلك, لا يمكننا افتراض أي شي, و كان لابد من كتابة الدالة الأولى في البرنامج يدوياً و التي ستنادي win_main. كل ما في الأمر أنني قمت بكتابة entry function في smallexe.h و هذه الدالة هي أول دالة سوف تنادى في برنامجنا!


    #define UNICODE
    #include <windows.h>

    int WINAPI win_main(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow);

    void custom_main(){
    HMODULE hInstance = GetModuleHandle(NULL);
    HINSTANCE hPrevInstance = NULL;
    LPTSTR lpCmdLine = GetCommandLine();
    STARTUPINFO startup_info;
    int nCmdShow;
    int return_value;
    GetStartupInfo(&startup_info);
    nCmdShow = startup_info.wShowWindow;
    return_value = win_main(hInstance, NULL, lpCmdLine, nCmdShow);
    ExitProcess(return_value);
    }

    ماذا بعد؟ سنحتاج إلى ترجمة و ربط البرنامج بحيث لا نعتمد على أي مكتبة خارجية(بالطبع سنستدعي دوال Windows من خلال الربط الديناميكي!). قمت بكتابة batch لتبسيط المهمة!

    @ECHO off

    set compiler_options= /O2 /Ox /Os

    cl /nologo /c %compiler_options% %*


    set merged_sections= /MERGE:.rdata=.data /MERGE:.text=.data
    set disabled_warnings= /ignore:4254 /ignore:4108
    set exe_obj= *.obj
    set basic_libs= kernel32.lib gdi32.lib user32.lib
    set additional_libs= advapi32.lib comdlg32.lib comctl32.lib shell32.lib

    link /nologo /ENTRY:custom_main /NODEFAULTLIB /SUBSYSTEM:WINDOWS /ALIGN:4 ^
    %merged_sections% %disabled_warnings% %exe_obj% %basic_libs% %additional_libs%

    @ECHO on

    و النتيجة؟ ملف تنفيذي بحجم 1688 bytes, نعم كما ترى كيلو و نصف من البايتات الجميلة!

    ستجد في المرفقات, المشروع كاملاً. و لتجربته لديك, لابد أن يتوفر Visual Studio, بحيث تقوم بفتح الـ Visual Studio Command Prompt:

    Start > All Programs > Microsoft Visual Studio 2010 > Visual Studio Tools > Visual Studio Command Prompt

    ثم قم بتمرير اسم الملف الذي تريد ترجمته للـ batch file, كما في مثالنا التالي:

    c:\test>build window.c

    سينتج الملف التنفيذي مباشرة!

    لمن يحب المشاركة, اطرح طريقة لإنتاج ملفات تنفيذية صغيرة جداً بلغة البرمجة و البيئة التي تفضلها! بالتاكيد, سأكون أكثر من سعيد لو التفت الأسمبلاوية لهذا الموضوع و طرحوا ما لديهم, فلاقدرة لي على مجابهتهم :lol: و أرحب بأي استفسار حول أي نقطة في الطريقة.

    تحياتي,

    ============

    Minicrt

    Small Programs

    Tiny PE

    Techniques for reducing Executable size

    test.zip

    9

  13. "Computer Science is not about computers, nor about science"

    ==============================================

    أخ sitesmaker, يمكن للغة البرمجة أن تكون قوتها أقل من قوة قوة آلة Turing. خذ SQL على سبيل المثال, و كل الـ First-Order Logic ليس بقوة Turing Machine. معظم الـ DSL ليست Turing Complete!

    من الأخطاء الشائعة الإعتقاد أن OOP تعني إنشاء Class و من ثم تخيّل أن هذا الـCLass عبارة عن صندوق يحوي مجموعة من members ، و الصحيح أن OOP مجموعة من المفاهيم التي هي أكبر من مسألة استخدام كلمة محجوزة اسمها class.

    OOP ليست إلا التخلص من switch statement كان كل مبرمج سيقوم بكتابتها بطريقته الخاصة. الـ Abstract Data Type هو ما تقصده بكلامك ;)

    من الأخطاء الشائعة استخدام printf أو MsgBox أو vardump لتتبع الأخطاء و اكتشافها ، و الصحيح أن تستخدم شيء اسمه Debugger :-)

    الـ Logging ليس رفاهية, المنقح لا يمكن استخدامه دائماً. فقط عندما تريد فهم كيف يعمل الكود, أما لعمل اختبار فهذا خطأ. الاختبار يدخل فيه أمور كثيرة, مثل تتبع سلوك البرنامج و الإبلاغ عن الأخطاء إضافة عمل Repeatable Behavior من خلال الـ Log. و في النهاية, الـ Remote Debugging ليست ممكنة في كل مكان و يتم الاعتماد على الـ Log. و إذا كنت تقوم بكتابة برنامج Concurrent فالله وحده هو من سيوفقك في استخدام المنقح :)

    0

  14. أخ MGTAA7, تريد نصيحتي؟

    تعلم emacs هدف جميل جداً, و كان لي تجربة مع pico و emacs و vi. و لكن أنصحك بأن تقوم باستخدام gedit, أو بيئة تطوير متكاملة كـ codeblocks في الواجهة الرسومية ثم تبدأ بتعلم الـ shell شيئاً فشيئاً. عموماً,كتاب Accelerated C plus plus هو الأفضل لتعلم ++C إن كنت على عجالة من أمرك. emcacs نفسه يأتي مع tutorial, و كذلك vi. متى وجدت نفسك معتاداً على Ubuntu, يمكنك اختيار أو إنشاء بيئة التطوير الخاصة بك!

    0

  15. .. لكن كان الجديد انه طور الية عرف تطبيقات رسومية GUI .. وهذا ما فعله بيل جيتس .. ايضا اخذ فكرة التطبيقات الرسومية وقام بتصميم نظامه على نفس حبة الرمل ولكن انجز نظاما جديد منذ ذلك الحين هو الاكثر استخداما ..

    من قال لك هذا؟ جوبز رآها لدى معامل Xerox في الثمانينيات, عندما كانت تلك المعامل وجهة العالم في البحوث جنباً إلى جنب مع Bell Labs. كانوا يبحثون في مفاهيم OOP و أحد التطبيقات التي اقترحوها هي الـ GUI التي يمكن تمثيلها بشكل أكثر من رائع على شكل هرمي من الأنواع. المشكلة كانت أن الأجهزة التي كانت تستعمل في Xerox غالية الثمن, و لم تنتشر الفكرة بسبب هذا الأمر. و عندما أصبح بالإمكان عملياً توفير GUI على حاسوب شخصي زهيد الثمن, كانت Apple من أوائل من طرحها في متنجاتها.

    3

  16. هل نوع البطاقة يختلف كثيرا بالنسبة للقرأة ؟

    الرسالة التي ترسل للبطاقة موحدة, و لكن الـ reader يمتلك API مختلفة بين جهاز و آخر "لإرسال الرسالة", و تأسيس الاتصال و خلافه. ليس هناك شيء كـ BSD Sockets في عالم الشبكات مثلاً. و لكن مضمون الرسالة المرسلة موحد, و بالتالي إن شاء الله ستجد الأمر سهلاً, و إن كنت أظن أن هذا الأمر ممكن عن طريق مكتبات جاهزة و هو الأفضل في رأيي. بالنسبة لسؤالك حول JAVA فنعم, أذكر أن ACR120 كان يمتلك APIs لـ ++C/C و #C و Visual Basic و حتى Delphi إذا كانت ذاكرتي سليمة :)

    شاركنا ما تصل إليه رجاء, فلايوجد في المنتدى أي معلومات حول هذا الموضوع من قبل.

    تحياتي...

    0

  17. الـ Action هو الفعل الذي يقوم به الـ Agent. مثلاً محرك البحث Google يقوم بـ (فتح صفحة, تحليل صفحة,.....).

    أعتقد أن المشكلة الحقيقية هي التفريق بين الـ Sensors و الـ Perceptions. ببساطة, هو الفرق بين العين و البصر. أي الفرق بين الأعضاء و بين الحواس. الـ Sensors هي التي تجلب لنا المعلومات من البيئة, و لكن الـ Perception هو كيف نفهم تلك المعلومات. مثلاً, حتى الآن تم اكتشاف أمور كثيرة حول العين Sensor و لكن الإنسان يعلم القليل جداً حول البصر(كيف نرى, و لماذا نرى بالطريقة هذه بالضبط, لماذا ليست صورة أخرى هي التي تتشكل في المخ؟!).

    عموماً, الـ Sensor في Agent قد تكون الـ Camera و لكن حاسته, هي كيف نمثل تلك الصورة في قلب الـ Agent. قد تكون صورة فقط, و قد نقوم بتحليل النصوص بحيث يملك نظامنا القدرة على فهم اللغة جزئياً.

    تحياتي..

    2

  18. و الله يا أخ محمد, كنت أتمنى لو أنني عملت على Financial Transactions الحقيقية, و لكنني قمت ببناء dummy payment system بحيث أن الـ Cards لا تملك قيمة إلا في نظامنا. تحتاج إلى معرفة format الرسائل التي تتبع هذا المعيار, و لا أدري إن كان هناك API مع الـ readers لهذه الواجهة. لا أدري كيف يمكنني المساعدة, و لكن حقيقة أتمنى لك التوفيق, يبدو مشروع كبير.

    ========

    لا أدري إن كنت مررت على المقال التالي, و لكنه يبدو جيداً من النظرة الأولى:

    http://www.codeproject.com/KB/scrapbook/ISO8583.aspx

    تحياتي...

    0

  19. بالنسبة لنوع البطاقة هي interface مع ملاحظة ان البطاقة هي عبارة عن ( البطاقة الذكية لصرف التموين ) فمن فضلك اخبرني الان من اين ابدأ ؟

    عزيزي, يجب عليك تحديد أي معيار تعمل من خلاله البطاقة لكي تستطيع اختيار القارئ المناسب. من ثم تستعمل الـ API الخاص به. لو كانت هذه البطاقة بطاقة تستعمل بشكل فعلي, فعلى الأرجح أنه لا يمكنك قراءة ما عليها دون عملية تحقق Authentication. لذلك حدد نوع البطاقة التي لديك, و احصل على القارئ المناسب.

    ==========

    بالمناسبة عملت أيضاً على هذا القارئ و أنصح به كبداية, لأنه سهل البرمجة و الـ API متوفرة بعدة لغات(عملي كان بلغة C).

    ACR120 Contactless Smart Card Reader

    عموماً, لم اختر المنصة و لكنها الأسهل بين الذين عملت عليهم. لذلك, لا تعتمد على كلامي في اختيارها لعملك و احصل على استشارة ممن لديه خبرة أكبر في السوق.

    0

  20. مالذي تريده بالضبط؟

    هناك أجهزة قراءة, تعمل مع أنواع معينة من البطاقات. البطاقات قد تكون 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, لذلك ابدأ البحث من هذه النقطة و عد لنا بما تريد بالتحديد حتى نتمكن من المساعدة.

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

    1

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

    1