رفتن به مطلب
مرجع رسمی سی‌پلاس‌پلاس ایران

کامبیز اسدزاده

بنیـــان گذار
  • تعداد ارسال ها

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

  • روز های برد

    266

تمامی مطالب نوشته شده توسط کامبیز اسدزاده

  1. کامبیز اسدزاده

    در این پُست من به شما خواهم گفت که چگونه می‌توانید نسخه‌ی به‌روز Git را بر روی ابنتو ۱۸.۰۴ از روی سورس آن نصب کنید. قبل از اینکه آغاز کنیم، ما باید مطمئن باشیم که سیستم شما به طور کامل به‌روز می‌باشد. apt update && apt upgrade -y سیستم را راه‌اندازی مجدد و بسته های پیش نیاز را نصب کنید. apt install build-essential dh-autoreconf libcurl4-gnutls-dev libexpat1-dev gettext libz-dev libssl-dev سروس (منبع) Tarball را دانلود کنید. اول به این مخزن بروید بررسی کنید که آخرین نسخه‌ی آن کدام است. در این پست آخرین نسخه 2.17.1 است. از طریق دستور زیر نسخه‌ی مورد نظر را دانلود کنید: wget https://github.com/git/git/archive/v2.17.1.tar.gz پکیج Tarball را استخراج کنید: tar -xzvf v2.17.1.tar.gz دستور فوق دایرکتوری (مسیر) git-2.17.1/ را ایجاد خواهد کرد، برای تغییر مسیر به آن دستور زیر را اعمال کنید. cd git-2.17.1/ فایل پیکربندی را بسازید: make configure پیکربندی را اعمال و اجرا کنید: ./configure --prefix=/usr کد منبع را بیلد (بسازید): make all اگر شما می‌خواهید هر چیزی که در کد منبع وجود دارد را بسازید دستور زیر را اجرا کنید: make all doc info بعد از اتمام می‌توانید فایل‌های باینری را نصب کنید: make install اگر هم می‌خواهید هر چیزی را که بیلد شده است نصب کنید دستور زیر را اجرا کنید: make install install-doc install-html install-info بررسی کنید تا مطمئن شوید درست کار می‌کند: git --version git version 2.17.1 تبریک می‌گوییم، شما هم اکنون آخرین و بهترین نسخه‌ی Git را بر روی سیستم خود دارید! می‌توانید مسیر و فایل‌های نصبی را پاک کنید. حالا که آخرین نسخه‌ی گیت را بر روی سیستم خود دارید، از این پس برای به‌روز‌رسانی آن کافی است کد زیر را اجرا کنید: git clone git://git.kernel.org/pub/scm/git/git.git بررسی کنید که کدام نسخه‌ی منتشر شده را می‌خواهید داشته باشید: git checkout v1.whatever دوباره فرایند ساخت را تکرار کنید.
  2. نسخه‌ی نهایی کیوت کریتور ۴.۷.۰ منتشر شد. بهبود‌های مرتبط با سی‌پلاس‌پلاس از ویژگی‌های این نسخه می‌توان به فعال سازی مُدل کلنگ به صورت پیش‌فرض اشاره کرد. این ویژگی فرایند توسعه‌ی بسیار بزرگی را در این نسخه های اخیر رقم زده است. مدل کد کلنگ می‌تواند اطلاعات خوبی را مربوط به خطا‌های شما را نمایش دهد. ویژگی یکپارچه سازی آزمایش (Test Integration) اگر مکان نمای ماوس را در ویرایشگر سی‌پلاس‌پلاس در درون تابع آزمایش قرار دید، به طور مستقیم می‌توانید یک آزمایش جدید از آن را با اجرای گزینه Test Under Cursor action را ایجاد کنید. همچنین ویژگی های بیشتری توسط Google Test برای پشتیبانی از فیلترینگ های بیتر اضافه ده است. میزبانی ویندوز در ویندوز بررسی کامپایلر های MSVC بهبود یافته است، مشکلاتی در این زمینه حل شده اند. دیگر بهبود‌ها گزینه‌ی کیت (Kit) یکی از مهم‌ترین تنظیمات در کیوت کریتور می‌باشد. بنابراین در این نسخه جایگاه آن در بالاترین بخش از تنظیمات قرار گرفته شده است که در پست قبلی نیز به آن اشاره شده است. اگر شما صفحه‌های نمایش با کیفیت بالا HiDPI در ویندوز یا لینوکس دارید، حال شما می‌توانید به راحتی نحوه‌ی مقیاس پذیری آن را انتخاب کنید. بخش نمایش سیستم فایلها تغییراتی پیدا کرده‌اند که اجازه می‌دهد فایلها و پوشه‌ها را با یکپارچگی بهتری ببینید. همچنین شما می‌توانید پوشه‌های جدیدی را به صورت مستقیم در بخش فایل سیستم ایجاد کنید. دیگر بهبود‌ها و جزئیات در زیر لیست شده اند: Qt Creator version 4.7 contains bug fixes and new features. The most important changes are listed in this document. For a complete list of changes, see the Git log for the Qt Creator sources that you can check out from the public Git repository. For example: git clone git://code.qt.io/qt-creator/qt-creator.git git log --cherry-pick --pretty=oneline origin/4.6..v4.7.0 General * Added option for enabling and disabling HiDPI scaling on Windows and Linux (QTCREATORBUG-20232) * Added `Properties` item to context menu on files (QTCREATORBUG-19588) * Added `New Search` button to search results pane (QTCREATORBUG-17870) * Added option to show only icons in mode selector (QTCREATORBUG-18845) * File System View * Added `New Folder` (QTCREATORBUG-17358) * Added `Collapse All` (QTCREATORBUG-19212) * Added option to show folders on top (QTCREATORBUG-7818) * Made synchronization of root directory with current document optional (QTCREATORBUG-19322) * Fixed that external tools did not expand variables for environment changes Editing * Made replacement with regular expression search more perl-like (`$<number>` and `$&` are supported, whereas `&` is no longer used for captures) (QTCREATORBUG-9602, QTCREATORBUG-15175) * Added `Context Help` to editor context menu (QTCREATORBUG-55) * Added previous and next buttons to bookmarks view, and polished their behavior (QTCREATORBUG-9859, QTCREATORBUG-20061) * Added support for `WordDetect` in Kate highlighting files * Fixed that extra editor windows were not restored when opening session (QTCREATORBUG-13840) * Fixed that editor could stay busy repainting annotations (QTCREATORBUG-20422) * FakeVim * Added `:<range>sor[t][!]` Help * Improved performance impact on start up All Projects * Moved kit settings to separate options category * Made it easier to abort builds by changing build button to stop button while building (QTCREATORBUG-20155) * Added project type specific warnings and errors for kits, and made them visible in `Projects` mode * Added shortcut for showing current document in project tree (QTCREATORBUG-19625) * Added global option for `Add linker library search paths to run environment` (QTCREATORBUG-20240) * Added `%{CurrentBuild:Env}` Qt Creator variable QMake Projects * Added support for `-isystem` in `QMAKE_CXXFLAGS` * Added deployment rules for devices to widget and console application wizards (QTCREATORBUG-20358) * Fixed that arguments for QMake step did not expand variables * Fixed `lupdate` and `lrelease` external tools for Qt 5.9 and later (QTCREATORBUG-19892) C++ Support * Improved resize behavior of editor tool bar (QTCREATORBUG-15218, QTCREATORBUG-19386) * Fixed auto-insertion of closing brace and semicolon after classes (QTCREATORBUG-19726) * Fixed location information of macros (QTCREATORBUG-19905) * Clang Code Model * Enabled by default * Switched to Clang 6.0 * Implemented outline pane, outline dropdown and `C++ Symbols in Current Document` locator filter * Implemented `Follow Symbol` for single translation unit * Added type highlighting for Objective-C/C++ * Added errors and warnings of current editor to Issues pane (category `Clang Code Model`) * Added highlighting style for overloaded operators (QTCREATORBUG-19659) * Added option to use `.clang-tidy` configuration file or checks string * Added default configurations for Clang-Tidy and Clazy checks * Added link to the documentation in tooltip for Clang-Tidy and Clazy diagnostics * Improved reparse performance and memory usage * Improved selecting and deselecting specific Clang-Tidy checks * Fixed slow completion in case Clang-Tidy or Clazy checks were enabled * Fixed crashes when closing documents fast * Built-in Code Model * Added support for nested namespaces (QTCREATORBUG-16774) QML Support * Updated parser to Qt 5.10, adding support for user-defined enums * Fixed that linter warning `M127` was shown as error (QTCREATORBUG-19534) * Fixed that reformatting incorrectly removed quotes (QTCREATORBUG-17455) * Fixed that `.pragma` and `.import` were removed when reformatting (QTCREATORBUG-13038) * Fixed that import completion did not offer `QtWebEngine` (QTCREATORBUG-20723) Python Support * Added stack traces in application output to Issues pane (category `Python`) Debugging * Added `Leave Debug Mode` button to toolbar * Fixed updating of memory view * Fixed issue with restoring debugger views (QTCREATORBUG-20721) * QML * Added support for nested properties (QTBUG-68474) * Fixed issue with different endianness (QTBUG-68721) * Fixed Qt namespace detection with GDB 8 (QTCREATORBUG-19620) Qt Quick Designer * Fixed crash when adding quotes to text (QTCREATORBUG-20684) * Fixed that meta data could move in source code even when no changes occurred (QTCREATORBUG-20686) Clang Static Analyzer * Renamed plugin to `ClangTools` * Replaced Clang static analyzer by tool that runs Clang-Tidy and Clazy over whole project or a subset of the project's files QML Profiler * Improved performance of timeline * Added zooming into flame graph items Version Control Systems * Git * Added `-git-show <ref>` command line parameter * Gerrit * Added warning when pushing to wrong branch (QTCREATORBUG-20062) * Fixed updating after settings change (QTCREATORBUG-20536) Image Viewer * Added option to export SVGs in multiple resolutions simultaneously Test Integration * Added `Run Test Under Cursor` to C++ editor * Added editor marks for failed test locations (QTCREATORBUG-20328) * Google Test * Added support for filters * Fixed issue with jumping to file and line of failing test (QTCREATORBUG-18725) * Qt Quick * Fixed parsing issue with non-ASCII characters (QTCREATORBUG-20105) * Fixed detection of test name (QTCREATORBUG-20642) * Fixed detection when `quick_test_main()` is used directly (QTCREATORBUG-20746) Welcome * Rather than open project do nothing when right-clicking recent projects * Open session mini menu when right-clicking sessions Platform Specific Windows * Improved parsing of MSVC error messages (QTCREATORBUG-20297) * Fixed that querying MSVC tool chains at startup could block Qt Creator * Fixed issue with writing to network drives (QTCREATORBUG-20560) * Fixed issue with Clang and Qt 5.8 and later (QTCREATORBUG-20021) * Fixed handling of Windows debug stream which could lead to freezes (QTCREATORBUG-20640) Android * Improved behavior when emulator cannot be started (QTCREATORBUG-20160) * Fixed QML debugger connection issue from macOS client (QTCREATORBUG-20730)
  3. کامبیز اسدزاده

    محیط یکپارچه توسعه نرم‌افزار Qt Creator

    نگارش 4.1۳.0

    107 دریافت

    محیط‌های توسعه مختلفی برای (بسته ابزار) تولکیت Qt وجود دارد که اکثراً توسط برنامه‌نویسان علاقه‌مند به‌این تولکیت ایجاد شده‌اند. جدیدترین محیط توسعه‌این تولکیت Qt Creator نام دارد. این محیط همراه با نرم‌ افزارهای دیگری برای راحتی کار با لینوکس عرضه می‌شود از جمله Assisstant که یک مجموعه از کاربردها و طرز استفاده از کتابخانه‌های کیوت، Examples and Demos که مثال‌هایی برای آشنایی هر چه بیشتر با کیوت است، زبان‌شناسی که برنامه‌ای به منظور ترجمه‌ی نرم‌افزارهای نوشته شده به‌این زبان و یا ساخت نرم‌افزارهای چند زبانه با سادگی هر چه تمام تر است و مهم تر از همه QtDesiner که نرم‌افزاری برای طراحی رابط‌های کاربری با استفاده از ویجت (دکمه، کادر متن و...) های از پیش طراحی شده است. همچنین توسط افزونه‌هایی که برای این کتابخانه نوشته شده است شما می‌توانید از محیط هایی مانند Visual Studio نیز استفاده نمایید. مهم ترین ویژگی این برنامه‌این است که برنامه‌های نوشته شده با این IDE قابلیت اجرا و پشتیبانی در طیف وسیعی از سیستم‌عامل‌ها نظیر ویندوز، لینوکس، مک و حتی تلفن های همراه نظیر سیتسم عامل سیمبین را داراست و یکی از نکات مهم این نرم افزار پشتیبانی از زبان‌های برنامه‌نویسی نظیر QML, CSS & JavaScript است. آخرین اطلاعات و مباحث مرتبط با اخبار، به‌روز‌رسانی‌ها و سوالات مرتبط با این محیط توسعه در این بخش می‌باشد. ویژگی‌های اخیر در این محیط توسعه

    رایگان

  4. کامبیز اسدزاده

    بیست و چهارمین نمایشگاه بین المللی ایران الکامپ

    بیست و چهارمین نمایشگاه بین المللی الکترونیک، کامپیوتر و تجارت الکترونیک ششم الی نهم مرداد 1397 محل دائمی نمایشگاه های بین المللی تهران نمایشگاه الکامپ بزرگترین رویداد تجاری در عرصه تولید و عرضه محصولات و خدمات صنایع الکترونیک و کامپیوتر کشور است که همه ساله با حضور گسترده و چشمگیر دست اندرکاران این حوزه و مخاطبان آنها در محل دائمی نمایشگاه های بین المللی تهران برگزار می گردد. در این نمایشگاه آخرین دستاوردهای این صنعت اعم از سخت افزار و نرم افزار به علاقمندان عرضه می گردد و فرصتی بی بدیل برای تبادل نظر و مذاکره در اختیار شرکت کنندگان قرار می گیرد. دستاوردهای این تعاملات نقطه آغاز بسیاری از همکاری های تجاری و تکنولوژیکی فیمابین دست اندرکاران حوزه الکترونیک و کامپیوتر است که نقش معنی داری در تحرک بخشیدن به این حوزه ی صنعت و تولیدکنندگان و بازرگانان شاغل در آن ایفاء می نماید. گشایش های اخیر در حوزه ی بین الملل و اراده ملموس دولت تدبیر و امید، که خود نیز با پیگیری استقرار دولت الکترونیک در زمره ی بزرگترین مشتریان بالقوه این حوزه می باشد، در افزایش حضور صنایع کشور در عرصه های بین المللی، زمینه ی شکوفایی این حوزه از صنعت و فن آوری را بیش از پیش فراهم نموده و انتظار می رود در دوره آتی نمایشگاه الکامپ که در فاصله ۶ تا ۹ مرداد ماه ۹۷ برگزار خواهد گردید، فرصتی تکرار نشدنی را در اختیار فعالان این حوزه در داخل و خارج کشور قرار دهد تا با یافتن مخاطبان بالقوه خود، سطح تعامل بین المللی خویش را بطور چشمگیری ارتقاء بخشند. به گزارش روابط عمومی سازمان نظام صنفی رایانه‌ای کشور، الکام ترندز با استقرار در سالن 27 نمایشگاه بین‌المللی الکامپ بر 6 محور اصلی هوش مصنوعی و یادگیری ماشین، بلاک چین و رمز ارزها، رایانش ابری، پردازش موازی و ابر پردازشگرها، اینترنت اشیا و کلان داده‌ها (Big Data) تمرکز دارد. آن دسته از علاقه‌مندانی که تاکنون در بخش‌ها و سالن‌های دیگر نمایشگاه ثبت‌نام کردند و حوزه فعالیت‌هایشان با 6 محور اصلی الکام ترندز مرتبط است نیز می‌توانند به این سالن منتقل شوند و در کنار دیگر فعالانی که به آینده فناوری اطلاعات و ارتباطات در کشور می‌پردازند بپیوندند. همین‌طور شرکت‌های فعال در زمینه گرایش‌های نو و فناوری‌های نوین که تاکنون در الکامپ ثبت‌نام نکردند نیز قادر هستند تا پنج‌شنبه چهاردهم تیرماه ضمن هماهنگی با دفتر ستاد اجرایی نمایشگاه الکامپ امسال با شماره‌های 88734035 تماس حاصل کنند و از طریق ایران الکامپ تقاضای ثبت‌نام کنند.
  5. کامبیز اسدزاده

    نحوه‌ی فشرده سازی داده‌ها به میزان ۹۰٪ درصد

    آیا فایل‌های شما نیاز قابل توجهی به صرفه‌جویی در حافظه‌ی سرور دارند؟ در این مقاله ما به شما خواهیم گفت که چگونه توسط چه الگوریتم‌هایی می‌توانید اطلاعات خود را تا ۹۰٪ فشرده سازی کنید. الگوریتم‌های فشرده سازی داده‌ها (دو نوع اصلی فشرده‌سازی داده وجود دارد) فشرده‌سازی بی‌اتلاف اطلاعات (کاملاً برگشت پذیر) فشرده‌سازی با اتلاف (بخش کوچکی از داده‌ها از دست می‌روند و بازسازی کامل آنها امکان پذیر نیست) اولین نوع فشرده سازی زمانی مورد استفاده قرار می‌گیرد که اطمینان حاصل شود داده‌های فشرده شده بازیابی شده و بدون تحریف باشند. این نوع فشرده سازی هیچ کدام از داده‌های اصلی را حذف نمی‌کند و با کاسته شدن حجم آن مصرف فضای کمی برای فشرده‌سازی به دست می‌آورد. اجازه دهید بعضی از رایج‌ترین الگوریتم‌های فشرده‌سازی از نوع فشرده‌سازی بی‌اتلاف یا همان (lossless) را در نظر بگیریم: تکنیک کُدگذاری هافمَن (Huffman) — این امر مستلزم جایگزینی کد یکسانی برای نمادهایی با کدهای نامحدود است، بسته به تکرار وقوع یک نماد در متن هستند می‌باشد. در کد گذاری استاندارد هافمن، فرض شده‌است که هر نماد در مجموعه‌ای که کدها از آن استخراج می‌شوند، ارزشی یکسان با بقیه دارد: کد کلمه‌ای که طول آن N است ارزشی برابر N خواهد داشت، مهم نیست که چند رقم آن ۱ و چند رقم آن ۰ است. وقتی با این فرض کار می کنیم، کم کردن هزینهٔ کلی پیام، با کم کردن تعداد رقم‌های کل ۲ چیز یکسانند. کد هافمن با ارزش حرفی متفاوت به نحوی عمومیت یافته که این فرض دیگر صحیح نیست: حروف الفبای کدگذاری ممکن است طول‌های غیر همسانی داشته باشند، به خاطر خصوصیت‌های واسطهٔ انتقال. مثالی بر این ادعا، الفبای کد گذاری کد مورس است، که در آن فرستادن یک 'خط تیره' بیشتر از فرستادن یک 'نقطه' طول می‌کشد، پس ارزش خط تیره در زمان انتقال بالاتر است. درست است که هدف هنوز کم کردن میانگین طول وزنی کد است اما دیگر کم کردن تعداد نمادهای بکار برده شده در پیام، به تنهایی کافی نیست. هیچ الگوریتمی شناخته نشده است که این را به همان روش و همان کارآیی کد قراردادی هافمن انجام دهد. تکنیک رمزگذاری شانون-فانو (Shannon–Fano) — این یک پیشوند است، که به عنوان یک الگوریتم کُد گذاری یکتواخت است. این تکنیک فشرده‌سازی را بر اساس احتمالات نشان می‌دهد. مانند الگوریتم هافمَن، این تکنیک بر روی افزونگی پیام است. در رمزگذاری شانون-فانو، نمادها به ترتیب احتمال از زیاد به کم مرتب شده‌اند و پس از آن به دو مجموعه که احتمال کلشان تا حد ممکن به هم نزدیک است تقسیم می‌شوند. سپس اولین رقم رمز همهٔ نمادها به آن‌ها اختصاص داده می‌شود؛ نمادها در مجموعهٔ اول "۰" و در مجموعهٔ دوم "۱" می‌گیرند. تا زمانی که مجموعه‌ای با بیش از یک عضو باقی بماند، همین فرایند برای تعیین ارقام متوالی رمزهایشان، روی آن‌ها تکرار می‌شود. وقتی یک مجموعه به یک نماد کاهش پیدا کند بدان معناست که رمز آن نماد کامل است و پیشوند هیچ رمزِ نماد دیگری را تشکیل نمی‌دهد. این الگوریتم کدگذاری‌های با طول متغیر نسبتاً کارامدی تولید می‌کند. تکنیک طول اجرا (Run-length) — این تکنیک به جای مجموعه‌ای از نماد‌های مکرر با کد نماد و تعداد تکرار اشاره داد. یک شکل ساده از فشرده‌سازی داده‌ها است که در آن داده‌های یکسان پشت سر هم به صورت مقادیر تکی و تعداد تکرارشان ذخیره می‌شوند. اگرچه آسان است و می‌توان به راحتی آن را درک کرد اما هنوز کارآیی چندانی ندارد. تکنیک ال زد دابلیو (Lempel–Ziv–Welch) — الگوریتم‌های فشرده‌سازی این گروه (LZ78، LZ77، و LZW) در ایده‌ی جستجو برای متن مشترک هستند. الگوریتم کاراکترها را متراکم کرده و در واژه نامه به جای کاراکتر، رشته‌های متراکم شده را قرار می‌دهد تا اینکه به رشته‌ای برسد که در واژه نامه قرار دارد. الگوریتم ساخت کدهای نابرابر که توسط هافمَن پیشنهاد شده است یکی از مهم‌ترین دستاوردهای تئوری اطلاعات از دیدگاه‌های نظری و کاربردی است. بهتر است کدهای باینری C = {c1, ..., cm} با با طول های {l1,.. ,IM} برای پیام‌های مورد نظر بهینه باشد. در صورتی که شرط به این گونه باشد pi < pj, then li > lj طول مقدار در قالب lM = maxm1m از نظر کُد‌نویسی بهینه شده است دو کُد lM = maxmlm که طول آن است در سمبُل آخر متفاوت خواهد بود. اگر کد C دارای شرایط مطلوبی باشد، آنگاه C به عنوان کُد X مطلوب خواهد بود. ورودی: اندازه‌ی الفبای M خروجی: درخت دودوییِ کد هافمَن مقداردهی اولیه: تعداد گِره‌ (نود‌های) پردازش شده M0=M می‌باشد. با اجرای شرط While M0>1 do مراحل بعدی به صورت زیر باید انجام شوند: یافتن دو گِره (نود) با کمترین احتمال در صف از نودهای پردازش شده حذف نودها را از صف پردازش تولید یک نود جدید با دو گرده انتخاب شده به عنوان فرزند. به این ترتیب که، وزن نودها برابر است با مجموع نودهای فرزند. افزودن گِره (نود) جدید به صف. لینک کردن نودهای جدید با لبه‌های نودهای حذف شده М0 <– М <– 1. اگر بیشتر از یک نود در صف وجود داشته باشد، مراحل ۲ تا ۵ را تکرار کنید.
  6. کامبیز اسدزاده

    مهندسی ویژگی‌ها

    مهندسی ویژگی‌ها (FE) بخش بزرگی از یادگیری ماشین (ML) و یادگیری عمیق است. مقاله فوق را برای آشنایی بیشتر با اینکه ویژگی مهندسی چگونه به توسعه‌دهنگان در کار با داده کمک می‌کند مطالعه کنید. داده‌ها بدون توجه به اندازه و مقایس کسب‌و‌کار‌های مُدرن، شرکت‌ها و سازمان‌ها به عنوان دارایی از نوع طبقه‌-اولِ آن‌ها تبدیل شده است. هر سیستم هوشمند، صرف نظر از پیچیدگی آن، باید بر اساس داده باشد. در قلب هر سیستم هوشمند، ما یک یا چند الگوریتم بینش داده‌ای را بر اساس مجموعه‌ای از داده‌های یادگیری، مانند یادگیری ماشین، یادگیری عمیق و یا روش‌های آماری استفاده می‌کنیم که این اطلاعات را برای جمع آوری دانش و ارائه بینش هوشمند بیش از یک دوره زمانی نیاز داریم. الگوریتم‌ها خودشان کاملاً مجزا کار می‌کنند و نمی‌توانند خارج از جعبه داده‌های خام که برای آن‌ها مشخص شده است کار کنند. هر سیستم بینش اطلاعاتی هوشمند، اساساً شامل یک خط یا نقطه‌ی سر-به-سر با استفاده از داده‌های خام برای استفاده از تکنیک‌های پردازش داده‌ها جهت گردآوری، پردازش و خواص ویژگی‌های مهندسی از این داده‌ها است. ما معمولاً تکنیک‌هایی مانند مُدل‌های آماری یا مدل‌های یادگیری ماشین را برای مدل سازی بر روی این ویژگی‌ها استفاده می‌کنیم و در صورت لزوم برای استفاده آن‌ها در آینده بر اساس مشکلاتی که می‌توان به آن‌ها اشاره کرد به صورت دستی حل می‌شوند. به طور معمول یک سامانه‌ی یادگیری ماشین مبتنی بر «فرایندهای استاندارد صنعت متقابل برای داده‌کاوی» در زیر نشان داده شده است. به دست آوردن داده‌های خام و ساختن مُدل بر روی این داده‌ها به طور مستقیم می‌تواند به عنوان عملی بی‌مورد تلقی شود، زیر ما نتایج و کارایی مورد نظر را نمی‌گیریم و همچنین الگوریتم‌ها خود به طور خودکار ویژگی معنی دار از داده‌های خامِ ساده را به صورت خودکار نمایش نمی‌دهند. جنبه‌ی تهیه داد‌ها در شکل بالا ذکر شده است، جایی که ما متودولوژی‌های مختلفی را برای استخراج ویژگی‌ها یا ویژگی‌های معنی دار از داده‌های خامِ پس از تجزیه و تحلیل مورد نیاز از پیش رونده و پیش پردازش برخورد می‌کنیم. مهندسی ویژگی یک هنر و همچنین یک عِلم است و به همین دلیل دانشمندانِ داده‌ها اغلب ۷۰٪ از زمان خود را در مرحله‌ آماده سازی داده‌ها قبل از فازِ مُدل سازی صرف می‌کنند. این به ما درکِ (بینشِ) این را می‌دهد که چرا ویژگی مهندسی یک فرایند تبدیل اطلاعات (داده‌ها) به یک ویژگی به عنوان ورودی برای مُدلهای یادگیری ماشین عمل می‌کند. یعنی آن ویژگی با کیفیتِ خوب در بهبود عملکرد کلی و دقت مُدل کمک می‌کند. ویژگی ها نیز به سوالات اصلی و اساسی بسیار وابسته هستند. بنابراین، حتی ممکن است کار یادگیری ماشین در سناریوهای متفاوت مانند طبقه‌بندی رویدادهای IoT به رفتار‌های عادی و غیر طبیعی یا طبقه‌بندی احساسات مشتری، ویژگی‌های استخراج شده در هر سناریو بسیار متفاوت از یکدیگر عمل کند. ویژگی‌ها چه چیز‌هایی هستند؟ یک ویژگی، به طور معمول، یک نمایش خاص در رأس داده‌های خام است که خصوصیات قابل اندازه‌گیری آن به صورت منحصربفرد (خصوصی) است. که معمولاً در یک ستون از یک مجموعه داده نقش بسته اند. با توجه به یک مجموعه‌ای از داده‌های دو بعدی، هر مشاهده توسط یک ردیف و هر ویژگی توسط یک ستون نشان داده می‌شود که یک مقدار خاص برای مشاهده دارد. بنابراین، مانند مثال در شکل بالا، هر سطر به طور خاص یک ویژگی از بُردار را نشان می‌دهد و همه آن‌ها مجموعه‌ای از ویژگی‌ها در همه مشاهدات به شمار می‌آیند، همچنین یک ماتریس ویژگی دو بُعدی است، که به عنوان یک مجموعه‌ای از ویژگی‌ها شناخته می‌شود. این شبیه به قاب داده‌ها یا صفحات گسترده‌ای است که داده های دو بعدی را نشان می‌دهند. به طور معمول، الگوریتم‌های یادگیری ماشین با این ماتریس‌های عددی یا تانسورها کار می‌کنند. از این رو بیشترین تکنیک‌های ویژگی‌های مهندسی تبدیل داده‌های خام به عنوان نماینده‌ای از داده‌هایی که می‌توانند توسط این الگوریتم ها قابل فهم و درک باشند را انجام می‌دهد. ویژگی‌ها می‌توانند از دو نوع اصلی بر اساس مجموعه داده‌ها باشند. ویژگی‌های خام (خالص) ذاتی مستقیماً از مجموعه داده‌ها و بدون دستکاری اطلاعات و یا مهندسی اضافی به دست می‌آیند. ویژگی‌های مشتق شده معمولاً از ویژگی‌های مهندسی به دست می‌آیند، جایی که ویژگی‌های داده‌های موجود را از آن استخراج می‌کنیم. مهندسی ویژگی‌ها داده‌های عددی معمولاً داده‌ها را به شکل ارزش‌های اسکالِر نشان می‌دهند که مشاهدات، ضبط داده‌ها یا اندازه گیری آن‌ها را نشان می‌دهد. منظور ما در اینجا داده‌های عددی به عنوان داده‌های مستمر است نه گُسَسته که به طور معمول به عنوان اطلاعات طبقه بندی شده ارائه می‌شوند. داده‌های عددی می‌توانند به عنوان یک بُردار از مقادیر نشان داده شود که هر مقدار یا موجودیت بُردار می‌تواند خود یک ویژگی خاص را نشان دهد. عدد صحیح (Integer) و شناور (Float) رایج ترین و به طور گسترده‌ای از انواع داده‌های عددی برای داده‌های عددی مُداوم استفاده می‌شوند. حتی داده های عددی می‌توانند به طور مستقیم به مُدل های یاد گیری ماشین انتقال یابند. شما برای هر یک از سِناریوهای مربوطه نیاز به ویژگی‌هایِ مهندسی دارید که مربوط به مشکلات و حوزه‌ی مرتبط با آن‌ها برای ساخت یک مُدل‌ است. از این رو، نیاز به مهندسی ویژگی‌ها هنوز هم در جای خود باقی است.
  7. کامبیز اسدزاده

    شرایط کسب مجوز فعالیتی و ارتقا حساب‌کاربری

    شرایط کسب مجوز فعالیتی و ارتقا حساب‌کاربری نسخه‌ی ۱.۰.۰ همانطور که می‌دانید مرجع آی او استریم در ابتدا ثبت‌نام دارای گروه‌های کاربری مشخصی می‌باشد که ثبت‌نام کننده خود انتخاب می‌کند که عضو کدام گروه باشد. اما بعضی از گروه‌های کاربری موجود که در لیست زمان ثبت‌نامی موجود نیستند شامل مدیران سایت، میانجی‌گر‌ها و فول‌اِستَک‌ها هستند که دارای مجوز‌های بیشتری نسبت به دیگر گروه‌های کاربری می‌باشند که توسط اساتید تایید می‌شوند. بنابراین برای کسب مجوز این نوع گروه‌های کاربری نیاز بر این است ابتدا اسناد قوانین و قالب اصول نگارشی در مرجع آی او استریم، سند نحوه‌ی پرسش و پاسخ هوشمندانه و حریم خصوصی را مطالعه و بپذیرید. ما بر این باوریم که باهم به صورت کار تیمی می‌توانیم مرجعی پُر بار و مفید برای جامعه‌ی برنامه‌نویسی کشورمان فراهم کنیم?. گروه‌های کاربری در مرجع آی او استریم به صورت زیر می‌باشند: بنیان‌گذاران مدیران کل سایت میانجی‌گر‌ها اساتید توسعه‌دهنده بَک‌اِند توسعه‌دهنده فرانت‌اِند توسعه‌دهنده فول‌اِستک طراحان مترجمین منتور‌ها و مشاورین کاربران عادی کاربران رسمی برخی از مجوز‌های ویژه این گروه‌ها در مدیریت کاربری، مطالب و گروه‌ها گروه‌های کاربری عادی، توسعه‌دهنده بَک‌اِند و فرانت اِند، طراحان، مترجمین توانایی دسترسی به سایت توانایی تغییر نام کاربری بعد از پذیرفته شدن حداقل ۱۰ مطلب، نظرسنجی و دیدگاه‌ها نمایش در لیست آخرین کاربران و اطلاعات آنلاین توانایی ارسال تصویر کاور توانایی استفاده از انیمیشن‌های متحرک بر روی آواتار اجازه‌ی نمایش کاربران و مطالب مرتبط به آن در نتایج جستجو توانایی نمایش تاریخچه‌ی نام نمایشی توانایی دسترسی به سایت در هنگام آفلاین بودن توانایی ایجاد نظرسنجی توانایی رای دادن در نظر‌سنجی‌ها توانایی بستن نظر‌سنجی خود توانایی استفاده از برچسب‌ها توانایی استفاده از پیشوند‌ها گفتگو‌های مجاز برای ارسال در هر هفته (25 عدد) گفتگوهای مجاز برای آغاز در هر دقیقه (۱) حداکثر دریافت کننده در هر گفتگو (10) امکان استفاده از امضاء توانایی بارگذاری فایل نمایش پاسخ‌های برجسته (نمایش پاسخ‌های این گروه در ویژگی و رنگ خاص) توانایی ارسال امتیاز به مطالب توانایی تغییر امتیاز به مطالب توانایی ویرایش مطالب خود در ماژول‌های زیر گفتگو‌های خصوصی به‌روز‌رسانی وضعیت مطالب وبلاگ‌ها موضوعات انجمن‌ها تصاویر آلبوم‌ها رویداد‌ها مقالات صفحه‌هات استاتیک فایل‌ها (مرکز دانلود) محدودیت ویرایش زمانی مطالب (120 دقیقه بعد از ارسال) توانایی ویرایش مطالب به صورت مخفی (به طور عادی اگر مطلبی ویرایش گردد در زیر آن عبارت ویرایش شده قرار می گیرد. اگر فعال شود، کاربران این گروه قادر خواهند بود این پیام را مخفی نمایند. مدیران تالاری که دسترسی مربوطه را دارند همیشه قادر به مشاهده این پیام هستند.) توانایی مخفی سازی مطالب خود توانایی حذف مطالب خود توانایی قفل یا باز کردن مطالب خود محدودیت ارسال مطلب، دیدگاه و نظرسنجی ۱۰ عدد در روز توانایی گزارش مطالب امکان بازنشر در شبکه‌های اجتماعی نیاز مطالب ارسالی به تایید توسط مدیران توانایی بارگذاری فایل در پیام‌های خصوصی و چت توانایی نشان دادن افراد واکنش نشان داده شده امکان ایجاد بلاگ امکان ارسال نظر در پست‌های بلاگ توانایی ایجاد گالری توانایی ایجاد آلبوم توانایی ارسال ویدیو امکان ایجاد پُست به عنوان اسناد معتبر (ویژه، مهم) مدیریت تاپیک‌ها برای عمل‌های ایجاد، حذف، قفل کردن، باز کردن، ویرایش و انتقال مدیریت کاربران (اخطار، رسیدگی به شکایت و بررسی صف‌های پذیرش) ایجاد مقاله در بخش مقالات و یا وبلاگ تخصصی به صورت (مشارکت گروهی) توانایی مشاهده‌ی دریافت کنندگان فایل توانایی مشاهده‌ی پذیرنده‌های فایل توانایی مدیریت نسخه‌ها توانایی فروش و کسب پورسانت از فایل‌ها در بخش مرکز دانلود و فروشگاه توانایی ارسال چند فایل به صورت همزمان گروه‌های کاربری رسمی توانایی دسترسی به سایت توانایی تغییر نام کاربری بعد از پذیرفته شدن حداقل ۱۰ مطلب، نظرسنجی و دیدگاه‌ها نمایش در لیست آخرین کاربران و اطلاعات آنلاین توانایی ارسال تصویر کاور توانایی استفاده از انیمیشن‌های متحرک بر روی آواتار اجازه‌ی نمایش کاربران و مطالب مرتبط به آن در نتایج جستجو توانایی نمایش تاریخچه‌ی نام نمایشی توانایی دسترسی به سایت در هنگام آفلاین بودن توانایی ایجاد نظرسنجی توانایی رای دادن در نظر‌سنجی‌ها توانایی بستن نظر‌سنجی خود توانایی استفاده از برچسب‌ها توانایی استفاده از پیشوند‌ها گفتگو‌های مجاز برای ارسال در هر هفته (25 عدد) گفتگوهای مجاز برای آغاز در هر دقیقه (۱) حداکثر دریافت کننده در هر گفتگو (10) امکان استفاده از امضاء توانایی بارگذاری فایل نمایش پاسخ‌های برجسته (نمایش پاسخ‌های این گروه در ویژگی و رنگ خاص) توانایی ارسال امتیاز به مطالب توانایی تغییر امتیاز به مطالب توانایی ویرایش مطالب خود در ماژول‌های زیر گفتگو‌های خصوصی به‌روز‌رسانی وضعیت مطالب وبلاگ‌ها موضوعات انجمن‌ها تصاویر آلبوم‌ها رویداد‌ها مقالات صفحه‌هات استاتیک فایل‌ها (مرکز دانلود) محدودیت ویرایش زمانی مطالب (120 دقیقه بعد از ارسال) توانایی ویرایش مطالب به صورت مخفی (به طور عادی اگر مطلبی ویرایش گردد در زیر آن عبارت ویرایش شده قرار می گیرد. اگر فعال شود، کاربران این گروه قادر خواهند بود این پیام را مخفی نمایند. مدیران تالاری که دسترسی مربوطه را دارند همیشه قادر به مشاهده این پیام هستند.) توانایی مخفی سازی مطالب خود توانایی حذف مطالب خود توانایی قفل یا باز کردن مطالب خود محدودیت ارسال مطلب، دیدگاه و نظرسنجی ۱۰ عدد در روز توانایی گزارش مطالب امکان بازنشر در شبکه‌های اجتماعی نیاز مطالب ارسالی به تایید توسط مدیران توانایی بارگذاری فایل در پیام‌های خصوصی و چت توانایی نشان دادن افراد واکنش نشان داده شده امکان ایجاد بلاگ امکان ارسال نظر در پست‌های بلاگ توانایی ایجاد گالری توانایی ایجاد آلبوم توانایی ارسال ویدیو امکان ایجاد پُست به عنوان اسناد معتبر (ویژه، مهم) مدیریت تاپیک‌ها برای عمل‌های ایجاد، حذف، قفل کردن، باز کردن، ویرایش و انتقال مدیریت کاربران (اخطار، رسیدگی به شکایت و بررسی صف‌های پذیرش) ایجاد مقاله در بخش مقالات و یا وبلاگ تخصصی به صورت (مشارکت گروهی) توانایی مشاهده‌ی دریافت کنندگان فایل توانایی مشاهده‌ی پذیرنده‌های فایل توانایی مدیریت نسخه‌ها توانایی فروش و کسب پورسانت از فایل‌ها در بخش مرکز دانلود و فروشگاه توانایی ارسال چند فایل به صورت همزمان گروه‌های کاربری فول‌اِستک، اساتید، منتور و مشاورین توانایی دسترسی به سایت توانایی تغییر نام کاربری بدون محدودیت نمایش در لیست آخرین کاربران و اطلاعات آنلاین توانایی ارسال تصویر کاور توانایی استفاده از انیمیشن‌های متحرک بر روی آواتار اجازه‌ی نمایش کاربران و مطالب مرتبط به آن در نتایج جستجو توانایی نمایش تاریخچه‌ی نام نمایشی توانایی دسترسی به سایت در هنگام آفلاین بودن توانایی ایجاد نظرسنجی توانایی رای دادن در نظر‌سنجی‌ها توانایی بستن نظر‌سنجی خود توانایی استفاده از برچسب‌ها توانایی استفاده از پیشوند‌ها گفتگو‌های مجاز برای ارسال در هر هفته (100 عدد) گفتگوهای مجاز برای آغاز در هر دقیقه (10) حداکثر دریافت کننده در هر گفتگو (30) امکان استفاده از امضاء توانایی بارگذاری فایل نمایش پاسخ‌های برجسته (نمایش پاسخ‌های این گروه در ویژگی و رنگ خاص) توانایی ارسال امتیاز به مطالب توانایی تغییر امتیاز به مطالب توانایی ویرایش مطالب خود در ماژول‌های زیر گفتگو‌های خصوصی به‌روز‌رسانی وضعیت مطالب وبلاگ‌ها موضوعات انجمن‌ها تصاویر آلبوم‌ها رویداد‌ها مقالات صفحه‌هات استاتیک فایل‌ها (مرکز دانلود) محدودیت ویرایش زمانی مطالب (120 دقیقه بعد از ارسال) توانایی ویرایش مطالب به صورت مخفی (به طور عادی اگر مطلبی ویرایش گردد در زیر آن عبارت ویرایش شده قرار می گیرد. اگر فعال شود، کاربران این گروه قادر خواهند بود این پیام را مخفی نمایند. مدیران تالاری که دسترسی مربوطه را دارند همیشه قادر به مشاهده این پیام هستند.) توانایی مخفی سازی مطالب خود توانایی حذف مطالب خود توانایی قفل یا باز کردن مطالب خود محدودیت ارسال مطلب، دیدگاه و نظرسنجی 30 عدد در روز توانایی گزارش مطالب امکان بازنشر در شبکه‌های اجتماعی نیاز مطالب ارسالی به تایید توسط مدیران توانایی بارگذاری فایل در پیام‌های خصوصی و چت توانایی نشان دادن افراد واکنش نشان داده شده امکان ایجاد بلاگ امکان ارسال نظر در پست‌های بلاگ توانایی ایجاد گالری توانایی ایجاد آلبوم توانایی ارسال ویدیو امکان ایجاد پُست به عنوان اسناد معتبر (ویژه، مهم) مدیریت تاپیک‌ها برای عمل‌های ایجاد، حذف، قفل کردن، باز کردن، ویرایش و انتقال مدیریت کاربران (اخطار، رسیدگی به شکایت و بررسی صف‌های پذیرش) ایجاد مقاله در بخش مقالات و یا وبلاگ تخصصی به صورت (مشارکت گروهی) توانایی مشاهده‌ی دریافت کنندگان فایل توانایی مشاهده‌ی پذیرنده‌های فایل توانایی مدیریت نسخه‌ها توانایی فروش و کسب پورسانت از فایل‌ها در بخش مرکز دانلود و فروشگاه توانایی ارسال چند فایل به صورت همزمان گروه‌های کاربری میانجی‌گر‌ها توانایی دسترسی به سایت توانایی تغییر نام کاربری بدون محدودیت نمایش در لیست آخرین کاربران و اطلاعات آنلاین توانایی ارسال تصویر کاور توانایی استفاده از انیمیشن‌های متحرک بر روی آواتار اجازه‌ی نمایش کاربران و مطالب مرتبط به آن در نتایج جستجو توانایی نمایش تاریخچه‌ی نام نمایشی توانایی دسترسی به سایت در هنگام آفلاین بودن توانایی ایجاد نظرسنجی توانایی رای دادن در نظر‌سنجی‌ها توانایی بستن نظر‌سنجی خود توانایی استفاده از برچسب‌ها توانایی استفاده از پیشوند‌ها گفتگو‌های مجاز برای ارسال در هر هفته (100 عدد) گفتگوهای مجاز برای آغاز در هر دقیقه (10) حداکثر دریافت کننده در هر گفتگو (30) امکان استفاده از امضاء توانایی بارگذاری فایل نمایش پاسخ‌های برجسته (نمایش پاسخ‌های این گروه در ویژگی و رنگ خاص) توانایی ارسال امتیاز به مطالب توانایی تغییر امتیاز به مطالب توانایی ویرایش مطالب خود در ماژول‌های زیر گفتگو‌های خصوصی به‌روز‌رسانی وضعیت مطالب وبلاگ‌ها موضوعات انجمن‌ها تصاویر آلبوم‌ها رویداد‌ها مقالات صفحه‌هات استاتیک فایل‌ها (مرکز دانلود) محدودیت ویرایش زمانی مطالب (بدون محدودیت زمانی) توانایی ویرایش مطالب به صورت مخفی (به طور عادی اگر مطلبی ویرایش گردد در زیر آن عبارت ویرایش شده قرار می گیرد. اگر فعال شود، کاربران این گروه قادر خواهند بود این پیام را مخفی نمایند. مدیران تالاری که دسترسی مربوطه را دارند همیشه قادر به مشاهده این پیام هستند.) توانایی مخفی سازی مطالب خود توانایی حذف مطالب خود توانایی قفل یا باز کردن مطالب خود محدودیت ارسال مطلب، دیدگاه و نظرسنجی 30 عدد در روز توانایی گزارش مطالب امکان بازنشر در شبکه‌های اجتماعی نیاز مطالب ارسالی به تایید توسط مدیران را ندارد توانایی بارگذاری فایل در پیام‌های خصوصی و چت توانایی نشان دادن افراد واکنش نشان داده شده امکان ایجاد بلاگ امکان ارسال نظر در پست‌های بلاگ توانایی ایجاد گالری توانایی ایجاد آلبوم توانایی ارسال ویدیو امکان ایجاد پُست به عنوان اسناد معتبر (ویژه، مهم) مدیریت تاپیک‌ها برای عمل‌های ایجاد، حذف، قفل کردن، باز کردن، ویرایش و انتقال مدیریت کاربران (اخطار، رسیدگی به شکایت و بررسی صف‌های پذیرش) ایجاد مقاله در بخش مقالات و یا وبلاگ تخصصی به صورت (مشارکت گروهی) توانایی مشاهده‌ی دریافت کنندگان فایل توانایی مشاهده‌ی پذیرنده‌های فایل توانایی مدیریت نسخه‌ها توانایی فروش و کسب پورسانت از فایل‌ها در بخش مرکز دانلود و فروشگاه توانایی ارسال چند فایل به صورت همزمان گروه‌های کاربری، مدیران کل سایت توانایی دسترسی به سایت توانایی تغییر نام کاربری بدون محدودیت نمایش در لیست آخرین کاربران و اطلاعات آنلاین توانایی ارسال تصویر کاور توانایی استفاده از انیمیشن‌های متحرک بر روی آواتار اجازه‌ی نمایش کاربران و مطالب مرتبط به آن در نتایج جستجو توانایی نمایش تاریخچه‌ی نام نمایشی توانایی دسترسی به سایت در هنگام آفلاین بودن توانایی ایجاد نظرسنجی توانایی رای دادن در نظر‌سنجی‌ها توانایی بستن نظر‌سنجی خود توانایی استفاده از برچسب‌ها توانایی استفاده از پیشوند‌ها گفتگو‌های مجاز برای ارسال در هر هفته (نامحدود) گفتگوهای مجاز برای آغاز در هر دقیقه (نامحدود) حداکثر دریافت کننده در هر گفتگو (نامحدود) امکان استفاده از امضاء توانایی بارگذاری فایل نمایش پاسخ‌های برجسته (نمایش پاسخ‌های این گروه در ویژگی و رنگ خاص) توانایی ارسال امتیاز به مطالب توانایی تغییر امتیاز به مطالب توانایی ویرایش مطالب خود در ماژول‌های زیر گفتگو‌های خصوصی به‌روز‌رسانی وضعیت مطالب وبلاگ‌ها موضوعات انجمن‌ها تصاویر آلبوم‌ها رویداد‌ها مقالات صفحه‌هات استاتیک فایل‌ها (مرکز دانلود) محدودیت ویرایش زمانی مطالب (بدون محدودیت زمانی) توانایی ویرایش مطالب به صورت مخفی (به طور عادی اگر مطلبی ویرایش گردد در زیر آن عبارت ویرایش شده قرار می گیرد. اگر فعال شود، کاربران این گروه قادر خواهند بود این پیام را مخفی نمایند. مدیران تالاری که دسترسی مربوطه را دارند همیشه قادر به مشاهده این پیام هستند.) توانایی مخفی سازی مطالب خود توانایی حذف مطالب خود توانایی قفل یا باز کردن مطالب خود محدودیت ارسال مطلب، دیدگاه و نظرسنجی (نامحدود) عدد در روز توانایی گزارش مطالب امکان بازنشر در شبکه‌های اجتماعی نیاز مطالب ارسالی به تایید توسط مدیران را ندارد توانایی بارگذاری فایل در پیام‌های خصوصی و چت توانایی نشان دادن افراد واکنش نشان داده شده امکان ایجاد بلاگ امکان ارسال نظر در پست‌های بلاگ توانایی ایجاد گالری توانایی ایجاد آلبوم توانایی ارسال ویدیو امکان ایجاد پُست به عنوان اسناد معتبر (ویژه، مهم) مدیریت تاپیک‌ها برای عمل‌های ایجاد، حذف، قفل کردن، باز کردن، ویرایش و انتقال مدیریت کاربران (اخطار، رسیدگی به شکایت و بررسی صف‌های پذیرش) ایجاد مقاله در بخش مقالات و یا وبلاگ تخصصی به صورت (مشارکت گروهی) توانایی مشاهده‌ی دریافت کنندگان فایل توانایی مشاهده‌ی پذیرنده‌های فایل توانایی مدیریت نسخه‌ها توانایی فروش و کسب پورسانت از فایل‌ها در بخش مرکز دانلود و فروشگاه توانایی ارسال چند فایل به صورت همزمان گروه‌های کاربری بنیان‌گذاران، مدیران کل سایت اعضای این گروه مجوز خاص مدیریتی جهت اعمال دسترسی‌ها، مدیریت گروه‌های کاربری و رسیدگی به نگه‌داری و پشتیبانی سیستم نرم‌افزاری را در اختیار دارند.
  8. کامبیز اسدزاده

    معمولاً در روز‌های عید و مناسبت‌های مرجع ممکن است شامل تخفیف قرار بگیره?
  9. کامبیز اسدزاده

    درود بر شما، کتاب همونطور که اشاره شده الکترونیکی هست و بعد از تاییدیه پرداخت به مشخصاتی که در سایت ثبت کرده‌اید فعال میشه و می‌تونید فایل رو دریافت کنید ?
  10. کامبیز اسدزاده

    اسکریپتینگ در ++C

    کامپایلر Cling یک مترجم تعاملی برای سی‌پلاس‌پلاس است، این مترجم تحت بالاترین کتابخانه‌های Clang و LLVM ساخته شده است. در واقع از آن‌جایی که کامپایلر Clang از آخرین ویژگی‌ها و استاندارد‌های زبان سی‌پلاس‌پلاس پشتیبانی می‌کند، Cling اجازه می‌دهد تا توسعه‌دهندگان اسکریپت‌های خود را با استفاده از C و C++ بنویسند. اگر شما به طور مستقیم مترجم را اجرا کنید، یک محیط زنده برای آغاز برنامه نویسی با سی‌پلاس‌پلاس را خواهید داشت که به عنوان بخشی از استاندارد نحو سی و سی‌پلاس‌پلاس به شمار می‌آید. همچنین می‌توانید دیگر دستورات را با نقطه‌ی "." آغاز در اختیار داشته باشید. وقتی از مترجم تعاملی استفاده می‌کنید، می‌توانید کد زیر را بنویسید: #include <stdio.h> printf("hello world\n"); همانطور که می‌بینید نیازی نیست تا در مورد حوزه‌ی دامنه‌ها نگران باشید؛ کافی است شما تابع مورد نظر خود را صدا بزنید. اگر قصد شما این است که از Cling به عنوان یک مترجم برای ساخت اسکریپت‌ها استفاده کنید، باید همه چیز را در داخل یک تابع قرار دهید.چرا که نقطه‌ی ورود به اسکریپت به طور پیش‌فرض همانند نام فایل می‌باشد. می‌توان آن را برای صدا زدن دیگر توابع سفارشی سازی کرد. بنابراین مثال قبل می‌توانید به شکل زیر تغییر کند: #include <stdio.h> void _01_hello_world() { printf("foo\n"); } یک نسخه‌ی دیگر در قالب سی‌پلاس‌پلاس #include <iostream> void _02_hello_world() { std::cout << "Hello world" << std::endl; } مثال‌ها کاملاً ساده هستند، اما آن‌ها به شما نشان می‌دهند که چگونه باید شروع کنید. در مورد کیوت چطور؟ #include <QtWidgets/qapplication.h> #include <QtWidgets/qpushbutton.h> void _03_basic_qt() { int argc = 0; QApplication app(argc, nullptr); QPushButton button("Hello world"); QObject::connect(&button, &QPushButton::pressed, &app, &QApplication::quit); button.show(); app.exec(); } اما توجه داشته باشید که کد قبلی کار نخواهد کرد، شما باید برخی از پارامتر‌های سفارشی را در Cling مشخص کنید. cling -I/usr/include/x86_64-linux-gnu/qt5 -fPIC -lQt5Widgets 03_basic_qt.cpp شما می‌توانید Cling را برای خودتان بر اساس آن چیزی که برای اسکریپت خود نیاز دارید سفارشی سازی کنید. همچنین شما می‌توانید Cling را به عنوان یک کتابخانه در اپلیکیشن‌های خود آورده و از سی‌پلاس‌پلاس به عنوان زبان برنامه‌نویسی استفاده کنید. این پُست در آینده ادامه خواهد داشت. ?
  11. کامبیز اسدزاده

    مرورگر گوگل کروم بازطراحی شد

    امروز نسخه‌ی Canary مرورگر گوگل کروم که ویژگی‌های جدید را به‌صورت زودهنگام در دسترس توسعه‌دهندگان قرار می‌دهد، با دریافت به‌روزرسانی جدید بازطراحی شد. در طول ماه‌های گذشته، گوگل با انتشار به‌روزرسانی‌های منظم برای مرورگر کروم، بستر را برای بزرگترین بازطراحی تاریخِ این مرورگر آماده می‌کرد. تا پیش از این، مرورگر کروم با دریافت هر به‌روزرسانی، تغییرات اندکی را در رابط‌کاربری به خود می‌دید؛ اما امروز، گوگل به‌روزرسانیِ جدیدی را برای کروم منتشر کرده است که رابط‌ کاربری این مرورگر را به طرز قابل‌توجهی نوسازی می‌کند. این نسخه از مرورگر تحت موتور v8 و همچنین به‌روز‌رسانی‌های اخیر تحت C++17 توسعه داده شده است که از بالاترین ویژگی‌های مدرن زبان برنامه نویسی بهره برده و تحت نسخه‌های Clang نیز کامپایل شده است تا به سریعترین کارآیی ممکن در بین مرورگر‌ها برسد. فعلاً به‌روزرسانی جدید کروم برای نسخه‌ی Canary منتشر شده است، این نسخه از مرورگر کروم، تنها برای توسعه‌دهندگان در نظر گرفته شده تا پیش از عرضه‌ی عمومی با ویژگی‌های جدید و آخرین دستاوردهای تکنولوژی در حوزه‌ی وب، آشنا شوند؛ اما اگر قصد تجربه‌ی تغییرات جدید را دارید، می‌توانید از طریق این لینک اقدام به دانلود این نسخه کنید. طبق گفته‌ی منبعی معتبر، از ویژگی‌های جدیدِ نسخه‌ی جدید کروم می‌توان به تغییر در شکل زبانه‌ها، حالت تک‌زبانه (Single Tab Mode)، اضافه‌شدنِ آیکون به جعبه‌ی پیشنهاد وب‌سایت‌ها در نوار آدرس، رنگ‌بندی‌ زبانه، زبانه‌های پین‌شده و شاخص‌های هشدار اشاره کرد. به‌روزرسانی جدید کروم اکنون به‌صورت پیش‌فرض در دسترس کاربران ویندوز، لینوکس و کروم‌او‌اس قرار دارد؛ اما اگر از رایانه‌ی مک استفاده می‌کنید، برای مشاهده این تغییرات، باید دو دستور زیر را به‌ترتیب در نوار آدرس وارد کنید و سپس کلید اینتر را فشار دهید. chrome://flags/#top-chrome-md chrome://flags/#views-browser-windows
  12. کامبیز اسدزاده

    مرورگر گوگل Canary

    نگارش 69.0

    3 دریافت

    در طول ماه‌های گذشته، گوگل با انتشار به‌روزرسانی‌های منظم برای مرورگر کروم، بستر را برای بزرگترین بازطراحیِ تاریخِ این مرورگر آماده می‌کرد. تا پیش از این، مرورگر کروم با دریافت هر به‌روزرسانی، تغییرات اندکی را در رابط‌کاربری به خود می‌دید؛ اما امروز، گوگل به‌روزرسانی جدیدی را برای کروم منتشر کرده است که رابط‌ کاربری این مرورگر را به طرز قابل‌توجهی نوسازی می‌کند. فعلاً به‌روزرسانی جدید کروم برای نسخه‌ی Canary منتشر شده است، این نسخه از مرورگر کروم، تنها برای توسعه‌دهندگان در نظر گرفته شده تا پیش از عرضه‌ی عمومی با ویژگی‌های جدید و آخرین دستاوردهای تکنولوژی در حوزه‌ی وب، آشنا شوند؛ اما اگر قصد تجربه‌ی تغییرات جدید را دارید، می‌توانید از طریق این لینک اقدام به دانلود این نسخه کنید.

    رایگان

  13. کامبیز اسدزاده

    هوش مصنوعی واتسون با پیش‌بینی عملکرد آینده

    یکی از دغدغه‌های کارفرمایان در حوزه منابع انسانی، علاوه بر استخدام نیروی متخصص، تصمیم‌گیری برای ادامه‌ی همکاری با کارمندان فعلی و مشخص نمودن اضافه حقوق و مزایای شغلی است. کارفرمایان تمایل دارند بدانند واقعا کدام یک از کارمندان شرکت، مستحق دریافت اضافه حقوق است و کدام یک فردی ارزشمند برای شرکت محسوب می‌شود که ارزش سرمایه‌گذاری دارد و حضورش برای شرکت مثمر فایده است. کارفرمایان علاقه‌ دارند تا بدانند کدام یک از کارمندان شرکت، عملکرد بهتری در آینده از خود نشان می‌دهند. پیش‌بینی وضعیت عملکرد آینده‌ی کارمندان و مشخص نمودن دورنمای کاری آنها بسیار حائز اهمیت است. همیشه با بررسی وضعیت و عملکرد گذشته‌ی فرد، نمی‌توان در مورد آینده‌ی او و موفقیت‌هایی که قرار است به دست بیاورد، پیش‌بینی کرد. در شرکت IBM، نه تنها عملکرد و دستاوردها یا خطاهای گذشته پرسنل مورد بررسی قرار می‌گیرند، بلکه در مورد آینده‌ی آنها نیز پیش‌بینی‌‌هایی انجام می‌شود و مشخص می‌شود فردی که اکنون در شرکت مشغول فعالیت است در آینده چه عملکردی خواهد داشت. واقعا شرکت IBM چگونه می‌تواند آینده‌ی کارمندان خود را قضاوت کند؟ در اصل IBM چگونه می‌تواند آینده را پیش‌بینی کند؟ همه‌ی آنچه آی‌بی‌ام به انجام می‌رساند در یک کلمه خلاصه شده است: واتسون. تجزیه و تحلیل واتسون (Watson Analytics) با استفاده از هوش مصنوعی، به تجربیات گذشته‌ی افراد و پروژه‌هایی که پیش از این انجام داده‌اند، توجه نشان داده ودر عین حال مهارت‌های بالقوه و کارهایی که در آینده می‌تواند به انجام برساند را مد نظر می‌گیرد. واتسون مشخص می‌کند هر یک از پرسنل، چه مهارت‌ها و ویژگی‌های بالقوه‌ای برای ارائه به شرکت IBM دارد که در آینده می‌تواند از آن‌ها در جهت منافع شرکت بهره‌برداری کند. همچنین واتسون، سیستم آموزش داخلی IBM را نیز بررسی می‌کند تا ببیند آیا کارمند مربوطه مهارت‌های جدیدی را کسب کرده است یا خیر. مدیران IBM‌ پس از ارزیابی امتیازهایی که واتسون به هر فردی می‌دهد، میزان پاداش یا وضعیت اضافه حقوق وی را مشخص می‌کنند. میزان افزایش حقوق فرد با توجه به امتیازهایی که واتسون برایش در نظر می‌گیرد، تعیین می‌شود. نیکل لاموراکس، معاون مدیرعامل شرکت IBM‌ در مورد بررسی وضعیت کارمندان از نظر اینکه حضور آنها به نفع شرکت است و منافعی را به دنبال دارد یا به ضرر شرکت تمام می‌شود، این چنین اظهار نظر کرده است: شرکت آی‌بی‌ام ادعا می‌کند که واتسون در مقایسه با بررسی‌ها و تجزیه‌ و تحلیل‌های کارشناسان منابع انسانی، از دقت ۹۶ درصدی برخوردار است و با چنین دقتی می‌تواند امتیاز عملکردی کارمندان را مشخص کند. در مدل‌های مدیریت سنتی، عموما کارفرمایان با توجه به محصولات و دستاوردهای گذشته‌ی پرسنل، برای آنها پاداش و اضافه حقوق مشخص می‌کنند و سابقه‌ی افراد تنها معیار ارزیابی برای دریافت حقوق و پاداش است. در این سیستم جدید مبتنی بر هوش مصنوعی، گذشته‌ی افراد تنها مقدمه‌ای برای تعیین بقیه موارد است و در اصل همه‌ی داستان نیست بلکه پیش بینی وضعیت آینده‌ی فرد نیز در تعیین حقوق و مزایای شغلی فعلی وی موثر هستند. رویکردهای مدیریت سنتی، برای زمان‌هایی که وظایف و مسئولیت‌های شغلی نسبتا ثابت هستند و هیچ‌گونه تغییری در کار و وظایف محول شده به فرد رخ نمی‌دهد، شاید کاربرد داشته باشد ولی به اعتقاد لاموراکس، با چنین رویکردی نیمه عمر مهارت‌ها، کوتاه و کوتاه‌تر می‌شود. توانمندی‌ها و کارهایی که کارمندان باید بتوانند در آینده به انجام برسانند، بیشتر از مهارت‌های گذشته‌ی آنها، اهمیت دارد. در سیستم مدیریتی جدید، کارمندان تشویق می‌شوند مهارت‌های جدیدی را بیاموزند و از آنجایی که می‌دانند سیستم امتیازدهی به یادگیری مهارت‌های جدید آنها امتیاز می‌دهد، برای یادگیری انگیزه دارند. بر اساس نظرسنجی انجام شده توسط شرکت مشاور Willis Towers Watson از بیش از ۲۰۰۰ سازمان و شرکت مختلف، مشخص شد که بیش از ۴۰ درصد پاسخ‌دهندگان در حال برنامه‌ریزی سیستمی هستند که مهارت‌های بالقوه و مهارت‌های آینده‌ی پرسنل شرکت را در ارزیابی کارمندان مورد توجه قرار دهد. تغییر سبک مدیریتی، از مدل سنتی به مدل مدیریتی بررسی عملکرد نیروی انسانی مبتنی بر مهارت‌ها، کمک می‌کند تا کارفرمایان بتوانند شکاف موجود در سیستم خود را از لحاظ مهارت آموزی پرسنل حل و فصل کنند. فدراسیون ملی کسب و کار مستقل، از ماه ژوئن بررسی‌هایی را به انجام رساند و متوجه شد که در بیش از یک سوم کسب و کارهای کوچک، دارای پست‌های شغلی هستند که کسی در آن‌ها مشغول به کار نیست و یکی از مشکلات اصلی شرکت‌ها کمبود کارگر و نیروی انسانی ثابت و ماهر است. کارفرمایان ادعا می‌کنند که نمی‌توانند افراد مناسبی را در پست‌های شغلی ثابت استخدام کنند و از آنجایی که بیشتر کارگرانی که در چنین پست‌هایی مشغول کار می‌شوند تلاش لازم را از خود نشان نمی‌دهند، کارفرمایان نمی‌توانند دستمزدشان را اضافه کنند یا پاداشی برای آنها در نظر بگیرند. در نهایت می‌بینیم که برای چنین مشاغلی نه تنها کارفرمایان با مساله استخدام نیروی کاری ثابت مواجه هستند، بلکه برای انجام کار، نیروی ماهر و متخصص هم در اختیار ندارند. IBM، معتقد است که برای پر کردن پست‌های شغلی شرکت، متقاضیان زیادی که دارای مهارت‌های لازم باشند و بتوانند نقش‌های مهمی را در بخش فناوری بر عهده بگیرند، ندارد. به همین دلیل، آی‌بی‌ام به کارمندان فعلی خود دورنمایی از پست‌های شغلی مورد نیازش در آینده را نشان می‌دهد و برای آنها مشخص می‌کند که اگر بخواهند در آینده در آن پست‌های شغلی مشغول فعالیت شوند، باید چه مهارت‌هایی بیاموزند. با چنین رویکردی هم کارمندان به‌خوبی می‌دانند که برای ارتقا شغلی و دستیابی به موقعیت بهتر و حقوق و مزایای بالاتر و بیشتر، باید چه مهارت‌هایی را بیاموزند و هم می‌دانند چه دورنمای شغلی در انتظار آنها است. آی‌بی‌ام ادعا می‌کند که هر یک از کارمندان شرکت، هر سال به طور متوسط، حدود ۶۰ ساعت آموزش می‌بینند. همه شرکت‌ها از روش تجزیه و تحلیل برای پیش بینی وضعیت آینده‌ کارمندان خود استفاده نمی‌کنند. شرکت Intern Group که یکی از شرکت‌های رورش کارآموز برای معرفی نیروی متخصص به شرکت‌های مختلف است، حدود ۸۰ نفر کارآموز دارد و معتقد است که کارآموزان باید حتما ۱۵ مهارت اصلی را برای موفقیت در کسب و کار ۱۰۰ سال آینده‌ فرا گیرند. مهارت‌هایی همچون انعطاف‌پذیری و مهارت‌های ارتباطی جزو مهارت‌های اصلی برای موفقیت در بازار کار ۱۰۰ سال آینده است. دیوید لویید، مدیرعامل این شرکت با استفاده از سیستم امتیازدهی، ۱۰ درصد از بهترین نیروهای شرکت را که به اعتقاد وی، نیروهایی با استعداد هستند، شناسایی می‌کند و معتقد است که شرکت باید تمام تلاش خود را برای حفظ این ۱۰ درصد نیروی ماهر و ارتقا آنها به کار ببندد. این کارمندان از طریق سیستم خدمات داخلی شرکت، آموزش می‌بینند و فرصت‌های جدیدی برای دریافت پاداش و اضافه حقوق پیدا می‌کنند. در اصل سیستم امتیازدهی می‌تواند وضعیت آینده‌ی کارمندان را پیش‌بینی کند و با توجه به آن فرصت‌های جدیدی در اختیار آنها قرار بدهد. البته دیوید لویید، فرصت مهارت آموزی را در اختیار تمام کارمندان شرکت قرار می‌دهد. وی معتقد است:
  14. کامبیز اسدزاده

    کیوت برای وب‌ اسمبلی

    وب‌اسمبلی (WebAssembly) یا wasm یک فناوری برنامه‌نویسی سطح‌پایین برای استفاده در مرورگر است. هدف اولیه‌ی آن پشتیبانی از کامپایل کد‌ها به سی و سی++ است هرچند که قرار است از سایر زبان‌ها نیز حمایت شود. حال کتابخانه‌ی Qt این امکان را تحت ماژول Qt WebAssembly فراهم می‌کند تا برنامه‌‌ی نوشته شده توسط سی++ و کیوت در محیط مرورگر قابل اجرا باشند. این ویژگی در حال حاضر به عنوان پیش‌نمایش برای نسخه‌ی Qt 5.11 برنامه‌ریزی شده است. کیوت برای ساخت وب اسمبلی دستور‌العمل‌هایی را در اینجا آورده است. قبل از هرچیز شما نیاز دارید تا ابزار کامپایلر emsdk را آماده و نصب نمایید. بنابراین دستورات زیر را به ترتیب اجرا کنید. # Get the emsdk repo git clone https://github.com/juj/emsdk.git # Enter that directory cd emsdk # Fetch the latest registry of available tools. ./emsdk update # Download and install the latest SDK tools. ./emsdk install latest # Make the "latest" SDK "active" for the current user. (writes ~/.emscripten file) ./emsdk activate latest # Activate PATH and other environment variables in the current terminal source ./emsdk_env.sh در صورتی که در پیکربندی نیاز به راهنمایی دارید از راهنمای اصلی آن استفاده کنید و یا در همین مرجع در تالار‌های گفتمان از ما بپرسید. ما به این ابزار به عنوان ابزار کامپایل-چند‌منظوره استفاده خواهیم کرد. برخی از اسکرین شات‌ها از نتایج خروجی این ماژول به صورت زیر آمده‌اند: یک بازی ساده به نام Colliding mice ویژگی پنجره‌های گفتگو به نظر می‌رسد پنجره‌های ساخته شده توسط QOpenGLWindow با فریم ریت ۶۰ به خوبی عمل می‌کنند. البته به نظر می‌رسد QOpenGLWidget فعلاً شامل برخی از مشکلات است که حل خواهند شد. کامپایلر Emscripten که به عنوان یک کامپایلر منبع‌باز که بک اند آن بر روی LLVM اجرا می‌شود کُد‌های OpenGL را به WebGL ترجمه می‌کند. بنابراین محدودیت‌هایی در نسخه‌های دسکتاپ و اِمبد‌ها وجود خواهد داشت. نمونه مثال پنجره تحت OpenGL در کنار این‌ها QtBases و QtDeclarative که از شاخه‌ی Wip/Web Assembly استقاده می‌کنند، ماژول‌های شناخته شده‌ی کیوت به صورت زیر به کار گرفته می‌شوند: QtCharts QtGraphicalEffects QtQuickControls QtQuickControls2 QtWebSockets QtMqtt (با استفاده از وب سوکت) برای استفاده از QtMqtt، شما باید کلاس WebSocketIODevice از نمونه مثالی با نام (websocketsubscription) وارد برنامه‌ی خود کنید. نمونه مثال‌های ساعت در QML نکته: از آن‌جا که جاوا‌اسکریپت و وب‌اسمبلی تنها یک نخ (Thread) دارند، QtDeclarative تنها برای یک نَخ (ترد) کار خواهد کرد. در نظر داشته باشید که ماژول‌های QtCharts QtGraphicalEffects، QtQuickcontrols، QtQuickControls2 بدون هیچ تغییراتی کار می‌کنند. ماژول QtChart از نمونه مثال oscilloscope این پروژه به عنوان یک رویکرد جدید و ویژگی‌ای که در آینده می‌تواند مفید باشد در حال توسعه است. بخش ویکی رسمی آن در این لینک آورده شده است.
  15. کامبیز اسدزاده

    سلام، مدتی بود که نسخهٔ ۲۰۱۷ کامپایلر MSVC با مشکل عدم بازگشت مقدار صحیح از نسخهٔ استاندارد زبان مواجه بود. هرچند توسط توسعه دهندگان این مشکل به مایکروسافت گزارش داده شده بود اما ظاهراً مشکل همچنان پا برجاست. و اما مشکل، کد زیر را با کامپایلر MSVC2017 اجرا کنید: #include <iostream> int main() { std::cout << __cplusplus << std::endl; std::cin.get(); return 0; } اگر دقت کنید مقدار بازگشتی این کد 199711خواهد بود. در حالی که باید مقدار بازگشتی آن با توجه به استاندارد زبان باید یکی از دو مقدار 201402L یا 201403 باشد. برای حل این مورد من پچی را فراهم کردم که می‌تونید این مشکل رو حل کنید. علاوه بر این یک سری ماکرو نویسی جزئی انجام شده که با دقت بیشتر و مقدار بازگشتی از نام خود کامپایلر را برای شما ارائه دهد. طبق اصلاحیه کد دستوری آن به صورت زیر خواهد که تکه‌ای از کد‌های یکی از پروژه‌های من به نام Genesis بود که حالا اینجا به اشتراک گذاشتمش: #include <iostream> using namespace std; #include "macro.h" int main() { Macro mc; cout << "Hello World!" << endl; cout << "C++ Standard Version (MSVC) : " << __cplusplus << endl; cout << "C++ Standard Version (with bug fix in MSVC : " << __GENESIS_CPP_VALUE__ << endl; cout << "C++ Standard Version (with bug fix in MSVC using function: " << mc.get__cplusplus(false) << endl; cout << "Compiler name using flag true: " << mc.get__cplusplus(true) << endl; return 0; } خروجی: Hello World! C++ Standard Version (MSVC) : 199711 C++ Standard Version (with bug fix in MSVC : 201703 C++ Standard Version (with bug fix in MSVC using function: 201703 Compiler name using flag true: MSVC++ برای دریافت این اصلاحیه به مخزن آن مراجعه نمایید.
  16. معرفی ابزار کیوبس (Qbs) با آوای (“Cubes”) همانند qmake و cmake یک ابزار بسیار ساده و قدرتمند برای ساخت پروژه در پلتفرم‌های مختلف می‌باشد. این ابزار قابلیت استفاده در هر نوع پروژه ای را دارد به‌گونه‌ای که مهم نیست زبان‌برنامه نویسی٬ ابزار‌ها و حتی کتابخانه‌های مورد استفاده چه چیزی باشند. کیوبس یک ابزار همه کاره است که یک نمودار ساخت از پروژه‌های سطح بالا مانند (qmake و cmake) فراهم می‌کند که علاوه بر آن وظیفه اجرای دستورات نمودار ساخته شده در سطح پایین را مانند (make) فراهم می‌کند. در این کتاب ما به پیش معرفی آن می‌پردازیم چرا که قرار است در نسخه ۶ کیوت جایگزین نوع .pro از qmake باشد. کیوبس برنامه‌ها را بر پایه‌ی اطلاعاتی می‌سازد که در قالب یک فایل QML فراهم می‌شوند. هر فایل پروژه مشخص می‌کند که پروژه می‌تواند شامل چندین محصول باشد و شما نوع پروژه می‌توانیدمشخص کنید که یکی از انواع : نرم افزار، کتابخانه و غیره باشد. مشخصات سیستم مورد نیاز جهت استفاده از ابزار QBS حداقل نسخه ۵.۶.۰ به بعد خواهد بود. این ابزار همراه با Qt ارائه می‌شود. معرفی ساختار QBS در قالب QML کیوبس برای فایل پروژه خود از پسوند (*.qbs) استفاده می‌کند تا بتواند محتوای موجود در یک پروژه را معرفی کند. به طور کلی یک پروژه شامل چندین محتوا از محصول (پروژه) می‌باشد که در ادامه به آن‌ها اشاره شده است. یک محصول هدفی از روند ساخت است٬ به طور معمول یک برنامه کاربردی٬ کتابخانه و یا شاید یک چیز دیگر می‌تواند هدف آن باشد. جهت بررسی و مدیریت Qbs وارد بخش Setting یا Perefrences شوید و زبانه Qbs را انتخاب کنید تا در این بخش به نسخه و پیکربندی مقادیر مربوط به Qbs دسترسی داشته باشید. مباحثی که در این پست آموزشی پوشش داده خواهد شد: نحوه‌ی استفاده معرفی انواع پروژه‌ها معرفی برخی از پر کاربرد‌ترین آیتم‌های موجود در کیوبس مانند: پروژه Project زیر پروژه SubProject ویژگی‌ها (خواص‌ها) Properties اپلیکیشن Application اپلیکیشن سی‌پلاس‌پلاس CppApplication کتابخانه (پویا) DynamicLibrary کتابخانه (ایستا) StaticLibrary محصول Product پروفایل Profile گروه‌‌بندی Group وابستگی‌ها Depends و ... معرفی ماژول‌های پر کاربرد در کیوبس مانند: ماژول cpp جهت پیکربندی و پشتیبانی از C++ و ویژگی‌های آن در کیوبس پیکربندی ماژول‌های کیوت پیکربندی ویژگی‌های پردازنده پیکربندی اختصاصی اندروید پیکربندی اختصاصی محصولات اپل پیکربندی Xcode پیکربندی ماژول‌های کیوت پیکربندی Java و ... در صورت نیاز به مباحث دیگری نیز اشاره خواهد شد. نحوه‌ی استفاده جهت استفاده از کیوبس کافی است با سینتکس JavaScript یا QML آشنا باشید. جهت پیکربندی یک پروژه سی‌پلاس‌پلاس نمونه کُد آن به صورت زیر خواهد بود: import qbs 1.0 Application { name: "helloworld" files: "main.cpp" Depends { name: "cpp" } } انواع پروژه‌ها در کیوبس به چهار دسته‌ی زیر تقسیم بندی می‌شوند: تولید اپلیکیشن ساده (Application) این نوع پروژه به عنوان یک آیتم از محصول می‌باشد. Application { Depends { name: "cpp" } } تولید اپلیکیشن تحت وابستکی و ویژگی‌های سی‌پلاس‌پلاس (CppApplication) به عنوان یک محصول که تحت وابستگی‌های ماژول Cpp می‌باشد استفاده می‌شود. CppApplication { cpp.cxxLanguageVersion: "c++11" files: [ "main.cpp", "qml.qrc", ] } تولید پروژه در قالب کتابخانه‌ی پویا (DynamicLibrary) این نوع زمانی مورد استفاده قرار می‌گیرد که قرار است پروژه را در قالب یک خروجی کتابخانه‌ی پویا تولید کنیم. Product { type: "dynamiclibrary" } تولید پروژه در قالب کتابخانه‌ی استاتیک (StaticLibrary) این نوع زمانی مورد استفاده قرار می‌گیرد که قرار است پروژه را در قالب یک خروجی کتابخانه‌ی ایستا تولید کنیم. مثال Product { type: "staticlibrary" } در یک پروژه برای مشخص کردن فایل‌های قابل استفاده، نام و وابستگی‌ها به سادگی می‌توانند مشخص شوند. برای مثال در صورتی که پروژه‌ی شما تحت فناوری کیوت و Qt Quick است کافی است مقدار Depends را مشخص کنید: Depends { name: "Qt.core" } Depends { name: "Qt.quick" } لیستی از آیتم‌های (پر کاربرد و پایه) در QBS آیتم پروژه (Project) به عنوان یک آیتم از پروژه مجموعه‌ای از محصولات و خواص‌های مربوط به آن‌ها را ارائه می‌دهد. آیتم زیر پروژه‌ (Sub Project) یک ایتم زیر پروژه برای اضافه کردن یک پروژه به عنوان زیر مجموعه پروژه می‌باشد که در یک فایل جداگانه تعریف شده است. SubProject { filePath: "Subproject/OtherProject.qbs" Properties { name: "A sub-project" } } آیتم خواص (Properties) شرایط دستوری و خاصیت‌های مورد نیاز را برای یک محصول ایجاد می‌کند. Product { Properties { condition: qbs.targetOS.contains("windows") ... ..... } } - خواص condition از نوع بولین جهت شرط سازی سایر موارد در یک محصول را فراهم می‌کند. - خواص overrideListProperties لیست خواص تنظیم شده را که در ماژول‌ها به دست می آید را بر می‌گرداند. آیتم اپلیکیشن Application به عنوان یک آیتم با نوع 'application' برای یک محصول تعریف می‌شود. آیتم اپلیکیشن سی‌پلاس‌پلاس CppApplication به عنوان یک محصول با وابستگی‌های لازم در سی‌پلاس‌پلاس می‌باشد. آیتم کتابخانه‌‌ی پویا (DynamicLibrary) به عنوان یک آیتم برای محصول از نوع کتابخانه در قالب داینامیک (پویا) می‌باشد. import qbs Project { minimumQbsVersion: "1.7.1" CppApplication { type: "dynamiclibrary" ... Group { // Properties for the produced executable fileTagsFilter: "application" qbs.install: true } } } آیتم کتابخانه‌‌ی ایستا (StaticLibrary) به عنوان یک آیتم برای محصول از نوع کتابخانه در قالب استاتیک (ایستا) می‌باشد. import qbs Project { minimumQbsVersion: "1.7.1" CppApplication { type: "staticlibrary" ... Group { // Properties for the produced executable fileTagsFilter: "application" qbs.install: true } } } آیتم محصول (Product) به عنوان یک محصول (Product) به طور معمول نتیجه یک فرآیند ساخت را ارائه می‌دهد. مجموعه ای از فایلهای ورودی و خروجی را مشخص می‌کند. برای مثال نمونه‌ی زیر محصول را به عنوان یک پروژه سی پلای پلاس تنظیم می‌کند. Product { name: "helloworld" type: "application" files: "main.cpp" Depends { name: "cpp" } } خواص عضو در محصول (Product) aggregate : bool buildDirectory : path builtByDefault : bool condition : bool consoleApplication : bool destinationDirectory : string excludeFiles : stringList files : stringList multiplexByQbsProperties : stringList multiplexedType : stringList name : string qbsSearchPaths : stringList sourceDirectory : path targetName : string type : stringList version : string عضو aggregate اگر مقدارش برابر با true باشد، محصولی را که تحت وابستگی چندگانه باد در قالب یک محصول جمع آوری شده تولید خواهد کرد. در صورتی که شما نمی‌خواهید چنین کاری کنید بهتر است آن را به صورت تعریف نشده در نظر بگیرید. عضو buildDirectory دایرکتوری (ریشه مسیر) برای ساخت محصول است. فایل‌های تولید شده بعد از کامپایل در این مسیر قرار خواهند گرفت که به صورت پیش فرض توسط Qbs مقدار دهی می‌شود و کاربر نمی‌تواند آن را تغییر دهد. عضو buildByDefault تعیین کننده ساخت محصول است. اگر مقدارش false باشد، عمل ساخت محصول تنها در زمان درخواست صریح صورت خواهد گرفت که دستور ساخت آن توسط پارامتر --products و یا استفاده از --all-products برای دستور ساخت استفاده خواهد شد. مقدار آن به صورت پیشفرض true می‌باشد. عضو condition تعیین می‌کند که محصول ساخته خواهد شد، اگر مقدارش false باشد، محصول ساخته نخواهد شد. مقدار این عضو به صورت پیشفرض true است. در ویندوز، تعیین می‌کند که برنامه تحت GUI تولید شود یا تحت کنسول. اگر مقدار آن برابر true باشد، یک اپلیکیشن تحت کنسول تولید خواهد شد. در غیر این صورت یک اپلیکیشن تحت رابط کاربری (GUI) تولید خواهد شد. در پلتفرم‌های اپل، به نوع برنامه به صورت پیشفرض بستگی دارد. اگر مقدارش true باشد، یک برنامه اجرایی طبیعی تولید خواهد شد در غیر این صورت، بسته‌ی نرم‌ا‌فزاری تولید می‌شود. عضو destinationDirectory مسیری است که در هدف مصنوعات قرار می‌گیرد. اگر یک مسیر نسبی داده شود آن را به عنوان دایرکتوری پایه برای project.buildDirectory تنظیم می‌کند. عضو exclude-files لیست فایلهای منبع یا سورس را شاملش نمی‌شود. برای موارد معروف و خاص مفید است. عضو files لیستی از فایل های منبع یا سورس را شامل می‌شود. عضو multiplexByQbsProperties مشخص می‌کند که کدام خواص ماژول qbs برای استفاده از محصولات چندگانه استفاده شود. عضو multiplexedType نوع محصول را برای نمونه محصولات چند گانه مشخص می‌کند. در صورتی که نیاز به این خواص ندارید می‌توانید آن را تعریف نکنید. عضو name نام محصول را اعمال میکند. مقدار آن باید بر اساس یک عبارت جاوا اسکریپتی باشد. CppApplication { name: "hello" + "world" // valid } CppApplication { name: "app_" + qbs.targetOS.join("_") // invalid } عضو qbsSearchPath با مقدار project.qbsSearchPaths ادغام خواهد شد که لیستی از مسیرها را برای وارد کردن ماژول‌ها جستجو می‌کند. عضو sourceDirectory دایرکتوری یا مسیر منبع را برای محصول مشخص می‌کند. این دایرکتوری برای فایل‌هایی که در محصول تعریف شده اند می‌باشد. عضو targetName نام پایه فایل است که با هدف مصنوعات برای محصول می‌باشد. مقدار نام فایلی که نامعتبر باشد توسط کاراکتر زیر خط جایگزین می‌شود. عضو type برچسب‌های فایل مربط به مصنوعات محصول را مشخص می‌کند. عضو version شماره نسخه محصول را مشخص می‌کند. برای کتابخانه‌های به اشتراک گذاری شده و همچنین فایل Info.plist تحت محصولات اپل مورد استفاده می‌گیرد. آیتم پروفایل (Profile) به عنوان پروفایل سفارشی می‌تواند برای تعریف اهداف و شرایط ساخت بر روی یک ماشین خاص تنظیم شود. Profile { name: "my-special-profile" qbs.toolchainType: "gcc" qbs.targetPlatform: "linux" qbs.architecture: "armv7a" cpp.toolchainInstallPath: "/opt/special-gcc/bin" cpp.toolchainPrefix: "arm-linux-gnueabi-" } qbs.profiles: ["my-special-profile"] آیتم گروه (Group) جهت تعریف گروه‌های مختلف در فایل‌هایی که شامل یک محصول می‌باشند مورد استفاده قرار می‌گیرد. این ویژگی در محیط توسعه برای مدیریت پروژه‌های بزرگ بسیار کارآمد و مفید است. Application { Group { name: "common files" files: ["myclass.h", "myclass_common_impl.cpp"] } Group { name: "Windows files" condition: qbs.targetOS.contains("windows") files: "myclass_win_impl.cpp" } Group { name: "Unix files" condition: qbs.targetOS.contains("unix") files: "unixhelper.cpp" Group { name: "Linux files" condition: qbs.targetOS.contains("linux") files: "myclass_linux_impl.cpp" } Group { name: "FreeBSD files" condition: qbs.targetOS.contains("freebsd") files: "myclass_freebsd_impl.cpp" } Group { name: "macOS files" condition: qbs.targetOS.contains("macos") files: "myclass_macos_impl.cpp" } Group { name: "PS4 Pro files" condition: qbs.targetOS.contains("linux") files: "myclass_macos_impl.cpp" } Group { name: "Xbox One X files" condition: qbs.targetOS.contains("windows") files: "myclass_macos_impl.cpp" } } Group { name: "Files to install" qbs.install: true qbs.installDir: "share" files: "runtime_resource.txt" } } آیتم وابستگی (Depends) یک آیتم وابستگی در یک محصول یا ماژول تعریف می‌شود. به عنوان مثال محصول زیر ماژول Qt Quick، Qt Core و Qt Gui را بارگیری می‌کند. Product { Depends { name: "Qt.core" } Depends { name: "Qt.quick" } Depends { name: "Qt.gui" } } و یا به روش زیر تحت کتابخانه‌ی Qt ماژول‌های مربوطه را بارگیری می‌کند. Product { Depends { name: "Qt"; submodules: ["core", "quick", "gui"] } } ترکیبی از ماژول‌های مختلف از پروژه‌های مختلف به صورت زیر خواهد بود: Product { Depends { name: "cpp" } Depends { name: "MyEngine"; submodules: ["module1", "module2", "module3"] } Depends { name: "Qt"; submodules: ["core", "quick", "gui"] } } معرفی ماژول‌های پر کاربرد در Qbs ماژول cpp جهت پیکربندی و پشتیبانی از C++ و ویژگی‌های آن در کیوبس برخی از ویژگی‌های موجود در این ماژول به صورت زیر آورده شده‌اند: allowUnresolvedSymbols : bool alwaysUseLipo : bool architecture : string archiverName : string archiverPath : string assemblerFlags : stringList assemblerName : string assemblerPath : string automaticReferenceCounting : bool cFlags : stringList cLanguageVersion : stringList combineCSources : bool combineCxxSources : bool combineObjcSources : bool combineObjcxxSources : bool commonCompilerFlags : stringList compilerDefinesByLanguage : var compilerFrameworkPaths : pathList compilerIncludePaths : pathList compilerLibraryPaths : pathList compilerName : string compilerPath : string compilerPathByLanguage : var compilerVersionMajor : int compilerVersionMinor : int compilerVersionPatch : int compilerWrapper : stringList cppFlags : stringList cxxFlags : stringList cxxLanguageVersion : stringList cxxStandardLibrary : string debugInformation : bool defines : stringList discardUnusedData : bool distributionFrameworkPaths : pathList distributionIncludePaths : pathList distributionLibraryPaths : pathList driverFlags : stringList driverLinkerFlags : stringList dsymutilFlags : stringList dsymutilPath : string dynamicLibraries : stringList enableCompilerDefinesByLanguage : stringList enableExceptions : bool enableReproducibleBuilds : bool enableRtti : bool endianness : string entryPoint : string exceptionHandlingModel : string exportedSymbolsCheckMode : string frameworkPaths : pathList frameworks : stringList generateManifestFile : bool includePaths : pathList libraryPaths : pathList linkerFlags : stringList linkerMode : string linkerName : string linkerPath : string linkerWrapper : stringList lipoPath : string minimumIosVersion : string minimumMacosVersion : string minimumTvosVersion : string minimumWatchosVersion : string minimumWindowsVersion : string nmName : string nmPath : string objcFlags : stringList objcopyName : string objcopyPath : string objcxxFlags : stringList optimization : string platformDefines : stringList positionIndependentCode : bool prefixHeaders : pathList requireAppContainer : bool requireAppExtensionSafeApi : bool rpathOrigin : string rpaths : stringList runtimeLibrary : string separateDebugInformation : bool soVersion : string sonamePrefix : string staticLibraries : stringList stripName : string stripPath : string systemFrameworkPaths : pathList systemIncludePaths : pathList systemRunPaths : stringList treatSystemHeadersAsDependencies : bool treatWarningsAsErrors : bool useCPrecompiledHeader : bool useCxxPrecompiledHeader : bool useLanguageVersionFallback : bool useObjcPrecompiledHeader : bool useObjcxxPrecompiledHeader : bool useRPathLink : bool useRPaths : bool variantSuffix : string visibility : string warningLevel : string weakFrameworks : stringList windowsApiAdditionalPartitions : stringList windowsApiCharacterSet : string windowsApiFamily : string با توجه به لیست بالا، به برخی از ویژگی‌های موجود در این لیست اشاره می‌کنیم. ویژگی cxxLanguageVersion و cLanguageVersion جهت تعیین کردن پشتیبانی از نسخه‌ی زبان‌های سی‌پلاس‌پلاس و سی مورد استفاده قرار می‌گیرد که مشخصه‌های آن به ترتیب برای سی‌پلاس‌پلاس c++98 | c++11 | c++14 | c++17 و برای سی c89 | c98 | c11 می‌باشند. cpp.cLanguageVersion: "c11" cpp.cxxLanguageVersion: "c++17"
  17. کامبیز اسدزاده

    کتابخانه‌ی اوپن سی اِل مخفف Open Computing Language بستری برای برنامه‌هایی که قرار است بر سکو‌های ناهمگن یا تکیه بر پردازنده‌های مرکزی و پردازنده‌های گرافیکی و سایر پردازنده‌ها اجرا شوند. این کتابخانه دارای یک زبان بر پایه‌ی C99 و C++11 برای نوشتن کرنل‌ها و همچنین رابط‌های برنامه‌نویسی برای تعریف و پس از کنترل بستر استفاده شوند را دارا است. این کتابخانه چند‌پردازندگی را با استفاده از روش‌های وظیفه محور (Task-Based) و داده محور (Data-Based) پشتیبانی می‌کند. اوپن سی اِل توسط هر دو شرکت AMD/ATI و Nvidia پذیرفته شده است. در طراحی اوپن سی اِل، مقدار زیادی از رابطه‌های پردازشی با Cuda و رقیب آن، مایکروسافت دایرکت کامپیوت (Direct-Compute) به اشتراک گذاشته شده است. پیاده سازی‌های مربوطه از طرف Altea, AMD, Apple صورت گرفته شده است که در این میان OpenCL همراه با OpenGL به نفع Metal2 منسوخ شده اند. همچنین IBM, Imagination, Intel, Nvidia, Qualcomm, Samsung, Vivante, Xilinx و Ziilabs آن را پذیرفته‌اند. این کتابخانه یکی از قدرتمند ترین پلتفرم‌های موجود در بازار در مقابل DirectX می‌باشد گه از سوی کمیته‌ی Khronos Group اعلام شده است که پا به پای DirectX ه فعالیتش ادامه می‌دهد. جالب است بدانید نسخه‌های جدید این کتابخانه با قدرت بسیار زیادی بر روی PS4 و PS4 Pro استفاده می‌شوند. از آنجایی که PS4 از معماری GCN استفاده می‌کند، قابلیت پشتیبانی از DiectX 12 نیز برای آن فراهم شده است. بهتر است بدانید توسعه اصلی این پلتفرم توسط اپل انجام شده است که در حال حاضر توسط کمیته‌ی Khronos Group اداره می‌شود که بر روی طیف وسیعی از سخت افزار‌های روز و کارت گرافیکی‌های محتلف گرفته تا پردازنده‌های موجود پشتیبانی می‌شود. قدرت روز افزون اوپن سی اِل در حال افزایش است و شاید اگر قدرت و سرمایه‌ی مایکروسافت نبود، OpenCL سلطان بی چون و چرای بازار می‌شد. کودا با وجود انکار انویدیا، فریم ورکی است اختصاصی که در بسیاری از محصولات مورد استفاده قرار می‌گیرد. انویدیا تلاش می‌کند رقبایش را به استفاده از کودا وادار کند، اما تلاشش نتیجه بخش نبوده و می‌بینم که از این فریم ورک بیشتر در توسعه محصولات خودش استفاده می‌شود. از طرفی می‌توان ادعا کرد که Direct Compute هم اختصای است. چون فقط بر روی ویندوز و دایرکت اِکس ۱۱ به بالا اجرا می‌شود. اما OpenCL منبع باز است و بسیاری از شرکت‌های بزرک از جمله Nvidia از آن پشتیبانی می‌کنند. جهت نصب و راه اندازی این کتابخانه برای پردازنده‌های Intel به این بخش مراجعه کرده و نسخه‌ی Amd را در این بخش و برای Nvidia از این صفحه دریافت و استخراج نمایید. این کتابخانه در قالب SDK شامل include و lib تحت تو معماری x86 و x64 می‌باشد که باید در محیط توسعه‌ی نرم‌افزاری خود آن را معرفی کنید. در محیط Qt Creator طبق آموزش‌های قبل اقدام کنید. با توجه به اینکه ما SDK مربوطه را در مسیر C:/IntelOpenCL/sdk استخراج کرده‌ایم، کُد فایل .pro به صورت زیر خواهد بود: LIBS += -L$$PWD/../../../../../Intel/OpenCL/sdk/lib/x86/ -lOpenCL INCLUDEPATH += $$PWD/../../../../../Intel/OpenCL/sdk/include DEPENDPATH += $$PWD/../../../../../Intel/OpenCL/sdk/include جهت آزمایش عملکرد کتابخانه توجه داشته باشید که فایل‌های هدر در پلتفرم macOS در پوشه‌ی OpenCL و در محیط‌های ویندوز و لینوکس در مسیر CL موجود می‌باشند. #ifdef __APPLE__ #include <OpenCL/opencl.h> #else #include <CL/cl.hpp> #endif در ادامه کد زیر نتیجه‌ی جمع دو آرایه با یکدیگر را تحت OpenCL اجرا خواهد گرد: #include <iostream> #include <vector> #ifdef __APPLE__ #include <OpenCL/opencl.h> #else #include <CL/cl.hpp> #include <CL/opencl.h> #endif using namespace std; int main(){ //get all platforms (drivers) std::vector<cl::Platform> all_platforms; cl::Platform::get(&all_platforms); if(all_platforms.size()==0){ std::cout<<" No platforms found. Check OpenCL installation!\n"; exit(1); } cl::Platform default_platform=all_platforms[0]; std::cout << "Using platform: "<<default_platform.getInfo<CL_PLATFORM_NAME>()<<"\n"; //get default device of the default platform std::vector<cl::Device> all_devices; default_platform.getDevices(CL_DEVICE_TYPE_ALL, &all_devices); if(all_devices.size()==0){ std::cout<<" No devices found. Check OpenCL installation!\n"; exit(1); } cl::Device default_device=all_devices[0]; std::cout<< "Using device: "<<default_device.getInfo<CL_DEVICE_NAME>()<<"\n"; cl::Context context({default_device}); cl::Program::Sources sources; // kernel calculates for each element C=A+B std::string kernel_code= " void kernel simple_add(global const int* A, global const int* B, global int* C){ " " C[get_global_id(0)]=A[get_global_id(0)]+B[get_global_id(0)]; " " } "; sources.push_back({kernel_code.c_str(),kernel_code.length()}); cl::Program program(context,sources); if(program.build({default_device})!=CL_SUCCESS){ std::cout<<" Error building: "<<program.getBuildInfo<CL_PROGRAM_BUILD_LOG>(default_device)<<"\n"; exit(1); } // create buffers on the device cl::Buffer buffer_A(context,CL_MEM_READ_WRITE,sizeof(int)*10); cl::Buffer buffer_B(context,CL_MEM_READ_WRITE,sizeof(int)*10); cl::Buffer buffer_C(context,CL_MEM_READ_WRITE,sizeof(int)*10); int A[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; int B[] = {0, 1, 2, 0, 1, 2, 0, 1, 2, 0}; //create queue to which we will push commands for the device. cl::CommandQueue queue(context,default_device); //write arrays A and B to the device queue.enqueueWriteBuffer(buffer_A,CL_TRUE,0,sizeof(int)*10,A); queue.enqueueWriteBuffer(buffer_B,CL_TRUE,0,sizeof(int)*10,B); //run the kernel //alternative way to run the kernel cl::Kernel kernel_add=cl::Kernel(program,"simple_add"); kernel_add.setArg(0,buffer_A); kernel_add.setArg(1,buffer_B); kernel_add.setArg(2,buffer_C); queue.enqueueNDRangeKernel(kernel_add,cl::NullRange,cl::NDRange(10),cl::NullRange); queue.finish(); int C[10]; //read result C from the device to array C queue.enqueueReadBuffer(buffer_C,CL_TRUE,0,sizeof(int)*10,C); std::cout<<" result: \n"; for(int i=0;i<10;i++){ std::cout<<C[i]<<" "; } return 0; } نتیجه خروجی جمع دو آرایه با یکدیگر و همچنین شناسایی پلتفرم‌های قابل پشتیبانی در OpenCL: Using platform: Intel(R) OpenCL Using device: Intel(R) HD Graphics 4400 result: 02435768109
  18. کامبیز اسدزاده

    گرافیک کامپیوتری همواره از جمله جذابترین جنبه های کامپیوترها بوده است. بازیها، برنامه های طراحی گرافیکی دو بعدی و سه بعدی و شبیه سازیها همگی به نوعی از قابلیتهای گرافیکی یک کامپیوتر بهره می‌برند. مهمترین نکته در این زمینه، برقراری تعادلی منطقی بین کیفیت تصاویر نمایش داده شده بر روی صحنه و سرعت اجرای برنامه می‌باشد. کتابخانه‌ی GLFW ابزاری برای استفاده با اوپن‌جی‌ال (OpenGL) است که امکاناتی برای برنامه‌نویس برای قابلیت کشیدن و مدیریت پنجره‌ها و کانتکست اوپن‌جی‌ال و ورودی جوس‌استیک، صفحه‌کلید و موشواره فراهم می‌کند. در این آموزش همانند کتابخانه‌های SDL و SFML نصب و راه اندازی جهت استفاده از OpenGL را توضیح داده‌ایم. جهت دریافت کتابخانه‌ی GLFW آن را از این بخش دریافت کنید. فایل دانلود شده را در مسیر C:/glfw-3.2.1.bin.WIN64 استخراج کنید. طبق آموزش‌های مرتبط با نحوه‌ی افزودن کتابخانه به محیط توسعه اقدامات لازم را انجام دهید. در صورتی که می‌خواهید کتابخانه را به صورت سفارشی کامپایل کنید، طبق آموزش‌هایی که از قبل ارائه شده است اقدام کنید. نکات مرتبط با نصب و راه اندازی در بخش Additional Dependencies در محیط Visual Studio گزینه‌های مورد نیاز به صورت زیر خواهند بود: glfw3.lib; opengl32.lib; User32.lib; Gdi32.lib;Shell32.lib در محیط Qt Creator گزینه‌های -lglfw3 -lopengl32 -lUser32 -lGdi32 -lShell32 مورد نیاز هستند. win32: LIBS += -L$$PWD/../../../../glfw-3.2.1.bin.WIN64/lib-vc2015/ -lglfw3 -lopengl32 -lUser32 -lGdi32 -lShell32 INCLUDEPATH += $$PWD/../../../../glfw-3.2.1.bin.WIN64/include DEPENDPATH += $$PWD/../../../../glfw-3.2.1.bin.WIN64/include کُد زیر نمونه مثالی از OpenGL تحت glfw می‌باشد که بعد از کامپایل و اجرا پنجره‌ی خالی تولید شده را تولید می‌کند: #include <GLFW/glfw3.h> int main(void) { GLFWwindow* window; /* Initialize the library */ if (!glfwInit()) return -1; /* Create a windowed mode window and its OpenGL context */ window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL); if (!window) { glfwTerminate(); return -1; } /* Make the window's context current */ glfwMakeContextCurrent(window); /* Loop until the user closes the window */ while (!glfwWindowShouldClose(window)) { /* Render here */ glClear(GL_COLOR_BUFFER_BIT); /* Swap front and back buffers */ glfwSwapBuffers(window); /* Poll for and process events */ glfwPollEvents(); } glfwTerminate(); return 0; } جهت بررسی صحت کارکرد تحت کد دستوری زیر مثلثی را در مرکز پنجره تولید می‌کنیم: glBegin(GL_TRIANGLES); glVertex2d(-0.5f, -0.5f); glVertex2d(0.0f, 0.5f); glVertex2d(0.5f, -0.5f); glEnd(); در نهایت نتیجه کُد خروجی به صورت زیر خواهد بود: آموزش نصب و راه اندازی کتابخانه در ++C
  19. کامبیز اسدزاده

    کتابخانه‌ی GLFW

    نگارش 3.2.1

    15 دریافت

    گرافیک کامپیوتری همواره از جمله جذابترین جنبه های کامپیوترها بوده است. بازیها، برنامه های طراحی گرافیکی دو بعدی و سه بعدی و شبیه سازیها همگی به نوعی از قابلیتهای گرافیکی یک کامپیوتر بهره می‌برند. مهمترین نکته در این زمینه، برقراری تعادلی منطقی بین کیفیت تصاویر نمایش داده شده بر روی صحنه و سرعت اجرای برنامه می‌باشد. کتابخانه‌ی GLFW ابزاری برای استفاده با اوپن‌جی‌ال (OpenGL) است که امکاناتی برای برنامه‌نویس برای قابلیت کشیدن و مدیریت پنجره‌ها و کانتکست اوپن‌جی‌ال و ورودی جوس‌استیک، صفحه‌کلید و موشواره فراهم می‌کند.

    رایگان

  20. کامبیز اسدزاده

    در کتابخانه‌ی SFML فونت‌ها می‌توانند از طریق فایل، حافظه و یا جریان ورودی مشخصی بارگذاری شوند و توسط رایج‌ترین فونت‌ها پشتیبانی می‌شوند. جهت اعلان یک فونت جدید در این کتابخانه کافی است کُد زیر را در نظر داشته باشید: sf::Font font; در ادامه برای بارگذاری یک فونت به صورت زیر عمل می‌کنیم: font.loadFromFile("arial.ttf"); در قالب یک دستور شرطی: // Load it from a file if (!font.loadFromFile("arial.ttf")) { // error... } برای استفاده از فونت و قالب‌های سفارشی نیاز است تا از کلاس sf::Text نمونه گیری شود، بنابراین در ادامه مثال زیر نشان می‌دهد که نمونه‌ای از کلاس Text ایجاد و با فونت مربوطه ترکیب شده است. sf::Text MyText; کلاس sf::Text دارای توابع عضوی مانند setFont، setCharacterSize، setStyle و موارد مشابه دیگری می‌باشد که در تولید ظاهر سفارشی بر روی یک متن اعمال می‌شوند. در ادامه مثال فوق نمونه‌ای از نحوه‌ی ترکیب این کلاس می‌باشد. sf::Text MyText; MyText.setFont(font); MyText.setString("Hello, My name is Kambiz :)"); MyText.setCharacterSize(14); MyText.setStyle(sf::Text::Regular); MyText.setColor(sf::Color::White); توجه داشته باشید که برای رسم محتوای مورد نظر باید توسط متُد draw آن را به کلاس RenderWindow ارسال کنید. برای این کار کافی است از تابع draw استفاده شود به صورت زیر: window.draw(MyText); کد نهایی این مثال به صورت زیر است: #include <SFML/Window.hpp> #include <SFML/Graphics.hpp> #include <iostream> int main() { sf::RenderWindow window(sf::VideoMode(640, 480), "Hello world!"); while (window.isOpen()) { sf::Event event; while (window.pollEvent(event)) { if (sf::Keyboard::isKeyPressed(sf::Keyboard::Escape)) window.close(); } sf::Font font; font.loadFromFile("arial.ttf"); // Create a text sf::Text MyText; MyText.setFont(font); MyText.setString("Hello, My name is Kambiz :)"); MyText.setCharacterSize(14); MyText.setStyle(sf::Text::Regular); MyText.setColor(sf::Color::White); window.clear(sf::Color::Black); window.draw(MyText); window.display(); } return 0; } برنامه را کامپایل و اجرا کنید، پیغام شما در سطر اول پنجره‌ی تولید شده نمایش داده خواهد شد.
  21. کامبیز اسدزاده

    همانطور که می‌دانید در بازی‌های رایانه‌ای مدیریت حرکت کاراکتر یا شیء در محیط توسط کلید‌های روی صفحه کلید و یا دسته‌ی بازی مدیریت می‌شوند. در این پست چگونگی واکنش نشان دادن به فشرده شدن کلید‌های بالا (رو به جلو)، پایین (رو به عقب)، چپ و راست را بررسی می‌کنیم. ابتدا توابع مورد نیاز را جهت نمایش در خروجی پیاده سازی می‌کنیم: void MoveToUp(){ std::cout << "Moved to Up!" << std::endl; } void MoveToDown(){ std::cout << "Moved to Down!" << std::endl; } void MoveToLeft(){ std::cout << "Moved to left!" << std::endl; } void MoveToRight(){ std::cout << "Moved to right!" << std::endl; } void Fire(){ std::cout << "Shooted! Boooom!" << std::endl; } سپس تحت کلاس sf::Keyboard آن‌ها را مدیریت می‌کنیم: if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) { // move left... MoveToLeft(); } else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) { // move right... MoveToRight(); } if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up)) { // move up... MoveToUp(); } if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down)) { // move down... MoveToDown(); }
  22. کامبیز اسدزاده

    شاید لازم باشد تعداد کلید‌های موجود را بر روی دسته‌ی مورد نظر دریافت کنیم، کُد مربوطه به صورت زیر خواهد بود: bool hasZ = sf::Joystick::hasAxis(0, sf::Joystick::Z); std::cout << "Button count: " << buttonCount << std::endl; در صورتی که نیاز باشد تعداد محور‌های موجود بر روی دکمه‌های چرخشی (یا همان آنالوگ‌ها) را دریافت کنیم، در این صورت به شکل زیر خواهد بود: bool hasZ = sf::Joystick::hasAxis(0, sf::Joystick::Z); std::cout << "Has a z-axis: " << hasZ << std::endl; bool hasY = sf::Joystick::hasAxis(0, sf::Joystick::Y); std::cout << "Has a y-axis: " << hasY << std::endl; برای دریافت حداکثر دستگاه‌های ورودی پشتیبانی شده توسط SFML دستور زیر مورد استفاده قرار خواهد گرفت: unsigned int deviceCount = sf::Joystick::Count; std::cout << "Maximum number of supported joysticks: " << deviceCount;
  23. کامبیز اسدزاده

    فرض بر اینکه قرار است تابع یا کلاس شلیک توسط دسته‌ی بازی اجرا شود. ابتدا باید مطمئن باشید که دسته‌ی بازی به سیستم متصل و توسط سیستم عامل شناسایی شده است. برای این منظور دستور زیر را خواهیم داشت: if (sf::Joystick::isConnected(0)) { // joystick number 0 is connected } سپس تحت یک دستور ساده و شرطی می‌توان تابع مورد نظر را با فشرده شدن کلید روی دسته اجرا کرد: if (sf::Joystick::isButtonPressed(0, 1)) { Fire(); } در ادامه مثالی زده‌ایم که اطلاعات دسته‌ی متصل شده را گرفته و در نهایت با فشرده شدن کلید روی آن تابع Fire اجرا می‌شود.? #include <SFML/Window.hpp> #include <iostream> void GetDeviceInfo(){ if (sf::Joystick::isConnected(0)) { //get information about the joystick sf::Joystick::Identification id = sf::Joystick::getIdentification(0); std::cout << "\nVendor ID: " << id.vendorId << "\nProduct ID: " << id.productId << std::endl; sf::String controller("Joystick Use: " + id.name); } } void Fire(){ std::cout << "Shooted! Boooom!" << std::endl; } int main() { sf::Window window(sf::VideoMode(640, 480), "Hello world!"); GetDeviceInfo(); while (window.isOpen()) { sf::Event event; while (window.pollEvent(event)) { if (event.type == sf::Event::KeyPressed) window.close(); } if (sf::Joystick::isButtonPressed(0, 1)) { Fire(); } // check the type of the event... switch (event.type) { // window closed case sf::Event::Closed: window.close(); break; // key pressed case sf::Event::KeyPressed: std::cout << "Key pressed!" << std::endl; break; case sf::Event::MouseMoved: break; // we don't process other types of events default: break; } } return 0; }
  24. کامبیز اسدزاده

    معمولاً در بازی سازی و یا تولید اپلیکیشن‌های کاربردی مدیریت رخداد‌ها بسیار مهم بوده و برای استفاده و نشان دادن واکنش بر یک عمل خاص نیازمند توابع و کلاس‌های پیچیده‌ای می‌باشد که در موتور‌های بازی سازی پیاده سازی می‌شوند. کلاس Event در قالب sf::Event تمامی اطلاعات رخداد از طرف سیستم را ارائه می‌دهد. برای مثال فشرده شدن کلیدی بر روی صفحه کلید و یا حرکات دسته‌ی بازی و مواردی از این قبیل را می‌توان توسط این ماژول مدیریت کرد. یک sf::Event به طور کلی نمونه ای از انواع رخداد‌ها را شامل می‌شود (حرکات ماوس، فشرده شدن کلید، بسته شدن پنجره و غیره...) همگی حزئیاتی از این رویداد می‌باشند. برای مثال وقتی شما یک رویداد فشرده شدن کلیدی را دریافت می‌کنید، بعد از آن باید عضوی از event.key و یا دیگر اعضای مرتبط با event.mouseMove و یا event.text را فراخوانی کنید. برای مثال: sf::Event event; while (window.pollEvent(event)) { // Request for closing the window if (event.type == sf::Event::Closed) window.close(); // The escape key was pressed if ((event.type == sf::Event::KeyPressed) && (event.key.code == sf::Keyboard::Escape)) window.close(); // The window was resized if (event.type == sf::Event::Resized) doSomethingWithTheNewSize(event.size.width, event.size.height); // etc ... } نوع شمارنده‌ی Closed زمانی مورد استفاده قرار می‌گیرد که پنجره درخواست بسته شدن را درخواست کرده باشد. شمارنده‌ی KeyPressed در هنگام درخواست کلیدی مورد استفاده قرار می‌گیرد. و یا Keyboard::Escape اشاره به فشرده شدن کلید Esc بر روی صفحه کلید را دارد. نوع Resized زمانی که پنجره درخواست تغییر اندازه را داشته باشد استفاده خواهد شد. نوع TextEntered زمانی که کاراکتری وارد شود عمل می‌کند. یا انواعی مانند JoystickConnected که در زمان اتصال دسته‌ی بازی عمل می‌کند. در ادامه لیستی از انواع شمارشی رویداد‌ها آورده شده است. فرض کنیم در محیط بازی یا برنامه‌ی خود قرار است مختصات x و y حرکت ماوس را دریافت نماییم. با استفاده از شرایط رخداد‌ها و به کارگیری کلاس sf::Mouse می‌توان این کار را به راحتی انجام داد. تابعی به صورت زیر خواهیم داشت: void MousePosition(){ sf::Mouse ms; std::cout << "Mouse Position X : " << ms.getPosition().x << "\t Y : " << ms.getPosition().y << std::endl; } کلاس Mouse با استفاده از توابع عضو با نام‌ getPosition().x و getPosition.y مختصات x و y حرکت ماوس در محیط پنجره ساخته شده را برمی‌گرداند. کُد تکمیلی: #include <SFML/Window.hpp> #include <iostream> void MousePosition(){ sf::Mouse ms; std::cout << "Mouse Position X : " << ms.getPosition().x << "\t Y : " << ms.getPosition().y << std::endl; } int main() { sf::Window window(sf::VideoMode(640, 480), "Hello world!"); while (window.isOpen()) { sf::Event event; while (window.pollEvent(event)) { if (event.type == sf::Event::KeyPressed) window.close(); } // check the type of the event... switch (event.type) { // window closed case sf::Event::Closed: window.close(); break; // key pressed case sf::Event::KeyPressed: std::cout << "Key pressed!" << std::endl; break; case sf::Event::MouseMoved: MousePosition(); break; // we don't process other types of events default: break; } } return 0; } کُد فوق را اجرا کرده و نتیحه آن با حرکت ماوس در داخل پنجره به صورت زیر خواهد بود: Mouse Position X : 746 Y : 567 Mouse Position X : 746 Y : 567 Mouse Position X : 746 Y : 567 Mouse Position X : 746 Y : 567 Mouse Position X : 729 Y : 567 Mouse Position X : 729 Y : 567 Mouse Position X : 729 Y : 567 Mouse Position X : 729 Y : 567 Mouse Position X : 729 Y : 567 Mouse Position X : 729 Y : 567 Mouse Position X : 729 Y : 567 Mouse Position X : 729 Y : 567 Mouse Position X : 729 Y : 567 Mouse Position X : 707 Y : 561 Mouse Position X : 707 Y : 561 Mouse Position X : 707 Y : 561 Mouse Position X : 707 Y : 561 Mouse Position X : 707 Y : 561 Mouse Position X : 707 Y : 561 Mouse Position X : 707 Y : 561 Mouse Position X : 679 Y : 551 Mouse Position X : 679 Y : 551 Mouse Position X : 679 Y : 551 Mouse Position X : 679 Y : 551
  25. با توجه به وجود کتابخانه‌های متعدد در سی‌پلاس‌پلاس در این پُست قصد داریم آموزش‌هایی در رابطه با نحوهٔ راه اندازی انواع کتابخانه‌ها را در سی‌پلاس‌پلاس توضیح دهیم. محیط‌های توسعه جهت نصب Visual Studio و Qt Creator خواهند بود. در صورتی که نیاز است کتابخانه‌ای را به صورت سفارشی کامپایل کنید نکاتی را باید مورد توجه قرار دهید که در ادامه آمده‌اند. قبل از هر چیز نیاز است توضیحاتی در رابطه با انواع کتابخانه‌ها داده شود. کتابخانه‌ها برای اینکه در پروژه مورد استفاده قرار بگیرند نیاز است آن‌ها از سمت منبع خود کامپایل و ساخته شوند. البته در این فرآیند باید توجه داشته باشید که نوع معماری در پیکربندی یک کتابخانه بسیار مهم است. برای مثال اگر قرار است کتابخانه‌ای را بر روی یک پروژه‌ای که تحت معماری x64 پیکربندی شده است و در وضعیت release منتشر شود، در این صورت حتماً باید کتابخانه مورد نظر تحت همین پیکربندی کامپایل شود. کتابخانه‌ها ممکن است خودشان وابستهٔ کتابخانه‌های دیگری باشند. برای مثال بخشی از ماژول کتابخانه Boost و Poco وابستهٔ کتابخانهٔ OpenSSL می‌باشد. و یا بخشی از کتابخانهٔ MySQL وابستهٔ کتابخانهٔ Boost می‌باشد. بنابراین قبل از پیکربندی پروژه تحت هر کتابخانه‌ای مطمئن شوید که پیش نیازات آن را در اختیار داشته باشید. توجه داشته باشید که حتماً راهنمای کتابخانهٔ مورد نظر خود را جهت نحوهٔ پیکربندی مطالعه نمایید، زیرا هیچ روش عامیانه‌ای وجود ندارد که بر روی تمامی کتابخانه‌ها صادق باشد. با توجه به نکات بالا آموزش لازم جهت پیکربندی و راه اندازی کتابخانه‌ها را تحت دو گزینهٔ Boost و MFSL ادامه می‌دهیم: نسخهٔ مورد نظر کتابخانهٔ مورد نظر را از این بخش دریافت کنید. فایل‌ دریافت شده را استخراج و در یک مسیر مشخصی مانند C://کتابخانهٔ شماکپی کنید. محیط کنسول در سیستم عامل را باز کنید، پیشنهاد می‌شود از Visual Studio Cross Tools Command Prompt استفاده کنید. به مسیر کتابخانه تحت دستور cd رفته و وارد آن شوید. در این مرحله نیاز است تا قبل از ساخت کتابخانه آن را پیکربندی کنید، بنابراین دستور زیر را اجرا خواهیم کرد: ./configure دقت کنید که این مرحله معمولاً در کتابخانه‌ها متفاوت می‌باشد، برای مثال در کتابخانهٔ Boost فایلی به نام bootstrap.bat متخص ویندوز و فایل bootstrap.sh برای محیط‌های یونیکس موجود است که وظیفهٔ پیکربندی و تولید فایل ساخت را بر عهده دارد. البته در نظر داشته باشید که این چنین پیکربندی در کتابخانه‌های خاص ممکن است و در بیشتر آن‌ها باید با دستورات configure و فلگ‌های موجود در هر یک از آن‌ها اقدام به پیکربندی کنید. بنابراین با توجه این مورد می‌توانید آموزش لازم را در این بخش پیگیری نمایید. بعد از پیکربندی دستور make، nmake، cmake و یا qmake متناسب با نوع ابزار سازنده باید اجرا شود تا کتابخانه بر اساس پیکربندی تنظیم شده شروع به کامپایل و ساخت کند. این مرحله معمولاً بر اساس قدرت پردازشی سیستم شما زمان متغیری خواهد داشت. بعد از به اتمام رسیدن زمان کامپایل کتابخانهٔ مورد نظر فایل‌های lib را تحت پسوند‌های .dll در ویندوز و .lib و .so در لینوکس و یونیکس تولید خواهد کرد که بهتر است مسیر include برای هدر‌های کتابخانه و lib برای فایل‌های کامپایل شده مشخص شود. طبق شرایط ذکر شده برای مثال ما از کتابخانهٔ SDL در این بخش استفاده خواهیم کرد. نسخهٔ از پیش کامپایل شده مربوط به آن را از این بخش دریافت و استخراج نمایید. قست اول (نصب و راه اندازی تحت محیط Visual Studio) وارد محیط ویژوال استودیو شده و بعد از ایجاد پروژه بر روی پروژه راست کلیک و گزینهٔ Properties را انتخاب کنید، به زبانه C/C++ رفته و زبانه General گزینهٔ Additional Include Directories را انتخاب کنید. در ادامه مسیر include را از کتابخانهٔ SDL به پروژه معرفی کنید. مرحله کنونی را تایید کنید، و به زبانهٔ Linker و سپس General بروید، در این بخش گزینهٔ Additional Linker Library را انتخاب و مسیر Lib را از کتابخانهٔ SDL معرفی کنید. در این مرحله فایل‌های کتابخانه معرفی شده‌اند. به زبانهٔ General و Input برگشته و در بخش Additional Dependences فایل‌های SDL2.lib و SDL2_image.lib و SDL2main.lib و SDL2_ttf.lib را معرفی کنید. در نهایت فایل‌های dll موجود در پوشهٔ lib کتابخانه را در کنار فایل اجرایی کپی کنید. قست دوم (نصب و راه اندازی تحت محیط Qt Creator) پروژه خود را ایجاد و بر روی نام پروژه راست کلیک کنید. گزینهٔ Add Library و سپس External Library را بزنید. طبق شرایط قبل گزینه‌های lib را همراه با include به پروژهٔ خود اضافه نمایید. کد مربوط به فایل .pro به صورت زیر خواهد بود win32: LIBS += -L$$PWD/../../../../SDL2-2.0.8/lib/x86/ -lSDL2 -lSDL2main -lSDL2_ttf INCLUDEPATH += $$PWD/../../../../SDL2-2.0.8/lib/x86 DEPENDPATH += $$PWD/../../../../SDL2-2.0.8/lib/x86 طبق روش کامپایل برنامه را کامپایل کنید و قبل از اجرا فایل‌های dll یا lib را نسبت به پلتفرم خود در کنار فایل اجرایی پروژه قرار دهید. https://iostream.ir/forums/topic/33-روش-افزودن-کتابخانه‌های-دیگر-به-محیط-qt-creator/ روش فوق در بیشتر کتابخانه‌ها قابل انجام است.
×
×
  • جدید...