-
تعداد ارسال ها
414 -
تاریخ عضویت
-
روز های برد
227
نوع محتوا
نمایه ها
وبلاگها
تالارهای گفتگو
گالری
فروشگاه
تقویم
مقالات
صفحات استاتیک
کتابخانه
بخش دریافت
تمامی مطالب نوشته شده توسط کامبیز اسدزاده
-
بله البته، به نظرم این لینک مرجع خودِ کیوت کافی باشه، تمامی دستورات و مسائل فنی داخلش هست. البته پیشنهاد من این هست صرفاً از روی کنجکاوی و برای آشنایی بیشتر با کیوت ۶ امتحانش کنید و نه برای ارتقاء محصولاتتون، برای این کار پیشنهادم اینه که منتظر حداقل کیوت ۶.۲ باشید.
-
سلام، خیر متأسفانه، نسخهٔ ۵.۱۵.۰ به بعد از کیوت تماماً بر پایهٔ نصابِ آنلاین قابل دریافت هستند. مگر اینکه منابعکدش رو دریافت و خودتون کامپایل کنید که قطعاً زمانبر و سخت خواهد بود.
-
انتقاد شدید خالق لینوکس از اینتل به خاطر پشتیبانی نکردن از حافظه ECC
کامبیز اسدزاده نوشته وبلاگ را ارسال کرد در فناوری
خالق لینوکس از اینتل به خاطر پشتیبانی نکردن از حافظههای ECC انتقاد کرده است. او به پشتیبانی غیررسمی از ECC در پردازندههای AMD بهعنوان اتفاقی مثبت نگاه میکند. این ماجرا برای توسعهدهدنگان قطعاً بسیار مهم و کاربردی است، بنابراین به عنوان نمایندهای از جامعهٔ برنامهنویسان و یک فرد با تجربه در بحث برنامهنویسی و مشکلات آن در مدیریت حافظه نظرات توروالدز برای جامعهٔ ما اهمیت دارد. لینوس توروالدز، خالق لینوکس، بهتازگی پست جدیدی در انجمن آنلاین Real World Tech با محوریت حافظهٔ کد تصحیح خطا (ECC) منتشر کرده است تا از اینتل انتقاد و از ایامدی (AMD) تمجید کند. بر اساس گزارش تامز هاردور، توروالدز میگوید اینتل باید حافظههای ECC را به قطعاتی میناستریم تبدیل کند و پشتیبانی از این حافظه در پردازندههای سری رایزن ایامدی اتفاق بسیار خوبی است. توروالدز با بیان اینکه «ECC کاملا پراهمیت است» اعلام کرد اینتل تأثیر بهسزایی روی رونق نداشتن بازار حافظهی ECC گذاشته است. خالق لینوکس میگوید: «بروید و بهدنبال DIMM-های ECC بگردید؛ پیدا کردن آنها واقعا سخت است. بله، احتمالا به لطف ایامدی، وضعیت DIMM-های ECC اخیرا کمی بهتر شده و این دقیقا همان نکتهای است که میخواهم به آن اشاره کنم.» توروالدز بارها به ضررهایی که اینتل به صنعت ECC و حتی کاربران وارد کرده است اشاره میکند و صحبتهایش را با کلماتی توهینآمیز خطاب به اینتل ادامه میدهد. توروالدز میگوید تیم آبی با پشتیبانی نکردن از ECC در مادربردها و پردازندههایی که برای کاربران عادی عرضه میکند، باعث شده است استفاده از حافظههای ECC زیاد نباشد. خالق لینوکس به مشکلاتی با محوریت آسیبپذیری روهمر (Rowhammer) اشاره میکند و میگوید این دسته از مشکلات امنیتی جدی، از طریق حافظههای ECC بهراحتی رفع میشوند. سلولهای حافظهی DRAM میتوانند انرژی خود را به دیگر سلولهای حافظه منتقل کنند. بهطور معمول این اتفاق صرفا به خاطر نقص در حافظهٔ اصلی سیستم رخ میدهد و نهایتاً به بروز خطا در حافظه منتهی میشود؛ اما حملات مبتنی بر آسیبپذیری روهمر از این نقص بهعنوان مکانیسمی برای دسترسی به سیستم بهره میگیرند. توروالدز میگوید هنگام توسعه دادن کد برای کرنل سیستم عامل، دستوپنجه نرم کردن با حافظهٔ استاندارد بسیار سخت است. او بهطور دقیقتر به این موضوع اشاره میکند که در اکثر اوقات نمیتوان بهطور دقیق فهمید خطای غیر قابل توضیح کرنل در کجا رخ داده است. در واقع این خطاها در اغلب اوقات ممکن است سختافزاری باشند، نه نرمافزاری؛ خطاهایی که بهراحتی توسط ECC قابل رفع هستند. توروالدز از ایامدی به خاطر پشتیبانی غیررسمی از ECC تمجید میکند. او خوشحال است که ایامدی تصمیم گرفته این پشتیبانی را به پردازندههای سری رایزن که در دسترس مشتریان عادی قرار میگیرند گسترش دهد. بدین ترتیب ایامدی کاربران را قادر میسازد بدون پرداخت هزینهی گزاف تهیهٔ قطعات سختافزاری در سطح سرور، به ECC دسترسی داشته باشند. اینکه پشتیبانی غیررسمی از ECC به گسترش استفاده از آن کمک میکند، موضوعی است که نیاز به بحث دارد؛ زیرا در اغلب اوقات ECC بهدرستی کار نمیکند. اما خالق لینوکس میگوید حتی پشتیبانی غیررسمی، قدمی روبهجلو در جهت درست محسوب میشود. -
سلام و خوش آمدید، قبل از هر چیز چون تازه کار هستید پیشنهاد میکنم در ویندوز به سراغ Mingw نرید، مگر مجبور باشید. با همون MSVC برنامههای خودتون رو کامپایل کنید و یا Clang. در کل، خطایی که گرفتین به خاطر عدم شناسایی تابع اصلی یعنی main() هستش. پیشنهاد میکنم تابع خودتون رو اصلاح کنید مطمئن بشید که main در برنامهٔ شما به درستی پیاده شده، سپس کامپایل و نتیجه رو ببینید. مثال صحیحی از تابع main در سی++ #include <iostream> int main() { std::cout << "Hello World!"; return 0; } همچنین با توجه به اینکه اشاره شده تازه شروع به یادگیری کردین، پیشنهاد میکنم مقالات زیر رو با دقت مطالعه کنید، در برخی از آنها به لینکها و مراجع آموزندهای اشاره کردم. موفق باشید.
-
گیتهاب دوباره در دسترس توسعهدهندگان ایرانی قرار گرفت!
کامبیز اسدزاده نوشته وبلاگ را ارسال کرد در ابزارها
یک حرکت خوشحال کننده در آغاز سال ۲۰۲۱ با عنوان آزاد شدن خدمات گیتهاب برای کشور عزیزمان صورت گرفته است؛ ساعاتی پیش «نت فرایدمن»، مدیرعامل گیتهاب اعلام کرد که این شرکت مجوزی از دولت آمریکا دریافت کرده تا خدماتش را به توسعهدهندگان ایرانی ارائه دهد. این سرویسها میتواند در اختیار افراد یا سازمانها و به شکل رایگان یا اشتراکی قرار گیرد. به قول مدیر عامل گیتهاب، همهٔ توسعهدهندهها باید در استفاده از گیتهاب آزاد باشند و مهم نیست که در کجا زندگی میکنند. البته، با توجه به سوابق تحریمی پیشنهاد میشود در زمان استفاده از این خدمات، از مخازن کدهای خودتان نسخهٔ پشتیبان تهیه کنید تا در صورت اعمال محدودیت با مشکل خاصی مانند از دست دادن مخازن و یا عدم دسترسی به مخازن مواجه نشوید. منبع خبر اصلی : https://github.blog/2021-01-05-advancing-developer-freedom-github-is-fully-available-in-iran/-
- ایران
- توسعهدهندگان
-
(و 2 مورد دیگر)
برچسب زده شده با :
-
کامبیز اسدزاده پاسخی برای کامبیز اسدزاده در یک موضوع ارسال کرد در <span class="ipsBadge ipsBadge_pill" style="background-color: #38ff7a; color: #000000;" >کتابخانه کیوت (Qt)</span>
خب پوشهٔ نهایی بعد از make رو برای install کجا زدی؟ به چه روشی داری به پروژه اضافش میکنی؟ تحتِ چه ابزاری؟ QMake یا CMake؟ البته پیشنهاد من اینه که روی هر پلتفرمی که هستی، بوست رو تحت مخازن اصلی سیستمعامل نصب کن تا دیگه نیازی نباشه کامپایلش کنی. -
سلام، سوأل شما بسیار کلی هستش، پاسخش میتونه بسیار متنوع باشه. کیوت در نسخهٔ کنونی و بعد از نسخههای ۵.۱۰ میتونه بر اساس سفارشی سازی و خودکار کاملاً بر پایهٔ GPU مواردِ گرافیکی را پردازش کنه مثل OpenGL و Direct3D و حتی در نسخههای جدیدتر از Vulkan و Metal که بر اساس نوع پلتفرم پشتیبانی میکند. به طور کلی در حالت پیشفرض اگر سیستم مقصد دارای پردازندهٔ گرافیکی با پشتیبانی از Apiهایی که نام بردیم باشد، تمامی بار پردازشیِ گرافیکی جهت رندر بر روی کارت گرافیکی (GPU) خواهد بود. در غیر این صورت اگر فاقد پردازندهٔ گرافیکی باشد، به صورت خودکار بر روی CPU اعمال میشود. اما نوع دیگری از سوأل شما مرتبط پردازش موازی هستش که پاسخش میتونه پیشنهادِ استفاد از مواردی چون سکوهای Cuda و یا OpenCL است که به شما اجازه میده پردازشهای لازم رو بر روی پردازندهٔ گرافیکی اعمال کنید.
-
سیستم مدیریت محتوا
کامبیز اسدزاده پاسخی برای کامبیز اسدزاده در یک موضوع ارسال کرد در <span class="ipsBadge ipsBadge_pill" style="background-color: #e62f3d; color: #ffffff;" >برنامه نویسی در C و ++C</span>
این یک نسخهٔ مفهومی هست، نسخهای که در زمان ارسال پست بر روی وبسایت ساخته شده با استفاده از Qt و Cutelyst بود. نسخهٔ بعدی از اون باز به عنوان مفهومی بر اساس Drogon Framework ساخته شده، و نسخهای هم بر اساس Boost در دست توسعه هست.- 4 پاسخ
-
- content managament system
- cms
-
(و 3 مورد دیگر)
برچسب زده شده با :
-
سلام، برای این کار ابتدا سمت سی++ توابعی که باید مقادیر لحظهای از مصرف منابع رو برای شما برگردونن رو پیادهسازی کنید، سپس برای ارسال و هماهنگی در سمت QML از WorkerScript استفاده کنید.
-
سلام، شما میتونید با جاوا و یا کاتلین شروع کنید. در این باره جستجو کنید و آموزشهای مرتبط با این حوزه را دنبال کنید.
-
کامبیز اسدزاده پاسخی برای کامبیز اسدزاده در یک موضوع ارسال کرد در <span class="ipsBadge ipsBadge_pill" style="background-color: #38ff7a; color: #000000;" >کتابخانه کیوت (Qt)</span>
از کامپایلر MSVC2017 و به بالا مثل MSVC2019 استفاده کن، این نسخهای که به کار گرفتی حتی بتونی کامپایل هم کنی قطعاً مشکلاتی با این نسخه از بوست خواهد داشت. -
درود، کد شما کمی نا منظم بود، به هر حال پیشنهاد میکنم نیاز خود مشابه این روش پیادهسازی کنید. #ifndef MYCLASS_HPP #define MYCLASS_HPP #include <QObject> #include <QByteArray> class MyClass : public QObject { Q_OBJECT Q_PROPERTY(QByteArray arr READ arr WRITE setArr NOTIFY arrChanged) Q_PROPERTY(quint8 length READ length WRITE setLength NOTIFY lengthChanged) public: explicit MyClass(QObject *parent = nullptr); ~MyClass(); public: const QByteArray arr() const; quint8 length() const; signals: void arrChanged(); void lengthChanged(); public slots: void setArr(const QByteArray& v); void setLength(quint8 l); private: QByteArray m_arr; quint8 m_length; }; #endif // MYCLASS_HPP #include "myclass.hpp" #include <QDebug> MyClass::MyClass(QObject *parent) : QObject(parent) { QByteArray myArr; myArr.push_back("A"); myArr.push_back("B"); myArr.push_back("C"); myArr.push_back("D"); myArr.push_back("E"); setArr(myArr); } MyClass::~MyClass() { } const QByteArray MyClass::arr() const { return m_arr; } quint8 MyClass::length() const { return m_length; } void MyClass::setArr(const QByteArray& v) { if(m_arr.isNull()) { m_arr = v; setLength(m_arr.length()); } emit arrChanged(); } void MyClass::setLength(quint8 l) { m_length = l; } import QtQuick 2.15 import QtQuick.Window 2.15 import QtQuick.Controls 2.15 import com.org.myclass 1.0 Window { width: 640 height: 480 visible: true title: qsTr("Hello World") MyClass{ id: myClass } Component.onCompleted : { print("data : " , myClass.arr) print("length : " , myClass.length) } }
-
کامبیز اسدزاده پاسخی برای کامبیز اسدزاده در یک موضوع ارسال کرد در <span class="ipsBadge ipsBadge_pill" style="background-color: #38ff7a; color: #000000;" >کتابخانه کیوت (Qt)</span>
سلام، اگه بیلد کردی یعنی کامپلیلش کردی و کافیه به پروژه اضافش کنی. بهتره اشارهای به نسخهٔ بوست، کیوت و پلتفرمی که استفاده میکنی داشته باشی تا بهتر راهنمایی کنیم. معمولاً روش کامپایل در همهٔ کتابخانهها یکسان هستند. البته از ابزارهایی مثل conan، brew، vcpkg هم میتونید برای نصب این نوع کتابخانهها استفاده کنید. -
در پاسخ قبلی به این لینک اشاره کردم : https://doc.qt.io/qt-5/qtqml-cppintegration-topic.html نمونه کدهای مشخصی داره، کافیه کلاس رو از نوع QObject مشتق کنید و سپس به یکی از روشهای موجود، تابع خودتون رو پیاده سازی کرده و در نهایت برای QML رجیسترش کنید. برای مثال میتونید از روشهای qmlRegisterType و rootContext استفاده کنید که روشهای متفاوتی هستند. همچنین این مستندات رو میتونید بررسی کنید : https://doc.qt.io/qt-5/qtqml-cppintegration-exposecppattributes.html
-
سلام، این بستگی به این داره که چطور دادهای رو بخواهید بخونید و در چه قالبی تحتِ چه کنترلی نمایشش بدین. برای کار با باینری در مورد کلاسهای QFile و QDataStream تحقیق کنید. در مورد نحوهٔ نمایش دادن هم باید کلاسهای سمت ++C را در قالب مشتق شدهٔ QObject و در صورت نیاز به یک سری ویژگیهای انتزاعی تحتِ یک سری کلاسهای دیگر پیادهسازی کنید. نمونه مستندات. بهتر بود مثالی میزدین و کدی که نوشتین رو ارائه میکردین تا بررسی و راهکار مناسبی ارائه بشه.
-
سلام، در کیوت سعی کنید از مکانیزم سیگنال و اسلات (Signal/Slot) برای این کار پیروی کنید، تابع یا توابع شما میتوانند از این مکانیزم برای اجرا بر اساس درخواست به کار گرفته شوند. برای مثال صدا زده شدن یک شیء یا اجرا شدن آن در مقابل یک درخواست یا سیگنالِ مشخص تحتِ این مکانیزم بسیار کاربری است. هرچند نوع عملکرد تابع شما نیز در عملکرد آن موثر خواهد بود. public slots: void showProccessing(); void hideProccessing(); private signals: void statusChanged();
- 1 پاسخ
-
- کیوت
- busy indicator
-
(و 2 مورد دیگر)
برچسب زده شده با :
-
کامبیز اسدزاده یک موضوع را ارسال کرد در <span class="ipsBadge ipsBadge_pill" style="background-color: #7a75ff; color: #ffffff;" >پادکستهای آموزشی</span>
پادکستِ مربوط به شفافسازی تقریبی از مسیرِ توسعهدهندگی تحت سی++ و ساخت محصولِ هدفمند زمان مورد نیاز : ۲۰ دقیقه و ۱۱ ثانیه Podcast-03.mp3-
- تولید محصول
- cpp
-
(و 7 مورد دیگر)
برچسب زده شده با :
-
کامبیز اسدزاده یک موضوع را ارسال کرد در <span class="ipsBadge ipsBadge_pill" style="background-color: #7a75ff; color: #ffffff;" >پادکستهای آموزشی</span>
پادکستِ مربوط به اهمیت شکست و تجربه زمان مورد نیاز : ۳ دقیقه و ۸ ثانیه. Podcast-02.mp3 -
کامبیز اسدزاده یک موضوع را ارسال کرد در <span class="ipsBadge ipsBadge_pill" style="background-color: #7a75ff; color: #ffffff;" >پادکستهای آموزشی</span>
پادکستِ مربوط به نحوهٔ قیمتگذاری بر روی پروژه زمان مورد نیاز : ۱۰ دقیقه و ۴۹ ثانیه. Pricing-Podcast.mp3-
- ارزشگذاری
- نحوهٔ قیمتگذاری
-
(و 5 مورد دیگر)
برچسب زده شده با :
-
کامبیز اسدزاده یک موضوع را ارسال کرد در <span class="ipsBadge ipsBadge_pill" style="background-color: #7a75ff; color: #ffffff;" >پادکستهای آموزشی</span>
فایل صوتیِ مربوط به نحوهٔ آموزش صحیح و روش یادگیری اصولی. زمان اختصاص یافته شده : ۲۶ دقیقه. Teaching-Learning.mp3 -
درود، در فایل pro. کد زیر رو اضافه کنید. CONFIG += console در این حالت محیط ترمینال یا کنسول به جای خروجی پیشفرض کیوتکریتور اجرا میشه که میتونید ورودی رو بهش ارسال کنید. ممکنه که بعضی اوقات نیاز باشه تنظیمات را بررسی کنید، در این صورت به بخش تنظیمات و گزینهٔ Build & Run بروید و از زبانهٔ General گزینهٔ Default in tun terminal را فعال کنید.
- 1 پاسخ
-
- qt creator
- qt
-
(و 2 مورد دیگر)
برچسب زده شده با :
-
همانطور که میدانید امضاء و انتشار اپلیکیشنهای اندرویدی در قالب فایل apk به شما اجازه میدهد تا مستقل از فروشگاه گوگل، نرمافزار مورد نظر خودتان را در اختیار مشتریان خود قرار دهید؛ از طرفی ارسال آن برای فروشگاههای داخلی مانند کافهبازار نیز مراحلی را دربر دارد که یکی از آنها بررسی مشکل مربوط به Google Play Protect است. با توجه به تجربیات من، خیلی از مشتریها و کاربران علم کافی در توجه به پیام مربوط به آن را ندارند و نمیدانند با رد کردن پیغام میتوانند نرمافزار را با پذیرش ریسک نصب کنند. اما این روش میتواند فرصتی برای کسانی باشد که به فکر سوء استفاده از شرایط هستند. طبق گزارشاتی که دریافت کردهایم، مشاهدهٔ پیام مربوط به عدم قابل اعتماد بودن نرمافزار شما و خطای نصبی بیشتر از قبل به چشم میخورد! برای اینکه ثابت کنید اپلیکیشن شما یک محصول قابل اعتماد است، تنها باید آن را به روش قانونیِ خودِ گوگل حل کنید که چندان سخت نیست توجه داشته باشید که، این پیام در شرایط متعددی میتواند رخ دهد. برای مثال، شما از خدماتی که مورد نیاز نیستند به اجبار در نرمافزار استفاده میکنید. اما حتی با اعمال تنظیمات مربوطه به نظر میرسد زمانی که شما یک برنامهٔ جدیدی را ایجاد و برای نشر ارسال میکنید باید ابتدا نسخهٔ مربوطه، به بانک اطلاعاتی موجود در Google Play Protection ارسال شود و سپس برای نصب آماده شود. بنابراین، خطای مربوط به آن را به روشی که در ادامه توضیح میدهیم میتوانید حل کنید. قبل از هر چیز دقت کنید که نرمافزار شما امضاء شده باشد، در واقع از نوع نسخهٔ signed ریلیز شود. برای این کار باید حتماً یک گواهی مشخصی بسازید که همراه رمز عبور و اطلاعات توسعهدهنده به صورت اختصاصی برای هر محصول قابل ساخت است. در ادامه مهمترین موردی که باید در نظر گرفته شود این است که فایل مربوطه را باید قبل از نشر در کافهبازار یا تحویل آن به مشتری خود، به مرکز Play Protect Appeals ارسال کنید تا برای بررسی جهتِ تجدید نظر شدن از لحاظ گیر دادنهای بیخودی به برنامهٔ شما مورد بررسی قرار گیرد. معمولاً این کار خارج از ایران سادهتر است، چرا که بحث تحریم و شناسایی شناسههای ایرانی برای کارشناسان راحتتر بوده و به آن حساسیت نشان میدهند که ممکن است پیام زیر را دریافت کنید: بنابراین، توصیه میکنیم از روشهای مطمئنتری برای ارسال فایل استفاده کنید. توصیهٔ ما استفاده از خدماتِ دراپباکس خواهد بود که با ارسال فایل به آن و ساخت یک لینک اشتراکی میتوانید مطمئن شوید که دسترسی به فایل شما در سراسر جهان میسر خواهد شد. اما توجه داشته باشید که لینک آن را برای سهولت در بررسی و ارسال در فیلد فرمِ آن، از طریق سایت http://bit.ly کوتاه سازید. دقت کنید که لینک دریافتی از دراپباکس باید شامل قالبی به صورت زیر است: https://www.dropbox.com/s/example/app.apk?dl=0 آدرس زیر را بعد از پارامتر dl=0 به dl=1 تغییر دهید و سپس لینک مربوطه را کوتاه کرده و آن را در فرم ثبت اطلاعات نرمافزار برای گوگل در این لینک ارسال کنید. در فرم مربوطه فیلدهای مورد نظر باید دقیقاً شامل واقعیت باشند، به عنوان مثال نام و نامخانوادگی توسعهدهنده، آدرس پستالکترونیکی، نام بستهٔ اپلیکیشن و لینک کوتاه شدهٔ قابل دریافت؛ در نهایت میتوانید توضیحاتی برای آن در نظر بگیرید. اگر همه چیز به خوبی پیش رفته باشد پیامی مانند زیر را به همان آدرس پستالکترونیکی خود دریافت خواهید کرد. در نظر داشته باشید که این فرایند ممکن است زمان متغیری را در صف بررسی باشد که در حالت عادی و خاص ۱ الی ۳۰ روز زمان خواهد برد که من به شخصه بین حدقل ۲۴ تا ۴۸ ساعت نتیجهٔ مثبت گرفتم. صرفاً دقت کنید که در صورت بررسی و تأیید شدن برنامهٔ شما، هیچ پیام خاصی ارسال نخواهد شد، بنابراین تنها با بررسی و نصب برنامه میتوانید متوجه آن شوید که برنامهٔ ارسال شدهٔ شما در لیست بانک اطلاعاتی امنیتی اپلیکیشنهای گوگل قرار گرفته است یا خیر. امیدوارم که این تجربهٔ پیشنهادی برای شما نیز مفید واقع شود
-
- کافهبازار
- play protect
-
(و 6 مورد دیگر)
برچسب زده شده با :
-
همانطور که میدانید پلیاستیشن ۵ به عنوان یک نسل جدیدی از کنسول بازی سونی معرفی شده است که رابطکاربری آن به شدت تغییر و بهبود یافته است. هر چیزی که در این محیط از پلیاستیشن ۵ دیده میشود خط به خط و ریز به ریز آن، به لُطفِ کامپایلر Clang که اتفاقاً امروز هم نسخهٔ ۱۱ اون منتشر شد، و استاندارد ۱۷ از سی++ و به خصوص بحث نرمافزاری آن بر پایهٔ سیستمعامل FreeBSD ارائه شده است که متخصصها در این باره خوب میدانند فریبیاِسدی به عنوان سریعترین و پایدارترین نوع سیستمعاملهای یونیکسی مطرح هستند. اگه شما کاربر عادی هستید، مثالی بزنیم تا بیشتر در جریان باشید: - سیستمعامل macOS و iOS بر پایهٔ سیستمعامل یونیکس (داروین) ساخته شدهاند. - سیستمعامل اندروید بر پایهٔ لینوکس ساخته شدهاند. از طرفی سیستمعامل کنسول مایکروسافت اِکسباکس بر پایهٔ هستهٔ ویندوز ۱۰ طراحی شده و در مقابل سیستمعامل پلیاستیشن ۴ و همچنین ۵ از هستهٔ یونیکس فریبیاِسدی استفاده کرده که حرفهای زیادی برای گفتن دارند. در بحث طراحی نسبت به نسخههای پیشین یک بهبود اساسی داشته چون تغییرات رابطکاربری در زمان PS4 نسبت به PS3 چنان چشمگیر نبوده است! اما الآن دیگر سونی واقعاً بر روی آن کار کرده است و دیگر خبری از آن ظاهر تکراری و حوصله بر وجود ندارد! پلیاستیشن ۵ رابط کاربری کاملاً بازسازی شدهای نسبت به پلیاستیشن ۴ دارد که با هدف دسترسی آسان به اطلاعات طراحی شده. یکی از ویژگیهای این رابط کاربری گرفتن آپدیتهای زنده است که کاربران مجبور به جستجو و صبر کردن برای مشاهده فعالیتهای دوستان خود و مشاهده فعالیتهای در دسترس در بازیها نباشند. مارک سرنی دربارهٔ این موضوع گفتهاست «ما نمیخواهیم یک کاربر بازی را باز کند، ببیند که چهخبراست، و دوباره بازی را باز کند که ببیند چه خبر است!»! این ویژگی در همان داشبورد رابط کاربری اصلی پلیاستیشن فراهم شده است و نیازی به ورود به داخل بازی جهت بررسی خبرهای اخیر از آن ندارد! همچنین دیگر مواردی مانند پشتیبانی از ویژگی عقبگرد (یعنی پشتیبانی از اجرای بازیهای پیاس ۴) در این سیستم ارائه شده است. رابط کاربری پلی استیشن 5 همواره با وضوح تصویر 4K واقعی و پشتیبانی کامل از HDR به نمایش درمیآید. سونی تلاش زیادی کرده است که بازیکنان در کمترین زمان ممکن بتوانند برنامه یا بازی مورد نظر خود را در رابط کاربری بیابند و اجرا کنند. همهی برنامهها نیز حالا بخشی از UI هستند و دیگر مثلا موقع وارد شدن به پلی استیشن استور احساس نمیکنید که تازه یک برنامهی جدید باید از ابتدا اجرا شود. از طرفی SSD بسیار سریع و پردازندهٔ مرکزی دستگاه کاری میکنند که رابط کاربری همواره با سرعت قابل توجه و به شکل روان مقابل بازیکن قرار بگیرد.
-
- پلیاستیشن
- ps4
-
(و 8 مورد دیگر)
برچسب زده شده با :
-
کامبیز اسدزاده یک موضوع را ارسال کرد در <span class="ipsBadge ipsBadge_pill" style="background-color: #e62f3d; color: #ffffff;" >برنامه نویسی در C و ++C</span>
همانطور که میدانید در زبانهای برنامهنویسی از نوع کامپایلری، گزینهها و تنظیماتی وجود دارند که به شما امکان این را میدهد تا رفتار کامپایلر (همگردان) را تا حدی سفارشی سازی کنید. این امکان به کمک تنظیمات پرچمها (فلگها) و برخی از گزینهها قابل انجام است و انتخاب پرچمهای مناسب برای کامپایلر میتواند مورد توجه قرار بگیرد. با توجه به دو مقالهای که با عناوین زیر ارائه شده است، در این مقاله به جزئیات بیشتری نسبت به تنظیمات کامپایلر (همگردان یا مترجم) میپردازیم که البته توصیه میکنم در صورت عدم آشنایی با تعاریف مربوطه و به خصوص روند ترجمهٔ کدها و ساختار برنامههای نوشته شده توسط سیپلاسپلاس، بهتر است آنها را بررسی کنید. در مثال زیر، نسخهٔ کامپایلر همراه با اطلاعات مربوط به آن، توسط گزینهٔ option در خط فرمان قابل دریافت است: gcc --version خروجی مربوطه میتواند نسبت به نسخهٔ کامپایلر به صورت زیر باشد: gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0 Copyright (C) 2019 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. در حالت پیشفرض تنظیمات کامپایلر به صورت خودکار انجام میشود. اما در صورتی که نیاز باشد برخی از درخواستها توسط کامپایلر مورد توجه قرار بگیرد و یا برای دیگران آن را گوشزد کند، از این ویژگیها استفاده میشود. در چنین شرایطی میتواند به کامپایلر بگوید که کاربر میخواهد کد را برای اشکالزدائی بهینه کند یا اینکه کاربر نمیخواهد هیچ بهینهسازی خاصی برای آن فعال شود. این عمل معمولاً در سراسر خط فرمان قابل استفاده است و به عنوان مکانیزمی برای دستورالعمل برنامه برای انجام عملیاتی یا رفتاری به روش خاص عمل میکند. به طورکلی، گزینهٔ کامپایلر به عنوان یک عبارت بسیار حساس، برای خط فرمان است که برای تغییر عملکرد پیشفرض کامپایلر استفاده میشود. در اصل این گزینهها برای کامپایل برنامهٔ شما اجبار نیستند، اما برای کمک به کنترل نبههای مختلف برنامه بسیار مفید خواهند بود. از جمله: تولید کد بهینهسازی فایل خروجی (نوع، نام، مکان) خواص پیوند-دهنده اندازه فایل اجرائی سرعت اجرایی اینکه نیاز باشد کدی را بهینهسازی کنید، و یا مسائلی را برای دیگران گوشزد کنید کاملاً سلیقهای است و شما در روند توسعهٔ حرفهای خود میتوانید از این تکنیک استفاده کنید. سادهترین کاربرد این تکنیک میتواند وادار کردن استفادهٔ کامپایلر از یک استاندارد مشخص شده باشد که در صورت پشتیبانی از آن چه به صورت عقبگرد و چه به صورت سوئیچ به استانداردهای اخیر کاربرد خواهد داشت. برای مثال، پرچم std نسخه یا استاندارد ایزو از سیپلاسپلاس را کامپایلرهای رایجی مانند Clang و GCC مشخص میکند که به صورت زیر تعریف میشوند: -std=c++11 (ISO C++11) -std=c++14 (ISO C++14) -std=c++1z (ISO C++17) -std=c++20 (C++20 experimental) -std=gnu++ (ISO C++ with GNU extensions) معادل پرچم استاندارد در کامپایلر MSVC به صورت زیر است: /std:c++14 /std:c++17 /std:c++latest /std:c11 /std:c17 نکته، گزینهٔ /std از نسخهٔ ۲۰۱۷ به بعد از کامپایلر مایکروسافت در دسترس است. به صورت پیشفرض در این نسخه از کامپایلر این گزینه بر روی استاندارد ۱۴ تنظیم شده است. در صورت نیاز به ارتقاء آن به نسخهٔ ۱۷ طبق نمونه عمل کنید. همچنین طبق قوائد مایکروسافت استاندارد نهایی شده از آخرین ویژگیها در کامپایلر تحت /std:c++latest قابل دسترس میباشد که در این لحظه شامل استاندارد ۲۰ میشود. گزینهٔ Verbosity به عنوان اِسم یا Verbose از نوعِ صِفَت به معنای درازنویسی (بهتر است به معنای ارائهکنندهٔ اطلاعات بیشتر به آن توجه شود)، با کاراکتر W که به عنوان مخففی از Warning محسوب میشود قابل تنظیم است. بنابراین، پرچمهای زیر برای اهداف مشخصی در نظر گرفته میشوند که توضیحات هر یک را در مقابل آن آوردهایم: پرچم -Wall با فعال شدن، تعداد زیادی از پرچمهای هشدار دهندهٔ کامپایلر را به طور خاص و باهم روشن میکند که لیست آن به صورت زیر است: -Waddress -Warray-bounds=1 (only with -O2) -Warray-parameter=2 (C and Objective-C only) -Wbool-compare -Wbool-operation -Wc++11-compat -Wc++14-compat -Wcatch-value (C++ and Objective-C++ only) -Wchar-subscripts -Wcomment -Wduplicate-decl-specifier (C and Objective-C only) -Wenum-compare (in C/ObjC; this is on by default in C++) -Wenum-conversion in C/ObjC; -Wformat -Wformat-overflow -Wformat-truncation -Wint-in-bool-context -Wimplicit (C and Objective-C only) -Wimplicit-int (C and Objective-C only) -Wimplicit-function-declaration (C and Objective-C only) -Winit-self (only for C++) -Wlogical-not-parentheses -Wmain (only for C/ObjC and unless -ffreestanding) -Wmaybe-uninitialized -Wmemset-elt-size -Wmemset-transposed-args -Wmisleading-indentation (only for C/C++) -Wmissing-attributes -Wmissing-braces (only for C/ObjC) -Wmultistatement-macros -Wnarrowing (only for C++) -Wnonnull -Wnonnull-compare -Wopenmp-simd -Wparentheses -Wpessimizing-move (only for C++) -Wpointer-sign -Wrange-loop-construct (only for C++) -Wreorder -Wrestrict -Wreturn-type -Wsequence-point -Wsign-compare (only in C++) -Wsizeof-pointer-div -Wsizeof-pointer-memaccess -Wstrict-aliasing -Wstrict-overflow=1 -Wswitch -Wtautological-compare -Wtrigraphs -Wuninitialized -Wunknown-pragmas -Wunused-function -Wunused-label -Wunused-value -Wunused-variable -Wvla-parameter (C and Objective-C only) -Wvolatile-register-var -Wzero-length-bounds برای مثال، با فعالسازی پرچم -Werror، هرگونه هشدار را به خطای تلفیقی تبدیل میکند. این کار باعث میشود خطاهای مربوط به کدهای خطرناک را به گونهای جلوه دهید که از کامپایل آنها جلوگیری شود. کارهای مشابه این مورد، به صورت پیشفرض در زبانهای مانند Rust انجام میشود که از کدهای دارای خطا و خطرناک برای کامپایل جلوگیری میکند. به کار گیری چنین پرچمهایی در کامپایلر سی++ میتواند خطاهای شامل هشدار رو به خطاهای غیر قابل کامپایل تبدیل کند. جهت تنظیم این پرچم در پروژهٔ خود کافی است در ابزار ساخت مورد نظر آن را اعمال کنید، به عنوان مثال در سیمیک (CMake) به صورت زیر عمل کنید: SET (CMAKE_CXX_FLAGS "-Werror") و یا در QMake به شیوهٔ زیر میتوانید این ویژگی را فعال کنید: QMAKE_CXXFLAGS += -Werror برای مثال، کد زیر در صورت فعال بودن این پرچم، کامپایل نخواهد شد. int myFunction() { //no return! } auto main() -> int { return 0; } خروجی این پیام به صورت زیر خواهد بود: error: no return statement in function returning non-void [-Werror=return-type] به معنای این که هیچ بیانیهای به عنوان عبارت بازگشتی در تابع مربوطه که از نوع غیر-باطل (non-void) است، وجود ندارد. بسیاری از این گزینهها برای هدف خاصی در نظر گرفته میشوند که میتوانید جزئیات بیشتر آن را در این لینک پیدا کنید. برخی از پرچمهای رایج برای کتابخانهها گزینهٔ پرچم -lm امکان کامپایل کتابخانههای libm نوع سوم را به همراه کتابخانههای ریاضیاتی که عموماً به زبان سی هستند را میدهد. گزینهٔ پرچم -lpthread امکان کامپایل کتابخانههای مشترک از استاندارد پازیکس (Posix) را ارائه میکند. گزینهٔ پرچم -lstdc++fs امکان کامپایل و لینک شدن به کتابخانهٔ فایلسیستم را در استاندارد ۱۷ به بعد میدهد. پرچمهای بهینهسازی تحت کامپایلر با فعالسازی و اعمال پرچم-O0 هیچ گونه بهینهسازی بر روی کدها انجام نمیشود، در اصل امکان بهینهسازی کاملاً غیرفعال میشود. زمان کامپایل و همگردانی کدها سریعتر میشود و برای ابزارهای اشکالزدائی بهترین عملکرد را دارد. با فعالسازی و اعمال پرچم-O2 سطح بالاتری از بهینهسازی صورت میگیرد، ترکیبی از حالت بهینهسازی و سطح قبلی را اعمال میکند و طبیعتاً زمان بیشتری صرف کامپایل میشود و گزینهٔ بهتری برای ساخت یک محصول بهتر است. با فعالسازی و اعمال پرچم-O3 سطح بالاتری نسبت به سطح دوم از بهینهسازی صورت میگیرد، طبیعتاً زمان بیشتری صرف کامپایل میشود و گزینهٔ بهتری برای ساخت یک محصول بهتر است. از طرفی حجم باینری بیشتری را تولید کرده و زمان کامپایل طولانیتری را تحمیل میکند. با فعالسازی و اعمال پرچم-OFast سطح بالاتری نسبت به سطح سوم از بهینهسازی صورت میگیرد، طبیعتاً زمان بیشتری صرف کامپایل میشود و گزینهٔ بسیار بیشتری مانند -ffloat-store, -ffsast-math, -ffinite-math-only, -O3 را فعال میکند و برای ساخت یک محصول بهتر است. با فعالسازی و اعمال پرچم -OS امکان سطح دوم از بهینهسازی فعال میشود، با تفاوت اینکه برخی از پرچمها با هدف کاهش اندازهٔ فایل کدِ شیء (object-code) غیرفعال میشوند. با فعالسازی و اعمال پرچم-Oz سطح بالاتری نسبت به سطح -OS برای کاهش اندازهٔ فایل صورت میگیرد. این گزینه مختصِ Clang است. توضیحات و مراجع دقیق و بیشتر در رابطه با عملیات مربوط به پرچمهای بهینه سازی در کامپایلرهای مختلف به صورت زیر است: کامپایلر GCC کامپایلر Clang کامپایلر MSVC دقت کنید که نوع پرچمها نسبت به کامپایلرها متفاوت است، برای مثال پرچم -Od به معنای غیرفعالسازی تمامی بهینهسازیها و جمعآوری و کامپایل سریع کدها و در نهایت اشکالزدائی بهتر است که در Clang و MSVC پشتیبانی میشود و یا پرچمِ -OS صرفاً بر روی کامپایلر کلنگ قابل استفاده است.