<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>پست‌های انتشارات کوئرامگ | مجله تخصصی برنامه‌نویسان</title>
        <link>https://virgool.io/Quera-Mag/feed</link>
        <description>هدف ما در Quera اینه که خونه دوم توسعه‌دهندگان ایران باشیم! آموزش برنامه‌نویسی در کوئراکالج، رقابت در قالب مسابقات آنلاین، فرصت‌های شغلی در حوزه برنامه‌نویسی و در نهایت کوئرامگ که یک مجله تخصصی برای توسعه‌دهندگانه، خدمات ما در این راستا محسوب میشن.</description>
        <language>fa</language>
        <pubDate>2026-06-16 14:56:16</pubDate>
        <image>
            <url>https://files.virgool.io/upload/publication/zkstdrosq08o/d9db55.png</url>
            <title>کوئرامگ | مجله تخصصی برنامه‌نویسان</title>
            <link>https://virgool.io/Quera-Mag</link>
        </image>

                    <item>
                <title>بهبود دوره کوئرا کالج «برنامه نویسی پایتون پیشرفته و تفکر  شیء‌گرا»</title>
                <link>https://virgool.io/Quera-Mag/%D8%AA%D8%BA%DB%8C%DB%8C%D8%B1%D8%A7%D8%AA-%D8%AF%D9%88%D8%B1%D9%87-%DA%A9%D9%88%D8%A6%D8%B1%D8%A7-%DA%A9%D8%A7%D9%84%D8%AC-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%D9%BE%DB%8C%D8%B4%D8%B1%D9%81%D8%AA%D9%87-%D9%88-%D8%AA%D9%81%DA%A9%D8%B1-%D8%B4%DB%8C-%D9%85%D8%B1%D8%AF%D8%A7%D8%AF%D9%85%D8%A7%D9%87-%DB%B1%DB%B4%DB%B0%DB%B0-h1lvvrd0kkhq</link>
                <description>سلام!همون‌طور که احتمالاً در جریان هستید، دوره پایتون پیشرفته کوئرا با شروع تابستان ۱۴۰۰ آپدیت شده. شما می‌تونید از ورژن بهبود‌ یافته این دوره که مطالب جدیدی بهش اضافه شده و مطالب قبلی اون هم تغییراتی داشته، استفاده کنید.خب بریم و یه توضیحی در‌مورد پروسه‌ی ایجاد این تغییرات و کلاً روند بهبود دوره بدیم.قبل از هر کاری، با تعدادی از دانشجویان دوره تماس گرفتیم و نظر‌سنجی‌های هر فصل رو هم بررسی کردیم تا از زبان خود شرکت‌کننده‌ها بفهمیم که توی کدوم فصل‌ها بیشتر به مشکل برمی‌خورن و مشکلات اصلی مربوط به کدوم فصل‌ها هستن. کامنت‌های هر سؤال یا درس‌نامه و سؤالات خصوصی اون‌ها رو هم بررسی کردیم تا بتونیم درس‌نامه‌ یا تمرین‌هایی که برای شرکت‌کننده‌ها گنگ و مبهم بودن یا درجه سختی زیادی داشتن رو شناسایی کنیم. در‌نهایت طبق این بازخورد‌ها، متوجه شدیم که روی چه قسمت‌هایی از دوره باید تجدید‌نظر اساسی و یا جزئی صورت بگیره.صفحه دوره کوئرا کالج «برنامه نویسی پایتون پیشرفته و تفکر شی‌»بهبود فصل‌های شی‌ءگرایی و مباحث تکمیلی شی‌ءگراییطبق نتایجی که از روند پیشبرد دوره توسط شرکت‌کننده‌ها داشتیم، فهمیدیم که شرکت‌کننده‌ها توی فصل‌های مربوط به شیء‌گرایی بیشترین مشکل رو داشتن و چون شیء‌گرایی مبحث پیچیده‌ای هستش، خیلی سخت می‌تونستن دوره رو جلو ببرند. بنابراین، تمرکزمون رو روی فصل‌های «شیء‌گرایی» و «مباحث تکمیلی شیء‌گرایی» گذاشتیم و از همین فصل‌ها هم کارمون رو شروع کردیم.درس‌نامه به درس‌نامه پیش رفتیم. کامنت‌های مربوط به هر درس‌نامه رو خوندیم؛ سؤال‌های خصوصی که در‌مورد هر درس‌نامه یا تمرین زده شده بود رو بررسی کردیم و با تعدادی از شرکت‌کننده‌ها هم تماس گرفتیم تا نظرشون رو در‌مورد این فصل‌ها بدونیم. در‌نهایت طبق داده‌هایی که بدست آوردیم، متوجه شدیم که هر درس‌نامه یا تمرین رو چقدر و چجوری باید تغییر بدیم. برای بعضی از قسمت‌ها، یک درس‌نامه جدید برای توضیح مفصل‌تر و یا یک تمرین جدید برای فهم بهتر موضوع طراحی شد. در‌حالی‌که در بعضی قسمت‌ها فقط چند جمله به متن درس‌نامه و یا چند راهنمایی به متن تمرین اضافه کردیم.«تمرین جدید فصل شئ‌گرایی»هر‌چند تمرکز اصلی‌ ما بهبود فصل‌های مربوط به شیء‌گرایی بود، ولی حواسمون به فصل‌های دیگه هم بود و می‌دونستیم که باید روی درس‌نامه یا تمرین‌هایی که دانشجویان رضایت کمتری ازشون داشتند هم کار کنیم.بهبود فصل‌های تمرین‌های دوره‌اینکته دیگه‌ای که متوجه‌اش شدیم این بود که بعضی سؤالات فصل‌های «تمرین‌های دوره‌ای» علی‌الخصوص «تمرین‌های دوره‌ای ۱» خیلی جنبه ریاضی داشتند و شرکت‌کننده باید یک تایمی رو صرف درک الگوریتم ریاضیشون می‌کرد. به‌همین‌خاطر کل تمرین‌های فصل «تمرین‌‌های دوره‌ای ۱»‌ رو از نو کوبیدیم و ساختیم و به فصل «تمرین‌های دوره‌ای ۲» هم ۲ تا سؤال جدید اضافه کردیم تا بتونید مباحث دوره رو بیشتر تمرین کنید.تغییر ورژن پایتون به ۳.۹از‌اونجایی‌که ورژن ۳.۹ پایتون منتشر شده و یکی از مزیت‌های اصلی دوره ما به‌روز بودنشه، از‌این‌به‌بعد، سیستم‌ داوری ورژن ۳.۹ پایتون رو هم می‌شناسه و شما می‌تونید کدها رو با این ورژن از پایتون هم بزنید و ارسال کنید. به‌علاوه، یک‌سری از ویژگی‌هایی که در پایتون ۳.۹ اضافه شدند رو هم در دوره پوشش دادیم و راجع بهشون صحبت کردیم.صفحه دوره کوئرا کالج «برنامه نویسی پایتون پیشرفته و تفکر شی‌»بهبود‌های دیگربعد از بهبود این فصل‌ها که در‌واقع اصلی‌ترین بخش کارمون بود، به سراغ فصل «گرافیک در پایتون» رفتیم. این فصل به تغییرات کمتری نسبت به دو فصل قبل احتیاج داشت و فقط یک درس‌نامه‌ی جدید بهش اضافه و تغییراتی روی تعدادی از درس‌نامه‌هاش اعمال شد.«پروژه مار بازی»نکته دیگه‌ای که از تماس‌هایی که با شرکت‌کننده‌های دوره داشتیم، متوجه شدیم این بود که درس‌نامه رجکس یکم گنگ هستش و کلاً شزکت‌کننده‌ها نمی‌تونن با این مبحث زیاد ارتباط برقرار کنن. بنابراین روی درس‌نامه «رجکس چیست؟» هم تغییراتی ایجاد کردیم تا فهم این مبحث برای دانشجو‌ها راحت‌تر بشه. به‌علاوه، یک تمرین کاربردی‌تر از این مبحث به دوره اضافه کردیم تا یکم دلیل استفاده از رجکس برای شرکت‌کننده‌ها ملموس‌تر بشه.شرکت‌کننده‌های دوره، تمرین‌های فصل «کار با فایل» رو خیلی چالشی می‌دونستن. ولی از‌اون‌جایی‌که این چالش‌ها از اون‌ها برنامه‌نویس‌های بهتری می‌سازه، به‌جای اینکه تمرین‌ها رو ساده‌تر کنیم، به هر تمرین یک یا چند راهنمایی ساده (که معمولاً شامل اشتباهاتی بودند که اکثر شرکت‌کننده‌ها دچارش می‌شدند) اضافه کردیم.یه کار جدید و مثبت دیگه‌ای هم که انجام دادیم، اضافه کردن درس‌نامه «اهداف فصل» به همه‌ی فصل‌های دوره بود. دلیلش هم این بود که شرکت‌کننده بتونه قبل از اینکه فصلی رو شروع کنه، این بخش رو بخونه و یک دید کلی نسبت به مباحثی که قرار هست در اون فصل باهاشون آشنا بشه، پیدا کنه.و در‌نهایت چون یک‌سری تمرین به دوره اضافه شده، امتیاز بعضی از سؤالات قبلی دوره و در‌نتیجه سیستم‌ امتیاز‌دهی و گواهی دوره هم تغییر کرده. شما می‌تونید از صفحه اصلی دوره، سیستم امتیازدهی جدید رو ببینید.حرف پایانیبچه‌های تیم بهبود نهایت تلاششون رو کردن تا با استفاده از فیدبک‌هایی که از شما دریافت کردیم، یک ورژن بهبود‌یافته از دوره پایتون پیشرفته ارائه بدن.در آخر دوست داریم بدونید که نظرات شما برای ما بسیار ارزشمنده و مسیر بهبود‌های بعدی دوره رو برای ما روشن می‌کنه. بنابراین اگر باز هم نکته‌ای، پیشنهادی و یا حتی انتقادی در‌مورد دوره و آپدیت اخیرش داشتید، می‌تونید اون‌ها رو از‌طریق راه‌های ارتباطی کوئرا و یا از‌طریق پشتیبانی خود دوره با ما در میان بگذارید. مطمئن باشید که حتماً از این پیشنهادها در بهبودهای بعدی استفاده خواهیم کرد تا بتونیم یک دوره مفید و منسجم رو به شما ارائه بدیم.دوره کوئرا کالج «برنامه نویسی پایتون پیشرفته و تفکر شیء‌گرا» به شما کمک کنه تا برنامه‌نویسی رو در مسیر درستی یاد بگیرید :)صفحه دوره کوئرا کالج «برنامه نویسی پایتون پیشرفته و تفکر شی‌»</description>
                <category>کوئرامگ | مجله تخصصی برنامه‌نویسان</category>
                <author>Quera</author>
                <pubDate>Tue, 03 Aug 2021 19:01:15 +0430</pubDate>
            </item>
                    <item>
                <title>پنجمین دوره مسابقات برنامه‌نویسی کشوری کدکاپ در راه است</title>
                <link>https://virgool.io/Quera-Mag/%D9%BE%D9%86%D8%AC%D9%85%DB%8C%D9%86-%D8%AF%D9%88%D8%B1%D9%87-%D9%85%D8%B3%D8%A7%D8%A8%D9%82%D8%A7%D8%AA-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%DA%A9%D8%B4%D9%88%D8%B1%DB%8C-%DA%A9%D8%AF%DA%A9%D8%A7%D9%BE-%D8%AF%D8%B1-%D8%B1%D8%A7%D9%87-%D8%A7%D8%B3%D8%AA-svvgysjtkm37</link>
                <description>پنجمین دوره مسابقات برنامه‌نویسی کدکاپ از ۳۰ آبان تا ۲۸ آذر ۹۹ برگزار می‌شود و با توجه به شرایط این روز‌های کشور و برای حفظ سلامتی شرکت‌کنندگان، این مسابقات تنها شامل مراحل آنلاین است. کدکاپ اولین مسابقه‌‌ برنامه‌نویسی کشور و منطقه است که به صورت همزمان ده‌ها زبان برنامه‌نویسی و تکنولوژی پرکاربرد را در‌بردارد. این مسابقات به صورت سالانه در دانشگاه صنعتی شریف برگزار می‌شود و تا به‌حال ۴ دوره از این مسابقات برگزار شده است. Quera و مرکز نوآوری شریف برگزارکنندگان مسابقات کدکاپ هستند.حامی این دوره از مسابقات ویستا سامانه آسا خواهد بود و جوایز این دوره ۵۰ میلیون تومان می‌باشد.در صورت تمایل میتوانید به صورت رایگان در این مسابقات به صورت دلخواه شرکت کنید، رقابت کنید، جایزه بگیرید و به شرکت‎‌های IT معرفی شوید. ثبت‌نام از طریق codecup.irکدکاپ در چهار دوره با شرکت بیش از ۷۰۰۰ نفر از برنامه‌نویسان سرتاسر کشور در دانشگاه صنعتی شریف برگزار شد.  تمامی مراحل مسابقات کدکاپ، از ثبت نام تا شرکت در مسابقات و اعلام نتایج در Quera برگزار می‌شود. مسابقات به صورت آنلاین بوده و کدهای ارسالی شرکت‌کنندگان توسط سامانه‌ی داوری خودکار Quera تصحیح می‌شوند. همچنین در صورتی که کد ارسالی دارای خطایی بود، شرکت‌کنندگان فرصت دارند چندین بار کد خود را تصحیح کرده تا پاسخ درست برسند.برنامه‌نویسان در هر سطحی از دانش فنی و تجربه‌‌ کاری می‌توانند در این سلسله مسابقات شرکت کنند و علاوه بر محک‌زدن مهارت‌های برنامه‌نویسی خود و رقابت با سایر برنامه‌نویسان کشور، فرصت کار در بهترین شرکت‌های کشور را پیدا کنند. هدف از برگزاری کدکاپ صرفاً یک رقابت فنی بین افراد نیست، بلکه قرار است مهارت برنامه‌نویسی شرکت‌کنندگان سنجیده شود و در صنعت فناوری اطلاعات کشور مورد استفاده قرار گیرد.کدکاپ ۴ رقابتآزمون‌ها شامل سؤال‌های متنوع (ساده تا چالشی) هستند و مشخص‌کننده‌ی مهارت افراد در برنامه‌نویسی می‌باشند.داوری خودکارداوری و نمره‌دهی کدها در این مسابقه، بر عهده‌ی Quera Test Engine (سامانه‌ی خودکار داوری پروژه) است که برای اولین بار در ایران داوری خودکار پروژه‌های برنامه‌نویسی در تکنولوژی‌های روز دنیا را انجام می‌دهد. بنابراین با توجه به سرعت بالای نمره‌دهی، فرصت رفع خطاهای کد خود را دارید.تکنولوژی‌های روززبان‎های برنامه‌نویسی بخش الگوریتمی:C, C++, Java, Python, mono C#, Php, NodeJs, Perl, Go, Ruby, Obj-C, Swift, Javascript, Haskell, Pypy3مسابقات تکنولوژی:PHP/Laravel، Python/Django، Front-End/React، Data Scienceاستخدامافراد برتر در هر مسابقه در صورت تمایل، توسط Quera به شرکت آسا و بعد به شرکت‌های IT برتر دیگر برای مصاحبه و استخدام معرفی می‌شوند. کدکاپ ۳این مسابقات زمینه‌ی مناسبی برای تعامل شرکت‌های فعال در حوزه‌ی IT کشور و افراد توانمند این عرصه فراهم ساخت و شرکت‌های بسیاری به حمایت از این مسابقات پرداختند. از آمار مهم این مسابقات میتوان به این موضوع اشاره کرد که ۵۳ درصد از شرکت کنندگان از خارج از استان تهران بودند و ۱۲ درصد از شرکت کنندگان نیز دانش‌آموز بودند، که این آمار بیانگر موفقیت این مسابقه در جذب حداکثری اقشار مختلف برنامه‌نویسان جامعه است.زمانبدی مسابقاتالهام بخش زندگی ما، شرح حال کسانی بوده که استعدادها و توانایی‌های خود را به کار میگیرند تا به موفقیت‌ها و نتایجی تازه چه برای خود و چه برای دیگران و کشور دست یابند.ثبت‌نام رایگان و اطلاعات بیشتر در مورد روند مسابقات را میتوانید از سایت codecup.ir دریافت کنید.</description>
                <category>کوئرامگ | مجله تخصصی برنامه‌نویسان</category>
                <author>فاطمه عامل</author>
                <pubDate>Tue, 17 Nov 2020 14:38:50 +0330</pubDate>
            </item>
                    <item>
                <title>قدم‌به‌قدم تا توسعه فرانت‌اند: مهارت‌های تکمیلی</title>
                <link>https://virgool.io/Quera-Mag/front-end-developer-pro-skills-rqtuk21cr8er</link>
                <description>در بخش اول این پست، با مهارت‌های اساسی برای کار در دنیای فرانت‌اند (Front-End) آشنا شدیم. اگر تازه اول راه باشید، آشنایی با CSS ،HTML و جاوا اسکریپت کارتان را راه می‌اندازد. اما اگر می‌خواهید یک توسعه‌دهنده فرانت‌اند حرفه‌ای باشید، این مهارت‌ها به هیچ‌‌وجه کافی نیستند. در این پست می‌خواهیم سراغ مهارت‌های تکمیلی برویم که کیفیت کارتان را بالا می‌برند و متخصص خبره‌تری از شما می‌سازند. مهارت‌هایی مثل تست کد، کنترل نسخه، طراحی واکنش‌گرا، بهینه‌سازی دیزاین و آشنایی با ابزارهای جانبی.What is Front-end Development? by Masoud Garousianاگر در پایان این مطلب به یادگیری یک‌جای همه این تکنولوژی‌ها علاقمند شدید، سری به دوره «آموزش پروژه‌محور طراحی وب (Front-End) کوئرا کالج» بزنید. در این دوره صفر تا صد مفاهیم jQuery ،JavaScript Bootstrap ،CSS ،HTML و Ajax را با تمرین‌ها و پروژه‌های کاربردی می‌آموزید و فرصت این را دارید که برای استخدام در اسنپ‌فود و اسنپ به مصاحبه دعوت شوید.آزمونِ کد (Testing Code)چه وب‌سایتی برای فروش بافتنی‌های مادرتان بسازید و چه سایتی جهانی برای بانکداری آنلاین، باگ‌ها همیشه بخشی از فرایند برنامه‌نویسی هستند. اگر می‌خواهید کد تمیز، بدون باگ و راحت‌فهمی بنویسید که به سادگی بشود در وقت لزوم تغییرش داد، حتما باید کدتان را به طور مداوم و در طول مسیر تست کنید. نوشتن آزمونِ کد شاید زمان‌بر باشد، اما ارزش‌اش در بلندمدت معلوم می‌شود. چند سال که گذشت، با خودتان فکر می‌کنید که عجب کار خوبی کردم آن موقع کدم را تست کردم! تست‌هایی که می‌توانید بنویسید انواع مختلفی دارند؛ مثلا:آزمون واحد (Unit Test) که در آن ریزترین اجزای کدتان را مستقل و و جدا از بقیه کد می‌سنجید. در این نوع تست به وابستگی‌ها (Dependencies) توجهی نمی‌کنید و فقط آن ماژول خاص را مورد سنجش قرار می‌دهید.آزمون یکپارچه‌سازی (Integration Test) که در آن ماژول‌هایی که قبلاً از آزمونِ واحد با موفقیت خارج شده‌اند را می‌گیرید و عملکردشان را با هم و در کنار یکدیگر بررسی می‌کنید.آزمون عملکردی (Functional Test) که کارکرد یک بخش به‌خصوص از سایت‌تان را بررسی می‌کند تا مطمئن شوید که آن قسمت همان کاری را انجام می‌دهد که شما می‌خواهید.تست کد بخش مهمی از فرایند توسعه فرانت‌اند است؛ اما خوشبختانه، در اینجا هم فریم‌ورک‌های متنوعی هستند که به دادتان برسند. هیچ نیازی نیست که همه آن‌ها را یاد بگیرید؛ می‌توانید هرکدام را دوست داشتید انتخاب کنید و تست‌هایتان را با آن بنویسید.برخی از فریم‌ورک‌های تست کد در فرانت‌اند را با هم مرور کنیم: جست (Jest) که توسط فیسبوک ساخته شده، یکی از محبوب‌ترین فریم‌ورک‌های تستینگ است. با اپلیکیشن‌های ری‌اکت خیلی خوب کار می‌کند، اما در عین حال می‌توان آن را برای هر فریم‌ورک مدرنی در جاوا اسکریپت به کار برد.موکا (Mocha) فیچر‌های خیلی زیادی دارد، روی Node.js و در مرورگر اجرا می‌شود و تست ناهمگام را برایتان ساده و مفرح می‌کند.آنزیم (Enzyme) ابزاری برای تست کامپوننت در ری‌اکت است و بررسی (Assert)، دستکاری و پیمایش (Traverse) خروجی کامپوننت‌های ری‌اکت را برایتان آسان می‌کند. آنزیم آزمون واحد نیست، بلکه چرخه عمر کامپوننت را می‌سنجد. این سه فریم‌ورک از محبوب‌ترین‌‌ها برای تست کد جاوا اسکریپت هستند، اما گزینه‌های شما به همین‌جا ختم نمی‌شود. نظرسنجی وضعیت جاوا اسکریپت در سال ۲۰۱۹، لیستی از چندین فریم‌ورک محبوب دیگر برای آزمون کد دارد که می‌توانید میزان رضایت، علاقه و آگاهی برنامه‌نویسان از هرکدام را با هم مقایسه کنید و بعد تصمیم بگیرید که با کدام جلو بروید.کنترل نسخه (Version Control) و کار با گیت (Git)در طول همه آن نشانه‌گذاری‌ها با HTML، زیباسازی‌ها با CSS و برنامه‌نویسی‌ها با JavaScript، احتمالاً چندین و چند بار کدتان را بازبینی خواهید کرد. فرض کنیم زد و یک جای کار اشتباهی پیش آمد. در این مواقع وحشتناک‌ترین چیزی که می‌تواند پیش بیاید این است که مجبور شوید همه چیز را از اول شروع کنید! کنترلِ نسخه فرایندی برای تعقیب و کنترل تغییرات ایجاد شده در کدِ منبع شما است تا لازم نباشد به چنین داستان‌های ترسناکی فکر کنید!با نرم‌افزار کنترل نسخه می‌توانید به نسخه قبلی کارتان برگردید و بدون این‌که کل کار را بکوبید، ایراد نسخه جدیدتر را پیدا کنید. نرم‌افزار متن‌باز گیت، دوست همیشه پایدار برنامه‌نویس‌ها برای این کار است که خیال‌تان را راحت خواهد کرد. کار با کنترل نسخه، مهارتی است که هم شما و هم کارفرماهای آینده‌تان از داشتنش بسیار خوشحال خواهید شد.طراحی واکنش‌گرا (Responsive) و بهینه‌سازی دیزاینآن روزها را یادتان می‌آید که فقط از یک دستگاه برای سر زدن وبسایت‌ها استفاده می‌کردیم؟ نه، من هم یادم نمی‌آید. آن روزها که پی‌سی یا حتی لپ‌تاپ تنها راه سایت دیدن بود آن‌قدر تاریخ گذشته است که نمی‌خواهم با حرف زدن در موردشان سن خودم را بالا ببرم!این روزها ما وب‌سایت‌هایمان را با دستگاه‌های متنوعی از کامپیوترها، موبایل‌ها و تبلت‌ها چک می‌کنیم. تا حالا دقت کرده‌اید که چطور این صفحات خودشان طراحی‌شان را با توجه به دستگاه شما تنظیم می‌کنند؟ این به خاطر طراحی واکنش‌گرا است. به عنوان یک توسعه‌دهنده فرانت‌اند، آشنایی با اصول طراحی واکنش‌گرا و نحوه پیاده‌سازی‌ آن هنگام کدزنی، بخشی اساسی از کار شما است.اما کار یک وب‌سایت ایده‌آل همین‌جا تمام نمی‌شود. شما شاید بهترین و جذاب‌ترین وبسایت جهان را بسازید، اما اگر لود شدن آن هزار سال طول بکشد، تلاش شما کوچک‌ترین اهمیتی برای کاربر ندارد. برای بهبود سرعت وب‌سایت کارهای خیلی زیادی می‌توان انجام داد؛ مثلاً بهینه‌سازی عکس‌ها و تغییر اندازه آن‌ها، Lazy Load، حذف لودهای غیرضروری و بهینه‌سازی کدهای CSS ،HTML و جاوا اسکریپت.مقاله پیشنهادی از کوئرا مگ: راهکارهای مبتنی بر فرانت‌اند برای بهبود کارایی اپلیکیشنآشنایی با دیگر ابزارهای جانبیابزارهای Buildاین ابزارها برای خروجی‌گرفتن (Building) و دسته‌کردن (Bundling) کد کمک شایانی به شما می‌کنند. بهترین ابزارهای Build عبارت‌اند از وب‌پک (Webpack) و رول‌آپ (Rollup). وب‌پک یک ماژول Bundle ایستا برای اپلیکیشن‌های مدرن جاوا اسکریپت است. رول‌آپ هم قطعات کوچک کد را در یک قالب بزرگ‌تر و پیچیده‌تر مثل کتابخانه یا اپلیکیشن، کامپایل می‌کند. هم‌چنین رول‌آپ فرمت استاندارد جدید نسخه ES6 جاوا اسکریپت را برای ماژول‌های کد به کار می‌برد.ابزارهای خودکارسازیانجام‌دادن همه کارهای لازم برای بهینه‌سازی وب‌سایت می‌تواند خیلی وقت‌گیر باشد. اینجا است که ابزارهای اتوماسیون به کارتان می‌آیند. برنامه‌هایی مثل گرانت (Grunt) و گالپ (Gulp) به طور خودکار خیلی از این کارها را انجام می‌دهند. اگر می‌خواهید در سفر مدام‌تان به سوی کارایی بیشتر با صرف زمان کمتر به جایی برسید، آشنایی با این ابزارها به نفع‌تان خواهد بود.پکیج‌منیجرها (مدیریت بسته)پکیج‌منیجرها به درد نصب، به‌اشتراک‌گذاری و توزیع کد می‌خورند و وابستگی‌ها را هم در پروژه‌تان مدیریت می‌کنند. ان‌پی‌ام (NPM) یکی از رایج ترین پکیج‌منیجرها برای جاوا اسکریپت است. یارن (Yarn) هم پکیج‌منیجر محبوب من است که همه کارهای NPM را می‌تواند انجام دهد. به نظر می‌رسد این روزها خیلی‌ها دارند از ان‌پی‌ام به یارن مهاجرت می‌کنند، چرا که یارن هم سریع‌تر است و هم استفاده از آن راحت‌تر.لینترها و فرمترهاتا زمانی که پروژه‌تان هنوز کوچک است، IDE محبوبتان به خوبی خطاها و مشکلات کدتان را شناسایی می‌کند و به شما نشان می‌دهد. اما وقتی با یک تیم بزرگ کار می‌کنید که هر کس در آن ابزار خودش را استفاده می‌کند و پروژه هم زیادی بزرگ شده، دیگر استفاده از IDE برای خطایابی جوابگو نیست. در اینجا است که باید سراغ لینترها بروید. لینترها ابزار شناسایی خطاها هستند که اتفاقا IDEها با کمک آن‌ها خطاها را شناسایی می‌کنند.ای‌اِس‌لینت (ESLint)، پرکاربردترین لینتر مورد استفاده در دنیای فرانت‌اند است که فرمت‌بندی کار را هم مدیریت می‌کند. در ESLint می‌توانید قوانینی مبتنی بر معیارهای کدزنی فردی/تیمی مشخص کنید تا هرجا کدتان مطابق آنها نبود، ESLint شکارش کند. اگر از ای‌اِس‌لینت خوشتان نیامد و دنبال گزینه دیگری می‌گشتید، می‌توانید سراغ پرتی‌یر (Prettier) بروید.به یادگیری برنامه‌نویسی فرانت‌اند علاقمند شدید؟ برای ثبت نام در دوره فرانت‌اند کوئرا کالج کلیک کنید.ترجمه، اقتباس و تخلیص از:&quot;5 Essential Skills Every Front End Developer Must Learn in 2019&quot; by Adhithi Ravichandran @ Programmingwithmosh&quot;The 10 Skills You Need to Land Your First Front End Developer Job&quot; by Scott Morris @ Skillcrushکوئرامگ مجله‌ای تخصصی برای توسعه‌دهندگان است که هر هفته با مطلب‌هایی در زمینه تکنولوژی، رشد فردی و آینده برنامه‌نویسی به‌روزرسانی می‌شود. برای اطلاع از آخرین مطلب‌های ما، می‌توانید توئیتر یا کانال تلگرام ما را دنبال کنید.</description>
                <category>کوئرامگ | مجله تخصصی برنامه‌نویسان</category>
                <author>مریم مقدس برهان</author>
                <pubDate>Tue, 01 Sep 2020 18:07:28 +0430</pubDate>
            </item>
                    <item>
                <title>قدم‌به‌قدم تا توسعه فرانت‌اند: مهارت‌های پایه</title>
                <link>https://virgool.io/Quera-Mag/front-end-developer-skills-ixs46xoeddhn</link>
                <description>دنیای توسعه وب، سرزمینی است که سه آرزوی بزرگ انسان‌ها در آن برآورده می‌شود: پول بیشتر، کار خلاقانه و برنامه کاری منعطف. اما از دور که به آن نگاه می‌کنیم، سرشار است از کلمات عجیب و غریب، زبان‌های بیگانه و کدهای ماورایی. با این‌حال اگر بدانیم که از کجا باید شروع کنیم، می‌بینیم که آنقدرها هم که فکر می‌کردیم سخت نبود. یک گزینه خوب برای ورود به بازار کار توسعه وب، آشنا شدن با توسعه فرانت‌اند (Front-End) است. توسعه‌دهندگان فرانت‌اند، طرح ذهنی شرکت‌ها از سایت‌شان را به واقعیت تبدیل می‌کنند. توسعه فرانت‌اند مسیر مستقیم و انعطاف‌پذیری برای ورود به دنیای برنامه‌نویسی است؛ چون فقط با کسب تعداد محدودی مهارت، می‌توانید نظر کارفرماها را به خود جذب کنید و فرصت شغلی مناسب خود را بیابید. به شما قول می‌دهم، توسعه‌دهندگان فرانت‌اند هیچ‌جا بیکار نمی‌مانند!برای موفق شدن در دنیای فرانت‌اند وب، چندین مهارت نیاز دارید که در این مطلبِ دو قسمتی قرار است شما را با آن‌ها آشنا کنم. در مطلب اول (دقیقا همین که در حال خواندنش هستید) مهارت‌های اساسی را مرور می‌کنیم؛ یعنی CSS ،HTML، جاوا اسکریپت و کتابخانه‌ها و فریم‌ورک‌های آن.اگر در پایان این مطلب به یادگیری یک‌جای همه این تکنولوژی‌ها علاقمند شدید، سری به دوره «آموزش پروژه‌محور طراحی وب (Front-End) کوئرا کالج» بزنید. در این دوره صفر تا صد مفاهیم jQuery ،JavaScript Bootstrap ،CSS ،HTML و Ajax را با تمرین‌ها و پروژه‌های کاربردی می‌آموزید و فرصت این را دارید که برای استخدام در اسنپ‌فود و اسنپ به مصاحبه دعوت شوید.مهارت اول: HTMLبرای قدم گذاشتن در وادی توسعه وب، اولین چیزی که باید یاد بگیرید HTML است. HTML یک زبان نشانه‌گذاری (Markup Language) استاندارد است که با آن صفحات وب را می‌سازند. زبان نشانه‌گذاری به زبانی گفته می‌شود که از تگ‌های به‌خصوص برای مشخص کردن بخش‌های مختلف متن استفاده می‌کند. وقتی به یک زبان نشانه‌گذاری می‌نویسیم، به خواننده نشان می‌دهیم که متن‌مان با یک نوشته معمولی در وُرد فرق دارد. HTML اولین ابزار در توشهٔ فرانت‌اندِ شما است و ساده‌ترین چیزی است که برای توسعه وبسایت نیاز دارید. در گذر سال‌ها، HTML حسابی رشد کرده و امروز جدیدترین نسخه آن HTML 5 است.مهارت دوم: CSSوقتی HTML را یاد گرفتید، متوجه می‌شوید صفحاتی که با آن طراحی کرده‌اید یک جورهایی... چطور بگویم، زشت هستند! چیزی که این صفحه‌ها لازم دارند، طرح و رنگ است و این یعنی CSS. با CSS می‌توانید صفحات‌تان را زیبا کنید و تجربه کاربری خوبی برای کاربران‌تان رقم بزنید.اضافه‌کردن رنگ، تعیین فونت‌ها، مشخص‌کردن سایز دکمه‌ها، گذاشتن تصویر پس‌زمینه، واکنش‌گرا کردن سایت برای دسکتاپ و موبایل و خیلی از زیبایی‌های دیگر صفحه وب، شاهکار دست CSS هستند. خیلی از توسعه‌دهندگان رابط کاربری، فقط با حرفه‌ای شدن در CSS و استفاده از همین یک مهارت، کلی پول درمی‌آورند.برای توسعه‌گر فرانت‌اند شدن، HTML و CSS هردو لازم و حیاتی‌اند. بدون این دو، امکان توسعه وب اصلا وجود ندارد! حتی یک فرصت شغلی برای توسعه فرانت‌اند هم نیست که این دو مهارت برای آن لازم نباشد.پیش‌پردازنده‌های CSSسی‌اس‌اس خیلی خوب است، اما محدودیت‌هایی دارد. مثلا یک مشکل آن این است که نمی‌شود در آن متغیرها و تابع‌ها را تعریف کرد یا جمع و تفریق انجام داد. این کمبودها زمانی روی اعصاب آدم راه می‌روند که پروژه بزرگ باشد و کدها مدام بیشتر و بیشتر شوند. آن وقت می‌بینید برای تغییر هر چیز جزئی‌ای باید ساعت‌ها خودتان را با نوشتن کدهای تکراری شکنجه کنید. مثلا اگر بخواهید رنگ آبی قسمت‌های مختلف سایت را تغییر بدهید، باید همه Hex Valueها (کدهای رنگی) را تک‌به‌تک پیدا و عوض کنید! پیش‌پردازنده‌های CSS آمده‌اند تا وقت و حوصله‌تان را از چنگال مشکلات CSS نجات بدهند و زندگی‌ را برای شما ساده‌تر ‌کنند.در پیش‌پردازنده‌ها، شما به زبان پیش‌پردازنده کد می‌زنید نه CSS. زبان پیش‌پردازنده به شما اجازه می‌دهد کارهایی که با CSS شکنجه بود را مثل آب خوردن انجام بدهید. مثلا برای عوض کردن رنگ آبی، فقط یکی از Hex Value‌ها را تغییر می‌دهید و بقیه خودبه‌خود عوض می‌شوند. بعد از این که کارتان تمام شد، پیش‌پردازنده کدها را به CSS تبدیل می‌کند و تحویل شما می‌دهد تا راحت روی وبسایت‌تان بگذارید و از نتیجه لذت ببرید!سَس (Sass)، لِس (Less)، پست‌سی‌اس‌اس (PostCSS) و استایلس (Stylus) همگی پیش‌پردازنده‌های محبوبی هستند. اما اگر من می‌خواستم فقط یکی از آن‌ها را انتخاب کنم، قطعا انتخابم Sass است(لیستی از آموزش‌های آنلاین سَس). اخیرا PostCSS هم خیلی دارد محبوب می‌شود. فکر خوبی است که بعد از یاد گرفتن Sass، سراغ آن هم بروید.مهارت سوم: جاوا اسکریپت (JavaScript)با کمک HTML و CSS، حالا توانسته‌اید وبسایت‌های زیبا و قشنگی طراحی کنید. اما این وبسایت‌ها صرفا یک سری زامبی‌های خوشگل هستند که شعور چندانی ندارند. می‌توانید از یک زامبی خوشگل بخواهید برای شما یک لیوان آب از یخچال بیاورد، اما اگر پارچ خالی باشد، آن زامبی عقلش نمی‌رسد که باید از شیرِ آب لیوان را پر کند. برای این‌که مغز وب‌سایتتان را کار بگذارید، به جاوا اسکریپت نیاز دارید.جاوا اسکریپت منطق و عملکردهای وبسایت را می‌سازد. Featureهای پیچیده‌ و تعاملی (Interactive) مثل صدا و ویدیو، بازی، امکانات اسکرول کردن و انیمیشن‌های صفحه همه حاصل جاوا اسکریپت است.با رشد CSS، امکان ساختن خیلی از این Feature‌ها هم دارد به آن اضافه می‌شود؛ با این حال هنوز راه زیادی مانده است. همانطور که نظرسنجی‌های سال ۲۰۱۸ و ۲۰۱۹ استک‌اورفلو نشان می‌دهد، جاوا اسکریپت فعلا محبوب‌ترین زبان برنامه‌نویسی است. این یعنی حالا حالا‌ها از دور خارج نمی‌شود و برای توسعه فرانت‌اند، باید آن را خوب و عمیق یاد بگیرید.مهارت چهارم: کتابخانه‌ها و فریم‌ورک‌های جاوا اسکریپتکوله‌تان را زمین بگذارید و نفس تازه کنید، شما بخش اعظم مسیر را آمده‌اید! حالا که سه مهارت اصلی برای توسعه فرانت‌اند (یعنی CSS ،HTML و جاوا اسکریپت) را یاد گرفته‌اید، وقتش است که کار کردن با آن‌ها را برای خودتان راحت‌تر کنید.کتابخانه‌ها و فریم‌ورک‌های جاوا اسکریپت (و همینطور CSS)، مجموعه‌ای از فایل‌ها به این زبان‌ها هستند که کارکردهای پراستفاده را در اختیار شما می‌گذارند. مثال بزنم؛ اگر خواستید کارکرد لاگین یا سرچ‌کردن را به سایت‌تان اضافه کنید، لازم نیست از اول برایشان کد بنویسید. خیلی راحت، می‌توانید فایلِ کدِ عملکرد را از کتابخانه بگیرید، آن هم با کدهای تمیز و مرتب! اجتماع بزرگی از توسعه‌دهندگان مدام دارند این فریم‌ورک‌ها را توسعه می‌دهند و همه به پیشرفت همدیگر کمک می‌کنند.اکثر اوقات انتخاب و مسلط‌شدن به یکی از فریم‌ورک‌ها کافی است و نیاز نیست از این شاخه به آن شاخه بپرید. سه فریم‌ورک برتری که خوب است به یاد گرفتن‌شان فکر کنید، این‌ها هستند: ری‌اکت (React)، انگولار (Angular) و ویو (Vue).۱. ری‌اکتمحبوب‌ترین کتابخانه جاوا اسکریپت در حال حاضر، ری‌اکت است که بیش از ۱۲۰ هزار ستاره در گیت‌هاب گرفته است. ری‌اکت را فیسبوک اوپن سورس کرده و امروزه اجتماع بزرگی از توسعه‌دهنده‌ها روی آن کار می‌کنند. این روزها بسیاری از اپلیکیشن‌های وب مدرن را با ری‌اکت می‌سازند.۲. انگولاراما اگر با ری‌اکت حال نمی‌کردید، چه؟ انگولار هم کتابخانه کاملی برای جاوا اسکریپت است که به اندازه ری‌اکت طرفدار دارد.اگر دوست داشتید این دو فریم‌ورک را با هم مقایسه کنید، با خواندن این پست می‌توانید تفاوت‌هایشان را بفهمید.۳.  ویوفریم‌ورک Vue.js، تازه‌واردِ بازار است. ویو هم از انگولار الگو گرفته است و هم از ری‌اکت، اما خیلی سبک‌تر از آن‌ها است و به همین دلیل اخیرا طرفدارهای زیادی پیدا کرده است.اگر می‌خواهید ویو را با ری‌اکت مقایسه کنید، این پست گزینه خوبی است. مستندسازی رسمی Vue.js خیلی مرتب و منظم ساخته شده و بسیار به‌دردبخور است.تا اینجا را که یاد بگیرید، اصلی‌ترین بخش راه را آمده‌اید. اما اگر می‌خواهید سطح‌تان را از رقبایتان بالاتر ببرید، به مهارت‌های پیشرفته هم نیاز دارید‌! با ما باشید تا پست بعدی و آشنا شدن با کنترل نسخه، تست کد و ابزارهای مدرن توسعه وب!به یادگیری برنامه‌نویسی فرانت‌اند علاقمند شدید؟ برای ثبت نام در دوره فرانت‌اند کوئرا کالج کلیک کنید.ترجمه، اقتباس و تخلیص از:&quot;5 Essential Skills Every Front End Developer Must Learn in 2019&quot; by Adhithi Ravichandran @Programmingwithmosh&quot;The 10 Skills You Need to Land Your First Front End Developer Job&quot; by Scott Morris @ Skillcrushکوئرامگ مجله‌ای تخصصی برای توسعه‌دهندگان است که هر هفته با مطلب‌هایی در زمینه تکنولوژی، رشد فردی و آینده برنامه‌نویسی به‌روزرسانی می‌شود. برای اطلاع از آخرین مطلب‌های ما، می‌توانید توئیتر یا کانال تلگرام ما را دنبال کنید.</description>
                <category>کوئرامگ | مجله تخصصی برنامه‌نویسان</category>
                <author>مریم مقدس برهان</author>
                <pubDate>Wed, 26 Aug 2020 18:21:10 +0430</pubDate>
            </item>
                    <item>
                <title>۶ پروژه‌ چالش‌برانگیز برای برنامه‌نویس‌ها</title>
                <link>https://virgool.io/Quera-Mag/challenging-projects-every-programmer-should-try-fanaimcba3uu</link>
                <description>آستین هنلی، استاد دانشگاه تنسی -- کدام برنامه‌نویسی دوست ندارد یک پروژه جانبی برای خودش شروع کند؟ چه دانشجو باشید و چه باسابقه و مشغولِ کار، می‌دانید که پروژه‌های فرعی نه تنها رزومه آدم را چاق و چله می‌کنند، که یکی از بهترین راه‌ها برای یادگیری هستند. اما چیزی که خیلی‌ها نمی‌دانند، این است که دقیقا چه نوع پروژه‌ای؟این پست، مجموعه‌ای از ایده‌ها در جواب به این سوال است. من از تک‌تک این پروژه‌ها کلی چیز یاد گرفته‌ام؛ اما جذاب‌ترین ویژگی آن‌ها این است که آدم می‌تواند چندین بار آنها را بکوبد و دوباره از اول بسازد. در این بین، هربار هم چیزهای کاملا جدیدی را تجربه کند. هنوز هم که هنوز است، هر وقت می‌خواهم فریم‌ورک یا زبان برنامه‌نویسی جدیدی یاد بگیرم، سراغ یکی از این پروژه‌ها می‌روم.ادیتور متنما هر روزِ خدا از ادیتورهای متن استفاده می کنیم؛ اما تا حالا فکر کرده‌اید که اصلا ادیتورها چطور کار می‌کنند؟ یک دقیقه همه امکانات هیجان‌انگیز ادیتور محبوب‌تان را کنار بگذارید و ساده‌ترین حالت یک ادیتور را در نظر بگیرید؛ اصلا چطور می‌شود تکست‌باکسی ساخت که هم یک نشانگر متحرک متن را ساپورت کند و هم بشود در آن از وارد کردن تا انتخاب و پاک کردن متن را انجام داد؟ نه نه! کامپوننت تکست‌باکسی که در فریم‌ورک GUI محبوب‌تان هست اینجا جواب نمی‌دهد!بزرگ‌ترین معمای ساخت ادیتور متن این است: متن کاربر را چطور در حافظه نگه داریم؟ اولین چیزی که به ذهن من رسید این بود که از یک آرایه استفاده کنم. اما کافی بود کاربر متن جدیدش را هر جایی غیر از آخر متن قبلی اضافه می‌کرد؛ آن وقت بود که ادیتورم گریبان می‌درید و سر به بیابان می‌گذاشت. خوشبختانه، ساختار داده‌های خوبی هست که می‌شود با یاد گرفتن‌شان این مسئله را حل کرد.چالش بعدی، نحوه حرکت نشانگر در متن است. تا حالا دقت کرده‌اید که در ادیتورهای معمول این اتفاق چطور می‌افتد؟ فرض کنیم نشانگر من وسط سطر باشد. اگر فلش رو به بالا را روی کیبوردم بزنم، نشانگر کجا خواهد رفت؟ آیا در یک ستون حرکت می‌کند و در سطر بالایی، دقیقا در نقطه بالای جایی که در سطر پایینی بود می‌ایستد؟ اگر سطر بالایی کوتاه‌تر از سطر فعلی باشد این اتفاق نخواهد افتاد. حالا فرض کنیم نشانگرم در این سطر کوتاه باشد و من دوباره فلش رو به بالا را بزنم. کافی ‌است به سطری برسم که به اندازه کافی بلند باشد، آن وقت نشانگر دقیقا به همان ستونی می‌پرد که در اولین خط بود! به عبارت دیگر، انگار نشانگر برای خودش یک جور حافظه دارد که مشخصات مکان قبلی‌اش را آنجا نگه داشته و به محض این که بتواند، سعی می کند به آن برگردد. شما را نمی‌دانم، اما من فقط وقتی خواستم ادیتور بسازم تازه متوجه این جزئیات شدم.وقتی در یک ادیتور استاندارد فلش بالا را می‌زنیم چه اتفاقی می‌افتد؟بعد از اینکه موفق شدید یک ادیتور ساده بسازید، از شما دعوت می‌کنم دو تا امکان را هم به آن اضافه کنید: اول Undo/Redo و دوم Word Wrapping. من سر Undo/Redo ماجراهای هیجان‌انگیزی داشتم. می‌خواستم آن را در بهینه‌ترین شکل ممکن بسازم. برای این کار اول سعی کردم آرایه‌ای از حالت‌های قبلی نگه دارم، بعد سراغ الگوی ممنتو (Memento) رفتم و سرانجام بالاخره به ایجاد الگوی فرمان (Command Pattern) رضایت دادم.امکان Word Wrapping همان چیزی است که باعث می‌شود برای دیدن بقیه متن، نیازی به اسکرول کردن به چپ و راست نداشته باشید. با این امکان، متن در یک نقطه مشخص می‌شکند و به سطر بعد می‌رود. اضافه کردن Word Wrapping، شما را به چالش می‌کشد تا در هر سطر از متن، جنبه‌های بصری را از جنبه‌های مربوط به حافظه جدا کنید.یادگرفتنی‌ها:ساختار داده‌های ذخیره متن: آرایه‌ (array)، طناب، Gap Buffer و Piece Tableعملکرد نشانگر متن و نحوه پیاده‌سازی آنالگوهای طراحی Undo/Redo: ممنتو و فرمانقدرت انتزاع برای جدا کردن مسئله‌های بصری متن از مسائل مربوط به حافظهمنابعی برای مطالعه بیشتر:ادیتور متن: ساختارهای دادهطراحی و پیاده‌سازی ادیتور متن Win32ساختارهای داده و الگوریتم‌ها در جاوا (لینک کتاب در لیب‌جن)بازی‌های دو بعدیحتی ساده‌ترین بازی‌ها هم برای کار کردن، اول باید الگوهای طراحی و ساختار داده‌های خاصی داشته باشند. هدف این پروژه این است که بتوانید بدون درگیر شدن با چیزهایی مثل دیزاین و گرافیک، یک بازی درست و حسابی را از اول تا آخر بسازید. من پیشنهاد می‌کنم از یک کتابخانه گرافیکی دو بعدی استفاده کنید که فقط امکانات ضروری را داشته باشد (مثلا SDL ،SFML یا PyGame)؛ چون موتورهای بزرگ طراحی بازی بخش‌های هیجان‌انگیز کار را از جلوی چشم شما پنهان می‌کنند.در قدم اول، باید یاد بگیرید روی صفحه طرح بکشید. من هیچ ایده‌ای نداشتم چطور می‌شود این کار را کرد. برای این کار اول صفحه را پاک می‌کنید. بعد طرح لازم برای هر قسمت از صفحه را می‌کشید؛ به شکلی که با سرعت زیاد (مثلا در حد چند بار در ثانیه) پشت سر هم نمایش داده شوند. این‌طوری به بیننده القا می‌شود که اشیاء دارند روی صفحه حرکت می‌کنند.در قدم بعدی، قرار است کلی چیز در مورد لوپِ بازی یاد بگیرید. هر بازی در واقع چرخه‌ مداومی است از طرح کشیدن، گرفتن ورودی‌های کاربر و پردازش منطق بازی.سپس یاد می‌گیرید چطوری ورودی‌های کاربر را پردازش کنید. قبل از انجام این پروژه، من هیچ‌وقت به ظرافت‌های فشار دادن، نگه ‌داشتن و رها کردن کلیدهای کیبورد و موس دقت نکرده بودم؛ چه برسد به نحوه پردازش چیز پیچیده‌تری مثل دابل‌کلیک. حالا فرض کنیم پردازش را یاد گرفتیم، اصلا چند وقت یک بار باید وجود ورودی از کاربر را چک کنیم؟ اگر مرتبا در حال چک کردن باشیم، بازی‌ قرار است همیشه هنگ کند!چهارمین چیزی که یاد می‌گیرید، این است که همه شیءهای بازی‌تان را بسازید و مدیریت‌شان کنید. به عنوان مثال، چطور باید یک تعداد داینامیک از دشمن‌های بازی تولید کرد؟ الگوی Factory اینجا خیلی کمک می‌کند.در مرحله بعد، با منطق بازی و نحوه به کار بستن آن آشنا می‌شوید. موقعیت گلوله‌ها کِی آپدیت می‌شود؟ چه زمانی دشمن‌های بیشتری وارد صفحه می‌شوند؟ چطور می‌فهمید که دشمنی نابود شده است؟ بازی کِی تمام می‌شود؟ من قبل از بازی ساختن هرگز از عملگر پیمانه‌ای (Modulo Operator) استفاده نکرده بودم؛ اما حالا کد همه بازی‌هایی که ساختم پر از آن است.وقتی توانستید یک بازی اولیه را با موفقیت به کار بیندازید، می‌توانید کلی چیزهای دیگر هم به آن اضافه کنید. منوی صفحه اولیه بازی را بسازید، صفحه گیم‌اور اضافه کنید، چک کنید که سرعت بازی در کامپیوترهای مختلف یکی باشد و یاد بگیرید با کمک هوش مصنوعی، دشمن‌های پردردسرتری خلق کنید. از این هم بیشتر چالش می خواهید؟ شیدر افکت (Shader Effect) اضافه کنید، صدا به بازی بیاورید و حتی ورژن چند نفره آنلاین از بازی بسازید.یادگرفتنی‌ها:طرح کشیدن روی صفحهمدیریت ورودی‌های کاربرلوپ بازیساخت و مدیریت تعداد داینامیکی از شیءها در بازی (مثلا با فکتوری پترن)ماشین حالت برای دشمن‌های ساخته شده با هوش مصنوعیپخش صدااستفاده از شیدرشبکه‌سازی برای اضافه کردن امکانات آنلاینمنابعی برای مطالعه بیشتر:الگوهای نوشتن بازیساختارهای داده برای بازی‌نویس‌ها (لینک لیب‌جن)نوشتن بازی هوش مصنوعی همراه با مثال (لینک لیب‌جن)هشت درسی که از منتشر کردن هشت بازی ویدیویی یاد گرفتمکامپایلر - تاینی‌بیسیکساختن کامپایلر، آموزنده‌ترین پروژه‌ای است که به عمرم روی آن کار کرده‌ام. همین حالا هم اگر عصر جمعه‌ای وقت خالی برای کد زدن داشته باشم، به احتمال زیاد روی یک کامپایلر کار می‌کنم. حس خیلی قشنگی دارد که چیزی خلق کنی، بعد دیگران با کمک آفریده‌ تو بتوانند کلی چیز بیشتر خلق کنند. فقط با ساختن یک کامپایلر، کلی اطلاعات در مورد پیچیدگی‌های کامپایلرها یاد گرفتم که در حالت عادی حتی به آن‌ها فکر هم نکرده بودم.پیشنهاد می‌کنم سراغ یک زبان مختصر و بیسیک‌طور (مثلا Tiny Basic) بروید و کامپایلر را از اول تا آخر برای آن بسازید. بعد می‌توانید آن را برای هر زبان دیگری که خوب بلدید، کامپایل کنید. مثلا می‌توانید یک کامپایلر تاینی‌بیسیک در پایتون بنویسید که خروجی‌اش کد سی‌پلاس‌پلاس باشد. هیچ نیازی نیست که خروجی‌تان اسمبلی یا سی باشد. اصلا دوری کردن از این زبان‌ها باعث می‌شود حاشیه‌ها را ول کنید و خود کامپایلر را بچسبید.ساختن کامپایلر یکی از آموزنده‌ترین پروژه‌هایی است که می‌توانید روی آن کار کنید.اولین مانعی که با آن روبرو خواهید شد، این است که چطور کد ورودی را تحلیل واژه‌ای یا Tokenize کنید. بعد قرار است کدتان را تجزیه (Parse) کنید؛ یعنی ساختار ورودی‌ها را بررسی کنید و یک نمود درختی از کدتان بسازید. تکنیک تجزیه کاهشی بازگشتی برای این کار بی‌نظیر است. در قدم بعدی معنای ورودی‌ها را چک می‌کنید، مطمئن می‌شوید که کدتان معنا و مفهوم دارد و از قوانین تایپ (Type Rules) پیروی می‌کند. در آخر هم طبق معمول خروجی‌ می‌گیرید!برای این پروژه به‌خصوص، کلی منابع آموزشی از قبل وجود دارد که حسابی کمک‌تان می‌کند. نگذارید اصطلاحات ناآشنای این وادی تهِ دل‌تان را خالی کنند. فقط در عرض چند روز می توانید یک کامپایلر ساده را تمام کنید. به‌علاوه، بی‌نهایت امکان هست که می‌توانید به کامپایلرتان اضافه کنید. وقتی ورژن اولیه را راه انداختید، می‌توانید یک کتابخانه استاندارد هم برایش بیاورید (من در PeayBASIC فانکشن ساده گرافیک دوبعدی را اضافه کردم)، کامپایلر بهینه‌سازی اضافه کنید و پیام‌های خطا را بهبود دهید. یادتان نرود که حتما چند تا برنامه نمونه هم با کامپایلرتان بنویسید تا بتوانید پزش را به کل دنیا بدهید!یادگرفتنی‌ها:تحلیل واژه‌ای (Lexical Analysis)تحلیل نحوی (Syntactic Analysis)تجزیه‌کننده کاهشی‌بازگشتی (Recursive Descent Parsing)درخت نحوی انتزاعی (Abstract Syntax Tree)تحلیل معنایی (Semantic Analysis)کامپایلر بهینه‌سازی (Optimization Passes)تولید کد (Code Generation)منابعی برای مطالعه بیشتر:آموزش ساخت مفسرچطور در Go، مفسر بنویسیم (لینک لیب‌جن)بیایید با هم کامپایلر بسازیمسورس کد PeayBASIC (گیت‌هاب)مینی‌سیستم‌عاملدر گذر سال‌ها، من بارها دیده‌ام که چقدر مفاهیم بنیادی سیستم‌عامل‌ها را در حیطه‌های گوناگونی پیاده می‌کنم؛ از بازی‌ها گرفته تا مدل‌های پیش‌بینی‌کننده رفتار انسان. شاید سر کلاس درس، الگوریتم‌ها و ساختار داده‌های استفاده شده در سیستم‌عامل‌ها به نظرتان بی‌فایده و انتزاعی بیایند؛ اما واقعیت این است که بی‌اندازه به درد می‌خورند. پیاده‌‌ کردن یک سیستم‌عامل به من کمک کرد تا خیلی بهتر بفهمم که در زیربنای این ساختار عظیم و غول‌آسا واقعا چه می‌گذرد.در مقایسه با موارد قبلی، این پروژه کمی زمان و تلاش بیشتری برای یادگیری می‌خواهد. همچنین از آن‌جا که سخت‌افزار نقش مهمی در آن دارد، ممکن است برخی موانع هم در سر راه انجامش داشته باشید. اما اگر طبق دستورالعمل‌های یک راهنما یا کتاب جلو بروید، قطعا موفق می‌شوید یک سیستم‌عامل بوت‌شدنی بالا بیاورید که برنامه‌هایی که خودتان نوشته‌اید را اجرا کند. این کتاب رایگان نوشته همکار من و یکی از بهترین راهنماها برای این کار است.یادگرفتنی‌ها:کراس‌کامپایلربوت‌لودرهاوقفه‌های بایوس (BIOS interrupts)حالت‌های مختلف x86مدیریت حافظه و صفحه‌بندی (Paging)زمان‌بندی؛ مثلا الگوریتم راند رابین (Round Robin)فایل‌سیستم‌ها؛ مثلا FATمنابعی برای مطالعه بیشتر:ویکی منابع OSDev.orgساخت سیستم عامل RISC-V با زبان راست (Rust)مفاهیم سیستم‌عامل‌ (لینک لیب‌جن)فکر می‌کنید این پروژه‌ها بچه‌بازی است؟ این دوتای دیگر را امتحان کنید:اسپردشیت (Spreadsheet)نرم‌افزار اسپردشیتی مثل اکسل (Excel)، چالش‌های ادیتور متن را با چالش‌های کامپایلر ترکیب می‌کند. در جریان ساخت چنین نرم افزاری، یاد می‌گیرید که چطور محتوای هر خانه (Cell) را در حافظه نشان بدهید. همچنین متوجه می شوید که چطور باید مفسرها را برای زبان‌های مورد استفاده در معادلات پیاده‌سازی کنید.منابعی برای مطالعه بیشتر:گراف جهت‌دار غیرمدورپارادایم برنامه‌نویسی واکنش‌گرافناوری پیاده‌سازی اسپردشیت (لینک آمازون)شبیه‌ساز کنسول بازی ویدیوییشبیه‌ساز (Emulator) کنسول بازی، چالش‌های ساخت کامپایلر و سیستم‌عامل را یک جا دارد. نمی‌دانید چه حسی دارد که بتوانی بازی واقعی ساخت یک نفر دیگر را با شبیه‌ساز ساخت خودت بازی کنی!شبیه‌سازی یک کنسول واقعی، یعنی شما ماشین مجازی‌ای بنویسید که ادای CPU و دیگر بخش های سخت‌افزاری واقعی را دربیاورد. به این ترتیب می‌توانید بازی‌های ساخته شده برای آن کنسول را با شبیه‌ساز خودتان بازی کنید.من پیشنهاد می‌کنم قبل از رفتن سراغ یک کنسول بازی واقعی، اول CHIP-8 را شبیه‌سازی کنید. نینتندو، سوپر نینتندو، گیم‌بوی و گیم‌بوی ادونس همگی کاملا قابل شبیه‌سازی هستند، مستندسازی های فت و فراوان دارند و کلی شبیه‌ساز متن‌باز هم از قبل برای آن‌ها ساخته شده است. البته هرکدام از این کنسول‌ها نکته‌های خاص خودشان را دارند که کار را برای آدم جذاب می‌کند؛ مثلا ممکن است برای اجرا شدن بعضی بازی‌ها، لازم باشد باگ‌ها/فیچرهای مستندنشده یک سخت‌افزار به‌خصوص وجود داشته باشند. PICO-8 هم گزینه دیگری است که برای خودش کنسول «فانتزی» بسیار سوددهی شده است.منابعی برای مطالعه بیشتر:ساخت شبیه‌ساز CHIP-8شبیه‌ساز جاوا اسکریپت CHIP-8چطور گیم‌بوی را شبیه‌سازی کنیمسورس کد پای‌بوی (PyBoy) در گیت‌هاببعد از نوشتن این پست، من کلی پیشنهاد پروژه هم در هکرنیوز، ردیت، توییتر و از طریق ایمیل گرفتم که مرور آن‌ها خالی از لطف نیست:ساخت یک دیتابیس از بیخ و بنرهگیر نور (Ray Tracer)کلون برنامه Paint ویندوزادیتور گرافیکی وکتوردیکودر (Decoder) عکساپلیکیشن وب چت‌رومماشین‌حساب اعشار عدد پیابزارهای رایج ترمینال (مثلا grep)سرور و کلاینت FTPشما چه پروژه‌های هیجان‌انگیز دیگری سراغ دارید؟ ایده‌هایتان را در کامنت‌ها با ما در میان بگذارید.ترجمه‌ای از:&quot;Challenging projects every programmer should try&quot;, by Austin Z. Henley کوئرامگ مجله‌ای تخصصی برای توسعه‌دهندگان است که هر هفته با مطلب‌هایی در زمینه تکنولوژی، رشد فردی و آینده برنامه‌نویسی به‌روزرسانی می‌شود. برای اطلاع از آخرین مطلب‌های ما، می‌توانید توئیتر یا کانال تلگرام ما را دنبال کنید.</description>
                <category>کوئرامگ | مجله تخصصی برنامه‌نویسان</category>
                <author>مریم مقدس برهان</author>
                <pubDate>Tue, 07 Jul 2020 19:22:15 +0430</pubDate>
            </item>
                    <item>
                <title>بدترین باگ‌های تاریخ کامپیوتر: انفجار موشک ۳۷۰ میلیون دلاری</title>
                <link>https://virgool.io/Quera-Mag/the-ariane-5-disaster-oxgmwgsiv6mq</link>
                <description>بدترین خطاهای تاریخ کامپیوتر، مجموعه‌ای دنباله‌دار از داستان معروف‌ترین و تاثیرگذارترین خطاهای برنامه‌نویسی است. بیش‌تر برنامه‌نویسان و مهندسان نرم‌افزار به ندرت پیش می‌آید که با چیزی شبیه به این داستان‌ها روبه‌رو شوند، اما با خواندن آن‌ها می‌توانند دید خوبی در زمینهٔ توسعه و استقرار نرم‌افزار به دست آورند. این خطاهای کامپیوتری تاثیر قابل توجهی بر روی افرادی گذاشته‌اند که آن‌ها را تجربه کرده‌اند؛ ما هم می‌توانیم درس‌‌های ارزشمندی را که از این اشتباهات آموخته‌‌اند، در کارها و پروژه‌های خود به کار بگیریم. دیگر خطاهای کامپیوتری این مجموعه: گروه سرمایه‌گذاری نایت، مدارگرد اقلیمی مریخ (به‌زودی) و تراک ۲۵ (به‌زودی)موشک آریان ۵در چهارم ژوئن سال ۱۹۹۶ نخستین موشک آریان ۵ موتورهای خود را روشن کرد و به سرعت شروع به دور شدن از «ساحل گویان» در فرانسه نمود. ۳۷ ثانیه بعد، موشک ۹۰ درجه در جهت نادرست چرخید و در کم‌تر از ۲ ثانیه بعد، در ارتفاع ۴ کیلومتری از سطح زمین، نیروهای آئرودینامیکی، تقویت‌کننده‌ها را شکافتند و از پایه اصلی جدا کردند. این اتفاق سیستم خودتخریبی موشک را فعال کرد و فضاپیما در آتشی عظیم از هیدروژن مایع نابود شد.این پرتاب فاجعه‌بار که در حدود ۳۷۰ میلیون دلار هزینه داشت، باعث بررسی‌های گسترده‌ای شد. بخشی از ماموریت این موشک، کمک به تحقیقات علمی در مورد عمل‌کرد سپر مغناطیسی زمین (Magnetosphere) بود که با توجه به از بین رفتن محمولهٔ موشک، این تحقیقات نزدیک به ۴ سال به تعویق افتاد. به همین دلایل، آریان ۵ به عنوان یکی از گران‌ترین خرابی‌های نرم‌افزاری تاریخ شناخته شده است.چه چیزی اشتباه پیش رفت؟خطای پیش آمده به عنوان یک ایراد نرم‌افزاری در سیستم مرجع اینرسی (Inertial Reference System) موشک تشخیص داده شد. موشک از این سیستم، که معمولا به آن BH می‌گویند، استفاده می‌کرد تا تشخیص دهد که جهتش رو به بالا است یا پایین. این مقدار با یک متغیر ۶۴ بیتی float نمایش داده می‌شد که برای این کار کاملا کافی بود.مشکلات زمانی شروع شدند که نرم‌افزار تلاش کرد مقدار این متغیر ۶۴ بیتی را که می‌توانست نماینده میلیاردها مقدار مختلف باشد، در یک متغیر ۱۶ بیتی integer با امکان نمایش تنها ۶۵۵۳۵ مقدار مختلف، جا دهد. در چندین ثانیه ابتدایی پرواز، موشک شتاب کمی داشت و بنابراین تبدیل بین این دو مقدار هم موفقیت‌آمیز بود. اما با افزایش سرعت موشک، مقدار متغیر ۶۴ بیتی از عدد ۶۵ هزار بیشتر شد و دیگر برای جا شدن در متغیر ۱۶ بیتی بیش از اندازه بزرگ بود. همین لحظه بود که پردازنده با یک خطای عمل‌وند (operand error) روبه‌رو شد و متغیر BH را با یک کد عارضه‌یابی مقداردهی کرد.کدهای عارضه‌یابی یا تشخیصی مقادیری قراردادی هستند که در صورت رُخ دادن وضعیت‌های خاص (معمولا به خاطر برخوردن به ایرادهای مختلف) در یک متغیر ذخیره یا به صورت نتیجه تابع برگشت داده می‌شوند.فقط ۳۹ ثانیه از پرتاب آریان ۵ گذشته بود که این فضاپیما در آتشی از هیدروژن مایع سوخت.برای فضا رفتن، فضای کافی نیاز بود!به زبان ساده‌تر، این موضوع مانند تلاش برای قرار دادن ۱۰ میلیون لیتر بستنی در یک یخچال معمولی است. احتمالا اولین بستنی‌ها راحت در یخچال جا می‌شوند؛ اما بعد از پر شدن آن، جایی برای بقیه بستنی‌ها نیست. به خاطر همین درهای یخچال باز می‌مانند و همه بستنی‌ها شروع به آب شدن می‌کنند.سیستم مرجع اینرسی پشتیبان هم نتوانست از این فاجعه جلوگیری کند. مقدار BH دارای یک کد شناسایی از پردازنده بود که صرفا برای دیباگ کردن در نظر گرفته شده بود. این کد شناسایی به اشتباه به عنوان داده واقعی پرواز شناسایی شد و باعث شد که موتورها بلافاصله با رانش در جهت اشتباه، تصحیح اضافه‌ای را انجام دهند. همین تصحیح نادرست منجر به نابودی موشک در چند ثانیه بعد از پرتاب آن شد.میراث دردسرسازعوامل مختلفی این شکست را پررنگ و ویژه می‌کنند. اول این‌ که پس از پرتاب موشک، دیگر نیازی به مقدار BH نبود و این تکه از کد، از نسخه قبلی موشک در کد پایه جا مانده بود. نسل قبلی آریان، یعنی آریان ۴، برای تراز کردن بعد از پرتاب به این قسمت از کد نیاز داشت. مورد دوم این‌ بود که کدی که توانایی گرفتن و اداره کردن این ایرادهای تبدیل را داشت به دلیل محدودیت‌های کارایی در سخت‌افزار آریان ۴ برای مقدار BH غیر فعال شده بود. در آریان ۵ این محدودیت‌ها وجود نداشت و می‌توانست این قسمت دوباره فعال شود.عامل موثر نهایی، تغییر در نیازهای کاربر و به طور مشخص در برنامهٔ پرواز موشک بود. آریان ۵ با یک خط سیر بسیار تندتر نسبت به آریان ۴ پرتاب شد که منجر به سرعت عمودی بیش‌تری می‌‌شد. از آن‌جا که موشک سریع‌تر به فضا پرتاب می‌شد، احتمال این‌که مقدار BH با خطای تبدیل رو‌به‌رو شود هم بیش‌تر بود.سرانجام آژانس فضایی اروپا گروهی را برای بازیابی لاگ‌های ثبت شده از دو سیستم مرجع اینرسی که بقایای آن‌ها در زمینی به مساحت ۱۲ کیلومتر مربع پخش شده بودند مامور کرد. کار این گروه هم به واسطه زمین‌های باتلاقی، مواد شیمیایی خطرناکی که از موشک پراکنده شده بودند و نظارت گسترده رسانه‌ها طولانی و سخت شده بود. همه این مشکلات، صرفا به دلیل یک خطای تبدیل اتفاق افتاده بود.این مطلب قسمتی از مجموعه دنباله‌دار معروف‌ترین و تاثیرگذارترین خطاهای برنامه‌نویسی است که در کوئرامگ منتشر شده است. . هفتاد سال پیش، گریس هوپر (Grace Hopper) نخستین خطای کامپیوتری را کشف کرد؛ یک پروانه بین رله‌های کامپیوتر Harvard Mark II که با آن کار می‌کرد گیر افتاده بود. پیش از آن ایده باگ‌ها (Bugs) در زمینه‌های دیگر تعریف شده بود، اما با کشف آن پروانه، برای نخستین بار از اصطلاح اشکال‌زدایی (Debugging) در زمینهٔ کامپیوترها استفاده شد.ترجمه از:&quot;The Worst Computer Bugs in History: The Ariane 5 Disaster&quot;, by Jamie Lynchکوئرامگ مجله‌ای تخصصی برای توسعه‌دهندگان است که هر هفته با مطلب‌هایی در زمینه تکنولوژی، رشد فردی و آینده برنامه‌نویسی به‌روزرسانی می‌شود. برای اطلاع از آخرین مطلب‌های ما، می‌توانید توئیتر یا کانال تلگرام کوئرا را دنبال کنید.</description>
                <category>کوئرامگ | مجله تخصصی برنامه‌نویسان</category>
                <author>علی.</author>
                <pubDate>Tue, 23 Jun 2020 16:51:18 +0430</pubDate>
            </item>
                    <item>
                <title>انقلاب پنج به هفت؛ داستان PHP (قسمت دوم)</title>
                <link>https://virgool.io/Quera-Mag/evolution-of-php-v5-to-v7-gzy4zwxokbi0</link>
                <description>در قسمت اولِ داستان PHP، درباره تغییرات چشم‌گیر و اساسی نسخه‌های اولیه PHP v7 نسبت به نسل قبل از آن صحبت کردیم. در قسمت دوم این مطلب، ادامه تغییرات این نسل را تا آخرین ورژن آن یعنی نسخه ۷.۴ مرور می‌کنیم و در مطلب آینده هم نهایتا به سراغ آپدیت‌های مورد انتظار برای PHP v8 خواهیم رفت.اگر قصد یادگیری و تمرین زبان PHP را دارید، کافی است کمی پشتکار داشته باشید و سری به دوره «آموزش پروژه‌محور برنامه‌نویسی وب با PHP» در کوئراکالج بزنید. در این دوره با پروژه‌های واقعی از شرکت دیجی‌کالا و تمرین‌های مختلف سر و کار خواهید داشت.شیب ملایم؛ PHP v7.2دومین آپدیت سری هفتم PHP در تاریخ ۹ آذر ۱۳۹۶ منتشر شد که در ادامه برخی از ویژگی‌های جدید آن را بررسی خواهیم کرد.- گسترش type پارامتر‌در این نسخه می‌توان type مشخص شده برای پارامتر‌های ورودی را در Subclassها حذف کرد. مثلا اگر فرزندی بخواهد یک تابع از پدرش را Override کند، می‌تواند type پارامتر‌های ورودی آن را کلا حذف و تابع جدید را بر روی متغیر با هر typeای فراخوانی کند.interface FooInterface{
        public function bar(string $str);
}

class FooClass implements FooInterface{
        public function bar($str)
        {
                return $str;
        }
}

$a = new FooClass();
var_dump( $a-&gt; bar(12)); \\ int(12)
var_dump( $a-&gt; bar(“12”)); \\ string(2) &amp;quot12&amp;quotتوجه داشته باشید که type پارامتر‌ها را می‌توان حذف کرد؛ ولی نمی‌توان type جدیدی برای آن‌ها مشخص کرد. هم‌چنین این قانون فقط برای پارامترهای تابع است و type خروجی (اگر مشخص شده باشد) امکان حذف ندارد.- شمارش اشیاء غیر قابل شمارشتا قبل از این، فراخوانی تابع ()count بر روی اسکالر‌ها و اشیایی که واسط Countable را پیاده‌سازی نکرده بودند خروجی ۱ می‌داد. اما در این نسخه فراخوانی تابع ()count بر روی موارد بالا و همچنین null باعث ایجاد یک Warning می‌شود.var_dump(count(12)) \\ PHP Warning: count(): Parameter must be an array or an object that implements Countable- ویرگول دنباله‌دار در لیست فضای اسمی گروهیصرفا اضافه کردن مورد جدید راحت تر می‌شود =).use Foo\Bar\{ Foo, Bar, Baz, };- دیباگ کردن PDOبا استفاده از تابع جدید activeQueryString می‌توان Queryای را که به پایگاه داده ارسال می‌شود، پس از اجرا به صورت کامل دید. البته این تابع فقط زمانی کارایی دارد که از حالت Emulated Prepared Statements استفاده کنیم. چون در حالت Real Prepared واقعا هیچ‌گاه Query کامل به پایگاه داده ارسال نمی‌شود و دیدن آن به صورت کامل امکان‌پذیر نیست.$db = new PDO(...);

// works with statements without bound values
$stmt = $db-&gt;query(&#039;SELECT 1&#039;);
var_dump($stmt-&gt;activeQueryString()); // =&gt; string(8) &amp;quotSELECT 1&amp;quot

$stmt = $db-&gt;prepare(&#039;SELECT :string&#039;);
$stmt-&gt;bindValue(&#039;:string&#039;, &#039;foo&#039;);

// returns unparsed query before execution
var_dump($stmt-&gt;activeQueryString()); // =&gt; string(14) &amp;quotSELECT :string&amp;quot

// returns parsed query after execution
$stmt-&gt;execute();
var_dump($stmt-&gt;activeQueryString()); // =&gt; string(11) &amp;quotSELECT &#039;foo&#039;&amp;quotستاره دنباله‌دار؛ PHP v7.3این نسخه از سری هفت در تاریخ ۱۵ آذر ۱۳۹۷ و باز هم با ویژگی‌های جدید بسیاری ارائه شد که برخی از آن‌ها را در ادامه خواهید دید.- بهبود کنترل خطا در توابع json_encode و json_decodeنداشتن روشی مناسب برای کنترل کردن خطاها هنگام استفاده از JSON برای مدت‌ها مشکلی غیر قابل حل بود؛ به طوری که از نظر توسعه‌دهندگان وب، این مسئله یک نقطه ضعف بزرگ در PHP به شمار می‌رفت.مشکل اینجا بود که تابع ()json_decode در صورت بروز خطا مقدار null را برمی‌گرداند. در حالی که برخی اوقات null ممکن است واقعا مقداری معتبر برای یک JSON باشد.تا قبل از PHP v7.2 برای دریافت خطایی از JSON از یک‌سری راه حل‌ها استفاده می‌شد که آن‌ها هم خیلی قابل اعتماد و کارآمد نبودند.به عنوان مثال:json_decode(&amp;quot{&amp;quot);
json_last_error() === JSON_ERROR_NONE // the result is false
json_last_error_msg() // The result is &amp;quotSyntax error&amp;quotاما در این نسخه می‌توان به این ترتیب عمل کرد:use JsonException;

try {
        $json = json_encode(&amp;quot{&amp;quot, JSON_THROW_ON_ERROR);
        return base64_encode($json);
} catch (JsonException $e) {
        throw new EncryptException(&#039;Could not encrypt the data.&#039;, 0, $e);
}در واقع با افزوده شدن flag جدید JSON_THROW_ON_ERROR به این توابع، از این پس می‌توانید با استفاده از آن هنگام کار با توابع JSON برای خود Exception Message تعریف کنید.- اضافه شدن تابع is_countableدر نسخه قبلی این قابلیت اضافه شد که اگر تابع ()count بر روی متغیر غیر قابل شمارشی فراخوانی شد، یک Warning ایجاد شود. در این نسخه با اضافه شدن تابع is_countable می‌توان از قبل مطمئن شد که متغیر، قابل شمارش هست یا نه.$count = is_countable($variable) ? count($variable) : null;- اضافه شدن توابع array_key_first و array_key_lastهمان‌طور که از نام‌شان پیدا است این دو تابع کلید اولین و آخرین خانه آرایه را برمی‌گردانند.$array = [
        &#039;a&#039; =&gt; &#039;sth1&#039;,
        &#039;b&#039; =&gt; &#039;sth2&#039;,
        &#039;c&#039; =&gt; &#039;sth3&#039;,
];

array_key_first($array); // &#039;a&#039;
array_key_last($array); // &#039;c&#039;- ویرگول دنباله‌دار در فراخوانی تابعunset(
        $foo,
        $bar,
        $baz,
);توجه داشته باشید که این کار در تعریف تابع مجاز نیست.- اضافه شدن قابلیت انتساب ارجاعی در ()listدر این نسخه می‌توان با استفاده از لیست علاوه بر مقادیر خانه‌های یک آرایه، رفرنس‌ آن‌ها را نیز به یک سری متغیر Assign کرد.$array = [1, 2];
list($a, &amp;$b) = $array;تکه کد بالا در واقع برابر است با:$array = [1, 2];
$a = $array[0];
$b =&amp; $array[1];- پشتیبانی ذاتی از کوکی‌های Same Siteدر دنیای امنیت از Same Site Flag برای جلوگیری از حملات CSRF استفاده می‌شود.کوکی‌های Same Site با اعمال این قانون که «کوکی فقط در صورتی ارسال می‌شود که درخواست‌کننده در همان دامنه کوکی باشد»، باعث می‌شوند خطر حمله CSRF و نشت اطلاعات در سرورها کاهش یابد. Frameworkهای اصلی PHP قبلاً این کار را از طریق فراخوانی یک Set-Cookie Header انجام ‌می‌دادند.در این نسخه با افزودن Flag جدید Same Site در تابع setcookie می‌توان به راحتی یک کوکی Same Site ساخت.setcookie ( string $name [, string $value = &quot;&quot; [, int $expire = 0 [, string $path = &quot;&quot; [, string $domain = &quot;&quot; [, bool $secure = false [, bool $httponly = false [, string $samesite = &quot;&quot; ]]]]]]] )- نمایش بهتر TypeErrorهاتا قبل از این در TypeError برای Integer و Boolean از اسم کامل‌شان استفاده می‌شد اما در این نسخه می‌توان نام کوتاه‌شده‌شان را به کار برد. این نام کوتاه، همان نامی است که در هنگام مشخص کردن type از آن استفاده می‌شود.// Pre PHP 7.3 code
Argument 1 passed to foo() must be of the type integer/boolean

// PHP 7.3+ code
Argument 1 passed to foo() must be of the type int/boolآخرین وارث؛ PHP v7.4جدیدترین نسخه منتشر شده تا به امروزِ سری هفت یعنی PHP v7.4 در تاریخ ۷ آذر ۱۳۹۸ ارائه شد. این نسخه آخرین نسخه سری ۷ نیز خواهد بود و قرار است بعد از آن PHP 8 میدان را به دست بگیرد. به هر حال تا آمدن سری هشت بیایید برخی از ویژگی‌های جدید آخرین وارث نسل هفتم را بررسی کنیم.- پشتیبانی از Arrow Functionهاتابع‌های Arrow در واقع نمایشی کوتاه شده از Anonymous Functionها هستند که دقیقا همان کارایی را دارند. البته با این تفاوت کوچک که استفاده از متغیر‌های محدوده Parent به صورت خودکار انجام می‌شود و دیگر نیازی به استفاده از کلیدواژه Use نیست. فرم کلی آن به شکل زیر است:fn (argument_list) =&gt; expr.$y = 1;
$fn1 = fn($x) =&gt; $x + $y;

// equivalent to using $y by value:
$fn2 = function ($x) use ($y) {
        return $x + $y;
};

$factor = 10;
$nums = array_map(fn($n) =&gt; $n * $factor, [1, 2, 3, 4]);
// $nums = array(10, 20, 30, 40);- اضافه شدن عملگر انتسابی ??در این نسخه می‌توان از عملگر ?? که در قسمت قبل توضیح داده شد، همانند عملگر‌های -، + و * به صورت انتسابی هم استفاده کرد. با این کار دیگر نیاز نیست اسم متغیر را در هر دو طرف تساوی بنویسیم و نوشتار کوتاه‌تری خواهیم داشت.// The following lines are doing the same
$this-&gt;request-&gt;data[&#039;comments&#039;][&#039;user_id&#039;] = $this-&gt;request-&gt;data[&#039;comments&#039;][&#039;user_id&#039;] ?? &#039;value&#039;;

// Instead of repeating variables with long names, the equal coalesce operator is used
$this-&gt;request-&gt;data[&#039;comments&#039;][&#039;user_id&#039;] ??= &#039;value&#039;;- قابلیت جدید Preloading (پیش‌بارگذاری)یکی از مهم‌ترین ویژگی‌های اضافه شده در این نسخه که سبب بهبود چشمگیری در سرعت و عملکرد برنامه‌های PHP می‌شود، پیش‌بارگذاری است.در آن اوایل، PHP برای اجرای هر Request همه فایل‌ها را یک‌بار تجزیه و کامپایل می‌کرد ولی نتیجه این کار که به آن Opcodes می‌گوییم جایی ذخیره نمی‌شد. بنابراین نمی‌شد در درخواست بعدی از آن استفاده کرد و به این ترتیب یک پروسه‌ی تکراری بارها و بارها به ازای هر Request تکرار می‌شد.برای حل این مشکل OPCache معرفی شد. OPCache که مخفف Opcodes Cache است با Cache کردن Opcodeهای تولید شده، سعی در افزایش سرعت اجرای درخواست‌ها دارد. فرض کنید دو Request به یک کد PHP برای اجرا شدن نیاز داشته باشند. در این صورت می‌توان از Opcodesای که Cache شده است استفاده کرد و عملیات تجزیه/کامپایل را دوباره انجام نداد. با این‌کار عملکرد برنامه‌ها در مجموع بین ۲ تا ۱۵ برابر بهبود پیدا خواهد کرد.این کار هنوز هم یک سری هزینه اجرایی را از بین نمی‌برد. قبل از این PHP مجبور بود چک کند که اگر Source File تغییر کرده باشد، قسمت تغییر یافته را از حافظه مشترک در حافظه Process کپی کند. علاوه بر آن، از آنجایی که هر فایل PHP کاملا مستقل و بدون در نظر گرفتن دیگر فایل‌ها کامپایل و Cache می‌شود، PHP نمی‌توانست وابستگی‌های بین کلاس‌هایی که در فایل‌های متفاوتی ذخیره شده‌اند را برطرف کند. به همین خاطر مجبور بود به ازای هر Request وابستگی‌های کلاس را در زمان اجرا مجدداً پیوند دهد.به لطف Preloading (پیش‌بارگذاری) PHP v7.4 می‌تواند بسیاری از این هزینه‌ها را از بین ببرد. در هنگام راه‌اندازی سرور و قبل از اجرای هر اپلیکیشنی، PHP می‌تواند مجموعه‌ای از فایل‌های PHP‌ را (که از قبل مشخص شده‌اند) در حافظه بارگذاری کند؛ به صورتی که محتوای آن‌ها به طور همیشگی توسط همه‌ Request‌های بعدی در دسترس باشند.در واقع با استفاده از این ویژگی علاوه بر کامپایل کردن فایل‌هایی که مشخص کرده‌ایم، فایل‌های مرتبط به هم را لینک می‌کند و کد حاصل را که قابل اجرا برای مفسر PHP است، در حافظه نگه می‌دارد.تمام توابع و کلاس‌های تعریف شده در این فایل‌ها که از قبل Load شده‌اند، برای همه Requestهای خارجی در دسترس خواهند بود. دقیقاً مانند Entitieyهای داخلی؛ مثل Strlen یا Exception. در حقیقت، PHP می‌تواند همه یا بخشی از Frameworkها مانند Symfony و حتی کل کتابخانه مورد نیاز برنامه را از قبل بارگذاری کند که این کار به وضوح باعث افزایش سرعت می‌شود.برای این که Preload کار کند باید فایل‌هایی که می‌خواهید از قبل بارگذاری شوند را برای سرور مشخص کنید. به این ترتیب که ابتدا با استفاده از تابع opcache_compile_file فایل‌هایی که می‌خواهید preload شوند را در یک فایل PHP مشخص و سپس در فایل PHP.ini در قسمت opcache.preload آدرس آن را ذکر کنید.آدرس دهی در فایل PHP.ini:opcache.preload=/path/to/project/preload.PHPیک پیاده‌سازی اولیه‌ برای فایل preload.php:$files = /* An array of files you want to preload */;
foreach ($files as $file) {
        opcache_compile_file&#40;$file&#41;;
}Typed Propertiesبا توجه به اضافه شدن ویژگی‌های جدیدی مثل تعیین type ورودی و خروجی در تابع در نسخه‌های پیشین، اینکه بگوییم PHP سعی دارد خودش را هر چه بیشتر به یک زبان Strong Type نزدیک کند خیلی هم گزاره اشتباهی نیست. بنابراین در راستای حرکت به سمت این هدف، قابلیت تعیین type برای Propertyهای یک کلاس نیز در این نسخه اضافه شده است.class Example {

        // All types with the exception of &amp;quotvoid&amp;quot and &amp;quotcallable&amp;quot are supported
        public int $scalarType;
        protected ClassName $classType;
        private ?ClassName $nullableClassType;

        // Types are also legal on static properties
        public static iterable $staticProp;

        // Types can also be used with the &amp;quotvar&amp;quot notation
        var bool $flag;

        // Typed properties may have default values (more below)
        public string $str = &amp;quotfoo&amp;quot
        public ?string $nullableStr = null;

        // The type applies to all properties in one declaration
        public float $x, $y;
        // equivalent to:
        public float $x;
        public float $y;
}اضافه شدن عملگر Spread به آرایه‌هادر نسخه ۵.۶ PHP قابلیتی به نام Argument Unpacking معرفی شد که به کمک آن می‌شد اعضای یک آرایه را بدون اشاره به تک‌تک عضو‌ها و به عنوان آرگومان‌های ورودی یک تابع معرفی کرد. این کار با افزودن «…» قبل از نام آرایه در تعریف آرگومان‌های تابع قابل انجام است.function test(...$args) { var_dump($args); }
test(1, 2, 3);اما این کار فقط در همین تعریف تابع امکان‌پذیر بود. حالا در این نسخه PHP می‌توان از این عملگر جهت تعریف آرایه‌ها نیز استفاده کرد.$parts = [&#039;apple&#039;, &#039;pear&#039;];
$fruits = [&#039;banana&#039;, &#039;orange&#039;, ...$parts, &#039;watermelon&#039;];
// [&#039;banana&#039;, &#039;orange&#039;, &#039;apple&#039;, &#039;pear&#039;, &#039;watermelon&#039;];تا قبل از معرفی این ویژگی، برای انجام عملیات بالا مجبور بودیم از تابع array_merge استفاده کنیم که این راه حل جدید به مراتب سریع تر از فراخوانی تابع array_merge است.اما توجه داشته باشید این قابلیت فقط بر روی آرایه‌هایی که اندیس‌شان عدد است قابل اجرا است.Numeric Literal Separatorدر این نسخه برای بهتر خوانده شدن اعداد می‌توان از underline (_) برای جداسازی ارقام استفاده کرد. نگران نباشید؛ این کاراکتر به طور کامل توسط مفسر نادیده گرفته می‌شود!6.674_083e-11; // float
299_792_458;   // decimal
0xCAFE_F00D;   // hexadecimal
0b0101_1111;   // binaryبهبود تابع strip_tagsاز این تابع برای حذف تگ‌های HTML استفاده می‌شود. در این نسخه، PHP استفاده از این تابع را آسان‌تر کرده است. تا قبل از این، از این تابع به صورت زیر استفاده می‌شد:strip_tags($str, &#039;&lt;a&gt;&lt;p&gt;&#039;);از این به بعد می‌توان آرگومان دوم تابع را به صورت یک آرایه از تگ‌های مورد نظر نوشت:strip_tags($str, [&#039;a&#039;, &#039;p&#039;]);اضافه شدن تابع mb_str_split در این نسخه، PHP تابع جدید mb_str_split را معرفی کرده‌ است که دقیقا همان کاربرد تابع str_split را دارد. با این تفاوت که تابع str_split، رشته‌ را به آرایه‌ای از کاراکتر‌های یک بایتی تبدیل می‌کند؛ اما mb_str_split برای کار با Code Pointها ساخته شده است. یعنی لزومی ندارد طول کاراکتر‌ها حتما یک بایت باشند و طول کاراکتر را می‌توان در آن مشخص کرد.mb_str_split ( string $string [, int $split_length = 1 [, string $encoding = mb_internal_encoding() ]] ) : arrayمقایسه پرفورمنسبا استفاده از نسخه جدید موتور zend و بهبود‌های متعدد در نسخه‌های مختلف این سری، سعی شده حافظه مصرفی، سرعت و عملکرد برنامه‌هایی که با PHP نوشته شده‌اند بهبود یابد. با توجه به نتایج آزمایش زیر می‌توان گفت که PHP 7 در این رابطه بسیار موفق عمل‌ کرده است.نتایج زیر از اجرای یک کد ساده PHP بر روی یک Macbook Pro, 2.5 GHz Intel Core i7 بدست آمده است.PHP version : 5.6.40
--------------------------------------
test_math                 : 1.101 sec.
test_stringmanipulation   : 1.144 sec.
test_loops                : 1.736 sec.
test_ifelse               : 1.122 sec.
Mem: 429.4609375 kb Peak mem: 687.65625 kb
--------------------------------------
Total time:               : 5.103PHP version : 7.0.33
--------------------------------------
test_math                 : 0.344 sec.
test_stringmanipulation   : 0.516 sec.
test_loops                : 0.477 sec.
test_ifelse               : 0.373 sec.
Mem: 421.0859375 kb Peak mem: 422.2109375 kb
--------------------------------------
Total time:               : 1.71PHP version : 7.1.28
--------------------------------------
test_math                 : 0.389 sec.
test_stringmanipulation   : 0.514 sec.
test_loops                : 0.501 sec.
test_ifelse               : 0.464 sec.
Mem: 420.9375 kb Peak mem: 421.3828125 kb
--------------------------------------
Total time:               : 1.868PHP version : 7.2.17
--------------------------------------
test_math                 : 0.264 sec.
test_stringmanipulation   : 0.391 sec.
test_loops                : 0.182 sec.
test_ifelse               : 0.252 sec.
Mem: 456.578125 kb Peak mem: 457.0234375 kb
--------------------------------------
Total time:               : 1.089PHP version : 7.3.4
--------------------------------------
test_math                 : 0.233 sec.
test_stringmanipulation   : 0.317 sec.
test_loops                : 0.171 sec.
test_ifelse               : 0.263 sec.
Mem: 459.953125 kb Peak mem: 460.3984375 kb
--------------------------------------
Total time:               : 0.984PHP version : 7.4.0-dev
--------------------------------------
test_math                 : 0.212 sec.
test_stringmanipulation   : 0.358 sec.
test_loops                : 0.205 sec.
test_ifelse               : 0.228 sec.
Mem: 459.6640625 kb Peak mem: 460.109375 kb
--------------------------------------
Total time:               : 1.003انتظار برای نسل هشتمدر مجموع PHP در سری هفتم خود دست به تغییرات اساسی زده است؛ به طوری که از آن به عنوان نسل جدیدی از PHP یاد می‌کنند. با همه این تغییرات، برنامه‌نویسان PHP باز هم منتظر اتفاقات مهم در نسخه هشتم این زبان خواهند بود. در پست بعدی کوئرامگ، درباره این تغییرات صحبت می‌کنیم.ترجمه شده بر اساس:wiki.PHP.net/rfc&quot;Evolution of PHP — v5.6 to v8.0&quot;, by Martynas Eskis&quot;5 New Features In PHP 7 That You Should Have A Look At&quot; @ StarTutorial&quot;Throwable Exceptions and Errors in PHP 7&quot; @ Trowski&quot;New in Symfony 4.4: Preloading Symfony Applications in PHP 7.4&quot;کوئرامگ مجله‌ای تخصصی برای توسعه‌دهندگان است که هر هفته با مطلب‌هایی در زمینه تکنولوژی، رشد فردی و آینده برنامه‌نویسی به‌روزرسانی می‌شود. برای اطلاع از آخرین مطلب‌های ما، می‌توانید توئیتر یا کانال تلگرام کوئرا را دنبال کنید.</description>
                <category>کوئرامگ | مجله تخصصی برنامه‌نویسان</category>
                <author>Zahra Delbari</author>
                <pubDate>Tue, 16 Jun 2020 14:20:14 +0430</pubDate>
            </item>
                    <item>
                <title>انقلاب پنج به هفت؛ داستان PHP (قسمت اول)</title>
                <link>https://virgool.io/Quera-Mag/evolution-of-php-v5-to-v7-ndntjax5igff</link>
                <description>برای خیلی از برنامه‌نویس‌ها، PHP v7 احتمالا هیجان‌انگیزترین نسخه منتشر شده است. این نسل از PHP از همان اولین ریلیز، با ویژگی‌ها و قابلیت‌های جدیدی که داشت به سرعت جای خود را در دل برنامه‌نویس‌ها باز کرد. در قسمت اول این سری، تغییرات و بهبودهای نسخه‌های ۷.۰ و ۷.۱ را مرور می‌کنیم. در قسمت‌ دوم هم به سراغ تغییرات نسخه‌های بعدی PHP v7 رفتیم و به زودی آپدیت‌های مورد انتظار برای PHP v8 را بررسی خواهیم کرد.اگر قصد یادگیری و تمرین زبان PHP را دارید، کافی است کمی پشتکار داشته باشید و سری به دوره «آموزش پروژه‌محور برنامه‌نویسی وب با PHP» در کوئراکالج بزنید. در این دوره با پروژه‌های واقعی از شرکت دیجی‌کالا و تمرین‌های مختلف سر و کار خواهید داشت.گمشده‌ای به نام PHP v6همین اول کار ممکن است این سوال برای شما هم پیش بیاید که چرا تغییرات نسخه ۷ را نسبت به نسخه ۵ بررسی می‌کنیم، به خاطر این است که نسخه ۶ تغییر مهمی نداشته است؟نمی‌دانم تا به حال دقت کرده‌اید که گاهی شرکت‌ها در نام‌گذاری نسخه‌های محصولات خود از روی بعضی از اعداد می‌پرند. مثلا هیچ وقت Windows 9 ،Samsung Galaxy Note 6 ،iPhone 9 و IPv5 به بازار ارائه نشدند. به غیر از دلیل seven ate nine که برای پرش از «ورژن ۹ها» آورده می‌شود، دلایل بازاریابی هم گاهی اوقات در این پرش موثر است.درباره ورژن ششم PHP هم یکی از این پرش‌ها اتفاق افتاد. PHP v6 قرار بود تا سال ۲۰۰۵ عرضه شود و پشتیبانی ذاتی از Unicode اصلی‌ترین ویژگی‌ای بود که توسعه‌دهندگان نوید آن را در نسخه جدید می دادند.در واقع هرچند در PHP ارسال یا دریافت اطلاعات Unicode امکان‌پذیر است اما خود PHP درک درستی از آن‌ها ندارد. تعریف string در PHP رشته‌ای از کارکتر‌های یک بایتی است؛ بنابراین موقع اعمال توابعی مانند substring و strlen با رشته‌های حاوی کاراکترهای Unicode نباید انتظار خروجی‌‌های دلخواه را داشته باشیم.در نهایت تمامی تلاش‌ها در راستای پیاده‌سازی Unicode بی‌نتیجه ماند. البته بسیاری از ویژگی‌های ریز و درشتی که برای این نسخه در نظر گرفته شد بود به branch نسخه 5.3 منتقل و در آن‌جا پیاده‌سازی شد. همین حالا هم عده‌ای معتقدند که PHP v5.3 در واقع همان PHP v6 است؛ ولی به هر حال PHP نتوانست نسل ششم خود را عرضه کند.با اینکه PHP v6 شکست خورد و هرگز به نتیجه نرسید اما خوشبختانه PHP v7 دارای یک جدول زمانی مشخص و واضح است. در ۱۲ آذر ۱۳۹۴ حاصل تلاش‌های دو ساله تیم توسعه با نام PHP v7 ارائه شد که یکی از موفق‌ترین تجربیات این تیم بود. در واقع از نظر آن‌ها انتشار PHP v7 نه فقط منتشر شدن یک نسخه جدید، بلکه ظهور نسل جدیدی از PHP با پتانسیلی بالا بود.اولین ریلیز نسل؛ PHP v7.0ورژن هفتم PHP با نسخه جدید از موتور zend، بهبود‌های قابل توجه و تعداد زیادی ویژگی‌ جدید روی کار آمد که در ادامه به بررسی تعدادی از این ویژگی‌ها می‌پردازیم.- پشتیبانی از Anonymous Classکلاس‌های Anonymous همان‌طور که احتمالا حدس زدید، کلاس‌هایی هستند که نام ندارند و با کلیدواژه new class تعریف می‌شوند. از این کلاس‌ها زمانی استفاده می‌شود که در طول اجرای کد فقط یک‌بار به آن‌ها نیاز داریم به همین خاطر ثبت کردن آنها به عنوان کلاسی مستقل و جداگانه لزومی ندارد.// Pre PHP 7 code
class Logger{
        public function log($msg){
                echo $msg;
        }
}

$util-&gt;setLogger(new Logger());


// PHP 7+ code
$util-&gt;setLogger(new class {
        public function log($msg){
                echo $msg;
        }
});- اضافه شدن تابع تقسیم عدد صحیحتابع Intdiv یک راه امن برای تقسیم دو عدد صحیح است؛ حتی زمانی که تقسیم بر صفر داشته باشیم. این تابع ورودی اول را بر ورودی دوم تقسیم می‌کند و حاصل تقسیم را به صورت یک عدد صحیح برمی‌گرداند. در صورتی که مقسوم علیه صفر باشد، یک E_WARNING تولید می‌شود و مقدار خروجی False است.var_dump(intdiv(3, 2)); \\int(1)

var_dump(intdiv(-3, 2)); \\int(-1)

var_dump(intdiv(PHP_INT_MIN, -1));\\Fatal error: Uncaught ArithmeticError: Division of PHP_INT_MIN by -1 is not an integer

var_dump(intdiv(1, 0));\\Fatal error: Uncaught DivisionByZeroError: Division by zero in- اضافه شدن عمل‌گر ??این عمل‌گر در صورتی که اولین متغیرش null باشد مقدار دومین متغیر و در غیر این صورت مقدار همان اولین متغیر را بر می‌گرداند. اصولا از آن برای تعریف مقدار پیش‌فرض برای یک متغیر در صورتی که تعریف نشده باشد استفاده می‌شود. از این عمل‌گر به صورت زنجیره‌ای هم می‌توان استفاده کرد.// Pre PHP 7 code
$username = isset($_GET[&#039;user&#039;]) ? $_GET[&#039;user&#039;] : &#039;nobody&#039;;

// PHP 7+ cod
$username = $_GET[&#039;user&#039;] ?? &#039;nobody&#039;;
$x = NULL;
$y = NULL;
$z = 3;
var_dump($x ?? $y ?? $z); // int(3)- اضافه شدن عمل‌گر Spaceshipاز این عمل‌گر برای بهینه کردن و ساده‌سازی عملیات مقایسه استفاده می‌شود.// Pre PHP 7 code
order_func($a, $b) {
        return ($a &lt; $b) ? -1 : (($a &gt; $b) ? 1 : 0);
}

// PHP 7+ code
order_func($a, $b) {
        return $a &lt;=&gt; $b;
}- قابلیت تعیین کردن type اسکالردر PHP به داده‌های int ،float ،string و boolean اسکالر گفته می‌شود.در PHP برای متغیر‌ها TYPE تعریف نمی‌شود. به همین دلیل تا قبل از این، پارامتر‌های ورودی تابع به صورت خودکار و با توجه به مقداری که هنگام فراخوانی تابع در آن می‌ریختیم تعیین می‌شد. اما حالا می‌توان type این پارامتر‌ها را از قبل مشخص کرد. این کار باعث می‌شود کنترل بهتری روی کد داشته باشیم و کد آسان‌تر خوانده شود.برای انجام آن دو روش وجود دارد:دقیق:در این روش در صورتی که type داده‌های‌ ارجاع شده به تابع با آن چیزی که تابع انتظار دارد هم‌خوانی نداشته باشد، خطا رخ می‌دهد. البته در مورد داده int در صورت لزوم می‌تواند با اضافه کردن 0. به انتهای عدد، آن را float در نظر بگیرد. برای فعال کردن این حالت کافی است مقدار strict_types را ۱ کنید.declare(strict_types=1);

function getSum(float $a, float $b) {
        return $a + $b;
}

getSum(3, &amp;quot2 week&amp;quot);
// Fatal error: Uncaught TypeError: Argument 2 passed to getSum() must be of the type float, string given

getSum(1.8,  &amp;quot4.5&amp;quot);
// Fatal error: Uncaught TypeError: Argument 2 passed to getSum() must be of the type float, string given

getSum(3.1, 2);
// int(2) change to float(2.0)
//returns float(5.1)اجباری:در این روش که حالت پیش‌فرض هم هست، حتی اگر type داده ارجاعی همخوانی نداشته باشد PHP سعی می‌کند آن‌ را به داده مورد نظر تبدیل کند.function getSum(float $a, float $b) {
        return $a + $b;
}

getSum(6, &amp;quot7 week&amp;quot);
//Here int(6) changed to float(6.0) and string “7 week” changed to float(7.0)
//with a Notice: A non well formed numeric value encountered
//returns float(13)

getSum(1.1, &amp;quot2.2&amp;quot);
//Here string &amp;quot2.2&amp;quot is changed to float(2.2) without any notice
//returns float(3.3)

getSum(3.1, 2);
// changes int(2) to float(2.0)
// returns float(5.1)البته باید توجه داشت این ویژگی در این نسخه فقط برای پارامتر‌های تابع وجود دارد و در تعریف متغیرها نمی‌توان نوع آن‌ها را مشخص کرد.- قابلیت تعیین کردن type خروجی تابعبا استفاده از این قابلیت می‌توان type خروجی مورد انتظار را در تعریف تابع مشخص کرد. خوبی این کار این است که می‌دانیم type خروجی تابع دقیقا چه خواهد بود و بدون دغدغه از خطای احتمالی، از آن در ادامه برنامه استفاده می‌کنیم.مانند تعیین type ورودی، برای خروجی هم همان دو حالت دقیق و اجباری وجود دارد.دقیق:declare(strict_types=1);

function getSum(float $a, float $b) : int {
        return $a + $b;
}

getSum(3.1, 2); //Fatal error:  Uncaught TypeError: Return value of getSum() must be of the type integer, float returnedاجباری:function getSum(float $a, float $b) : int {
        return $a + $b;
}

getSum(3.1, 2); // changes int(2) to float(2.0) and returns int(5)
- قابلیت مشخص کردن use به صورت گروهیاین قابلیت زمانی به کار می‌آید که بخواهیم از یک فضای اسمی مشترک (یا حداقل تا قسمتی مشترک) چندین موجودی را import کنیم. به جای اینکه تک‌تک آن‌ها را در خط‌های جداگانه تایپ کنیم، می‌توانیم با استفاده از group use قسمت مشترک آن‌ها را فاکتور بگیریم و نسخه خلاصه‌تری از آن را بنویسیم.// Pre PHP 7
use Symfony\Component\Console\Helper\Table;
use Symfony\Component\Console\Input\ArrayInput;
use Symfony\Component\Console\Output\NullOutput;

//  PHP 7+
use Symfony\Component\Console\{ Helper\Table, Input\ArrayInput, Output\NullOutput,};- بهبود Performanceهمانطور که از دو نمودار زیر پیدا است PHP v7 در خصوص کارایی و میزان استفاده از حافظه بهبود قابل توجهی نسبت به نسخه قبل از خود پیدا کرده است؛ به طوری که عملکرد آن در خصوص صفحه‌ای شامل درخواست‌های متنوع از پایگاه داده، با opcمقاache فعال حدود ۳ برابر و بدون opcache حدود ۲.۷ برابر سریعتر از PHP v5.6 است. از منظر حافظه هم می‌توان دید که تفاوت معناداری بین این دو نسخه وجود دارد.مقایسه کارایی در نسخه ۵.۶ و ۷.۰ PHPمقایسه مصرف حافظه در نسخه ۵.۶ و ۷.۰  PHP- قابلیت کنترل کردن خطاهاکنترل کردن fatal errorها در نسخه‌های قبلی PHP غیرممکن بود. این دست خطاها هیچ‌گونه handlerای را فراخوانی نمی‌کنند و صرفا اجرای اسکریپت را متوقف می‌کنند.در PHP v7، هنگام رخ دادن خطاهای E_RECOVERABLE_ERROR و E_ERROR به جای متوقف کردن اجرای اسکریپت، یک Exception ایجاد می‌شود. اما fatal errorها هنوز هم برای شرایط خاص مانند run out of memory وجود دارند و مانند گذشته عمل می‌کنند. این قانون برای Exceptionای که catch نشده باشد هم برقرار است.علاوه بر این، Exceptionهای ایجاد شده توسط fatal errorها برخلاف دیگر Exceptionها به جای ارث‌بری از کلاس Exception، از کلاس Error ارث‌بری می‌کنند. بنابراین برای راحتی کار و یکی کردن دو شاخه استثنای Exception و Error، هر دو interface جدیدی به نام Throwable را پیاده‌سازی می‌کنند.به این ترتیب، سلسله مراتب Exception جدید در PHP v7 به شکل زیر است:interface Throwable
   | - Exception implements Throwable
           | - ...
   | - Error implements Throwable
           | - TypeError extends Error
           | - ParseError extends Error
           | - ArithmeticError extends Error
                   | - DivisionByZeroError extends Arithmet- ویژگی Unicode برای نقطه‌کد‌های Escape Syntaxدر Unicode به هر کاراکتر یک «نقطه‌کد» (Code Point) تخصیص داده می‌شود. برای نمونه A به نقطه‌کد U+0041 نگاشت می‌شود که هگزادسیمال‌شده‌ همان 65 در سیستم دَه‌دَهی است. تا قبل از PHP v7 استفاده از نقطه‌کدها در رشته‌ها کار آسانی نبود و باید از توابعی مانند mb_convert_encoding استفاده می‌شد؛ اما PHP v7 با معرفی یک Escape Character برای این نقطه‌کد‌ها، کار را بسیار راحت کرده است.echo &amp;quotHi \u{1f606}&amp;quot//Hi ?- مجاز بودن تعیین Keys در ()listتکنولوژی PHP از ساختاری زبانی برای مقدار‌دهی چندین متغیر توسط عناصر یک آرایه به نام ()list استفاده می‌کند.list($first, $second, $third) = $someArray;تا قبل این نسخه از ()list فقط به همین صورت می‌شد استفاده کرد؛ یعنی اولین متغیری که در آن قرار می‌گرفت برابر با مقدار اولین خانه آرایه و دومین متغیر دومین خانه آرایه و الی آخر.اما در این نسخه می‌توان با استفاده از کلید‌های آرایه، مشخص کرد هر متغیر مقدار کدام خانه از آرایه را می‌خواهد.class ElePHPant{
        private $name, $colour, $age, $cuteness;

        public function __construct(array $attributes) {

                // Pre PHP 7 code
                $this-&gt;name = $attributes[&amp;quotname&amp;quot];
                $this-&gt;colour = $attributes[&amp;quotcolour&amp;quot];
                $this-&gt;age = $attributes[&amp;quotage&amp;quot];
                $this-&gt;cuteness = $attributes[&amp;quotcuteness&amp;quot];

                // PHP 7+ code
                 list(
                        &amp;quotname&amp;quot =&gt; $this-&gt;name,
                        &amp;quotcolour&amp;quot =&gt; $this-&gt;colour,
                        &amp;quotage&amp;quot =&gt; $this-&gt;age,
                        &amp;quotcuteness&amp;quot =&gt; $this-&gt;cuteness
                ) = $attributes;
        }
}همچنان انقلابی؛ PHP v7.1نسخه جدید سری ۷ در ۱۱ آذر ۱۳۹۵ منتشر شد. این نسخه نیز شامل تعداد زیادی تغییر و تحول بود که سعی می‌کنیم بعضی از مهم‌ترین‌هایشان را بررسی کنیم.- اضافه شدن Nullable Typesدر بسیاری از زبان‌های برنامه نویسی از جمله PHP معمول است که به متغیر اجازه دهیم یک type داشته باشد یا تهی بماند. این تهی‌بودن غالباً حاکی از خطا یا نبود چیزی برای برگرداندن است. تا قبل از این، بدون مشخص کردن type متغیر و یا دادن مقدار پیشفرض null به پارامتر‌های ورودی، می‌شد اینکار را انجام داد. مشکل زمانی است که type خروجی تابع مشخص می‌شود؛ در این صورت دیگر اجازه نداریم null را به عنوان خروجی بدهیم. اما در این نسخه با اضافه کردن ? قبل از type متغیر می‌توان اجازه داد خروجی null هم باشد.function answer(): ?int  { 
        return null; //ok
}

function answer(): ?int  {
        return 42; // ok
}

function answer(): ?int  {} // error -- none returned

function answer(): ?int {
        return new stdclass(); // error
}

function say(?string $msg) {
        if ($msg) {
                echo $msg;
        }
}

say(&#039;hello&#039;); // ok -- prints hello
say(null); // ok -- does not print
say(); // error -- missing parameter
say(new stdclass); //error -- bad type- اضافه شدن خروجی Voidfunction should_return_nothing(): void {
        return 1; // Fatal error: A void function must not return a value
}

function lacks_return(): void {
        // valid
}

function returns_nothing(): void {
        return; // valid
}

function returns_null(): void {
        return null; // Fatal error: A void function must not return a value
}برخلاف دیگر typeهای خروجی که هنگام فراخوانی تابع چک می‌شوند، Void در زمان کامپایل بررسی می‌شود؛ به این معنی که بدون نیاز به فراخوانی تابع، خطا ایجاد می‌شود.- اضافه شدن شبهِ Type قابل تکرار (Pseudo Iterable Type) برای یک تابع در PHP این اتفاق معمول است که یک آرایه و یا یک شیء (که واسط Traversableرا پیاده‌سازی کرده است) به عنوان ورودی بپذیرد تا بتواد با استفاده از foreach اعضای آن را پیمایش کند. اما از آن‌جا که آرایه Primitive Type و Traversableیک واسط هستند، تا قبل از این نمی‌شد type ورودی یا خروجی را طوری تعیین کرد که نشان‌دهنده قابل تکرار (Iterable) بودنش باشد. PHP v7.1 با معرفی شبهِ type قابل تکرار (Iterable Pseudo-Type) این مشکل را حل کرده است.function foo(iterable $iterable) {
        foreach ($iterable as $value) {
                // ...
        }
}function bar(): iterable {
        return [1, 2, 3];
}مقدار پیش‌فرض Iterable می‌تواند یک آرایه و یا null باشد.function foo(iterable $iterable = [ ]) {
        // ...
}- قابلیت جدید Closure from Callableقابلیت Closure برای نمایش توابع anonymous به کار می‌رود. در واقع متغیر‌هایی که شامل این توابع هستند اشیای کلاس Closureاند.$a = function(){ echo “hi”;}; \\ a is a object of Closure classبه علاوه این، Callable شبهِ typeای است که با استفاده از آن می‌توان توابع را با استفاده از نام‌شان به صورت داینامیک در هر کجای برنامه فراخوانی کرد.در این نسخه یک Static Method به کلاس Closure اضافه شده است که با استفاده از آن می‌توان یک Callable را مستقیما به یک Closure در همان Scope تبدیل کرد.class Closure {
         ...
        public static function fromCallable(callable $callable) : Closure {...}
         ...
}این تابع بررسی می‌کند که آیا Callable ورودی، در Scope فعلی قابل فراخوانی هست یا خیر. اگر بود closure ساخته شده را بر می‌گرداند؛ در غیر این صورت یک TypeError خروجی می‌دهد. به عنوان مثال تلاش برای ایجاد Closure به Private Method یک شی، اگر در خارج از scope شی باشد غیرممکن است ولی از درون شی موفقیت‌آمیز خواهد بود.برای مثال تکه‌کد زیر مشکلی ندارد؛ چون از تابع fromCallable در درون شی استفاده شده است.class Validator {

        public function getValidatorCallback($validationType) {
                if ($validationType == &#039;email&#039;) {
                        return Closure::fromCallable([$this, &#039;emailValidation&#039;]);
                }
                return Closure::fromCallable([$this, &#039;genericValidation&#039;]);
        }

        private function emailValidation($userData) {...}
        private function genericValidation($userData) {...}
}

$validator = new Validator();
$callback = $validator-&gt;getValidatorCallback(&#039;email&#039;);
$callback($userData);- جایگزینی ()list با [ ]با افزوده شدن این قابلیت بدون استفاده از تابع ()list می‌توان خانه‌های یک آرایه را بین چندین متغیر پخش کرد (شبیه همان چیزی که در بخش تغییرات نسخه ۷ گفته شد).$array = [&amp;quota&amp;quot =&gt; 1, &amp;quotb&amp;quot =&gt; 2, &amp;quotc&amp;quot =&gt; 3];

// Assigns to $a, $b and $c the values of their respective array elements in $array with keys
numbered from zero
[$a, $b, $c] = $array;

// Assigns to $a, $b and $c the values of the array elements in $array with the keys &amp;quota&amp;quot, &amp;quotb&amp;quot and &amp;quotc&amp;quot, respectively
[&amp;quota&amp;quot =&gt; $a, &amp;quotb&amp;quot =&gt; $b, &amp;quotc&amp;quot =&gt; $c] = $array;- اضافه شدن قابلیت تعیین سطوح دسترسی برای Constantها‌ی یک کلاسclass Token {
        // Constants default to public
        const  PUBLIC_CONST = 0;

        // Constants then also can have a defined visibility
        private const  PRIVATE_CONST = 0;
        protected const  PROTECTED_CONST = 0;
        public const  PUBLIC_CONST_TWO = 0;

        //Constants can only have one visibility declaration list
        private const  FOO = 1, BAR = 2;
}- پشتیبانی از اندیس منفی در Stringvar_dump(&amp;quotabcdef&amp;quot[-2]); \\ string (1) &amp;quote&amp;quot
var_dump(strpos(&amp;quotaabbcc&amp;quot, &amp;quotb&amp;quot, -3)); \\ int(3)- چندین نوع استثناء، یک بلوک Catchتا قبل از این در شرایطی که چند نوع مختلف از Exceptionها مانند هم کنترل می شدند مجبور بودیم یک بلوک ثابت Catch را به ازای هر Exception تکرار کنیم؛ اما در این نسخه این مشکل حل شده است.try {
        // Some code...
} catch (ExceptionType1 | ExceptionType2 $e) {
        // Code to handle the exception
} catch (\Exception $e) {
        // ...
}تغییرات دنباله‌دارهمان‌طور که در شروع مطلب هم گفتیم، بهبودهای PHP در آپدیت‌های بعدی PHP v7 هم ادامه داشت. در قسمت دوم این سری تغییرات نسخه‌های ۷.۲، ۷.۳ و ۷.۴ را بررسی کردیم و در آینده درباره پیش‌بینی‌ها از PHP v8 خواهیم گفت.ترجمه شده بر اساس:wiki.PHP.net/rfc&quot;Evolution of PHP — v5.6 to v8.0&quot;, by Martynas Eskis&quot;5 New Features In PHP 7 That You Should Have A Look At&quot; @ StarTutorial&quot;Throwable Exceptions and Errors in PHP 7&quot; @ Trowskiکوئرامگ مجله‌ای تخصصی برای توسعه‌دهندگان است که هر هفته با مطلب‌هایی در زمینه تکنولوژی، رشد فردی و آینده برنامه‌نویسی به‌روزرسانی می‌شود. برای اطلاع از آخرین مطلب‌های ما، می‌توانید توئیتر یا کانال تلگرام کوئرا را دنبال کنید.</description>
                <category>کوئرامگ | مجله تخصصی برنامه‌نویسان</category>
                <author>Zahra Delbari</author>
                <pubDate>Sun, 07 Jun 2020 19:53:15 +0430</pubDate>
            </item>
                    <item>
                <title>جعبه‌ابزار؛ ۱۵ برنامه روزمره برای برنامه‌نویسان PHP</title>
                <link>https://virgool.io/Quera-Mag/php-tools-p5jrxtjokpyr</link>
                <description>طبق آماری که سایت رسمی php.net منتشر کرده است، زبان PHP در بیش از ۲۴۰ میلیون وب‌سایت و ۲ میلیون وب‌سرور استفاده شده است.سایت W3Techs که به عنوان یکی از مراجع معتبر در زمینهٔ بررسی‌ فناوری‌های تحت وب شناخته می‌شود هم در گزارشی اعلام کرده است که زبان PHP موتور محرک ۷۸ درصد از کل وب‌سایت‌های دنیا است و در بیشتر سال‌ها در فهرست ۱۰ زبان محبوب از دید برنامه‌نویسان سراسر دنیا قرار گرفته است.همان‌طور که در مطلب «راهنمای جامع برای آشنایی با PHP و دنیای طراحی وب» اشاره کردیم، PHP یکی از زبان‌های برگزیده اسکریپت‌نویسی سمت سرور برای بسیاری از توسعه‌دهندگان وب است. اگر شما برنامه‌نویس PHP هستید و یا به تازگی می‌خواهید یادگیری زبان PHP را شروع کنید، به ابزارهایی نیاز دارید تا کدهایتان را در آن بنویسید و یا آن‌ها را ویرایش کنید.اگر قصد یادگیری و تمرین زبان PHP را دارید، کافی است کمی پشتکار داشته باشید و سری به دوره «آموزش پروژه‌محور برنامه‌نویسی وب با PHP» در کوئراکالج بزنید. در این دوره با پروژه‌های واقعی از شرکت دیجی‌کالا و تمرین‌های مختلف سر و کار خواهید داشت.بخش اول : بهترین محیط‌های توسعهٔ PHPبخش دوم: بهترین ابزارهای تست PHPبخش سوم: بهترین ابزارهای اشکال‌زدایی PHPبخش چهارم: بهترین ابزار مستندسازی PHPبخش پنجم: بهترین ابزار امنیتی PHPبخش ششم: بهترین ابزار نظارت بر کارایی PHPبهترین محیط‌های توسعهٔ PHPادیتور PHPStormادیتور PHPStormادیتور PHPStorm از محبوب‌ترین و حرفه‌ای‌ترین ابزارها برای برنامه‌نویسی PHP است. این ویرایش‌گریکی از اعضای خانواده شرکت معروف JetBrains است که از تمامی فریم‌ورک‌ها و CMSهای PHP از جمله Drupal ،WordPress ،Symphony و Laravel پشتیبانی می‌کند. این ادیتور با همه ورژن‌های PHP سازگار است و HTML و JavaScript هم در آن اجرا می‌شود. این ادیتور را می‌توانید بر روی سیستم عامل‌‌های Mac OS ،Microsoft Windows و Linux استفاده کنید. پشتیبانی از PHPDoc و تکمیل کدهای PHP به طور خودکار از ویژگی‌های این ادیتور کاملا رایگان است.ادیتور AWS Cloud9ادیتور AWS Cloud9ادیتور AWS Cloud9، برای توسعه کامل برنامه‌های PHP روی فضای ابری یک محیط ویرایشگر کد حرفه‌ای آنلاین است. به دلیل یکپارچه‌سازی کامل آن با سرویس‌های وب آمازون، به قوی‌ترین و بسط‌پذیرترین پلتفرم توسعه آنلاین تبدیل شده است. این IDE آنلاین علاوه بر ویرایش کدها، ابزارهای دیباگ پیشرفته‌ای را ارائه می‌دهد. این ابزار علاوه بر اینکه امکان ساخت برنامه‌های کاربردی وب را بدون نیاز به سرور به شما می‌دهد، از همهٔ ویژگی‌های پیش‌رفته‌ای که از یک IDE مدرن انتظار دارید مانند راهنمای سریع کد و تکمیل خودکار کد هم پشتیبانی می‌کند.نرم‌افزار  XAMPPنرم‌افزار  XAMPPنرم‌افزار زمپ یک شبیه ساز سرور به صورت لوکال است که اجازه می‌دهد قبل از آپلود کردن پروژه‌های خود روی هاست اصلی، آن‌ها را روی کامپیوتر شخصی خود تست کنید. هم‌چنین سرویس‌دهنده‌های Apache ،MySQL ،Perl و PHP نیز به صورت خودکار در هنگام نصب نرم‌افزار Xampp به سادگی نصب می‌شوند. در واقع نرم‌‌افزار Xampp کدهای PHP را به صورت localhost در سیستم شما اجرا و امکان ویرایش سریع آن‌ها را فراهم می‌کند. این ابزار که پیش از این امتحان خود را پس داده است پشتیبانی خوبی دارد، نصب آن آسان است و هر کسی می‌تواند آن را به صورت رایگان دریافت کند.ادیتور Eclipse PDTادیتور Eclipse PDTاگر کمی تجربه کار با محیط‌های ویرایشگر زبان جاوا و یا اندروید را داشته باشید حتما نام ادیتور Eclipse به گوش‌تان خورده است. اگرچه Eclipse در ابتدا محیطی برای توسعه کدنویسی جاوا در نظر گرفته شده بود، اما اکنون با اضافه شدن افزونهٔ PDT، برای پشتیبانی از کدهای PHP نیز استفاده می‌شود. Eclipse منبع باز (Open Source) است و دارای همهٔ ویژگی‌هایی است که از یک محیط ویرایشگر کد انتظار دارید.ادیتور Aptana Studioادیتور Aptana Studioادیتور Aptana یکی دیگر از ابزارهای  مفیدی است که ویژگی بسیار منحصربه‌فردی به نام Code Assist دارد که به شما در نوشتن کد به چند زبان کمک می‌کند. این ابزار از زبان‌هایی مثل PHP ،Python ،Perl JavaScript ،HTML5 ،CSS3 و Ruby پشتیبانی می‌کند و در تمامی سیستم عامل‌ها نیز قابل نصب است. این ادیتور از سرور داخلی PHP بهره‌مند است که می‌توانید کدهای خود را دیباگ کنید و ابزارهای دیگر خود را برای ساخت و آزمایش برنامه‌های PHP در یک محیط واحد به صورت یکپارچه در بیاورید.ادیتور PhpEDادیتور PhpEDاین ادیتور را می‌توان به عنوان یکی از بهترین نرم‎افزارهای دانست. PhpED یک محیط توسعه برای طراحی و ویرایش کدهای PHP در پروژه‌های کوچک و یک محیط برای بالابردن میزان پیشرفت روند توسعه در پروژه‌های بزرگ دارد. این نرم افزار شامل ابزارها و توابع قدرتمندی به منظور توسعه وب‌سایت و برنامه‌های کاربردی وب و همچنین دو ابزار DBG Debugger و Php Profiler برای عیب‌یابی و نمایش سرعت اجرای دستورات در صفحات PHP است. هم‌چنین از Jаvascript  ،HTML ،CSS ،XML ،SMARTY و XHTML کاملا پشتیبانی می‌کند.ادیتور Sublime Textادیتور Sublime Textاین ادیتور یک ویرایشگر متنی است که از زبان‌های برنامه‌نویسی و نشانه‌گذاری پشتیبانی می‌کند. اگر به دنبال یک ویرایشگر ساده و درعین‌حال سریع و انعطاف‌پذیر در طراحی‌ وب هستید، Sublime Text می‌تواند گزینه مناسبی برای شما باشد. ویژگی go-to-anything این ویرایشگر به شما اجازه می‌دهد که فایل‌ها یا خط‌های کد را به سرعت پیدا کنید و ویرایش هم‌زمان از چند منبع به شما این توانایی را می‌دهد که چندین نمونه از کد را به‌طور هم‌زمان تغییر دهید.بهترین ابزارهای تست کد PHPابزار PHPUnitابزار PHPUnitاین ابزار که از مجموعه محبوب JUnit است، یک چارچوب ساده برای نوشتن تست‌هایی است که برای PHP5 استفاده می‌شود. این ابزار کمک می‌کند تا پایداری و مقیاس پذیری(scalability) برنامه‌تان را تست کنید. ابزار HPUnit دقیقا مانند Junit است با این تفاوت که به جای تست جاوا، کارش تست PHP است و به شما اجازه می‌دهد که واحدهای تست خود را بسازید و نتایج را در چندین قالب مختلف مشاهده کنید. PHPUnit به خصوص برای تست پایداری و مقیاس‌پذیری کاربرد دارد.ابزار Selenium ابزار Selenium ابزار Selenium یک ابزار خودکار، رایگان و Open Source است که برای برنامه‌های وب در بین مرورگرها و سیستم‌عامل‌های مختلف استفاده می‌شود. هنگام طراحی وب سایت، با استفاده از سلنیوم، نه تنها می‌توانید تست‌هایی را برای هر بخش تعریف کنید، بلکه می‌توانید تست‌ها را زمان‌بندی کنید و به طور خودکار انجام دهید.بهترین ابزارهای دیباگر PHPابزار Xdebugابزار Xdebugابزار Xdebug از سال ۲۰۰۲ آغاز به کار کرد و از آن زمان تاکنون به یکی از مطمئن‌ترین ابزارهای PHP تبدیل شده است. فرض کنید کدهایی که نوشته‌اید را کامپایل می‌کنید اما خطایی رخ می‌دهد و کد شما متوقف می‌شود. در این نوع شرایط یکی از بدترین مشکلات این است که متوجه نشویم چه خطایی اتفاق افتاده و مشکل از کجا است. اینجا است که Xdebug وارد عمل می‌شود. Xdebug به صورت افزونه برای Eclipse ،PHPDesigner و بسیاری از محیط‌های توسعهٔ دیگر در دسترس است و با ده‌ها ابزار دیباگر frontend دیگر قابلیت سازگاری دارد.ابزار DebugBarابزار DebugBarابزار DebugBar یکی از پرکاربردترین دیباگرها برای هر توسعه‌دهنده است. علاوه بر اینکه شما می‌توانید کدهای PHP با این ابزار دیباگ کنید، خطاهای مربوط به کدهای HTML و JavaScript را هم با استفاده از آن پیدا خواهید کرد. در کنار این ویژگی‌ها، DebugBar می‌تواند ترافیک شبکه را مانیتور و کنترل کند و کدهای CSS و JavaScript شما را ارزیابی نماید. این امکانات برای این ابزار متن‌باز بسیار مورد استقبال قرار گرفته است.ابزار MacGDBpابزار MacGDBpهمان‌طور که از نامش پیدا است، MacGDBp اختصاصا برای دیباگ‌کردن PHP در سیستم عامل مَک‌ ساخته شده است. تمام قابلیت‌هایی که از یک دیباگر حرفه ای نیاز دارید در MacGDBp پیدا می‌شود، مثل قابلیت trace کد و همچنین تنظیم breakpoints در میان کد برنامه.بهترین ابزار مستندسازی PHPابزار PHPDocumentorابزار PHPDocumentorاین مستندسازِ منبع‌بازِ PHP دارای رابط خط فرمانی مبتنی بر وب است. این ابزار کدهای PHP را به طور خودکار تفسیر می‌کند و مستندات را در قالب‌های PDF ،HTML ،CHM و Docbook به عنوان خروجی ارائه می‌دهد. این ابزار با نام‌های phpdoc و phpdocu هم شناخته می‌شود. هم‌چنین از اکثر ویرایشگرهای کد و فریم‌ورک‌های PHP پشتیبانی می‌کند و نصب آن بسیار آسان است.بهترین ابزار امنیتی PHPابزار Securimageابزار Securimage ابزار Securimage کاملا رایگان و برای ساخت تصاویر با کدهای رندم CAPTCHA با هدف ایمن‌سازی فرم‌های وب‌سایت است. این اسکریپت منبع‌باز به شما این توانایی را می‌دهد که به منظور ایمن کردن برنامه‌های PHP خود، کدهای CAPTCHA را ساخته و سامان‌دهی کنید. کدهای CAPTCHA به خصوص برای جداسازی هرزنامه‌ها و تهدیدهای امنیتی در فرم‌های آنلاین مفید هستند. استفاده از کپچا در فرم‌ها جلوی سوء استفاده احتمالی هکرها را می‌گیرد و برای ایجاد امنیت بسیار ضروری است.بهترین ابزار نظارت بر کارایی PHPابزار New Relic APMابزار New Relic APMابزار New Relic یک مرور کلی از عمل‌کرد برنامهٔ PHP شما ارائه می‌دهد. و علاوه بر نظارت بر زیرساخت‌ها، می‌تواند داده‌های کاربر را جمع‌آوری کند و تجزیه و تحلیل‌های ارزشمندی را برای کمک به شما در ایجاد یک تجربهٔ کاربری بهتر ارائه دهد.جمع‌بندیابزارهای زیادی برای ویرایش و توسعه کدهای PHP وجود دارند که در این مطلب به معرفی برخی از این ابزارهای رایگان پرداختیم. هر روز ابزارهای جدیدِ PHP، به وجود می‌آیند. شما چه ابزای خوبی برای کمک به توسعه پروژه‌های برنامه‌نویسی PHP  و یا زبان‌های دیگر می‌شناسید؟ترجمه بر اساس:&quot;23 Useful PHP Tools for the Everyday Web Developer&quot;, by Cody Arsenault @ keycdnکوئرامگ مجله‌ای تخصصی برای توسعه‌دهندگان است که هر هفته با مطلب‌هایی در زمینه تکنولوژی، رشد فردی و آینده برنامه‌نویسی به‌روزرسانی می‌شود. برای اطلاع از آخرین مطلب‌های ما، می‌توانید توئیتر یا کانال تلگرام کوئرا را دنبال کنید.</description>
                <category>کوئرامگ | مجله تخصصی برنامه‌نویسان</category>
                <author>علی.</author>
                <pubDate>Tue, 12 May 2020 21:40:19 +0430</pubDate>
            </item>
                    <item>
                <title>راهنمای جامع برای آشنایی با PHP و دنیای طراحی وب</title>
                <link>https://virgool.io/Quera-Mag/everything-about-php-siqocry1wtbk</link>
                <description>مطمئنا PHP مثل گذشته در اوج نیست، اما این‌طور نیست که PHP کاملا منسوخ شده باشد. در فروم‌هایی مثل StackOverFlow بعضی از برنامه‌نویس‌ها دائما می‌گویند که PHP دیگر کاربردی ندارد؛ اما واقعا نظر آن‌ها درست است یا صرفا به خاطر این است که PHP را دوست ندارند؟اگر اولین قدم‌های خود را در دنیای توسعهٔ وب برمی‌دارید، چه به عنوان یک برنامه‌نویس با آینده‌ای درخشان، یا به عنوان یک کارفرمای بالقوه، طولی نمی‌کشد که با PHP رو به رو خواهید شد. عجیب نیست؛ چون PHP یکی از محبوب‌ترین زبان‌های برنامه‌نویسی وب است. مهم‌تر از آن تقریبا ۷۹ درصد تمامی وب‌سایت‌ها با استفاده از PHP ساخته شده‌اند که ابزارهای مبتنی بر وبی که روزانه از آن‌ها استفاده می‌کنید مانند فیسبوک، ویکی‌پدیا، یاهو، میل‌چیمپ و پینترست هم جزو آن‌ها هستند.اگر به یادگیری زبان برنامه‌نویسی PHP علاقه‌مند هستید، پیشنهاد می‌کنیم سری هم به دوره جدید کوئراکالج، یعنی «آموزش پروژه‌محور برنامه‌نویسی وب با PHP» بزنید. در این دوره با پروژه‌های واقعی از شرکت دیجی‌کالا و تمرین‌های مختلف سر و کار خواهید داشت.زبان برنامه‌نویسی PHP چیست؟زبان PHP یک زبان برنامه‌نویسی سمت سرور و منبع باز (Open Source) برای توسعهٔ برنامه‌های وب است که می‌تواند در کد HTML جاسازی (تعبیه یا embed) شود. PHP با سیستم عامل‌های اصلی و مطرح (macOS, Windows, Linux, Unix) سازگار است و توسط سرورهای وب مختلف (Apache, nginx, IIS, lighttpd) پشتیبانی می‌شود. این زبان برنامه‌نویسی محدود به HTML نیست و می‌تواند فایل‌های متنی و تصویری با ساختارهای متفاوت را ایجاد کرده و خروجی دهد.به علاوه آن، PHP از یک روش موثر در گزینش بانک‌های اطلاعاتی پشتیبانی می‌کند که روند توسعهٔ وب را ساده و آسان می‌کند. PHP با توجه به انعطاف‌پذیر بودنش، محدودیت‌های کمی برای توسعه‌دهندگان، طراحان و کارفرمایان ایجاد می‌کند و آزادی فراوانی را در انتخاب و خلاقیت در اختیارشان می‌گذارد.زبان PHP چه‌کاری می‌تواند انجام دهد؟دفترچهٔ راهنمای رسمی PHP جواب کوتاهی برای این سوال دارد: هر چیزی که با حقیقت فاصله ندارد.سه حوزه اصلی از کاربردهای PHP این‌ها هستند: اسکریپت‌نویسی خط فرمان (Command-line scripting)، اسکریپت‌نویسی سمت سرور (Server-side scripting)، و توسعهٔ برنامه‌های دسکتاپ (Desktop application). این آخری به صورت تئوری امکان‌پذیر است، اما خیلی کم عملی می‌شود. به زبان ساده، هر چیزی که باید با یک وب‌سرور اجرا شود، می‌تواند با PHP ساخته شود: یک وبلاگ، یک فروشگاه آنلاین، یک اسکریپت پردازش داده، یک SaaS (اجاره نرم‌افزار) (۱) پیچیده و سطح بالا و هر چیز مشابهی که به فکرتان می‌رسد.در اصل PHP محتوایی از نوع HTML را بر اساس شروطی تعیین شده، برای بازدیدکنندگان وب‌سایت ایجاد می‌کند. با استفاده از مجموعه‌ای از متغیرها، PHP داده‌های مورد نیاز را از پایگاه داده استخراج کرده و محتوای متناظر را به صورتی پویا ارائه می‌کند؛ مثل زمانی که مشتریان یک فروشگاه آنلاین از فیلتر «جدیدترین محصولات»‌ موقع جستجوی محصول استفاده می‌کنند.جدای از این، PHP به توسعه‌دهندگان اجازه می‌دهد که صفحات وب را ایجاد، منتشر و ویرایش کنند؛ بدون این‌که هر بار نیاز به سر و کله زدن با HTML داشته باشند. به جای آن، می‌توان با استفاده از سیستم‌های مدیریت محتوای کاربرپسند که بر پایهٔ PHP ساخته شده‌اند (مانند WordPress) تغییرات لازم را ایجاد کرد تا پایگاه دادهٔ محتوا به صورت خودکار به‌روز‌رسانی شود.زبان PHP را می‌توان در همهٔ سیستم عامل‌های اصلی، از جمله لینوکس، بسیاری از انواع یونیکس، ویندوزِ مایکروسافت، MacOS، RISC OS و احتمالا موارد دیگر استفاده کرد. همچنین در حال حاضر، PHP از بیشتر سرورهای وب شامل IIS و Apache پشتیبانی می‌کند. به علاوه این‌که شما می‌توانید از برنامه‌نویسی رویه‌ای (Procedural Programming) یا برنامه‌نویسی شی‌گرا (OOP) یا ترکیبی از هر دو استفاده کنید.همانطور که می‌دانید، PHP برای داینامیک کردن صفحات ساخته شده با HTML و CSS کاربرد دارند. ولی با استفاده از PHP شما فقط محدود به ارسال خروجی بصورت HTML نیستید. بلکه می‌توانید خروجی اجرای کدهای PHP را به صورت تصویر، فایل pdf و حتی فایل فلش ارسال کنید. همچنین می توانید به راحتی هر متنی مانند XHTML و هر پرونده XML دیگر را به راحتی در خروجی چاپ کنید. پی اچ پی می تواند این فایل ها را به صورت خودکار تولید کند و به جای چاپ کردن ، آنها را در سیستم بصورت فایل ذخیره کند و یک حافظه نهان سمت سرور را برای محتوای پویای شما تشکیل می دهد. که بدون نیاز به ذخیره کردن در جایی (اصطلاحا به صورت On the fly) ساخته می‌شوند.یکی از پرقدرت‌ترین و مهم‌ترین ویژگی‌های PHP، پشتیبانی آن از طیف گسترده‌ای از پایگاه‌های داده است. نوشتن یک صفحهٔ وب با قابلیت اتصال به پایگاه داده با استفاده از افزونه‌های اختصاصی پایگاه داده (به عنوان مثال برای mysql)، استفاده از یک لایهٔ abstraction مانند PDO یا اتصال به هر پایگاه داده‌ای که از استاندارد اتصال پایگاه دادهٔ باز (Open Database Connection Standard) با به‌کارگیری افزونهٔ ODBC پشتیبانی می‌کند، در PHP بسیار ساده است.تکنولوژی PHP همچنین از گفتگو (۲) با سایر سرویس‌ها با استفاده از پروتکل‌هایی مانند LDAP، IMAP، SNMP، NNTP، POP3، HTTP، COM (بر روی ویندوز) و موارد بی‌شمار دیگری پشتیبانی می‌کند. همچنین می‌توانید سوکت‌های شبکه را مستقیما باز کرده و با به‌کارگیری هر نوع پروتکل دیگری ارتباط برقرار کنید. PHP از تبادل داده‌های پیچیدهٔ WDDX مابین تقریبا همهٔ زبان‌های برنامه‌نویسی هم پشتیبانی می‌کند. در زمینهٔ ارتباط، PHP از نمونه‌سازی آبجکت‌های JAVA و به‌کارگیری آن‌ها به عنوان آبجکت‌های PHP هم پشتیبانی می‌کند.زبان PHP دارای امکانات مفیدی برای پردازش متن است، که شامل RegEx (عبارات منظم) سازگار با PERL یا به صورت اختصار (PCRE)، و بسیاری از افزونه‌ها و ابزارها برای تجزیه و دسترسی به اسناد XML است.فریم‌ورک‌ (چارچوب) PHP چیست؟فریم‌ورک PHP بستری برای ساخت برنامه‌های وب PHP است. این فریم‌ورک شامل کتابخانه‌هایی با توابع و کلاس‌‌های از پیش آماده‌ شده و هم‌چنین در بیش‌تر موارد، المان‌هایی برای اجرای الگوی طراحی نرم‌افزار (Design Pattern) است. این دومی، یک اسکلت‌بندی آماده یا به اصطلاح بیرون از جعبه (۳) (out-of-the-box) از پروژه‌ای که ساخته خواهد شد را بر پایهٔ رشته‌‌کدهای توسعه‌دهنده تشکیل می‌دهد؛ چه برای کدهای به ارث برده شده از کلاس‌های کتابخانه‌ای یا کدهایی که از ابتدا نوشته شده‌اند. فریم‌ورک‌های PHP به دلیل اهمیت دادن به جنبه‌های معمول و تکرارشونده در توسعهٔ وب رواج پیدا کرده‌اند. هم‌چنین، توابع کتابخانه‌ای و کلاس‌ها در این فریم‌ورک‌ها، از شیوه‌های استاندارد توسعهٔ وب پیروی می‌کنند و به خوبی تست شده‌اند. با استفاده از آن‌ها، علاوه بر آن‌که هر بار مجبور به اختراع دوبارهٔ چرخ نخواهید بود، احتمال بروز خطاهایی که می‌توانند دائما اتفاق بیفتند و باعث خرابی برنامه شوند را نیز به‌طور قابل ملاحظه‌ای کاهش می‌دهید.آخرین، اما نه کم‌اهمیت‌ترین مزیت استفاده و تکیه بر این فریم‌ورک‌ها، این است که کدِ شما را برای دیگر همکاران توسعه‌دهنده‌ قابل خواندن و درک می‌سازند.فریم‌ورک‌ها و CMSهای بر پایه PHPبهترین فریم‌ورک PHP کدام است؟این روزها، توسعه‌دهندگان PHP به هیچ‌وجه از کمبود فریم‌ورک‌های برنامه‌نویسی نگران نیستند. برعکس، احتمال زیادی وجود دارد که به خاطر تنوع زیاد فریم‌ورک‌ها، برای انتخاب از بین آن‌ها سردرگم شوند. برای راهنمایی شما در مسیر درست، خلاصه‌ای از پنج فریم‌ورک PHP که بهترین عملکرد را دارند و ارزشمندتر و محبوب‌تر هستند را بررسی می‌کنیم.۱. فریم‌ورک Laravelلاراول این روزها داغ‌ترین فریم‌ورک PHP است. به عنوان فریم‌ورکی برای (۴) Web Artisans، طبق ادعای سازندگانش، به توسعه‌دهندگان اجازه می‌دهد که طراحی‌های مدرن و زیبایی را انجام دهند. Laravel به دلیل شیب کم منحنی یادگیری (۵) (Shallow learning curve)، سادگی و منابع یادگیری فراوان و برتر، مورد استقبال توسعه‌دهندگان جوان قرار گرفته است. از طرف دیگر هم مهندسان باتجربهٔ PHP، محیط توسعهٔ داخلی، موتور الگومحور و سیستم مسیریابیِ (۶) RESTful آن را ستایش می‌کنند.۲. فریم‌ورک Symfonyفریم‌ورک Symfony مجموعه‌ٔ چشمگیری از امکانات و در کنار آن ویرایش‌های با پشتیبانی بلندمدت را ارائه می‌دهد، اما در عوض نیاز به سطح مناسبی از تخصص دارد. این موضوع، هرچند باعث کمتر شدن محبوبیت آن نمی‌شود، اما باعث می‌شود توسعه‌دهندگان تازه‌کار در مورد آن محتاط باشند. Symfony یکی از بزرگ‌ترین جامعه‌های توسعه‌دهندگان را دارد. SensioLab، مالک این فریم‌ورک، با منتشر کردن محتوای آموزشی مفید، پست‌های وبلاگ و بحث‌های فنی از آن پشتیبانی می‌کند.۳. فریم‌ورک Zendبه دلیل ماهیت مبتنی بر مولفه (Component-based)، این فریم‌ورک در جامعهٔ توسعه‌دهندگان PHP به عنوان فریم‌ورک چسبان (a glue framework) لقب گرفته است. فریمورک zend از معماری MVC پشتیبانی می‌کند و کاملا از اصول شی‌گرایی در ساختار خود پیروی می‌کند و همین ویژگی باعث قدرتمند شدن این فریم‌ورک شده، به طوری که به برنامه‌نویس‌ها این اجازه را می‌دهد تا در صورت نیاز از هر جزئی که در برنامه‌شان استفاده کرده‎‌اند در هر کجای دیگر نیز استفاده کنند. در واقع، با استفاده از Zend، میتوانید آزادانه فقط آن دسته از کامپوننت‌هایی که نیاز دارید را فراخوانی کنید. این فریم‌ورک نه تنها دارای یک کتابخانهٔ داخلی پر و پیمان و گران‌بهاست، بلکه می‌تواند آزادانه با مقدار زیادی از کتابخانه‌های بیرونی یکپارچه شود.۴. فریم‌ورک Phalconفالکون اساسا با دیگر فریم‌ورک‌های PHP تفاوت دارد؛ زیرا در واقع یک افزونهٔ PHP است که با زبان C نوشته شده است. این افزونه، به منابع کمی نیاز دارد، فریم‌ورک MVC را می‌پذیرد و سرعت و کارایی چشم‌گیری دارد. با تمام این‌ها، در نبود یک موتور تست خودکار و ماهیت عجیب و غریب این فریم‌ورک، یافتن اشکالات برنامه‌ها، به تلاشی تبدیل می‌شود که حتی توسعه‌دهندگان باتجربه را هم از کار با Phalcon دل‌سرد می‌کند.۵. فریم‌ورک CakePHPبا انتخاب CakePHP، مجموعهٔ کاملی از کارکردهای اساسی مورد نیاز برای توسعهٔ PHP را به دست می‌آورید: پشتیبانی از MVC، انتخابی عالی از افزونه‌ها و مولفه‌های (Components) سودمند، قابلیت استفادهٔ دوباره از کد، و پشتیبانی از AJAX بیرون از جعبه (out-of-the-box*). آن‌چه CakePHP را متمایز می‌کند، تاکید آن بر قراردادهای کدنویسی است که از سویی به روند توسعه سرعت می‌بخشد و از سویی دیگر ممکن است خلاقیت و نوآوری را در شما فرو بنشاند.ورژن انقلابی PHP7، جدیدترین نسخه زبان برنامه‌نویسی PHP است.آیندهٔ PHPبروزرسانی جدید: PHP7از زمان انتشار PHP7، امکانات تازه و بهبودهای فراوانی معرفی شده‌اند. قابل توجه‌ترین پیشرفت‌ها بهبود سرعت و استفادهٔ بهتر از حافظه است. این به آن معناست که وب‌سایت‌هایی که از PHP7 استفاده می‌کنند سریع‌تر از وب‌سایت‌هایی که از ویرایش قدیمی PHP استفاده می‌کنند بارگذاری می‌شوند و می‌توانند هم‌زمان کاربران بیش‌تری را نیز هندل کنند. Code wise، اعلامیه‌های نوع (Type declarations) و عمل‌گرهای (Operators) تازه‌ای معرفی شده‌اند. اداره‌کنندهٔ خطاها نیز بهبود یافته است.زبان PHP هنوز بر دنیای وب مسلط است.یکی از دلایلی که PHP به وسیلهٔ بسیاری از وب‌سایت‌ها استفاده می‌شود، این است که WordPress از PHP استفاده می‌کند. سهم بازار WordPress تقریبا ۳۴ درصد از کل وب‌سایت‌های دنیا است. این یعنی ۷۵ میلیون وب‌سایت از WordPress استفاده می‌کنند.علاوه بر این، برخی از CMSهای دیگر مانند Drupal  و Joomla نیز وجود دارند که سهم قابل توجهی در بازار دارند. از طرف دیگر بعضی سیستم‌های مدیریت فروشگاهِ محبوب، مانند Magento نیز بر پایه PHP هستند. همین موضوع، PHP را مهم و برای یادگیری و استفاده مناسب می‌سازد.بازار کاراز آن‌جایی که ۷۵ درصد وب با استفاده از PHP نوشته شده است، مشخص است که بازار خوبی در انتظار برنامه‌نویسان آن است. همهٔ این وب‌سایت‌ها باید پشتیبانی شوند و برای این کار به توسعه‌دهندگان PHP نیاز دارند. سهم بزرگی از بازار PHP در یک شب از بین نخواهد رفت، بنابراین مشاغل مربوط به PHP در آینده نیز وجود خواهند داشت.نتیجه‌گیریاگرچه بحث‌های فراوانی در مورد آیندهٔ PHP وجود دارد، اما روشن بودن آینده PHP تقریبا مشخص است. این زبان هنوز هم پراستفاده‌ترین زبان برنامه‌نویسی برای وب‌سایت‌ها است. نظر شما چیست؟ شما هنوز به آینده PHP امیدوارید؟(۱) Software as a Service:نرم‌افزار به عنوان سرویس یک مدل توزیع نرم‌افزار است که در آن یک ارائه‌دهنده میزبان برنامه بوده و خدمات برنامه را از راه اینترنت در دسترس مشتریان قرار می‌دهد. SaaS در کنار زیرساخت به عنوان سرویس (IaaS) و بستر خدمات به عنوان سرویس (PaaS)، یکی از سه دستهٔ اصلی محاسبات ابری یا همان Cloud Computing است.(۲) گفتگو:در دانش کامپیوتر به معنای برقراری ارتباط به منظور تبادل داده است. برای تبادل داده به گونه‌ای که برای هر دو طرف (منظور از دو طرف معمولا دو دستگاه یا دو برنامه است) قابل درک و استفاده باشد، از پروتکل‌های ارتباطی استفاده می‌شود.(۳) out-of-the-box:ویژگی یا کارکرد خارج از جعبه (که به آن Off the shelf هم گفته می‌شود)، به خصوص در نرم‌افزار، ویژگی یا کارکردی است که بدون نیاز به هیچ‌گونه نصب یا تنظیم و اصلاحی کار می‌کند. هم‌چنین به این معنا نیز هست که به‌طور پیش‌فرض برای همهٔ کاربران در دسترس است و برای استفاده از یک چنین کارکردی، نیاز به پرداخت هزینهٔ اضافی یا پیکربندی و تنظیمات خاص نیست.(۴) Web Artisans:یک رابط خط فرمان است که همراه فریم‌ورک Laravel عرضه می‌شود.این برنامه دستورات مفیدی ارائه می‌دهد که می‌توانند در ساخت برنامه‌ها به شما کمک کنند.(۵) Shallow learning curve:منحنی یادگیری کم‌عمق به معنای روند سریع یادگیری یک موضوع است. در نقطهٔ مقابل اصطلاح منحنی یادگیری با شیب تند یا steep learning curve وجود دارد که به معنای روند کند و مدت زمان طولانی برای یادگیری یک موضوع می‌باشد.(۶) RESTful:یک سبک معماری نرم‌افزار است که مجموعه‌ای از محدودیت‌ها را برای استفاده از سرویس‌های وب تعریف می‌کند.ترجمه بر اساس:What can PHP do?  - The Future of PHP - PHP Frameworks Explained in 5 Simple Questionsکوئرامگ مجله‌ای تخصصی برای توسعه‌دهندگان است که هر هفته با مطلب‌هایی در زمینه تکنولوژی، رشد فردی و آینده برنامه‌نویسی به‌روزرسانی می‌شود. برای اطلاع از آخرین مطلب‌های ما، می‌توانید توئیتر یا کانال تلگرام کوئرا را دنبال کنید.</description>
                <category>کوئرامگ | مجله تخصصی برنامه‌نویسان</category>
                <author>علی.</author>
                <pubDate>Sun, 03 May 2020 22:09:01 +0430</pubDate>
            </item>
                    <item>
                <title>کوئرای ۹۸؛ دوست داشتیم شما و بقیه برنامه‌نویس‌ها هم بدونید...</title>
                <link>https://virgool.io/Quera-Mag/quera98-bzajnjdyibvx</link>
                <description>سال ۹۸ پر از چالش­‌‌ها و اتفاق­‌‌‌های عجیب برای افراد و شرکت­‌‌ها بود. این سال با فراز و نشیب‌­‌‌های خودش طی شد و به آخر رسید. حالا که وارد سال ۹۹ شدیم قصد داریم آمار و ارقام جالبی که سال قبل برای کوئرا رقم خورده را با شما به اشتراک بگذاریم.کوئرا کالج؛ بچه‌معروفکوئرا در سال ۹۸ روند طراحی و انتشار دوره‌های آنلاین برنامه‌نویسی را ادامه داد و تمرکز زیادی روی تولید محتوای آموزشی باکیفیت گذاشت تا از این راه به تازه‌واردها و باتجربه‌ترهای برنامه‌نویسی کمک کند. در نهایت ۳ دوره جدید در سال ۹۸ منتشر شد که محبوب‌ترین دوره، «دوره آموزش مسئله‌محور هوش مصنوعی و یادگیری ماشین» با ۱۰۶۱ شرکت‌کننده بود.ثبت‌نام دوره‌های کوئرا کالج در سال ۹۸کوئراکالج امسال اسم و رسم قابل توجهی هم برای خود دست و پا کرد و علاوه بر برنامه‌نویس‌ها، در بین شرکت‌ها هم شناخته شد. در مجموع کاربران کوئراکالج ۳,۶۱۶,۵۷۲ دقیقه آموزش برنامه‌نویسی دیدند و برای ورود به بازار کار برنامه‌نویسی آماده‌تر شدند.مجموع مدت‌ زمان یادگیری در کوئراکالجامکان تصحیح در لحظه تمرین‌ها در کوئراکالج، به شرکت‌کنندگان کمک می‌کند تا بعد از خواندن درس‌نامه‌ها با حل تمرین، از یادگیری موضوعات مطمئن شوند. در نمودار زیر پاسخ‌های ارسال شده برای تمرین­‌‌های کوئراکالج در ساعت‌های مختلف روز و در طول هفته را مشاهده می‌­کنید. نکته جالب اینجا است که کاربران در ساعت ۷ صبح و روزهای شنبه بهترین درصد موفقیت را داشته‌اند و نسبت بیشتری از پاسخ‌های ارسالی آن‌ها درست بوده است.فعالیت کاربران کوئراکالج در طول هفته و ساعت‌های شبانه‌روزدر کنار دوره‌های برنامه‌نویسی، کوئراکالج در سال ۹۸ دو رویداد هم برگزار کرد. در مهرماه، رویداد SkillUp با موضوع یادگیری ماشین در دانشگاه صنعتی شریف برگزار شد. رویداد بعدی هم، وبینار «نقشه ورود به دنیای برنامه‌نویسی» بود. این رویداد با هدف پاسخ به پرسش‌های افراد علاقه‌مند به شروع برنامه‌نویسی و با حضور ۲۰۰۰ نفر برگزار شد.کوئرا کریرز؛ جوان و جویای نامکوئرا کریرز در سال ۹۸ با نمایش فرصت­‌‌های شغلی حوزه­­‌ی برنامه‌­نویسی و تکنولوژی توانست کنار کاربران باشد و متناسب با نیاز کاربران با آن‌ها هم­‌گام شود. یکی از این نیاز‌ها در هنگام شیوع کرونا، نمایش جداگانه فرصت‌های شغلی با امکان دورکاری بود.سالی که گذشت در مجموع ۱۸۷۳ آگهی تخصصی حوزه فناوری اطلاعات در کوئرا ثبت شد و برنامه‌نویس‌ها را به موقعیت شغلی دلخواه‌شان نزدیک‌تر کرد. از بین این آگهی‌ها، ۳ آگهی برنامه‌نویسی زیر پربازدیدترین آگهی‌ها بودند:۱- استخدام کارآموز Machine Learning در سلام سینما۲- استخدام کارآموز توسعه‌دهنده پایتون/جنگو در سانا گستر سبز۳- استخدام کارآموز دانشمند داده Data Science در کافه‌بازارهمین سه آگهی، جای خالی فرصت‌های شغلی کارآموزی را در مقابل نیاز زیاد کارجوها، به خصوص دانشجوها، برای به دست آوردن تجربه از این راه نشان می‌دهد. کوئرا در سال ۹۹ برای کمک به برطرف کردن این نیاز، برگزاری نمایشگاه کار آنلاین را در برنامه خود گذاشته است. در این نمایشگاه قرار است شرکت‌های مطرح حوزه فناوری اطلاعات فرصت‌های شغلی کارآموزی و استخدامی خود را به نمایش بگذارند. اطلاعات بیشتر درباره این نمایشگاه رو می‌توانید در سایت کوئرا ببینید.اگر به عنوان کارفرما قصد انتشار آگهی استخدام در کوئرا دارید، به این نکته توجه کنید که کارجوها به طور میانگین ۱ دقیقه و ۲۵ ثانیه زمان صرف خواندن و بررسی توضیحات آگهی  شما می‌کنند. بنابراین خوب است که متن آگهی را به نحوی بنویسید که در این مدت بتواند ویژگی­‌‌های اصلی فرصت شغلی و شرکت شما را نشان بدهد.در سال ۹۸ جمعیت برنامه‌نویس‌های جویای کار هم در کوئرا افزایش پیدا کرد. امسال بیش از ۱۷۰۰۰ نفر رزومه‌­ی تخصصی برنامه‌نویسی‌شان را در کوئرا ساختند یا بروزرسانی کردند.وضعیت رزومه‌های کوئرا به ازای هر ۱۰۰۰ درخواستدر این جا میزان جستجوی تکنولوژی­‌‌های مختلف را مشاهده می‌­کنید. این آمار مربوط به سمت برنامه‌‌نویس‌‌ها است. همان طور که مشخص است، جاوااسکریپت بیشترین جستجوی افراد را به خودش اختصاص داده و بعد از آن فرصت­‌‌های شغلی پایتون و React قرار دارند.پرجستجوترین تکنولوژی‌های کارجویان در کوئرابعد از دیدن علاقه کارجوها برای فرصت‌های شغلی، وقت آن است که به درخواست تکنولوژی­‌ها از سمت شرکت­‌ها هم نگاهی بیاندازیم. جاوااسکریپت، React و PHP سه تکنولوژی‌ای هستند که شرکت‌ها بیشتر از بقیه در آگهی‌های شغلی برای آن‌ها درخواست ثبت کرده‌اند.پردرخواست‌ترین تکنولوژی‌ها در آگهی‌های شغلی کوئرانسبت به آمار سال گذشته، React و node.js بیشترین رشد را در فرصت‌های شغلی کوئرا داشتند. React که تا پارسال بین ۱۵ تکنولوژی پردرخواست نبود، امسال رتبه دوم تکنولوژی‌ها را به خود اختصاص داده است.آخرین آمار این بخش مربوط به تکنولوژی‌هایی است که شرکت‌ها در اکثر آگهی‌ها هر دو را کنار هم میخواستند. پس اگر قصد دارید به یکی از این تکنولوژی‌ها مسلط شوید، خوب است که تکنولوژی کناری آن را هم در نظر داشته باشید.پرتکرارترین زوج‌تکنولوژی‌ها در آگهی‌های شغلیدر کنار این اتفاقات بخش کاریابی و استخدامی کوئرا، ۲ رویداد مهم هم در سال ۹۸ داشت. اولین رویداد نمایشگاه آنلاین کارآموزی برنامه‌نویسی کارآموزشو بود که در اردیبهشت‌ماه برگزار شد. این رویداد با حضور شرکت‌های موفق حوزه فناوری اطلاعات از جمله اسنپ، کافه‌بازار، یکتانت و همکاران سیستم برگزار شد و در آن ۲۶۸۸ کارآموز برنامه‌نویسی مهارت‌سنجی شدند. در نهایت داوطلبان کارآموزی ۳۶۰۱ بار درخواست خود را برای شرکت‌های حاضر در این نمایشگاه ارسال کردند.در آذرماه ۹۸ رویداد دیگر کوئرا با عنوان TraceWay و با هدف انتقال تجربه و شبکه‌سازی توسعه‌دهندگان ارشد ایرانی برگزار شد. در این رویداد شرکت‌های تپسل، کافه‌بازار، بلد و دیجی‌کالا تجربیات‌شان درباره استفاده از هوش مصنوعی و یادگیری ماشین در محصولات خود را با برنامه‌نویسان ارشد و مدیران فنی سایر شرکت‌ها در میان گذاشتند.مسابقات و بانک سوالات؛ رفیق قدیمیبخش سوال­‌ها و مسابقات کوئرا همیشه مورد توجه برنامه‌نویس‌های ایرانی بوده است. تا الان افراد زیادی از طریق این بخش خودشان را به چالش کشیدند و یا با تمرین و پشتکار مهارت­‌‌های خود را افزایش دادند.اما در سال ۹۸، مدال سرسخت‌­ترین سوال کوئرا که برخلاف تلاش زیاد کاربران بی‌پاسخ ماند، می‌رسد به سوال «دیتای بزرگ»، با ۲۰۵ تلاش ناموفق. در کنار آن، امسال یک شاخ غول هم شکسته شد. سوال «معمای بزرگ» که با ۲۲۹ پاسخ اشتباه، شکست‌ناپذیر شده بود، اولین پاسخ درست را در سال ۹۸ و توسط «شایان پردیس» دریافت کرد.رکورد بیشترین ارسال پاسخ متوالی ناموفق را کاربری به خود اختصاص می­‌دهد که ۸۹۹ بار برای حل یک سوال تلاش کرده است و جالب است بدانید در آخر هم موفق نشد پاسخ درستی برای این سوال ارسال کند. رکورد بعدی برای فردی است که ۶۷۲ تلاش ناموفق داشته است اما این بار در نهایت این تلاش­‌ها موفقیت‌­آمیز بودند. فارغ از نتیجه، به این افراد برای پشتکار قوی‌شان تبریک می‌گوییم.آخرین روزهای سال ۹۸ یک رکورد دیگر هم در کوئرا ثبت شد.­ بیست‌ و ششمین روز اسفند با ۲۴۲۹۲ ارسال کد، شلوغ‌ترین روز سیستم داوری خودکار سوالات کوئرا بود. از بین این کدها ۷۹۲۳ پاسخ درست و ۱۶۳۶۹ سابمیت نادرست بود. اگر هر کس می‌توانست هر کد پاسخ را به صورت دستی در «یک دقیقه» تصحیح کند، باید ۱۷ نفر بدون توقف کار می‌کردند تا این تعداد سوال در یک روز تصحیح شوند!سیستم تقلب‌یاب کوئرا تا الان دامن خیلی از کپی‌کاران را گرفته است؛ اما هنوز نتوانسته همه آن‌ها را متنبه کند. متقلب‌ترین کاربر کوئرا در سال ۹۸ لقب کسی که ۱۳۴ شباهت بالای ۶۰ درصد در پاسخ‌های ارسال شده او کشف شد.در رده‌بندی برنامه‌نویس‌های کوئرا هم ۲ کاربر رشد چشم‌گیری داشتند. بیشترین رشد در رنکینگ کوئرا توسط «محمد سالک» و «مسعود قوامی حسین پور» بود که به ترتیب خود را از ۱۳۱۴ به ۳۴ و از ۱۱۹۵ به ۱۵ رساندند.کوئرامگ؛ چهره مردمیکوئرا امسال هم سعی کرد با تولید محتوای رایگان و کاربردی، اطلاعات مفیدی در اختیار برنامه‌نویسان و علاقه‌مندان به برنامه‌نویسی قرار دهد. مطالب کوئرامگ در سال ۹۸ بیشتر از ۵۴۰۰۰۰ دقیقه خوانده شدند و از این نظر ۰.۰۰۱ ثانیه به سرانه مطالعه کشور اضافه کردند.کوئرامگ در سال ۹۸در بین مطالب منتشر شده در سال ۹۸، پربازدیدترین پست «فهرست ۷ دوره برتر کارآموزی برنامه‌­نویسی در ایران» بود که با ۶۷۱۵ بازدید این لقب را به خود اختصاص داد. محبوب‌­ترین پست کوئرامگ در سال ۹۸ هم «چطور با بهتر کردن حافظه ­ام برنامه‌­نویس بهتری شدم» شد که توانست نظر برنامه‌­نویس­‌ها را به خود جلب کند.در کنار این مطالب، ۳ پست دیگر هم توانستند با استقبال خوب خواننده‌ها روبرو شوند و به باشگاه صدتایی‌های کوئرا برسند. سه مطلب «یادگیری ماشین به زبان ساده: عملی‌ترین راهنمای دنیا!»، «کامندلاین به فرمانِ شما: ۲۰ برنامه کاربردی برای برنامه‌نویس‌ها» و «بولت‌ژورنال: سیستمی که برنامه‌ریزی و رشد شخصی‌تان را متحول می‌کند» هرکدام بیشتر از ۱۰۰ لایک دریافت کردند و جزو مطالب خواندنی کوئرا در سال ۹۸ بودند.احتمالا شما هم جزو یکی از این دو دسته هستید: کوئرایی‌های قدیمی که سال ۹۸، ۳۶۵ روز دیگر به زمان کوئرایی بودن‌تان اضافه کرد یا کوئرایی‌های جدید که امسال، سال آشنایی‌ ما با هم بود. در هر کدام از دسته‌ها که باشید، دوست داریم نظر شما را هم درباره کوئرای ۹۸ بشنویم. شما کوئرای ۹۸ رو چطور دیدید؟ برای کوئرای ۹۹ چه پیشنهادهایی دارید؟گزارشی که خواندید را الهام فرحمند و مَهدی جلالی با کمک بقیه اعضای تیم کوئرا آماده کردند.کوئرامگ مجله‌ای تخصصی برای توسعه‌دهندگان است که هر هفته با مطلب‌هایی در زمینه تکنولوژی، رشد فردی و آینده برنامه‌نویسی به‌روزرسانی می‌شود. برای اطلاع از آخرین مطلب‌های ما، می‌توانید توئیتر یا کانال تلگرام کوئرا را دنبال کنید.</description>
                <category>کوئرامگ | مجله تخصصی برنامه‌نویسان</category>
                <author>Quera</author>
                <pubDate>Sat, 11 Apr 2020 21:37:08 +0430</pubDate>
            </item>
                    <item>
                <title>کامندلاین به فرمانِ شما: ۲۰ برنامه کاربردی برای برنامه‌نویس‌ها</title>
                <link>https://virgool.io/Quera-Mag/command-line-utilities-hbgl0t2bvvin</link>
                <description>اگر شما هم برنامه‌نویس یا مهندس نرم‌افزار هستید، احتمالا خیلی اوقات ترجیح می‌دهید از کامندلاین برای انجام کارها استفاده کنید. استفاده از ترمینال برای بیشتر کارها، کمک می‌کند که بازدهی و عملکرد بهتری داشته باشید و بتوانید راحت‌تر بین پروژه‌ها، فعالیت‌ها و پوشه‌های مختلف جابجا شوید. در این مقاله می‌خواهیم چندتا از برنامه‌­های جالب کامندلاین­ را بررسی کنیم.oh-my-zsh (zsh)چارچوب oh-my-zsh مجموعه‌­ای از تنظیمات zsh است که قابلیت­‌هایی برای بهبود تجر‌به‌­ی استفاده از ترمینال در اختیار ما می­‌گذارد. تعدادی از پرکاربردترین­ این تنظیمات را در ادامه بررسی می‌کنیم:اتوکامپلیتِ (autocomplete) بهتر، که در آن می‌­توان از فلش‌­ها برای حرکت بین گزینه‌­ها استفاده کرد.تکمیل خودکار مسیرها، با تایپ فقط یک حرف از مسیر پوشه. مثلا می‌­توانید cd ~/d/y را تایپ کنید که شما را به پوشه‌­ی cd ~/Downloads/YouTube می‌­برد.برای دسترسی به تاریخچه‌ی مسیرها، می­‌توان از – cd استفاده کرد.تکمیل خودکار در git: می­توانید با tab به راحتی بین شاخه‌­های مختلف حرکت کنید.علاوه بر کارهایی که خود zsh انجام می‌­دهد، افزونه­‌های مختلفی نیز وجود دارند.افزونه‌ی history-substring-search به شما اجازه می­‌دهد که چند حرف اول یک دستور را بنویسید و سپس با فشردن فلش بالا، همه­‌ی دستوراتی را که با رشته­‌ی نوشته شده شروع می­‌شوند پیدا کنید.اگر رنگ متن‌­ها را دوست ندارید، افزونه‌­ی syntax-highlighting را نصب کنید. با این افزونه، اگر syntax دستور را اشتباه نوشته باشید، قبل از اجرای آن متوجه خواهید شد.این پلاگین علاوه بر این‌که ترمینال شما را زیباتر می‌کند، به شما اجازه می­‌دهد به آسانی وضعیت و شاخه­‌ی git فعلی خود را ببینید.کپی کردن خروجی (بدون استفاده از موس)یکی از بزرگترین مزیت‌­های استفاده از ترمینال این است که نیازی به استفاده از موس ندارید؛ البته تا وقتی که بخواهید چیزی را کپی کنید. بیایید چند راهکار برای کپی کردن بدون استفاده از موس را بررسی کنیم:yankبرای کپی کردن با yank کافی است خروجی را به آن redirect کنید، به این ترتیب:pbcopy (MacOS) / xclip (Linux)هردوی این دستورها، محتوایی که به آن­ها pipe شده را کپی می‌­کنند:iTerm2 integrationاز بین ویژگی‌های زیاد iTerm2، با استفاده از ویژگی integration در آن می‌­توانید به آسانی خروجی دستور آخر را انتخاب و کپی کنید:fasdاحتمالا بعد از مدتی، از نوشتن cd ~/yek/masire/kheili/tulani برای رفتن به پوشه‌­ی پروژه‌­تان خسته می‌شوید. fasd می‌­تواند به شما در این مورد کمک کند.وقتی که fasd را نصب و تنظیم کنید، در پس‌زمینه به جابجایی شما بین پوشه‌های مختلف با دستورات cd گوش می­‌کند و می‌­تواند کمک کند که دفعات بعدی، راحت­‌تر به پوشه‌­ی مورد نظر خود برسید. در مثال زیر، ابتدا به صورت دستی به پوشه‌­ی مورد نظر می‌­رویم. دفعه‌­ی دوم، با استفاده از دستور z از fasd این کار را می‌­کنیم:علاوه بر رفتن به پوشه­‌های مختلف، می­‌توانید از میانبرهای fasd برای اجرای عملیات­‌های دیگر با دستور کاما (,) استفاده کنید:lnavیکی از بهترین راه­‌ها برای سر و کله زدن با لاگ‌­ها، lnav است. این موضوع که lnav در خود کامندلاین وجود دارد، کار با آن را راحت­‌تر می‌­کند. این دستور به سادگی یک فایل لاگ یا چند لاگ موجود در یک پوشه را بارگذاری می‌­کند و به شما اجازه می‌­دهد آن‌­ها را فیلتر کنید، در آن­ها جست‌وجو کنید و مدیریت‌­شان کنید.در مثال زیر، تعداد زیادی لاگ باز می­‌کنیم و سپس با استفاده از فیلتر، خطوطی را که به دنبال آن هستیم می‌یابیم:pecoبرای فیلتر کردن خروجی دستورها می‌­توانید از peco استفاده کنید. می­‌توان گفت peco نسخه­‌ی تعاملی grep است.فرض کنید دستور git merge-base را فراموش کرده‌اید. برای یادآوری آن، می­‌توانید تاریخچه­‌ی دستورات را بررسی کنید:دقت کنید که peco خط انتخاب شده را برمی­‌گرداند. این یعنی می‌­توانید برای برنامه­‌های دیگر از آن استفاده کنید. مثلا ‌می‌توانیم pid برنامه­‌ی Evernote را به کمک دستور yank که بالاتر گفتیم کپی کنیم:tigاحتمالا استفاده از ترمینال برای خیلی از دستورات عمومی git مثل checkout ،pullout و merge راحت‌­تر از استفاده از یک رابط کاربری گرافیکی است. اما بعضی از دستورات واقعا نیاز به یک رابط کاربری تعاملی دارند. ممکن است وقتی دارید لاگ­‌های git را بررسی می‌­کنید، بخواهید آزادانه بین commitها حرکت کنید و وقتی دارید commit می­‌کنید، بخواهید فایل­‌هایی را که قصد stage کردن دارید انتخاب کنید. اگر برای این اعمال از یک رابط گرافیکی استفاده کنید، مجبورید از ترمینال خارج شوید و رشته‌­ی افکارتان پاره می­‌شود. tig می‌­تواند در این مورد به شما کمک کند.git logبرای مشاهده­‌ی تاریخچه می‌­توانید از دستور tig در پوشه‌­ی مربوطه استفاده کنید. با این دستور، commitهایی که انجام داده‌­اید، فایل­‌هایی که تغییر کرده‌اند و diff مربوطه نمایش داده می­‌شوند.git commitبا استفاده از دستور tig status، می‌­توانید به آسانی فایل­‌ها و حتی خطوط خاصی (chunkهایی) را قصد commit کردن‌شان را دارید، stage کنید.git difftoolدرست است که در حالت متنی کار می­‌کنید و دارید از tig استفاده می­کنید، اما لزومی ندارد که از diff متنی استفاده کنید. اگر به یک ابزار diff/merge مناسب مثل Beyond Compare نیاز دارید، می­توانید با تنظیم tig از آن استفاده کنید. برای این کار باید خط زیر را به فایل tigrc. خود اضافه کنید:bind status &lt;F4&gt; !sh -c “git difftool -y \”$(git rev-parse — show-toplevel)/%(file)\”&amp;quotحالا یک فایل تغییریافته را انتخاب کنید و کلید F4 را فشار دهید.rangerحتی اگر کار با ترمینال برایتان راحت باشد، باز هم یک سری کارها هستند که ممکن است موجب اذیت­‌تان بشوند. مثلا باز کردن سریع چند پوشه یا ‌کپی چند فایل انتخاب شده به یک پوشه­‌ی دیگر.با استفاده از ranger می­توانید به شیوه‌­ی زیر فایل­ها را کپی کنید:realpathچطور می­‌شود با استفاده از ترمینال، یک فایل را به برنامه­‌ای که رابط کاربری گرافیکی دارد فرستاد؟ مثلا مسیر یک عکس را به برنامه­‌ی ویرایش عکس داد.به این شکل realpath مسیر واقعی و مطلق هر فایلی را به شما می‌­دهد:mackupفرض کنید همه‌­ی برنامه‌­های خود را تنظیم کرده­‌اید. وقتی کامپیوترتان خراب شود یا بخواهید آن را عوض کنید، چکار خواهید کرد؟ mackup (هم برای لینوکس و هم برای MacOS) راهکاری است برای backup گرفتن تنظیمات برنامه­‌های خود به dropbox یا هر سرویس ذخیره‌­ی ابری دیگر.روش آن هوشمندانه است، به جای ایجاد نسخه‌­ها و scheduleهای مختلف، صرفا فایل را به dropbox شما آپلود می­‌کند و فایل اصلی را با symlink جایگزین می­‌کند.برنامه­‌های شما طبق روال عادی و با تنظیمات خودشان کار خواهند کرد، اما در واقع در حال تغییر فایل­‌های dropbox شما هستند. با این روش، هر تغییر روی تنظیمات، مستقیما روی سرویس ذخیره‌­ی ابری شما backup می­‌شود.نکته­ی مهم این است که برخلاف بقیه­ی برنامه‌های پشتیبان­‌گیری موجود، mackup تنها به یک بار اجرا شدن نیاز دارد.ncduاین دستور قرار است به سوال «چی داره حافظه‌­ی منو می­‌خوره؟!» جواب بدهد. بسیار ساده و پرکاربرد است و از بسیاری از برنامه­‌های جایگزین که رابط گرافیکی دارند بهتر کار می‌­کند. در نهایت می­‌توان مستقیما از طریق آن چیزهای مختلف را پاک کرد.دستورات دیگریک -- caffeinate (برای کاربران مک): به شما اجازه می‌­دهد بدون نگرانی از به خواب رفتن سیستم، دستوری که اجرای آن طول می­‌کشد را اجرا کنید؛ مثلا: caffeinate sleep 5دو -- Hub: دیگر لازم نیست مدام برای درخواست­های pull و forkها به گیت­هاب بروید، می­توانید بیشتر دستورات گیت­هاب را مستقیما در ترمینال اجرا کنید.سه -- Tmux: درواقع یک multiplexer برای ترمینال است. اگر روی یک remote computer کار می­کنید، دوست دارید از تب­ها و paneهای زیادی استفاده کنید و می­خواهید بدون قطع شدن و بسته شدن محیط­هایتان ارتباط‌تان را قطع کنید، می­توانید از Tmux استفاده کنید.چهار -- scm_breeze: اگر حس می­کنید tig زیادی رابط کاربری دارد، شاید بهتر باشد سراغ scm_breeze بروید. این برنامه امکان جایگزینی مسیرهای طولانی موجود در status با میانبرهای عددی را فراهم می‌­کند و به شما اجازه می‌­دهد فایل­های git add را بدون نیاز به تایپ مسیرهای طولانی انتخاب کنید.پنج -- Mdlt: یک ماشین­ حساب برای کامندلاین است که مشتق و انتگرال را هم محاسبه می­‌کند.شما هم پیشنهاد دیگری برای اضافه شدن به این لیست دارید؟ می‌توانید در کامنت‌ها درباره کاربرد و روش استفاده‌شان بنویسید.ترجمه بر اساس:&quot;My favorite command-line utilities&quot;, by Vitaly Belman at Hackernoonکوئرامگ مجله‌ای تخصصی برای توسعه‌دهندگان است که هر هفته با مطلب‌هایی در زمینه تکنولوژی، رشد فردی و آینده برنامه‌نویسی به‌روزرسانی می‌شود. برای اطلاع از آخرین مطلب‌های ما، می‌توانید توئیتر یا کانال تلگرام کوئرا را دنبال کنید.</description>
                <category>کوئرامگ | مجله تخصصی برنامه‌نویسان</category>
                <author>Ali N</author>
                <pubDate>Sun, 15 Mar 2020 22:35:16 +0330</pubDate>
            </item>
                    <item>
                <title>ماموریت غیرممکن: چطور از امنیت و حریم خصوصی خودمان در دنیای اینترنت حفاظت کنیم؟</title>
                <link>https://virgool.io/Quera-Mag/how-to-be-safe-on-the-internet-j6dsk5lyxnya</link>
                <description>امروزه در دنیایی زندگی می‌کنیم که امنیت اطلاعات و حریم خصوصی ما، به راحتی می‌تواند به خطر بیفتد! از شرکت‌های بزرگ و غول‌های تبلیغاتی در ایران و جهان تا هکرهای حرفه‌ای و باج‌گیرهای مجازی، گروه‌های بسیاری هستند که می‌توانند به اطلاعات ما دسترسی پیدا کنند.برای حفاظت از خودمان در چنین دنیایی چه کار می‌شود کرد؟ حقیقت این است که دست ما هم چندان خالی نیست! راهکارها و ابزارهای زیادی هستند که با استفاده از آن‌ها می‌توان از امنیت و حریم خصوصی‌مان در برابر دیگران دفاع کنیم.از برنامه‌های مدیریت رمز عبور استفاده کنید.برنامهٔ مدیریت رمز عبور به شما این امکان را می‌دهد تا برای هر حساب آنلاین خود یک رمز عبور یکتا بسازید. این کار به شما اطمینان می‌دهد که در صورت هک شدن یک سرویس مورد استفاده‌تان، رمز عبور به خطر افتاده اجازه دسترسی به دیگر حساب‌های شما را نخواهد داد.شما حداقل باید برای هرکدام از حساب‌های مهم مانند گوگل، اپل، ایمیل و حساب‌های بانکی خود یک رمز عبور یکتا داشته باشید.برنامه‌های پیشنهادی: 1Password - LastPass - Dashlaneگذاشتن یک رمز قوی حداقل ۶ حرفی، شامل اعداد، حروف و علامت‌ها اولین مانع برای دسترسی به موبایل و کامپیوتر شما است.یک رمز عبور قوی روی موبایل و کامپیوترتان بذارید.یک رمز عبور ۴ حرفی برای موبایل یا دستگاه‌های شما، دیگر امن به حساب نمی‌آید. در کم‌ترین حالت باید رمز عبور شما بیش از شش رقم داشته باشد و برای امنیت بیش‌تر، از رمز عبور‌ی که بیش از شش کاراکتر و متشکل از اعداد و حروف است استفاده کنید. در هنگام سفر خارجی هم باید سیستم شناسایی اثرانگشت و چهرهٔ دستگاه را خاموش کنید.باید سخت‌گیری زیادی روی قفل دستگاه خود داشته باشید. هیچ‌وقت بدون رمز عبور اجازه دسترسی به هیچ بخشی از دستگاه را ندهید و دستگاه را به مدت بیش از یک یا دو دقیقه بدون نظارت رها نکنید.احراز هویت دو مرحله‌ای را فعال کنید.احراز هویت دو مرحله‌ای یک لایهٔ دیگر از امنیت را بر روی رمز عبور اضافه می‌کند. این موضوع با دریافت اطلاعات اضافی در کنار رمز عبور حساب مورد نظر، تضمین می‌کند که کسی که به یک حساب وارد می‌شود همان صاحب حساب است.این اطلاعات اضافی معمولا یا چیزی است که شما می‌دانید (مثلا نام اولین معلم‌تان)، یا چیزی که دارید (مثلا دسترسی به ایمیل) یا چیزی که هستید (مثلا اثر انگشت شما).نباید از شماره تلفن خود برای روش دو مرحله‌ای استفاده کنید.احراز هویت دو محله‌ای باید دست‌کم بر روی حساب‌هایی که می‌توانند دسترسی شما را به سایر حساب‌هایتان مسدود کنند به کار گرفته شود. برای نمونه یک حساب گوگل، برنامه‌‌های کاربردی ایمیل، اپل آی‌دی و حساب‌های مالی. برای امنیت بیش‌تر، مطمئن شوید که احراز هویت دو مرحله‌ای بر روی هر سرویسی که از آن پشتیبانی می‌کند فعال شده باشد.یادداشت: به‌‌کارگیری یک راه‌حل همه‌کاره مثل 1Password برای مدیریت رمز عبور‌ها و به‌طور هم‌زمان برای احراز هویت دو عاملی باعث ایجاد نقطه‌‌ٔ تکی شکست می‌شود. این موضوع را هنگام انتخاب راهکار احراز هویت دو مرحله‌ای خود در نظر داشته باشید.برنامه‌های پیشنهادی:‌ 1Password - Authy - Google Authenticatorدستگاه‌های خود را رمزگذاری کنید.اگر تا به حال موبایل یا کامپیوتری از شما دزدیده شده است، ممکن است سارق تلاش کرده باشد که اطلاعات شما را خوانده یا پخش کند. اگر دستگاه شما رمزگذاری نشده باشد، هکرها به هر چیزی که در آن دستگاه ذخیره است شامل عکس‌ها، ایمیل‌ها، اسناد و مخاطبین دسترسی خواهند داشت.رمزگذاری را برای هر تلفن یا دستگاهی که استفاده می‌کنید فعال کنید. این کار خواندن اطلاعات شما را برای یک سارق، بدون داشتن رمز عبور شما تقریبا غیرممکن خواهد کرد.با استفاده از سرورهای DNS کمک می‌کند گشت و گذار امن‌تری در اینترنت داشته باشید.تنظیمات دی‌ان‌اس (DNS) خود را به ۱.۱.۱.۱ یا ۹.۹.۹.۹ تغییر دهید.دی‌ان‌اس (سرورهای نام دامنه) مانند یک دفتر تلفن برای اینترنت هستند. آن‌ها یک نام مثل google.com را به یک آدرس آی‌پی ترجمه می‌کنند. به صورت پیش‌فرض دی‌ن‌اس کُند و ناامن است. بسیاری از ارائه دهندگان سرویس اینترنت، داده‌‌هایی که از راه دی‌ان‌اس در جریان هستند را دنبال و ثبت کرده و در برخی موارد به شرکت‌های تبلیغاتی می‌فروشند.کلاودفلر (Cloudflare) یک ابزار دی‌ان‌اس با تمرکز بر حریم خصوصی و کارایی منتشر کرده که ترافیک اینترنت شما را از ارائه‌دهندگان سرویس اینترنت و افرادی که در شبکه‌های وای‌فای عمومی مشغول تجسس هستند محفوظ نگاه می‌دارد. ۱.۱.۱.۱ سریع‌تر از میانگین سرعت سرویس‌های دی‌ان‌اس معمول بوده و استفاده از اینترنت را سریع‌تر می‌سازد.یک جایگزین برای کلاودفلر، کواد۹ (Quad9) است که بر امنیت و حفظ حریم خصوصی در گشت و گذار اینترنتی روزانهٔ شما تاکید دارد. این سرویس به صورت غیرانتفاعی توسط اتحادیهٔ جهانی فضای مجازی، آی‌بی‌ام و پکت‌کلیرینگ‌هاوس راه اندازی شده است و با مسدود کردن دامنه‌های مخرب و همچنین عدم جمع‌آوری هرگونه اطلاعات قابل شناسایی در سیستم‌های خود از شما در فضای اینترنت حفاظت می‌کند.برنامه‌های پیشنهادی:‌ 1.1.1.1 - 9.9.9.9از وی‌پی‌ان (VPN) استفاده کنید.یک وی‌پی‌ان یا شبکهٔ خصوصی مجازی ابزاری مفید برای ایمن سازی هر اتصالی به اینترنت است. این راهکار تضمین می‌کند که اطلاعاتی که می‌فرستید یا دریافت می‌کنید رمزگذاری می‌شوند و از تجسس افراد در ترافیک داده‌های شما جلوگیری می‌کند.از خدمات ارائه دهندهٔ وی‌پی‌انی استفاده کنید که اطمینان دارید داده‌های شما را برداشت نکرده و دوباره نمی‌فروشد. بهترین وی‌پی‌ان‌ها معمولا مبلغی را به صورت ماهیانه دریافت می‌کنند. این موضوع چیز خوبی است چون به این معنا است که مدل تجاری آن‌ها متکی بر فروش اطلاعات شما به شرکت‌های تبلیغاتی نیست.برنامه‌های پیشنهادی:‌ IVPN - Encrypt.me - ExpressVPNاین عکس که در سال ۲۰۱۶ از مارک زاکربرگ (مدیرعامل فیس‌بوک) منتشر شد، نشان می‌داد که او از پوشش فیزیکی برای پوشاندن وب‌کم و میکروفون لپ‌تاپ خود استفاده می‌کند.حریم خصوصی فضای فیزیکی خود را بازبینی کنید.یک پوشش فیزیکی روی وب‌کم لپ‌تاپ یا کامپیوتر خود اضافه کنید. پوشش وب‌کم هنگام آغاز و پایان تماس‌های ویدیویی، این آرامش خاطر را به شما می‌دهد که فقط وقتی که می‌خواهید، از راه دوربین دستگاه قابل دیدن هستید.از یک مرورگر وب با تمرکز بر اولویت حریم خصوصی استفاده کنید.از مرورگر وبی استفاده کنید که از شما در برابر رهگیری، جمع‌آوری اطلاعات و نمایش آگهی‌های ناخواسته محفاظت کند.مرورگرهای جدید  برای کاهش سختی‌های جایگزینی با یک مرورگر دیگر، انتقال نشانک‌ها و تنظیمات دلخواه را ساده کرده‌اند.برنامه‌های پیشنهادی: Brave - Firefox - Safariاز یک موتور جست‌وجو با تمرکز بر حریم خصوصی استفاده کنید.از موتور جستجویی استفاده کنید که شما را از رهگیری، جمع‌آوری اطلاعات و نمایش آگهی‌های ناخواسته حفاظت کند. داک‌داک‌گو (DuckDuckGo) یک مرورگر با تمرکز بر حفظ حریم خصوصی است که سابقهٔ جست‌وجوهای شما را ذخیره نمی‌کند، بر دریافت مجوزهای شخصی و مکانی از سوی کاربر سخت‌گیر است و به صورت منظم مطالبی را برای آموزش مردم در مورد این‌که چگونه می‌توان در وب ایمن‌تر بود منتشر می‌کند.برنامه پیشنهادی: DuckDuckGoاز یک ارائه دهندهٔ ایمیل با تمرکز بر حریم خصوصی استفاده کنید.از یک ارائه دهندهٔ ایمیل استفاده کنید که ایمیل‌ شما را نخواند یا اطلاعات گفتگوهایتان را برای هدف‌گیری شما با تبلیغات مرتبط جمع‌آوری نکند.برنامه‌های پیشنهادی:‌ FastMail - ProtonMail - SimpleLoginدسترسی‌های حساس برنامه‌ها مانند دوربین و موقعیت مکانی را بازبینی کنید.تمام برنامه‌هایی که به عکس‌ها، دوربین، موقعیت مکانی و میکروفون شما دسترسی دارند را مرور کنید. مطمئن شوید برنامه‌هایی که این دسترسی‌های حساس را دارند، به اندازهٔ کافی قابل اعتماد هستند.متادیتاهای مکانی روی عکس‌ها، می‌توانند دقیقا نشان بدهند هر عکس کجا گرفته شده است.متادیتای متصل به عکس‌هایی که به اشتراک می‌گذارید را بررسی و پاک کنید.برچسب مکانی، اطلاعات جغرافیایی هر عکس یا ویدئو را به آن اضافه می‌کند. هر کسی که به این فایل‌های رسانهٔ برچسب‌گذاری‌شده دسترسی داشته باشد می‌تواند این اطلاعات را بخواند و بفهمد که آن عکس در کجا گرفته شده است. بیش‌تر سایت‌های اجتماعی رسانه‌محور، اطلاعاتِ اضافیِ عکس‌ها (EXIF data) را جدا و پاک می‌کنند اما اگر شما عکس‌‌هایتان را خودتان در فضایی مشخص نگهداری می‌کنید مراقب باشید؛ چون سیستم مکان‌یابی جغرافیایی می‌تواند مکان دقیق شما را آشکار کند.متوجه باشید که چگونه اَبَرداده‌های موقعیت جغرافیایی به فایل‌های شما متصل شده‌اند و مطمئن شوید که اطلاعات حساسی را با فایل‌‌های خود بارگذاری نمی‌کنید.تنظیمات حریم خصوصی شبکه‌های اجتماعی‌تان را بازبینی کنید.در طی سال‌ها، شرکت‌های رسانه‌های اجتماعی توان جمع‌آوری مقادیر سرسام‌آوری از اطلاعات را دارند. در مورد شما، علاقه‌مندی‌هایتان، این‌که با چه کسی گفت و گو می‌کنید، جایی که می‌روید، چیزهایی که می‌خرید و خیلی بیش از این‌ها.اگر هنوز حاضر به دست کشیدن کامل از رسانه‌های اجتماعی نیستید، باید زمانی را برای بازبینی تنظیمات امنیتی و حریم خصوصی‌تان در نظر بگیرید. تجسم مقدار اطلاعاتی که شرکت‌های رسانه‌های اجتماعی در مورد شما می‌دانند ممکن است برای فرونشاندن آن اشتهای وسواس‌گونه برای در جریان تمامی اخبار بودن کافی باشد.برنامه پیشنهادی: Jumboهنگام به‌اشتراک‌گذاری اطلاعات مهم از برنامه‌های پیام‌رسانی رمزگذاری‌شده استفاده کنید.وقتی که اطلاعات دارای حساسیت را در چت به اشتراک می‌گذارید باید از یک سرویس پیام‌رسانی امن و رمزگذاری‌شدهٔ پایان-به-پایان (end-to-end) استفاده کنید. رمزگذاری پایان-به-پایان تضمین می‌کند که تنها شما و گیرندهٔ پیام می‌توانید پیام‌ها را ببینید. پیام‌های شما برای هر شخص دیگری از جمله سازندگان برنامه و ارائه‌دهندگان سرویس اینترنت درهم ریخته و مبهم خواهد بود و تغییرشان برای قابل خوانده شدن تقریبا غیرممکن است.برنامه‌های پیشنهادی:‌ iMessage - WhatsApp - Signal - Telegramدر مورد حملات فیشینگ (Phishing) بیاموزید.فیشینگ تلاش برای به دست آوردن اطلاعات حیاتی (مانند رمز عبور یک حساب) به وسیلهٔ جا زدن خود به عنوان یک شخص یا شرکت معتبر و معمولا از طریق ایمیل است. مثلا یک هکر روش‌های مهندسی اجتماعی را به کار می‌گیرد تا شخصی را متقاعد کند که بر روی لینکی که به یک صفحهٔ ورود جعلی متصل است کلیک کند. این صفحهٔ ورود جعلی هر چیزی را که قربانی بنویسد (از جمله شماره‌حساب بانکی، نام‌های کاربری و رمز عبور‌ها) برای هکر می‌فرستد.در سال‌های اخیر حملات فیشینگ به طور فزاینده‌ای پیچیده‌تر شده‌اند و هکرها برای طراحی و ایجاد حملاتی فوق‌العاده خاص‌ و هدفمند، به صورت مداوم مشغول یادگیری استفاده از اطلاعاتی هستند که مردم در اینترنت به جا می‌گذارند.افراد باهوش هم از حملات فیشینگ در امان نیستند؛ پس باید در مورد فیشینگ و چگونگی تشخیص آن بیشتر بیاموزید.دستگاه‌های خود را به‌روز نگاه دارید.بسیاری از مخرب‌ترین هک‌ها در سال‌های اخیر تنها به دلیل آن بوده که افراد در به‌روزرسانی نرم‌افزار درست عمل نکرده‌اند. هرچند هشدارهای به‌روزرسانی که گوشی هوشمندتان، کامپیوتر و دیگر دستگاه‌های متصل به اینترنت نشان می‌دهند می‌توانند آزار دهنده باشند، اما اجرا کردن به موقع این به‌روزرسانی‌ها تنها و موثرترین کاری است که می‌توانید برای حفاظت ازخود در برابر این‌گونه حملات انجام دهید. به‌روزرسانی‌های نرم‌افزارها را به محض آماده و در دسترس بودنشان، بر روی هر دستگاهی که در اختیار دارید اجرا کنید و مرتبا وضعیت برنامه‌هایی که برای به‌روزرسانی هشدار نمی‌دهند را چک کنید.ترجمه بر اساس:Be safe on the internet.کوئرامگ مجله‌ای تخصصی برای توسعه‌دهندگان است که هر هفته با مطلب‌هایی در زمینه تکنولوژی، رشد فردی و آینده برنامه‌نویسی به‌روزرسانی می‌شود. برای اطلاع از آخرین مطلب‌های ما، می‌توانید توئیتر یا کانال تلگرام کوئرا را دنبال کنید.</description>
                <category>کوئرامگ | مجله تخصصی برنامه‌نویسان</category>
                <author>علی.</author>
                <pubDate>Wed, 11 Mar 2020 20:15:10 +0330</pubDate>
            </item>
                    <item>
                <title>بدترین باگ‌های تاریخ کامپیوتر: از دست رفتن ۴۶۰ میلیون دلار در ۴۵ دقیقه</title>
                <link>https://virgool.io/Quera-Mag/worstbugs-knight-j0owwibf4doq</link>
                <description>بدترین خطاهای تاریخ کامپیوتر، مجموعه‌ای دنباله‌دار از داستان معروف‌ترین و تاثیرگذارترین خطاهای برنامه‌نویسی است. بیش‌تر برنامه‌نویسان و مهندسان نرم‌افزار به ندرت پیش می‌آید که با چیزی شبیه به این داستان‌ها روبه‌رو شوند، اما با خواندن آن‌ها می‌توانند دید خوبی در زمینهٔ توسعه و استقرار نرم‌افزار به دست آورند. این خطاهای کامپیوتری تاثیر قابل توجهی بر روی افرادی گذاشته‌اند که آن‌ها را تجربه کرده‌اند؛ ما هم می‌توانیم درس‌‌های ارزشمندی را که از این اشتباهات آموخته‌‌اند، در کارها و پروژه‌های خود به کار بگیریم. دیگر خطاهای کامپیوتری این مجموعه: موشک آریان ۵، مدارگرد اقلیمی مریخ (به‌زودی) و تراک ۲۵ (به‌زودی)گروه سرمایه‌گذاری نایت Knightدر یکم آگوست ۲۰۱۲ سرمایه‌گذاری نایت، به‌روزرسانی نرم‌افزاری تازه‌ای را بر روی سرورهای عملیاتی خود دیپلوی کرد. حوالی ساعت ۸:۰۱ صبح کارکنان شرکت، تعداد ۹۷ ایمیل هشدار دریافت نمودند که حاکی از آن بود که Power Peg (یک سیستم داخلی منسوخ شده که آخرین بار در سال ۲۰۰۳ از آن استفاده شده بود) به شکلی نادرست پیکربندی شده است.این نخستین علامت هشداردهنده بود.خسارتساعت ۹ صبح بورس اوراق بهادار نیویورک برای داد و ستد باز شد و نخستین سرمایه‌گذار جزئی آن روز، سرمایه‌گذاری نایت، دستورالعمل خرید و فروش سهام و دارایی‌های خود را اعلام کرد.تنها ۴۵ دقیقه بعد، سرورهای سرمایه‌گذاری نایت ۴ میلیون معامله را اجرا کردند، ۴۶۰ میلیون دلار هزینه کردند و شرکت را در آستانهٔ ورشکستگی قرار دادند. برخی از سهم‌‌های بورس اوراق بهادار نیویورک، به دلیل سوءاستفاده ٔ الگوریتم‌های معاملات شرکت‌های دیگر از این ایراد، جهشی بیش از ۳۰۰ درصد داشتند.در نهایت سرمایه‌گذاری نایت با توجه به نقض موارد مختلفی از آیین‌نامه‌های مدیریت ریسک مالی، ۱۲ میلیون دلار هم توسط کمیسیون بورس اوراق بهادار جریمه شد.چه چیزی اشتباه پیش رفت؟بورس سهام ۱۰۱بورس اوراق بهادار با جفت کردن خریدار و فروشنده سهام به یکدیگر کار می‌کند. فروشندگان کم‌ترین قیمت (ask price) را بیان می‌کنند؛ یعنی بهایی که با دریافت آن حاضر به فروش هستند و خریداران قیمت پیشنهادی (bid price) را اعلام می‌کنند؛ یعنی برای خرید آن سهام تا چه اندازه‌ای حاضر به پرداخت هستند. تفاوت بین این دو مقدار به عنوان نسبت قیمت پیشنهادی به کم‌ترین قیمت فروش (bid/ask) شناخته می‌شود که معمولا در حدود چند سنت شناور است.دانش مالی متعارف می‌گوید که یک نفر می‌بایست هنگامی سهام بخرد که قیمت پایین است و هنگامی بفروشد که قیمت بالاست.متاسفانه یک الگوریتم مستقر در یکی از سرورهای عملیاتی نایت طوری برنامه‌ریزی شده بود که با سرعت هرچه تمام‌تر، دقیقا برعکس آن را انجام دهد. برنامهٔ Power Peg با هدف خرید سهام با قیمت ارائه شده برای فروش و سپس فروش بلافاصلهٔ آن با هر قیمت پیشنهادی طراحی شده بود که نتیجهٔ آن از دست دادن مبلغی به اندازهٔ اختلاف بین کم‌ترین قیمت فروش و قیمت پیشنهادی بود. این تفاوت قیمت به ارزش پخش (Value of the spread) نیز معروف است.گران خریدن، ارزان فروختندر یک محیط آزمایشی، Power Peg قیمت سهام را بالا می‌برد تا سیستم تضمین کیفیت (QA) بتواند کارکرد درست سایر ویژگی‌های نرم‌افزار را بررسی کند.اما نتیجهٔ اجرای Power Peg در یک محیط عملیاتی این بود که کارمندان ارشد شرکت برای پوشاندن سیاه‌چالهٔ چند میلیون دلاری که به ناگهان در بودجه پدیدار شد، تعطیلات آخر هفتهٔ خود را دیوانه‌وار در جست‌وجوی سرمایه‌گذاران وال استریت باشند.دلیل شکستاین شکست دلایل زیادی داشت. یکی از مهم‌ترین آن‌ها، به‌کارگیری دوبارهٔ یک پرچم (Flag) در عمل‌کردی تازه بود؛ در حالی که قبل از آن در جای دیگری برای فعال سازی Power Peg مورد استفاده قرار گرفته بود. یعنی برنامه فکر می‌کرد در محیط آزمایشی قرار دارد و معاملات را بدون توجه به از دست دادن ارزش پخش و با بیش‌ترین سرعت ممکن انجام می‌داد.دوم این‌که تیم dev-ops در دیپلوی ویرایش به روزرسانی‌شدهٔ برنامه بر روی یکی از هشت سرور عملیاتی ناموفق بود. این سرور ویرایشی قدیمی از نرم‌افزار را در اختیار داشت که در آن  پرچمی (Flag) بود که مشخص می‌کرد Power Peg باید فعال باشد.در نهایت Power Peg که از سال ۲۰۰۳ منسوخ شده بود حدود هشت سال پس از آن هم هنوز در پایگاه کد باقی مانده بود. در سال ۲۰۰۵ تغییراتی در کد Power Peg ایجاد شده بود که کنترل‌‌های ایمنی را که می‌توانستند از چنین سناریویی جلوگیری کنند، سهوا غیرفعال کرده بود. با این حال در همان زمان، این به‌روزرسانی بدون هیچ‌گونه تلاشی برای تایید فعال بودن عمل‌کرد Power Peg، بر روی یک سیستم عملیاتی دیپلوی شد.کد مردهدر گزارش کمیسیون تبادل امنیت، بسیاری از عوامل دیگر نیز مهم عنوان شده‌اند. مخرب‌ترین آن‌ها نبود هیچ‌گونه بازنگری رسمی کد یا فرآیند تضمین کیفیت (Quality Assurance) و همچنین فرآیندهایی برای بررسی درستی دیپلوی نرم‌افزار است. به علاوه این‌که آستانه‌هایی از پیش تعریف شده وجود نداشته‌اند که داد و ستد خودکار را پس از رسیدن به میزان مشخصی از ضرر و زیان متوقف کنند.این مطلب قسمتی از مجموعه دنباله‌دار معروف‌ترین و تاثیرگذارترین خطاهای برنامه‌نویسی است که در کوئرامگ منتشر شده است. . هفتاد سال پیش، گریس هوپر (Grace Hopper) نخستین خطای کامپیوتری را کشف کرد؛ یک پروانه بین رله‌های کامپیوتر Harvard Mark II که با آن کار می‌کرد گیر افتاده بود. پیش از آن ایده باگ‌ها (Bugs) در زمینه‌های دیگر تعریف شده بود، اما با کشف آن پروانه، برای نخستین بار از اصطلاح اشکال‌زدایی (Debugging) در زمینهٔ کامپیوترها استفاده شد.ترجمه و تلخیص از:&quot;The Worst Computer Bugs in History: Losing $460m in 45 minutes&quot;, by Jamie Lynchکوئرامگ مجله‌ای تخصصی برای توسعه‌دهندگان است که هر هفته با مطلب‌هایی در زمینه تکنولوژی، رشد فردی و آینده برنامه‌نویسی به‌روزرسانی می‌شود. برای اطلاع از آخرین مطلب‌های ما، می‌توانید توئیتر یا کانال تلگرام کوئرا را دنبال کنید.</description>
                <category>کوئرامگ | مجله تخصصی برنامه‌نویسان</category>
                <author>علی.</author>
                <pubDate>Sat, 22 Feb 2020 16:44:03 +0330</pubDate>
            </item>
                    <item>
                <title>معماری وب: آشنایی با مفاهیم پایه</title>
                <link>https://virgool.io/Quera-Mag/%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C-%D9%88%D8%A8-%D8%A2%D8%B4%D9%86%D8%A7%DB%8C%DB%8C-%D9%85%D9%81%D8%A7%D9%87%DB%8C%D9%85-%D9%BE%D8%A7%DB%8C%D9%87-ofbcud4oao0c</link>
                <description>معماری مدرن برنامه‌های تحت وب در یک نگاهتصویر بالا، معماری مدرن اپلیکیشن‌های تحت وب را به خوبی به نمایش می‌گذارد. توسعه‌دهندگانی که در حوزه وب تجربه کمتری دارند، ممکن است این معماری کمی پیچیده به نظرشان برسد. اما نگران نباشید، حقیقت این است که اصول اولیه حاکم بر این نمودار را می‌توان بسیار سریع آموخت! در ادامه مروری کوتاه اما بسیار ساده بر هر یک از اجزاء این تصویر می‌اندازیم تا ببینیم اپلیکیشن‌های مدرن تحت وب چگونه کار می‌کنند و وقتی یک وبسایت را فرامی‌خوانیم، در پشت صحنه دقیقاً چه اتفاقی می‌افتد. ۱. سامانه نام دامنه (DNS)سامانه نام دامنه (Domain Name System) یا مخفف رایج‌تر آن DNS یک فناوری پایه و حیاتی برای وجود شبکه­‌ی جهانی اینترنت است. در سطوح اولیه، DNS یک کلید/مقدار (مثلاً google.com) را به یک IP (مثلاً: 85.129.83.120) ربط می­‌دهد که باعث می­شود کامپیوتر شما یک درخواست به سرور مناسب بفرستد. اگر این سیستم را به برقراری تماس تلفنی تشبیه کنیم، فرآیند کار DNS مانند تبدیل «با علی تماس بگیر» به این است که: «با شماره‌­ی 22112233 تماس بگیر». همانطور که در گذشته برای پیدا کردن شماره تلفن علی باید در دفترچه تلفن دنبال آن می­‌گشتید، امروزه نیز برای پیدا کردن IP یک دامنه به DNS نیاز دارید. می­توان گفت DNS دفترچه تلفن اینترنت است.جزئیات بسیار زیادی هستند که می­توان به آن­ها پرداخت، اما برای مراحل ابتدایی تا همینجا کافی است.۲. متوازن­‌کننده بار (Load Balancer)قبل از پرداختن به جزئیات توازن بار، باید راجع به مقیاس‌دهی افقی و عمودی اپلیکیشن توضیح بدهیم. به طور ساده، تغییر مقیاس افقی یعنی افزایش «تعداد» منابع مثلاً از طریق افزایش تعداد کامپیوترها؛ در حالی که تغییر مقیاس عمودی یعنی افزایش «قدرت» منابعی که در اختیار داریم مثلاً با ارتقای CPU یا RAM کامپیوتر.در توسعه­‌ی وب، شما تقریباً همیشه باید به صورت افقی مقیاس کنید، دلیل آن هم این است که هر چیزی خراب می­شود! سرورها ناخواسته به مشکل می­‌خورند، شبکه‌­ها تحلیل می­روند، حتی گاهی یک مرکز داده (Data Center) به طور کلی آفلاین می­‌شود. داشتن چند سرور باعث می­‌شود بتوانید از قطعی­‌ها فرار کنید و برنامه­‌ی شما همچنان کار کند. در واقع برنامه­‌ی شما &quot;مقاوم به مشکل&quot; (Fault Tolerant) می­‌شود. مزیت دوم تغییر مقیاس افقی این است که اجزای مختلف Back-end برنامه ­ی شما (مانند سرور شبکه، دیتابیس و...) اگر روی سرورهای جدا قرار داشته باشند، کمترین وابستگی را به هم خواهند داشت. مورد آخر هم این که در نهایت برای مقیاس عمودی محدودیت وجود دارد و به جایی می­رسید که دیگر نمی­توانید مقیاس عمودی بیشتری انجام دهید. هیچ کامپیوتری آنقدر قوی نیست که بتواند از عهده­‌ی تمام محاسبات مورد نیاز شما بر بیاید!خب، برگردیم به متوازن کننده­ های بار، همان چاشنی جادویی که مقیاس افقی را امکان­‌پذیر می‌کند! کار آن­ها این است که درخواست را به یکی از چندین سرور اپلیکیشن که معمولاً دقیقاً شبیه هم (یا Mirror Image هم هستند) بفرستند و پاسخ آن را به کاربر (Client) برگردانند. همه­‌ی این سرورها درخواست را مشابه یکدیگر مدیریت می­‌کنند، پس مسئله صرفا توزیع درخواست­‌ها است به طوری که هیچ کدام از سرورها بار اضافی نگیرند.همین. ایده‌­ی کلی متوازن­‌کننده­ بار بسیار است. مشخص است که اگر بخواهیم دقیق‌­تر شویم، پیچیدگی­‌های خاص خود را دارند اما فعلاً نیازی نیست آن­ها را بدانیم.۳. سرور برنامه­‌های مبتنی بر وب (Web Application Servers)در بیان کلی، سرورهای برنامه­‌های مبتنی بر وب را می‌توان به سادگی معرفی کرد. آن­ها منطق مورد نیاز برای مدیریت کردن درخواست­‌های کاربر را اجرا می­‌کنند و پاسخ را در قالب HTML به مرورگر کاربر می­‌فرستند. سرورها برای کار خود، با زیرساخت­‌های بک‌اند مختلف مثل دیتابیس­‌ها، لایه­‌های Cache، صف­‌های انجام کار (Job Queues) و... در ارتباط هستند. همان طور که بالاتر گفته شد، به صورت معمول حداقل دو سرور وجود دارد (و خیلی مواقع بیشتر) که به یک متوازن­‌کننده بار متصل شده‌­اند تا درخواست کاربر بتواند پردازش شود.برای پیاده‌­سازی سرورهای برنامه، به یک زبان برنامه‌نویسی (مثلاً Node.js ،Ruby ،PHP، جاوا، اسکالا، سی‌شارپ و...) و در کنار آن یک فریم‌ورک Web MVC برای آن زبان (Express برای Node.js، لاراول برای پی‌اچ‌پی، Play برای Scala و...) نیاز است. البته جزئیات این موارد فراتر از موضوع این مقاله است.۴. سرورهای دیتابیسامروزه هر برنامه­‌ی شبکه از یک یا تعدادی بیشتر دیتابیس برای ذخیره‌­سازی اطلاعات استفاده می­‌کند. دیتابیس به شما امکان تعریف داده­‌ساختارهای خود، اضافه­ کردن داده­‌ی جدید، پیدا کردن داده، به‌­روز کردن یا پاک کردن داده، و خیلی کارهای دیگر را می­‌دهد. سرورهای برنامه­‌های تحت وب معمولاً مستقیم به یک دیتابیس متصل می‌شوند، علاوه بر این هر سرویس Back-end ممکن است دیتابیس خاص خود را داشته باشد که از بقیه­‌ی برنامه جدا است.درست است که از پرداختن به خیلی از جزئیات پرهیز می‌­کنیم اما دانستن جزئیات دو مورد بهتر از ندانستن آن‌هاست: SQL و NoSQL.زبان SQL (که مخفف Structured Query Language یا به عبارتی زبان ساختارمند پرسش‌ها) است در دهه ۷۰ میلادی ایجاد شد. هدف از ساخت این زبان، ایجاد راهکاری ساده برای کوئری زدن بر روی مجموعه داده‌های رابطه‌ای (Relational Data Sets) بود. دیتابیس‌­های SQL داده‌­ها را در جدول­‌هایی نگه می­دارند که به وسیله‌­ی IDهای مشترک با یکدیگر مرتبط هستند. بگذارید مثال ساده‌­ای در مورد ذخیره‌­ی اطلاعات آدرس کاربران بزنیم:می‌توانیم داده‌ها را در دو جدول ذخیره کنیم: یکی جدول users و دیگری جدول user_addresses. هر دو این جدول‌ها یک ستون id دارند که به ترتیب، شناسه‌ی کاربرها و شناسه‌ی آدرس‌ها را با یک عدد یکتا مشخص می‌کند. در جدول user_addresses یک ستون به نام user_id نیز قرار دارد که یک کلید خارجی (Foreign Key) محسوب می‌شود و این دو جدول را به یکدیگر متصل می‌کند. با user_id می‌توانیم بفهمیم آدرسی که ذخیره شده است برای کدام کاربر است. تصویر زیر یک طرح ساده از این مثال است:اگر با SQL آشنایی ندارید، بهتر است کمی در مورد آن مطالعه کنید؛ زیرا در بخش‌های زیادی از توسعه­‌ی وب به کار می‌رود و آشنایی با مبانی آن بسیار کاربردی است.در طرف مقابل NoSQL، که به معنای غیر SQL (یا Non-SQL) است، مجموعه‌­ای جدیدتر از فناوری­‌های دیتابیس است. هدف ایجاد NoSQL مدیریت حجم عظیم داده­‌هایی است که برخی برنامه‌های تحت وب در مقیاس بزرگ تولید می­‌کنند. بیشتر انواع SQL معمولاً به خوبی نمی­‌توانند به صورت افقی مقیاس کنند و تنها توانایی مقیاس شدن عمودی (آن هم به شکل محدود) را دارند. اگر در مورد NoSQL به کسب اطلاعات تکمیلی نیاز دارید، می‌توانید نگاهی به منابع زیر بیندازید:W3ResourceKDnuggetsMonogoDB Resourcesدر نظر داشته باشید که به طور کلی دنیای وب، حتی برای دیتابیس­‌های NoSQL، از SQL استفاده می­‌کند. پس حتماً باید SQL یاد بگیرید و هیچ راه فراری از آن ندارید.۵. سرویس­‌های Cachingیک سرویس Caching، پایگاه داده ساده­‌ای به صورت کلید/مقدار (یا به عبارتی Key/Value) در اختیار ما می‌گذارد که امکان ذخیره و پیدا کردن اطلاعات را تقریباً با O(1) فراهم می­کند. برنامه­‌ها از سرویس‌­های Caching استفاده می­کنند تا نتایج محاسبات پرخرج و پرزحمت را نگه دارند و به این ترتیب دفعه‌­ی بعد نیازی نباشد که دوباره این محاسبات از اول انجام شوند و صرفا نتایج از Cache بازیابی می‌­شوند. یک برنامه می‌تواند نتایج یک کوئری دیتابیس، نتایج ارتباط با سرویس­‌های خارجی، HTML یک URL خاص و خیلی چیزهای دیگر از این دست را Cache کند. مثال­‌هایی از دنیای واقعی ببینید:گوگل نتایج جست­جوهای پرطرفدار مثل “آب” یا “سریال جدید” را Cache می‌کند تا هر دفعه نیازی به محاسبه کردن آن‌ها نباشد.فیس­بوک خیلی از چیزهایی که بعد از ورود می­‌بینید، مثلاً داده‌های پست‌ها، فهرست دوستان و... را Cache می­کند. درباره سیستم Caching فیس‌بوک در این مطلب می‌توانید بیشتر بخوانید.فراگیرترین فناوری‌های کاربردی برای Caching عبارتند از Redis و Memcached.۶. صف کار (Job Queue &amp; Servers)بیشتر برنامه‌­های تحت وب نیاز دارند که یک سری کار را به صورت ناهمگام (Asynchronously) در پشت پرده انجام دهند که بعضاً ربط مستقیمی هم به درخواست کاربر ندارند. مثلاً گوگل باید کل اینترنت را Crawl کند (خزش در صفحات وب) و نتایج را نمایه کند تا بتواند پاسخ جست­جوها را بدهد. گوگل این کارها را صرفاً زمان جست­جوی کاربر انجام نمی‌دهد، بلکه به صورت ناهمگامی شبکه را Crawl می­کند و نمایه‌­های جست­جو را به طور مداوم به روز می­‌کند. یا مثال روزمره دیگری که همگی که با آن سروکار داشته‌ایم، زمانی است که کاربر در سایت عضو می‌شود و قرار است برای او ایمیل تایید عضویت ارسال شود. پیامی مبنی بر ارسال ایمیل سریعاً به کاربر نمایش داده می‌شود اما در واقع ایمیل هنوز ارسال نشده و به صورت ناهمگام و کمی بعدتر ارسال می‌شود.ساختارهای زیادی برای کار کردن به صورت ناهمگام وجود دارد، فراگیرترین آن چیزی است که آن را ساختار «صف کار» می­نامیم. دو جزء اینجا ایفای نقش می­‌کنند: یک صف «کار» که باید اجرا شود و یک یا چند سرور کار (معمولا به آن­ها &quot;کارگر&quot; می­گویند) که باید کارهای صف را انجام دهند.صف­‌های کار لیستی از کارها که باید به صورت ناهمگام انجام شوند نگه می­دارند. ساده ­ترین نوع آن‌­ها صف‌های «خروج به ترتیب ورود» (یا FIFO) هستند که اولین درخواستی که وارد صف می‌شود، قبل از سایر درخواست‌ها پردازش می‌شود. هرچند FIFO در بسیاری از مواقع هم جوابگو نیست و بیشتر برنامه­‌ها در نهایت به صف­‌هایی نیاز پیدا می­کنند که اولویت‌بندی بهتری از اهمیت کارها در آن‌ها صورت می‌گیرد. هروقت یک کار باید انجام شود، چه طبق یک برنامه‌­ی منظم و چه طبق عملیات­‌های کاربر، برنامه این کار را به صف اضافه می‌کند.سرورهای کار، کارها را پردازش می­کنند. آن­ها هر از گاهی به صف کار سر می‌زنند (Polling) تا ببیند آیا کاری برای انجام دادن هست یا نه و اگر بود، آن کار را از صف خارج، و اجرا می‌­کنند. زبان­‌ها و فریم­‌ورک­‌های این سرورها نیز همانند سرورهای شبکه بسیار گسترده می­‌باشند و برای این مقاله از ورود دقیق‌تر به آن‌ها خودداری مي‌کنیم.۷. سرویس جست­جوی تمام متناکثر برنامه­‌های تحت وب، نوعی از جست­جو را درون خود دارند؛ به این صورت که کاربر یک متن ورودی می­‌دهد (Query) و برنامه مرتبط‌ترین نتایج را برمی­‌گرداند. فناوری پشت این عملیات، «جست­جوی تمام متن» (یا Full-text Search) نام دارد که از یک ایندکس معکوس (Inverted Index) استفاده می­کند تا به سرعت پست‌هایی را پیدا کند که کلیدواژه‌­های موجود در Query را دارا هستند.نمونه­‌ای از تبدیل سه سند به ایندکس معکوس. دقت کنید که کلمه­‌های عمومی و رایج مثل “in”، “the” و “with” در ایندکس معکوس آورده نشده­‌اند.با اینکه امکان انجام جست­جوی تمام متن به طور مستقیم در یک سری دیتابیس­‌ها (مثلاً MySQL) وجود دارد اما راه‌­اندازی یک «سرویس جست­جوی» جداگانه که ایندکس معکوس بسازد و رابط Query داشته باشد هم بسیار معمول است. برای این منظور امروزه Elasticsearch پرطرفدارترین پلتفرم جست­جوی تمام متن را ارائه می‌کند؛ البته موارد دیگری مثل Sphinx و Apache Solr نیز وجود دارند۸. سرویس‌­ها (Services)با پیشرفت و بزرگتر شدن برنامه، طی زمان یک سری «سرویس­‌ها» از برنامه جدا می­شوند و به صورت برنامه‌های مستقل به کار خود ادامه می‌­دهند. البته آن­ها با دنیای خارج ارتباطی برقرار نمی­‌کنند، و برنامه­‌ی اصلی و دیگر سرویس‌­ها همچنان با آن­ها تعامل دارند. به عنوان مثال بر حسب نیاز می‌توان برای چیزهایی از قبیل «مدیریت حساب‌های کاربری»، «مدیریت پرداخت‌ها» یا «ایجاد فایل‌های PDF از متون» سرویس‌های جداگانه‌ای راه‌اندازی کرد.۹. داده (Data)امروزه بقای شرکت­‌ها به طرز استفاده‌­ی آن­ها از داده‌­ها بستگی دارد. تقریباً همه­‌ی برنامه­‌ها بعد از بزرگ شدن به حد کافی، یک پایپ‌لاین داده راه می‌­اندازند که بتوانند داده‌­ها را جمع‌­آوری، ذخیره و آنالیز کنند. یک پایپ‌لاین عادی سه مرحله دارد:۱. برنامه، داده‌هایی که معمولاً درباره­‌ی رفتار کاربران است را به محیطی برای پردازش داده‌ها ارسال می‌کند. AWS Kinesis و Kafka دو فناوری رایج این کار هستند.۲. هم داده‌­ی خام و هم داده‌­ی نهایی تغییریافته در سرویس ذخیره‌­ی ابری ذخیره می­شوند. AWS Kinesis محیطی به نام Firehose دارد که امکان ذخیره‌­ی داده‌­ی خام در سرویس ابری خودش (S3) را بسیار ساده کرده است.۳. معمولا داده‌­ی تغییریافته برای آنالیز به یک انبار داده (Data Warehouse) بارگذاری می­‌شود. [در خارج از ایران] بسیاری از استارتاپ‌ها برای این منظور از AWS Redshift استفاده می­‌کنند، هرچند شرکت­‌های بزرگتر معمولاً از Oracle یا انبارداده‌های انحصاری دیگر استفاده می­‌کنند. اگر داده‌­ها به اندازه­‌ی کافی بزرگ باشند، باید از فناوری­های ویژه داده‌های بزرگ مانند هدوپ (Hadoop) و NoSQL استفاده کرد.۱۰. ذخیره ابری (Cloud Storage)ذخیره­ ی ابری راهی ساده و مقیاس‌پذیر برای ذخیره داده، دسترسی به آن و به اشتراک گذاشتن داده‌ها در اینترنت است. شما می­‌توانید هر چیزی که روی فایل‌سیستم محلی ذخیره می­‌کنید را در آن ذخیره کنید، و مزیت آن این است که با استفاده از یک RESTful API می­شود تحت HTTP به آن دسترسی داشت. سرویس S3 آمازون امروزه با اختلاف محبوب­‌ترین سرویس ذخیره‌­ی ابری جهان است.۱۱. شبکه توزیع محتوا (CDN)دسترسی به اطلاعات زمانی که CDN وجود دارد و زمانی که بدون CDN می‌خواهیم به آن‌ها دسترسی داشته باشیم.شبکه توزیع محتوا (Content Delivery Network) یا مخفف آن CDN راهی در اختیار ما می­گذارد تا دارایی‌هایی مثل HTML ایستا، CSS، جاوا اسکریپت و عکس‌­ها را سریع‌تر در وب به کاربران ارائه دهیم، بسیار سریعتر از زمانی که آن‌ها را از یک سرور تک‌مبدا ارائه می‌دهیم. روش کار CDN به این صورت است که محتوا را بین تعداد زیادی سرور حاشیه­‌ای در سرتاسر جهان پخش می­کند تا کاربر آن محتوا را به جای دریافت از سرور مبدا اصلی، از سرورهای حاشیه­‌ای دریافت کند. برای مثال در شکل زیر، کاربری در اسپانیا یک صفحه را از سایتی درخواست کرده که سرورهای مبدا آن در نیویورک هستند؛ اما دارایی‌های ایستا می­‌توانند از یک سرور CDN حاشیه‌­ای در انگلیس دریافت شوند تا فاصله‌­ی طولانی بین اسپانیا و نیویورک طی نشود.برخی مطلب‌های قبلی کوئرامگ برای توسعه‌دهندگان وب:۷ مرحله برای تبدیل شدن به یک توسعه‌دهنده حرفه‌ای وبآشنایی با ۳ حوزه اصلی کاربرد زبان پایتونترجمه و تلخیص از:&quot;Web Architecture 101&quot;, by Jonathan Fulton at Storyblocksکوئرامگ مجله‌ای تخصصی برای توسعه‌دهندگان است که هر هفته با مطلب‌هایی در زمینه تکنولوژی، رشد فردی و آینده برنامه‌نویسی به‌روزرسانی می‌شود. برای اطلاع از آخرین مطلب‌های ما، می‌توانید توئیتر یا کانال تلگرام کوئرا را دنبال کنید.</description>
                <category>کوئرامگ | مجله تخصصی برنامه‌نویسان</category>
                <author>Ali N</author>
                <pubDate>Wed, 18 Dec 2019 18:03:57 +0330</pubDate>
            </item>
                    <item>
                <title>گزارش اولین سری رویداد Traceway در زمینه هوش مصنوعی و یادگیری ماشین</title>
                <link>https://virgool.io/Quera-Mag/%DA%AF%D8%B2%D8%A7%D8%B1%D8%B4-%D8%A7%D9%88%D9%84%DB%8C%D9%86-%D8%B1%D9%88%DB%8C%D8%AF%D8%A7%D8%AF-traceway-%D8%AF%D8%B1-%D8%B2%D9%85%DB%8C%D9%86%D9%87-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%D9%88-%DB%8C%D8%A7%D8%AF%DA%AF%DB%8C%D8%B1%DB%8C-%D9%85%D8%A7%D8%B4%DB%8C%D9%86-tqcdrgbdzl2l</link>
                <description>سری رویدادهای Traceway قرار است فضایی برای انتقال تجربه و شبکه‌سازی توسعه‌دهندگان ارشد کشور باشد. در هر رویداد توسعه‌دهندگان ارشد سازمان‌های ایرانی و بین‌المللی تجربیات خود را با سایر توسعه‌دهندگان به اشتراک خواهند گذاشت و با تشریح تجربیات فنی خود در طراحی و پیاده‌سازی فناوری‌های روز دنیا، مسیر پیش روی سایر سازمان‌ها را در استفاده از هر فناوری روشن‌تر خواهند کرد.دوره اول:‌ هوش مصنوعی و یادگیری ماشیندوره اول رویدادهای Traceway چهاردهم آذرماه در دانشگاه صنعتی شریف برگزار شد. تمرکز این دوره بر روی «هوش مصنوعی و یادگیری ماشین» بود و رویداد از سه بخش اصلی تشکیل می‌شد:بخش ۱، ارائه‌های بلند: در این بخش توسعه‌دهندگانی از چهار شرکت دیجی‌کالا، مسیریاب بلد، کافه‌بازار و تپسل، تجربیات خود را در استفاده از «هوش مصنوعی» در محصولات‌شان به تفصیل بیان کردند.بخش ۲، ارائه‌های کوتاه: در این بخش سه شرکت سلام سینما، ویرگول و واکاویک در قالب Ignite (سخنرانی‌های کوتاه ۵ دقیقه‌ای) به معرفی بخش فنی محصول خود پرداختند.بخش ۳، شبکه‌سازی: این بخش برای ایجاد ارتباط بین مهمانان رویداد با یکدیگر، و در ادامه پرسش‌وپاسخ با سخنرانان در قالب یک بازه زمانی ۱ ساعته صورت گرفت.اگر به دیدن سخنرانی‌های این رویداد علاقه دارید می‌توانید از طریق این لینک در لحظه‌نگار و با استفاده از کد تخفیف virgool_user به ویدئوهای ضبط شده دسترسی داشته باشید.خلاصه‌ای از ارائه‌های اصلی رویدادخلاصه ارائه ۱. عباس حسینی از شبکه تبلیغات موبایلی تپسلعباس حسینی در Trace Way شرح داد که چگونه تپسل با پیش‌بینی رفتار کاربران در مواجهه با هر آگهی، مرتبط‌ترین تبلیغ را به هر کاربر نمایش می‌دهد.اکوسیستم تبلیغات به این صورت است که همیشه گروهی از تبلیغ‌دهنده‌ها را داریم که می‌خواهند تبلیغ خودشان را نشان دهند و مخاطبان بیشتری را بدست آورند، و از طرفی رسانه‌هایی را داریم که میخواهند از طریق این تبلیغات درآمدزایی داشته باشند. چالش اصلی این است که این دو گروه به صورت یک‌به‌یک نمی‌توانند با هم ارتباط برقرار کنند. DSP یا به عبارتی Demand Side Platformها بسترهایی هستند که به تبلیغ‌دهنده‌ها سرویس می‌دهند و هدفشان این است که با کمترین هزینه و بهترین حالت بتوانند تبلیغ‌دهنده‌ها را به اهدافشان برسانند. از طرفی SSPها یا به عبارتی Supply Side Platformها به نمایش‌دهنده‌ها متصل می‌شوند و سعی می‌کنند با بالاترین قیمت فضای تبلیغاتی را به فروش برسانند.چالش اصلی که در این کار وجود دارد این است که این پلتفرم‌ها می‌خواهند از تبلیغ‌دهنده کمترین هزینه را بگیرند و به نمایش‌دهنده بیشترین درآمد را بدهند. برای برطرف کردن این مشکل از مکانیزم Exchange استفاده شده است به این ترتیب که داخل Exchange مزایده‌ای برگزار می‌شود که طبق آن مکانیزم تبلیغ به جایگاه‌ها فروخته میشود.اگر بخواهیم به طور دقیق‌تر بیان کنیم، وقتی یوزر وارد یک صفحه می‌شود و آن صفحه هم یک جایگاه تبلیغاتی دارد، در این لحظه یک درخواست به گوگل ارسال می‌شود. گوگل در این لحظه به DSPهای مختلفی که به آن متصل هستند این خبر را می‌دهد. از طرفی DSPها باید با استفاده از DMPها (Data Management Platform) یکسری مشخصات از کاربر را جمع آوری کنند تا از علایق کاربر باخبر شوند. سپس توسط یک مزایده تبلیغ در جایگاه مشخصی قرار می‌گیرد.پس از این معرفی اولیه، عباس حسینی درباره موضوعاتی مانند DSP Turnover Rate، مکانیزم‌ها و فرمول‌های یادگیری ماشین و روش‌های Deep و Factorization Machines برای پردازش و مدیریت Requestهای شبکه‌های تبلیغاتی صحبت کرد.خلاصه ارائه ۲. علی چلمقانی از تیم هوش مصنوعی کافه‌بازارعلی چلمقانی محصول پردازش زبان‌های طبیعی (NLP) کافه‌بازار را تشریح کرد. استفاده‌هایی که از این محصول در «چت دیوار» شده و نتایجی که بعد از آن در پی داشته است.علی چلمقانی در ابتدا به ساختار تیم‌های کافه بازار در سه محصول اصلی بازار، دیوار و بلد اشاره کرد که هر کدام دارای زیر محصول و دارای تیم‌های جدا هستند.علی چلمقانی سپس در مورد چت دیوار و زمان انتشار این محصول صحبت کرد و نشان داد که چه‌طور با تحلیل محتوایی متنی چت دیوار و با دسته‌بندی داده‌ها، توانستند میزان موفقیت آگهی‌های دیوار را افزایش دهند. یکی از چالش‌ها در این راستا این بود که آماده کردن دیتاست در حوزه چت کار آسانی نبود و نمی‌توانستند مدلی از داده‌ها به وجود بیاورند تا به Intent Classification چت برسند. برای این کار محتوای چت‌ها را دسته بندی کردند. مثلا چت‌هایی که در مورد تجهیزات فنی ماشین‌ها (مثل بیمه و مدل و...) بود را در یک دسته قرار دادند و همینطور این روش را برای املاک و... امتحان کردند. حتی مزاحمت‌هایی که در دیوار اتفاق می‌افتاد را از طریق دلیل بلاک کردن کاربر متوجه می‌شدند و در واقع همه این کارها را یادگیری ماشین برایشان انجام میداد.سیستمی که در حال بهبود آن هستند Smart Suggestions است که از طریق یادگیری ماشین قرار است پیش‌بینی کند سوال بعدی که کاربر ممکن است بپرسد چه خواهد بود.خلاصه ارائه ۳. پیام آراسته از مسیریاب بلدپیام آراسته در Traceway درباره پیش‌بینی ترافیک مسیریاب بلد صحبت کرد. موضوعی که می‌تواند با کم‌کردن زمان و مسافت سفرها، مهم‌ترین برتری تکنولوژی مسیریاب‌ها محسوب شود.پیام داستان نحوه‌ی محاسبه‌ی ترافیک در سطح شهر در اپلیکشین بلد را بازگو کرد و گفت که دانستن میزان ترافیک در زندگیمان قطعاً تاثیرگذار خواهد بود. یکی از کاربردهایی که اپلیکیشن بلد دارد این است که با استفاده از ترافیکِ معابرِ مختلف که در اختیار دارد، زمان رسیدن به مقصد شما را تخمین می‌زند و بهترین مسیر را به شما پیشنهاد می‌دهد.  ممکن است فکر کنید داده‌هایی که از آن ترافیک را به دست می‌آوریم از طریق دوربین‌های سطح شهر و یا تصاویر ماهواره‌ای هستند که درواقع هر کدام از این‌ روش‌ها مشکلاتی دارند که باعث می‌شود از آنها استفاده نکنیم. در عوض مسیریاب‌ها دقیقاً از داده‌های خود کاربران استفاده می‌کنند؛ وقتی کاربری با استفاده از اپلیکشن بلد مسیر‌یابی می‌کند، سیگنال‌های GPS او به سرورهای بلد فرستاده می‌شود که می‌توانیم از آنها برای محاسبه‌ی ترافیک لحظه‌ای استفاده کنیم.برای اینکه بتوانیم به درستی این کار را انجام دهیم از تکنولوژی‌های Big Data همچون Spark و Hadoop در کنار سیستم بک‌اند Live Traffic که خودمون develop کردیم، استفاده می‌کنیم و برای بحث حریم خصوصی (Privacy)، زمانی که شما با اطلاعاتتان مثل شماره تماس و یا ایمیل وارد اپلیکیشن می‌شوید یک سری token به صورت تصادفی ایجاد می‌شود که این tokenهای تصادفی به اطلاعات لاگین شما برگشت‌پذیر نیستند. همچنین پیام، حضار رو با موضوع نویزی که در سیگنال GPS ارسالی کاربران وجود دارد آشنا کرد و گفت با سیستم Map Matchingی که develop کردیم به چه شکلی این نویز رو برطرف می‌کنیم. بعد از برطرف کردن نویز سیگنال GPS، درباره‌ی نحوه‌ی محاسبه‌ی ترافیک لحظه‌ای با استفاده از مفاهیمی چون Recency و Frequency و مفاهیم آماری و همچنین یادگیری ماشین به صورت تخصصی مطالبی بیان شد.خلاصه ارائه ۴. حامد دهقانی از فروشگاه دیجی‌کالاحامد دهقانی ماجرای سیستم توصیه‌گر (Recommendation System) دیجی‌کالا را تعریف کرد. سیستمی که تا همین چند هفته پیش از سرویس‌های خارجی استفاده می‌کرد اما حالا با طراحی و پیاده‌سازی کامل آن در دیجی‌کالا، علاوه بر کاهش هزینه، نتایج بهتری هم در تشخیص علاقه‌مندی‌های کاربران داشته است.دیجی‌کالا در خصوص سیستم توصیه‌گر از داده‌هایی مثل Business Data و User Event Data استفاده می‌کند که در نهایت به Big Data Storage دیجی‌کالا تبدیل می‌شود تا اپلیکشین‌های توصیه‌گر به خوبی کار کنند. این اپلیکیشن‌ها ویژگی‌هایی از جنس Personalize و Non personalize دارند که این سیستم برای پیشنهادها از Related Product، Aslo bought، Top category و... استفاده می‌کند. حامد دهقانی به این اشاره کرد که دیجی‌کالا میتوانست از Third Party Recommendation استفاده کند اما ترجیح داد خودشان با استفاده از یادگیری ماشین سیستمی را طراحی کنند که علاوه بر کاهش هزینه نتایج بهتری نیز داشته باشد.اگر علاقه دارید تا مشروح این سخنرانی‌ها را دنبال کنید، دیدن ویدئوهای لحظه‌نگار را از دست ندهید.خلاصه‌ای از ارائه‌های کوتاههادی راسخ از سلام سینما گفت در سلام سینما از Recommendation System برای پیشنهاد فیلم مطابق سلیقه کاربران استفاده کردیم. برای شروع از سرویس Prediction.io استفاده کردیم ولی یک سری محدودیت‌هایی داریم که در تلاشیم تا با استفاده از الگوریتم‌های دیگر این موارد را برطرف کنیم.آرمان فاطمی از واکاویک، به اهمیت داده‌های بزرگ و کوچک در کسب‌وکار اشاره کرد و سپس به معرفی واکاویک، سرویس پردازش هوشمند متن فارسی که با استفاده از هوش مصنوعی انجام میشود پرداخت. آرمان فاطمی از اهمیت و پیشرفت هوش مصنوعی در کسب‌کارهای مرتبط با منابع انسانی صحبت کرد.علی آجودانیان از ویرگول اشاره کرد به اینکه پیشنهاد پست‌ها را با توجه به فعالیت‌هایی که کاربران نسبت به خواندن مقاله‌های مختلف دارند انجام دادیم و با استفاده از تجزیه متن مطلبی را پیشنهاد میدادیم که با سلیقه کاربر یکسان است و اکنون هم درحال تست سیستمی هستند که این روند را بهبود داده است.در این گزارش سعی کردیم به طور خلاصه به سخنرانی‌هایی که در رویداد Traceway ارائه شد اشاره کنیم. در صورتی که تمایل به دانستن جزئیات و دیدن کامل سخنرانی ها دارید، می‌توانید با مراجعه به لحظه‌نگار ویدئوی ضبط شده این رویداد را با کد تخفیف virgool_user خریداری نمایید.</description>
                <category>کوئرامگ | مجله تخصصی برنامه‌نویسان</category>
                <author>فاطمه عامل</author>
                <pubDate>Sun, 08 Dec 2019 12:56:34 +0330</pubDate>
            </item>
                    <item>
                <title>راهنمای ساخت یک رزومه بی‌نظیر برای برنامه‌نویس‌ها و مهندس‌های نرم‌افزار</title>
                <link>https://virgool.io/Quera-Mag/writing-the-best-programming-resume-rkm9za9zbh9q</link>
                <description>ترنس کوئو، فری‌کدکمپ — راستش را بخواهید، من توسعه‌دهنده باتجربه‌ای نیستم. سابقه کار چندانی هم ندارم. حقیقتش را بگویم، وقتی این رزومه برنامه‌نویسی را نوشتم، دانشجوی سال آخری بیش نبودم. اما این رزومه کاری کرد که من از گوگل، فیس‌بوک، آمازون، مایکروسافت، اپل، و کلی جای دیگر مصاحبه بگیرم!من همان آدمی هستم که وقتی تازه دنبال کار بود، کیلو کیلو رزومه می‌فرستاد که مقصد هیچ‌کدام‌شان به جایی جز ریسایکل‌بین شرکت‌ها ختم نمی‌شد. چهار سالِ آزگار طول کشید تا بالاخره کشف کنم که چطور می‌توان کاری کرد که مسئول استخدام بی‌حوصله‌ای که ساعت پنج عصر در بین خرواری از رزومه‌ها گیر افتاده، ناگهان خواب از سرش بپرد!من راه درست را با چهار سال آزمون و خطای فراوان کشف کردم. اما شاید اگر یکی پیدا می‌شد و همان سال دوم دانشگاه یک رزومه درست و حسابی جلوی من می‌گذاشت، آن را برایم تشریح می‌کرد و نوشتنش را یادم می‌داد، دیگر اینقدر چشم انتظار یک تلفن و ایمیل از شرکت‌ها نمی‌ماندم. در این مطلب می‌خواهم نقش آن یک نفر را برای شما ایفا کنم. قرار است رزومه‌ای که از گوگل، فیس‌بوک، آمازون، مایکروسافت، و اپل برایم مصاحبه گرفت را خط به خط برایتان تحلیل کنم و اصولی که برای نوشتن رزومه یاد گرفته‌ام را با شما در میان بگذارم.چهار سال طول کشید تا من به این توصیه‌ها برسم، اما شما می‌توانید کل تجربه چهارساله مرا به همین سادگی، در حالی که روی تخت لم دادید و یک لیوان چای قندپهلو نوش جان می‌کنید یاد بگیرید! با این اصول می‌توانید فقط با درست نشان دادن خودتان و بدون گفتن هیچ دروغی، به شرکت‌ها نشان بدهید که می‌توانید نیروی خوبی برایشان باشید. امیدوارم اگر در جایگاه چهار سال پیش من هستید، این پست به شما کمک کند و بتوانید با آزمون و خطاهای خیلی کمتری به شغل دلخواهتان برسید.این شما و این رزومه‌ای که انبوهی از مصاحبه‌ها در شرکت‌های بزرگ تکنولوژی را برای من به ارمغان آورد:  https://drive.google.com/open?id=1HqJvhX6TwwRT41aUIEXF-ivvS1ddNnpw این رزومه با کمک رزومه‌ساز آنلاین کوئرا بازنویسی شده است.شاید میلیون‌ها روش برای انجام یک کار وجود داشته باشد، اما اصول انجام آن کار از تعداد انگشت‌های دست بیشتر نیستند. کسی که اصول را بفهمد، می‌تواند با موفقیت روش خودش را انتخاب کند. کسی که روش‌ها را تست می‌کند و اصول را نادیده می‌گیرد، قرار است حسابی به مشکل بخورد.  - رالف والدو امرسونضروریات در یک نگاهاول بیایید یک نگاه کلی به این رزومه بیندازیم:۱.  خلاصه اما مفید مسئولان استخدام نمی‌توانند تا شب بنشینند و رزومه شما را بخوانند. به طور میانگین، هر رزومه کمتر از ۶ ثانیه توسط مسئولان استخدام بررسی می‌شود! پس رزومه‌تان را مختصر و مفید نگه دارید.۲. ثابت بودن دیزاین و فونت در همه بخش‌هامطمئن شوید که همه بخش‌ها ظاهر مشابهی دارند. تغییر ندادن دیزاین، خواندن رزومه را آسان‌تر می‌کند. هرچه خواناتر‌ بهتر!بخش‌های رزومهحالا بیایید تک‌تک قسمت‌های این رزومه را با هم بررسی کنیم:۱. من کی‌ام؟بیایید از ساده‌ترین بخش شروع کنیم؛ یعنی اسم‌تان. اسم‌تان را در بالای رزومه‌تان بنویسید، یک فونت راحت‌خوان برایش بگذارید، سایزش را بزرگ کنید، و رنگی برایش بگذارید که به راحتی قابل خواندن باشد.نیازی نیست رنگ‌های عجیب و غریب بگذارید یا دنبال فونت‌های خاص بگردید. یک فونت ساده و خوانا بهترین انتخابی است که می‌توانید داشته باشید. هدف شما این نیست که مسئول استخدام را با شوک ناشی از رنگ‌های جیغ فراری بدهید؛ بلکه صرفا قرار است کاری کنید که او بتواند در اولین نگاه و به راحتی اسم‌تان را بخواند. می‌خواهید کاملا یادش بماند که شما کی هستید. هرچقدر مسئول استخدام کمتر برای خواندن رزومه به زحمت بیفتد، آدم خوشحال‌تری خواهد بود. و یک آدم خوشحال بیشتر ممکن است که از شما برای مصاحبه دعوت کند!اگر از رزومه‌‌سازهای آنلاین استفاده کنید، نگرانی انتخاب رنگ و فونت را نخواهید داشت؛ کل کاری که باید بکنید این است که اطلاعاتتان را در فرم‌های مربوطه وارد کنید. رزومه‌ساز خودش به طور خودکار همه چیز را در یک قالب ساده و تمیز جا می‌دهد.خلاصه: کاری کنید که مسئول استخدام برای پیدا کردن و خواندن اسم شما حتی به یک ذره زحمت هم نیفتد!۲. اطلاعات تماسپیدا کردن اطلاعات تماس شما باید همانقدر راحت باشد که پیدا کردن اسمتان. این نکته خیلی مهم است! هر چیزی را هم که اشتباه کردید، این یک قلم را نباید اشتباه کنید! اگر شماره‌ یا ایمیلیتان را اشتباه بنویسید، طرف چطوری قرار است با شما تماس بگیرد؟ آن وقت روزها و ماه‌ها در انتظار جواب درخواست‌هایتان پیر می‌شوید و هزاران بار به لیاقت و مهارت خودتان شک می‌کنید، بدون این که بفهمید اصلا مشکل از یک جای دیگر بوده است.برای این که بیشتر خودتان را معرفی کنید، می‌توانید اکانت استک‌اورفلو، گیت‌هاب، بیت‌باکت و لینکدین‌تان را هم اضافه کنید؛ مثلا می‌توانید لوگوی هرکدام را بگذارید و آن را به صفحه مورد نظر لینک کنید تا رزومه‌تان زیادی شوغ نشود.خلاصه: اطلاعات تماستان را با دقت بنویسید، چون اگر اشتباه کنید هیچ‌کس قرار نیست با شما تماس بگیرد.۳. سابقه کاریقالب پیشنهادی رزومه برای برنامه‌نویس‌هاوقتی آدم دانشجو است و هیچ‌وقت در عمرش سر کار نرفته، با خودش فکر می‌کند که هیچ شرکتی قرار نیست حتی نیم‌نگاهی به رزومه‌اش بیندازد. نترسید، یادتان باشد که این رزومه‌ مال سال آخر من در دانشگاه است. من این فرصت را داشتم که در کارآموزی‌های تابستانی کمی تجربه کسب کنم، اما لازم نیست حتما چنین چیزی در چنته داشته باشید تا مصاحبه بگیرید. اگر به این نتیجه رسیدید که خیلی چیز مرتبطی برای گذاشتن در این قسمت ندارید، می‌توانید مستقیم بروید سراغ بخش «پروژه‌های شخصی» و آنجا جولان بدهید.اگر سابقه کار دارید، خوش به حال‌تان! اما یادتان باشد که هر سابقه کاری را نباید در رزومه گذاشت. اگر دنبال کار برنامه‌نویسی یا مهندسی نرم‌افزار می‌گردید، فقط شغل‌هایی را ذکر کنید که مهارت‌های لازم برای انجام آن‌ها، به مهارت‌های لازم برای این جایگاه شغلی ربط داشته باشند. متاسفانه، توانایی شما در صندوق‌داری یا سرو کردن غذا هیچ دلیلی بر این که مهندس نرم‌افزار خوبی خواهید شد، نیست.مسئولین استخدام دنبال کارجویانی می‌گردند که مجموعه مهارت‌های (Skill set) لازم برای آن شغل به‌خصوص را داشته باشند. هر چیز غیرمرتبطی که در رزومه ذکر شود، فقط باعث گمراهی است و وقت مسئول استخدام را بی‌خودی می‌گیرد. پس فقط تجارب کاری‌ای را ذکر کنید که به هر نوعی به جایگاه شغلی‌ای که دنبالش هستید ربط داشته باشند.خلاصه: فقط سوابق شغلی مهم و مرتبط را بنویسید. اگر سابقه شغلی ندارید، مهم نیست؛ بخش «پروژه‌های شخصی» نجات‌بخش شماست!۴. توضیحات شغل‌های پیشیننمونه سابقه‌های برنامه‌نویسی در رزومهاین بخش یکی از سخت‌ترین بخش‌های رزومه‌ است. صرف گفتن اسم و رسم شرکتی که آنجا کار کردید خیلی به درد کسی نمی‌خورد؛ اصل قضیه این است که بگویید آنجا چه کار کردید. از آن مهم‌تر، باید این کارها را طوری توضیح بدهید که خواننده بفهمد شما در آن شرکت آدم تاثیرگذاری بوده‌اید و نقش مهمی در پیشرفت شرکت داشته‌اید. باید نشان بدهید که نه تنها از پس شغلی که برایش اپلای کرده‌اید برمی‌آیید، که آن را خیلی هم خوب انجام می‌دهید. قرار است چیزی بنویسید که مسئول استخدام تا آن را خواند با خودش بگوید «این آدم همون چیزهایی رو بلده که ما می‌خوایم! این آدم تو پیشرفت شرکت قبلیش نقش داشته. این کسیه که ارزش مصاحبه و حتی همکاری رو داره!»من می‌خواستم موفقیت‌های گذشته‌ام – هرچند محدود – را به بهترین شکل ممکن در رزومه‌ام به نمایش بگذارم. برای این کار، از یک فرمول عالی استفاده کردم که لازلو باک (Laszlo Bock)، مدیر ارشد سابق منابع انسانی گوگل، ساخته است:«انجام کار x، به مقدار y، از طریق z.»من این فرمول را تا می‌توانستم در رزومه‌ام استفاده کردم. اگر نگاه کنید، می‌بینید که عملا همه توضیحات شغل‌ها و پروژه‌های من یک مدلی از همین فرمول هستند. (مشخصه که زیادی عاشق این فرمولم؟)مثلا این یکی را ببینید:بهبود هشت درصدی عمر باتری دستگاه، با اضافه کردن سنسور سوخت‌سنج و ایجاد وضعیت ذخیره باتریانجام x – ترکیب سنسور سوخت‌سنج و ایجاد وضعیت حفظ باتریبه مقدار y – 8%از طریق z – بهبود عمر باتری دستگاهآن بخش x را به هزار و یک روش می‌شود بیان کرد. مثلا من یک بانک واژگان برایتان جمع کردم که کلمات خیلی بدردبخوری برای توصیف این قسمت دارد:کلمات پیشنهادی برای استفاده در توضیحات سوابق کاراین هم یک سری نمونه‌جمله که می‌توانید با پرکردن جاهای خالی‌شان، جملات مناسبی برای رزومه خودتان بسازید:کاهش ___ درصدی ____ از طریق ______طراحی مجدد _____ به منظور _______پیاده سازی ______ به اندازه _____ با هدف ______بهبود ____ درصدی _____ با یکی کردن ______استفاده از _____ برای ساختن _____ و رسیدن به ________ایجاد ________ با اضافه کردن ______خلاصه: از فرمول «انجام کار x، به مقدار y از طریق z» برای نشان دادن موفقیت‌هایتان در شغل‌های قبلی استفاده کنید. این موثرترین و واضح ترین راه برای نشان دادن میزان اثرگذار بودن خودتان به مسئولین استخدام و مدیران است.۵. تکنولوژی‌هاتکنولوژی‌های برنامه‌نویسی در رزومهمن بعد از این که توضیحات هرکدام از سوابق کاری‌ام را دادم، زیرش می‌نویسم که از چه تکنولوژی‌هایی در آن کار استفاده کرده‌ام. اینطوری خواننده می‌تواند با یک نگاه بفهمد چه چیزهایی بلدم، و اگر حوصله خواندن توضیحاتم برای سوابق کار را نداشت، با همین تکنولوژی‌ها هم می‌تواند برداشتی کلی از توانایی‌هایم به دست بیاورد. من همین تکنیک را برای بخش پروژه‌ها هم پیاده کرده‌ام.وقتی لیست مفصل‌تر تکنولوژی‌ها را کنار سوابق کار و پروژه‌های مرتبط به آنها می‌آورم، رزومه‌ام یک مزیت دیگر هم پیدا می‌کند: می‌توانم بخش «مهارت‌ها» در آخر صفحه را هم مختصر و مفیدتر بکنم و فقط لیست زبان‌های برنامه‌نویسی را آنجا بیاورم. به این ترتیب اگر مسئول استخدام دنبال زبان خاصی باشد، خیلی راحت می‌تواند بفهمد که من چیزی از آن می‌دانم یا نه.خلاصه: اسم تکنولوژی‌هایی که با آنها کار کرده‌اید را در کنار سوابق کاری و پروژه‌هایتان بیاورید. اینطوری کار مسئول استخدام را برای شناخت تجربه و دانش‌تان ساده‌تر می‌کنید.۶. پروژه‌های شخصیپروژه‌های گیت‌هاب در رزومهاگر دنبال کار مهندسی کامپیوتر هستید، این بخش را قطعا، باید، حتما در رزومه‌تان داشته باشید! حاضرم پلاکارد دستم بگیرم و این را در کوچه و خیابان فریاد کنم: پروژه‌های فردی‌ مهم‌ترین بخش رزومه شما هستند، بخصوص اگر هیچ سابقه کاری‌ای نداشته باشید!اصلا مهم نیست چه چیزی ساخته باشید؛ چیزی که پروژه‌های شخصی به مسئول استخدام می‌گویند این است: «این آدم واقعا برنامه‌نویسی را دوست دارد. این آدم آنقدر برنامه‌نویسی را دوست دارد که حاضر بوده از تکالیف اجباری دانشگاه فراتر برود و فقط محض دل خودش کد بزند.»کی دوست ندارد در موردش اینطوری فکر کنند؟ این که آدم بدون هیچ‌گونه اجبار بیرونی برود و فقط چون یک پروژه‌ای را دوست دارد روی آن کار کند، واقعا قابل تحسین است. این کار نشان می‌دهد که شما از صمیم قلب دوست دارید در برنامه‌نویسی پیشرفت کنید، بیشتر یاد بگیرید، و از این که بیشتر از دیگران روی این کار انرژی بگذارید، نمی‌ترسید. در ثانی، با آوردن این پروژه‌ها در رزومه‌تان عملا دارید ابتکار عمل و ایده‌های خودتان را هم به مسئولین استخدام نشان می‌دهید.اگر تا به حال چیزی را محض دل خودتان نساخته‌اید، همین حالا شروع کنید. پروژه شخصی می‌تواند هرچیزی باشد: اسکریپت پایتون، برنامه جاوا، صفحه وبسایت، اپلیکیشن موبایل و هزار جور چیز دیگر. فایده آنها فقط برای رزومه نیست؛ بلکه با انجام دادن آن‌ها مهارت‌هایی به دست می‌آورید که در مشاغل دنیای واقعی هم به دردتان می‌خورند. در این پروژه‌ها آدم با چیزهایی کار می‌کند که در دانشگاه خیلی با آنها روبرو نشده، اما در محیط کار مرتبا از آنها استفاده خواهد کرد: مثل فریم‌ورک‌ها/کتابخانه‌های استاندارد، یادگرفتن توسعه وب فول‌استک، ساخت اپلیکیشن موبایل، درست کردن یک محیط توسعه، یا برنامه‌نویسی بهینه با ویم (Vim).اپ آیفون بسازید، اپ وب بسازید، اصلا هر اپی! واقعا مهم نیست چه چیزی می‌سازید؛ فقط باید یک چیزی بسازید. آدم می‌تواند فقط در دو روز آخر هفته یک پروژه جون‌دار و اساسی را تمام کند. این یعنی فقط با سه یا چهار تا آخر هفته کار کردن روی پروژه‌های شخصی، می‌توانید رزومه‌تان را از حالت «اِی، بدی نیست» به حالت «عالیه!» برسانید. جدی می‌گویم، خیلی‌ها را دیده‌ام که دقیقا همین کار را انجام داده‌اند.- گایل مک‌داول، از مهندسین سابق گوگل و نویسنده کتاب «شکستن قفل مصاحبه‌های برنامه‌نویسی»اگر شرکت بخصوصی هست که واقعا دلتان می‌خواهد آن‌جا کار کنید، یکی از بهترین راه‌ها برای متمایز کردن خودتان در انبوه رزومه‌ها این است: یک پروژه شخصی‌ انجام بدهید که مستقیما به کاری که می‌خواهید برایش اپلای کنید ربط داشته باشد.من کارآموزی‌ام در اتودسک (Autodesk) را با گذراندن یک دوره تعاملی رایگان در یودسیتی (Udacity) بدست آوردم. این دوره در مورد گرافیک کامپیوتری تعاملی (Interactive Computer Graphics) بود، و به من یاد داد که چطور از کتابخانه three.js جاوا اسکریپت استفاده کنم. به طور کاملا اتفاقی، اتودسک هم همان موقع دنبال یک کارآموز مهندسی نرم‌افزار بود که فول‌استک وبسایت و three.js بلد باشد؛ یعنی من!اما یادتان باشد: این استراتژی بی‌عیب و نقص نیست. این کار فقط برای شرکت‌هایی مثل اتودسک جواب می‌دهد که دنبال یک چیز مشخص هستند؛ نه شرکت‌هایی چون گوگل، فیس‌بوک، و مایکروسافت که کارآموزی‌هایشان برای «مهندسی نرم‌افزار به طور عام» است. اگر تازه دارید وارد بازار کار مهندسی نرم‌افزار می‌شوید، بهتر است اول به همین شکل عام و کلی کار کنید و یواش یواش با شاخه‌های تخصصی‌تر علوم کامپیوتر آشنا شوید. اما بهرحال اگر شرکت به‌خصوصی هست که واقعا دنبال کار در آنجا هستید، این روش ارزش امتحان کردن را دارد.یک توصیه دیگر: یک وبسایت شخصی بسازید که همه پروژه‌های شخصی‌تان را به دنیا نمایش دهد. با همین کار کوچک، می‌توانید اطلاعاتی خیلی بیشتر از یک صفحه را در رزومه یک صفحه‌ای‌تان جا بدهید.خلاصه: پروژه‌های شخصی حیاتی‌اند. اگر هنوز هیچ پروژه‌ شخصی‌ای در چنته ندارید، همین حالا یکی را شروع کنید! هیچ چیز از دست نمی‌دهید، اما کلی چیز به دست خواهید آورد.۷. تحصیلاترشته و دانشگاهی که در آن درس خوانده‌اید را هم در رزومه بنویسید!دانشگاه رفتن موفقیت بزرگی است؛ بخصوص اگر در دانشگاه‌های تاپ درس خوانده باشید. پس از جا دادن آن در رزومه‌تان نترسید. وقتی این قسمت را در رزومه‌تان می‌گذارید، در واقع دارید به مسئول استخدام می‌گویید که به یادگیری و تحصیل علاقه دارید؛ حتی اگر از رشته‌ای کاملا بی‌ارتباط به علوم کامپیوتر آمده باشید. این پوئن خیلی مثبتی است، چون تکنولوژی مدام در حال تغییر است و اگر کسی حال و حوصله یادگیری نداشته باشد، پیشرفتی هم در کارش نخواهد داشت. در ضمن، آن همه سال بیدار شدن از ۸ صبح و دوره‌ کردن‌های شب امتحانی تا ۵ صبح بالاخره باید به یک دردی بخورد! پس به دانشگاه رفتن‌تان افتخار کنید و آن را در رزومه‌تان بگذارید.حتما واحدهای درسی مرتبط به جایگاه شغلی مد نظرتان را هم بنویسید. قرار نیست یک عالمه اطلاعات به خوردِ مسئول استخدام بدهیم، بلکه هدف این است که تصمیم‌گیری را در مورد مناسب بودن‌مان برای جایگاه شغلی برایش راحت‌تر کنیم. همانطور که گفتم، مسئولی که زحمتش کمتر باشد، بیشتر ممکن است که از شما برای مصاحبه دعوت کند.خلاصه: بنویسید کجا تحصیل کرده‌اید. اگر درس مرتبطی پاس کرده اید، به آن هم اشاره کنید.۸. مهارت‌هاخود عنوان گویای همه چیز است. این بخش رزومه‌تان را مختصر و مفید و ساده بسازید. زیادی ریز و تخصصی نشوید. در این قسمت می‌توانید همه مهارت‌های مرتبطی که می‌خواهید مسئول استخدام از آن‌ها آگاه باشد را بنویسید. این مهارت‌ها هم می‌توانند شامل مهارت‌های نرم باشند (مثل توانایی کار گروهی) و هم مهارت‌های تخصصی.برای مهارت‌های تخصصی، یک تکنیک این است که سراغ آگهی شغلی شرکت مورد نظر بروید و توضیحاتش را چک کنید. کلمات تخصصی‌ای که در این توضیحات به کار رفته، بهترین راهنمای شما برای نوشتن مهارت‌هایتان هستند. ببینید چه چیزهایی از آن لیست را بلدید و آن کلمات تخصصی را در لیست مهارت‌ها بیاورید. وقتی مسئول استخدام ببیند که شما با شغلی که دنبالش هستند مطابقت دارید، بیشتر علاقه‌مند خواهد بود که شما را به مصاحبه دعوت کند.فقط حواستان باشد، قرار نیست هر کلمه‌ای که در آگهی شغلی آمده را اینجا لیست کنید! یادتان باشد که ما نمی‌خواهیم در رزومه دروغ بگوییم. شاید با این کار مصاحبه را بگیرید، اما اگر آنجا از شما در مورد این مهارت‌هایی که ادعا کرده‌اید دارید بپرسند، حسابی گیر خواهید افتاد. بعد از این که به مصاحبه دعوت شدید، می‌توانید راهنمای کوئرا برای مصاحبه فنی موفق را بخوانید تا از پسِ این مرحله هم به خوبی بر بیایید.فراموش نکنید که هیچ برنامه‌نویسی همه زبان‌ها و تکنولوژی‌هایی که یاد گرفته را هر روز تمرین نمی‌کند؛ بنابراین می‌توانید اطلاعاتی در مورد میزان مهارت‌تان هم اضافه کنید تا نشان بدهید که با چه زبان‌هایی آشنایی دارید، و در کدام‌ها مسلط و وارد هستید. این میزان را می‌شود در قالب درصد یا کلمات مبتدی-متوسط-پیشرفته نشان داد. یک راه دیگر هم این است که بگویید چند سال است دارید با آن زبان کد می‌زنید.خلاصه: وقتی دنبال شغل بخصوصی می‌گردید، توضیحات آگهی شغلی را بخوانید و از کلمات تخصصی مهم ذکر شده در آن در رزومه‌تان استفاده کنید تا شانس‌تان برای گرفتن مصاحبه بیشتر شود.نکات پایانیوقتی رزومه‌تان را می‌نویسید، یادتان نرود که خودتان باشید. رزومه شما، لیستی از موفقیت‌ها، توانایی‌ها، و علایق شخص شما است، نه آن چیزی که فکر می‌کنید مسئول استخدام می‌خواهد باشید. کل هدف رزومه این است که حقیقت خودتان را به آراسته‌ترین شکل ممکن نشان بدهید. فقط با یاد گرفتن همین کار، یعنی نشان دادن جذابیت‌های شخصیت واقعی‌تان، ارزش رزومه‌تان چند برابر خواهد شد. حالا اگر دریافت این اطلاعات در مورد خودتان را برای مخاطب (مسئول استخدام) آسان کنید، آن وقت دیگر نورِ علی نور می‌شود. طراحی شیک و ساده صفحه، مختصر و مفید نوشتن، و ارائه کردن اطلاعات به شکل کلمه کلیدی همه و همه برای این هستند که خواننده راحت‌تر رزومه‌تان را بخواند.آیا شما هم تکنیک و توصیه‌ای برای بهتر کردن رزومه سراغ دارید؟ ایده‌هایتان را در کامنت‌ها مطرح کنید!? اغلب توصیه‌های این مطلب به طور خودکار در رزومه‌ساز کوئرا رعایت می‌شوند! با عضویت در کوئرا و تکمیل کردن پروفایل‌تان، رزومه ایده‌آل‌تان را بسازید و برای ده‌ها شغل مهندسی نرم‌افزار در فرصت‌های شغلی کوئرا اپلای کنید!ترجمه و تلخیص از: &quot;How to write a killer Software Engineering résumé&quot;, by Terrence Kuo @ FreeCodeCampکوئرامگ مجله‌ای تخصصی برای توسعه‌دهندگان است که هر هفته با مطلب‌هایی در زمینه تکنولوژی، رشد فردی و آینده برنامه‌نویسی به‌روزرسانی می‌شود. برای اطلاع از آخرین مطلب‌های ما، می‌توانید توئیتر یا کانال تلگرام ما را دنبال کنید.</description>
                <category>کوئرامگ | مجله تخصصی برنامه‌نویسان</category>
                <author>مریم مقدس برهان</author>
                <pubDate>Sat, 26 Oct 2019 21:44:36 +0330</pubDate>
            </item>
                    <item>
                <title>برگزاری اولین سری رویداد SkillUp با موضوع یادگیری ماشین</title>
                <link>https://virgool.io/Quera-Mag/%D8%A8%D8%B1%DA%AF%D8%B2%D8%A7%D8%B1%DB%8C-%D8%A7%D9%88%D9%84%DB%8C%D9%86-%D8%B3%D8%B1%DB%8C-%D8%A7%D8%B2-%D8%B1%D9%88%DB%8C%D8%AF%D8%A7%D8%AF-skillup-%D8%A8%D8%A7-%D9%85%D9%88%D8%B6%D9%88%D8%B9-%DB%8C%D8%A7%D8%AF%DA%AF%DB%8C%D8%B1%DB%8C-%D9%85%D8%A7%D8%B4%DB%8C%D9%86-v2z1rlcdntjn</link>
                <description>رویداد SkillUp چیست؟ رویداد SkillUp سری رویدادهایی است که به شکل فصلی و با هدف انتقال تجربه در حوزه‌های روز دنیای تکنولوژی برگزار می‌شود. در هر رویداد با دعوت از متخصصان یک حوزه پیشرو در دنیای تکنولوژی، نحوه ورود به آن حوزه، کاربردهای آن در کسب‌وکارهای ایران و جهان و چشم‌اندازهای آینده و رشد آن حوزه را مورد بررسی قرار می‌دهیم. پنج‌شنبه، ۲۵ مهرماه ۹۸، اولین رویداد از سری رویدادهای SkillUp، که کوئرا اولین سری این رویداد را با همکاری انجمن علمی دانشکده کامپیوتر و دانشگاه شریف برگزار کرد.موضوع اولین سری SkillUp: یادگیری ماشینهیچ کس نمی‌تواند آینده دنیای فناوری را با قاطعیت پیش‌بینی کند؛ اما شکی نیست که جبهه نوآوری در سال‌های آینده چهار فرمانده اصلی در خط مقدم خود خواهد داشت: رایانش ابری، اینترنت اشیا، علم داده و از همه مهم‌تر یادگیری ماشین!در اولین رویداد از سری رویدادهای SkillUp به سراغ تکنولوژی هوش مصنوعی و یادگیری ماشین رفته‌ایم. بررسی جایگاه حال و آینده هوش مصنوعی، انتقال تجربه افراد خبره در این زمینه، به همراه بیان چالش‌ها و کاربردهای واقعی یادگیری ماشین در کسب وکارها درکنار بررسی جایگاه شغلی و درآمدی این حوزه بخشی از دستاوردهای این رویداد می‌باشد.دانشگاه شریف در این رویداد میزبان ۲۰۰ نفر از علاقه‌مندان حوزه هوش مصنوعی و یادگیری ماشین بود.این رویداد شامل ۳ بخش اصلی بود:سخنرانی‌های متخصصان حوزه یادگیری ماشین با حضور:دکتر محمود کریمیان، مدیرعامل دیدئودکتر علی اوصیا، دانشمند داده در پوشهدکتر مهرداد فرج‌تبار، محقق هوش مصنوعی در Googleجادی میرمیرانی، هکر و پادکستر آزادی کیبرد۲. پنل گفت‌وگو درباره کاربردهای هوش مصنوعی در شرکت‌های ایرانی با حضور:دکتر محمود کریمیان، مدیرعامل دیدئورضا مرادی، توسعه‌دهنده بک‌اند در سخنمحسن شجاعی، مدیر فنی پوشههادی راسخ، مدیرعامل سلام‌سینما۳. کارگاه عملی برای شروع کار در زمینه یادگیری ماشین با تدریس امیرحسین روزبهانی مهندس داده در کافه‌بازارسخنرانی اول : حال و آینده هوش مصنوعیدکتر کریمیان در این سخنرانی میگوید: در هوش مصنوعی، انسان‌ها سعی دارند هوش طبیعی را با استفاده از ماشین شبیه سازی کنند یا به عبارتی برای ماشین‌ها شرایطی را فراهم کنند که بتوانند یادگیری داشته باشند. در این بین به تفاوت بین هوش‌مصنوعی و یادگیری‌ماشین اشاره میکند که یادگیری ماشین زیرمجموعه‌ای از هوش مصنوعی است. درواقع هوش مصنوعی یعنی کامپیوتری که به‌نحوی رفتار انسان را تقلید کند و یادگیری ماشین شامل تکنیک‌هایی می‌شود که کامپیوتر را قادر می‌سازد تا خودش داده را دریابد و از چیزها سردربیاورد و برنامه‌های کاربردی AI را ارائه دهد. به دلیل پیشرفت تکنولوژی هوش‌مصنوعی در دنیا، احتمال از بین رفتن یک سری مشاغل وجود دارد که عبارت اند از:۱- رانندگان ماشین‌ با جایگزین شدن خودروهای خودران ۲- کشاورزان با استفاده از پهپادها و تصاویر ماهواره‌ای، برای انجام دادن کارها۳- رسانه‌های چاپی مثل روزنامه‌ها با ظهور شبکه‌های اجتماعی۴- صندوقدارن فروشگاه‌ با پدید آمدن فناوری‌هایی مانند Amazon Go و ...  خلاصه‌ای از ویدئوی سخنرانی دکتر محمود کریمیان: https://www.aparat.com/v/JQ4ND مشاغلی که در حوزه هوش مصنوعی پرطرفدارترند:۱-مهندس یادگیری ماشین (machine learning engineer)۲-متخصص داده (data scientist)۳-متخصص پژوهش (research scientist)۴-مهندس تحقیق و توسعه (R&amp;D engineer)۵-توسعه‌دهنده‌ی هوش تجاری (BI developer)۶-مهندس بینایی ماشین (computer vision engineer)برای ورود به دنیای هوش مصنوعی چه مهارت‌هایی نیاز داریم؟دانش برنامه‌نویسی و دانش ریاضیات و آمار و احتمال از ملزومات ورود به این حوزه می‌باشد که میتوان با استفاده از دوره‌های آنلاین مختلف و شرکت در هکاتون‌ها و دورهمی‌ها و...وارد این حوزه شد.سخنرانی دوم: پایپ‌لاین یادگیری ماشین در عملدر ارائه دوم دکتر علی اوصیا به جنبه‌های تئوری و عملی یادگیری ماشین اشاره کرد. فرض کنید میخواهیم تابعی را تخمین بزنیم سه مرحله وجود دارد:در ابتدای کار باید کلاس و فضا را مشخص کنیم سپس به مشخص کردن روش ارزیابی بپردازیمو در نهایت الگوریتم بهینه‌سازی برای سرچ در فضای مد نظر را پیدا کنیم...از چالش‌هایی که در به کارگیری یادگیری ماشین داریم میتوان به کافی نبودن داده اشاره کرد...خوب است که داده با یک دانش(knowledge) همراه باشد. که این دانش ممکن است به صورت ضمنی وارد مدل شود یا به واسطه فرض‌هایی که در نظر می‌گیریم. مثلا ممکن است بدانیم توزیع داده ثابت است؛ این یک فرض است (در واقع همان دانشی است که به مدل تزریق می‌کنیم) و می‌توانیم از آن استفاده کنیم.در خیلی از مواقع، مدل ما ممکن است بر روی training data خوب جواب دهد اما بر روی test data جواب ندهد. به این اتفاق overfitting می‌گویند. روش‌های مختلفی برای آنالیز این اتفاق وجود دارند. چالش دیگری که باید مراقب آن باشیم، این است که شهودهای ما در فضاهای مختلف الزاما با هم یکی نیستند. مثلا در حوزه‌ی نرمال در یک یا دو بعد، نمونه‌ها حول میانگین قرار می‌گیرند؛ اما در ابعاد بالا این موضوع صادق نیست.مهندسی ویژگی چیست؟اساسا همه الگوریتم های یادگیری ماشین برای ایجاد داده‌های خروجی از یک سری داده ورودی استفاده میکنند. این داده های ورودی شامل یک سری ویژگی میباشند که ساختار آنها معمولا در قالب ستونهایی پدیدار میشود. الگوریتم ها برای اینکه بدرستی کار کنند، نیاز به این ویژگی ها همراه با برخی مشخصات دیگر دارند.خلاصه‌ای از سخنرانی دکتر علی اوصیا: https://www.aparat.com/v/T7m5I اهداف مهندسی ویژگیبطور کلی میتوان دو هدف برای مهندسی ویژگی در نظر گرفت:آماده سازی مجموعه داده‌های ورودی مناسب که با نیازهای الگوریتم یادگیری ماشین سازگارند. بهبود عملکرد مدلهای یادگیری ماشینبرای این کار در عمل بهتر است از الگوریتمی ساده ولی حجم دیتای زیاد استفاده کنید. در عمل، مثلا می‌خواهیم مدلی را خیلی سریع train کنیم زیرا توزیع آن با زمان تغییر می‌کند. در چنین شرایطی، مدل‌های پیچیده سریع نیستند. پس بهتر است مدلی ساده پیدا کنیم و بعد سعی کنیم آن را بهبود ببخشیم. در خیلی از مسابقات یادگیری ماشین، مدل‌های ساخته‌شده توسط تیم‌های برتر را با یکدیگر ترکیب می‌کنند و از این طریق، به مدلی بهتر دست می‌یابند.دکتر علی اوصیا، در بخش دوم سخنرانی خود نیز استایلی برای کد زدن در ژوپیتر نوت‌بوک ارائه کرد. این نوت‌بوک را می‌توانید از گیت‌هاب شرکت پوشه دریافت کنید.سخنرانی سوم: تهدیدها و فرصت‌های هوش مصنوعی جادی میرمیرانی در این باره گفت، هوش مصنوعی در همه جا وارد شده است. ما ممکن است مستقیم کار هوش مصنوعی نکنیم، اما به طور غیر مستقیم از آن استفاده می‌کنیم. مثلا در شرکت‌های مخابراتی، قبل از آن‌که مشتری بسیار ناراضی شود و به آن شرکت زنگ بزند، با تکنیک‌های یادگیری ماشین، نارضایتی او را پیش‌بینی می‌کنیم. مثلا مشتری ممکن است در یک الگوی عصبانی، مودم خود را خاموش و روشن کند. و با استفاده از این مورد ما میتوانیم قبل از اینکه برای مشتری نارضایتی بیشتر پیش نیامده جلویش را بگیریم...خلاصه‌ای از سخنرانی جادی میرمیرانی: https://www.aparat.com/v/YZ7pt بزرگ‌ترین خطرات هوش مصنوعیبزرگ‌ترین خطر هوش مصنوعی آن است که دست گروهی می‌افتد که اول آن را کشف می‌کنند. این گروه، که intelligence explosion را کشف می‌کند، احتمالا قدرت خود را با بقیه تقسیم نمی‌کند. ما باید سعی کنیم تکنولوژی را به شکل دموکراتانه در اختیار همه قرار دهیم...سخنرانی چهارم: هوش مصنوعی در مقیاس گوگلدر سخنرانی که دکتر مهرداد فرج‌تبار به صورت اسکایپی داشت، اشاره شد به اینکه گوگل خودش را مسئول سازمان‌دهی اطلاعات موجود در جهان می‌داند و سعی می‌کند این اطلاعات را در دسترس عموم قرار دهد. دپارتمان AI گوگل نیز در همین راستا، راه‌های جدیدی برای انجام این ماموریت پیدا می‌کند.مدیران گوگل همواره درباره‌ی خطرات هوش مصنوعی نیز تذکر داده‌اند. خطراتی مانند رشد بی‌رویه‌ی هوش مصنوعی در مسائل نظامی یا مسائل مربوط به حریم خصوصی. گوگل برای پیشگیری از معایب AI، کارگروه‌هایی نیز تشکیل داده است. گوگل در همه‌ی زمینه‌ها، از جمله تحقیق و توسعه، سعی می‌کند در سراسر دنیا فعالیت داشته باشد و شعب متعددی نیز در سراسر جهان دارد. به طور کلی دپارتمان هوش مصنوعی گوگل سه هدف را دنبال می‌کند:تحقیق و پژوهش در زمینه‌های مرتبط با علوم کامپیوترارتقای محصولات گوگل با استفاده از هوش مصنوعیتوسعه ابزارها، راهکارها و فریم‌ورک‌هایی برای عموم در زمینه‌ی هوش مصنوعیبرخی از کاربردهای هوش مصنوعی در محصولات گوگلاز جمله کاربردهای هوش مصنوعی در گوگل میتوان به گوشی موبایل پیکسل اشاره کرد که این موبایل با استفاده از هوش مصنوعی، سعی می‌کند مصرف باتری را بهینه کند و حتی با استفاده از شبکه عصبی تصاویر پرتره با کیفیت بهتری را ثبت می‌کند.سرویس ترجمه‌ی همزمان گوگل که از حدود 5 سال پیش شروع به کار کرده نیز با استفاده از شبکه عصبی میتواند متن‌های تصویر را تشخیص دهد و ترجمه انجام میشود و به کاربر نمایش میدهد.سیستم عامل اندرویدی که استفاده میکنیم نیز با استفاده از هوش مصنوعی مصرف باتری را کاهش میدهد و میزان روشنایی صفحه‌ی نمایشگر را تنظیم کرده و برنامه‌هایی که باتری بیشتری مصرف میکنند را مدیریت میکند.گوگل فریمورکی به نام Tensorflow را به عنوان یک فریم‌ورک هوش مصنوعی و یادگیری ماشین ارائه داده و این فریمورک را اوپن سورس کرده تا به پیشرفت و توسعه آن کمک کند. با استفاده از تنسورفلو میتوان به سرویس ابری گوگل متصل شدو از سرویس‌های مختلف آن مانند تشخیص صدا، تبدیل متن به صوت و صوت به متن، ماشین‌های پیشنهاددهنده و … استفاده کرد.پنل گفت‌وگو جایگاه و کاربردهای هوش مصنوعی و یادگیری ماشیندر این پنل از ۴ نفر از شرکت‌های مطرحی که از هوش مصنوعی و یادگیری ماشین استفاده می‌کنند دعوت شده بود: رضا مرادی، توسعه‎‌دهنده بک‌اند در شرکت سخن، محسن شجاعی مدیر فنی شرکت پوشه، هادی راسخ مدیر عامل شرکت سلام سینما و محمود کریمیان مدیر عامل دیدئو به صحبت حول این محور پرداختند.در ابتدا همه سخنران‌ها در مورد کاربردی که هوش مصنوعی در کسب و کارشان داشته صحبت کردند و استفاده‌ای که از این تکنولوژی در کارشان دارد را به طور جزئی شرح دادند و سپس به موضوعاتی در خصوص کارآفرینی هوش مصنوعی در ایران و خارج ایران پرداختند و در آخر برای دوستانی که میخواهند وارد این حوزه شوند از تجربیات خود و ترندهای روز تکنولوژی صحبت کردند که بخش‌هایی از این ویدئو را میتوان مشاهده کنید: https://www.aparat.com/v/iTWje کوئرامگ مجله‌ی تخصصی کوئرا برای توسعه‌دهندگان است که هر هفته با مطلب‌هایی در زمینه تکنولوژی، رشد فردی و آینده برنامه‌نویسی به‌روزرسانی می‌شود. برای اطلاع از آخرین مطلب‌های ما، می‌توانید توئیتر یا کانال تلگرام ما را دنبال کنید.</description>
                <category>کوئرامگ | مجله تخصصی برنامه‌نویسان</category>
                <author>فاطمه عامل</author>
                <pubDate>Thu, 24 Oct 2019 16:16:58 +0330</pubDate>
            </item>
                    <item>
                <title>یادگیری ماشین: خواندن دستخط بدون یادگیری عمیق</title>
                <link>https://virgool.io/Quera-Mag/%DB%8C%D8%A7%D8%AF%DA%AF%DB%8C%D8%B1%DB%8C-%D9%85%D8%A7%D8%B4%DB%8C%D9%86-%D8%A7%D9%84%DA%AF%D9%88%D8%B1%DB%8C%D8%AA%D9%85%DB%8C-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%AA%D8%B4%D8%AE%DB%8C%D8%B5-%D8%A7%D8%B9%D8%AF%D8%A7%D8%AF-%D8%AF%D8%B1-%D8%AA%D8%B5%D9%88%DB%8C%D8%B1-cy9vguvvpxnt</link>
                <description>دسته‌بندی تصاویر (Image Classification) به فرآیندی در بینایی کامپیوتر گفته می‌شود که در آن تصاویر بر مبنای محتوایی که دارند طبقه‌بندی می‌شوند؛ به عنوان مثال یک الگوریتم دسته‌بندی تصاویر می‌تواند هدف‌ش این باشد که بودن یا نبودن انسان داخل یک تصویر را تشخیص دهد.یکی از مثال‌های جالب یادگیری ماشین، استفاده از دسته‌بندی تصاویر برای تشخیص اعداد در دست‌خط‌های افراد است. دیتابیس پرکاربرد MNIST برای این منظور می‌تواند بسیار مفید واقع شود: این داده شامل ۷۰هزار عکس ۲۸*۲۸ است که از اسکن کردن اعداد دستنویس توسط اداره آمار ایالات متحده آمریکا و دانش‌آموزان دبیرستانی آمریکایی به‌دست آمده است. این داده به صورت وسیعی برای توسعه و تست سیستم‌های پردازش تصویر و الگوریتم های یادگیری ماشین به کار رفته است. نمونه‌ای از داده‌های MNIST را در تصویر پایین مشاهده می‌کنید:نمونه‌هایی از داده MNIST که برای یادگیری ماشین استفاده می‌شود.جستجوی ساده‌ای در گوگل نشان می‌دهد که رایج‌ترین روش یادگیری ماشین برای دسته‌بندی این داده، استفاده از شبکه‌های عصبی پیچشی (Convolutional Neural Network) است که دسته‌ای از الگوریتم‌های یادگیری عمیق (Deep Learning) محسوب می‌شوند. اما ما در ادامه می‌خواهیم از روش متفاوت و جذاب استفاده کنیم که در عین حال دقت آن هم تا حد خوبی بالا است!تشخیص اعداد: روند کارابتدا شکل، قالب و حجم داده‌ها را بررسی می‌کنیم و ویژگی‌های مختلف آن را می‌سنجیم تا بتوانیم تصمیم بگیریم چه روشی برای یادگیری آن بهتر است.به دلیل اینکه مدل‌های پیچیده وقت بیشتری برای یادگیری و پردازش داده می‌گیرند و در صورت مشکل داشتن، رفع اشکال برای آنها بسیار سخت‌تر خواهد بود، سعی می‌کنیم تا ابتدا با یک مدل ساده شروع کنیم و مرحله به مرحله آن را پیچیده تر کنیم تا دقتی بهتر نسبت به دقت اولیه به دست آوریم. همچنین در پایان هر قسمت سعی می‌کنیم تا دقت مدل خود را بسنجیم.در پایان نیز با اینکه نمی‌توانیم به طور مستقیم دقت مدل را بسنجیم، سعی می‌کنیم تا تا حدسی از کارکرد مدل داشته باشیم.گام ۱: بررسی داده‌هاداده‌های مورد استفاده ما مربوط به مسابقه‌ای در سایت Kaggle بوده و می‌توانید آن‌ها را از اینجا دریافت کنید. داده‌ها به دو قسمت Train و Test تقسیم شده‌اند:داده‌های Train هم شامل داده‌های اصلی می‌شود (که به عنوان ورودی استفاده می‌شود) و هم خروجی مورد انتظار (که مدل ما باید بتواند پیش‌بینی کند) را در خود دارد. از داده‌های Train برای یادگیری اولیه استفاده می‌کنیم. داده‌های Test تنها بخش اول (داده‌های اصلی) را دارد و خروجی‌ها از آن حذف شده تا کاربران برای شرکت در مسابقه آن‌ها را به دست بیاورند و برای داوری ارسال کنند؛ چون داده Test نیز در قسمتی از روند مسئله به کار ما می‌آید آن را حذف نکرده‌ایم.یک عکس در داده‌های Kaggleداده Train جدولی شامل ۷۸۵ ستون و ۴۲۰۰۰ سطر است. هر سطر از داده در فایل‌های Train و Test نشان دهنده یک عکس ۲۸*۲۸ سیاه و سفید که پیکسل‌های آن مقداری بین ۰ و ۲۵۵ دارند و همه‌ی پیکسل‌های عکس در یک سطر از داده پشت هم قرار گرفته‌اند. در داده Train علاوه بر پیکسل های عکس ستون Label نیز وجود دارد که شامل عددی بین ۰ تا ۹ است که نشان میدهد در این عکس چه عددی نوشته شده است.train_df = pd.read_csv(&#039;train.csv&#039;)
test_df = pd.read_csv(&#039;test.csv&#039;)چند سطر اول از داده Trainبرای یادگیری بهتر مدل لازم است تا تعداد تقریباً یکسانی از هر کلاس داده وجود داشته باشد؛ که در اینجا به این معنی است که از هر عدد تعداد تقریباً یکسانی نمونه در داده‌های ما وجود داشته باشد. به وسیله کد زیر نمودار تعداد نمونه‌های موجود از هر کلاس را رسم می‌کنیم:fig = plt.figure()plt.hist(train_df[&#039;label&#039;],histtype=&#039;bar&#039;,rwidth=0.8)fig.suptitle(&#039;Class distribution in Data&#039;,fontsize=15)plt.xlabel(&#039;classes&#039;)plt.ylabel(&#039;count&#039;)خروجی این کد، نمودار زیر است که نشان می‌دهد تقریبا از هر کلاس داده ما تعداد یکسانی وجود دارد و نیاز به پیش‌پردازش اضافه نداریم:نمودار تعداد نمونه‌های موجود از هر دادهگام ۲: مدل پایهابتدا سعی می‌کنیم تا یک مدل ساده مانند درخت تصمیم را روی داده امتحان کنیم تا ببینیم بدون استفاده از مدل‌های پیچیده به چه دقتی می‌توانیم برسیم. پس از آن سعی می‌کنیم تا به وسیله تکنیک‌هایی این مدل را بهبود دهیم.ابتدا داده‌ها را به قسمت Train که برای آموزش مدل استفاده می‌شود و Validation که برای تخمین دقت مدل استفاده می‌شود تقسیم می‌کنیم. در واقع ما قسمت Validation را هنگام یادگیری از مدل پنهان می‌کنیم و پس از یادگیری جواب مدل برای این قسمت را با جواب درست مقایسه می‌کنیم تا دقت واقعی مدل را تخمین بزنیم.features = [col for col in train_df.columns if col.startswith(&#039;pixel&#039;)]
X_train, X_val, y_train, y_val = train_test_split(train_df[features], 
                                                  train_df[&#039;label&#039;], 
                                                  test_size=0.25)یکی از چیزهایی که باید به آن دقت کنیم جلوگیری از بیش‌برازش (Overfitting) است. Overfitting یعنی مدل ما بیش از حد مورد نیاز به داده‌هایی که برای Train در اختیارش گذاشته شده وابسته است. به عبارتی از داده‌های آموزشی، ویژگی‌هایی برای تصمیم‌گیری دریافت کرده که در اصل مهم نبوده‌اند. مدل پایه ما یک درخت تصمیم است که حداکثر عمق آن را ۱۰ تعیین کرده‌ایم تا روی داده‌ها Overfit نشود:clf = DecisionTreeClassifier(max_depth=10, random_state=seed)
clf.fit(X_train, y_train)برای اندازه گیری دقت مدل از تابع زیر استفاده می‌کنیم:def acc(y_true, y_pred):
    return round(accuracy_score(y_true, y_pred) * 100, 2)y_predict = clf.predict(X_val)
print(acc(y_val,y_predict))
print(acc(y_train,clf.predict(X_train)))کد بالا نشان می‌دهد مدل ساده ما روی داده Train دقت ٪۹۰.۸۶ و روی داده Validation دقت ٪۸۴.۵۸ را به ما می‌دهد. حال باید این مدل را بهبود دهیم.گام ۳: کاهش بعدداده ما برای مدل‌هایی مانند درخت تصمیم بعد بالایی دارد و علاوه بر احتمال زیاد Overfit روی داده احتمالاً محاسابات زیادی خواهد داشت. بنابراین ابتدا باید بعد آن را از ۷۸۴ بعد کاهش دهیم.برای کاهش بعد می‌توانیم از دو الگوریتم PCA و TSVD استفاده کنیم. به این خاطر که الگوریتم PCA تکنیک بهتری برای کاهش بعد داده‌های چگال(Dense) و TSVD تکنیک بهتری برای کاهش بعد داده‌های تُنُک (Sparse) است و داده‌های ما نیز تنک هستند از الگوریتم TSVD استفاده می‌کنیم و بعد داده را از ۷۸۴ بعد به ۵۰ بعد کاهش می‌دهیم.concat_df = pd.concat([train_df,test_df])
del concat_df[&#039;label&#039;]
tsvd = TruncatedSVD(n_components=50).fit_transform(concat_df)حال داده‌های با بعد پایین در متغیر TSVD با بعد (70000,50) موجود است و دوباره درخت تصمیم را با داده‌ی جدید که بعدش کاهش یافته می‌سازیم و دقت آن را اندازه می‌‌گیریم:X_train, X_val, y_train, y_val = train_test_split(tsvd[:42000], train_df[&#039;label&#039;], test_size=0.25, random_state=seed)
clf = DecisionTreeClassifier(max_depth=10, random_state=seed)
clf.fit(X_train, y_train)
print(acc(y_val,y_predict))
print(acc(y_train,clf.predict(X_train)))درخت تصمیم ساخته‌ شده با داده جدید روی Validation دقت ٪۸۴.۵۸ و روی Trainدقت ٪۸۵.۰۷ دارد. بنابراین می‌توان گفت این کاهش بُعد کمکی نکرده و دقت را ٪۵ نیز پایین آورده است. با این حال جلوتر خواهیم دید که با اضافه کردن TSNE به همین داده‌ها و با استفاده از همین مدل پایه پیشرفت محسوسی در دقت مدل ایجاد خواهد شد:tsne = TSNE(n_components=2)
transformed = tsne.fit_transform(tsvd)با استفاده از الگوریتم t-SNE مخلوط داده Train و Test را از ۵۰ بعد به ۲ بعد می‌بریم. t-SNE خاصیتی دارد که اگر داده ها در بعد بالا قابل دسته‌بندی باشند، پس از کاهش بعد نیز این قابلیت را تا حدودی حفظ می‌کنند. لازم به ذکر است به دلیل طبیعت نظارت‌نشده (Unsupervised) الگوریتم t-SNE با ورود مخلوط داده Train و Test به آن اشکالی ایجاد نمی‌شود.پس از استفاده از الگوریتم TSNE روی داده‌ها دوباره دو قسمت Train و Test را از هم جدا می‌کنیم.tsne_train = pd.DataFrame(transformed[:len(train_df)], columns=[&#039;component1&#039;, &#039;component2&#039;])
tsne_test = pd.DataFrame(transformed[len(train_df):], columns=[&#039;component1&#039;, &#039;component2&#039;])در کنار فشرده‌سازی داده و کاراتر کردن الگوریتم‌ها روی داده‌های دارای بُعد بالا، از الگوریتم t-SNE برای رسم نمودارهای مختلف نیز استفاده می‌شود. در اینجا نیز ما نمودار قسمت Train داده پس از عبور از t-SNE (که جواب‌ها را برای آن داریم) می‌کشیم و می‌توان دید که کلاس‌های مختلف در فضای دو بعدی به وضوح از هم جدا‌ شده‌اند. همچنین، اعداد شبیه به هم در نمودار به هم نزدیک‌اند .برای مثال ۳ و ۹ در نمودار از ۰ و ۷ به هم نزدیک‌تر هستند.نمودار داده‌های train (جواب ها با رنگ مشخص شده‌اند)از مضرات استفاده از داده‌ای که کاهش بعد داده شده در مدل‌های دسته‌بندی این است که تفسیرپذیری مدل‌هایی مانند درخت تصمیم را کاهش می‌دهد. در این حالت نمی‌دانیم کدام ویژگی تاثیر بیشتری روی جواب دارد، چون همه ويژگی‌ها در داده نهایی از ترکیبی از ویژگی‌ها در داده اصلی ساخته شده‌اند. می‌توان با فشرده‌سازی ویژگی‌های شبیه به هم یا ویژگی‌هایی که با هم ارتباط (Correlation) زیادی دارند با این مسئله مقابله کرد.گام ۴: ساختن مدل نهایی و بررسی آنحالا دوباره همان مدل درخت تصمیم را برای داده‌های حاصل شده از الگوریتم TSNE می‌سازیم:X_train, X_val, y_train, y_val = train_test_split(tsne_train, 
                                                  train_df[&#039;label&#039;], 
                                                  test_size=0.25, 
                                                  random_state=seed)
clf = DecisionTreeClassifier(max_depth=10, random_state=seed)
clf.fit(X_train, y_train)و این مدل روی داده Validation به ما دقت ٪۹۷.۰۲ و روی داده Train به ما دقت ٪۹۸.۱۷ می‌دهد که تفاوت چندانی با دقت شبکه‌های عصبی ندارد.حالا جواب مدل نهایی را برای داده‌های Test می‌گیریم.predictions = clf.predict(tsne_test)چون برای داده Test جواب‌های درست را نداریم نمی‌توانیم دقت مدل را حساب کنیم. ولی می‌توانیم حسی از درستی مدل با مقایسه کردن نمودار توزیع کلاس‌های ‌‌پیش‌بینی شده توسط مدل برای Test و نمودار توزیع کلاس‌های داده Train داشته باشیم.توزیع کلاس‌های پیشبینی شده توسط مدلمی‌بینیم که نمودار به نموداری که در بالا کشیدیم شباهت دارد.همچنین این عکس به خوبی می‌تواند نزدیک بودن بعضی عکس‌های داده MNIST به دو عدد مختلف را نشان دهد.(منبع عکس)حاصل اعمال الگوریتم t-SNE رو داده MNISTبرای مطالعه بیشتر در مورد الگوریتم t-SNE می‌توانید به مقاله اصلی t-SNE که توسط Laurens van der Maaten و Geoffrey Hinton نوشته شده، مراجعه کنید.? اگر به یادگیری کاربردهای هوش مصنوعی برای تحلیل داده علاقه‌مند شدید، پیشنهاد می‌کنیم سری هم به دوره جدید کوئراکالج، یعنی «دوره هوش مصنوعی و یادگیری ماشین» بزنید. این دوره که با داده‌های واقعی از شرکت پوشه و تمرین‌های بسیار سر و کار دارد، الآن در مرحله پیش‌ثبت‌نام رایگان قرار دارد!مطلب‌های دیگر کوئرامگ در زمینه یادگیری ماشین:۱۰ ترند هوش مصنوعی در چند سال آیندهیادگیری ماشین به زبان ساده: عملی‌ترین راهنمای دنیادیپ‌فیک ما را به کجا خواهد برد؟ خوب، بد، و زشت دیپ‌فیک‌هاکوئرامگ مجله‌ی تخصصی کوئرا برای توسعه‌دهندگان است که هر هفته با مطلب‌هایی در زمینه تکنولوژی، رشد فردی و آینده برنامه‌نویسی به‌روزرسانی می‌شود. برای اطلاع از آخرین مطلب‌های ما، می‌توانید توئیتر یا کانال تلگرام ما را دنبال کنید.</description>
                <category>کوئرامگ | مجله تخصصی برنامه‌نویسان</category>
                <author>Nima Afshar</author>
                <pubDate>Mon, 30 Sep 2019 18:03:33 +0330</pubDate>
            </item>
                    <item>
                <title>دیپ‌فیک ما را به کجا خواهد برد؟ خوب، بد، و زشت دیپ‌فیک‌ها</title>
                <link>https://virgool.io/Quera-Mag/%D8%AF%DB%8C%D9%BE%D9%81%DB%8C%DA%A9-%D9%85%D8%A7-%D8%B1%D8%A7-%D8%A8%D9%87-%DA%A9%D8%AC%D8%A7-%D8%AE%D9%88%D8%A7%D9%87%D8%AF-%D8%A8%D8%B1%D8%AF-%D8%AE%D9%88%D8%A8-%D8%A8%D8%AF-%D9%88-%D8%B2%D8%B4%D8%AA-%D8%AF%DB%8C%D9%BE%D9%81%DB%8C%DA%A9%D9%87%D8%A7-e1t3c5rnymqv</link>
                <description>در یکی از صحنه‌های فیلم «اگه میتونی منو بگیر» ساخته استیون اسپیلبرگ، یک مامور FBI به نام کارل هنرتی در جستجوی کلاهبرداری به نام فرنک ابگنیل جونیور وارد اتاق او در هتل می‌شود. ابگنیل در همان حالتی که لوله تفنگ به سمت صورتش گرفته شده، وانمود می‌کند که مامور مخفی پلیس است و خودش هم دارد دنبال ابگنیل کلاهبردار می‌گردد. سرانجام ابگنیل موفق می‌شود سر هنرتی را شیره بمالد و درست جلوی چشمان حیرت زده او از چنگش دربرود. این فیلم که شخصیت اصلی‌اش مدام بین واقعیت و دروغ در تلاطم است، قصه بچه نابغه‌ای است که مسیر بدی را در پیش گرفته است. این روزها همین قصه را داریم در رسانه‌ها از نو زندگی می‌کنیم: همه‌ما هنرتی‌هایی هستیم که توانایی‌مان برای تشخیص راست از دروغ، حقیقت از کلک، و درست‌کاری از بدبینی به بازی گرفته شده است. کلاهبردار این قصه اگر گفتید کیست؟ بله، دیپ‌فیک‌ها.فرنک ابگنیل جونیور (لئوناردو دیکاپریو) در حال جا زدن خود به عنوان یک مامور مخفی در «اگه میتونی منو بگیر»دیپ‌فیک از کجا می‌آید؟کلمه دیپ‌فیک‌ (Deepfake) ترکیبی است از Deep Learning و Fake. شاید قبلا سایت «این فرد وجود خارجی ندارد» را دیده باشید؛ این سایت با کمک هوش مصنوعی، عکس پروفایل‌های آدم‌‌هایی را می‌سازد که هرگز وجود نداشته‌اند. چطوری؟ با الگوریتم شبکه مولد تخاصمی (Generative Adversarial Network) یا به طور خلاصه، گَن (GAN). این الگوریتم خودش برای خودش یک پا «اگه می‌تونی منو بگیر» است و  ابگنیل و هنرتی انحصاری خودش را دارد:نحوه کارکرد شبکه مولد تخاصمی (گَن) به زبان «اگه می‌تونی منو بگیر»گَن یک بخش «مولد» دارد و یک بخش «ممیز». مثلا فرض کنید گَن قصه ما، یاد گرفته باشد تصویرهای دروغین از خلبان‌ها بسازد. مولد یا همان ابگنیل قصه، دارد سعی می‌کند عکس‌های تقلبی جعل کند. از آن طرف ممیز یا هنرتی داستان، عکس‌های جعلی ساخت مولد و عکس‌های واقعی را کنار هم می‌گذارد و به خودش یاد می‌دهد که عکس واقعی را از دروغی تشخیص دهد. هرچقدر که مدل گَن بیشتر یاد بگیرد، هر دو بخش‌های مولد و ممیز هم در کارشان بهتر عمل می‌کنند و هرکدام باعث می‌شود دیگری در کار خودش ماهرتر شود. دیپ‌فیک‌ها جعل‌هایی هستند که مولد بلاخره توانسته از زیر دماغ ممیز رد کند!بد: جعل، تحقیر، و دروغپیشرفت فناوری دیپ‌فیک حالا به جاهای نگران‌کننده‌ای رسیده است. نه فقط عکس‌های تقلبی، که حالا می‌شود با این فناوری ویدیوهای فیک هم ساخت. خوشبختانه ویدیوهای دیپ‌فیک هنوز در ابتدای مسیرند و هرکس بخواهد آنها را بسازد، باید فریم به فریم ادیتشان کند. علاوه بر این، بیشتر می‌شود تغییرات ظاهری ایجاد کرد نه حرکات واقعی. اما با همه اینها، همین دو سال پیش کاربر ناشناسی در ردیت با نام مستعار deepfakes، چهره گَل گَدو، بازیگر نقش واندر وومن را روی یک ویدیوی مستهجن گذاشت. کاربری دیگر در ردیت، اپی به نام فیک‌اپ ساخت که با آن می‌شد به سادگی ویدیوهای فیک ساخت و به اشتراک گذاشت. امروز دیگر جایگزین کردن چهره یک نفر در ویدیو با یکی دیگر نه تنها کار سختی نیست، که نتیجه آن هم تا حد خیلی خوبی غیر قابل تشخیص است. https://www.aparat.com/v/x1SDi  فیلمسازی به نام جردن‌ پیل (Jordan Peele) دیپ‌فیکی ساخته که در آن باراک اوباما دارد در مورد خطرات دیپ‌فیک هشدار می‌دهد.در دنیایی که روزانه ۹۳ میلیون سلفی در آن گرفته می‌شود، تصور کردن انواع سوءاستفاده‌ها و جرایمی که می‌شود با دیپ‌فیک انجام داد، خیلی کار سختی نیست: ساخت ویدیوهای مستهجن برای انتقام‌گیری، باج‌گیری، سرقت هویت، پخش اخبار دروغ. تازه، اینها تنها چند مثال از انبوه گزینه‌های ممکن است. در قالب تئوری، تک‌تک افرادی که عکس خودشان را در شبکه‌های اجتماعی به اشتراک بگذارند در آینده در مقابل چنین حملاتی آسیب‌پذیر خواهد بود. ویدیوهایی مثل این سخنرانی فیک اوباما را با این فناوری می‌شود در انواع و اقسام تولید کرد، افرادی که مستعد گول خوردن هستند را با آنها به راحتی گول زد، و بعد اعضای جامعه دو قطبی امروز حتی بیشتر از قبل با هم دشمن می‌شوند. وقتی اینترنت و شبکه‌های اجتماعی بی‌سانسور و کنترل نشده ما سرشار از دیپ‌فیک شوند، کل جامعه و زندگی‌های خصوصی تک‌تک ما در خطر خواهد بود.زشت: گرداب بی‌پایان رقابت‌هامثل هر نوع یادگیری ماشینی و غیر ماشینی دیگر، برای ساختن دیپ‌فیک‌های واقع‌گرایانه هم اول باید داده کافی جمع کرد. اما این خیلی هم کار ساده‌ای نیست. کوین روز (Kevin Roose)، یکی از نویسندگان ستون فناوری در نیویورک تایمز، تصمیم گرفت با دادن یک سری ویدیو از خودش به اپلیکیشن فیک‌اپ، خودش امتحان کند. دیپ‌فیکی که او با این روش از خودش ساخت بامزه بود، اما آنقدر واقعی نبود که آدم را گول بزند. بنابراین به نظر می‌رسد که فعلا، فقط از اشخاص مشهور می‌شود دیپ‌فیک «واقعی» ساخت؛ یعنی آنهایی که کلی ویدیوی باکیفیت ازشان در سطح وب وجود دارد. اما همین هم چیز کمی نیست؛ مثلا دیپ‌فیک‌ سیاستمداران می‌تواند بین صدها میلیون آدم دست به دست بچرخد و نتایج زیانباری برای وقایع سیاسی مهم داشته باشد؛ مثلا برای نتایج انتخابات ریاست جمهوری آمریکا در سال 2020.احتمال بروز چنین اتفاقاتی، بار سنگینی بر دوش فناوری‌های تشخیص و شکار دیپ‌فیک گذاشته است. متخصصان مختلف دارند همه تلاششان را می‌کنند تا ابزارهای قدرتمندی برای تشخیص دیپ‌فیک بسازند. مثلا پژوهشگران دانشگاه واشنگتن، سایت «کدام چهره واقعی است» را ساخته‌اند که در آن می‌توانید بعد از خواندن مطلبی در مورد نحوه تشخیص تصاویر دیپ‌فیک، سعی کنید بین یک سری عکس‌های واقعی و جعلی، واقعی‌ها را تشخیص دهید. کایل مک‌دانلد هم در یک پست وبلاگ در مورد همین مسئله توضیح داده است. گروهی از محققان یک دیتاست عظیم ویدیویی جمع کرده‌اند که قرار است در علوم قانونی (Forensics) برای تشخیص جعل عکس، نقش محک و معیار را داشته باشد. استارتاپ دیپ‌تریس (Deeptrace)، مبارزه با خطرات سایبری دیپ‌فیک را به عنوان هدف خود برگزیده و گزارشی در مورد وضعیت دیپ‌فیک در سال 2018 ارائه کرده است. هنری فرید در دارت‌ماوت دارد نرم‌افزاری برای شناسایی دیپ‌فیک‌های ویدیویی سیاسی می‌سازد. سیوی لیو با همکاری آژانس پروژه‌های پژوهشی پیشرفته دفاعی (دارپا)، در حال توسعه نرم‌افزاری است که بتواند دیپ‌فیک‌های ویدیویی را شناسایی کرده و از انتشار و رواج آنها جلوگیری کند.همه اینها عالی است، اما مسئله اینجاست: دیپ‌فیک‌ها درست مثل ویروس‌های کامپیوتری هستند. به محض اینکه یکی راه شناسایی‌ ویروسی را پیدا کند، فوری یک نفر دیگر می‌آید و راهی برای دور زدن راهکار نفر قبلی پیدا می‌کند. این قایم‌موشک‌بازی بین جعل‌کننده‌ها و تشخیص‌دهنده‌ها رقابتی است که تا ابد ادامه خواهد داشت. یک جورهایی، انگار خود این دو گروه با هم یک GAN عظیم و بی‌پایان می‌سازند!خوب: هوش مصنوعی شبه‌انسانی و تعاملات ارتباطی نوجهان پر از دیپ‌فیک شاید مخوف و ناامن باشد؛ اما این تنها آینده ممکن نیست! دیپ‌فیک کاربردهای مثبتی هم دارد؛ دیپ‌فیک می‌تواند نحوه ارتباطات را دگرگون کند و شکل‌های کاملا جدیدی از آن به وجود بیاورد. به عنوان مثال، تصور کنید فناوری تولید صدا با فناوری دیپ‌فیک ترکیب شود! حتی همین حالا هم دستیار گوگل می‌تواند با استفاده از یک مدل مولد برای تولید گفتار به نام ویو‌نت (Wavenet)، با لحن و صدای جان لجندصحبت کند. استارتاپ‌های لایربرد (Lyrebird)و ماجولیت (Modulate) می‌توانند فقط با چند ساعت آموزش دیدن، یاد بگیرند مثل شما حرف بزنند! حتی فناوری بایدو (Baidu) می‌تواند تنها در 3.‌7 ثانیه صدای افراد را شبیه‌سازی کند. در آینده‌ای نه چندان دور، سخنگوهای هوشمندی خواهیم داشت که نه تنها می‌توانند با صدای خواننده‌های مورد علاقه‌مان صحبت کنند، که بلدند وقتی خودمان سر کار نیستیم، به جای ما جواب تلفن را بدهند!حتی تولید ویدیوهای فیک هم الزاما چیز بدی نیست. شرکت سینتزیا (Synthesia) ، ویدیوی دیپ‌فیکی از دیوید بکهام را برای یک کمپین حمایتی مالاریا تولید کرده است. استارتاپ دیتاگرید (DataGrid) توانسته تصویر کل بدن آدم‌هایی که وجود خارجی ندارند را کامل بسازد، و پژوهشگران دانشگاه برکلی کالیفرنیا با کمک دیپ‌فیک توانسته‌اند حرکات مختلف رقص را روی بدن افراد مختلف اجرا کنند. حتی اخیرا موزه دالی در فلوریدا، به لطف دیپ‌فیک توانسته این هنرمند سوررئالیست اسپانیایی را برای صحبت با بازدیدکنندگان از موزه به دنیا بازگرداند!از ویدیوی دیپ‌فیک سالوادور دالی در موزه دالی فلوریداتصور کنید شخصیت‌های تاریخی‌ای که رویتان تاثیر گذاشته‌اند با شما حرف بزنند. تصور کنید عزیزانی که از دنیا رفته‌اند دوباره به پیشتان برگردند. و اگر هنوز دارید در آرزوی رفتن به دنیای هری‌پاتر می‌سوزید، تصور کنید همه آن پرتره‌های متحرک هاگوارتز واقعا وجود داشته باشند!جمع‌بندیفرنک ابگنیل فیلم «اگه میتونی منو بگیر»، یک شخصیت واقعی است که وقتی سرانجام از زندان آزاد شد، چهار دهه از عمرش را به کار کردن در FBI روی جعل‌، اختلاس، جرم‌های مالی، و جرم‌های امنیت سایبری گذراند. ابگنیل در سخنرانی‌ای در گوگل گفته که «فناوری، زاینده جرم است. همیشه همین بوده و همیشه هم چنین خواهد بود». با اینحال، او می‌گوید که این هکرها نیستند که امنیت اطلاعات شرکت‌ها را پایین می‌آورند؛ بلکه مقصر آن کارمندان سهل‌انگاری در آن شرکت هستند که کاری که قرار نبوده بکنند را کرده‌اند، یا اینکه نتوانسته‌اند کاری که قرار بوده بکنند را انجام دهند.همین اتفاق برای دیپ‌فیک هم می‌افتد: مهم نیست دیپ‌فیک‌ها چقدر واقع‌گرایانه‌تر شوند یا دقت فناوری‌های ضد دیپ‌فیک تا چه حد افزایش پیدا کند؛ آسیب اصلی ناشی از این دیپ‌فیک‌ها کار انسان‌هایی هست که آنها را می‌سازند، ساخته‌های دروغین را باور می‌کنند، و چیزی که بدون تحقیق، درست فرض کرده‌اند را نشر می‌دهند. به جای اینکه انگشت اتهام را به سمت خود فناوری دیپ‌فیک بگیریم، باید ببینیم چطور می‌شود کاری کرد که افراد در مورد چیزهایی که در اینترنت می‌بینند با دید انتقادی‌تری قضاوت کنند و هنگام به اشتراک‌گذاری‌ در شبکه‌های اجتماعی هوشمندانه‌تر عمل نمایند. اثرات منفی دیپ‌فیک را نمی‌شود انکار کرد؛ اما باید چشم‌هایمان را به بخش‌های مثبت‌تر هوش مصنوعی بدوزیم و پتانسیلی که دیپ‌فیک برای ایجاد روش‌های ارتباطی جدید و بهتر کردن زندگی‌هایمان دارد را به مسیر درست هدایت کنیم.اگر به یادگیری کاربردهای هوش مصنوعی برای تحلیل داده علاقه‌مند شدید، پیشنهاد می‌کنیم سری هم به دوره جدید کوئراکالج، یعنی «دوره هوش مصنوعی و یادگیری ماشین» بزنید. این دوره با داده‌های واقعی از شرکت پوشه و تمرین‌های بسیار سر و کار دارد.ترجمه بر اساس: &quot;Deepfake: The Good, The Bad and the Ugly&quot; by Nahua Kang @ Twentybn Mediumکوئرامگ مجله‌ای تخصصی برای توسعه‌دهندگان است که هر هفته با مطلب‌هایی در زمینه تکنولوژی، رشد فردی و آینده برنامه‌نویسی به‌روزرسانی می‌شود. برای اطلاع از آخرین مطلب‌های ما، می‌توانید توئیتر یا کانال تلگرام کوئرا را دنبال کنید.</description>
                <category>کوئرامگ | مجله تخصصی برنامه‌نویسان</category>
                <author>مریم مقدس برهان</author>
                <pubDate>Sat, 28 Sep 2019 19:20:57 +0330</pubDate>
            </item>
            </channel>
</rss>