• الإعلانات

    • فيصل الحربي

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

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

Khaled Alshaya

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

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

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

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

  1. عاش من شافك أخي وائل :cool:
  2. السلام عليكم و رحمة الله و بركاته, في سالف العصر و الزمان, كان حجم Turbo Pascal المترجم و الـ IDE في نفس الوقت لا يتعدى 40 كيلوبايت! و للعجب فـ uTorrent لا يتعدى حجمه 650 كيلوبايت, و مع هذا فإنه يوفر وظائف لا تعد و لا تحصى في مجاله. كيف استطاع هؤلاء كتابة برامج بهذا الحجم الصغير؟ لو تكلمنا عن Windows حصرياً, فإن الفكرة كلها تكمن في معرفة على ماذا يعتمد ملفنا التنفيذي --> و بالطبع التخلص من تلك الاعتمادية. بالطبع, قليل من اللعب في الـ Linker لتخصيص الملف التنفيذي حتى آخر قطرة! سنأخذ عهداً على أنفسنا أن لا نفتح Hex editor و لا أن ننادي أي مبرمج x86. سنعمل فقط بلغة C و سنستخدم مترجم Microsoft و الأدوات الملحقة به! بعد ليلة سهر مليئة بالتجارب, وصلت إلى التالي: برنامج يعرض نافذة فارغة بالشكل التالي: برنامجنا المكتوب بلغة 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
  3. فقط للإضافة, Stroustrup اطلع على كود Photoshop و هذا رأيه! Q: Please name the coolest and lamest programs ever written in C++, and say what worked or didn't work about them. First, what is a program to most people is a complete system, not code. Second, there is not concept of 100% pure C++. C++ was designed to provide part of systems writing in a variety of languages, so other languages play parts of the systems I mention: Google – can you even remember the world before Google? (it was only about 5 years ago). What I like about it is its performance under severe resource constraints. There are also some really neat parallel and distributed algorithms. The first browsers – can you imagine the world without the web? (it was only about 10 years ago). Other programs that I find “cool” are examples of embedded systems code: the scene analysis and autonomous driving systems of the mars rovers, a fuel injection control for a huge marine engine. There is also some really cool code in Photoshop’s image processing and user interfaces. Again, what I like from a code perspective is the way these programs are structured to be reliable and responsive under pretty harsh resource constraints. Some of Photoshop’s ways of managing internal complexity (e.g. GUI layout and access from image processing algorithms to the pixel data) are just beautiful.
  4. معليه يا دكتور عماد امسحها بدقني أنا هالمرة, في مثل في السعودية يقول اللي ما يعرف الصقر يشويه :lol:
  5. صحيح GIMP مجاني و هذه ميزة بالفعل. و لكن بالنسبة لغنى المميزات في Photoshop, فتذكر أن أي مستخدم يستخدم 20% فقط من الميزات الموجودة في أي برنامج, و لكن الـ 20% دائماً ما تكون مختلفة :)
  6. ما فائدة Middleware ؟

    أخي عبدالله, اختلط الأمر علي في البداية كما اختلط على الأخوة :) أنت تريد عمل Scaling للنظام الذي لديك. تريد تحويله إلى Distributed System أوتوماتيكي بحيث عند إضافة موارد جديدة الـ Middleware هي التي تطبق الموضوع بشكل تلقائي. هل هذا الفهم صحيح؟ لا أعرف, و لكن المرات التي رأيت فيها كلمة Middleware كان يقصد بها الـ Abstraction لمجموعة من الأجهزة لكي تتخاطب بلغة واحدة. مجموعة أنظمة قواعد بيانات مختلفة, مجموعة أجهزة RFID Readers مختلفة.
  7. طيب مالضرر في أن يقال أنه تم إضافة Macros تساعد في فهم المشاريع. الله ينور عليك يا هويدي.
  8. عندها لن يكون نظام Windows هو الشيء الذي نعمل عليه, لأننا استخدمنا المكتبات الأساسية التي يقدمها. ربما حتى إن استخدمنا نسخ الـ ANSI القديمة من الدوال, فأتوقع أن يعمل البرنامج من Windows 95 إلى Windows 8 :wacko: الفكرة باختصار, أنه حتى في الحالة الطبيعية لترجمة البرنامج في ++C, فإن هناك مكتبات دعم مثل C Run Time الملحقة بـ VC. و لكن في الطريقة المطروحة استغنينا حتى عن هذه المكتبة الصغيرة.
  9. هل أنت متأكد؟ أستطيع كتابة آلة افتراضية لويندوز تقوم بإنشاء نافذة لملفات ذات امتداد معين و تقريباً هذا يعني أن برنامجي عبارة عن صفر من البايتات, طبعاً سيملأ sector عند تخزينه و لكن لا علاقة لنا بالحجم في هذه الطبقة! الطريقة الوحيدة لتصغير الحجم بعد هذه الطريقة, هي أن يكون أحد أفضل أصدقائك مبرمج x86, مع جعبة أدواته يقوم بتحليل الـ PE header و ربما الملف كاملاً, و رمي الحقول الغير مهمة حسب خبرته في ما يحتاجه Windows لإقلاع الملفات التنفيذة. هذه هي الطريقة الوحيدة :wink:
  10. و عليكم السلام و رحمة الله و بركاته, شركة Linode, لم أقرأ أي شكوى حولها على الإطلاق, و دائماً يمدحها الناس. لم أتعامل معها شخصياً, و لكن استفدت كثيراً من مكتبتهم. بالنسبة للخدمة المقدمة من Amazon أعرف شخصاً استأجر من عندهم لإيجاد نتائج كود يقوم بحساب سلاسل RNA. يمكنك الحصول على قوة حسابية جبارة لا تستطيع الحصول عليها بسهولة دون دفع $$$.
  11. كان هناك نقاش قديم بين بعض خبراء AT&T لم أستطع التوصل لرابطه للأسف, و لكن سأشرح مضمون ذلك النقاش باختصار. جاء مبرمج و طرح الفكرة التالية. المبرمج يريد كتابة Formatter للكود. بحيث أن تمثيل البرنامج نفسه لا يختلف, و إنما ما اختلف هو التمثيل النصي الأولي للبرنامج. المبرمج أراد اختبار البرنامج, و لكنه وجد عملية الاختبار صعبة جداً, لأنه يجب أن يقوم ببناء AST و من ثم يقوم بمقارنة الـ AST الناتجة من عينات الاختبار مع الـ AST الناتجة من مترجم الـ C الذي كان يعمل عليه. ففكر أنه ربما من الأفضل, أن يقوم بمقارنة الـ executable الناتج بحيث إذا كان متطابقاً قبل و بعد الـ Formatting فإنه لا بد أن الـ beautifier لا يؤثر على معنى البرنامج و لكنه يعدل التمثيل النصي للبرنامج فقط. نتيجة النقاش, أنه لا يمكن ذلك لأن هناك مترجمات Indeterministic مثلما قال الأخ A.S Hack! بالطبع النقاش أخذ في عين الاعتبار اهمال اختلاف الـ Timestamp في الملف التنفيذي و باقي الحقول الغير مؤثرة على معنى البرنامج نفسه. تحياتي...
  12. عالم الـ Indeterminism في المترجمات يصيب أي مبرمج بالصداع لذلك ينصح بالابتعاد عنه لمن أراد الحفاظ على الفيوزات الباقية في المخ البشري :lol:
  13. ممم... أخي أن تقول بأن 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
  14. أخي, دع موضوع جودة المترجمين خارج الموضوع لأنه من الظاهر أن الموضوع جدلي دون تصريح رسمي من Microsoft لذلك أسحب كلامي حول جودة المترجم. بالنسبة, للكود الناتج فلا تخلط وجود ABI واحدة مع اختلاف الكود الناتج من كل لغة. أنا لا أقول أنه يجب أن يكون مختلفاً تماماً, و لكن بكل تأكيد هناك فروق في معاني بعض التركيبات بين VB و #C و هذا يؤدي إلى إنتاج كود مختلف بلاشك. خذ على سبيل المثال, الـ for loop العادية و قارن بينها في #C و بينها في VB هل هي متطابقة تماماً في كل الحالات؟ هل الكود الناتج قد يختلف؟ بالنسبة للمثال الذي وضعته حضرتك, فهذا قد يكون صحيحاً لتطابق معنى for each في اللغتين بشكل شبه تام. لهذا الكود الناتج قد لا يكون مختلفاً.
  15. خوارمية معقدة جدا

    ابحث عن Restricted Partitioning of Positive Integers
  16. أعتقد أن هذا خطأ شائع. ما تقوله Microsoft هو أن الناتج من اللغتين هو نفس اللغة(مايسمى CIL).
  17. ليس شرطاً أن اللغة التي يتم التحويل إليها هي نفسها, أن ينتج نفس الكود. اختلاف الناتج ينتج من اختلاف تركيبات اللغة, و جودة المترجم. و ليس هناك داع للقول بأن مترجم #C هو من أكثر المشاريع التي يعمل عليها مبرمجون فطاحلة. أتابع دائماً مدونة Eric Lippert, أحد الذين يعملون على المترجم, و قراءة ما يكتبه يعطيك فكرة عن مستوى المبرمجين الذين يعملون على المترجم الخاص بـ #C.
  18. الملف التنفيذي في المرفقات, أخ سنان, الفكرة كلها أنني أردت التجربة و معرفة فائدة الـ CRT. لا أنوي و أنا بكامل قواي العقلية أن أستمر لكتابة أي شيء بهذه الطريقة. على العموم, مبرمجي uTorrent كانو مجانين كفاية لكي يقوموا بكتابة تطبيق بالطريقة اليدوية! مادام المترجم سيرى حسابات لا تستخدمها في برنامج فسيقوم بإزالتها في مرحلة الـ Optimization, ربما إن قمت بهذا الأمر تذكر أن تجعل المتغيرات volatile :) window.zip
  19. استعطت الوصول إلى 648 bytes, في حالة التطبيق الذي لا يقوم بأي شيء مطلقاً! عدا عن كونه استلم القيادة من الـ loader في Windows! السكربت الذي طرحته يستخدم أصغر Alignment استعطت عمل linking بها.
  20. "Computer Science is not about computers, nor about science" ============================================== أخ sitesmaker, يمكن للغة البرمجة أن تكون قوتها أقل من قوة قوة آلة Turing. خذ SQL على سبيل المثال, و كل الـ First-Order Logic ليس بقوة Turing Machine. معظم الـ DSL ليست Turing Complete! الـ Logging ليس رفاهية, المنقح لا يمكن استخدامه دائماً. فقط عندما تريد فهم كيف يعمل الكود, أما لعمل اختبار فهذا خطأ. الاختبار يدخل فيه أمور كثيرة, مثل تتبع سلوك البرنامج و الإبلاغ عن الأخطاء إضافة عمل Repeatable Behavior من خلال الـ Log. و في النهاية, الـ Remote Debugging ليست ممكنة في كل مكان و يتم الاعتماد على الـ Log. و إذا كنت تقوم بكتابة برنامج Concurrent فالله وحده هو من سيوفقك في استخدام المنقح :)
  21. أخ MGTAA7, تريد نصيحتي؟ تعلم emacs هدف جميل جداً, و كان لي تجربة مع pico و emacs و vi. و لكن أنصحك بأن تقوم باستخدام gedit, أو بيئة تطوير متكاملة كـ codeblocks في الواجهة الرسومية ثم تبدأ بتعلم الـ shell شيئاً فشيئاً. عموماً,كتاب Accelerated C plus plus هو الأفضل لتعلم ++C إن كنت على عجالة من أمرك. emcacs نفسه يأتي مع tutorial, و كذلك vi. متى وجدت نفسك معتاداً على Ubuntu, يمكنك اختيار أو إنشاء بيئة التطوير الخاصة بك!
  22. مقابلة مع Stroustrup

    هذه هي المقابلة الحقيقية: http://www2.research.att.com/~bs/ieee_interview.html و بالفعل الرابط يشير إلى مقابلة غير حقيقية!
  23. من قال لك هذا؟ جوبز رآها لدى معامل Xerox في الثمانينيات, عندما كانت تلك المعامل وجهة العالم في البحوث جنباً إلى جنب مع Bell Labs. كانوا يبحثون في مفاهيم OOP و أحد التطبيقات التي اقترحوها هي الـ GUI التي يمكن تمثيلها بشكل أكثر من رائع على شكل هرمي من الأنواع. المشكلة كانت أن الأجهزة التي كانت تستعمل في Xerox غالية الثمن, و لم تنتشر الفكرة بسبب هذا الأمر. و عندما أصبح بالإمكان عملياً توفير GUI على حاسوب شخصي زهيد الثمن, كانت Apple من أوائل من طرحها في متنجاتها.
  24. برنامج لقرأة البطاقة الذكية .

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

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