رفتن به مطلب
جامعه‌ی برنامه‌نویسان مُدرن ایران

فرهاد شیری

مدیران مرجع
  • تعداد ارسال ها

    160
  • تاریخ عضویت

  • روز های برد

    45

آخرین بار برد فرهاد شیری در 11 مهر

فرهاد شیری یکی از رکورد داران بیشترین تعداد پسند مطالب است !

اعتبار در سایت

170 عالی

3 دنبال کننده

درباره فرهاد شیری

توسعه‌ دهنده بَک اِند
توسعه‌ دهنده فرانت اِند
اساتید
  • تاریخ تولد 20 مهر 1360

موقعیت

  • شهر
    تهران

آخرین بازدید کنندگان نمایه

772 بازدید کننده نمایه
  1. فرهاد شیری

    فارغ از صحت عملکردش در شرایط مختلف، ایده فوق العاده عالی و کارآمدی هست علی الخصوص درسیستم های Safety Critical که عملکرد جزء به جزء نرم افزار بسیار مهم و حیاتی هست!
  2. در خیلی از مواقع نیاز داریم که با استفاده از آرگومانهای ورودی تابع Main برنامه خودمون ، در زمان اجرا شدن بر اساس این آرگومانهای ورودی برنامه رفتارهای متفاوتی را برای ما اجرا کنه! در چنین شرایطی حتما به یک آرگومان پارسر نیاز خواهیم داشت که بتوانیم این آرگومانها که در آرایه وروی تابع Main ذخیره شده اند، را ازهم تفکیک کنیم تا بتوانیم از این آرگومانها استفاده ببریم. در تابع Main (تابع شروع کننده اصلی برنامه) در سی++ به صورت پیش فرض دو پارامتر ورودی وجود دارد... 1- پارامتر argc : که از نوع int می باشد و تعداد پارامترهای وارد شده به برنامه را در خود جای داده است.(توجه داشته باشید نام فایل اجرایی خود برنامه هم به عنوان یک مقدار محاسبه می شود.!) 2- پارامتر argv: که معمولا از نوع *char می باشد، ولی میتوان از نوع های دیگر هم استفاده کرد، در این آرایه مقدار آرگومانهای ورودی برنامه شما ذخیره شده است.(توجه داشته باشید نام فایل اجرایی خود برنامه هم در اولین عضو این آرایه قرار دارد.!) بنابراین با توضیحات فوق با استفاده از پارسر زیر می توانید از این آرگومانها استفاده نمایید. جهت استفاده هم به طریق زیر عمل کنید... ./testArgs 1 -s 2 #include "stdafx.h" #include <iostream> #include <cstring> #include <cstdlib> #include <typeinfo> #ifdef WIN32 //if compile in windows with VisualC++ #define COMPILE_TYPENAME_PTR_CHAR "char *" #define COMPILE_TYPENAME_PTR_INT "int *" #elif // if compile in linux with GCC #define COMPILE_TYPENAME_PTR_CHAR "Pc" #define COMPILE_TYPENAME_PTR_INT "Pi" #endif #define BYTE char #define PBYTE char* #define DWORD int using std::cout; using std::endl; using std::strcmp; template<typename T> class CParser { public: using ARGS_TYPE = T; CParser() {}; ~CParser() {} //CParser(ARGS_TYPE& args) : m_args(args) {} //CParser(ARGS_TYPE&& args) : m_args(std::forward<ARGS_TYPE&&>(args)) {} void setArgs(ARGS_TYPE& args) { m_args = std::forward<ARGS_TYPE&>(args); } auto getArgByIndex(const DWORD& index, ARGS_TYPE args = m_args) -> decltype(*(args + index)) { decltype(*(args + index)) element{ *(args + index) };//define reference of array element. return element; } void invokeC(const DWORD& index) { auto& arg = getArgByIndex(index); if (strcmp(typeid(arg).name(), COMPILE_TYPENAME_PTR_CHAR) == 0) { if (strcmp(arg, "-s") == 0) { cout << "run app in mode x (" << index << "): " << arg << endl; } if (std::strcmp(arg, "1") == 0) { int evalArgNum = std::atoi(arg); cout << "run app in mode y (" << index << "): " << evalArgNum << endl; } if (std::strcmp(arg, "2") == 0) { int evalArgNum = std::atoi(arg); cout << "run app in mode z (" << index << "): " << evalArgNum << endl; } } } void invokeI(const DWORD& index) { auto& arg = getArgByIndex(index); if (std::strcmp(typeid(arg).name(), COMPILE_TYPENAME_PTR_INT) == 0) { if (*arg == 49) { //ascii 1 int evalArgNum = std::atoi(reinterpret_cast<const PBYTE>(arg)); cout << "run app in mode y (" << index << "): " << evalArgNum << endl; } if (*arg == 50) { //ascii 50 int evalArgNum = *arg; cout << "run app in mode z (" << index << "): " << evalArgNum << endl; } } } protected: private: /*this membar is define static, because when the type is template arg , must can be set the default value when declare in method signture. */ static ARGS_TYPE m_args; }; template<typename ARGS_TYPE> ARGS_TYPE CParser<ARGS_TYPE>::m_args= nullptr ; using PARSER_CHAR = CParser<BYTE**>; using PARSER_INT = CParser<DWORD**>; int main(DWORD argc, BYTE** argv) { PARSER_CHAR parser; parser.setArgs(argv); for (int i = 0; i < argc; i++) { parser.invokeC(i); } return 0; } در صورتی که ابهامی در کد وجود داشت لطفا در همین تاپیک اعلام نمایید.
  3. فرهاد شیری

    سوالتون خیلی ابهام داره! کلا اگر منظورتون از راه اصولی ، طراحی بهینه پایگاه داده هست که ، باید آموزش های درباره نرمال سازی و دی نرمال سازی پایگاه داده ها را دنبال کنید! کمی دراین باره جستجو کنید قطعا متوجه میشید که باید جداول را چطوری طراحی کنید!
  4. فرهاد شیری

    یعنی با روتر (مثل مودم وای فای ) ویا هاب سوئیچ شبکه آدرس دهی کردید! وبه xamapp متصل میشید؟
  5. فرهاد شیری

    دوستت از چه روتری استفاده میکنه! وشما از چه روتری؟ نحوه ارتباط تون با آدرس loop back روی سیستمی که xampp نصب هست به چه صورتی؟
  6. فرهاد شیری

    دوست گرامی! xamp در حقیقت یک بستر برای شبیه سازی http هست بدون نیاز به سرورهای میزبان اینترنت، بنابراین وقتی برنامه شما روی گوشی میخواد به وب سرویس های لوکال که با xamp ایجاد شده اند دسترسی داشته باشه! قطعا باید permission های مناسب را داشته باشه ولی هیچ ربطی به اینترنت نداره یعنی لزومی نداره که شما به اینترنت متصل باشید. حالا چرا باید دسترسی ها فعال باشه برای اینکه اندروید که نمیدونه شما دارید به یک سرور مجازی متصل میشید ویا یک سرور واقعی بنابراین طبق پروتکل های امنیتی خودش این دسترسی ها را لازم داره، در حقیقت لازم هم نداره که بدونه! تصور کنید که این سطح از امنیت وجود نداشت به راحتی هر کسی یک app درست میکرد میذاشت تو یک مارکت بعد میشد یک نرم افزار جاسوسی که راحت هرچی داشتید به سرقت میبرد.
  7. فرهاد شیری

    البته این متد getParams مربوط به کلاس volly هست که چه برای post چه برای get بایدoverride بشه!
  8. فرهاد شیری

    درود بر جناب رمضانی منش گرامی! تشکر بابت توضیحی که دادید
  9. فرهاد شیری

    بله این حرف کاملا درست است! منتهی به لطف پردازشگرهای پیشرفته امروزی وطبعا به لطف instruction های جدید در اسمبلرهای جدید دیگه کدها در محل فراخوانی کامپایل نمی شوند! (PLT@) یعنی ارجاع داینامیکی به کد در زمان اجرا که به نوعی special instruction دستورالعمل CALL محسوب میشود! جناب رمضانی منش! پیشنهاد میکنم که برای اینکه بتونید جواب خیلی از سوالاتتون را بگیرید کتابهای زیر را مطالعه کنید... X86 Assembly Language and C Fundamentals - CRC Press- C, Assembly and Program Execuation on IntelR 64 Architecture - Apress - Introduction to 64 Bit windows Assembly Programming - Digital Design, Fundamentals of Computer Architecture and Assembly Language - Springer Assembly Oxford university press Computer Organization Basic Processor Structure - CRC Press در صورتی که تمایل داشتید اعلام کنید که این کتابها را براتون ارسال کنم..
  10. فرهاد شیری

    توابع inline و static در C همانند ++C رفتار یکسانی دارند، بنابراین کد در segment .text وجود نخواهد داشت بلکه در segment .bss قرار دارد.!
  11. فرهاد شیری

    کدهای شما درست است و قابل اجرا هستند! به همین دلیل هم بدرستی کار میکنند! با سلام جناب رمضانی منش ، دلیل بهتر بودن کد خودتون را هم بیان کنید؟
  12. فرهاد شیری

    Products oP=products.get ( position ); دراین قسمت یک لاگ بذارید ببنید که شی op مقدار میگیره! یا نه ! اگر null بود بررسی کنید ببنید که کانتینر لیستی که تزریق کردید به کلاس مقدار داره یانه ! یعنی کانتینر products نباید null باشه! بهتر برای برنامه های اندروید حتما از unit test ها استفاده کنید، با استفاده از کد های تست در زمان توسعه یعنی اگر به صورت TDD کار کنید به راحتی این کد های تست می توانند به صورت hard code مقادیر هایی به کلاس ها ومتدهای شما ارسال کنند که به راحتی متوجه بشید که کدوم کلاس ومتد خطای منطقی از نوع Null Reference ارسال میکنند. در صورتی که نخواهید از تست کلاس ها استفاده کنید، باید خودتون همیشه کد را با مقادیر hard code تست کنید که خیلی کار زمانبر والبته غیر اصولی هم هست!
  13. فرهاد شیری

    یک قانون کلی! الحاق آدرس یک اشاره گر ویا یک ارجاع یک متغیر کلاس auto از یک تابع به شرطی مجاز خواهد بود که به عنوان یک مقدار rvalue لحاظ شده باشد، بنابراین اگر در این کد اشاره گر را به یک اشاره گر دیگه الحاق نمیکردید قطعا یک رفتار تعریف نشده خواهید داشت. البته توجه داشته باشید که در تابع شما از حافظه هیپ استفاده نشده است، بنابراین در کد اسمبلی هم از bss. استفاده نشده بنابراین آدرس اشاره گر اکنون مجاز هست! اگر کد اسمبلی تابع را مشاهده کنید متوجه میشیدید که ثباتی که وظیفه نگهداری آدرس stack متغیر محلی که در سگمنت کد تابع مقدار دهی شده، را داره بلافاصله بعد از برگشت از سگمنت کد به سگمنت تابع strcpy ارسال میشه! و ثباتی هم که وظیفه نگهداری این آدرس راداره از نوع غیر فرار non-volatile می باشد. ولی اگر به حافظه هیپ اختصاص داده شده در یک تابع نیاز داشتید بهتر هست که تابع فراخوانی کننده مسئول تخصیص و باز پس گیری حافظه باشه! نه تابع فراخوانی شده! به این ترتیب تضمین میدهید که memory leak نخواهید داشت. برای مطالعه بیشتر هم می توانید به استاندارد های مدیریت حافظه در زبان C رجوع کنید! یک نمونه خیلی خوب Bill Blunden - Memory Management_ Algorithms and Implementation in C, C++ Wordware pub در صورتی که علاقمند بودید بگید من پی دی اف این کتاب را دارم!
  14. فرهاد شیری

    اگر منظور شما از stub این هست، تا آنجا که اطلاع دارم stub test یک بخشی از تستهای واحد برای نرم افزار هست، که در برخی موارد جهت تست های hard code استفاده می شود! بله با توضیحاتی که دادید، قطعا برای ساخت یک GUI قطعا کیوت گزینه خوبی هست! ولی با توجه به اینکه میگید از ++microsoft visual c استفاده میکنید MFC,Win32,WindowsUniversal هم گزینه های خیلی خوبی هستند! برای ارتباط با برنامه اصلی خودتون هم من پیشنهاد میدم که از متا دیتاها استفاده کنید، یعنی ورودی ها لازم نرم افزار اصلی را در یک فایل تکست که در بیلدر می سازید ذخیره کنید و در برنامه اصلی براش یک parser بنویسید اینطوری اگر از کیوت هم استفاده کنید مستقل از پایگاه داده خواهید بود. البته پایگاه داده های NoSQL هم در کیوت خیلی خوب هستند که هم Server less هستند وهم Portable هستند در صورتی که بخواهید از بانک های اطلاعاتی استفاده کنید. اگر هم که بیلدر و نرم افزار اصلی در ماشین های متفاوت هستند و اگر بخواهید مستقل از سکو های پایگاه داده برنامه را بنویسید حتما باید از سوکت ها استفاده کنید. در هر حال اگر من جای شما بودم و اگر صرفا در پلتفرم ویندوز برام مطرح بود قطعا از MFC استفاده میکردم. ولی اگر سکوهای xbase هم بخواهید قطعا کیوت و البته wxWidget خیلی خوب هستند
  15. فرهاد شیری

    سلام ورود شما را به انجمن تبریک میگوئیم! البته این سوال شما بیشتر خبری تا پرسشی !!! بهتره کمی بیشتر توضیح بدید... 1- اون برنامه اصلی که می فرمایید قرار چه فایلی را تولید کنه بر اساس ورودی ها؟ 2- منظورتون از اینکه برنامه اصلی همون فایل کامپایل شده بمونه یعنی چی؟ 3- برای تعامل با برنامه اصلی، میخواهید از متا دیتا استفاده کنید و از پایگاه داده ویا سوکت و... به نظرم بهترهست کمی بیشتر درباره سناریو خودتون توضیح بدید واینکه سوال هایی که دارید را شفاف تر بیان کنید تا دوستان بهتر بتوانند پاسخگو باشند وقتی شما سوالی با ابهام مطرح میکنید قطعا دادن پاسخ مناسب هم میسر نخواهد شد.
×
×
  • جدید...