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

وبلاگ‌ها

نوشته‌های ویژه

  • hamed_masafi

    طراحی ظاهر سفارشی Qt Quick Controls 2

    توسط hamed_masafi

    با سلام و خسته نباشید زبان QML از زمان معرفی تبدیل به یک زبان پرکاربرد برای طراحی ui شده است. از همین رو تیم کیوت کیت کنترل‌ها با نام Qt Quick Controls را عرضه کرد و در گام بعدی با باز طراحی آن کیت جدیدی با نام Qt Quick Controls 2 را معرفی کرد (یک عدد ۲ به آخر نام اضافه شده است) با منسوخ شدن نسخه اول، نسخه جدید اختصاراً با همان نام Qt Quick Controls شناخته می‌شود. از آنجایی که این کیت هدف سکوی زیادی دارد (موبایل، دسکتاپ، بورد‌ها و ...) لزوم طراحی تم‌های مختلف برای آن همواره احساس می‌شد
    • 1 دیدگاه
    • 1,249 مشاهده
  • کامبیز اسدزاده

    چشم‌انداز فنی برای کیوت ۶

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

    این چشم‌انداز احتمالاً برای دوست‌‌داران کتابخانهٔ قدرتمند Qt و طرفدارانش جذاب باشد! بنابراین من سعی کرده‌ام تا نتایج پست رسمی کیوت را در رابطه با چشم‌انداز فنی برای آیندهٔ کیوت نسخهٔ ۶ است در اختیار شما قرار دهم. تقریباً ۷ سال پیش کیوت نسخهٔ ۵.۰ منتشر شد! از آن زمان بسیاری از چیز‌ها در دنیای اطراف ما تغییر پیدا کرده است. و اکنون وقت آن رسیده است که چشم‌انداز جدیدی را از نسخهٔ جدید‌تر تعریف کنیم. بنابراین در این پست ما به معرفی مهمترین مواردی که به کیوت ۶ مرتبط است را می‌پردازیم. به نق
    • 6 دیدگاه
    • 1,982 مشاهده
  • کامبیز اسدزاده

    آیندهٔ توسعهٔ وب تحت فناوری WebAssembly

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

    با توجه به محبوبیت صنعت وِب، سال‌هاست زبان‌های برنامه‌نویسی در این زمینه پیشرفت‌ها و کاربرد‌های چشم‌گیری را داشته‌اند، از جمله جاوا‌اسکریپت (JS) به عنوان یک زبان قابل اجرا در داخل مرورگر شناخته می‌شود. هرچند بسیار محبوب و کاربردی است، اما این زبان قطعاً مشکلات خودش را دارد که برخی از آن‌ها عدم انعطاف‌پذیر بودن، سرعت پایین اجرا و همچنین انواع غیر ایمن آن است که این باعث می‌شود برای محاسبات و کارهای پیچیده جوابگو نباشد. هرچند گزینه‌هایی مانند CoffeeScript و TypeScript وجود دارند و نسبتا
    • 2 دیدگاه
    • 1,784 مشاهده
  • Max Base

    از تلفن همراه تا سکوی گیت هاب!

    توسط Max Base

    سلام. عدم دسترسی به یک سیستم مناسب و با خبر نبودن از حساب کاربری گیت هاب خود یکی از مشکلاتی بود که در این چند ساله برنامه نویسان با آن روبرو بودند. چک کردن حساب ایمیل در تلفن همراه می توانست تا حدودی به این موضوع کمک کند. اما یک اپلیکیشن اختصاصی برای این مورد می تواند این امر را به بهترین شکل پوشش دهد. بعد از کارهایی که برروی اپلیکیشن رسمی شرکت گیت هاب برای پلتفرم iOS انجام شد و خوشبختانه بدون هیچ مشکلی در بزرگ رویداد و کنفرانس شرکت و مایکروسافت - GitHub Universe 2019 در تاریخ Nov
    • 0 دیدگاه
    • 418 مشاهده
  • کامبیز اسدزاده

    فرق بین کامپایل استاتیک و داینامیک

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

    فرق بین کامپایل استاتیک و داینامیک قبل از اینکه فرق بین ایستا (استاتیک) - Static و پویا (داینامیک) - Dynamic را بدانیم لازم است در رابطه با چرخهٔ زندگی نوشتن یک برنامه و اجرای آن آشنا شویم. هر برنامه برای اولین بار توسط یک محیط توسعه (Editor) یا IDE توسط برنامه‌نویسان انتخاب و به صورت فایل متنی قابل ویرایش می‌باشد. سپس فایل متنی که شامل کد‌های نوشته شده توسط برنامه‌نویس تحت زبان برنامه‌نویسی مانند C، C++ و غیره... می‌باشد توسط کامپایلر به کد شیء ای تبدیل می‌شود که ماشین بتواند آن را درک کرد
    • 0 دیدگاه
    • 2,745 مشاهده

وبلاگ‌های سایت ما

  1. سلام و درود،

    این اواخر راجع به مشورت و راهنمایی‌ها خیلی ساده به قضیه نگاه می‌شه، همه فکر کردن کشکه و فقط با دونستن JS یا QML می‌شه محصول ساخت. البته این مثال JS و QML یک مثال هست و این مسئله در همهٔ ابزار‌ها و حول محور حوزهٔ کامپیوتر و نرم‌افزار به چشم می‌خوره، هرچند روی داستان ساده هست اما حتی پشت این کار‌های ساده کلی زمان باید صرف بشه. همین گرفتن یک دادهٔ ساده از سمت سرور و تجزیه کردنش سمت JS نیاز به یک دانش خوب در مورد معماری Api‌داره، نیاز به آگاهی از استاندارد‌های Http داره، نیاز به تخصص کافی در ریز به ریز مسائل داره، نیاز به آگاهی لازم در مورد شبکه و نحوهٔ مدیریتش داره، نیاز به درک خوب راجع به کلاس‌های شبکه و نحوهٔ مدیریت بسته‌ها داره و صد‌ها جور مسئلهٔ دیگه.

    road-sign-01.png

    یا راهنمایی نکنیم یا می‌کنیم همه چیز رو ساده نشون ندیم!
    به خصوص برای کسایی که سال‌ها یه چیز دیگه خوندن و الآن قراره وارد این حوزه بشن.
    قشنگ واقعیت رو باید به نمایش گذاشت، و اگرنه به اشتراک گذاری چهارتا UI خفن که بگین با QML هم میشه کاری نداره، سه سوته می‌شه این‌ها رو طراحی کرد.

    اگر کسی اطلاعات کافی و پایهٔ تخصصی نداشته باشه و همینطور متکی به یک ابزار یا زبان پیش بره چه اتفاق می‌افته؟ از نظر من قطعاً بهتون از نظر تجربی آسیب میزنه، ساخت یک محصول واقعاً به این سادگی‌ها نیست که تو گروه‌های تلگرامی داریم راجع بهش صحبت می‌کنیم! قضیه خیلی پیچیده‌تر از این‌هاست. فراموش نکن در این حوزه اگه یک کار ساده رو سریع انجام میدیم یا به نتیجه می‌رسونیم دلیلش به خاطر سال‌ها زمان و تلاشه، امکان نداره کسی حتی با ۲..۳ سال تجربه یک کار رو سریع بتونه صفر تا صد انجام بده و مشکلی نداشته باشه یا نتیجهٔ اون در سطح یک استاندارد معتبر باشه.

    ساخت محصول اصول داره که اولین مرحلش شفاف‌سازی و نقشهٔ توسعه و ایده‌پردازی درسته، نباید مثل بعضی از مشتری‌ها باشه که پشت تلفن زنگ می‌زنن می‌گن یه سایت می‌خوایم یا یه اپلیکیشن چند می‌گیری و بعدش شروع کنن به چک و چونه زدن و شما هم کیف کنی بگی که آره دیگه مشتری دارم!

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

    مشکلاتش می‌تونه به این صورت باشه:

    - سردرگمی
    - عدم توانایی کالبد‌شکافی مسئله
    - عدم توانایی حل مسئله
    - عدم توانایی انتخاب یک روش یا ابزار صحیح و مناسب
    - عدم تعامل شما با مشتری
    - عدم رضایت شما از حق‌الزحمه
    - عدم رضایت مشتری از نتیجهٔ کار
    - عدم توانایی در پاسخ‌دهی به اعضا و شرکای کلیدی دیگه در محصولات تجاری و بزرگ!
    - و هزاران مسئلهٔ دیگه که همشون نتیجهٔ تشخیص نا درسته.
    - در کنارش مهمترین خاصیتی که پیدا می‌کنه این خواهد بود در اوج نادانی احساس خواهد کرد که همه چیز دان هست! به قولی همه چیز گیگ!

    از نظر من حداقل مواردی که (به طور خیلی خیلی خلاصه و محدود) نیاز هست تا یک متخصص بتونه پاسخ‌گوی‌ تصمیم‌گیری نقشهٔ توسعهٔ یک محصول برای مشتری در ابعاد مختلف و سطوح متفاوت از حوزه‌های موجود در قالب اصولی باشه به صورت زیر هستند:

    ۱- آشنا مبانی کامپیوتر که امر طبیعیه (شامل درک و فهم مسائل و نحوهٔ حلشون متناسب با پلتفرم اجرایی محصول)
    ۲- آشنا به ساختار نوع محصول استاندارد در یک حوزه مثل: وب، آی‌او‌اس، اندروید یا دسکتاپ‌های مختلف مثل لینوکس، مک و ویندوز، اینترنت اشیاء و دیگر موارد.
    ۳- آشنا به فلسفهٔ بک‌اند و فرانت‌اند یا ترکیبی از این دو به همراه ابزار‌های مناسب.
    ۴- آشنا به اصول طراحی UI/UX به عنوان یک نیاز و یک فاکتور مهم در ساخت محصولی که وابسته به عملکرد کاربر داره و در حوزهٔ فرانت‌اند مهم و کاربردی هست.
    ۵- آشنا به اصول SOLID و امثالش مهم هستند.
    ۶- آشنا اصول برنامه‌ریزی ساخت بانک اطلاعاتی، اینکه از چه بانک اطلاعاتی‌ای استفاده کنی و چرا؟
    ۷- آشنا به ارتباطات داده‌ای، جداول و ارتباط بین فیلد‌ها، جدوال و روش‌های درست تبادل اطلاعات مابینی داده‌ها.
    ۸- آشنا و تسلط کافی به یک محیط توسعه و ادغام ابزار‌ها و محیط طراحی برای هدف.
    ۹- آشنا به معماری ساختار و رابط‌های برنامه‌نویسی (Api)
    ۱۰- آشنا به استاندارد‌های Http، درک و مدیریت درخواست، پاسخ‌ها و ...
    ۱۱- آشنا به الگو‌های طراحی برنامه‌نویسی (DP)
    ۱۲- آشنا به روش‌های نگه‌داری و آزمایش نرم‌افزار و کد‌ها به خصوص درک مبحث Fault tolerance.
    ۱۳- آشنا به روش‌های اطمینان‌سازی و ایمن‌سازی پردازش‌های داخلی نرم‌افزار برای جلوگیری یا دشوار سازی نفوز و خراب‌کاری
    ۱۴- آشنا به روش‌ها و معماری‌های احراز هویت و نحوهٔ ادغامش با نرم‌افزار مثل:JWT, OAuth, AWS و غیره...
    ۱۵- آشنا به نوع پارادایم‌های زبان برنامه‌نویسی، در قالب‌های  (دستوری) Imperative و  (اعلانی) Declarative مثل OOP، functional و دیگر موارد.
    ۱۶- آشنا به سبک معماری نرم‌افزاری (Microservice یا مثلاً Monolith) مزایا و معایبشون.
    ۱۷- آشنا به سبک معماری طراحی مانند MVC در طراحی بدنهٔ محصول.
    ۱۸- آشنا به سبک و الگو‌های طراحی ساختاری در بک‌اند مانند Builder، Abstract، Factory و غیره.
    ۱۹- آشنا به ساختار یک زبان (در صورتی که می‌خواین جوابگوی مسائلِ پیش آمده باشید) کالبد‌شکافی زیر‌پوستی و عمیق یک زبان مهمه.
    ۲۰- آشنا و درک کامپایلر‌ها و مفسر‌ها، تفاوت‌ها و شیوه‌های عملکردیشون نسبت به کد‌های بهینه شده و عادی.
    ۲۱- آشنا و درک مدل‌های مختلفی از سیستم‌های توزیع شده مثل IaaS، PaaS، SaaS یا FaaS.
    ۲۲- آشنا به ابزار‌های ساخت و فرآیند کاری اون‌ها مثل CMake، NMake، QMake و غیره.
    ۲۳- آشنا به روش‌های مدیریت وابستگی‌های نرم‌افزار و ابزار‌های لازم برای بسته‌بندی بهتر خروجی.
    ۲۴- آشنا به روش‌های کد‌نویسی قابل آزمایش (Unit Test) و استفاده از ابزار‌هایی مثل CTest, GTest, Catch2 و غیره.
    ۲۵- آشنا به توسعهٔ آزمون محور (Test Driven- Development)
    ۲۶- آشنا به گام‌ها و شرایط نسخه‌نگاری و مراحل توسعهٔ نرم‌افزار (SDP)
    ۲۷- آشنا به روش‌های امنیت در کد و توسعه به شیوه‌های بررسی از طریق Fuzz-Test، Sanitizer، آنالیزر‌های پویا و ایستا و غیره...
    ۲۸-آشنا به قوائد طراحی بر پایهٔ خدمات مبتدی بر معماری ابری برای خدمات پیامی، وب‌سرویس‌ها، پردازش و غیره.
    ۲۹- در سطوح وب آشنا به مکانیزم شاخص بندی، فاکتور‌های SEO و شیوه‌‌های درست بهبود صفحات وب.
    ۳۰- آشنا به روش‌های به کار گیری و پیاده‌سازی ثبت کننده‌ٔ وقایع در دل محصول و روش‌های بازخورد برای توسعهٔ بهتر به همراه مانیتورینگ، نظارت و تریسینگ.
    ۳۱- در شرایط لزوم آشنا به نحوهٔ به کار گیری و دلیل استفاده از فناوری‌هایی مثل Redis، Memcached و غیره.
    ۳۲- آشنا و درک صحیح از مفاهیم هم‌زمانی (Concurrency) و روش‌های به کار گیری آن نسبت به زبان برنامه‌نویسی و شرایط مناسب استفاده.
    ۳۳- آشنا به سبک و قوائد و ساختار زبان‌های برنامه‌نویسی و فرآیند ساخت و ترجمه.
    ۳۴- و تا صد‌ها گزینهٔ دیگه می‌تونم لیست کنم اینجا که اگه انتخابتون زبان‌های نزدیک به سیستم باشه این داستان در ادامهٔ این توضیحات سر به فلک می‌کشه نمونش کامپایلر‌ها خودشون شونصد جور مباحث دارند، پلتفرم‌ها ومعماری‌های پردازنده‌ای هم در این زبان‌ها مهمن و شما حتی تا عمق سیستم‌عامل و رابط‌های اون‌ها و نحوهٔ رفتارشون باید اطلاعات کافی داشته باشید که هر کدوم به نوبهٔ خودشون هزاران صفحه می‌شه راجع بهشون کتاب معرفی کرد.

    این لیست چیزی بود که به زبان بسیار بسیار ساده شده و خیلی خلاصه به ذهنم رسید تا بدانید همچین هم الکی نیست ای عزیزانی که فتوا‌های صد من یه غاز میدین و این مسائل رو حل شده می‌دونید! 

    در ادامه اصل ماجرا خیلی فراتر از این‌ها هم هست که بخوای حساب کتاب کنی می‌بینی باید هفت خان رستم رو فتح کنی تا در تمامی سطوح پاسخگو باشی، این امر شدنی هست اما زمانی که شما محدود به یک موضوع باشید قطعاً درک همهٔ مسائل محدود و ناتوان در اجرای آن خواهید شد.

    * وقتی می‌گم آشنا قطعاً در حد حروف الفبا کافی نیست، باید در حد نیاز تسلط و درک کافی ازشون وجود داشته باشه.
    * همهٔ این‌ها رو باید در کمترین زمان ممکن نسبت به یک مشتری، محصول و نیاز تشخیص بدین و انتخاب کنید، به این کار می‌گن ارزیابی محصول بر اساس دانسته‌های فنی که تماماً متکی بر دانش و تجربهٔ شماست. (کارشناسی پروژه دقیقاً همین موضوع است).
    * برای بهتر شدن و حرفه‌ای تر شدن هم باید فراتر از این‌ها پیش برید و در قالب «مثلث دانش» بهبودش بدهید.
    * محصولات معتبر جهانی حاصلِ چنین نقشه‌های پیش‌بردی هستند و اصول تخصصی و مهندسی رو رعایت می‌کنن تا به یک درجهٔ کیفی موفق و زبان زد می‌رسند. شاید این مسائل از نظر یک برنامه‌نویس ساده و نه چندان با تجربه مهم نباشه، اما در سطح کیفی یک محصول نرم‌افزاری همهٔ این مسائل مهم تلقی می‌شوند.

    برای همین می‌گم گولِ توصیه‌های ساده و ظاهر چهارتا برنامه یا کیوت، دات‌نت و امثال این ابزار‌ها رو نخورید، پشت همهٔ نیاز‌های یک محصول به فاکتور‌های بسیاری باید توجه کنید. فردا بخواهید بدون آگاهی در این مسائل وارد پروژه‌هایی بشید که به ظاهر ساده هستند یا باید دست به گریبان دیگران باشید و توی گروه‌ها مدام سوأل پرسی کنید و یا باید بیخیال آن شوید؛ چون به هیچ یک از این فاکتور‌های مورد نیاز توسعه توجه نکردین! پس این اصول رو به عنوان سر نخ مطالعه کنید تا بخش بزرگی از سرگردانی‌های شما حل شود.

    این مواردی که این جا اشاره کردم، همونطور که گفتم بخش بسیار کوچکی از دنیای نیازمندی‌های ساخت و ساز و طراحی یک محصول واقعی در پیرامون نرم‌افزار و کامپیوتر هست، اما یک دل‌گرمی بدم به کسایی که با خودشون فکر می‌کنند چنین مسیر یا نقشه‌ای از راه که قراره پیش بگیرند سخته و همهٔ ماجرا این نیست (جزئیات رو در کتاب‌ها، موقعیت و فرصت‌های شغلی، شکست‌ها، موفقیت‌ها و آزمون و خطاها یاد خواهند گرفت) و نتیجهٔ اون می‌تونه مطابق همین حکایت زیر باشه:

    نقل قول

    حکایت برنامه‌نویسان، ابزار‌ها، تجربه و تخصصی که در بازار بی ارتباط با آن نیست!

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

    وی با جعبه ابزار بزرگی آمد و بلافاصله مشغول بررسی دقیق موتور کشتی شد.
    دو نفر از صاحبان کشتی نیز مشغول تماشای کار او بودند.
    مرد از جعبه ابزارش آچار کوچکی بیرون آورد و با آن به آرامی ضربه ای به قسمتی از موتور زد، بلافاصله موتور شروع به کار کرد و درست شد.

    یک هفته بعد صورتحسابی ده هزار دلاری از آن مرد دریافت کردند، صاحب کشتی با عصبانیت فریاد زد:

    او واقعا هیچ کاری نکرد!
    ده هزار دلار برای چه می خواهد بگیرد؟

    بنابراین از آن مرد خواستند ریز صورتحساب را برایشان ارسال کند؟
    مرد تعمیر کار نیز صورتحساب را اینطور برایشان فرستاد:

    ضربه زدن با آچار: ۲دلار
    تشخیص اینکه ضربه به کجا باید زده شود: ۹۹۹۸ دلار

    و ذیل آن نیز نوشت:

    تلاش کردن مهم است.
    اما دانستن اینکه کجای زندگی باید تلاش کرد می‌تواند همه چیز را تغییر بدهد.

     

     

  2. یک سوأل بسیار مهم و پر مخاطب در بارهٔ زبان‌برنامه‌نویسی سی‌پلاس‌پلاس در سال‌های اخیر این است که «آیا جایگزینی برای این زبان وجود دارد و یا قابل جایگزین است»؟

    در بسیاری از پاسخ‌ها نشان از گزینه‌هایی مانند Go، Rust و D دیده می‌شود که بهتر است نسبت به نظرات متخصص‌های برنامه‌نویسی به این موضوع پرداخته شود، ابتدا باید در نظر گرفت که هر ابزاری می‌تواند جایگزینی داشته باشد اما شرایط و نحوهٔ استفادهٔ آن در رابطه با نیاز متفاوت است.

    cpp-f.png

    اخیراً سوألات زیادی در این موضوع دیده شده است که می‌گویند، Rust یک زبان برنامه‌نویسی ایمن، سریع و سیستمیِ جایگزین برای سی‌پلاس‌پلاس است! اما آیا واقعاً اینگونه است یا صرفاً ما بر اساس احساسات و اشتیاق به به‌روز شدن به این موضوع می‌پردازیم؟

    پاسخ برای این سوأل به صورت زیر در مدل‌های مختلف می‌تواند مطرح شود که نتیجه‌گیری و تصمیم از خلاصهٔ آن به عهدهٔ خودِ شماست.

    من بر این باورم که زبان‌های برنامه‌نویسی همه و همه در حال به‌روز رسانی و بهتر شدن نسبت به نسخه‌ها، استاندارد‌ها، و نسل‌های گذشتهٔ خودشان هستند و به هیچ عنوان هیچ زبانی تا به امروز به طور جدی منسوخ شده اعلام نشده است.

    برای درک این مطلب بهتر است ابتدا به واژهٔ «منسوخ شده» یا «Deprecated» بپردازیم، این واژه زمانی مورد استفاده قرار می‌گیرد که شرایط زیر بر آن حاکم باشد:

    1. گزینهٔ مورد نظر به طور رسمی از طرف سازنده، پشتیبان یا صاحب آن بد دانسته شده و رسماً کنار گذاشته شود.
    2. گزینهٔ مورد نظر به‌روز رسانی نشود و آخرین به‌روز رسانی آن نیز شامل مشکلاتی باشد که بعد از مدت‌ها نیز حل نشده باشد.
    3. گزینهٔ مورد نظر دیگر مورد استفاده قرار نگیرد و کاربردی هم در بین رقبای خود نداشته باشد.
    4. گزینهٔ مورد نظر دیگر پشتیبانی نشود و به قولی مُرده باشد.
    5. گزینهٔ مورد نظر به علاوهٔ این که شامل این موارد می‌شود، باید دارای یک جایگزین مناسب و عالی باشد.

    با توجه به این معیار‌ها و با در نظر گرفتن رسالت هر یک ابزار‌ها باید به آن توجه کرد که هر زبان یا ابزار برنامه‌نویسی خارج از این، در مرحلهٔ پیشرفت قرار گرفته است که آن نشان دهندهٔ زنده بودن و کاربردی بودن آن است.

    از طرفی، زبانی مثل سی‌پلاس‌پلاس جایگزین نمی‌شود چرا که هیچ یک از دلایل و معیار‌های بالا شامل حال آن نمی‌شود، اتفاقاً برعکس این زبان دارای ویژگی‌های معیاری زیر است:

    1. این زبان به طور رسمی توسط کمیتهٔ استاندارد‌سازی که متعلق به هیچ یک از شرکت‌های غول صنعتی و یا خصوصی نمی‌باشد پشتیبانی می‌شود.
    2. این زبان به طور مداوم در حال به‌روز رسانی است و کاربرد‌های چند-منظوره و همه جانبهٔ خود را داراست.
    3. این زبان از ویژگی‌های از ویژگی‌های بسیار خوب به همراه سریع‌ترین بازدهی‌ها را داراست.
    4. این زبان رقیب‌های بسیاری دارد، اما هیچ کدام از آن‌ها هنوز در عمل و دامنهٔ وسیعی موفق به نمایش عملکرد بهتری نبوده‌اند.
    5. این زبان همانند دیگر ابزار‌ها دارای مشکلاتی است، اما با توجه به پوشش و پشتیبانی از ویژگی BC در روند استاندارد‌سازی و به‌روز رسانی به خوبی از پس آن‌ها بر آمده است.

    برای مثال، زبان جاوا یکی از بهترین زبان‌های برنامه‌نویسی است و خیلی از شرکت‌ها مانند گوگل در سیستم‌های توزیع شده از آن استفاده می‌کنند. اما به معنای این نیست که به سرعت سی++ می‌رسد و در حد مقایسه با آن است. این زبان می‌تواند ده‌ها و صد‌ها برابر کند‌تر از سی++ باشد و این مربوط به طراحی، ساختار و مسائل مربوط به زبان است. از طرفی سی‌پلاس‌پلاس محبوب است زیرا که ویژگی‌های زیر را دارد و طی سال‌های بسیاری آن را ثابت کرده است:

    • کارآیی (پرفرمنس) و سرعت فوق‌العادهٔ این زبان، البته خیلی از زبان‌ها ادعا می‌کنند که همچین ویژگی‌ای را دارند که در عمل نتیجهٔ جالبی مشاهده نمی‌شود.
    • ذاتِ چند-سکویی و چند-منظوره بودن آن، حداقل همهٔ سیستم‌ها می‌توانند کد‌های سی++ را کامپایل و اجرا کنند.
    • این زبان به راحتی می‌تواند با زبان‌ها و فناوری‌های دیگری ارتباط برقرار کرده و با آن‌ها تعامل داشته باشد.
    • این زبان به عنوان یکی از کم‌مصرف‌ترین زبان‌های برنامه‌نویسی از نظر مصرف انرژی محسوب می‌شود.
    • بسیاری از مهندسین این زبان‌ها را به صورت مقطعی و بار‌ها دیده و با آن آشنا هستند.
    • کتابخانه‌های پیشفرض استاندارد STL و دیگر کتابخانه‌های سی‌++ بسیار قدرتمند و گسترده هستند.
    • کتابخانه‌های نوع سوم (Third-Party) بسیار قدرتمند و به‌روز هستند.
    • اولویت‌های سیستم‌های یونیکس و حتی ویندوز اکثراً بر روی C و ++C است.
    • بسیاری از وابستگی‌های ایجاد شده در سال‌های بسیار طولانی بر اساس سی و سی++ بوده و باز‌نگری و بازنویسی آن‌ها مشروط بر این که رابط‌ها باید باز‌نویسی شود بسیار سخت و کاری مشابه اختراع دوبارهٔ چرخ است.
    • عملکرد تا حدی قابل پیش‌بینی است و می‌تواند آن را درک کرد، چیزی که در زبان‌هایی مانند جاوا، سی‌سارپ و گو نمی‌تواند پیش‌بینی کرد چرا که پیش‌بینی چرخهٔ GC دشوار است، هیچ رقیب جدی‌ای در این باره در سطح سی++ وجود ندارد که مدیریت حافظه را برای شما در قالب یک RAII ارائه کند، هرچند در مورد Objective-C و Rust می‌توان آن‌ها را به صورت جداگانه مورد بررسی قرار داد و نه عین آن.
    • پشتیبانی از پارادایم (سبک)‌های طراحی را سی++ به خوبی پشتیبانی می‌کند، برای مثال برنامه‌نویسی عمومی در زمان کامپایل را به خوبی ارائه می‌کند.
    • پشتیبانی از برنامه‌نویسی سیستمی و سطح پایین در این زبان یک مزیتی دیگری است که در کنار تمامی ویژگی‌های سطح بالای خود ارائه می‌کند.
    • اما در این میان زبان‌هایی مثل Rust، Go، Swift و غیره ادعای جایگزینی را دارند اما ادعا‌های فنی به تنهایی کافی نیستند، در دسترس بودن گسترده از جامعه به اندازهٔ کافی به همراه جامعهٔ معتمد به آن مهم است.
    • علاوه بر ویژگی‌های فنی زبان سی++، یک نقطه قوت بسیار مهم این زبان در بحث غیر فنی آن است، در واقع در پشت این زبان نه یک پیاده‌سازی محدودی وجود دارد و نه یک سازمان که در آینده در مورد آن تصمیم بگیرد و آن را کنترل کند. در حالی که تمامی زبان‌های مطرح و ادعا کننده داخل یک چهارچوبی کنترل می‌شوند که به شدت آیندهٔ آن‌ها را تیره و تار می‌کند. به طور کلی آزاد بودن یک ابزار و قدرت یک جامعه فارغ از جغرافیا، سازمان، نژاد و زبان یک قدرت بسیار خارق‌العاده‌ای را برای یک ابزار به ارمغان می‌آورد که به تنهایی بسیار اهمیت دارد.
    • در این اواخر بسیاری از مهندسین به فکر باز‌نویسی بسیاری از موارد شدن و تحقیقات نشان می‌دهد ابزار‌هایی گرافیکی بسیار قدرتمند و سریع که اخیراً طراحی شده‌اند، مانند وُلکان که با سی++ نوشته شده‌ است زمانی می‌توانند با راست و زبان‌های دیگر امروزی باز‌نویسی شوند که یک سیستم‌عامل جدید با زبان‌های جدید ساخته شود! بنابراین صرفاً می‌توان یک نسخهٔ Wrapper یا همان (پوشنده) چرا که تقریباً همهٔ سیستم‌عامل‌های مدرن امروزی با زبان‌های سی و سی++ نوشته شده‌اند. از طرفی تولید یک سیستم‌عامل بسیار پر خطر است و سرمایه‌گذاری کلان، زمان و هزینه‌های بسیاری را می‌طلبد و تا زمانی که چنین نرم‌افزار‌هایی تحت سلطهٔ زبان‌هایی مانند سی++ قرار گرفته باشند پادشاهی سی‌پلاس‌پلاس ادامه خواهد داشت.

    نکتهٔ پایانی

    من معتقدم هر ابزار و زبان‌های برنامه‌نویسی جایگاه و شرایط استفادهٔ خودشان را شامل می‌شوند، دقیقاً مانند ابزار‌های موجود در یک جعبه‌ابزار بهتر است ابزار‌های خود را طوری بچینید که در جای لازم از مناسب‌ترین آن‌ها استفاده کنید. با این حال زبان‌ها و ابزار‌های مانند سی‌ یا سی++ طی سال‌ها ثابت کرده‌اند که معمولاً در همهٔ حوزه‌ها غالب هستند و می‌تواند هر کاری را که بخواهید با آن‌ها انجام دهید و یا با یک جایگرین مناسب آن را مدیریت کنید و این بستگی به مهارت و انتخاب شخصی شما دارد.

     

    مقالات مرتبط با این موضوع که می‌تواند به عنوان مکملی از پیش تعریف شده برای شما مفید باشد:

     

  3. hamed_masafi
    آخرین نوشته

    توسط hamed_masafi،

    با سلام و خسته نباشید

    زبان QML از زمان معرفی تبدیل به یک زبان پرکاربرد برای طراحی ui شده است. از همین رو تیم کیوت کیت کنترل‌ها با نام Qt Quick Controls را عرضه کرد و در گام بعدی با باز طراحی آن کیت جدیدی با نام Qt Quick Controls 2 را معرفی کرد (یک عدد ۲ به آخر نام اضافه شده است) با منسوخ شدن نسخه اول، نسخه جدید اختصاراً با همان نام Qt Quick Controls شناخته می‌شود.

    از آنجایی که این کیت هدف سکوی زیادی دارد (موبایل، دسکتاپ، بورد‌ها و ...) لزوم طراحی تم‌های مختلف برای آن همواره احساس می‌شد. تیم کیوت چندین تم برای آن معرفی کرده است که به شرح زیر می‌باشند:

    • Default: یک ظاهر سبک که هدف آن سادگی و اجرای روان روی سخت‌افزار پایین‌رده است
    • Imagine: یک ظاهر که با تصاویر ۹ بخشی ساخته می‌شود
    • Material: یک ظاهر که از زبان متریال گوگل پیروی می‌کند
    • Universal: یک ظاهر که از استاندارد یونیورسال مایکروسافت پیروی می‌کند.
    • Fusion: پیاده سازی تم فوژیون ویجت برای qml که ظاهری شبیه دسکتاپ ارائه می‌کند

    هر کدام از این تم‌ها عالی هستند اما ممکن است یک سازمان نیازی متفاوت داشته باشد. یا بخواهد تغییر کوچکی روی این تم‌ها اعمال کند. تیم کیوت با معرفی Qt Quick Templates این امکان را فراهم کرده‌است تا برنامه‌نویس تم سفارشی خودش را ایجاد کند. در ادامه این نوشته طریقه انجام این کار شرح داده خواهد شد.

    برنامه‌هایی که از Qt Quick Controls استفاده می‌کنند می‌توانند یک فایل پیکره‌بندی داشته باشند. نام این فایل باید qtquickcontrols2.conf باشد و در ریشه ریسورس ذخیره شده باشد. یا به عبارتی مسیر زیر باید به این فایل اشاره کند:

    qrc:/qtquickcontrols2.conf

    یک نمونه از محتویات این فایل مانند زیر است:

    [Controls]
    Style=Material
    
    [Material]
    Primary=#4FC1E9
    Accent=DeepPurple
    Elevation=10
    Variant=Dense
    
    [Universal]
    Accent=Red
    Theme=System

    در این فایل تم برنامه و همچنین پارامتر‌های مربوط به هر تم نوشته می‌شود. توضیح جزئیات این پیکره‌بندی در حوزه این نوشته نیست و ما یک استفاده ساده از آن خواهیم کرد. برای کسب اطلاعات بیشتر در مورد این فایل این لینک را ببینید.

    همانگونه که قبلاً گفته شد با Templates می‌توانیم یک ظاهر سفارشی ایجاد کنید. نکته مورد اهمیت این است که ظاهر جدید ما می‌تواند بر مبنای یک ظاهر موجود ساخته شود. برای مثال ممکن است برنامه‌نویس بخواهد از تم Material استفاده کند ولی فقط ظاهر دکمه‌ها را کمی تغییر دهد. یا اینکه یک تم را از پایه شروع کند.

    مراحل انجام کار:

    ابتدا یک پروژه جدید ایجاد کنید. 

    سپس در فولدر پروژه یک فایل متنی با نام qtquickcontrols2.conf ایجاد کرده و محتویات زیر را در آن بنویسید:

    [Controls]
    Style=:/style
    FallbackStyle=Material

    همانگونه که مشاهده می‌کنید محتویات بسیار ساده است. ما مشخص کردیم تم ما در مسیر :/style قابل دسترسی است. در خط آخر مشخص شده است اگر کنترلی در این تم وجود نداشت از تم Material استفاده شود.

    در قدم بعد باید در فولدر style کنترل‌های سفارشی ساخته شوند. اگر کنترلی قرار نیست سفارشی شود نیازی نیست در این فولدر گنجانده شود چون تم جایگزین Material معرفی شده است و اگر کنترلی وجود نداشت از آن استفاده می‌شود.

    نحوه سفارشی کردن کنترل‌ها

    و اما قسمت اصلی ماجرا اینجاست. باید همه کنترل‌ها را یک به یک فولدر style ایجاد کنید. ولی لازم نیست هر کنترل را از صفر کدنویسی کنیم. یک راه ساده که من خودم همیشه استفاده می‌کنم این است که سورس کنترل‌ها را از کیوت برداشته و تغییر می‌دهم. سورس را می‌توانید در این سایت پیدا کنید. برای مثال اگر از کیوت نسخه 5.15.2 استفاده می‌کنید و تم پایه شما متریال است، همه چیزی که نیاز دارید در این آدرس موجود است.

    حالا در فولدر style یک فایل با نام Button.qml بسازید. سپس محتویات سورس کیوت را از این آدرس برداشته و در آن کپی کنید. سپس تغییرات دلخواه را روی آن انجام دهید. حال اگر برنامه را اجرا کنید، بدون اینکه کد‌های موجود را تغییری دهید، هر جا که Button وجود دارد با تم سفارشی شما ظاهر خواهد شد.

    لطفاً نظرات و تجریبات خود را در بخش نظرات زیر پست درج کنید تا در صورت لزوم این نوشته کامل‌تر گردد.

     

  4. یک حرکت خوشحال کننده در آغاز سال ۲۰۲۱ با عنوان آزاد شدن خدمات گیت‌هاب برای کشور عزیزمان صورت گرفته است؛ ساعاتی پیش «نت فرایدمن»، مدیرعامل گیت‌هاب اعلام کرد که این شرکت مجوزی از دولت آمریکا دریافت کرده تا خدماتش را به توسعه‌دهندگان ایرانی ارائه دهد. این سرویس‌ها می‌تواند در اختیار افراد یا سازمان‌ها و به شکل رایگان یا اشتراکی قرار گیرد.

    GitHub-Mark.png

    به قول مدیر عامل گیت‌هاب، همهٔ توسعه‌دهنده‌ها باید در استفاده از گیت‌هاب آزاد باشند و مهم نیست که در کجا زندگی می‌کنند.

    البته، با توجه به سوابق تحریمی پیشنهاد می‌شود در زمان استفاده از این خدمات، از مخازن کد‌های خودتان نسخهٔ پشتیبان تهیه کنید تا در صورت اعمال محدودیت‌ با مشکل خاصی مانند از دست دادن مخازن و یا عدم دسترسی به مخازن مواجه نشوید.

    منبع خبر اصلی : https://github.blog/2021-01-05-advancing-developer-freedom-github-is-fully-available-in-iran/

  5.  

    هنگامیکه شما برای اولین بار از C به CPP مهاجرت می کنید، یا اصلا برنامه نویسی را قصد دارید با CPP شروع کنید، با مفاهیم متعددی روبرو خواهید شد که شاید برای شما جالب باشند که بدانید، این ایده ها چطور شکل گرفتند، چطور به CPP افزوده شدند و اهمیت آن ها در عمل (هنگام برنامه نویسی و توسعه نرم افزار) چیست. در این پست وبلاگی IOStream، به این خواهیم پرداخت که ایده Overloading و Template و Auto Deduction چطور از CPP سر در آوردند. 

    همانطور که شما ممکن است تجربه کرده باشید، هنگامیکه برنامه نویسی و توسعه نرم افزاری را با C شروع می کنید، برنامه شما چیزی بیش از یک مجموعه بی انتها از توابع و استراکچرها و متغیرها و اشاره گرها و ... نخواهند بود.

    از همین روی شما مجبور هستید مبتنی بر ایده مهندسی نرم افزار و پارادیم برنامه نویسی ساخت یافته، برای هر کاری یک تابع منحصربفرد پیاده سازی کنید. این تابع باید از هر لحاظی از قبیل نام، نوع ورودی ها، نوع خروجی و حتی نوع عملکرد منحصربفرد باشد تا بتواند یک کار را به شکل صحیح کنترل کند که همین مسئله می تواند در پیاده سازی برخی نرم افزارها، انسان را در جهنم داغ و سوزان قرار بدهد. مثلا پیاده سازی یک برنامه محاسباتی مانند ماشین حساب که ممکن است با انواع داده های محاسباتی مانند عدد صحیح (Integer) و عدد اعشاری (Float) رو به رو شود. 

    از همین روی فرض کنید، ما قرار است یک عمل محاسباتی مانند جمع از برنامه ماشین حساب را پیاده سازی کنیم. برای اینکه برنامه به شکل صحیحی کار کند، باید عمل جمع یا همان Add برای انواع داده های موجود از قبیل عدد صحیح و اعشاری پیاده سازی شود. اگر شما این کار را انجام ندهید، برنامه شما به شکل صحیحی کار نخواهد کرد (یعنی نتایج اشتباه ممکن است برای ما تولید کند). در تصویر زیر، نمونه این برنامه و توابع مرتبط با آن پیاده سازی شده است:

    #include <stdio.h>
    
    int AddInt(int arg_a, int arg_b)
    {
    	return arg_a + arg_b;
    }
    
    float AddFloat(float arg_a, float arg_b)
    {
    	return arg_a + arg_b;
    }
    
    double AddDouble(double arg_a, double arg_b)
    {
    	return arg_a + arg_b;
    }
    
    int main(int argc, const char* argv[])
    {
    	int result_int = AddInt(1, 2);
    	float result_float = AddFloat(10.02f, 21.23f);
    	double result_double = AddDouble(9.0, 24.3);
    
    	printf("Result Integer: %d", result_int);
    	printf("Result Float: %f", result_float);
    	printf("Result Double: %lf", result_double);
    
    	return 0;
    
    }

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

    ولی به هر صورت، اگر به خروجی دیزاسمبلی برنامه مشاهده کنید، دلیل این مسئله را متوجه خواهید شد که چرا هنگام برنامه نویسی با زبان C، به نام های منحصربفرد نیاز است، چون اگر توابع نام های مشابه با هم داشته باشند، لینکر نمی تواند به دلیل تداخل نام (Name Conflict)، آدرس آن ها را محاسبه یا اصطلاحا Resolve کند.

    1_0SISKwE-kz5FeG0ujky69A.thumb.png.5873825ab0d6b941588a0289cc1a2d74.png

    همانطور که در تصویر بالا خروجی دیزاسمبلی برنامه Add را مشاهده می کنید، اگر توابع نام مشابه داشتند، در هنگام فراخوانی (Call) تابع Add تداخل رخ می داد، چون دینامیک لودر سیستم عامل دقیقا نمی داند که کدام تابع را باید فراخوانی کند. برای همین نیاز است وقتی برنامه نوشته می شود، نام توابع در سطح کدهای اسمبلی و ماشین منحصر بفرد باشد.

    به هر صورت، به نظر شما آیا راهی وجود دارد که ما پیاده سازی این نوع توابع را ساده تر کنیم یا حداقل بار نامگذاری آن ها را از روی دوش توسعه دهنده و برنامه نویس برداریم؟ بله امکان این کار وجود دارد. مهندسان CPP با افزودن ویژگی Overloading و Name Mangling یا همان بحث Decoration مشکل برنامه نویسان در پیاده سازی توابع با نام های منحصربفرد را حل کردند (البته کاربردهای دیگر هم دارد که فعلا برای بحث ما اهمیت ندارند).

    ویژگی اورلودینگ در CPP به ما اجازه خواهد داد یک تابع با عنوان Add پیاده سازی کنیم که تفاوت آن ها فقط در نوع ورودی و نوع خروجی است. به عنوان مثال، در قسمت زیر، کد برنامه Add را مشاهده می کنید که با قواعد CPP بازنویسی شده است.

    #include <iostream>
    
    int Add(int arg_a, int arg_b)
    {
    	return arg_a + arg_b;
    }
    
    float Add(float arg_a, float arg_b)
    {
    	return arg_a + arg_b;
    }
    
    double Add(double arg_a, double arg_b)
    {
    	return arg_a + arg_b;
    }
    
    int main(int argc, const char* argv[])
    {
    	int result_int = Add(1, 2);
    	float result_float = Add(10.02f, 21.23f);
    	double result_double = Add(9.0, 24.3);
    
    	std::cout << "Result Integer: " << result_int << std::endl;
    	std::cout << "Result Float: " << result_float << std::endl;
    	std::cout << "Result Double: " << result_double << std::endl;
    
    	return 0;
    
    }

    همانطور که مشاهده می کنید، ما اکنون سه تابع با نام Add داریم. ولی شاید سوال پرسیده شود که چطور لینکر متوجه تفاوت این توابع با یکدیگر می شود درحالیکه هر سه دارای یک نام واحد هستند. اینجاست که مسئله Name Mangling یا همان Decoration نام آبجکت ها در CPP مطرح می شود. اگر شما برنامه مذکور را دیزاسمبل کنید، متوجه تفاوت کد منبع (Source-code) و کد ماشین/اسمبلی (Machine/Assembly-code) خواهید شد. 

    1_3f8z67lwROt7c6uNFP7K9Q-min.jpg.ed9f3842e9816f346c10c5fb2a95c5e1.jpg

    همانطور که در خروجی دیزاسمبلی برنامه اکنون مشاهده می کنید، توابع اگرچه در سطح کد منبع دارای نام مشابه با یکدیگر بودند، اما بعد کامپایل نام آن ها به شکل بالا تبدیل می شود. به این شیوه نام گذاری Name Mangling یا Decoration گویند که قواعد خاصی در هر کامپایلر برای آن وجود دارد.

    این ویژگی موجب می شود در ادامه لینکر بتواند تمیز بین انواع توابع Add شود. به عنوان مثال، تابع نامگذاری شده با عنوان  j__?Add@YAHH@Z تابعی است که به نوعی از تابع Add اشاره دارد که ورودی هایی از نوع عدد صحیح دریافت می کند. این شیوه نامگذاری خلاصه موجب خواهد شد لینکر بتواند به سادگی بین توابع تمایز قائل شود.

    با این حال هنوز یک مشکل باقی است، و آن هم تکرار مجدد یک پیاده سازی برای هر تابع است. به نظر شما آیا راهی وجود دارد که ما از پیاده سازی مجدد توابعی که ساختار مشابه برای انواع ورودی ها دارند، جلوگیری کنیم؟ باید بگوییم، بله. این امکان برای شما به عنوان توسعه دهنده CPP در نظر گرفته شده است.

    ویژگی که اکنون به عنوان Templateها در مباحث Metaprogramming یا Generic Programming استفاده می شود، ایجاد شده است تا این مشکل را اساساً برای ما رفع کند. با استفاده از این ویژگی کافی است، طرح یا الگوی یک تابع را پیاده سازی کنید، تا در ادامه خود کامپایلر مبتنی بر ورودی هایی که به الگو عبور می دهید، در Backend، یک نمونه تابع Overload شده مبتنی بر آن الگو برای نوع داده شما ایجاد کند. 

    #include <iostream>
    
    template <typename Type>
    Type Add(Type arg_a, Type arg_b)
    {
    	return arg_a + arg_b;
    }
    
    int main(int argc, const char* argv[])
    {
    	int result_int = Add(1, 2);
    	float result_float = Add(10.02f, 21.23f);
    	double result_double = Add(9.0, 24.3);
    
    	std::cout << "Result Integer: " << result_int << std::endl;
    	std::cout << "Result Float: " << result_float << std::endl;
    	std::cout << "Result Double: " << result_double << std::endl;
    
    	return 0;
    
    }

    به عنوان مثال، در بالا تابع Add را مشاهده می کنید که نوع داده ورودی این تابع و حتی نوع خروجی آن مشخص نشده است و در قالب Typename به کامپایلر معرفی شده است. این یک الگو برای تابع Add است. کامپایلر اکنون می تواند مبتنی بر ورودی هایی که به تابع هنگام فراخوانی یا اصطلاحا Initialization عبور می دهیم، یک نمونه تابع Overload شده از آن الگو ایجاد کند و در ادامه آن را برای استفاده در محیط Runtime فراخوانی کند. حال اگر برنامه بالا را دیزاسمبل کنید، مشاهده خواهید کرد که کامپایلر از همان قاعده Overloading استفاده کرده است تا نمونه ای از تابع Add متناسب با نوع ورودی هایش ایجاد کند.

    1_KX5vFYWKZVDeGKgftQB1Cw.thumb.png.82cb68fab33fc3c52fb06ca58773eaae.png

    هنوز می توان برنامه نویسی با CPP را جذاب تر و البته ساده تر کرد، اما چطور؟ همانطور که در قطعه کد بالا مشاهده می کنید، هنوز ما باید خود تشخیص دهیم که نوع خروجی تابع قرار است به چه شکل باشد. این مورد خیلی مواقع مشکل ساز خواهد بود.

    برای حل این مسئله، در CPP مبحثی در نظر گرفته شده است که آن را به عنوان Auto Deduction می شناسیم که سطح هوشمندی کامپایلر CPP را بالاتر می برد. در این ویژگی خود کامپایلر است که مشخص می کند نوع یک متغیر مبتنی بر خروجی که به آن تخصیص داده می شود، چیست. به عنوان مثال، شما می توانید برنامه بالا را به شکل زیر بازنویسی کنید:

    #include <iostream>
    
    template <typename Type>
    auto Add(Type arg_a, Type arg_b)
    {
    	return arg_a + arg_b;
    }
    
    int main(int argc, const char* argv[])
    {
    	auto result_int = Add(1, 2);
    	auto result_float = Add(10.02f, 21.23f);
    	auto result_double = Add(9.0, 24.3);
    
    	std::cout << "Result Integer: " << result_int << std::endl;
    	std::cout << "Result Float: " << result_float << std::endl;
    	std::cout << "Result Double: " << result_double << std::endl;
    
    	return 0;
    
    }

    با استفاده از ویژگی Auto Deduction و کلیدواژه Auto در برنامه، خود کامپایلر در ادامه مشخص خواهد کرد که تابع Add چه نوع خروجی دارد و همچنین نوع متغیرها برای ذخیره سازی خروجی Add چه باید باشد. به عبارتی اکنون تابع Add هم Value و هم Data type را مشخص می کند که این موجب می شود برنامه نویسی با CPP خیلی ساده تر از گذشته شود. حال اگر به نمونه برنامه آخر نگاه کنید و آن را با نمونه C مقایسه کنید، متوجه خواهید شد که CPP چقدر کار را برای ما ساده تر کرده است.

    در این پست به هر صورت، قصد داشتم به شما نشان دهم که نحوه تحول CPP به صورت گام به گام چطور بوده است و البته اینکه پشت هر ویژگی در CPP چه منطق کلی وجود دارد. امیدوارم این مقاله برای شما مفید بوده باشد. نمونه انگلیسی این مقاله را می توانید در این آدرس (لینک) مطالعه کنید.

    میلاد کهساری الهادی

  6. Max Base
    آخرین نوشته

    توسط Max Base،

    سلام.

    عدم دسترسی به یک سیستم مناسب و با خبر نبودن از حساب کاربری گیت هاب خود یکی از مشکلاتی بود که در این چند ساله برنامه نویسان با آن روبرو بودند.

    چک کردن حساب ایمیل در تلفن همراه می توانست تا حدودی به این موضوع کمک کند. اما یک اپلیکیشن اختصاصی برای این مورد می تواند این امر را به بهترین شکل پوشش دهد.

    بعد از کارهایی که برروی اپلیکیشن رسمی شرکت گیت هاب برای پلتفرم iOS انجام شد و خوشبختانه بدون هیچ مشکلی در بزرگ رویداد و کنفرانس شرکت و مایکروسافت - GitHub Universe 2019 در تاریخ November 13-14, 2019 رونمایی شد. به عنوان یکی از اعضای شرکت این نوید را می دهم که نوبت به آن رسید تا اپلیکیشن برای اندروید نیز پیاده شود.

    در حال حاضر این اپلیکیشن در حال توسعه است و هنوز رونمایی نشده است.

    برای این اپلیکیشن میزان پشتیبانی API 21+ Android device در نظر گرفته شده است و خواهد توانست از نسخه Android 5.0 به بالا را پشتیبانی کند.

    می توانید پیشنهادات و نظرات خود را نیز ایمیل کنید. Max [@] Asrez {.DOR.} com

    Hi, I'm Max Base.

    GitHub team did work on the official GitHub application for the iOS platform and fortunately unveiled at the big event and conference(GitHub Universe 2019 on November 13-14, 2019). As a member of the company, I have the promise that the app will launch for Android.

    This app is currently under development and has not been unveiled yet.

    This app is designed to support Android 21+ API and will support Android 5.0 or later.

    You can also email your suggestions and comments. Max [@] Asrez {.DOR.} com

    Best,

    Max Base

    GitHub-APP-iOS.jpg

     

    1546157682482731460_mobile-work-all-2.pn

    29235157682482727545_mobile-triage-all.p

     

    3900157682482736585_mobile-nigode-all--m

    4116015768248237796_mobile-nigode-all.pn

    7086157682482713148_mobile-contribute-al

    11133157682483611776_mobile-beta-all.png

    با تشکر

    Max Base / مکس بیس

  7. اولین پلتفرم آموزشی چند منظورهٔ بومی

    اگر شما به دنبال فراگیری مهارت خاصی در زندگی خود هستید، فانوکس بستر مناسبی برای شما است؛ نام فانوکس الهام گرفته از  فانوس دستی است که نماد پیدا کردن  مسیر  و نور راهنما تا رسیدن به مقصد می‌باشد.

    هدف :  آموزش و یادگیری هوشمند در هر زمان و هر جا برای بهبود زندگی و کسب و کار

    • زبان برنامه‌نویسی : ++C
    • انجین : سِل Cell
    • رابط کاربری: JavaScript، QML و فناوری Qt Quick
    • کتابخانه‌ها : STL, OpenSSL, Curl و Qt
    • سمت سرور: Php7.2 و  MySQLi MariaDB (در آینده همین بخش رو هم احتمالاً با ++C توسعه بدم).
    • رابط‌های برنامه‌نویسی: Restful Api v.1.0 در قالب JSon
    • نسخهٔ فعلی: ۰.۵ آلفا
    • پلتفرم‌های پشتیبانی دسکتاپ : Windows, macOS, Linux
    • پلتفرم‌های پشتیبانی موبایل و تبلت : iOS, Android, iPadOS

    macbook-2.png

    ویژگی‌های فانوکس چیست و چگونه آن را متمایز می‌کند؟

    نصب و اجرای آسان

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

    حساب کاربری هماهنگ شده

    در فانوکس شما می‌توانید اقدام به مشاهده، جستجو و بررسی پکیج‌های آموزشی کرده و با ثبت‌نام و ایجاد حساب کاربری در پلتفرم به ویژگی‌های پایه‌ٔ نرم‌افزار دسترسی داشته باشید که شامل، جستجو، بررسی، مشاهده‌ٔ سرفصل‌های آموزشی، مشاهده و تحقیق در رابطه با اساتید و سوابق آن‌ها، همچنین پیش خرید یا پیش ثبت‌نام برای تهیه آموزش دسترسی داشته باشید. در صورتی که نیاز به ویژگی‌های خاص و حرفه‌ای داشتید می‌توانید حساب کاربری خود را ارتقاع دهید.
     
    علائم نظارتی
    یکی از رسالت‌های مهم فانوکس در این است که به کاربران و علاقه‌مندان امکان انتخاب درست و مطمئن را فراهم سازد. فانوکس با بررسی سوابق اساتید که بر گرفته شده از بازخورد‌های کاربران است و همچنین بررسی محوبیت، تضمین بازگشت هزینه از طرف مدرس و دیگر موارد مربوطه علائمی را در نظر گرفته است که در معرفی هر یک از پکیج‌ها فعال و یا غیر فعال نمایان می‌شوند که به کاربر کمک می‌کند تا شناخت کافی در رابطه با محتوای آموزشی داشته باشد.

    سیستم حفظ محتوای آموزشی و حقوق چاپ و نشر

    یکی از دغدغه‌های تولید کنندگان محتوای ویدیویی دانلود ویدیو‌ها توسط افراد سودجویی است که با قرار دادن این ویدیوها در کانال‌های تلگرامی و ... باعث هدر رفتن زحمات شما می‌شود، زحماتی که ساعت‌ها و هفته وقت صرف تولید یک محتوای آموزشی شده و منبع درآمد شماست به راحتی با چند کلیک به هدر می‌رود. مطمئنن بارها در انجمن‌ها و گوگل مواردی همچون «عدم دانلود محتوای آموزشی، عدم دانلود ویدیو، عدم دانلود ویدئو، جلوگیری از دانلود ویدیو در سایت، جلوگیری از دانلود فیلم» را مطرح و سرچ کرده‌اید و هر بار به در بسته خورده‌اید. به همین خاطر فانوکس بعنوان یک بستر آموزشی با توجه به اهمیت این موضوع سیستم عدم دانلود ویدئو را بر روی پلتفرم پیاده سازی کرده است تا دغدغه شما را به عنوان یک تولید کننده محتوای ویدیویی که منابع درآمدی‌تان از این راه است را به حداقل برساند.

    معمولاً در پلتفرم‌های رایج به دلیل میزبانی داده و پخش آن بر روی صفحات وِب دسترسی به لینک‌ها و دانلود آن توسط ابزار‌های دانلود راحت است. اما در فانوکس به دلیل عدم وابستگی به مرورگر امکان دریافت فایل‌های شما را به شکل خیره کننده‌ای مخفی و حفظ کرده است. البته این ویژگی در فاز‌های اول از امنیت بسیار بالایی برخوردار نیست اما تدارکاتی در دست توسعه می‌باشد که بتوانیم به طور کامل حتی بدون استفاده از روش‌های معکوس و هک حفظ اطلاعات را به حداکثر خود برسانیم.

    البته با توجه به رسالت فانوکس سیستم ترغیب کننده‌ٔ کاربر برای جمع‌آوری امتیاز و کسب اعتبار مصرف کننده را ترغیب به استفاده از پلتفرم می‌کند چرا که بدون استفاده‌ٔ آنلاین از پلتفرم نه سیستم امتیاز‌دهی و باشگاه مشتریانی وجود دارد و نه کسب اعتبار، دریافت تخفیف و تشکیل شبکه‌ٔ اجتماعی آموزشی!

    مرکز به‌روز رسانی

    هر سیستم نرم‌افزاری در یک چرخه‌ٔ تولید و توسعه قرار می‌گیرد که بعد از انتشار نسخه‌های اولیه مُدام در حال تازه‌سازی (به‌روز‌ رسانی) و حل مشکلات و یا بازخورد‌های کاربری است. در فانوکس سیستم به‌روز رسانی به گونه‌ای طراحی شده است که در صورت وجود هر گونه تغییرات نهایی شده از طرف تیم توسعه آن را به صورت مستقیم از سمت سرور‌های فانوکس به نرم‌افزار اطلاع می‌دهد. در صورتی که نرم‌افزار نصب شده فاقد بسته‌های جدید باشد آن را به طور خودکار با جزئیات کامل به شما اطلاع می‌دهد تا آن را دریافت و به‌روز رسانی کنید. یک ویژگی خاص در این بخش از فانوکس این است که به‌روز رسانی‌های احتمالی مستقیماً به تمامی نسخه‌های مربوطه اعمال می‌شود. در واقع در صورتی که در هسته‌ٔ نرم‌افزار یا بخش رابط کاربری آن تغییراتی اعمال شود سیستم به صورت خودکار نوع پلتفرم آن را تشخیص و بسته‌های مربوط به آن پلتفرم و معماری سخت‌افزاری را اعمال می‌کند. جالب است بدانید، به‌روز رسانی‌های عمیق سریعاً و بدون تاخیر در تمامی پلتفرم‌ها اتفاق خواهد افتاد و این ویژگی را مدیون انجین سِل هستیم.
     
    امتیاز‌ها و نظرات
    طبیعی است که کاربر باید بتواند نسبت به آموزش‌ و حتی اساتید انتقادات و پیشنهاداتی را داشته باشد. بر اساس رسالت فانوکس این حق مسلم کاربر است که نسبت به مطالب آموزشی نظرات و امتیازات مشخصی را ارائه دهد. بنابراین افزایش سطح کیفیت آموزشی و تغییر در رتبه‌ٔ یک پکیج یا استاد تاثیر مستقیم در نظرات و امتیازاتی دارد که از طرف هنرجویان اعمال می‌شود. سیستم نظرات و امتیازات فانوکس این امکان را فراهم می‌سازد تا شما در صورتی که وارد حساب کاربری خود شده‌اید، بتوانید نظرات و امتیازات مربوط به پکیج آموزشی را ارائه دهید.
     
    باشگاه مشتریان هوشمند
    فانوکس به گونه‌ای طراحی شده است که مجهز به سیستم هوشمند باشگاه مشتریان است. در این باشگاه بر خلاف پلتفرم‌های رایج آموزشی، کاربران و اساتید نسبت به هر واکنش امتیازاتی را دریافت می‌کنند که منجر به دریافت اعتبار به عنوان تخفیف و یا ویژگی‌های دیگر می‌شود. در سیستم باشگاه مشتریان فانوکس قواعدی پیاده سازی شده است که به هنرجو اجازه می‌دهد تا با پیگیری و ادامه‌ٔ روند آموزشی به مراتب امتیازاتی را جمع‌آوری کند که در نتیجه‌ٔ نهایی آن موثر باشد.

    اهداف باشگاه مشتریان فانوکس
    • - افزایش تعامل و ارتباط با کاربران و مشتریان
    • - حفظ و وفادارسازی و قدردانی از مشتریان
    • - ایجاد یک تجربه متمایز و لذت بخش نمودن تجربه مشتری
    • - ارائه پاسخی شایسته در مقابل اعتماد مشتریان
    • - دادن جوایز مختلف به مشتریان در ازای خرید آنها در فانوکس و نوشتن نظرات و معرفی دوستان
    • - برگزاری قرعه‌کشی هر چند ماه یکبار
    • - ارائه کالاهای متنوع با تخفیف به مشتریان

    فانوکس پلاس

    فانوکس پلاس با هدف خرید لذت بخش و جلب رضایت مشتری ایجاد شده است. در همین راستا "باشگاه مشتریان فانوکس" با ترکیب و هماهنگی خود با ویژگی فانوکس پلاس به عنوان سیستم امتیازدهی به مشتریان عمل می‌کند. بنابراین امتیاز خرید بعد از اولین ورود به فانوکس تحت سیستم فانوکس‌ پلاس محاسبه می‌شود.

    قوانین فانوکس‌پلاس
    پس از عوضیت در فانوکس به ازای ثبت نام اولیه مقدار ۳ امتیاز دریافت خواهید کرد که توسط سیستم امتیاز‌دهی هوشمند محاسبه می‌شود.
    - امتیاز ثبت نظر: برای هر نظر تائید شده ۵ امتیاز تعلق خواهد گرفت. محصولی که ثبت نظر در خصوص آن صورت می‌گیرد می‌بایست توسط مشتری خریداری شده باشد. نظر ثبت شده باید با قوانین "ثبت نظر" فانوکس منطبق بوده و پس از تایید نظر توسط فانوکس امتیاز در حساب کاربر منظور می‌شود. سقف امتیاز ثبت نظر ۲۴۰ امتیاز در هر سال می‌باشد.
    - امتیاز دعوت از دوستان: به ازای اولین خرید موفق و قطعی دوست دعوت شده ۱۵ امتیاز به دعوت‌کننده تعلق می‌گیرد. سقف امتیازات دعوت از دوستان ۵۰۰۰ امتیاز در سال می‌باشد.برای دعوت از دوستان می‌بایست با استفاده از لینک مربوط به دعوت از دوستان که مختص هر کاربر می باشد نسبت به دعوت از دوستان اقدام به عمل آید.
    امتیاز مربوطه در صورتی به مشتری دعوت‌کننده تعلق می‌گیرد که دعوت‌شونده قبلا عضو فانوکس نبوده باشد و بعد از دریافت لینک دعوت با کلیک روی آن ثبت‌نام نموده و سپس مبادرت به اولین خرید از فانوکس نماید. لازم به ذکر است پس از ثبت‌نام از طریق لینک دعوت یاد شده، یک کد تخفیف ۱۰ هزار تومانی به شخص دعوت‌شده برای اولین خرید ایشان از فانوکس که بیشتر از ۱۰۰ هزار تومان باشد، تعلق خواهد گرفت.

    سیستم تخفیف

    سیستم تخفیف فانوکس برای کمک به تهیه کنندگان آموزش با هزینه‌ٔ مقرون به صرفه می‌باشد. بنابراین با توجه به وضعیت اقتصادی و معیشتی مردم عزیزمان سعی شده است تا با بیشترین میزان کمک به کاهش هزینه‌ها از طریق کمک‌های سیستم باشگاه مشتریان هوشمند و همچنین سیاست‌های تخفیف‌های قابل اعمال از طرف اساتید میسر شود. بنابراین مجموع امتیاز‌های کسب شده به علاوهٔ تخفیف‌های اعمال شده توسط اساتید ممکن است در برخی از مواقع موجب شود تا یک پکیج آموزشی به صورت کاملاً رایگان در اختیار عزیزان قرار بگیرد (با توجه به یادگیری حق همه‌ٔ ماست) این سیاست با در نظر گرفتن هزینه‌های مصرفی پلتفرم مدیریت خواهد شد.

    درگاه بانکی ایمن

    بخشی از صداقت و رسالت فانوکس در این است که تمامی جزئیات مالی و تراکنش‌ها را برای کاربر (هنرجویان) و تولید کننده‌های محتوا (اساتید) شفاف‌سازی کند. بنابراین درگاه‌های بانکی به کار گرفته شده در این پلتفرم مستقیماً با بانك ملت (و درگاه شاپرک به‌پرداخت ملت، به عنوان بزرگترین درگاه مجازی کشور است). تمامی تراکنش‌های موفق و نا موفق در سیستم به طور کامل تحت کُد تراکنشی مشخص و انحصاری F A N O O X و اطلاعات سمت بانکی ثبت می‌شوند که به کاربر اجازه می‌دهد تا در مواقع لزوم از میزان تراکنش‌های پرداختی با جزئیات دقیق مطلع باشد.
     
    دستیار هوشمند
    دستیار هوشمند فانوکس هماهنگ با هسته‌ٔ مرکزی نرم‌افزار و توسع‌یافته به سبک هوش مصنوعی کار می‌کند و به عنوان یک استاد مجازی در کنار دنبال کننده‌ٔ آموزش‌ها فعال خواهد بود تا در مواقع لزوم اطلاعات و یا رسیدگی‌های مورد نیاز را نسبت به دوره‌های آموزشی و تکالیف و وظایف کاربران اقدام کند. این ویژگی در نسخه‌های آینده امکان سفارشی سازی و شخصیت سازی ویژه خواهد داشت.

    کتابخانهٔ هوشمند

    کتابخانهٔ فانوکس به عنوان بخش مجزا و اختصاصی برای کاربر در نظر گرفته شده است، در صورتی که کاربر پکیجی را پسندیده و یا خرید کرده باشد می‌تواند آن را به کتابخانهٔ هوشمند خود اضافه کند. این کتابخانه به خاطر قابلیت بررسی و آنالیز وضعیت مرور پکیج‌ها توسط کاربر می‌تواند اطلاعات دقیقی از میزان زمان و مراحل سپرسی شده مربوط به هر دوره را مشخص و لیست کند.
     
    پخش کنندهٔ چند‌رسانه‌ای اختصاصی
    یکی از ویژگی‌های خاص فانوکس پخش‌کنندهٔ چندرسانه‌ای اختصاصی آن است که با قابلیت‌های خود با تمام سادگی امکان پخش فایل‌های چند-رسانه‌ای تولید شده توسط واحد استودیو فانوکس را فراهم می‌کند. این سیستم امکان پخش با کیفیت بالا تا 4K را ارائه می‌دهد.

    یادداشت برداری

    فانوکس امکان یادداشت برداری از نکات مهم و کلیدی آموزش‌ها در حین یادگیری برای کاربر را فراهم می‌کند تا در صورت نیاز کاربر بتواند یادداشت مورد نظر خود را به فصل یا بخش مورد نظر اضافه کند.

    تهیه و خرید گروهی

    معمولاً به خاطر عدم توانایی فردی برای خرید و استفاده از آموزش‌ها، نیاز به این است که آموزش مربوطه به صورت مشترک تهیه شود. فانوکس به کمک شبکه‌ٔ اجتماعی اختصاصی خودش بین گروه‌ها این امکان را فراهم می‌کند تا شما با ایجاد گروه بین دوستان و آشنایان خود بتوانید به کمک هم یک آموزش را به صورت اشتراکی تهیه و به صورت جداگانه استفاده کنید.

    سیستم پیش‌خرید (پیش‌فروش)

    معمولاً اساتید به دنبال این هستند که برخی از محصولات خود را به صورت پیش‌فروش تا قبل از آماده شدن محتوای آن ارائه دهند. این امکان در فانوکس با در نظر گرفتن حساب کاربری ویژه تعبیه می‌شود که به اساتید اجازه می‌دهد تا پکیج مورد نظر خود را به صورت ویژه پیش‌فروش کنند. کاربران و علاقه‌مندان برای تهیه آن می‌توانند هر فصلی که آماده می‌شود را مرحله به مرحله خرید نمایند که روش پرداخت آن به صورت خودکار نسبت به مراحل ساخت محتوا صورت می‌گیرد.

    feature-2.png

     

  8. پس از انتشار مقاله اختصاصی Intel در زمینه گرافیک مجتمع نسل جدید آن با نام Gen 11 و پس از آن جنجالی که با اولین بنچمارک در رزولوشن 1080p ادامه یافت، در تعطیلات نوروزی حسابی سر و صدایی به پا کرده است؛ این تراشه گرافیکی مجتمع در چند پلتفرم پردازشی CPU محور اینتل نصب خواهد شد و بد نیست بدانید که اولین نسل با نام Ice Lake شناخته خواهند شد.

    2018_ArchitectureDay_DavidBlythe_FINALpage.jpg

    اینتل به تازگی یک درایور جدید برای تراشه های گرافیکی خود در ویندوز 10 را منتشر کرده است که به همراه داشبورد و برنامه نرم افزاری جدیدی است که به تازگی اخبار آن را برای شما عزیزان پوشش داده بودیم؛ اما نکته ای که در این درایور به چشم می خورد، لو رفتن عمدی یا سهوی اسامی برخی از CPU و تراشه های گرافیکی داخلی است که اینتل به زودی معرفی خواهد کرد.

    در این لیست 13 نوع تراشه با معماری جدید گرافیکی Gen11 به چشم می خورند که از نسل Ice Lake خواهند بود. گرافیک مجتمع Iris Plus Graphics 950 قوی ترین پردازشگر این نسل است که دارای 64 واحد EU خواهد بود. این تراشه گرافیکی در پردازنده های Core i7 و Core i9 نیز نصب خواهد شد. گرافیک دوم با نام Iris Plus Graphics 940 شناخته می شود که در پردازنده های Core i5 نیز مورد استفاده قرار می گیرند. Iris Plus Graphics 940 ها با همین تعداد واحد EU دارای فرکانس پایین تری هستند.

    سپس Iris Plus 930 و Iris Plus 920 را شاهد هستیم که تعداد واحد های EU آنها نیز 48 و 32 عدد است. iGPUهای Gen11 همچنان در مدل های کلیدی GT1 و GT2 معرفی می شوند. برای اطلاعات بیشتر به زمان بیشتری نیاز داریم. شایان ذکر است که لیتوگرافی تولید در این نسل به 10 نانومتری کاهش یافته است.

  9. دو هفته پیش، نشست ۲۰۱۸ سی‌پلاس‌پلاس آغاز شد. شرکت کننده‌ها مدال‌های خودشان را دریافت کردند چرا که همه‌ چیز با هماهنگی بسیار خوبی به پایان رسید. این رویداد به عنوان یکی از چندین رویداد مهمC++ بشمار می‌رود که هرساله توسط حامیان و علاقه‌مندانش برگزار می‌شود.

     

    سخنان کلیدی

    امسال در این رویداد سه یادداشت کلیدی وجود داشت، که با حضور Andrei Alexandrescu ،Lisa Lippincott و Nicolai Josuttis ارائه شد.

    IMG_0399_600.JPG

    اولین سخنران Andrei Alexandrescu بود، او این کنفرانس را با افکار و اندیشه‌های خودش برای شروع آغاز کرد عنوان موضوع آن به بَد بودنِ کپی constexpr از static if اشاره می‌کرد. او یک سخنران سرگرم کننده است، بنابراین سخنرانی او بسیار طبیعی در مورد یادداشت‌های خودش منعکس می‌شد. همچنین او به عنوان یک توسعه‌دهندهٔ ++C به نقاط بسیاری اشاره کرد که کمیتهٔ استاندارد سازی زبان حرف‌های او را تایید می‌کرد.

    IMG_0620_600.JPG

    سخنران دوم Lisa Lippincott روز دوم را با یک سخنرانی آغاز کرد که دیدگاه‌های مختلفی در مورد محاسبات و منطق که در آن به کار می‌رود ارائه داد. زمانی که مُجری لیزا را دعوت کرد، می‌دانست که این موضوع به عنوان یک نکته مهم برای فکر کردن است، چیزی که همه نمی‌توانند به طور مستقیم آن را درک کنند و به آن دسترسی پیدا کنند. اما این تلنگری برای نحوهٔ درک کُد از دیدگاه ریاضی و دیدگاه جدیدی بود.

    IMG_1000_600.JPG

    سخنران سوم و آخر Nicolai Josuttis بود که در مورد، او اولین سخنران در نشست Hartmut Kaiser در سال ۲۰۱۴ بود. در آن سخنرانی بسیار خوب درخشیده، بنابراین در قسمت سوم نقص‌هایی را با جزئیات در مورد نقاط خشن ++C نشان داد. این سخنرانی بسیار صادقانه بود! چرا که بسیاری از جزئیات خشن بودن سی‌پلاس‌پلاس را عنوان کرد که همگی با آن موافق بودند.

     

    مذاکرات، مسابقه و گفتگوها‌ی چند دقیقه‌ای

    جلسات و رویداد‌های مرتبط با ++C همیشه گفتگو‌های بسیار خوبی دارد، و با یک مسیر مشخص که هدفش آوردن سخنرانان جدید با دیدگاه‌های جدید است برگزار می‌شود. بازخورد سخنران‌ها در این رویداد خوب بود چرا که به برخی از نکات در مورد چگونگی بهبود‌ها اشاره کردند.

    IMG_0728._600.JPG

    IMG_0871_600.JPG

    تصویر بالا مربوط به Hana Dusíková است که می‌توان به آن بهترین نمره را داد. بهترین سخنرانی هم مربوط به  Andrei Alexandrescu بود که دنبال شد. در اولین عصر این رویداد، امتحان (Quiz) برجسته‌ترین مورد رویداد در آن روز بود. سازماندهی آن توسط Diego  و اسپانسری آن توسط Conan است که برای چند سال اخیر حمایت شده است. به نظر می‌رسید که سوالات امتحانی این سال سخت‌تر از سوالات رویداد قبلی در سال گذشته بوده است. اما بار دیگر این سرگرمی ترکیب بسیار خوبی با ترس از سی‌++ را داشت.

    هر یک از سوالات امتحانی یک خروجی از کُد را تولید می‌کردند، که هر گروه باید برای کسب امتیاز آن را می‌نوشتند. ده نوع کُد امتحانی وجود داشت که تهیه کنندهٔ گزارش برای به تصویر کشیدن آن‌ها زیاد خوب عمل نکرده است. بنابراین تصویر زیر مربوط به سوالات چالشی در مورد سی‌پلاس‌پلاس است:

    IMG_0542_600.jpg

    گفتگو‌های کوتاه در طی جلسات سی‌پلاس‌پلاس صورت می‌گیرد. اما در سال‌های گذشته روش به گونه‌ای تغییر یافته است که سوالات پرسیده شده باید با گفتگو‌ها و سوالات دیگر رقایبت می‌کردند. با این حال این یک قالب و روش جالبی بود که نتیجهٔ موفقیت آمیزی را داشت. همهٔ شرکت کننده‌ها می‌توانستند این سوالات رو ببینند و در مورد آن‌ها تفکر کرده و پاسخ دهند.

    • نقل قول

      نتیجه : این رویداد بیشتر به عنوان یک دوره‌همی و گفتگو در مورد رفتار‌های خشن زبان سی‌پلاس‌پلاس و پاسخ‌های سرگرم کننده در مورد آن‌ها را فراهم کرده است و به ویژگی‌های جدید زبان در آن پرداخته نشده است.

    نکته: شما می‌توانید تصاویر ویدیویی مربوط به این رویداد را از کانال رسمی آن در یوتیوب دریافت کنید.

     

×
×
  • جدید...