<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های حجت جعفری</title>
        <link>https://virgool.io/feed/@hojjatjafary</link>
        <description>دانش آموخته هوش مصنوعی، مهندس نر‌م‌افزار و برنامه‌نویس، بازی ساز سابق</description>
        <language>fa</language>
        <pubDate>2026-04-15 03:29:29</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/61137/avatar/UGpxQa.png?height=120&amp;width=120</url>
            <title>حجت جعفری</title>
            <link>https://virgool.io/@hojjatjafary</link>
        </image>

                    <item>
                <title>شبکه‌های اجتماعی غیرمتمرکز و تأثیرات سیاسی آن</title>
                <link>https://virgool.io/@hojjatjafary/decentralized-social-media-f8t5q5rijapx</link>
                <description>اینترنت از بدو تولد در پروژه‌ای تحت حمایت آژانس پروژه‌های تحقیقاتی پیشرفته دفاعی آمریکا (DARPA) به عنوان یک شبکه توزیع شده و غیرمتمرکز طراحی شد. هدف اصلی این بود که سیستمی ایجاد شود که فاقد نقطه شکست مرکزی (Single Point of Failure) باشد، تا در شرایط بحرانی مانند حمله هسته‌ای، شبکه بتواند به انتقال پیام‌های نظامی ادامه دهد. این معماری، مبتنی بر مدل انتقال بسته‌های داده (Packet Switching) بود، برخلاف مدل مرسوم آن زمان که مداری (Circuit Switching) بود.به همین دلیل، اینترنت از ابتدا فاقد مدیریت مرکزی بود. هیچ نقطه واحدی برای کنترل کل شبکه وجود نداشت و هر گره (Node) تنها مسئول ارتباط با گره‌های مجاور خود بود. در این طراحی، هر بسته داده (Data Packet) حاوی اطلاعات مبدأ، مقصد و توالی، به‌صورت مستقل در شبکه حرکت می‌کرد.مسیریاب‌ها (Routers) این بسته‌ها را بر اساس جداول مسیریابی پویا، هدایت می‌کردند و هر بسته می‌توانست از مسیرهای مختلف و مجزایی عبور کند تا در مقصد نهایی، مجدداً به صورت اطلاعات اولیه سازماندهی مجدد (بازسازی) شود (Fragmentation and Reassembly).این معماری توزیع‌شده نه‌تنها شبکه را مقاوم، پایدار و منعطف می‌کرد، بلکه امکان رشد و گسترش آسان اینترنت را نیز فراهم آورد. هر شبکه جدید می‌توانست بدون نیاز به تغییر در ساختار کلی، به اینترنت متصل شود. همین ویژگی باعث شد اینترنت به‌سرعت از یک پروژه نظامی به یک شبکه دانشگاهی و سپس به یک زیرساخت جهانی تبدیل شود.از جنبه اجتماعی، این معماری غیرمتمرکز، قدرت بیان بی‌سابقه‌ای به کاربران می‌داد. هر فرد یا نهادی می‌توانست بدون نیاز به اخذ مجوز از یک مرجع مرکزی، اطلاعات خود را منتشر کند. این امر به تضارب آراء، چندصدایی و شکوفایی خلاقیت کمک شایانی کرد و اینترنت را به یک عرصه دموکراتیک برای تبادل ایده تبدیل نمود.اما چالش جدید: سردرگمی در اقیانوس اطلاعاتهمین توزیع‌شدگی و آزادی، به‌مرور یک مشکل اساسی ایجاد کرد: سازمان‌دهی و دسترسی به اطلاعات.با رشد نمایی تعداد وب‌سایت‌ها، یافتن محتوای موردنظر بدون یک راهنما بسیار دشوار شد.در سال‌های ابتدایی اینترنت، کاربران برای دسترسی به اطلاعات مجبور بودند آدرس دقیق سایت‌ها را بدانند یا از فهرست‌های ساده‌ای استفاده کنند که توسط افراد یا گروه‌های کوچک تهیه می‌شد.ابتدا دایرکتوری‌های دستی (مانند یاهو!) و سپس موتورهای جستجوی مبتنی بر خزنده (Crawler-based) مانند گوگل پدید آمدند. این موتورها با فهرست‌کردن خودکار صفحات وب و رتبه‌بندی آنها، انقلابی در سهولت دسترسی به اطلاعات ایجاد کردند.تمرکز جدید: قدرت در دستان الگوریتم‌هااین سادگی و کارایی، اما هزینه‌ای داشت: تمرکز قدرت اطلاعاتی.به دلیل حجم بسیار بالای اطلاعات موجود در اینترنت، هیچ موتور جستجویی نمی‌تواند همه نتایج مرتبط را نمایش دهد برای همین مجبور به فیلتر، پالایش و رتبه‌بندی اطلاعات بر اساس الگوریتم‌های پیچیده شدند. کاربران عمدتاً فقط &quot;نوک کوه یخ&quot; (صفحات اول نتایج جستجو) را می‌بینند. این امر، «دروازه‌بانی اطلاعات (Gatekeeping)» را از حالت غیر متمرکز اولیه خارج کرد و آن را به دست چند شرکت قدرتمند (مثل گوگل) سپرد. این الگوریتم‌ها و شرکت‌ها هستند که تعیین می‌کنند چه محتوایی دیده شود و چه محتوایی عملاً پنهان بماند.تبدیل به ابزار قدرت: دستکاری افکار عمومیدر یک دنیای ایده‌آل، شاید این مسئله چندان خطرناک به نظر نرسد؛ اما هنگامی که انگیزه‌های سیاسی، اقتصادی یا ایدئولوژیک وارد میدان شوند، این دروازه‌بانی تبدیل به ابزاری فوق‌العاده قدرتمند می‌شود. امکان دستکاری نتایج جستجو (Search Engine Manipulation)، سانسور پنهان، اولویت‌دهی به برخی دیدگاه‌ها و حذف دیگران، به راحتی می‌تواند ادراک عمومی، جهت‌گیری افکار و حتی نتایج انتخابات را تحت تأثیر قرار دهد. این کنترل نامرئی، حتی با استانداردهای دموکراسی‌های لیبرال که بر تنوع آراء و دسترسی آزاد به اطلاعات تأکید دارند، در تضاد است.تمرکز مضاعف: ظهور ابرپلتفرم‌های رسانه‌ایاین روند تمرکز، تنها به موتورهای جستجو محدود نشد. ظهور شبکه‌های اجتماعی متمرکز مانند فیسبوک، اینستاگرام، توییتر و تیک‌تاک، لایه دیگری از کنترل را افزود. این پلتفرم‌ها نه تنها گردآورنده عظیم داده‌های شخصی هستند، بلکه با الگوریتم‌های فید خبری، واقعیت‌های اجتماعی کاربران را نیز می‌سازند. قدرت یک شرکت در حذف حساب‌ها، اولویت‌دهی به محتوا، تنظیم دستورکارهای عمومی (Setting the Agenda) و تاثیرگذاری بر افکار عمومی در مقیاس جهانی، بی‌سابقه است. این وضعیت، تضاد آشکاری با روح غیرمتمرکز و مقاوم اولیه اینترنت دارد و آن را به سمت یک ساختار الیگارشیک اطلاعاتی سوق داده است.سلاح‌سازی همه چیزیکی از شرایط اولیه دستکاری ذهن ایزوله کردن فرد از اطلاعات متنوع و قرار دادن او در معرض پیام‌های تکرارشونده و یکسویه است. الگوریتم‌های متمرکز پلتفرم‌هایی مانند فیسبوک، یوتیوب و تیک‌تاک دقیقاً همین کار را می‌کنند: آنها کاربر را در &quot;حباب فیلتر&quot; (Filter Bubble) یا &quot;حلقه بازخورد تشدیدی&quot; (Echo Chamber) قرار می‌دهند، جایی که تنها اطلاعاتی مطابق با عقاید پیشین او نمایش داده می‌شود. این امر به تدریج ادراک فرد از واقعیت را تحریف کرده، او را نسبت به دیدگاه‌های مخالف نابینا کرده و توانایی تفکر مستقل و انتقادی را از بین می‌برد. جامعه به مجموعه‌ای از قبایل اطلاعاتی تقسیم می‌شود که هرکدام &quot;واقعیت&quot; خاص خود را دارند.الگوریتم‌ها به خوبی می‌دانند که محتوای احساس‌برانگیز، به‌ویژه محتوای ترس‌آور یا خشم‌آلود، بیشترین تعامل را ایجاد می‌کند. در نتیجه، کاربران به طور سیستماتیک در معرض جریان مداومی از اخبار منفی، درگیری‌های اجتماعی و محتوای تحریک‌کننده قرار می‌گیرند. حفظ افراد در حالت اضطراب و ترس دائمی، آنها را مستعد پذیرش راه‌حل‌های ساده‌انگارانه و پیروی از رهبران قدرتمند می‌کند. این یک مکانیسم کلاسیک برای تضعیف مقاومت روانی جامعه است.راه‌حل‌های آینده: بازگشت به ریشه‌ها؟برای مقابله با این تمرکزگرایی افراطی و خطرات آن برای آزادی بیان و تنوع فکری، جنبش‌هایی شکل گرفته‌اند که خواستار بازتعریف معماری فضای مجازی هستند. مهم‌ترین این ایده‌ها، شبکه‌های اجتماعی غیرمتمرکز و فدریشن (Federation) است که نمونه برجسته آن فدیورس (Fediverse) است.فدیورس ترکیبی از دو واژه Federation (فدراسیون) و Universe (جهان) است و به مجموعه‌ای از سرویس‌ها و پلتفرم‌های اجتماعی گفته می‌شود که به‌صورت مستقل اما قابل‌ارتباط با یکدیگر فعالیت می‌کنند. برخلاف شبکه‌های اجتماعی متمرکز که تحت کنترل یک شرکت واحد هستند، فدیورس از تعداد زیادی سرور مستقل (Instance) تشکیل شده است که هر کدام می‌توانند قوانین، سیاست‌های محتوایی و مدل مدیریتی خاص خود را داشته باشند.این ارتباط میان سرورها معمولاً از طریق پروتکل‌های باز و استاندارد انجام می‌شود؛ مهم‌ترین آن‌ها ActivityPub است. ActivityPub یک پروتکل غیرمتمرکز است که امکان انتشار، دنبال‌کردن، لایک کردن و تعامل با محتوا را میان سرورهای مختلف فراهم می‌کند، بدون آنکه نیاز به یک نهاد مرکزی وجود داشته باشد.در مدل فدیورس:هیچ سرور مرکزی واحدی وجود ندارد. هر کاربر یا جامعه می‌تواند سرور (Instance) خود را راه‌اندازی کند (مانند Mastodon برای میکروبلاگینگ به جای توییتر).این سرورهای مستقل می‌توانند با یکدیگر ارتباط برقرار کنند (Federate) و کاربران سرورهای مختلف قادر به تعامل با هم باشند.قوانین و سیاست‌های محتوایی توسط هر سرور به صورت مستقل تعیین می‌شود.کاربر در صورت عدم رضایت از سرور خود، می‌تواند با حفظ دنبال‌کنندگان و داده‌هایش، به سرور دیگری مهاجرت کند.یکی از مهم‌ترین مزایای فدیورس، بازگرداندن کنترل شبکه به کاربران و جوامع محلی است. به‌جای آنکه یک شرکت بزرگ تصمیم بگیرد چه محتوایی مجاز است یا چه چیزی دیده شود، این تصمیم‌ها به‌صورت توزیع‌شده و محلی اتخاذ می‌شوند. اگرچه چالش‌هایی مانند کاربرپسندی کمتر، مقیاس‌پذیری و مقابله با محتوای مضر در این مدل وجود دارد، اما راهی امیدوارکننده برای احیای اصول اولیه اینترنت یعنی توزیع‌شدگی، مقاومت و کنترل کاربر بر داده و تجربه خود به شمار می‌رود. آینده اینترنت ممکن است در یک تعادل جدید بین کارایی سیستم‌های متمرکز و آزادی و انعطاف سیستم‌های غیرمتمرکز شکل بگیرد.مثال‌هابرای مثال، Mastodon یک شبکه اجتماعی متن‌محور شبیه توییتر است که هر سرور آن توسط یک فرد یا جامعه مستقل اداره می‌شود و قوانین و سیاست‌های محتوایی مخصوص به خود را دارد. کاربران می‌توانند سرور مناسب خود را انتخاب کنند یا حتی سرور شخصی راه‌اندازی کنند، بدون آنکه ارتباطشان با کل شبکه قطع شود.Pixelfed نمونه‌ای دیگر از فدیورس است که عملکردی مشابه اینستاگرام دارد، اما بدون الگوریتم‌های متمرکز، تبلیغات و جمع‌آوری گسترده داده‌های کاربران. تصاویر منتشرشده در Pixelfed می‌توانند در سراسر فدیورس دیده شوند و با کاربران پلتفرم‌های دیگر تعامل داشته باشند.این نمونه‌ها نشان می‌دهند که فدیورس تلاشی عملی برای بازگرداندن اینترنت به ماهیت توزیع‌شده خود است؛ جایی که کنترل اطلاعات به‌جای شرکت‌های بزرگ، در دست کاربران و جوامع محلی قرار می‌گیرد.برای اطلاعات بیشتر در مورد فدیورس‌ها این مقاله را نیز می‌توانید مطالعه کنید.</description>
                <category>حجت جعفری</category>
                <author>حجت جعفری</author>
                <pubDate>Sun, 14 Dec 2025 15:06:58 +0330</pubDate>
            </item>
                    <item>
                <title>نظر ملاصدرا در مورد هوش مصنوعی!</title>
                <link>https://virgool.io/@hojjatjafary/%D9%86%D8%B8%D8%B1-%D9%85%D9%84%D8%A7%D8%B5%D8%AF%D8%B1%D8%A7-%D8%AF%D8%B1-%D9%85%D9%88%D8%B1%D8%AF-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-ogcacqdocmsh</link>
                <description>تصویر تولید شده توسط هوش مصنوعیحکمت متعالیهملاصدرا، بنیانگذار حکمت متعالیه، با تلفیق مباحث عقلانی، شهودی و نقلی، نظام فلسفی جامعی ارائه کرده است که در آن، هستی به عنوان یک حقیقت سیال و دارای مراتب مختلف تلقی می‌شود.بر اساس حکمت متعالیه ملاصدرا، وجود دارای مراتب و شدت و ضعف است، که از پایین‌ترین مرتبه، یعنی ماده، تا بالاترین مرتبه، یعنی واجب الوجود، خداوند، را شامل می‌شود. ملاصدرا با طرح نظریه «اصالت وجود» و «تشکیک وجود»، بیان میکند که وجود حقیقتی واحد است اما دارای مراتب شدت و ضعف میباشد. به عبارت دیگر، موجودات، از جمله انسان، بسته به کمالات وجودی خود، در مراتب مختلفی از  سلسله مراتب شدت وجود قرار میگیرند. هر مرتبه‌ای از هستی، دارای ویژگی‌ها و خصوصیات خاص خود است.در اصالت وجود نباید بگوییم انسان وجود دارد، بلکه باید بگوییم این وجود انسان است.از دیدگاه ملاصدرا، هوش مصنوعی، نمی‌تواند در عرض موجودات طبیعی، مانند انسان، قرار گیرد. به عبارت دیگر، هوش مصنوعی، نمی‌تواند به عنوان یک موجود مستقل، در نظر گرفته شود.هوش مصنوعی، در واقع، ابزاری است که توسط انسان ساخته شده و برای انجام برخی از وظایف و فعالیت‌ها، مورد استفاده قرار می‌گیرد. بنابراین، هوش مصنوعی، از نظر وجودی، وابسته به انسان است و نمی‌تواند بدون انسان، وجود داشته باشد.با این حال، هوش مصنوعی، می‌تواند در مراتب پایین‌تر هستی، یعنی در مرتبه ماده، تأثیرگذار باشد. به عنوان مثال، هوش مصنوعی، می‌تواند در تولید و ساخت مواد جدید، به انسان کمک کند. همچنین، هوش مصنوعی، می‌تواند در بهبود و توسعه فناوری‌های مختلف، نقش داشته باشد. در مراتب بالاتر هستی، مانند مرتبه نفس و عقل، هوش مصنوعی، نمی‌تواند تأثیری داشته باشد. به عبارت دیگر، هوش مصنوعی، نمی‌تواند جایگزین انسان در اموری مانند تفکر، تعقل و ادراک شود.از دیدگاه حکمت متعالیه ملاصدرا، هوش مصنوعی، پدیده‌ای است که در خدمت انسان قرار دارد و می‌تواند در مراتب پایین‌تر هستی، تأثیرگذار باشد. با این حال، هوش مصنوعی، نمی‌تواند جایگزین انسان در مراتب بالاتر هستی شود.بررسی جایگاه هوش مصنوعیبر اساس حکمت متعالیه ملاصدرا، نمی‌توان به طور دقیق «شدت وجودی» برای هوش مصنوعی تعیین کرد اما جایگاه هوش مصنوعی در هستی از منظر حکمت متعالیه ملاصدرا را می‌توان با توجه به اصول فلسفی او تحلیل کرد. برای بررسی جایگاه هوش مصنوعی در این نظام، می‌توان به چند محور اصلی اشاره کرد:مراتب وجود و هوش مصنوعیدر حکمت متعالیه، هستی دارای مراتب مختلف است، از جمله عالم ماده، عالم مثال و عالم عقل. هوش مصنوعی به عنوان پدیده‌ای مادی و ساخته‌ی دست بشر، در پایین‌ترین مرتبه‌ی وجود، یعنی عالم ماده قرار می‌گیرد. این پدیده فاقد حیات ذاتی و شعور حقیقی است و تنها به صورت ظاهری و مجازی می‌تواند برخی از ویژگی‌های موجودات دارای شعور را تقلید کند.ماهیت هوش مصنوعی و عدم وجود حقیقیاز دیدگاه ملاصدرا، هوش مصنوعی فاقد وجود حقیقی و ذاتی است، زیرا وجود حقیقی منوط به داشتن حیات، شعور و قوه‌ی ادراک است. هوش مصنوعی تنها یک ابزار یا آلت است که توسط انسان طراحی شده و فاقد هرگونه اراده، اختیار و ادراک مستقل است. بنابراین، نمی‌توان آن را به عنوان یک موجود حقیقی در مراتب هستی تلقی کرد.نسبت هوش مصنوعی با علم و ادراکملاصدرا علم و ادراک را به عنوان ویژگی‌های ذاتی موجودات دارای نفس (مانند انسان) می‌داند. هوش مصنوعی، هرچند ممکن است قادر به انجام محاسبات پیچیده و شبیه‌سازی فرآیندهای فکری باشد، اما فاقد نفس و قوه‌ی ادراک حقیقی است. بنابراین، فعالیت‌های هوش مصنوعی را نمی‌توان به عنوان علم یا ادراک حقیقی در نظر گرفت، بلکه این فعالیت‌ها صرفاً تقلیدی از فرآیندهای ذهنی هستند.هوش مصنوعی و مسئله‌ی خلقتاز منظر حکمت متعالیه، خلقت مختص خداوند است و انسان به عنوان خلیفه‌ی خدا، تنها می‌تواند در چارچوب قوانین الهی به ابداع و اختراع بپردازد. هوش مصنوعی نیز به عنوان محصولی از خلاقیت انسان، در این چارچوب قرار می‌گیرد. اما باید توجه داشت که هوش مصنوعی فاقد جنبه‌های روحانی و معنوی است که در خلقت الهی وجود دارد.هوش مصنوعی و غایت‌شناسیدر حکمت متعالیه، هر موجودی دارای غایت و هدفی است که به سوی آن حرکت می‌کند. هوش مصنوعی، به عنوان یک ابزار، فاقد غایت ذاتی است و هدف آن توسط انسان تعیین می‌شود. بنابراین، جایگاه هوش مصنوعی در هستی به عنوان یک ابزار در خدمت اهداف انسانی است، نه به عنوان موجودی مستقل با غایت خاص خود.وجود مجازی و اعتباری (عدم استقلال وجودی)از منظر حکمت متعالیه، هوش مصنوعی یک وجود اعتباری و مجازی است که توسط انسان خلق شده است. و وجود آن، وابسته به انسان است. هوش مصنوعی فاقد وجود حقیقی، مستقل و ذاتی است بلکه وجودی اعتباری است که وجود آن وابسته به وجود انسان و ابزارهای مادی و برنامه‌نویسی است. این وابستگی نشاندهنده ضعف و عدم استقلال وجودی آن است. بنابراین، نمی‌توان آن را در مرتبه‌ای بالاتر از انسان قرار داد بنابراین، شدت وجودی هوش مصنوعی در پایینترین مراتب وجود قرار میگیرد.هوش مصنوعی، فاقد نفس ناطقه استاز نظر ملاصدرا، انسان دارای نفس ناطقه است که او را از سایر موجودات متمایز می‌کند. این نفس، منشأ عقل، اراده و سایر ویژگی‌های انسانی است. هوش مصنوعی، فاقد چنین نفسی است و به همین دلیل، نمی‌توان آن را در مرتبه وجودی انسان قرار داد.نتیجه‌گیریاز دیدگاه حکمت متعالیه ملاصدرا، هوش مصنوعی به عنوان پدیده‌ای مادی و ساخته‌ی دست بشر، شدت وجودی بسیار ضعیفی دارد و در پایین‌ترین مرتبه‌ی وجود قرار دارد. این پدیده فاقد وجود و حیات حقیقی، ادراک و شعور ذاتی و غایت مستقل است و وجود آن کاملاً وابسته به وجود انسان و ابزارهای مادی است که تنها به عنوان ابزاری در خدمت اهداف انسانی قابل تحلیل است. بنابراین، جایگاه هوش مصنوعی در هستی، محدود به عالم ماده و فاقد هرگونه بعد روحانی یا معنوی است.هوش مصنوعی، موجودی است که توسط انسان ساخته شده و فاقد نفس ناطقه است. بنابراین، نمی‌توان آن را در مرتبه وجودی انسان قرار داد. با این حال، هوش مصنوعی نیز مانند سایر موجودات که در برخی توانایی‌ها از انسان برتر هستند، توانایی‌های بالاتری در پردازش اطلاعات نسبت به انسان برخودار است.</description>
                <category>حجت جعفری</category>
                <author>حجت جعفری</author>
                <pubDate>Sat, 22 Feb 2025 19:09:42 +0330</pubDate>
            </item>
                    <item>
                <title>مهندسی یعنی مبادله!</title>
                <link>https://virgool.io/@hojjatjafary/everything-is-trade-off-aczcaz43kvmr</link>
                <description>هیچ راه حل جادویی وجود ندارددر طول این سالهایی که کار و مطالعه کردم بارها به این نتیجه رسیدم که در بیشتر مسایل فنی و مهندسی هیچ چیزی به عنوان بهترین راه حل وجود ندارد و همهٔ انتخاب‌های مهندسی به نوعی یک داد و ستد و مبادله بین مزایا و معایب راه حل‌های مختلف است، برای همین همواره باید آگاه باشیم که چه چیزی را می‌دهیم و در عوض چه چیزی به دست می‌آوریم.البته این موضوعی نیست که من کشف کرده باشم، فرد بروکز (Fred Brooks) یکی از برندگان جایزه تورینگ در سال ۱۹۸۶ درست در سالی که من متولد شدم مقاله‌ای با عنوان &quot;No Silver Bullet Essence and Accidents of Software Engineering&quot; منتشر کرد و باعث فراگیر شدن عبارت &quot;No Silver Bullet&quot; در بین مهندسان نرم‌افزار شد، و معمولا زمانی استفاده می‌شود که می‌خواهیم تاکید کنیم هیچ راه حل واحد و ساده‌ای برای یک مساله پیچیده وجود ندارد.اگر فکر می‌کنید فلان زبان برنامه‌نویسی بهترین زبان برنامه‌نویسی است، سخت در اشتباهیداگر فکر می‌کنید فلان برسازه (Paradigm) برنامه نویسی مثلا برنامه‌نویسی ساخت یافته (Structured Programming) یا برنامه‌نویسی شی‌گرا (Object Oriented) بهترین راه ساخت نرم افزار است، سخت در اشتباهیداگر فکر می‌کنید فلان موتور بازی سازی (Game Engine) بهترین است، سخت در اشتباهیداگر فکر می‌کنید طراحی مبتنی بر داده (Data-Oriented Design) بهترین روش است یا طراحی مبتنی بر مولفه (Component Model) یا طراحی شی‌گرا (Object Oriented)، سخت در اشتباهیداگر فکر می‌کنید فلان پلاگین (Plugin)، بسته نرم افزاری (Package)، کتابخانه (Library) بهترین است، سخت در اشتباهیدهمه اینها در بین راه حل جایگزین متناظر خود مزایا و معایبی دارند که گاهی فقط گذر زمان آنها را آشکار خواهد کرد، برای همین همیشه باید تحلیل هزینه فایده (Cost-benefit analysis) انجام دهید، متغیرهایی که روی تصمیمتان موثر هستند را معین کنید و بعد از مقایسه ترجیحات انتخاب کنید.برای یک پروژه فلان راه حل مناسب است، برای پروژه دیگر راه حل دیگر، برای یک تیم با ویژگی‌های مشخص فلان راه‌کار مناسب است برای تیم دیگر راه‌کار دیگر.این مساله را می‌توان شبیه مسایل بهینه سازی (Optimization) با فضای حالت بزرگ دید و راه حل‌ها را یک کمینه محلی (Local Minimum) در فضای حالت، مثلا باید بردار ویژگی را مشخص کنیم و به صورت گرادیان کاهشی (Gradient descent) به سمت هدف حرکت کنیم.گرادیان کاهشی، در فضای حالتی با ۳ ویژگیمثالی از مبادلهیکی از ساده‌ترین مبادله‌ها که درک آن ساده‌ست و احتمالا برای خیلی‌ها پیش آمده، داد و ستد بین پرداش (CPU) و حافظه (Memory) است. گاهی ما با مصرف کردن بیشتر حافظه تلاش می‌کنیم میزان پردازش را کاهش دهیم و برعکس گاهی هم با مصرف بیشتر پردازشگر سعی می‌کنیم از میزان حافظه مصرفی بکاهیم.مبادله بین پردازش و حافظه یکی از شایع ترین تصمیماتی است که در حوزه نرم افزار با آن مواجهیم، مثلا باید تصمیم بگیریم که داده‌ها را فشرده کنیم یا نکنیم؟ فشرده سازی مصرف حافظه و ذخیره سازی را بهبود می‌بخشد ولی برای دسترسی به داده‌ها نیاز به پردازش بیشتری خواهیم داشت. آیا داده‌ها را پیش پردازش کنیم یا نکنیم؟ پیش پردازش باعث مصرف بیشتر حافظه می‌شود ولی پردازش زمان اجرا را بهبود می‌بخشد.یکی دیگر از موقعیت‌هایی که معمولا مجبور به مبادله بین CPU و RAM می‌شویم زمان انتخاب ساختمان داده مناسب برای مساله‌مان است. به طور مثال انتخاب بین آرایه (Arrays) و لیست پیوندی (Linked Lists) را در نظر بگیرید.آرایه‌ها (Arrays)کارایی CPU:دسترسی تصادفی سریع (O(1)) به دلیل تخصیص حافظه پیوسته.پیمایش (Iteration) بهینه برای کش (cache-friendly) است، که دسترسی ترتیبی را سریع‌تر می‌کند.کارایی حافظه:اندازه ثابت، بنابراین استفاده از حافظه قابل پیش‌بینی و بهینه است.هیچ سربار حافظه‌ای برای اشاره‌گرها یا متاداده‌ها وجود ندارد.مبادله (Trade-off): آرایه‌ها برای دسترسی سریع و پیمایش عالی هستند، اما در اندازه انعطاف‌پذیر نیستند (تغییر اندازه هزینه‌بر است) و اگر از قبل بیش از حد بزرگ اختصاص داده شوند، ممکن است حافظه هدر رود.لیست‌های پیوندی (Linked Lists)کارایی CPU:دسترسی تصادفی کند (O(n)) زیرا نیاز به پیمایش دارد.درج و حذف سریع (O(1)) است اگر اشاره‌گری به گره مورد نظر داشته باشید.کارایی حافظه:اندازه پویا، بنابراین حافظه با نیاز رشد می‌کند.هر گره به حافظه اضافی برای اشاره‌گرها نیاز دارد (سربار).مبادله (Trade-off): لیست‌های پیوندی در اندازه انعطاف‌پذیر هستند و برای درج/حذف کارآمدند، اما برای دسترسی تصادفی کندتر هستند و به دلیل اشاره‌گرها حافظه بیشتری استفاده می‌کنند.مثال‌ها بسیاری در مورد مبادله بین پردازش و حافظه وجود دارد که با جستجو در اینترنت می‌توانید آنها را پیدا کنید.ویژگی‌های کیفی نرم افزار (Quality Attributes)معمولا نیازمندی‌های یک نرم‌افزار را به دوسته نیازمندی‌های کارکردی (Functional) و نیازمندی‌های غیر کارکردی (Non-Functional) تقسیم می‌کنند، در برخی کتاب‌ها (مثل Object Oriented Software Construction) نیز آنها را به دو دسته درونی (Internal) و بیرونی (External) تقسیم می‌کنند.ویژگی‌های عملکردی (Functional): این ویژگی‌ها به آنچه سیستم انجام می‌دهد مربوط می‌شوند و مستقیماً به نیازهای کاربر و عملکرد سیستم مرتبط هستند.ویژگی‌های غیرعملکردی (Non-Functional): این ویژگی‌ها به چگونگی عملکرد سیستم مربوط می‌شوند و معمولاً به کیفیت اجرا، تجربه کاربری و قابلیت‌های فنی سیستم مرتبط هستند.وقتی افراد در مورد نیازمندی‌های غیرعملکردی صحبت می‌کنند، معمولاً به ویژگی‌های کیفی اشاره دارند.نیازمندی‌های غیرعملکردی به‌طور مستقیم در نرم‌افزار یا سخت‌افزار پیاده‌سازی نمی‌شوند. در عوض، آن‌ها به عنوان منشأیی برای عملکردهای مشتق‌شده، تصمیم‌های معماری یا رویکردهای طراحی و پیاده‌سازی عمل می‌کنند. برخی از نیازمندی‌های غیرعملکردی محدودیت‌هایی را اعمال می‌کنند که انتخاب‌های موجود برای طراح یا توسعه‌دهنده را محدود می‌سازند. برای مثال، یک نیازمندی قابلیت همکاری می‌تواند طراحی محصول را به استفاده از رابط‌های استاندارد خاص محدود کند.برخی از ویژگی‌های کیفی مهم برای سیستم‌های نرم‌افزاریقابلیت نگهداری (Maintainability): آیا توسعه‌دهندگان می‌توانند به راحتی سیستم را تغییر، اصلاح و بهبود بخشند؟عملکرد (Performance): آیا سیستم به اندازه کافی سریع به اقدامات کاربر و رویدادهای خارجی پاسخ می‌دهد؟کارایی (Efficiency): آیا سیستم از منابع کامپیوتری به صورت اقتصادی استفاده می‌کند؟مقیاس‌پذیری (Scalability): آیا سیستم می‌تواند به راحتی برای پذیرش کاربران، داده‌ها یا تراکنش‌های بیشتر گسترش یابد؟قابلیت اطمینان (Reliability): آیا سیستم زمانی که قرار است کار کند، بدون خطا اجرا می‌شود؟مقاومت (Robustness): آیا سیستم به طور منطقی به ورودی‌های نادرست و شرایط عملیاتی غیرمنتظره پاسخ می‌دهد؟قابلیت حمل (Portability): آیا می‌توان سیستم را به راحتی به پلتفرم‌های مختلف منتقل کرد؟قابلیت استفاده مجدد (Reusability): آیا توسعه‌دهندگان می‌توانند بخش‌هایی از سیستم را در محصولات دیگر مورد استفاده مجدد قرار دهند؟قابلیت دسترسی (Availability): آیا می‌توانم از سیستم در زمان و مکانی که نیاز دارم، استفاده کنم؟قابلیت نصب (Installability): آیا می‌توانم به راحتی سیستم و ارتقاء آن را نصب، حذف و دوباره نصب کنم؟یکپارچگی (Integrity): آیا سیستم در برابر نادرستی، خرابی و از دست رفتن داده‌ها محافظت می‌کند؟قابلیت استفاده (Usability): آیا کاربران می‌توانند به راحتی نحوه استفاده از سیستم را برای انجام وظایف خود یاد بگیرند؟قابلیت تأیید (Verifiability): آیا آزمایش کنندگان می‌توانند تعیین کنند که آیا نرم‌افزار به درستی پیاده‌سازی شده است یا خیر؟ایمنی (Safety): آیا سیستم از کاربران در برابر آسیب و اموال در برابر خسارت محافظت می‌کند؟امنیت (Security): آیا سیستم در برابر حملات بدافزار، مزاحمان، کاربران غیرمجاز و سرقت داده‌ها محافظت می‌کند؟انطباق با استانداردها (Conformance to standards): آیا سیستم با تمام استانداردهای قابل اجرا برای عملکرد، ایمنی، ارتباطات، گواهینامه و رابط‌ها مطابقت دارد؟قابلیت همکاری (Interoperability): آیا سیستم به خوبی با سایر سیستم‌ها برای تبادل داده و خدمات ارتباط برقرار می‌کند؟در طراحی و توسعه سیستم‌های نرم‌افزاری، مبادله‌های کیفیتی (Quality Attributes Trade-offs) بسیار رایج هستند. امکان دستیابی به بهترین حالت ممکن برای تمامی جنبه‌های قابلیت‌ها و ویژگی‌های یک سیستم نرم‌افزاری وجود ندارد. همواره مبادله‌هایی اجتناب‌ناپذیر بین جنبه‌های مختلف کیفیت وجود دارد — بهبود یک جنبه اغلب باعث کاهش اجتناب‌ناپذیر در جنبه‌ای دیگر می‌شود. در نتیجه، بخش ضروری از تحلیل نیازمندی‌ها، درک این موضوع است که کدام ویژگی‌های کیفی از اهمیت بیشتری برخوردارند تا طراحان بتوانند به‌طور مناسب به آن‌ها بپردازند.مثال‌هایی از مبادله بین ویژگی‌های کیفیانعطاف‌پذیری (Flexibility) در مقابل عملکرد (Performance)مبادله: افزایش انعطاف‌پذیری سیستم (مانند پشتیبانی از پلاگین‌ها یا ماژول‌های اضافی) ممکن است عملکرد سیستم را کاهش دهد.مثال: استفاده از معماری‌های مبتنی بر پلاگین ممکن است باعث افزایش سربار و کاهش سرعت اجرا شود.کارایی (Efficiency) در مقابل قابلیت نگهداری (Maintainability)مبادله: کد بهینه‌شده برای کارایی ممکن است خوانایی و قابلیت نگهداری کم‌تری داشته باشد.مثال: استفاده از بهینه‌سازی‌های سطح پایین (مانند کد اسمبلی) ممکن است کارایی را افزایش دهد، اما نگهداری و توسعه آن را دشوار کند.عملکرد (Performance) در مقابل مقیاس‌پذیری (Scalability)مبادله: بهبود عملکرد سیستم (مانند پاسخ‌دهی سریع‌تر) ممکن است نیاز به بهینه‌سازی‌های خاصی داشته باشد که مقیاس‌پذیری سیستم را محدود کند.مثال: استفاده از کش‌های حافظه برای افزایش سرعت ممکن است باعث شود سیستم در صورت افزایش تعداد کاربران، به‌درستی مقیاس‌پذیر نباشد.امنیت (Security) در مقابل قابلیت استفاده (Usability)مبادله: افزایش امنیت (مانند احراز هویت چندمرحله‌ای یا رمزنگاری قوی) ممکن است تجربه کاربری را پیچیده‌تر کند.مثال: اضافه کردن لایه‌های امنیتی بیشتر می‌تواند باعث شود کاربران برای دسترسی به سیستم، مراحل بیشتری را طی کنند.قابلیت استفاده (Usability) در مقابل امنیت (Security)مبادله: ساده‌سازی رابط کاربری برای بهبود قابلیت استفاده ممکن است امنیت سیستم را کاهش دهد.مثال: اجازه دادن به کاربران برای استفاده از رمزهای عبور ساده ممکن است تجربه کاربری را بهبود بخشد، اما امنیت سیستم را کاهش می‌دهد.قابلیت نگهداری (Maintainability) در مقابل کارایی (Efficiency)مبادله: کدی که به‌راحتی قابل نگهداری و تغییر است (مانند استفاده از الگوهای طراحی ماژولار) ممکن است کارایی کم‌تری نسبت به کد بهینه‌شده داشته باشد.مثال: استفاده از ماژول‌های مستقل ممکن است باعث افزایش سربار (Overhead) در اجرای سیستم شود.قابلیت اطمینان (Reliability) در مقابل هزینه (Cost)مبادله: افزایش قابلیت اطمینان (مانند افزونگی سخت‌افزاری یا استفاده از پایگاه‌داده‌های توزیع‌شده) ممکن است هزینه‌های توسعه و نگهداری را به‌طور قابل توجهی افزایش دهد.مثال: پیاده‌سازی سیستم‌های توزیع‌شده برای اطمینان از دسترسی دائمی، هزینه‌های زیرساختی و عملیاتی را افزایش می‌دهد.قابلیت انتقال (Portability) در مقابل عملکرد (Performance)مبادله: طراحی سیستم برای اجرا روی پلتفرم‌های مختلف (مانند استفاده از زبان‌های چندسکویی) ممکن است عملکرد سیستم را کاهش دهد.مثال: استفاده از فریم‌ورک‌های چندسکویی مانند جاوا یا .NET ممکن است باعث کاهش سرعت اجرا نسبت به کد نیتیو (Native) شود.مقیاس‌پذیری (Scalability) در مقابل پیچیدگی (Complexity)مبادله: افزایش مقیاس‌پذیری سیستم (مانند افزودن گره‌های بیشتر در یک سیستم توزیع‌شده) ممکن است پیچیدگی طراحی و مدیریت سیستم را افزایش دهد.مثال: سیستم‌های توزیع‌شده مانند Apache Kafka مقیاس‌پذیری بالایی دارند، اما مدیریت و اشکال‌زدایی آن‌ها بسیار پیچیده است.قابلیت اطمینان (Reliability) در مقابل زمان توسعه (Development Time)مبادله: افزایش قابلیت اطمینان (مانند تست‌های گسترده و پیاده‌سازی مکانیزم‌های بازیابی خطا) ممکن است زمان توسعه را افزایش دهد.مثال: افزودن تست‌های واحد و یکپارچه‌سازی مداوم (CI/CD) ممکن است زمان تحویل محصول را طولانی‌تر کند.این مبادله‌ها نشان می‌دهند که در طراحی سیستم‌های نرم‌افزاری، باید اولویت‌های پروژه و نیازهای ذینفعان به دقت بررسی شوند تا تعادل مناسبی بین ویژگی‌های کیفی مختلف برقرار شود.تجربه یک انتخابزمانی که در حال آماده شدن برای شروع پروژه Wizard Of Legend 2 بودیم، من و البرز غرایی به عنوان مهندسین پروژه باید تصمیم می‌گرفتیم که با توجه به نیازمندی‌های پروژه و تیم از کدام یک از موتورهای بازی‌سازی موجود استفاده کنیم.در آن زمان یعنی اسفند ۱۴۰۱ ما تجربه سالها کار با موتور Unity را داشتیم و تقریبا تمام چم و خم کار با آن را می‌دانستیم، اما از طرفی مشکلات موجود در آن را هم می‌دانستیم.از آنجایی که بازی یک حالت بازی چند نفره آنلاین داشت امکانات شبکه برای ما اهمیت داشت، در آن زمان Unity راه‌کار پایداری برای شبکه نداشت و در حالت تغییر راه‌کار شبکه خود بود، در حالی که آنریل امکانات شبکه خوب و پایداری داشت.این که ما چه قدر با این موتور جدید آشنا بودیم و چه مقدار زمان صرف یادگیری آن می‌شد قطعا جزو معیارهای ما بود، تجربه قبلی کارکردن با یونیتی نکته مثبتی برای آن محسوب می‌شد.بودن Blueprint و یکپارچگی آن با همه زیر سیستم‌ها برای آنریل مزیت خیلی خوبی محسوب می‌شد و در لایه‌هایی سرعت تکرار (Iteration) را بسیار افزایش می‌داد و باعث می‌شد افرادی از تیم که برنامه‌نویس نبودند هم بتوانند برخی کارها را انجام دهند.استفاده از زبان ++C برای آنریل مزیت بزرگی بود، هم به لحاظ بهینه بودن و سرعت اجرا هم به خاطر این که در جزییات پیاده‌سازی درگیر جنگ با Garbage Collection نمی‌شدیم. در پروژه‌های قبلی مجبور بودیم با زبان #C طور خاصی برخورد کنیم تا کمترین تلفات حافظه را داشته باشیم.بزرگی و پیچیدگی آنریل باعث ایجاد نوعی لختی می‌شود و نیاز به افراد در حوزه‌های تخصصی را بالا می‌برد، برای همین به تیم بزرگ تری نیاز دارد، که آن را برای پروژه‌های کوچک و متوسط نامناسب می‌کند.مقایسه موتور Unity و Unrealما بدون هیچ تعصبی مزایا و معایب هر دو را پای تخته نوشتیم و با بالا و پایین کردن معیارها و ترجیحات تیمی تصمیم گرفتیم برای این پروژه از موتور Unreal استفاده کنیم.با این که این موتور برای ما جدید بود بخشی از زمان را باید صرف یادگیری آن می‌کردیم ولی بودن امکانات شبکه در دسترس و یکپارچگی آن با کد و Blueprint همچنین پلاگین Gameplay Ability System باعث صرفه جویی زیادی در زمان و راحتی پیاده سازی مکانیک‌های پیچیده شد.نکته پایانیدر پایان باید بگویم که در انتخاب‌های مهندسی خود نباید تعصب داشت، باید از تجربیات دیگران درس بگیریم، نیازمندی‌های پروژه و تیم را بشناسید، ترجیحات خود را در نظر بگیرید و آگاهانه انتخاب کنید که چه چیزی می‌دهید و چه چیزی به دست می‌آورید، تا یک مبادله درست برای پروژه انجام دهیم.اگر کسی بعد از خواندن این نوشته همچنان بر این باور است که فلان راه‌حل بهترین است و در همه حالت‌ها باید از آن استفاده کرد، باید به کارکرد سالم ذهن خود شک کند! البته اگر کارکرد سالم ذهنی کسی مشکل داشته باشد توانایی شک کردن به کارکرد ذهنی خود را نیز نخواهد داشت! D:</description>
                <category>حجت جعفری</category>
                <author>حجت جعفری</author>
                <pubDate>Sat, 22 Feb 2025 13:51:47 +0330</pubDate>
            </item>
                    <item>
                <title>کجای بازی سازی سخت است؟</title>
                <link>https://virgool.io/@hojjatjafary/%DA%A9%D8%AC%D8%A7%DB%8C-%D8%A8%D8%A7%D8%B2%DB%8C-%D8%B3%D8%A7%D8%B2%DB%8C-%D8%B3%D8%AE%D8%AA-%D8%A7%D8%B3%D8%AA-xjvq1v6bbg97</link>
                <description>متن پیش رو تجربه و نظر شخصی من در مدت نزدیک به سیزده سال حضور در تیمی است که چندین پروژه بین‌المللی موفق ساخته است، لذا ممکن است اشخاص دیگر در حوزه‌های دیگر و از زوایای دیگر به مساله نگاه کنند و  نظرات متفاوتی داشته باشند.سوال اصلی این است که آیا در دنیای امروز با پیشرفت‌های صورت گرفته، آموزش‌های رایگان و ابزارهای در دسترس، همچنان ساخت بازی ویدیویی کار سختی است؟با توجه به همه این مسایل ساخت بازی نسبت به گذشته راحت‌تر شده ولی حداقل کیفیت لازم برای ساخت یک بازی آنقدر بالا رفته که باز هم ساخت یک بازی استاندارد با دشواری زیادی همراه است. علاوه بر کیفیت دلایل دیگری نیز وجود دارد که باهم بررسی می‌کنیم.رقابت شدیدصنعت بازی‌های ویدیویی در طول سالهای متمادی شاهد رشد بوده، همزمان با رشد مخاطبین و توسعه بازه سنی بازیکن‌ها، تعداد شرکت‌های بازی سازی نیز افزایش یافته که در نهایت باعث رشد تولید و تعداد بازی‌های منتشر شده در طول این سالها شده است.با ورودی گوشی‌های همراه هوشمند سرعت رشد این صنعت بیشتر شد به طوری که در حال حاضر تخمین زده می‌شود که روزانه بیش ۵۰۰ بازی در هر یک از فروشگاه‌های AppStore و Google play منتشر می‌شود.این رشد در بازار بازی‌های PC و کنسول‌ها نیز قابل مشاهده است، فقط در فروشگاه Steam در سال ۲۰۲۴ بیش از ۱۵ هزار بازی منتشر شده است!همچنین ابزارهای ساخت بازی و به خصوص موتورهای بازی سازی مثل Unity و Unreal هم در دسترس عموم قرار گرفتند که باعث کاهش موانع ورود تازه کارها و تیم‌های کوچک به این صنعت شد.تعداد بازی‌های منتشر شده سالیانه در فروشگاه Steamدر چنین بازار بزرگ، پیچیده و رقابتی هیچ تضمینی برای موفقیت نیست، ممکن است شما بازی خوبی ساخته باشید اما به دلایل گوناگون نتوانید در بازار موفق شوید.یکی از بزرگترین مشکلات تیم‌ها و شرکت‌های ساخت بازی در چنین بازاری دیده شدن است.مساله سرگرمی (Fun)نخستین و مهم‌ترین نیاز یک بازی ویدیویی، سرگرم‌کننده و لذت‌بخش بودن آن است. این مسئله در سایر رسانه‌ها نیز مطرح است؛ برای مثال، کدام رمان سرگرم‌کننده‌تر و بهتر است؟ کدام پویانمایی یا فیلم، جذاب‌تر است؟ در هیچ‌کدام از این رسانه‌ها، معیارهای کمی دقیقی برای سنجش و مقایسه وجود ندارد و نمی‌توان با اندازه‌گیری عوامل خاص، برتری آن‌ها را مشخص کرد. برخی، اقبال عمومی را نشانه‌ای از خوب بودن محصول می‌دانند و برخی دیگر، نظرات و امتیازات منتقدین را ملاک قرار می‌دهند. در هر صورت، مطلوب آن است که محصول نهایی، هم نظر مخاطبان را جلب کند و هم مورد تحسین منتقدان قرار گیرد.اساساً، از آنجا که با انسان و فرهنگ انسانی مواجهیم، پیچیدگی مسئله دوچندان می‌شود و تعیین معیار کمی برای مسائل، کار دشوار و شاید غیرممکنی به نظر می‌رسد. بازی نیز از این قاعده مستثنا نیست.موضوع زمانی دشوارتر می‌شود که بخواهیم از این رسانه برای انتقال پیام نیز استفاده کنیم.مساله تعامل (Interactivity)یکی از تفاوت‌های اصلی بازی رایانه‌ای با سایر رسانه‌های قصه‌گو مثل رمان، فیلم و پویانمایی مساله تعاملی بودن آن است. بازیکن در بازی با دنیای بازی در تعامل است یعنی کارهایی انجام می‌دهد و نتیجه آن کارها را می‌بیند.در حالی که در سایر رسانه‌ها مخاطب نقشی منفعل دارد و فقط به تماشا یا شنیدن محتوا می‌پردازد، در بازی‌های ویدیویی، بازیکن به طور فعال در داستان و روند بازی مشارکت می‌کند. تصمیمات و عملکرد بازیکن، مستقیما بر نتیجه و پیشرفت بازی تاثیر می‌گذارد و تجربه‌ای شخصی و منحصر به فرد را برای او رقم می‌زند و باعث احساس عاملیت می‌شود.تعامل پذیری باعث می‌شود که بازیکن بیشتر در دنیای بازی غرق شود و احساس حضور و تعلق بیشتری به آن داشته باشد. این امر به ویژه در بازی‌هایی که دارای داستان جذاب و شخصیت‌های پرداخته شده هستند، بیشتر نمود پیدا می‌کند.تعامل پذیری باعث می‌شود تا ارائه پیام در این رسانه نسبت به سایر رسانه‌ها دشواری بیشتری داشته باشد.تقلید یا نوآوری (Creativity)در طول سالیانی که از پیدایش بازی‌های ویدیویی می‌گذرد، بازی‌های موفق بسیاری ساخته شده‌اند که گاهی به الگوهایی برای تقلید دیگران تبدیل شده‌اند. با گذشت زمان، اصول و چارچوب‌هایی از این بازی‌ها استخراج شده است. بسیاری از بازی‌های ساخته شده در واقع تکرار الگوهای پیشین هستند که فقط رنگ و لعاب جدیدی به آنها داده شده است.رقابت شدید و افزایش حجم تولید به مرور زمان، کار خلاقیت و نوآوری را برای طراحان بازی سخت‌تر کرده است.یکی از عواملی که می‌تواند به دیده شدن و موفقیت تیم‌های کوچک و مستقل کمک کند، نوآوری است. این تیم‌ها بدون نوآوری عملاً شانسی برای موفقیت نخواهند داشت. اما این یک انتخاب بزرگ برای تیم‌های سازنده بازی است: گام نهادن در یک مسیر پرپیچ‌وخم که سرشار از عدم قطعیت و مشکل است یا رفتن به مسیر پرتکرار و معمولی گذشته.در نهایت، بهترین راهکار برای تیم‌های سازنده بازی، ایجاد تعادل بین تقلید و نوآوری است. می‌توان از عناصر موفق بازی‌های دیگر الهام گرفت و در عین حال، ایده‌های جدید و نوآورانه را نیز در بازی خود پیاده‌سازی کرد. این امر می‌تواند منجر به تولید بازی‌هایی جذاب و موفق شود که هم برای مخاطبان و هم برای سازندگان آن رضایت‌بخش باشند.پیچیدگی‌ فنی (Technical Complexity)ساخت بازی به لحاظ فنی، یکی از دشوارترین کارها در حوزه نرم‌افزار است. بازی، نوعی نرم‌افزار شبیه‌سازی پیچیده است که در هر تکرار حلقه بازی، تعداد زیادی زیرسیستم با یکدیگر همکاری می‌کنند و تعداد زیادی شیء درون بازی با هم در تعامل هستند. با وجود اینکه امروزه موتورهای ساخت بازی کاربرپسند در دسترس هستند، همچنان مهارت فنی بالایی برای ساخت بازی مورد نیاز است.بسته به مقیاس پروژه و پیچیدگی طراحی، برای مثال ویژگی‌های (Features) درون بازی، پیاده‌سازی فنی نیز سخت‌تر و پیچیده‌تر می‌شود؛ به گونه‌ای که پیچیدگی فنی در بازی‌های آنلاین چندنفره، چندین برابر می‌شود.پیاده‌سازی فنی بازی همواره باید به گونه‌ای باشد که یافتن Bugها و اشکالات، آسان باشد.از آنجا که بسامد تغییر در طول فرآیند ساخت بازی زیاد است، کدهای بازی باید به گونه‌ای نوشته شوند که هزینه اعمال تغییرات تا جای ممکن پایین باشد (Flexibility).علاوه بر انعطاف‌پذیری، یکی از نیازمندی‌های اصلی ساخت بازی، کارایی (Performance) است. به همین دلیل، نیاز به مهارت‌های جدی برای بهینه‌سازی (Optimization) بازی است.ساختار تیم (Team Structure)ساخت بازی اصولا یک کار گروهی است، گرچه مواردی وجود دارد که افرادی به تنهایی بازیهایی ساخته‌اند ولی با توجه به ماهیت این رسانه ما نیاز به مهارت در حوزه‌های مختلفی داریم.بنابراین تیم بازی سازی یک تیم چند رشته‌ای است (multidisciplinary) و افراد متخصص در حوزه‌های متفاوتی از جمله، خلاقیت (طراحی بازی، طراحی مرحله، طراحی روایت)، هنری (گرافیک، موسیقی، جلوه‌های صوتی، جلوه‌های بصری، پویانمایی)، فنی (برنامه‌نویس سیستم، برنامه نویس Game Play، برنامه نویس ابزار، برنامه نویس سرور)، مدیریت و تولید است.با وجود تخصص‌های گوناگون و وابستگی‌های متقابل، اعضای تیم باید به طور مداوم با یکدیگر در ارتباط باشند و هماهنگ عمل کنند. این امر نیازمند ساختار ارتباطی مناسب و مدیریت قوی است.پیچیدگی فرآیند تولید وابستگی کارهابا توجه به ساختار چند رشته‌ای تیم بازی‌سازی، تعامل و همکاری بین اعضای آن چالش‌های مختلفی را به همراه دارد. انتقال واضح ایده‌ها، بازخوردها و جزئیات فنی بسیار مهم است، اما سوءتفاهم‌ها و تفسیرهای نادرست رایج هستند.ممکن است اعضای تیم ایده‌های متفاوتی در مورد جهت و سمت و سوی بازی داشته باشند که منجر به درگیری‌هایی می‌شود که باید حل شوند. به همین دلیل، همواره نیاز است تا تیم دیدگاه و افق دید مشترکی از پروژه داشته باشند.چالش دیگر، گردش کار و وابستگی کارها به یکدیگر است. اینکه مدل‌سازی یک کاراکتر جدید کی باید شروع شود، کی باید حرکت‌های آن پویانمایی شود، کی باید جلوه‌های صوتی و بصری به آن اضافه شود، چرخه بازخورد چگونه باشد و بسیاری از مسائل دیگر، پرسش‌ها و دشواری‌های مدیریت تیم و فرآیند ساخت بازی است.در این میان، رسیدن به زمان‌بندی‌ها و کنترل هزینه نیز باید انجام شود که اصلاً کار راحتی نیست.صنعت بازی‌سازی به سرعت در حال تغییر و تحول است. فناوری‌های جدید، سبک‌های بازی و انتظارات مخاطبان به طور مداوم در حال تغییر هستند. تیم بازی‌سازی باید قادر به تطبیق با این تغییرات باشد که این امر می‌تواند ساختار تیم را تحت تأثیر قرار دهد.برای غلبه بر این چالش‌ها، تیم‌های بازی‌سازی موفق از راهکارهای مختلفی استفاده می‌کنند، از جمله:ارتباط شفاف و مؤثر: ایجاد کانال‌های ارتباطی مناسب و برگزاری جلسات منظم برای بحث و تبادل نظر.تعریف نقش‌ها و مسئولیت‌ها: مشخص کردن دقیق وظایف هر یک از اعضای تیم و جلوگیری از ابهام و تداخل در کارها.استفاده از ابزارهای مدیریت پروژه: استفاده از نرم‌افزارها و ابزارهای مدیریت پروژه برای برنامه‌ریزی، پیگیری و مدیریت وظایف و زمان‌بندی‌ها.ایجاد فرهنگ تیمی مثبت: ایجاد محیطی دوستانه و حمایتی که در آن اعضا بتوانند به راحتی ایده‌های خود را مطرح کنند و بازخورد بگیرند.مدیریت تعارض: داشتن استراتژی‌های مناسب برای حل اختلافات و درگیری‌های احتمالی بین اعضای تیم.آموزش و توسعه: سرمایه‌گذاری در آموزش و توسعه اعضای تیم برای به‌روز ماندن با آخرین تکنولوژی‌ها و روش‌های روز دنیا.با استفاده از این راهکارها، تیم‌های بازی‌سازی می‌توانند چالش‌های موجود را پشت سر گذاشته و بازی‌های با کیفیت و موفق تولید کنند.کنترل کیفیتیکی دیگر از دشواری‌های ساخت بازی‌های ویدیویی، تست و ارزیابی آن است. با اینکه ابزارها و روش‌هایی برای تست خودکار بازی‌ها ارائه شده است، اما به دلیل پیچیدگی بازی‌ها، نمی‌توان تمام مسائل بازی را به صورت خودکار تست کرد. بازی یک محیط پویا و تعاملی است و بسیاری از اشکالات آن فقط به صورت بصری و توسط انسان قابل تشخیص است. به همین دلیل، تست بازی توسط عامل انسانی اجتناب‌ناپذیر است.همچنین، ارزیابی طراحی بازی و حس و حال آن به هیچ عنوان قابل خودکارسازی نیست؛ چرا که کاملاً وابسته به ادراک انسان از تعامل با دنیای بازی است.در واقع، تست بازی فرایندی پیچیده و چندوجهی است که شامل موارد زیر می‌شود:تست فنی: این بخش از تست، بر روی عملکرد صحیح بازی از نظر فنی تمرکز دارد. مواردی مانند شناسایی و رفع باگ‌ها، مشکلات گرافیکی، عملکرد بازی بر روی سخت‌افزارهای مختلف، و پایداری بازی در شرایط مختلف در این بخش بررسی می‌شوند.تست گیم‌پلی: در این بخش، مکانیک‌های بازی، تعادل، و جذابیت گیم‌پلی مورد ارزیابی قرار می‌گیرند. مواردی مانند روان بودن کنترل بازی، چالش‌برانگیز بودن مراحل، و جذابیت داستان در این بخش بررسی می‌شوند.تست تجربه کاربری: این بخش از تست، بر روی تجربه کلی کاربر از بازی تمرکز دارد. مواردی مانند رابط کاربری، آموزش‌های بازی، و نحوه تعامل کاربر با بازی در این بخش بررسی می‌شوند.تست محتوا: در این بخش، کیفیت و صحت محتوای بازی، مانند داستان، دیالوگ‌ها، و تصاویر مورد ارزیابی قرار می‌گیرند.همانطور که مشخص است، بسیاری از این موارد نیازمند حضور عامل انسانی برای ارزیابی و بازخورد هستند و نمی‌توان آنها را به صورت خودکار انجام داد. به همین دلیل، تست بازی یکی از مراحل مهم و زمان‌بر در ساخت بازی‌های ویدیویی است.منابع:https://www.statista.com/statistics/552623/number-games-released-steam/</description>
                <category>حجت جعفری</category>
                <author>حجت جعفری</author>
                <pubDate>Sun, 02 Feb 2025 17:50:43 +0330</pubDate>
            </item>
                    <item>
                <title>آیا تولیدات هوش مصنوعی واقعا هنر محسوب می‌شوند؟</title>
                <link>https://virgool.io/@hojjatjafary/is-ai-art-real-art-eeduwggfurn4</link>
                <description>در جلسه هیت داوران دهمین جشنواره بازی‌های رایانه‌ای فجر موضوعی مطرح شد که بحث روز و جنجالی محافل مختلف است، اینکه نحوه برخورد جشنواره با آثاری که احتمالا در تولید آنها از هوش مصنوعی استفاده شده، چگونه باید باشد؟بحث بالا گرفت و به سرعت مخالفان و موافقان سنگرگیری کردند! البته موضوع آنقدر پیچیده و بغرنج است که نیاز به بحث‌های طولانی در آن کاملا طبیعی است.اعتراف می‌کنم حرف زدن از هنر برای مهندسی چون من که شخصیتی منطقی دارد و تا به امروز ارتباط نزدیکی با هنر نداشته کار بسیار سختی است و به نظر می‌رسد وارد مقولهٔ پیچیده‌ای شده‌ام. اما حس می‌کنم باید دیوارهای خود ساختهٔ اطرافم را فرو بشکنم و وارد سرزمین شگفت انگیزی شوم که تا به حال تجربه‌اش نکرده‌ام. ادعایی هم در این زمینه ندارم صرفا می‌نویسم تا شاید موضوع کمی برای خودم روشن شود.همواره معتقد بودم پیشرفت علم و فناوری به خصوص هوش مصنوعی باعث ایجاد سوالهای عمیقی در مورد روابط و عواطف انسانی می‌شود و ما به پیچیدگی‌های بیشتر از زوایای زندگی خودمان پی خواهیم برد.سوال این است که آیا هنری که توسط هوش مصنوعی تولید می‌شود واقعا هنر است و آیا کاربران این نرم افزارها اجازه دارند خود را هنرمند بنامند؟مواضعدر هر موضوعی طیفی از نظرات وجود دارد که از سیاه به سفید و از صفر تا صد گسترده شده‌اند، اما معمولا دو طرف طیف بیشتر به چشم می‌آیند چون تفکیک پذیری آنها برای ذهن راحت تر است. مثلا برخی مواضع تندی در مقابل آثار تولید شده توسط هوش مصنوعی گرفته و روز انتشار سرویس‌های تولید تصویر را روز مرگ هنر نامیدند. برخی دیگر آن را روز تولد نوع جدیدی از هنر می‌دانند و آن را جشن می‌گیرند و هر مخالفی را با برچسب لودیت‌های جدید از میدان به در می‌کنند.اما نظرات میانه‌ای هم وجود دارد، مثلا گروهی هوش مصنوعی را فقط ابزار جدیدی در دست هنرمندان می‌دانند و آنرا با قلم مو یا قلم نوری ، عکاسی و سایر هنرهای دیجیتال مقایسه می‌کنند.بعضی ظهور این ابزار را شروع تازه‌ای در جهت پیشرفت نگاه بشر به هنر می‌دانند و همه چیز را به گذر زمان می‌سپارند و معتقدند گذر زمان مشخص می‌کند که این ابزار چه تاثیری در هنر خواهد گذاشت مثل ظهور دوربین عکاسی.برخی چون مفهوم پیشرفت را لزوما خطی نمی‌بینند، معتقدند برخی فناوری‌ها عمر کوتاهی دارند و در دهه‌های اخیر شاهد بسیاری از آنها بوده‌ایم که آمده‌اند و رفته‌اند مثل فناوری لوح فشرده و BlueRay و غیره برای همین باید صبر کرد و دید.هنر چیست؟!سوال در مورد چیستی هنر مربوط به این روزها نیست و سوالی به قدمت بودن انسان است، برای همین تعریف هنر برای قرنها مورد بحث بین فلاسفه بوده است، لذا مانند بسیاری از مسایل پیچیده بشری نمی‌توان تعریف واحدی برای آن ارائه کرد، پذیرش چیزی به عنوان هنر در بین اجتماع انسانها در طول زمان تغییر می‌کند و به فرهنگ جاری وابسته است.به طور کلی هنر طیف گسترده‌ای از فعالیت‌های فرهنگی را شامل می‌شود که حول آثاری متمرکز شده‌اند که از استعدادهای خلاقانه یا خیال‌پردازانه استفاده می‌کنند و انتظار می‌رود تجربه‌ای ارزشمند را از طریق بیان قدرت عاطفی، ایده‌های مفهومی، زیبایی و/یا مهارت فنی، برانگیزند.تاریخ هنر بسیار مفصل و پر فراز و نشیب است که در اینجا مجال آن نیست. این سفر طولانی از نقاشی‌های غارنشینان تا هنرهای دیجیتال امروزی را در بر می‌گیرد. زمانی هنر را الهام می‌دانستند که از عالمی دیگر به هنرمند می‌رسد، در دوره‌ای دیگر آن را تقلید از طبیعت تعریف کردند و گاهی واقعگرایی معیار هنر بود. سبک‌ها و دیدگاه‌های مختلفی به وجود آمدند: دوره رنسانس، باروک، روکوکو، کلاسیک‌گرایی، رمانتیسم، امپرسیونیسم، پست‌امپرسیونیسم و هنر مدرن. در دوران مدرن قرن بیستم بسیاری از مفاهیم سنتی هنر به چالش کشیده شد و مباحثی مانند ماهیت هنر، نقش هنرمند و رابطه بین هنر و زندگی روزمره مورد سوال قرار گرفت، حتی کار به جایی رسید که سنگ توالت هم هنر حساب شد.چرا ما اثر هنری خلق می‌کنیم؟هنر از آغاز تمدن بشری به دلایل مختلفی برای انسان اهمیت داشته است. برخی از این دلایل عبارتند از:برقراری ارتباط با ایده های سیاسی، اجتماعی، معنوی، مذهبی یا فلسفیثبت و ضبط یک زمان، مکان، شخص یا شیء خاصایجاد حس زیباییبازتاب فرد و جامعهکاوش ماهیت ادراکآموزش، سرگرمی، درمانبرای لذت، یا ایجاد احساسات قوی   هنر غبار روزمرگی را از روح می شوید.پابلو پیکاسومهمترین ویژگی هنری که در تمام مراحل توسط انسان تولید می‌شود گره خوردن آن با عواطف و حالات درونی انسان است، و آنقدر پیچیده است که به راحتی توسط الگوریتم‌های مکانیکی قابل باز سازی نیست.بسیاری از هنرمندان در هنگام خلق اثر احساس خوشایندی از شور و لذت را تجربه می‌کنند که گاهی فراموش می‌کنند که باید غذا بخورند.برای همین منتقدین تولید هنر با هوش مصنوعی را مثل کار کارمندی و مهندسی می‌دانند تا یک کار هنرمندانه.هنر نرم‌افزاردر دنیای هنرهای زیبا، سنت طولانی هنر رویه‌ای (Procedural) و نرم افزاری وجود دارد.جورج نیس (Georg Nees) ریاضیدان، فیزیکدان و فیلسوف آلمانی، اولین فردی بود که در سال ۱۹۶۴ به طور عمومی هنری را که توسط کامپیوتر تولید شده بود، به نمایش گذاشت. جان کیج از روش های تصادفی برای ساخت موسیقی استفاده کرد. بسیاری از نقاشی‌های دیواری سول لوویت به‌عنوان فهرستی از دستورالعمل‌هایی نوشته شده‌اند که هر کسی می‌تواند از آنها پیروی کند. نرم‌افزار AARON هارولد کوهن نقاشی‌هایی را بر اساس مجموعه‌ای از قوانین رویه‌ای تصادفی که او نوشته است تولید می‌کند.حتی اگر نرم‌افزار، کارگران جمعی و/یا صنعتگران دستورالعمل‌های هنرمند را اجرا کرده باشند، هنرمند فردی است که کار را آغاز و هماهنگ کرده است. هیچ یک از این سیستم‌های نرم‌افزاری &quot;هنرمند&quot; نامیده نمی‌شود.هوش مصنوعی باهوش نیست!برای اینکه یک نرم‌افزار هوش مصنوعی را هنرمند بنامیم، انتظار می‌رود که به نوعی هوشمند، آگاه یا به طور مشابه در سطح انسان عمل کند.هیاهوی زیادی در مورد فناوری هوش مصنوعی وجود دارد و سوء تفاهم‌های زیادی نیز وجود دارد. مردم فکر می‌کنند که فناوری هوش مصنوعی هوشمند است، اما اینطور نیست. با توجه به نام گمراه‌کننده و ارائه گمراه‌کنندهٔ رسانه‌ای از آن، قابل درک است که مردم دچار سوء تفاهم‌ شوند.برازش خطی داده‌هاهیچ یک از نرم افزارهای هوش مصنوعی که امروزه در اختیار داریم، به معنای واقعی کلمه هوشمند نیستند. ابزارهای بسیار موفق هوش مصنوعی که در اختیار داریم، در اصل روش‌های بسیار پیچیده‌ای برای برازش داده‌ها هستند. این امر در مورد بزرگ‌ترین موفقیت‌های هوش مصنوعی امروزه صدق می‌کند: تشخیص تصویر، ترجمه زبان طبیعی، جستجوی وب، توصیه و هدف‌گیری تبلیغات. برای هر یک از این ابزارها، انسان‌ها مساله‌هایی را برای کار انتخاب می‌کنند، مدل‌ها را مهندسی می‌کنند، این مدل‌ها را با داده‌ها تطبیق می‌دهند و فرآیند مهندسی را تکرار می‌کنند تا زمانی که از نتایج راضی شوند.به طور خلاصه، وقتی مردم از یک &quot;هوش مصنوعی&quot; صحبت می‌کنند، بهتر است فقط آن را به عنوان &quot;نرم‌افزاری که توسط شخصی نوشته و با دقت تنظیم شده است تا برای یک کار مشخص به خوبی کار کند، احتمالاً شامل برخی مراحل برازش داده‌ها است&quot; در نظر بگیرید. نرم‌افزارهای هوش مصنوعی تفاوت چندانی با سایر نرم‌افزارهایی که ما استفاده می‌کنیم ندارند؛ فقط برای برخی مساله‌ها بسیار موفق‌تر هستند.فریبنمونه‌های بسیاری از چت‌بات‌ها و ربات‌های سطحی وجود دارند که مردم با آن‌ها تا حدودی رفتاری اجتماعی دارند، یا حتی توسط آن‌ها فریب خورده‌اند. مثال کلاسیک آن Eliza است، یک برنامه‌‌ٔ &quot;روان‌پزشک&quot; ساده‌ٔ مبتنی بر متن  که در سال ۱۹۶۴ توسعه یافت و بر اساس تطابق الگوهای ساده و تکرار آنچه کاربر تایپ می‌کند، عمل می‌کرد. این برنامه به عنوان نمایشی از سطحی بودن هوش مصنوعی آن زمان طراحی شده بود، اما به طور غیرمنتظره‌ای بسیاری از مردم احساسات انسانی را به این ماشین نسبت دادند. از آن زمان تاکنون، داستان‌های بسیاری از فریب خوردن مردم توسط &quot;چت‌بات‌ها&quot; در محیط‌های آنلاین وجود دارد. اما، پس از کنار رفتن پرده، واضح است که این چت‌بات‌ها هوش واقعی را نشان نمی‌دهند و اگر فکر می‌کردیم &quot;واقعی&quot; هستند، احساس فریب‌خوردگی می‌کنیم.مهارتفرهنگ لغات Merriam-Webster هنر را اینگونه تعریف کرده:استفاده آگاهانه از مهارت و تخیل خلاق، به ویژه در تولید اشیاء زیباشناسانه، هنر است.در طول قرن‌ها در فرهنگ غربی - از قرن یازدهم تا پایان قرن هفدهم - مردم هنر را به عنوان هر چیزی که با مهارت و به عنوان نتیجه دانش و تمرین انجام می‌شود، تعریف می‌کردند. این بدان معنا بود که هنرمندان هنر خود را تقویت می‌کردند و یاد می‌گرفتند که موضوعات خود را با مهارت تکرار کنند.در دوره رمانتیک قرن هجدهم، به عنوان واکنشی به عصر روشنگری و تأکید آن بر علم، شواهد تجربی و تفکر عقلانی، هنر شروع کرد به توصیف شدن نه فقط به عنوان چیزی که با مهارت انجام می‌شود، بلکه همچنین به عنوان چیزی که در پی زیبایی و برای بیان احساسات هنرمند خلق می‌شود. طبیعت ستایش می‌شد و معنویت و آزادی بیان گرامی داشته می‌شد. هنرمندان به سطح شهرت و آوازه دست می‌یافتند و اغلب مهمانان اشراف‌زادگان بودند.برخی منتقدین معتقدند با انتشار ابزارهای هوش مصنوعی دیگر مانعی به عنوان مهارت برای یک هنرمند وجود ندارد و در لحظه انتشار ابزار تولید تصویر همه مردم دنیا هنرمند شدند!اما مخالفین می‌گویند اتفاقا برای تولید آثاری که قصد واقعی هنرمند را بازنمایی کنند نیاز به مهارت‌های فنی زیادی هست و همه افراد لزوما نمی‌توانند از این ابزار به راحتی استفاده کنند، در واقع منکر از بین رفتن نیاز به مهارت در تولید آثار هنری هستند.گروهی دیگر لزوم وجود مهارت در تولید اثر هنری را زیر سوال می‌برند و صرفا وجود اراده آگاهانه را ملاک اثر هنری می‌دانند آنها معتقدند از نگاه عصب شناسی مهارت یعنی شکل گیری وزن‌ها و ساختار شبکه عصبی مغز ما و هماهنگی با عضلات، وقتی چنین ابزاری وجود دارد چه نیازی به تکرار آن وجود دارد؟شاید یک هنرمند بگوید من سالها تمرین کردم تا بتوانم مهارتی کسب کنم که بتوانم حالات درونیم را بیان کنم، الان راحت می‌توانم با یک ابزار پیشرفته آنها را بیان کنم.جعبه سیاهیکی از نقدها این است که همه تصمیم‌ها در طول فرآیند تولید اثر هنری توسط ماشین گرفته می‌شود و هنرمند همه آنچه که الگوریتم انجام می‌دهد را نمی‌فهمد.(حتی توسعه دهنده آن نیز نمی‌تواند ادعا کند که همه چیز‌هایی که درون این فرآیندها هست را می‌فهمد) یعنی هوش مصنوعی عملا مثل یک جعبه سیاه عمل می‌کند که با ورودی محدود و یک فرآیند نامعلوم چیزی تولید می‌کند. یکی از مشکلات شبکه‌های عصبی مصنوعی همین حالت جعبه سیاه بودن و غیر قابل پیش‌بینی بودن خروجی آن در کاربردهایی است که نیاز به امنیت و اطمینان از رفتار خروجی است.پاسخ این است که بدون ورودی یک شخص هیچ اتفاقی هم رخ نخواهد داد و همواره نیاز به یک آغازگر انسانی داریم. همچنین بیان می‌شود که روح و روان انسان آنقدر پیچیده است که گاهی دلیل کاری که خود با اراده خود انجام می‌دهد را نمی‌داند. مثلا رفتاری می‌کند که به کودکی او باز می‌گردد یا چیزی را پذیرفته که مربوط به فرهنگ و تاریخ جامعه او بود بنابراین ذهن ما نیز به نوعی به صورت جعبه سیاه عمل می‌کند.خالق اثر کیست؟ ماشین یا کاربر؟اگر به جای ماشین یک انسان بنشیند چه؟ مثلا شخصی از طریق یک نامه رسمی به یک نقاش حرفه‌ای سفارش یک تابلوی نقاشی را می‌دهد و در این نامه توصیف کاملی از چیزی که می‌خواهد می‌نویسد (Prompt). به نظر می‌رسد در این حالت هیچ ابهامی در این که چه کسی هنرمند است و چه کسی مشتری وجود ندارد.در جواب این سوال که به نظر خیلی واضح می‌رسد طرفدارن هوش مصنوعی کارگردان یک فیلم سینمایی را مثال می‌زنند. کارگردان حتی دوربین فیلم برداری را لمس نمی‌کند و به عوامل پشت صحنه می‌گوید که چه چیزی کجا باشد و چه زاویه و نوری داشته باشد، رفتار ما هم با هوش مصنوعی شبیه رفتار کارگردان سینماست. در واقع ما اثر هنری را کارگردانی می‌کنیم.آن کس که نگاه هنری دارد و ایده اولیه برای او بوده، هنرمند است، کسی که مهارت دارد ولی نه ایده و حرفی برای گفتن دارد یا نمی‌داند چطور ایده و نگاهش را تبدیل به خروجی هنرمندانه کند لزوما هنرمند نیست.در پاسخ می‌توان گفت که همه کسانی که با ابزار هوش مصنوعی کار می‌کنند تصوری از خروجی احتمالی ندارند، و تشخیص این که چه کسی با هدف و ایده قبلی اثری را توسط ابزار هوش مصنوعی ساخته و چه کسی اثری را تقریبا تصادفی ساخته، اگر نگوییم غیر ممکن کار بسیار دشواریست.عکاسیقبل از اختراع عکاسی، تصاویر واقع‌گرایانه از جهان فقط توسط هنرمندان ماهر قابل تولید بود. در دنیای امروز، ما آنقدر غرق در تصاویر هستیم که تصور اینکه دیدن یک نقاشی واقع‌گرایانهٔ خوب چقدر خاص و منحصربه‌فرد بوده، برایمان دشوار است. مهارت‌های هنرمندان حرفه‌ای به طور پیوسته در طول قرن‌ها بهبود یافته بود. تا قرن نوزدهم، هنرمندانی مانند پیشارافائلی‌ها و نئوکلاسیک‌های فرانسوی به واقع‌گرایی بصری خیره‌کننده‌ای در آثار خود دست یافته بودند.مهارت‌های فنی واقع‌گرایی از سایر چالش‌های خلاقانه در ساخت تصاویر جدا نبود. این وضعیت زمانی تغییر کرد که عکاسی، کار تولید تصاویر از دنیای واقعی را به صورت خودکار انجام داد.هنرمندان و منتقدان دهه‌ها درباره اینکه آیا عکاسی هنر است یا خیر، بحث کردند.آیا فشار دادن یک دکمه روی دوربین عکاسی هنر است؟در ابتدا، بسیاری از مردم معتقد بودند که عکاسی نمی‌تواند هنر باشد، زیرا توسط یک ماشین ساخته شده است نه با خلاقیت انسانی. از همان ابتدا، هنرمندان عکاسی را تحقیر می‌کردند و آن را تهدیدی برای &quot;هنر واقعی&quot; می‌دیدند. حتی در اولین ارائه‌های سال ۱۸۳۹، گزارش شده است که نقاش کلاسیک پل دلاروش فریاد زد: &quot;از امروز، نقاشی مرده است!&quot; دو دهه بعد، شاعر شارل بودلر در مروری بر سالن سال ۱۸۵۹ نوشت:&quot;اگر به عکاسی اجازه داده شود برخی از کارکردهای هنر را تکمیل کند، به زودی یا آن را کاملاً جایگزین خواهد کرد یا به انحطاط می‌کشاند، به لطف حماقت توده مردم که متحد طبیعی آن هستند.&quot;عکاسی در نهایت تأثیر عمیق و غیرمنتظره‌ای بر نقاشی گذاشت. توانایی تقلیدی نقاشان در طول قرن‌ها بهبود یافته بود. بسیاری از نقاشان قرن نوزدهم، مانند پیش‌رافائلی‌ها مانند جان اورت میلایس و نئوکلاسیک‌ها مانند اینگر، تصاویری از جهان را با واقع‌گرایی خیره‌کننده‌ای نقاشی کردند، بیش از هر زمان دیگری.با این حال، دوربین‌ها ارزان‌تر، سبک‌تر و استفاده از آن‌ها آسان‌تر شد و در میان آماتورها و حرفه‌ای‌ها گسترش یافت. عکس‌های واقع‌گرایانه تا پایان قرن نوزدهم رایج شدند.اگر فتورئالیسم را می‌توان به یک فرآیند مکانیکی تقلیل داد، پس نقش هنرمند چیست؟ این پرسش نقاشان را از واقع‌گرایی بصری دور کرد و به سمت اشکال مختلف انتزاع سوق داد.سرقت هنری (Plagiarism)شاید بزرگترین مشکل در مورد آثار هنری تولید شده توسط هوش مصنوعی این است که اساساً سرقت هنری از آثار هنرمندان واقعی است. هوش مصنوعی با نمونه‌برداری از یک بانک عظیم از تصاویر آنلاین کار می‌کند. این تصاویر شامل عکس‌ها و آثار هنری هنرمندان و عکاسان واقعی است. سپس نرم‌افزار از اطلاعات نمونه‌برداری شده برای بازسازی یک تصویر جدید بر اساس نمونه خود استفاده می‌کند. با این که این فناوری چشمگیر است، واقعیت این است که تصاویر تولید شده توسط هوش مصنوعی از هنرمندان گذشته و حال بدون پرداخت هیچ گونه حق امتیازی سرقت می‌شود.اما در پاسخ به این ایراد باید گفت که هیچ هنرمندی یک لوح سفید خالی از تجربه گذشته نیست و هر هنرمندی آثاری را در گذشته و حال دیده و در حافظه خود دارد و به هر حال در زمان تولید اثر جدید خودآگاه یا ناخودآگاه تحت تاثیر آنها قرار دارد و از آنها الهام می‌گیرد. بنابراین نحوه استفاده هوش مصنوعی از آثار دیگران بی شباهت به استفاده انسان هنرمند نیست.چطور از دل تکه‌های کاغذ و کلاژ می‌توان کار هنری تولید کرد، پس با کلاژ کارهای دیگران و ترکیب آنها توسط هوش مصوعی هم می‌توان کار هنری تولید کرد.ارزش ، اقتصادیکی از قوانین کلیدی در اقتصاد، قانون عرضه و تقاضا است. طبق این اصل ارزش کالاها بر اساس میزان موجود در بازار و میزان تولید آن تعیین می‌شود. برای همین منابع محدود معمولا گران تر و با ارزش تر محسوب می‌شوند مثل طلا و برخی فلزات. هر چیزی هم که بیشتر از میزان تقاضا موجود باشد ارزان می‌شود، فرض کنید فناوری جدید اختراع شود که آهن را به طلا تبدیل می‌کند، در این صورت قیمت طلا اگر نگوییم صفر میشود، هم قیمت با آهن خواهد شد.آثار هنری به دلیل یکتایی و نوآوری معمولا ارزش بالایی دارند، یعنی می‌توان آنها را به عنوان منابع محدود اقتصادی نگاه کرد.حال به دوره بعد از آمدن نقاشی دیجیتال نگاه کنید، سرعت تولید اثر بالا رفت، هزینه اشتباهات کاهش پیدا کرد، اما مهارت همچنان حفظ شد، البته نه به اندازه کسی که با آبرنگ و رنگ روغن کار می‌کرد. در نقاشی دیجیتال می‌توان اثری تولید کرد که شبیه نقاشی با آبرنگ باشد، ولی چون پایه و اساسش دیجیتال است و کپی کم هزینه‌ای دارد، باز هم با چالش ارزش مواجه است، این مشکلی است که سعی شد با NFT حل شود.اثر آبرنگی که فقط به صورت دیجیتال وجود دارد و هیچ مابه ازای واقعی ندارد دیگر کم ارزش شد.اما نقاشی آبرنگی که به صورت فیزیکی تولید شده خود به خود یکتاست، مگر آنکه آن را به صورت دستی کپی کنند. مثل سایر صنایع دستی که همچنان ارزش خود را حفظ کرده‌اند. با آمدن ابزارهای هوش مصنوعی باز هم سرعت تولید اثر هنری و میزان مهارت کاهش بیشتری پیدا کرد. برای همین شاید مردم به سمت آثاری که به صورت زنده و دستی تولید می‌شود بروند، و داستان کشیده شدن یک نقاشی را به صورت کامل دنبال کنند. (Art Streaming). چیزهایی که نقش انسان در لحظه لحظه آن بیشتر باشد با ارزش می‌شوند، تابلوی رنگ روغنی که هزاران یا میلیونها ضربه قلم موی نقاش آن را پدید آورده باشد با ارزش‌تر از اثری می‌شود که با چند دکمه پدید آمده باشد.درس‌هایی از عکاسی در هوش مصنوعیهنگامی که دوربین برای اولین بار اختراع شد، مانند ماشینی به نظر می رسید که خلق هنر را خودکار می‌کرد. هیچ مهارتی لازم نبود. بسیاری از هنرمندان از آن ترسیده و آن را تحقیر کردند. آنها پیش بینی کردند که این اختراع هنر با کیفیت بالا را نابود خواهد کرد و بهترین هنرمندان را بیکار خواهد کرد.واقعاً چه اتفاقی افتاد؟یک شکل هنری جدید به وجود آمد: عکاسی. این شکل دارای سبک‌ها و آفرینش‌های منحصر به فرد خود است.اشکال هنری قدیمی دوباره احیا شدند. شاید هنر مدرن اصلا وجود نداشت اگر عکاسی سوالاتی را در مورد نقش هنرمند در واقع گرایی مطرح نمی‌کرد.تکنولوژی‌های قدیمی نقاشی پرتره تا حد زیادی منسوخ شدند. در عمل، این بدان معنا بود که استودیوهای پرتره باید فناوری جدید را یاد بگیرند و اتخاذ کنند.عکاسی در دسترس علاقمندان قرار گرفت؛ تصویرسازی &quot;دموکراتیزه&quot; شد. امروزه هر کسی با یک تلفن همراه می‌تواند عکس بگیرد.این الگو با اختراع گرافیک کامپیوتری تکرار شد. در اوایل دوران گرافیک کامپیوتری، اد کاتمول و آلوی ری اسمیت (که بعداً پیکسار را تأسیس کردند)، تلاش کردند انیماتورهای دیزنی را به فناوری جدید علاقمند کنند. اسمیت بعداً گفت: &quot;انیماتورها از کامپیوتر می ترسیدند. آنها احساس می کردند که این فناوری شغل آنها را خواهد گرفت. ما زمان زیادی را صرف گفتن این موضوع کردیم که: &quot;نه، این فقط یک ابزار است - این خلاقیت را انجام نمی دهد!&quot; این تصور غلط همه جا وجود داشت.&quot; امروزه، انیمیشن کامپیوتری یک شکل هنری جدید بسیار موفق است و به استعدادهای تعداد زیادی از انیماتورها و سایر متخصصان خلاق و فنی متکی است.همه چیزهایی که با هوش مصنوعی تولید می‌شود لزوما هنر نیستند درست مثل همه عکس‌هایی که با دوربین عکاسی گرفته می‌شوند.پیش‌بینی و قضاوت در مورد آینده هنر و هوش مصنوعی دشوار و شاید ناشدنی باشد و این فقط زمان و رفتار اجتماعی انسان‌هاست که تعیین کننده است.منابع:https://medium.com/@aaronhertzmann/how-photography-became-an-art-form-7b74da777c63https://www.forbes.com/sites/natashagural/2023/08/16/is-ai-art-real-art-harvard-arts-professors-ponder-the-potential-of-artificial-reality/https://www.plymouth.ac.uk/discover/is-ai-generated-art-actually-arthttps://onezero.medium.com/is-ai-art-real-art-92ab815b73d6https://ginigrahamscott.medium.com/is-ai-art-really-art-8ef58315f86chttps://rseny.substack.com/p/heat-compute-and-hard-reboots-inhttps://www.wardynskiphoto.com/gallery/is-ai-generated-artwork-actually-artwork/https://www.aesence.com/is-ai-generated-art-really-art/https://artsydrawings.com/is-ai-art-to-be-a-valuable-future-or-a-scary-end-of-originality/https://www.reddit.com/r/aiArt/comments/1989yo0/do_you_consider_ai_art_art/</description>
                <category>حجت جعفری</category>
                <author>حجت جعفری</author>
                <pubDate>Wed, 15 Jan 2025 17:01:04 +0330</pubDate>
            </item>
                    <item>
                <title>آیا دستیار‌ان برنامه نویسی هوش مصنوعی واقعا مفیدند؟</title>
                <link>https://virgool.io/@hojjatjafary/%D8%A2%DB%8C%D8%A7-%D8%AF%D8%B3%D8%AA%DB%8C%D8%A7%D8%B1-%D8%A7%D9%86-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%D9%88%D8%A7%D9%82%D8%B9%D8%A7-%D9%85%D9%81%DB%8C%D8%AF%D9%86%D8%AF-fkejrxe0hqil</link>
                <description>شرکت تجزیه و تحلیل کد هنگام اندازه گیری معیارهای کلیدی برنامه نویسی، هیچ مزیت عمده‌ای در استفاده از ابزار توسعه هوش مصنوعی نمی‌بیند، اگرچه دیگران از سودمندی روز افزون استفاده از کمک برنامه‌نویس‌ها با تاکید روی بازبینی کد (Code Review) گزارش می‌دهند.دستیاران برنامه‌نویسی یکی از موارد استفاده اولیه و بدیهی در عصر جویندگان طلای هوش مصنوعی مولد بوده‌اند، اما بهبود بهره‌وری وعده‌ داده شده محقق نشده است، اگر اصلاً وجود داشته باشد.بسیاری از توسعه‌دهندگان می‌گویند دستیاران کدنویسی هوش مصنوعی باعث افزایش بهره‌وری آن‌ها می‌شود، اما اخیرا مطالعه‌ای برای اندازه‌گیری خروجی آن‌ها انجام شده که هیچ افزایش قابل توجهی را نشان نمی‌دهد. طبق این مطالعه شرکت Uplevel که یک ارائه دهنده تحلیل و بینش‌ از داده‌های همکاری و کدنویسی است، استفاده از GitHub Copilot همچنین باعث افزایش ۴۱ درصدی خطاها شد.در این مطالعه، زمان چرخه درخواست ادغام (PR) یا زمان ادغام کد در یک مخزن و توان عملیاتی PR، یعنی تعداد درخواست‌های ادغام شده، اندازه‌گیری شد.در نهایت هیچ بهبود قابل توجهی برای توسعه‌دهندگان استفاده‌کننده از Copilot پیدا نشد.شرکت Uplevel با استفاده از داده‌های تولید شده توسط مشتریان خود، خروجی حدود ۸۰۰ توسعه‌دهنده که از GitHub Copilot در طول یک دوره سه ماهه استفاده می‌کردند را با خروجی آن‌ها در یک دوره سه ماهه قبل از پذیرش، مقایسه کرد.اندازه‌گیری فرسودگی شغلیعلاوه بر اندازه‌گیری بهره‌وری، مطالعه Uplevel به عوامل مربوط به فرسودگی شغلی توسعه‌دهندگان نیز پرداخت و دریافت که GitHub Copilot در این زمینه نیز کمکی نکرده است. میزان زمان کاری صرف شده خارج از ساعات استاندارد برای هر دو گروه کنترل و گروه آزمایشی استفاده‌کننده از ابزار کدنویسی کاهش یافت، اما این کاهش برای توسعه‌دهندگانی که از Copilot استفاده نمی‌کردند بیشتر بود. به گفته مت هافمن (Matt Hoffman)، مدیر محصول و تحلیلگر داده این شرکت، مطالعه‌ی Uplevel ناشی از کنجکاوی در مورد ادعاهای افزایش قابل توجه بهره‌وری با فراگیر شدن دستیاران کدنویسی هوش مصنوعی انجام شد. یک نظرسنجی GitHub که در ماه اوت منتشر شد نشان داد که ۹۷ درصد از مهندسان نرم‌افزار، توسعه‌دهندگان و برنامه‌نویسان گزارش کردند که از دستیاران کدنویسی هوش مصنوعی استفاده می‌کنند.او گفت: ما مطالعات مختلفی از افرادی دیده‌ایم که می‌گویند: &quot;این واقعا برای بهره‌وری ما بسیار مفید است.&quot; ما همچنین شاهد برخی افراد بوده‌ایم که می‌گویند: &quot;می‌دونی چیه؟ من مجبورم بیشتر به عنوان یک بازبین کد (Code Reviewer) عمل کنم.&quot;نماینده GitHub Copilot نظری در مورد این مطالعه نداشت، اما به یک مطالعه اخیر اشاره کرد که نشان می‌داد توسعه‌دهندگان توانستند با استفاده از دستیار کدنویسی ۵۵ درصد سریع‌تر کد بنویسند.هافمن گفت: تیم Uplevel نیز انتظار داشت که شاهد برخی افزایش‌های بهره‌وری باشد. فرضیه تیم ما این بود که فکر می‌کردیم زمان چرخه PR کاهش خواهد یافت. ما فکر می‌کردیم که آن‌ها می‌توانند کد بیشتری بنویسند و در واقع فکر می‌کردیم که نرخ ایرادها ممکن است کاهش یابد زیرا از این ابزارهای هوش مصنوعی مولد برای کمک به بررسی کد خود قبل از انتشار آن استفاده می‌کنید.هافمن اذعان می‌کند که ممکن است روش‌های بیشتری نسبت به زمان چرخه PR یا توان عملیاتی PR برای اندازه‌گیری بهره‌وری توسعه‌دهندگان وجود داشته باشد، اما Uplevel این سنجه‌ها را به عنوان معیاری محکم برای  اندازه گیری خروجی توسعه‌دهندگان در نظر می‌گیرد.شاید آینده نزدیکعلاوه بر این، Uplevel پیشنهاد نمی‌کند که سازمان‌ها استفاده از دستیاران کدنویسی را متوقف کنند، زیرا این ابزارها به سرعت در حال پیشرفت هستند.هافمن می‌افزاید: ما شنیده‌ایم که در نهایت مردم بیش از گذشته به عنوان بازبین کد عمل خواهند کرد و ممکن است شما اعتماد نادرستی داشته باشید که این کد همان کاری را انجام می‌دهد که انتظار دارید. شما فقط باید به دقت آنچه را که تولید می‌شود بررسی کنید؛ آیا کاری را انجام می‌دهد که انتظار دارید انجام دهد؟ایوان گخت(Ivan Gekht)، مدیرعامل شرکت توسعه نرم‌افزار سفارشی Gehtsoft USA می‌گوید که توسعه‌دهندگان این شرکت افزایش قابل توجهی در بهره‌وری با دستیاران کدنویسی مبتنی بر مدل‌های زبانی بزرگ (LLM) مشاهده نکرده‌اند. Gehtsoft دستیاران کدنویسی را در محیط‌های آزمایشی امتحان کرده است اما هنوز از آن‌ها در پروژه‌های مشتری استفاده نکرده است.ایوان گخت می‌گوید: درک و اشکال‌زدایی کد تولید شده توسط هوش مصنوعی به طور فزاینده‌ای چالش‌برانگیزتر می‌شود و عیب‌یابی آنقدر پرهزینه می‌شود که بازنویسی کامل کد از ابتدا ساده‌تر از رفع عیب آن است.او می‌گوید: استفاده از LLMها برای بهبود بهره‌وری مستلزم آن است که هم LLM از نظر توانایی‌ها با یک انسان واقعی رقابت کند و هم کاربر واقعی بداند که چگونه از LLM به کارآمدترین حالت استفاده کند. LLM دارای تفکر انتقادی، خودآگاهی یا توانایی تفکر نیست.گخت می‌افزاید: نوشتن چند خط کد و توسعه کامل یک نرم‌افزار با هم تفاوت دارند. کدنویسی مانند نوشتن یک جمله است، در حالی که توسعه مانند نوشتن یک رمان است.او می‌افزاید: توسعه نرم‌افزار ۹۰ درصد عملکرد مغز است یعنی درک نیازمندی‌ها، طراحی سیستم و در نظر گرفتن محدودیت‌ها و قیود. تبدیل تمام این دانش و درک به کد واقعی بخش ساده‌ای از کار است.مانند مطالعه Uplevel، گخت نیز شاهد وارد شدن خطاها در کد توسط دستیاران هوش مصنوعی است. وقتی که قسمت‌های مختلف کد با استفاده از درخواست‌های مختلف توسعه می‌یابد، با هر بار تکرار جدید، سازگاری (consistency) کد تولید شده توسط هوش مصنوعی با قسمت‌های دیگر کمتر می‌شود.او می‌گوید: درک و اشکال‌زدایی کد تولید شده توسط هوش مصنوعی به طور فزاینده‌ای چالش‌برانگیزتر می‌شود و عیب‌یابی آنقدر پرهزینه می‌شود که بازنویسی کامل کد از ابتدا ساده‌تر از رفع آن است.بارقه‌های امیدتجربه دستیار کدنویسی در Innovative Solutions که یک ارائه دهنده خدمات ابری است بسیار متفاوت بوده. تراویس رهل (Travis Rehl) مدیر ارشد فناوری این شرکت می‌گوید که این شرکت شاهد افزایش قابل توجه بهره‌وری با استفاده از دستیاران کدنویسی مانند Claude Dev و GitHub Copilot بوده است. این شرکت همچنین از یک وصله داخلی Claude AI Anthropic برای نظارت بر درخواست‌های ادغام و تأیید کیفیت کد استفاده می‌کند.رهل می‌گوید که بر اساس سرعت تکمیل تیکت‌های توسعه‌دهنده، زمان چرخش تحویل به مشتری و کیفیت تیکت‌ها که با تعداد اشکالات موجود در کد اندازه‌گیری می‌شود، بهره‌وری توسعه‌دهندگان دو تا سه برابر افزایش یافته است.او می‌گوید: تیم او اخیراً یک پروژه مشتری را در ۲۴ ساعت با استفاده از دستیاران کدنویسی تکمیل کرده است، در حالی که انجام همان پروژه در گذشته حدود 30 روز طول می‌کشید.با این حال، رهل می‌گوید که برخی از هیاهوها در مورد دستیاران کدنویسی (نظراتی مثل اینکه آن‌ها به جای تکمیل یا تغییر شکل دادن به تیم‌های توسعه، جایگزین کل تیم‌های توسعه خواهند شد) غیر واقعی است. او می‌افزاید که دستیاران کدنویسی می‌توانند برای جایگزینی سریع کد یا بهینه‌سازی مسیرهای کد با بازسازی بخش‌هایی از کد استفاده شوند.او می‌گوید: &quot;انتظارات در مورد دستیاران کدنویسی باید تعدیل شود زیرا آن‌ها در تلاش اول تمام کد یا حتی تمام کد صحیح را نخواهند نوشت. این یک فرآیند تکراری است که در صورت استفاده صحیح، به توسعه‌دهنده اجازه می‌دهد سرعت کدنویسی خود را دو یا سه برابر افزایش دهد. نظر شما چیست؟آیا موافقید؟ یا مخالف؟ آیا از این دستیارها استفاده کرده‌اید؟ چقدر فکر می‌کنید روی بهره‌وری شما موثر بوده؟منابع:https://www.cio.com/article/3540579/devs-gaining-little-if-anything-from-ai-coding-assistants.htmlhttps://resources.uplevelteam.com/gen-ai-for-codinghttps://uplevelteam.com/blog/why-dora-metrics-are-only-part-of-the-equation</description>
                <category>حجت جعفری</category>
                <author>حجت جعفری</author>
                <pubDate>Thu, 26 Dec 2024 17:24:42 +0330</pubDate>
            </item>
                    <item>
                <title>هوش مصنوعی مولد؛ اسباب بازی گرانقیمت یا ابزاری مفید؟!</title>
                <link>https://virgool.io/@hojjatjafary/%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%D9%85%D9%88%D9%84%D8%AF-%D8%A7%D8%B3%D8%A8%D8%A7%D8%A8-%D8%A8%D8%A7%D8%B2%DB%8C-%DA%AF%D8%B1%D8%A7%D9%86%D9%82%DB%8C%D9%85%D8%AA-%DB%8C%D8%A7-%D8%A7%D8%A8%D8%B2%D8%A7%D8%B1%DB%8C-%D9%85%D9%81%DB%8C%D8%AF-jhlgz7qpbht5</link>
                <description>هوش مصنوعی مولد نیازمند اثبات سومندی خود استهیاهو در حال محو شدن است و مردم می‌پرسند که هوش مصنوعی مولد واقعا به چه درد می‌خورد و برای چه کاری خوب است. تا اینجای کار، هیچ کس پاسخ درخوری نداده است.با انتشار خدمت ChatGPT از شرکت OpenAI در نوامبر ۲۰۲۲ دنیا را طوفان هوش مصنوعی مولد در بر گرفت.تقریبا طی یک شب صد میلیون نفر شروع به استفاده از آن کردند.سام آلتمن، مدیر عامل OpenAI، شرکتی که ChatGPT را ایجاد کرد، به یک نام آشنا تبدیل شد. و حداقل نیم دوجین شرکت در تلاش برای ساختن یک سیستم بهتر با OpenAI به رقابت پرداختند. خود OpenAI با جانشینی که احتمالاً GPT-5 نامیده شود، به دنبال پیشی گرفتن از مدل پرچمدارش GPT-4 است، که در مارس ۲۰۲۳ معرفی شده بود. تقریبا همه شرکت‌ها سخت در جستجوی راه‌هایی برای به کارگیری ChatGPT (یا فناوری مشابهی که توسط شرکت‌های دیگر ساخته شده است) در کسب و کار خود هستند.فقط یک نکته وجود دارد: هوش مصنوعی مولد آنقدرها هم خوب کار نمی‌کند، و شاید هرگز خوب کار نکند!اساساً موتور هوش مصنوعی مولد یک &quot;جاهای خالی پر کن&quot; است، یا چیزی که گاهی در فضای مجازی به عنوان یک &quot;تکمیل کننده خودکار به شدت تقویت شده&quot; (autocomplete on steroids) می‌گویند.چنین سیستم هایی در پیش بینی آنچه ممکن است در یک زمینه معین خوب یا قابل قبول به نظر برسد، عالی هستند، اما در درک سطح عمیق‌تری از آنچه که می‌گویند، ناتوانند.به صورت ذاتی و ساختاری هوش مصنوعی قادر به راستی آزمایی (fact-checking) کار خودش نیست. این منجر به مشکلات بزرگی با «توهم» شده است، که در آن سیستم بدون داشتن صلاحیت، چیزهایی که درست نیستند را  در حالی اظهار می‌کند که اشتباهات احمقانه در همه چیز از حساب گرفته تا علم در آن وارد کرده است. این سیستم‌ها نسخه‌های نمایشی شگفت انگیزی می‌سازند اما خودشان اغلب محصول بی‌کفیتی هستند.اگر سال ۲۰۲۳ سال هیاهوی هوش مصنوعی بود، سال ۲۰۲۴ سال سرخوردگی هوش مصنوعی بوده است. چیزی که در آگوست ۲۰۲۳ با شک و تردید اولیه در مورد آن صحبت می‌شد، بیشتر احساس می‌شود: هوش مصنوعی مولد ممکن است به درد نخور باشد.سودی وجود ندارد - برآوردها نشان می‌دهد که زیان عملیاتی OpenAI در سال ۲۰۲۴ ممکن است ۵ میلیارد دلار باشد - و ارزش گذاری بیش از ۸۰ میلیارد دلار با این فقدان سود مطابقت ندارد. در همین حال، به نظر می رسد بسیاری از مشتریان نسبت به انتظارات اولیه فوق العاده بالایی که حالا دیگر عادی شده، از کاری که واقعا می‌توانند با ChatGPT انجام دهند ناامید شده‌اند.علاوه بر این، اساساً به نظر می‌رسد که همه شرکت‌های بزرگ با دستور العمل یکسانی کار می‌کنند، مدل‌های زبانی بزرگ و بزرگتر می‌سازند اما همگی کمابیش در جایگاه یکسانی قرار می‌گیرند، یعنی مدل‌هایی که تقریبا به خوبی GPT-4 هستند، اما خیلی بهتر از آن نیستند. این بدین معناست که هیچ شرکتی توانایی دفاع از محصول خود در طول زمان را ندارد، و به نوبه خود به این معنی است که سود در حال کاهش است. OpenAI از قبل مجبور به کاهش قیمت شده است. اکنون متا فناوری مشابهی را به صورت رایگان ارائه می‌دهد.در زمان نگارش این متن OpenAI در حال نمایش محصولات جدیدی است اما واقعا آنها را منتشر نکرده است.اگر GPT-5 تا قبل از پایان سال 2025 با پیشرفت بزرگی که شایسته این نام باشد به بازار نیاید، و به طور قطعی بهتر از آنچه رقبای خود می‌توانند ارائه دهند نباشد، شکوفایی آن از بین خواهد رفت. شور و شوقی که OpenAI را حمایت و تقویت می‌کرد از بین می‌رود و از آنجایی که OpenAI نماد و نماینده‌ی این حوزه است، ممکن است همه چیز به زودی از بین برود.شرکت‌ها به اندازه کافی از آزمایش هوش‌ مصنوعی سرگرم شدند و لذت بردند. اکنون باید بازدهی آن را نشان دهند!رهبران فناوری کسب‌وکار در حال پایان دادن به دو سال آزمایش‌های سریع هوش مصنوعی در شرکت‌های خود هستند و دلارهای هوش مصنوعی خود را صرف پروژه‌های اثبات‌شده‌ای با تمرکز بر بازگشت سرمایه می‌کنند.جانی لیروی، مدیر ارشد فناوری تامین کننده صنعتی W.W. گرینگر: «زمانی که هوش مصنوعی مولد به وجود آمد، مقدار مشخصی از بودجه اختیاری وجود داشت که می‌توانستیم برای تجربه و آزمایش برخی از این فناوری به آن نگاه کنیم.» اما در واقع برای مقیاس فراتر از برخی از این آزمایش‌ها، ما نیاز به ارائه یک توجیه تجاری بهتر را مشاهده می‌کنیم.اریک برینیولفسون، یکی از بنیانگذاران شرکت تحقیقاتی و نرم افزاری Workhelix، روز دوشنبه در نشست شبکه CIO وال استریت ژورنال در نیویورک گفت: در حالی که رهبران فناوری قبلاً از نعمت رهبری شرکتهای خود برای آزمایش آزادانه هوش مصنوعی برخوردار بودند، &quot;اکنون پنجره آزمایش ما عمدتاً بسته شده است.&quot;&quot;امسال سالی است که باید انتظار نتایج تجاری داشته باشید.&quot; وی افزود این فناوری به اندازه کافی بالغ است که بتواند این نتایج را ارائه دهد. &quot;این زمانی است که باید مزایای آن را دریافت کنید و امیدوار باشید که رقبای شما همچنان در حال بازی و آزمایش هستند.&quot;فیلیپ راتل، مدیر ارشد فناوری شرکت نرم‌افزاری پایگاه داده گراف Neo4j، در این رویداد گفت: مشکل این است که تقریباً ۷۰ درصد از پروژه‌های هوش مصنوعی مولدِ مشتریان تجاری هنوز در مرحله آزمایشی یا تجربی گیر کرده‌اند. وی افزود به‌ عنوان مثال مدل‌های هوش مصنوعی مولد در خلاصه کردن متن خوب هستند، اما در انجام وظایف پیچیده‌تر توانایی کمتری دارند.ناوین رائو، معاون هوش مصنوعی مولد در شرکت داده‌های ابری Databricks، گفت: حدود ۹۰ درصد از آزمایش‌های هوش مصنوعی مولد فراتر از آزمایشگاه پیش نمی‌روند. او گفت: &quot;دقت و قابلیت اطمینان مشکل بزرگی است.&quot;منابع:https://www.wired.com/story/generative-ai-will-need-to-prove-its-usefulness/https://fortune.com/2024/08/06/generative-ai-reality-check-tech-selloff-new-phase-less-hype-more-roi/https://www.wsj.com/articles/companies-had-fun-experimenting-with-ai-now-they-have-to-show-the-returns-2a683592</description>
                <category>حجت جعفری</category>
                <author>حجت جعفری</author>
                <pubDate>Sun, 22 Dec 2024 19:18:08 +0330</pubDate>
            </item>
                    <item>
                <title>هوش‌مصنوعی خودش را تخریب می‌کند!</title>
                <link>https://virgool.io/@hojjatjafary/%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%D8%AE%D9%88%D8%AF%D8%B4-%D8%B1%D8%A7-%D8%AA%D8%AE%D8%B1%DB%8C%D8%A8-%D9%85%DB%8C-%DA%A9%D9%86%D8%AF-sy5fpuchhzdc</link>
                <description>Model Collapseوقتی پیشرفت‌های بشر بیشتر و مسایل سخت و بزرگ حل می‌شوند چالش‌های بعدی هم سختر و بزرگتر می‌شود. نظریه نسبیت عام در قرن بیستم نگاه ما را به عالم دگرگون کرد و باعث پیشرفت شگرفی شد اما به مرور سوالهای بزرگتری با خود آورد که هنوز برای آنها پاسخی پیدا نشده است، مثل ناسازگاری آن با مکانیک کوانتوم، علت شتابدار بودن انبساط جهان، ماده تاریک و گراویتون و غیره.این روزها همه با پیشرفت‌های هوش مصنوعی آشنا شده‌اند یا حداقل در مورد آن حرفهای زیادی شنیده‌اند. این پیشرفت‌ها زندگی ما را تحت تاثیر قرار داده و خواهد داد و بیم‌ها و امیدهای زیادی ایجاد کرده است.در کنار این پیشرفت‌ها در هوش مصنوعی مشکلی در افق دیده می‌شود که می‌تواند تمام دستاوردهای هوش مصنوعی را تحت تاثیر قرار می‌دهد و آنها را تضعیف می‌کند، پدیده‌ای که به عنوان &quot;فروپاشی مدل&quot; (model collapse) شناخته می‌شود.فروپاشی مدلمحققان دانشگاه آکسفورد به تازگی مقاله‌ای را نشریه ‌‌Nature منتشر کرده‌اند و در آن به تفصیل شرح داده‌اند که فروپاشی مدل زمانی اتفاق می‌افتد که مدل‌های هوش مصنوعی بر روی داده‌هایی که شامل محتوای تولید شده توسط نسخه‌های قبلی خودشان است، آموزش ببینند. با گذشت زمان، این فرآیند بازگشتی (recursive) باعث می‌شود که مدل‌ها از توزیع داده‌های اصلی دورتر شوند و توانایی نمایش دقیق جهان را آنطور که هست از دست بدهند. به جای بهبود، هوش مصنوعی شروع به اشتباهاتی می‌کند که در طول نسل‌ها ترکیب می‌شوند و منجر به خروجی‌هایی می‌شود که به طور فزاینده‌ای تحریف شده و غیرقابل اعتماد می‌شوند.فرآیند فروپاشی مدلاجازه بدهید مساله را کمی تجزیه کنیم. بیشتر مدل‌های هوش مصنوعی، مانند GPT-4، بر روی حجم وسیعی از داده‌ها آموزش می‌بینند که بیشترشان از اینترنت استخراج شده‌اند. در ابتدا، این داده‌ها توسط انسان‌ها تولید می‌شود که منعکس کننده تنوع و پیچیدگی زبان، رفتار و فرهنگ انسان است. هوش مصنوعی الگوهایی را از این داده‌ها می آموزد و از آن برای تولید محتوای جدید، خواه نوشتن مقاله، ایجاد یک تصویر یا حتی تولید کد، استفاده می‌کند.اینترنتبر اساس مطالعهٔ تیمی از محققان خدمات وب آمازون، ۵۷٪ از کل متن‌های مبتنی بر وب توسط هوش مصنوعی تولید شده یا از طریق یک الگوریتم هوش مصنوعی ترجمه شده است.این خیلی محتمل است که در سال ۲۰۲۵ حدود ۹۰ درصد از کل محتوای اینترنتی  توسط هوش مصنوعی تولید شود.یعنی: نیمی از چیزهایی که آنلاین می خوانید با هوش مصنوعی تولید شده اند.اتکا به هوش مصنوعی در حال غلبه است، اما در نهایت این منجر به سقوطش خواهد شد.بیایید یک چیز را در اینجا روشن کنیم، هوش مصنوعی محتوای خود را با برداشتن همه چیزهایی که افراد واقعی در مورد یک موضوع خاص گفته‌اند (معمولاً از Reddit، Quora، X و دیگر پلتفرم های بزرگ) تولید می‌کند و سپس آن را با پاسخ های کلی و عمومی ترکیب می‌کند. به عبارت دیگر، هوش مصنوعی از محتوای تولید شده توسط انسان برای پاسخ به سوالات استفاده می‌کند.اینترنت پر شده است از محتوایی که توسط هوش مصنوعی تولید شده و اوضاع همچنان درحال بدتر شدن است.هوش مصنوعی در توهماما چه اتفاقی می‌افتد وقتی نسل بعدی مدل‌های هوش مصنوعی به جای داده‌های تولید شده توسط انسان، روی داده‌های تولید شده توسط مدل‌های قبلی هوش مصنوعی آموزش ببینند؟ نتیجه نوعی اثر اتاقک پژواک خواهد بود. هوش مصنوعی از خروجی‌های خود شروع به «یادگیری» می‌کند، و چون این خروجی‌ها هرگز کامل نیستند، درک مدل از جهان شروع به تنزل می‌کند. این مانند فشرده سازی تصویر به صورت JPEG یا کپی کردن کپیِ یک کپیِ است که در هر نسخه کمی از جزئیات اصلی را از دست می‌دهد و نتیجه نهایی نمایشی مبهم و کم دقتی از جهان است.این تخریب به تدریج اتفاق می افتد و اجتناب ناپذیر است. هوش مصنوعی توانایی تولید محتوایی را که منعکس کننده تنوع واقعی تجربیات انسانی است از دست می‌دهد. در عوض، شروع به تولید محتوایی می‌کند که یکنواخت تر، غیر خلاقانه‌تر و در نهایت کم فایده‌تر خواهد بود.این مساله حتی می‌تواند به نظریه آشوب و سیستم‌های بازخورد بازگشتی مرتبط شود، آنجا که یک تغییر جزئی در حالت اولیه باعث به وجود آمدن تغییرات وسیعی در مقدارهای بعدی شود.مسیر پیش روهوش مصنوعی این ظرفیت را دارد که دنیای ما را به گونه‌ای که به سختی بتوانیم تصور کنیم دگرگون کند، اما این مسیر بدون چالش نخواهد بود. &quot;فروپاشی مدل&quot; به وضوح یادآوری می‌کند که به همان اندازه که این فناوری‌ها قدرتمند هستند، همچنان به کیفیت داده‌هایی که با آنها آموزش دیده‌اند وابسته هستند.همانطور که ما به یکپارچه کردن هوش مصنوعی در تمام جنبه های زندگی خود ادامه می‌دهیم، باید مراقب نحوه آموزش و نگهداری این سیستم ها هم باشیم. با اولویت دادن به داده‌های با کیفیت بالا و تولید شده توسط انسان، تقویت شفافیت، و فعال بودن در رویکردمان، می‌توانیم از بی‌ربط شدن هوش مصنوعی جلوگیری کنیم و اطمینان حاصل کنیم که ابزاری ارزشمند برای آینده باقی می‌ماند.فروپاشی مدل یک چالش است، اما چالشی است که می‌توانیم با راهبردهای درست و تعهد به حفظ هوش مصنوعی در واقعیت بر آن غلبه کنیم.منابعhttps://www.forbes.com/sites/torconstantino/2024/08/26/is-ai-quietly-killing-itself-and-the-internet/https://www.nature.com/articles/s41586-024-07566-yhttps://www.forbes.com/sites/bernardmarr/2024/08/19/why-ai-models-are-collapsing-and-what-it-means-for-the-future-of-technology/https://midojouay.medium.com/ais-looming-collapse-how-it-s-slowly-destroying-itself-31e4ca9735f6</description>
                <category>حجت جعفری</category>
                <author>حجت جعفری</author>
                <pubDate>Sat, 14 Dec 2024 18:40:10 +0330</pubDate>
            </item>
                    <item>
                <title>مسیر شغلی برنامه‌نویسان بعد از ۳۵ سالگی</title>
                <link>https://virgool.io/@hojjatjafary/%D9%85%D8%B3%DB%8C%D8%B1-%D8%B4%D8%BA%D9%84%DB%8C-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%D8%A7%D9%86-%D8%A8%D8%B9%D8%AF-%D8%A7%D8%B2-%DB%B3%DB%B5-%D8%B3%D8%A7%D9%84%DA%AF%DB%8C-gtnsy4riofno</link>
                <description>این مقاله را زمانی می‌نویسم که در آستانه ۴۰ سالگی هستم و نزدیک به ۱۳ سال به صورت حرفه‌ای برنامه‌نویس بوده‌ام. در طول این سالها آنقدر عاشق کاری بودم که انجامش می‌دادم که نه به آینده فکر می‌کردم و نه حقوق متوسطی که می‌گرفتم برایم مشکلی محسوب می‌شد. می‌خواستم برای همیشه برنامه‌نویس بمانم چون از انجام این کار لذت می‌بردم.اما یک اتفاق ساده باعث شد که کمی بیشتر به موقعیت و جایگاهی که دارم یا خواهم داشت فکر کنم، برای همین کمی در این مورد جستجو کردم که سعی می‌کنم بخشی از آن را به اشتراک بگذارم، شاید مفید باشد.افسانهافسانه‌ای در کوچه پس کوچه‌های Silicon Valley وجود دارد که می‌گوید ۳۵ سالگی سن بازنشستگی برنامه‌نویسان است، درست مثل سن بازنشستگی فوتبالیست‌ها و ورزشکاران حرفه‌ای.دقیقا نمی‌توان گفت که این افسانه از کجا آمده و دلیلش چیست ولی تجربه واقعی برخی توسعه‌دهندگان میانسال نشان می‌دهد که نرخ استخدام‌پذیری آنها بعد از ۳۵ سالگی به شدت کاهش می‌یابد.این موضوع برای برنامه‌نویسان چینی هم مشکل ساز شده و باعث تشدید بحران میانسالی توسعه‌دهندگان شده و توجه عده‌ای از مدیران را جلب کرده.من که چنین افسانه‌ای را نشنیده بودم و چیزی از آن نمی‌دانستم چون هم به آن فکر نمی‌کردم و هم در ایران زندگی و کار می‌کردم ولی بعد از فهمیدن این موضوع شگفت زده شدم و سعی کردم کمی بیشتر بررسی ‌کنم.آمارآمارهای مختلفی در مورد جنبه‌های مختلف کاری توسعه‌دهندگان نرم‌افزار وجود دارد که در جامعه‌های آماری مختلفی انجام شده. با توجه به این که اکثر برنامه‌نویسان روزانه و در طول دوره‌ کاری خودشان مراجعات زیادی به سایت stackoverflow دارند من آمارهای این سایت را مرجع قرار دادم.همانطور که در آمارها هم مشخص است نزدیک به ۸۰ درصد برنامه‌نویسان کمتر از ۴۰ سال سن دارند، بیش از ۶۰ درصد آنها زیر ۳۵ سال دارند.نظرسنجی سایت stackoverflow سال ۲۰۲۳نظرسنجی سایت stackoverflow سال ۲۰۲۴این آمارها تحت تاثیر تعداد زیاد برنامه‌نویس هندی است که اصولا متوسط سنی کمتری نسبت به برنامه‌نویسان آمریکایی دارند. اما وضعیت چین نیز مشابه این آمار است و سهم عمده را جوانان زیر ۳۵ سال تشکیل می‌دهند.میانگین سنی برنامه‌نویسان در چینآمارها صرفا وضعیت موجود را نشان می‌دهند و از روی اعداد نمی‌توان دلایل پشت آنها را فهمید. حتی شاید این دلایل منطقی یا قانع کننده نباشند و از الگوهای اشتباهی پیروی کنند.آماری در مورد برنامه‌نویسان ایرانی پیدا نکردم احتمالا به دلایلی که بررسی خواهیم کرد و همچنین نرخ مهاجرت بالا در این حوزه میانگین پایین تر باشد.مواجهه با واقعیتدر مواجهه با این آمار واکنش‌ها در بین برنامه‌نویسان متفاوت است، برخی این موضوع را به عنوان واقعیت محتوم می‌پذیرند و به سرعت وارد حوزه‌های کاری غیر از نوشتن کد می‌شوند.بعضی از افراد به کلی منکر چنین رویکردی در صنعت می‌شوند چون برنامه‌نویسان میانسال و مسن زیادی می‌شناسند یا خود مسن هستند و سالهاست که برنامه‌نویسی می‌کنند، گاهی آمار را هم زیر سوال می‌برند یا موضوع را به خاطر وجود تعداد زیاد شرکت‌های نوپا (Startup) می‌دانند.برخی دیگر هرچند واقعیت آمار را می‌پذیرند ولی قبول ندارند که لزوما دلیل قانع کننده‌ای پشت این شرایط وجود داشته باشد و آن را نوعی جداسازی و تبعیض سنی غیر عاقلانه می‌دانند و مثال‌های نقضی برای این موضوع می‌آورند (Uncle Bob) و تاکید می‌کنند که این موضوع ارتباطی با تواناهی جسمی و ذهنی برنامه‌نویسان ندارد و مشکل به خاطر عدم تلاش برنامه‌نویسان برای به‌روز رسانی مهارت‌ها و دانش خودشان است و پیشنهادهایی برای حفظ توانمندی و به‌روز بودن برنامه‌نویسان مسن‌تر ارائه می‌کنند.موقعیت تناقض آمیزاحتمالا عنوان‌هایی مثل مهندس معمار با تجربه، پزشک حاذق، نجار استادکار شنیده باشید. برخی شغلها و رشته‌ها هستند که هر چه از مدت حضور فرد در آن بگذرد و تجربه بیشتری داشته باشد ارزشمندتر می‌شود.اما در مورد حوزه فناوری اطلاعات و ارتباطات موضوع کمی فرق می‌کند، اگر سن شما و حضور شما در صنعت از حد خاصی بیشتر باشد تجربه شما کم کم ارزش کمتری پیدا می‌کند، چون سرعت تغییرات و پیشرفت در این صنعت آنقدر زیاد است که تجربه گذشته شما احتمالا مربوط به فناوری‌های قدیمی‌تر خواهد بود که امروز دیگر وجود ندارند. بنابراین گاهی عنوان مهندس نرم‌افزار با تجریه یا توسعه دهنده با تجربه معادل یک فرد با اطلاعات قدیمی و تاریخ گذشته و آشنا به فناوری‌ها و چهارچوب‌های از رده خارج یا غیر به‌روز در نظر گرفته می‌شود.درست است که برخی اصول بنیادین بین این فناوری‌ها مشترکند و با جایگزینی فناوری‌های قدیمی همچنان پابرجا خواهند بود ولی یادگیری دائمی جزو جدایی ناپذیر این صنعت است.چرا اکثریت برنامه‌نویسان را جوانان تشکیل می‌دهند؟نظرهای گوناگونی برای توضیح این که چرا توزیع سن برنامه نویسان این گونه است وجود دارد. برخی از برنامه‌نویسان مسن‌تر، شرکت‌ها را به این متهم می‌کنند که ارزش تجربه و مهارت افراد را نمی‌دانند ولی با کمی جستجو به دلایل زیر برخورد می‌کنیم. نظریه کاهش توانایی فیزیکیدر صنعتی که فشار کاری و اضافه کاری معمول هست توان جسمی اهمیت پیدا می‌کند اما این مورد نمی‌تواند برای همه یکسان باشد و فرد به فرد متفاوت است، گاهی یک فرد مسن انرژی و توان فیزیکی بسیار بیشتری نسبت به یک جوان دارد. سبک زندگی و ورزش می‌تواند توان جسمانی فرد را به شدت تحت تاثیر بگذارد. البته بماند که لزوما همه حوزه‌های برنامه‌نویسی سخت نیستند و نیاز جدی هم به توانایی فیزیکی بالا ندارد، لذا این نمی‌تواند توضیح کافی برای ترجیح دادن جوان‌ترها به قدیمی‌ترها باشد.نظریه کاهش توانایی ذهنی و یادگیریاین دلیل شاید ابتدا معقول به نظر برسد اما مطالعه جدی که نشان دهد توان ذهنی در همه افراد بعد از ۳۵ سال کاهش می‌یابد، انجام نشده، بلکه مطالعاتی وجود دارد که عکس این موضوع را نشان می‌دهد، یعنی توانایی تفکر منطقی با افزایش سن بیشتر هم می‌شود.رابطه با همکارانبا توجه به آمار مشاهده می‌شود که ترکیب جمعیتی اکثر شرکت‌ها به نفع جوانان است، این موضوع باعث عدم درک متقابل و توانایی برقراری ارتباط موثر بین برنامه‌نویسان مسن و جوان به علت وجود فاصله نسلی می‌شود که در نهایت باعث انزوای برنامه‌نویسان مسن‌تر و ترک آنها می‌شود.انعطاف‌پذیرتریادعا می‌شود که برنامه‌نویسان مسن‌تر انعطاف‌پذیری و انتقادپذیری کمتری نسب به جوان‌ترها دارند. البته که رفتار حرفه‌ای ایجاب می‌کند انتقادهای منطقی مورد پذیرش قرار بگیرد. از طرفی، کسی هم که کم تجربه است دلیلی ندارد در مقابل یک تصمیم اشتباه که ایده‌ای از عواقب آن ندارد، ایستادگی کند. بنابراین تجربه گاهی باعث جلوگیری از ضررهای میلیاردی می‌شود.به‌روز نبودنیکی از مهمترین دلایلی که باعث ترجیح برنامه‌نویسان جوان‌تر می‌شود به‌روز نبودن برنامه‌نویسان قدیمی‌تر است.اما مطالعه اولیه که در دانشگاه کارونیای شمالی انجام شده نشان می‌دهد که گاهی برنامه‌نویسان مسن‌تر اطلاعات بیشتری در مورد فناوری‌های نوظهور نسبت به همتایان جوان خود دارند. دکتر امرسون مورفی هیل (Emerson Murphy-Hill)، استادیار علوم کامپیوتر در NCSU و یکی از نویسندگان آن مقاله تحقیقی در مورد این مطالعه گفت: &quot;ما دانش برنامه نویسان جوان و قدیمی را در مورد ۱۰ فناوری که در ۱۰ سال گذشته توسعه یافته‌اند بررسی کردیم. در اکثر بخشها تفاوت خیلی زیادی در دانش توسعه‌دهندگان جوان و قدیمی در این فناوریها وجود ندارد. دکتر مورفی می‌گوید باید پیش‌داوری خودمان را در مورد برنامه‌نویسان جوان و قدیمی مورد ارزیابی مجدد قرار دهیم.از طرفی فردی که در این حوزه کار کرده در طول دوران کاری خودش آنقدر فناوری‌ها، زبان‌ها و چهارچوب‌های مختلف و جدیدی دیده که به مرور حساسیت و کنجکاویش نسبت به فناوری‌های جدید کم می‌شود و عملا با دیدن یک چهارچوب جدید خواهد گفت باز هم یک بسته جدید که تا چند وقت دیگر از رده خارج خواهد شد! برای همین شاید از انگیزه لازم برای یادگیری برخوردار نباشد.صنعت نسبتاً جدیدبه هر حال صنعت نرم‌افزار نسبت به صنایع دیگر نوپا و در حال رشدی محسوب می‌شود. این صنعت در کشورهای نو ظهور اقتصادی مثل چین و هند همچنان در حال رشد است و سالانه ورودی‌های زیادی دارد که کار خود را در این صنعت آغاز می‌کنند. شاید مانند صنایع دیگر گذر زمان باعث ایجاد تعادل بیشتری بین ورودی و خروجی‌های این صنعت شود و میانگین سنی بهبود یابد.از دست دادن علاقهانسان موجود پیچیده‌ای است و ممکن است علاقمندی‌هایش در طول زمان تغییراتی عجیب و گاهی متناقضی داشته باشد، گروهی از برنامه‌نویسان هم ممکن است علاقمندی جدیدی پیدا کنند یا از کاری که انجام می‌داده‌اند خسته شوند، بنابراین قبل از این که به سن بازنشستگی برسند برنامه‌نویسی را کنار می‌گذارند، یا حتی این علاقمندی را تا سن بالای ۶۰ سال حفظ می‌کنند.فرهنگ استارت‌آپیکارآفرینان نوپا که آرزوی تغییر دنیا را دارند نیاز دارند که بدوز و بشکاف‌های زیادی انجام دهند، به سرعت بسازند و خراب کنند، آنها نمی‌توانند مدت طولانی منتظر بمانند تا یک محصول آماده شود و تازه متوجه شوند که ایده‌شان خوب نبوده. ایده‌ها به تنهایی ارزشی ندارند، باید آنها را در عمل و اجرا دید. باید با کمترین هزینه و زمان به یک محصول اولیه رسید. این نیاز به سرعت و کاهش هزینه کارآفرینان را به سمت برنامه‌نویسان جوان و کم خرج سوق می‌دهد.اقتصادبه نظر من دلیل اقتصادی مهمترین دلیلی است که باعث ترجیح برنامه‌نویسان جوان می‌شود. برنامه‌نویس با تجربه علاوه بر این که به واسطه تجربه و تواناییش حقوق درخواستی بالاتری نسبت به برنامه نویسان جوان دارد در بیشتر موارد به علت متاهل بودن و احتمال وجود فرزندان هزینه زندگی بالاتری نیز دارند.همچنین مسولیت‌های خانوادگی باعث می‌شود علاقه برنامه‌نویسان مسن‌تر به اضافه کاری‌های طولانی و شبانه کمتر شود، در عوض برنامه‌نویسان جوان حقوق کمتری می‌گیرند و مشکل کمتری با اضافه کاری و ساعات طولانی کار دارند، پس به لحاظ اقتصادی استخدام برنامه‌نویس جوان به ازای هر نفر نسبت به برنامه‌نویس با تجربه صرفه اقتصادی بیشتری دارد. این باعث می‌شود که مدیران علاقه یا توان مالی به کاری گیری تعداد زیادی برنامه‌نویس با تجربه را در شرکت‌ها نداشته باشند.اما سوال اصلی این است که واقعا وجود چه تعداد برنامه‌نویس با تجربه برای شرکت‌ها مناسب است؟ نقطه تعادل کجاست؟ آیا ساختار سلسله مراتبی شرکت‌ها خود باعث کاهش نیاز به افراد با تجربه نیست؟چه بر سر برنامه نویسان قدیمی می‌آیدمدیریتدر شرکت‌هایی که دارای جایگاه‌های مدیریتی هستند برنامه‌نویسان به بخش‌‌های مدیریتی منتقل می‌شوند، البته معمولا به جای انتقال از واژه ارتقا استفاده می‌شود که بار معنایی پیشرفت و بهبود جایگاه را دارد. اینکه چقدر از برنامه‌نویسان علاقمند هستند تا دست از برنامه‌نویسی بکشند و وارد حوزه مدیریت شوند بحث جداییست اما با توجه به شرایط موجود این نوعی جبر و ضرورت برای حفظ جریان مالی است.در شرکت‌های کوچکتر که ساختار سلسله مراتبی جدی‌ وجود ندارد ماندن طولانی مدت برنامه‌نویس توجیهی ندارد مگر این که در سود پروژه‌ها شریک باشید یا مقداری از سهام برای شما باشد.مشاورهبرخی وارد حوزه مشاوره می‌شوند، اینجا حوزه‌ای است که معمولا با تجربه‌ها وارد آن می‌شود. یک مشاور باید انباشتی از تجربه داشته باشد تا بتواند مشاوره ارزشمندی ارائه کند.راه‌اندازی کسب و کار جدیدقسمی از برنامه نویسان هم برای اجرای ایده‌های شخصی کسب و کار خود را راه‌اندازی می‌کنند.آموزشیکی از بخش‌های مهمی که برنامه‌نویسان باتجربه وارد آن می‌شوند بخش آموزش است، اینجا می‌تواند جایی باشد که تجربه‌ها از نسل قبل به نسل بعد منتقل می‌شود. راه‌های مختلفی برای آموزش وجود دارد، از موسسات آموزش گرفته تا دانشگاه‌ها و کانال یوتوب که هر روز بر تعداد آنها افزوده می‌شود.برنامه‌نویس ماندنغیر ممکن نیست که تا سن ۵۰ یا ۶۰ سالگی برنامه‌نویس بمانید، اما تعداد این افراد نسبت به جوانان بسیار کمتر است و نیاز به یک سبک زندگی و انگیزه خاصی دارد.ایرانشرایط برنامه‌نویسان در ایران نیاز به پایش جدی دارد اما گاهی گفته می‌شود که چون ما به لحاظ فناوری عقب هستیم یا معمولا مصرف کننده فناوری هستیم شرکت‌ها نیاز به حضور برنامه‌نویسان باتجربه ندارند.از کریگ برت (Craig Barrett) مدیر اجرایی پیشین شرکت اینتل نقل قول مشهوری وجود دارد که گفته نیمه عمر مهندسان سخت‌افزار و نرم‌افزار فقط چند سال است.آمارها نشان می‌دهد متوسط ماندگاری برنامه‌نویسان در شرکت‌های معروف آمریکایی ۱-۳ سال بیشتر نیست (منبع) بنابراین این استدلال در مورد ایران خیلی صحیح نخواهد بود. البته با توجه به شرایط اقتصادی ایران قطعا دلیل اقتصاد در ایران پررنگ‌تر از دیگر هم خواهد بود.هوش مصنوعیاین روزها هوش مصنوعی از خزان قبلی خود خارج شده و دوباره بر سر زبان‌ها افتاده و شاهد پیشرفت‌هایی در این زمینه بوده‌ایم. صحبت‌ها در مورد تاثیر هوش مصنوعی در مشاغل مختلف زیاد است، نمی‌توانیم بگوییم این ابزار و پیشرفت‌های آینده آن هیچ تاثیر روی کارها ندارد به خصوص برنامه‌نویسی. گرچه تا امروز من نتوانسته‌ام استفاده جدی و واقعی از این ابزار در نوشتن کدهایم داشته باشم ولی امکان پیشرفته‌تر شدن این ابزار دور از ذهن نیست.پیش‌بینی این که هوش‌مصنوعی روی سن برنامه نویسان چه تاثیری بگذارد کار آسانی نیست، می‌توان گفت این ابزار نیاز به برنامه‌نویسان با تجربه را کمتر می‌کند بنابراین متوسط سن باز هم کمتر خواهد شد. از طرفی می‌توان استدلال کرد که چون این ابزار کمک دست برنامه‌نویسان مسن‌تر خواهد شد بنابراین کارایی آنها را در حد یک برنامه‌نویس جوان افزایش خواهد داد.باید صبر کرد و دید.منابع:https://www.51cto.com/article/717499.htmlhttps://survey.stackoverflow.co/2015#profile-agehttps://survey.stackoverflow.co/2019#developer-profile-_-agehttps://survey.stackoverflow.co/2023/#section-demographics-agehttps://survey.stackoverflow.co/2024/developer-profile#demographics-agehttps://dzone.com/articles/is-software-development-really-a-dead-end-job-aftehttps://www.govtech.com/education/do-computer-programmers-improve-with-age.htmlhttps://www.linkedin.com/pulse/what-happens-developers-once-reach-35-dina-bayasanovahttps://abrarmasum.medium.com/when-do-programmers-retire-is-35-the-end-72d173760ee2https://betterprogramming.pub/why-programmers-shouldnt-stay-in-one-company-for-a-long-time-67bf07f011a6https://blog.stackademic.com/what-happens-when-you-reach-the-age-of-35-as-a-programmer-5bb7907bce91https://medium.com/illumination/where-did-the-35-year-old-retirement-age-for-programmers-come-from-60a47d4744c8https://simpleprogrammer.com/what-happens-to-older-programmersdevelopers/https://thecodist.com/how-to-know-when-its-time-to-go/https://medium.com/illumination/11-reasons-why-software-engineers-retire-early-exploring-career-transitions-and-lifestyle-choices-fbef7efde057</description>
                <category>حجت جعفری</category>
                <author>حجت جعفری</author>
                <pubDate>Thu, 12 Dec 2024 12:02:35 +0330</pubDate>
            </item>
                    <item>
                <title>رمان کیفر آتش الیاس کانتی</title>
                <link>https://virgool.io/@hojjatjafary/%D8%B1%D9%85%D8%A7%D9%86-%DA%A9%DB%8C%D9%81%D8%B1-%D8%A2%D8%AA%D8%B4-%D8%A7%D9%84%DB%8C%D8%A7%D8%B3-%DA%A9%D8%A7%D9%86%D8%AA%DB%8C-umdsp0tkbzqv</link>
                <description>دکتر پیتر کین یک چین شناس بسیار دقیق و دانشمندی با حافظه قوی است که بیشتر وقت خود را در کتابخانه شخصی خود در خانه می‌گذراند و وابستگی زیادی به کتاب‌هایش دارد.آنقدر به کتابهایش وابسته است و به آنها احترام می‌گذارد که ارزش آنها را از جان انسانها هم بالاتر می‌داند، احترام بیش از حد دکتر کین به کتاب‌ها باعث به وجود آمدن موقعیت‌های جالبی در قصه می‌شود.کار زیاد و دوری از اجتماع باعث شده تا دکتر کین از واقعیات زندگی فاصله بگیرد و همه چیز را از دریچه کتابها ببیند.شخصیت‌های دیگر این رمان کاملا عامی و از جنس مردم کوچه و خیابان هستند و با این که هر روز با واقعیت زندگی رو در رو هستند اما باورها و رویاهایی دارند که باعث می‌شود درک آنها از واقعیت به شدت تحت تاثیر قرار بگیرد. حتی برخی شخصیت‌های داستان مثل خانم ترزه تصور دور از واقعتی از شخصیت خود دارند مثلا در حالی که خود را زن نجیبی می‌داند ولی به هیچ وجه این گونه نیست. برخی از آنها به چیزهای کم ارزشی افتخار می‌کنند و آن را امتیازی برای خود می‌دانند که باعث خنده خواننده می‌شود اما با کمی تامل به یاد می‌آوریم که بارها چنین آدم‌هایی در طول زندگی دیده‌ایم و می‌بینیم. مثلا من به شخصه راننده تاکسی را دیدم که هچنان به نمرات ۲۰ املای خود در کلاس اول ابتدایی افتخار می‌کرد ولی حتی نتوانسته بود دیپلمش را بگیرد.گاهی شخصیت‌ها با هم در حال گفتگو هستند اما هر یک در مورد باور درونی و درک خود از واقعیت صحبت می‌کند که عملا باعث می‌شود گفتگویی صورت نگیرد و صحبت کردن باعث ایجاد درک مشترک از واقعیت بیرونی نمی‌شود، این اتفاق موقعیت طنز آمیزی ایجاد می‌کند اما نمایانگر یک واقعیت تلخ است.زبان داستان ساده و بدور از تکلف‌های فلسفی است، دنیایی که در این رمان ساخته می‌شود دنیایی فانتزی نیست حوادث عجیب و پیچیده و خاصی اتفاق نمی‌افتد، دنیای این رمان همان دنیایی است که هر روز در آن زندگی می‌کنیم و انسان‌های تنهایی هستیم که ظاهرا با هم هستیم و در حال گفتگو و ارتباط با هم ولی بسیاری از مواقع این ارتباط شکل نمی‌گیرد انگار که متوجه زبان هم نمی‌شویم چیزی که مترجم با بیان داستان برج بابل در مقدمه خود به درستی اشاره کرده. با اینکه نویسنده در بسیاری موارد از زبان طنز استفاده کرده ولی در نهایت دنیای این رمان دنیای ترسناک انسان تتهاست جایی که هیچ کس، هیچ کس را درک نمی‌کند، یعنی دنیای خود ما.اینجاست که تولستوی می‌نویسد:انسان در بالاترین سطح هوشیاری‌اش تنهاست. این تنهایی عجیب و غیر عادی و دشوار به نظر می‌رسد. انسان‌های ابله تلاش می‌کنند از راه عیاشی از این سطح متعالی به سطحی نازل فرار کنند، اما انسان‌های عاقل به کمک نیایش در این سطح متعالی می‌مانند.</description>
                <category>حجت جعفری</category>
                <author>حجت جعفری</author>
                <pubDate>Mon, 09 Dec 2024 13:45:29 +0330</pubDate>
            </item>
                    <item>
                <title>ذهن جدید پادشاه</title>
                <link>https://virgool.io/@hojjatjafary/%D8%B0%D9%87%D9%86-%D8%AC%D8%AF%DB%8C%D8%AF-%D9%BE%D8%A7%D8%AF%D8%B4%D8%A7%D9%87-tg5g5ux4ulfs</link>
                <description>ذهن جدید پادشاه (The Emperor&#x27;s New Mind) عنوان کنایه آمیز کتاب راجر پنروز است که در سال 1989 اولین بار منتشر شد. عنوان این کتاب از این جهت کنایه آمیز است که به داستان لباس جدید پادشاه (The Emperor&#x27;s New Clothes) اشاره می‌کند.جلد کتاب ذهن جدید پادشاهسر راجر پنروز فیزیکدان، ریاضی‌دان و فیلسوف علم برجسته انگلیسی و استاد بازنشسته ریاضی دانشگاه آکسفورد است. پنروز در زمینه سیاهچاله ها با استیون هاوکینگ همکاری زیادی داشته و توانستند جایزه ولف فیزیک را در سال ۱۹۸۸ دریافت کنند. او سهم زیادی در توسعه دانش در زمینه نسبیت عام و کیهان‌شناسی داشته و بسیاری از دانسته‌های بشر در مورد سیاهچاله‌ها مدیون کشفیات پنروز است. او همچنین برنده نیمی از جایزه نوبل فیزیک در سال ۲۰۲۰ است.با این که فصل‌های این کتاب دامنه وسیعی از نظریه نسبیت، مکانیک کوانتوم و کیهانشناسی را پوشش می‌دهد، ولی دغدغه مرکزی آنها چیزی است که فلاسفه مساله ذهن و جسم می‌گویند.دهه‌هاست که طرفداران هوش مصنوعی قوی (Strong AI) تلاش کرده‌اند تا ما را متقاعد کنند که فقط با گذشت یک یا دو قرن (برخی حتی این مدت را تا پنجاه سال کاهش داده‌اند) کامپیوترهای الکترونیکی همهٔ کارهایی را که ذهن انسان می‌تواند انجام دهد را انجام خواهند داد. آنها تحت تاثیر داستانهای علمی تخیلی بودند که در دوران جوانی خوانده بودند و عقیده داشتند که ذهن ما صرفا کامپیوتری است که از گوشت و چربی ساخته شده است (همان طور که زمانی Marvin Minsky گفته بود)، برای آنها بدیهی است که رنج و لذت، ستایش زیبایی، شوخ طبعی، خودآگاهی و اختیار ظرفیت‌هایی هستند که وقتی الگوریتم‌های رفتاری ربات‌های الکترونیکی به اندازه کافی پیچیده شدند به صورت طبیعی پدیدار خواهند شد.برخی فیلسوفان علم با این دیدگاه کاملا مخالف هستند.(به ویژه جان سرل که آزمون فکری معروف اتاق چینی‌های او در این کتاب به صورت عمق بحث شده است). برای آنها یک کامپیوتر ضرورتا فرقی با یک ماشین حساب مکانیکی که توسط چرخ دنده‌ها و اهرم‌ها کار می‌کند و یا هر چیزی که سیگنالها را انتقال می‌دهد، ندارد.(می‌توان کامیپوتری را مبتنی بر مهره های غلطان یا حرکت آب درون لوله‌ها ساخت.) چون الکتریسیته درون سیم بسیار سریعتر از دیگر شکل‌های انرژی (غیر از نور) حرکت می‌کند می‌تواند نمادها را با سرعت خیلی بیشتری از ماشین حساب مکانیکی دستکاری کند و بنابراین وظایف بسیار پیچیده را انجام دهد. اما آیا یک کامپیوتر الکتریکی کاری که در حال انجام آن است را از طریقی که مافوق فهمیدن یک چوتکه است می‌فهمد؟ کامپیوترها حالا استاد بزرگ شطرنج هستند. آیا کامپیوترها این بازی را بهتر از ماشین tick-tack-toe ای که زمانی گروهی از هکرهای کامپیوتری با استفاده از اسباب بازیها ساخته بوند، می‌فهمند؟کتاب پنروز یکی از قوی ترین حملات به هوش مصنوعی قوی است که تا به حال نوشته شده.در قرن‌های گذشته مخالفت‌هایی با ادعاهای تقلیل‌گرایانه‌ای که ذهن ماشینی‌ست که با قوانین شناخته شده فیزیک کار می‌کند، شده است، ولی حمله پنروز بسیار متقاعدکننده‌تر است چون از اطلاعاتی بهره گرفته است که در اختیار نویسندگان پیشین نبوده است.پنروز شما را به سیاحتی خیره‌کننده می‌برد که موضوعاتی مثل ماشین تورینگ، نظریه پیچیدگی، فلسفه ریاضیات، اعداد مختلط، تناقض‌های گیج کننده مکانیک کوانتوم، دستگاه‌های صوری، تصمیم ناپذیری گودل، فضاهای فازی، فضاهای هیلبرت، سیاه چاله‌ها، سفید چاله‌ها، تابش‌های هاوکینگ، آنتروپی، ساختار مغز و اعصاب را پوشش می‌دهد.با دانش عمقی که پنروز از دنیا و قوانین بنیادین آن دارد و پرسش‌های اساسی‌ای که در فیزیک هنوز به آنها پاسخ داده نشده است و شناخت ما از دنیای فیزیکی را با مشکل مواجه کرده است، این سوال را مطرح می‌کند که چطور با شناخت ناقصی که ما از جهان داریم این شناخت را برای درک ساختار ذهن انسان کافی دانسته‌ایم و سعی داریم یکی مثل آن را بسازیم؟ آیا امکان ندارد پدیده های کوانتومی در مغز ما وجود داشته باشند که در فرآیند فکر کردن دخیل باشند؟پنروز پرسش های عمیقی در این کتاب مطرح می‌کند، پرسش هایی که فلاسفه و دانشمندان سالهاست در پی پاسخی برای آنها هستند.آیا ریاضیات توسط ما ساخته می‌شود یا ما فقط آنها را کشف می‌کنیم؟ پنروز پاسخ این سوال را با شجاعت می‌دهد و خود را طرفدار نظریه افلاطونی در ریاضیات می‌داند، طوری که معتقد است ما بیشتر مسایل اساسی ریاضی را اختراع نمی‌کنیم بلکه کشف می‌کنیم، آنها از قبل در این عالم یا در عالم مُثُل وجود دارند. برای نمونه به فرکتال‌ها اشاره می‌کند که توسط مندل‌برات کشف شده‌اند، او گفته بود من فقط فرمولی که وجود داشت را با کامپیوتر نمایش دادم که با این پدیده شگفت انگیز رو به رو شدم، من این فرکتال را نساختم مثل کوه اورست ففط آنجا بود!فرکتال مندل براتپنروز معتقد است که بسیاری از فعالیت های ذهنی غیر الگورتیمی هستند و برای اثبات آن به نظریه ناکاملی گودل اشاره می‌کند که یک دستگاه صوری قادر به اثبات سازگاری خود نیست اما همان نتایج توسط یک انسان ریاضیدان قابل اثبات است.ما در ریاضیات با اعداد گنگ زیادی کار می‌کنیم که امکان بازنمایی آنها توسط ماشین تورینگ وجود ندارد یکی از آنها عدد Pi است، یا رادیکال ۲ که ما به آنها اعداد غیر قابل محاسبه (non-computable) می‌گوییم.او همچنین معتقد است هوشمندی واقعی نیازمند خودآگاهی است، بنابراین هوشمندی نمی‌تواند توسط ابزار الگوریتمی مثل کامپیوتر امروزی به درستی شبیه سازی شود. او به طور جدی بحث می‌کند که برای عملکرد خودآگاهی باید اجزای اساسا غیر الگوریتمی ای وجود داشته باشند، که کامپیوترهای امروزی به عنوان یک ماشین تورینگ نمی‌توانند مسایل غیر الگوریتمی را حل کنند.بحث‌های عمیق و جذاب بسیاری در این کتاب وجود دارد که بیان همه در اینجا امکان‌پذیر نیست، برای همین علاقمندان به این مباحث را به خواندن این کتاب توصیه می‌کنم و مطمئنم از خواندن آن لذت خواهند برد.</description>
                <category>حجت جعفری</category>
                <author>حجت جعفری</author>
                <pubDate>Sat, 16 Jul 2022 12:20:43 +0430</pubDate>
            </item>
                    <item>
                <title>حصار چسترتون در مهندسی نرم افزار</title>
                <link>https://virgool.io/@hojjatjafary/%D8%AD%D8%B5%D8%A7%D8%B1-%DA%86%D8%B3%D8%AA%D8%B1%D8%AA%D9%88%D9%86-%D8%AF%D8%B1-%D9%85%D9%87%D9%86%D8%AF%D8%B3%DB%8C-%D9%86%D8%B1%D9%85-%D8%A7%D9%81%D8%B2%D8%A7%D8%B1-p9l7rkqdhbz5</link>
                <description>دو دوست در حال پیاده‌روی در یک جاده بودند که ناگهان با حصاری در وسط راه مواجه شدند، اولی که روحیه اصلاح‌گری بالایی داشت با خوشحالی گفت: این حصار اینجا بی استفاده‌ست، بیا بذاریمش کنار. دوست دوم که کمی باهوش تر بود جواب داد: اگر استفادهٔ این حصار رو نمی‌بینی پس من اجازه نمی‌دم که برش داری، برو کنار و کمی فکر کن، هر موقع استفادهٔ این رو فهمیدی و به من گفتی اونوقت شاید اجازه بدم این رو از سر راه برداری.دوست دوم راست می‌گفت حصار که از درون زمین سبز نشده بود، در واقع کسی آن را با قصد قبلی آنجا گذاشته بود، شاید اگر اولی کمی دورتر از نوک دماغش را نگاه می‌کرد و از حصار فاصله می‌گرفت با یک چاله یا خطر دیگری رو به رو می‌شد. پس باید اول دلیل بودن حصار را پیدا می‌کرد.حصار چسترتون (Chesterton&#x27;s fence) اصلی است که در آن اصلاحات نباید انجام شود مگر این که استدلال‌های پشت وضعیت فعلی امور فهمیده شده باشد. این اصل در حوزه‌های مختلفی مثل سیاست، اقتصاد، نو اندیشی دینی و ... قابل تعمیم است، ویکیپدیا معمولا کاربران خود را به رعایت این اصل در زمان ویرایش صفحات توصیه می‌کند.گیلبرت چسترتون نویسنده، فیلسوف و منتقد قرن ۱۹ و ۲۰ انگلیس است که بخشی از کتابش به نام The Thing: Why I Am a Catholic که در سال ۱۹۲۹ چاپ شد به نام اصل حصار چسترتون معروف شده است.تعمیم حصار چسترتون در مهندسی نرم افزاربه عنوان توسعه دهنده نرم افزار وقتی وارد یک پروژه بزرگ می‌شویم با کدهای زیادی رو به رو می‌شویم که نویسنده اصلی آنها نبوده‌ایم به خصوص اگر Code Base پروژه نسبتا قدیمی باشد. در این مواقع ناخودآگاه به دنبال قسمت‌های غلط یا بد کد می‌گردیم تا آنها را اصلاح کنیم و ناگهان این جمله‌ها در ذهن و زبان ما جاری می‌شود:چرا این تکه کد اینجاست! باید ببرمش بالاتر!چرا این شرط را دوبار چک کرده، اضافیه پاکش کنم!این تکه رو که خیلی راحت‌تر می شد نوشت! چرا این کار رو کرده؟!اوه این فاجعه‌ست! اگه من بودم یه جور دیگه می‌نوشتم.و چرا های مختلف دیگر...این چرا ها معمولا زمانی پیش می‌آید که هنوز تسلط کاملی روی جزییات کد نوشته شده نداریم. راحت ترین کار این است که فرض کنیم برنامه نویس قبلی بسیار ضعیف‌تر از ما بوده و مساله را به طور کامل متوجه نشده است. با این که این امر فرض محالی نیست و احتمال آن وجود دارد، اما باید این را بدانیم که دقیقا عکس این موضوع نیز محتمل است و ممکن است همه تصمیم‌ها با دقت و دلیل خاصی گرفته شده باشند، برای همین چالش ما تلاش برای پیدا کردن این دلیل‌ها است. فهمیدن حالت ذهنی کسی که این کدها را در یک زمان مشخص نوشته هم کار چالش برانگیزی است.هر نسلی خود را باهوش تر از نسل قبل و خردمندتر از نسلی که بعد از او می آید،‌ تصور می‌کند.جورج اورولبنابراین نرم افزار درون خلا طراحی و تولید نمی‌شود، بلکه محصول دنباله‌ای از عوامل، رخدادها و تعاملات پیچیده است. اگر یک مانع وجود دارد لابد دلیلی برای قرار گرفتن آن هست و اگر کدی وجود دارد لابد دلیلی پشت آن هست.اصل حصار چسترتون در مهندسی نرم افزار می‌گوید ما تنها زمانی اجازه تغییر کدهای موجود را داریم که استدلال‌های پشت آن را کاملا فهمیده باشیم و بدانیم که چرا به این شکل نوشته شده‌اند، در غیر این صورت هر تغییری با ریسک ایجاد عوارض جانبی و مشکلات پیش بینی نشده همراه خواهد بود.برای فهمیدن استدلال‌های پشت بخش‌هایی از کد که در مورد آن سوال داریم ساده‌ترین راه این است که به برنامه نویس اصلی مراجعه کنیم، اگر برنامه‌نویس اصلی در دسترس باشد این پرسش‌ها باعث می‌شود که او نیز دلایل خود را دوباره مرور کند و به درستی تصمیم‌های خود مطمن‌تر شود که بسیار برای پروژه مفید است اما ممکن است برنامه نویس اصلی دیگر در شرکت حضور نداشته باشد. یا ممکن است که هنوز در آن شرکت باشد ولی به دلیل گذر زمان یا حضور در پروژه دیگر دلایل کارهای خود را فراموش کرده باشد.در این صورت بهترین راه این است که کدها را با دقت مطالعه و Debug کنیم و دلایل را حدس بزنیم، چون حدس زدن بهتر از نداشتن دلیل است و حداقل چهارچوبی برای تغییرات پیشنهادی داریم. همچنین داشتن چندین حدس خیلی بهتر از یک حدس است چون باعث پوشش بیشتر سناریوهای محتمل می‌شود.منابع زیر نیز می‌توانند به ما در فرآیند فهمیدن کدها کمک کنند:کامنت‌ها می‌توانند کمک کننده باشند ولی همه ما می‌دانیم که چطور برای کدهای خودمان کامنت می‌گذاریم و معمولا کامنت‌ها یا با کد سازگاری ندارند یا بسیار قدیمی تر از کدها هستند.اگر مستند سازی خاصی برای پروژه وجود داشته باشد می تواند به اشراف شما به مساله و فهمیدن بعضی تصمیم‌ها کمک کند ولی ممکن است فاصله بین مستند سازی و کدها زیاد باشد.یکی دیگر از منابع برای فهمیدن کدها مرور Unit Test های پروژه است. اما تست‌ها هم ممکن است دلایل تصمیم‌های نویسنده را آشکار نکنند.منبع دیگر مرور Commit Log های Version Control پروژه است، که آن هم ممکن است دقیق نباشد.البته باید مراقب بود که حصار چسترسون تبدیل به مانعی برای محافظه‌کاری و مقاومت در مقابل تغییرات نشود، همان ‌طور که از اسم نرم افزار پیداست باید به همان اندازه هم نرم و انعطاف پذیر باشد تا بتواند هر زمان که لازم بود تغییر کند، ولی تغییرات باید با پشتوانه‌های منطقی و صحیح انجام شود.در آخر باید گفت که ما باید قبل از تلاش برای برچیدن یا تغییر حصار تلاشی را صرف دیدن استفادهٔ حصار کنیم در غیر این صورت ریسک ضررهای بیشتر نسبت به فواید آن را خواهیم داشت.</description>
                <category>حجت جعفری</category>
                <author>حجت جعفری</author>
                <pubDate>Tue, 25 Jan 2022 11:15:57 +0330</pubDate>
            </item>
                    <item>
                <title>کتابخانه توزیع شده - یک ایده</title>
                <link>https://virgool.io/@hojjatjafary/%DA%A9%D8%AA%D8%A7%D8%A8%D8%AE%D8%A7%D9%86%D9%87-%D8%AA%D9%88%D8%B2%DB%8C%D8%B9-%D8%B4%D8%AF%D9%87-%DB%8C%DA%A9-%D8%A7%DB%8C%D8%AF%D9%87-rlrounqjmhxu</link>
                <description>این فقط یک ایده خام است که به ذهنم رسیده قطعا ضعف‌ها و ایرادهایی دارد که با فکر و بحث امکان بر طرف شدن را دارد.اگر اهل کتاب باشید می دانید که این روزها قیمت کتاب هم مثل خیلی چیزهای دیگر افزایش یافته و خرید و داشتن همهٔ کتاب‌هایی که دوست دارید داشته باشید سخت شده، به خصوص اگر طرفدار کتاب فیزیکی باشید و خواندن کتاب روی کتابخوان‌های دیجیتال و موبایل شما را راضی نمی‌کند.گاهی هم شما کتابهایی دارید که دوست دارید در اختیار دیگران قرار دهید تا آنها هم از خواندنشان لذت ببرند، اولین راه شاید اهدای کتاب‌ها به کتابخانه عمومی محله باشد که کار بسیار پسندیده‌ای است.اما این جا مشکلی وجود دارد، شاید شما کتابی را بخواهید که در یکی از کتابخانه‌های عمومی شرق تهران است و شما در غرب تهران زندگی می‌کنید. این در حالی هست که امکان جستجو در بین کتاب‌های تمام کتابخانه‌های عمومی تهران وجود داشته باشد که تا جایی که من خبر دارم چنین امکانی وجود ندارد. پس خیلی از کتاب‌ها در انتظار یک خواننده خوب در کتابخانه‌ها خاک می خورند در حالی که خوانندهٔ آن خبر ندارد که این کتاب در کدام کتابخانه منتظر اوست.ایده کتابخانه توزیع شده اینجا می‌تواند کتاب را به خواننده آن برساند.این یک شبکه از افرادی است که کتابهایی دارند، در ابتدا می‌توان کتابهایی به شبکه تزریق کرد.در این سرویس کسانی که کتابی را از سیستم تحویل گرفته‌اند، آن را مطالعه کرده‌اند و حالا می‌خواهند آن را به شبکه برگردانند از طریق یک سایت یا اپلیکیشن، آن را به عنوان کتاب آماده تحویل در سیستم ثبت می‌کنند، کسانی هم که کتابی را نیاز دارند درخواست خود را در این سیستم مرکزی ثبت می‌کنند.وظیفه این سرویس این است که کتاب‌های آماده تحویل را از تحویل دهنده بگیرد و آن را به کسی که درخواست داده تحویل دهد. این کار می‌تواند از طریق سرویس‌های موجود مثل الوپیک یا اسنپ صورت بگیرد. ولی سیستم باید کتاب‌ها را طوری تحویل پیک موتوری دهد که در یک مسیر مشخص چندین کتاب تحویل یا پس گرفته شود، در این صورت هزینه انتقال کتاب بسیار کاهش می‌یابد چون امکان حمل چند ده کتاب توسط یک پیک موتوری وجود دارد.کسانی که می‌خواهد کتابشان را اهدا کنند فقط کافیست کتاب را در این سامانه ثبت کنند و یک کد یکتا به صورت بارکد دریافت کنند و روی کتاب بچسبانند، کمی بعد خواهند دید که یک خواننده درخواست خود را در سامانه ثبت کرده و یک پیک موتوری برای گرفتن کتاب به او مراجعه خواهد کرد و کتاب را به دست خواننده محترم خواهد رساند. این کتاب تا زمانی که سالم بماند درون شبکه بین خوانندگان گوناگون دست به دست خواهد شد.هر کتاب یک کد یکتا دارد که از طریق آن می‌توان پیگری کرد که یک کتاب در حال حاضر دست چه کسی است و چندین دست جابه جا شده و چه مدت دست کاربر آخری مانده است.کتاب نباید بیش از یک مدت زمان مشخص دست یک کاربر بماند، سیستم باید هر از گاهی به او هشدار دهد، اگر از مدت زمان تعیین شده گذشته باشد کاربر باید کتاب را تحویل دهد و در زمان دیگری دوباره آن را درخواست کند.کاربران باید یک حق عضویت سالانه به عنوان نگهداری از سیستم به سایت پرداخت کنند.</description>
                <category>حجت جعفری</category>
                <author>حجت جعفری</author>
                <pubDate>Sat, 27 Nov 2021 11:26:27 +0330</pubDate>
            </item>
                    <item>
                <title>Type Punning</title>
                <link>https://virgool.io/@hojjatjafary/type-punning-qfy7mwnuuu5j</link>
                <description>در علوم کامپیوتر به هر تکنیکی که باعث دور زدن یا از کار انداختن Type System یک زبان برنامه نویسی شود Type Punning می‌گویند. معمولا از این روش برای به دست آوردن تاثیری استفاده می‌شود که حصول آن با ابزار رسمی موجود در حوزه یک زبان یا سخت است یا غیر ممکن.در واقع با type punning بخشی از حافظه که با یک نوع خاص تفسیر می‌شود را با نوع دیگر تفسیر می‌کنیم. این کار زمانی مفید است که می‌خواهیم به بازنمایی زیرین اشیا دسترسی پیدا کنیم و آن را مشاهده یا دستکاری کنیم و یا انتقال دهیم. این عمل معمولا در کدهای مربوط به serialization و شبکه بیشتر مشاهده می‌شوند.در زبانهای C و  ++C ساختارهایی مثل تبدیل نوع اشاره‌گر و union و به طور خاص در ++C تبدیل نوع ارجاع ها و عملگر reinterpret_cast  موجود هستند که اجازه انجام type punning های مختلف را می‌دهند، اگر‌چه برخی از این روش‌ها توسط استاندارهای زبان پشتیبانی نمی‌شوند.به طور سنتی این کار معمولا با گرفتن آدرس یک شی و تبدیل اشاره گر آن به اشاره گر نوع دیگری که می‌خواهیم به آن تفسیر کنیم آغاز می‌شود و در نهایت با استفاده از اشاره گر جدید به محتوای آن دسترسی پیدا می‌کنیم.در زیر مثال ساده ای از type punning را می‌بینیم:int numberInt = 42;
short *numberShort =  (short *) &amp;numberInt ;
(*numberShort) = 43;مثال دیگری که معمولا برای بررسی منفی بودن یک متغیر float استفاده می‌شود به طوری که برای سرعت بیشتر از عملگرهای fpu استفاده نشود به صورت زیر است:bool is_negative(float x) 
{
    return x &lt; 0.0;
}با توجه به فرض این که مقایسه اعداد ممیز شناور پر هزینه است و همچنین با فرض بازنمایی اعداد float به صورت استاندارد IEEE 754 و ۳۲ بیت بودن طول اعداد integer می‌توانیم با استخراج کردن بیت علامت از عدد ممیز شناور به منفی یا مثبت بودن آن پی ببریم:bool is_negative(float x) 
{
    unsigned int *ui = (unsigned int *)&amp;x;
    return *ui &amp; 0x80000000;
}همچنین از Union نیز می‌توان برای type punning استفاده کرد:bool is_negative(float x) 
{
    union 
    {
        unsigned int ui;
        float d;
    } my_union = { .d = x };
    return my_union.ui &amp; 0x80000000;
}اگر در استفاده از روش‌های type punning دقت نشود باعث ایجاد Pointer aliasing و نقض قانون strict aliasing شده و باعث ایجاد رفتار تعریف نشده (undefined behavior) می‌شود.معنای Pointer aliasingدر برنامه نویسی aliasing به معنای این است که به یک مکان حافظه مشخص با استفاده از دو نام مختلف دسترسی پیدا کرد به طول مثال:int anint;
int *intptr = &amp;anint;اگر مقدار *intptr را تغییر دهیم مقداری که توسط anint مشخص می‌شود هم تغییر خواهد کرد، در اینجا intptr نام دیگری است برای یک چیز مشخص.قانون Strict Aliasingبه این معناست که dereference کردن اشاره گرها به اشیایی با انواع متفاوت نباید منجر به ارجاع به مکان یکسانی از حافظه شود (یعنی نباید همدیگر را alias کنند).مشکل رفتار تعریف نشدهوجود aliasing باعث ایجاد محدودیت های سختی روی ترتیب اجرای دستورالعملهای برنامه می‌شود. اگر متن برنامه نوشته شده دو عمل نوشتن روی متغیرهایی که همدیگر را alias کرده‌اند وجود داشته باشد آن دستورات باید عینا و به همان ترتیب در کد ماشین تولید شده قرار گیرند. اصولا هرگونه جابه جایی دستورالعمل های خواندن و نوشتن چنین متغیرهایی باعث تولید نتیجه اشتباه در برنامه خواهد شد.به طور مثال تابع زیر را در نظر بگیرید:void updatePtrs(size_t *ptrA, size_t *ptrB, size_t *val)
{
  *ptrA += *val;
  *ptrB += *val;
}این تابع را می توان طوری فراخوانی کرد که اشاره گرهای ptrA و ptrB هر دو به یک مکان حافظه اشاره کنند:size_t val = 5;
size_t sizeVar = 10;
updatePtrs(&amp;sizeVar, &amp;SizeVar, &amp;val);در این صورت کد assembly زیر می‌تواند تولید شود:; Hypothetical RISC Machine.
ldr r12, [val]     ; Load memory at val to r12.
ldr r3, [ptrA]     ; Load memory at ptrA to r3.
add r3, r3, r12    ; Perform addition: r3 = r3 + r12.
str r3, [ptrA]     ; Store r3 to memory location ptrA, updating the value.
ldr r3, [ptrB]     ; &#039;load&#039; may have to wait until preceding &#039;store&#039; completes.
ldr r12, [val]     ; Have to load a second time to ensure consistency.
add r3, r3, r12
str r3, [ptrB]در این کد ابتدا مقدار val درون رجیستر r12 لود می‌شود و بعد مقدار ptrA در ریجستر r3 لود شده و سپس با هم جمع می‌شوند و مقدار در prtA ذخیره می‌شود. همین عمل برای ptrB هم انجام می‌شود. که در نهایت مقدار sizeVar مساوی 20 می‌شود.اما به علت وجود قانون strict aliasing بخش بهینه ساز(optimizer) کامپایلر می‌تواند برای تولید کد بهینه ترتیب برخی دستور العمل ها را عوض کند به طور مثال برای تابع بالا کد زیر تولید خواهد شد:ldr r12, [val]  ; Note that val is now only loaded once.
ldr r3, [ptrA]  ; Also, all &#039;load&#039;s in the beginning ...
ldr r4, [ptrB]
add r3, r3, r12
add r4, r4, r12
str r3, [ptrA]  ; ... all &#039;store&#039;s in the end.
str r4, [ptrB]در این کد بهینه ساز ابتدا همه مقدار را در رجیسترها لود می‌کند و بعد عمل جمع و سپس ذخیره سازی را انجام می‌دهد. که در نهایت مقدار sizeVar مساوی 15می‌شود که با نتیجه حالت قبلا کاملا متفاوت و نادرست است.راه صحیحراه صحیح type punning در زبانهای C و ++C استفاده از تابع memcpy است که به نظر کمی سنگین می‌رسد اما در زمان کامپایل بهینه ساز باید موارد استفاده این تابع را برای type punning تشخیص دهد و آنها را بهینه کنه.منابعhttps://en.wikipedia.org/wiki/Type_punninghttps://en.wikipedia.org/wiki/Pointer_aliasinghttps://en.wikipedia.org/wiki/Restricthttps://gist.github.com/shafik/848ae25ee209f698763cffee272a58f8https://blog.regehr.org/archives/1307</description>
                <category>حجت جعفری</category>
                <author>حجت جعفری</author>
                <pubDate>Sat, 27 Mar 2021 15:56:52 +0430</pubDate>
            </item>
                    <item>
                <title>آیا رمز پویا مشکل را حل می‌کند؟!</title>
                <link>https://virgool.io/@hojjatjafary/%D8%A2%DB%8C%D8%A7-%D8%B1%D9%85%D8%B2-%D9%BE%D9%88%DB%8C%D8%A7-%D9%85%D8%B4%DA%A9%D9%84-%D8%B1%D8%A7-%D8%AD%D9%84-%D9%85%DB%8C%DA%A9%D9%86%D8%AF-siwcllz5zfxd</link>
                <description>حتما این روزها متوجه تصمیم بانک مرکزی در مورد اجرای اجباری رمز پویا برای کارتهای اعتباری مطلع شده‌اید، این تصمیم با مخالفت برخی فعالان سرویس‌های اینترنتی مواجه شده چرا که اجرای آن بدون آموزش کافی باعث سردرگمی مردم در کارهای روزانه و ضرر شرکت‌های فعال در این زمینه خواهد شد.طبق آمارهای رسمی روزانه تعداد زیادی پرونده قضایی در پلیس فتا در مورد فیشینگ یا کلاهبرداری اینترنتی از کاربران و دزدی از حساب آن‌ها باز می‌شود که باعث دردسرهای زیادی هم برای بانک‌ها، مردم و هم پلیس فتا شده است.اما اجرای این طرح تا چه حد می‌تواند جلوی کلاهبرداری اینترنتی را بگیرد؟این مقاله صرفا جهت آموزش بوده و بررسی فنی اجمالی در مورد مسایل پیرامون فیشینگ است.فیشینگ چیست؟فیشینگ به انگلیسی Phishing که تبدیل یافته‌ی کلمهٔ Fishing است نوعی کلاهبرداری اینترنتی است. در این روش فرد کلاهبرداری ابتدا یک سایت اینترنتی می‌سازد، مثلا فروش شارژ نیم بها، یا سایت ثبت نام یارانه. بعد این فرد با هر دوز و کلک و دروغی که شده سعی می‌کند کاربر را به این سایت ببرد و او را برای انجام عملیات بانکی وسوسه یا مجبور کند، مثلا قربانی پیامکی دریافت می‌کند که برای جلوگیری از قطع یارانه به سایت زیر مراجعه کنید.کاربر بی‌نوا تصور می‌کند که یک عملیات بانکی ساده انجام می‌دهد و یک خرید اینترنتی معمولی انجام می‌دهد ولی بی خبر از آن که درگاه بانکی نیز جعلی است و اطلاعاتی که در آن وارد می‌کند مستقیما به فرد کلاهبردار فرستاده می‌شود.معمولا کلاهبردارها از آدرس‌هایی مشابه سایت‌های معتبر استفاده می‌کند تا کاربر کمتر شک کند.در این جا به هیچ وجه از واژه‌ٔ هکر برای این افراد استفاده نمی‌کنم چون هیچ عملیات نفوذی انجام نمی‌شود و روش فیشینگ کاملا مبتنی بر دروغ و کلاهبرداری است، گرچه هر دو مجرم هستند و عمل مجرمانه انجام می‌دهند.رمز پویا یا رمز یک بار مصرفیکی از راه‌های جلوگیری از فیشینگ استفاده از رمز یک بار مصرف یا رمز پویا است (one-time password (OTP),  dynamic password)، به طوری که کاربر علاوه بر اطلاعات کاربری برای ورود به حساب کاربری یا انجام تراکنش بانکی نیاز به یک رمز دیگر دارد که فقط برای همان عملیات معتبر است. روش‌های زیادی برای تولید و ارسال رمز یک بار مصرف وجود دارد مثل دستگاه‌های تولید رمز (token device)، روش پیامکی، روش تماس صوتی و روش نرم افزاری مثل google authenticator.الگوریتم‌های مختلفی برای تولید رمز یک بار مصرف وجود دارد ولی عمده این روش‌ها از ترکیب اطلاعات کاربر، زمان جاری و یک کلید مشترک استفاده می‌کنند. برای همین معمولا نیاز است تا دستگاه یا نرم افزاری که رمز یک بار مصرف تولید می‌کند با ساعت سمت سرور همگام باشد.حتی اگر یک کلاهبردار به این اطلاعات دسترسی پیدا کند فقط برای مدت زمان کوتاهی می‌تواند از آن استفاده کند (بین ۶۰ تا ۱۲۰ ثانیه).با استفاده از این روش اطلاعاتی که شما برای شخص کلاهبردار می‌فرستید دیگر قابل استفاده نخواهد بود.گام بعدی مجرمینتا به حال اکثر روش‌های فیشینگ کاملا به صورت ایستا (Static) بودند. در روش‌های فیشنگ سنتی قربانی به یک سایت فیشینگ می‌رسد و اطلاعات شخصی خود را وارد می‌کند. این اطلاعات برای استفاده‌های بعدی مجرم ذخیره می‌شدند. معرفی سیستم‌های احراز هویت دو عاملی (two-factor authentication) به اختصار 2FA به خصوص رمز ورود یک بار مصرف این روش‌های فیشینگ از کار افتادند. ذخیره این اطلاعات پویا دیگر به درد کلاه‌بردارها نمی‌خورد. در روش احراز هویت دو عاملی کاربر باید یک رمز یک بار مصرف را در فرآیند ورود به سایت یا تراکنش مالی وارد کند.برای مدت کوتاهی سرویس‌های اینترنتی کاهش شدید حمله‌های فیشینگ را گزارش کردند، اما این پایان ماجرا نبود و مجرمین تسلیم نشدند.روش Cross-Channel Phishingدر این روش فرد کلاهبردار سعی می‌کند علاوه بر سایت فیشینگ از طریقی به رمز یک بار مصرف کاربر نیز دسترسی پیدا کند، مثلا تلفن مشتری یا شبکه تلفن همراه را شنود کند و به پیامک رمز یک بار مصرف دسترسی پیدا کند، یا با یک دروغ دیگر کاربر را وادار کند تا رمز را به یک شماره دیگر ارسال کند.سالها پیش یک گروه کلاهبردار در سوئد به بهانه خراب بودن دستگاه رمز ساز مشتریان بانک به منزل مشترکین مراجعه می‌کردند و یک دستگاه رمز ساز جعلی را با دستگاه اصلی تعویض می‌کردند تا از این طریق به رمز یک بار مصرف مشتریان دسترسی پیدا کنند.روش  Phishing 2.0بسیاری از سازمان‌ها بر این باورند که با اجرای 2FA دیگر ایمن خواهند بود، اما این دیگر صادق نیست. با استفاده از ابزارهای فیشینگ جدید که قابلیت‌های real-time دارند کلاهبرداران روش‌های عملیاتی خود را بهبود داده‌اند تا بتوانند عمل کلاهبرداری را در زمان حقیقی انجام دهند.این روش که به real-time phishing یا Man in the Middle phishing نیز شناخته می‌شود می‌تواند سرویس‌هایی را که 2FA هم دارند مورد حمله قرار داد.در این روش سایت فیشینگ به صورت Real-time با سایت بانک در ارتباط است. در نگاه اول real-time phishing به نظر شبیه انواع مختلف فیشینگ دیگر است، اما فقط با بررسی دقیقتر است که مشخص می‌شود سایت مخرب به صورت real-time به سایت بانک متصل است. این اتصال سایت مخرب را قادر می‌سازد که اطلاعات وارد شده توسط کاربر را بلافاصله به سایت بانک ارسال کند.اطلاعات احراز هویتی که کاربر وارد سایت فیشینگ می‌کند از جمله رمز یک بار مصرف دزدیده شده و بلافاصله توسط کلاهبردار برای برقراری ارتباط با حساب بانکی مورد استفاده قرار می‌گیرد. دیگر مهم نیست که سایت بانک از چه دستگاه token ای، سیستم پیامکی یا هر سیستم دیگری استفاده می‌کند.روشهای (Man In The Middle (MITM خیلی جدید نیستند و راه حل‌های مقابله خاص خود را دارند اما باید توجه داشت که کاربران آموزش ندیده‌ای که تا امروز به این راحتی به دام ساده‌ترین روش‌های فیشینگ می‌افتادند چطوری خواهند توانست با چنین روش‌های پیچیده‌ای مقابله کنند.در برخی روش‌های MITM نیاز است که کلاهبردار و قربانی درون یک شبکه باشند تا بتوان از طریق -ARP Spoofing عملیات دستکاری اطلاعات را انجام داد ولی در فیشینگ لزوما نیاز به این موضوع نیست، چرا که کاربر خود به سایت فیشینگ مراجعه می‌کند.برای انجام این کار نیاز است تا برنامه‌ای سمت سرور فیشینگ اجرا شود و درخواست را به بانک ارسال کند اما به علت وجود روش‌های Anti-Forgery در سایت‌ها نیاز است تا صفحه بانک بارگذاری شده و اطلاعات کاربر از طریق همان صفحه ارسال شود. برای همین نیاز است تا صفحهٔ Html سایت پردازش شود و بعد همراه با اطلاعات کاربر به سمت بانک ارسال شود. این کار برای یک برنامه نویس متوسط کار سختی نیست به خصوص با زبان Python، البته ابزارهایی وجود دارد که این کار را به صورت خودکار انجام می‌دهند که در ادامه با آنها آشنا می‌شویم.از جمله ابزارهای Phishing 2.0 می توان به evilginx2 و Modlishka اشاره کرد.با استفاده از این ابزار دیگر لازم نیست حتی یک سایت جعلی شبیه سایت اصلی ساخت به این صورت که نرم افزار فیشینگ میان شما و سایت اصلی قرار می‌گیرد و ترافیک سایت را تحلیل می‌کند و تغییراتی که لازم است را در آن ایجاد می‌کند، در این حالت سایتی که شما می‌بینید از نظر ظاهری کاملا شبیه سایت اصلی است ولی در محتوای اطلاعات آن تغییراتی انجام شده است.این ابزار علاوه بر دور زدن سیستم 2FA اطلاعات Session token را نیز ذخیره می‌کند که به کلاهبردار اجازه می‌دهد به راحتی وارد حساب کاربری قربانی شود.منابع:https://en.wikipedia.org/wiki/Phishinghttps://en.wikipedia.org/wiki/One-time_passwordhttps://securityintelligence.com/real-time-phishing-takes-off/https://www.ubisecure.com/security/phishing-2-0/https://www.zdnet.com/article/new-tool-automates-phishing-attacks-that-bypass-2fa/https://www.microsoft.com/security/blog/2019/12/11/the-quiet-evolution-of-phishing/</description>
                <category>حجت جعفری</category>
                <author>حجت جعفری</author>
                <pubDate>Wed, 18 Dec 2019 11:01:30 +0330</pubDate>
            </item>
                    <item>
                <title>اینترنت یا اینترنت؟!</title>
                <link>https://virgool.io/@hojjatjafary/%D8%A7%DB%8C%D9%86%D8%AA%D8%B1%D9%86%D8%AA-%DB%8C%D8%A7-%D8%A7%DB%8C%D9%86%D8%AA%D8%B1%D9%86%D8%AA-hdhlapc79zd5</link>
                <description>مثل خیلی مسایل دیگر در کشور بحث شبکه ملی اطلاعات هم وارد فضاهای هیجانی و غیرکارشناسی شده، عده‌ای خوش بین هستند و از ضرورت اجرای این طرح می‌گویند و آن را برای امنیت اطلاعات و اقتصاد کشور مفید می‌دانند اما عده‌ای هم بدبین هستند و این طرح را وسیله‌ای در دست حاکمیت و اجرای آن را مساوی با کره‌ٔ شمالی شدن ما می‌دانند.در این مقاله سعی می‌کنم بدون گرایش خاص صرفا جنبه‌های مختلف این موضوع را بررسی کنم همچنین تا حد ممکن از بیان اصطلاحات و جزییات فنی خودداری می‌کنم تا بتواند برای کسانی که آشنایی زیادی با مفاهیم  کامپیوتر و شبکه ندارند نیز مفید باشد.شبکهٔ (Network) کامپیوتریمجموعه‌ای از کامپیوترهای به هم متصل که قادر به تبادل اطلاعات بین هم باشند را شبکه می‌گوییم. برای این که کامپیوترها قادر به تبادل اطلاعات شوند نیاز به دستورالعمل یا زبان مشترکی دارند که به آن پرتوکل (Protocol) می‌گوییم. کامپیوترها می‌توانند به روش‌های مختلفی به هم متصل شوند که به آن ساختار یا توپولوژی شبکه می‌گوییم. شبکه‌ها از نظر وسعت می‌توانند از چند کامپیوتر در یک اتاق، یک ساختمان، یک شهر یا حتی یک کشور باشند، به شبکه‌های کوچک و محدود LAN یا Local Area Network می‌گویند. کامیپوترهای داخل یک شبکه معمولا توسط دستگاهی به نام Switch به هم متصل می‌شوند.شبکه‌ای از شبکه‌ها (Internetworking)مفهوم Internetworking به معنای اتصال دو یا چند شبکه مختلف برای ایجاد یک شبکه‌ٔ بزرگتر است، به طوری که هر جفت کامپیوتر در این شبکه‌ها بتوانند با هم تبادل اطلاعات کنند. مثل هر مدل شبکهٔ دیگر برای تحقق این هدف نیاز به پرتوکل مشترک، ساز و کار آدرس‌دهی و مسیریابی (Routing) داریم. کار مسیریابی بسته‌های اطلاعات توسط دستگاه‌هایی به نام Router انجام می‌شود و بسته‌ها را بین شبکه‌های مختلف منتقل می‌کنند تا به دست گیرندهٔ آن برسد.شبکه‌ای که از اتصال چند شبکه به وجود می‌آید را internetwork یا به اختصار یک internet می‌نامیم. کلمهٔ Internetworking از ترکیب inter به معنای «میان» (between) و networking ساخته می‌شود و ترکیب internet-working یا international-network نیست.یکی از مثال‌های مهم internetworking شبکهٔ جهانی اینترنت است (the Internet). کوچکترین internet یک شبکهٔ Lan با دو کامپیوتر است.اما واژهٔ Internet با معنای اصطلاحی یک کلمهٔ خاص محسوب می‌شود که به معنای شبکهٔ جهانی اینترنت است که در زبان انگلیسی معمولا به صورت the Internet نوشته می‌شود. زمانی که ما از اینترنت صحبت می‌کنیم معمولا منظورمان شبکهٔ جهانی اینترنت یا با ادبیات این روزها اینترنت بین الملل است.شبکهٔ جهانی اینترنت مجموعه‌ای از هزاران و شاید میلیونها شبکهٔ به هم متصل است که با هم یک شبکهٔ بزرگ جهانی را تشکیل داده‌اند بنابراین استفاده از واژهٔ «اینترنت ملی» به نظر اشتباه است و بهتر است از همان واژهٔ شبکه ملی اطلاعات استفاده کنیم.ضرورت شبکه ملی اطلاعات چیست؟شبکه ملی اطلاعات یا (Iran National Data Network (INDN یک شبکه انتقال داده است که سرتاسر کشور و همچنین درگاه‌های بین المللی را به هم متصل می‌کند.فرض کنید شما از تهران می‌خواهید به یک مرکز داده در تبریز متصل شوید و اطلاعاتی را دریافت کنید. به دلیل نوع خاص الگوریتم‌ها و روش‌های مسیریابی در router ها که بر اساس کوتاهترین مسیر و همچنین ترافیک شبکه صورت می‌گیرد ممکن است بسته‌های اطلاعات از مسیرهای مختلفی عبور کنند.در این صورت ممکن است درخواست گرفتن اطلاعات شما از تبریز از هر مسیر اطلاعاتی‌ای عبور کند مثلا ممکن است داده ابتدا به کشور ترکیه، عراق یا هر کشور دیگری برود و بعد از آنجا دوباره به سمت شما برگردد.یکی از کارکردهای اصلی شبکه ملی اطلاعات این است که گردش اطلاعات را مدیریت کرده و ترافیک داخلی را در داخل نگه دارد که این کار باعث صرفه جویی عظیمی در هزینه ترافیک دادهٔ بین الملل می‌گردد، همین موضوع باعث کاهش هزینه اینترنت کاربران می‌شود. پس ایجاد شبکه ملی اطلاعات لزوما به معنای قطع اینترنت بین الملل نیست که در ادامه بیشتر بررسی می‌شود.مزایا و معایببرخی وجود شبکه ملی اطلاعات را مانند چاقوی دو لبه‌ای می‌دانند که مزایا و معایب خود را دارد و بدون انکار مزایای این شبکه آن را وسیله‌ای در دست حاکمیت برای سانسور و قطع اینترنت بین الملل می‌دانند. اما باید توجه داشت که قطع اینترنت بدون وجود چنین شبکه‌ای نیز برای حکومت‌ها ممکن است فقط شاید کمی سخت‌تر باشد. این یکی از مهم‌ترین ایراداتی است که به وجود این شبکه وارد می‌شود.صحبت هایی که از طرف برخی افراد درون حاکمیت هم مطرح می‌شود نگرانی کاربران را بیشتر می‌کند مثلا می‌گویند اینترنت را بازِ باز نکنید یا می‌گویند شبکه ملی اطلاعات ما را از خارج بی‌نیاز می‌کند.این‌ها صحبت‌های دقیقی نیست که باید مسئولین نسبت به آن آگاه شوند (که نمی‌دانم چطور!)، اطلاعاتی که به نام اینترنت در سرتاسر جهان توسط مردم و نهادها تولید و پخش می‌شود آنقدر عظیم است که هیچ کشوری به تنهایی قادر به جایگزینی آن نیست.چیزی که ما از طریق موتورهای جستجو به آن دسترسی داریم فقط بخش کوچکی از این داده‌های عظیم است. معمولا این اطلاعات را به یک کوه یخ تشبیه می‌کنند که فقط بخشی از آن روی آب است.از دیگر نگرانی های کاربران قطع سرویس‌های بین المللی با کیفیت خارجی است که به راحتی نمی‌توان آنها را با سرویس‌های داخلی جایگزین کرد، حتی به فرض وجود دانش فنی و تجهزات کافی در داخل هزینه نگهداری و تولید بالایی دارند که با توجه به استفادهٔ جهانی از این سرویس‌ها هزینه آن نیز سرشکن می‌شود و ایجاد همهٔ این سرویسها در داخل صرفه اقتصادی نخواهد داشت، جز در موارد حساس.اما باید به آن روی سکه هم توجه کرد.تحریمدر صورتی که کشورهای متخاصم با ایران به هر دلیلی مثل دیوانگی ترامپ تصمیم بگیرند که اینترنت ایران یا سایر سرویس‌ها را تحریم کنند چه باید کرد؟ در صورتی که ارتباطات داخلی و زیر ساخت های لازم ایجاد نشده باشد کشور فلج خواهد شد.کاربران ایران بارها شاهد این موضوع بوده‌اند که از سمت سرویس‌های بین المللی تحریم شده‌اند مثل تحریم github که همین امسال روی داد. فرض کنید شما یک سرویس آنلاین مثل اسنپ روی سرورهای ابری یک شرکت خارجی داشته باشید و این شرکت ناگهان تصمیم بگیرد که به شرکتهای ایرانی خدمات ندهد.حملهٔ سایبریچندی قبل شاهد یک حملهٔ سایبری بزرگ به شبکهٔ برق کشور ونزوئلا بودیم که باعث قطعی برق گسترده در این کشور شد، سابقهٔ چنین حمله‌ای نیز به شبکهٔ برق اوکراین وجود دارد. بودن یک شبکه داخلی که بتواند ورود و خروج اطلاعات به کشور را مدیریت کند می‌تواند جلوی چنین حملاتی را بگیرد.سرعت بیشترافزایش پهنای باند و کوتاهتر شدن مسیر تبادل اطلاعات باعث افزایش سرعت عمومی اینترنت و به خصوص در دسترسی به سایت‌های داخلی نظیر بانک‌ها، سازمان‌های دولتی و غیردولتی، شرکت‌ها و ...؛امنیتافزایش امنیت به دلیل سخت تر شدن دسترسی به اطلاعات داخلی با راه اندازی مراکز دادهٔ داخلی امکان درز کردن اطلاعات شهروندان ایرانی مثل اطلاعات بانکی و ... به بیرون کمتر می‌شود، هچنین به دلیل عدم عبور داده‌ها از شبکه‌های خارج از کشور امکان شنود اطلاعات نیز کمتر می‌شود.</description>
                <category>حجت جعفری</category>
                <author>حجت جعفری</author>
                <pubDate>Thu, 12 Dec 2019 15:07:40 +0330</pubDate>
            </item>
                    <item>
                <title>تصویر HDR یعنی چه؟</title>
                <link>https://virgool.io/@hojjatjafary/%D8%AA%D8%B5%D9%88%DB%8C%D8%B1-hdr-%DB%8C%D8%B9%D9%86%DB%8C-%DA%86%D9%87-poq5hbwfipmy</link>
                <description>مفهوم (High dynamic range (HDR یا دامنهٔ پویای بالا در عکاسی، نمایشگرها و پرداخت (Render) تصاویر سه بعدی استفاده می‌شود که هر یک با روشهای مربوط به خود پیاده سازی می‌شود و دارای جزییات زیادی هستند، در اینجا به صورت خلاصه این مفهوم را بررسی می‌کنیم.عکاسیدر ابتدا HDR فقط در عکاسی استفاده می‌شد به طوری که عکاس چندین عکس از یک صحنه یکسان را با سطوح نورگیری‌ (exposure levels) مختلف می‌‌گیرد، در واقع بازهٔ بزرگی از مقادیر رنگ را ذخیره می‌کند. این تصاویر ترکیب شده با هم یک تصویر HDR را می‌سازند طوری که بازهٔ جزییات بزرگتری مبتنی بر سطوح نورگیری مختلفی که با هم ترکیب شده‌اند یا نورگیری خاصی که با آن دیده می‌شود، در آن قابل مشاهده است. برای نمونه در تصویر زیر ناحیه‌هایی که نور روشنی دارند در نورگیری پایین جزییات بسیار بیشتری را نمایان می‌کنند (تصویر سمت چپ) اما این جزییات در نورگیری بالاتر دیده نمی‌شوند. در عوض در نورگیری بالاتر ناحیه‌های تاریکتر جزییات بیشتری را نشان می‌دهند که در حالت قبل قابل دیدن نبود (تصویر آپارتمانها در سمت راست).این موضوع شباهت زیادی به نحوهٔ کار کردن چشم انسان دارد و اساس رندر HDR است. زمانی که نور کمی وجود دارد چشم انسان خود را با آن تطبیق می‌دهد بنابراین قسمت‌های تاریکتر بهتر دیده می‌شوند، همچنین به صورت مشابه در ناحیه‌های روشن قسمت های روشن بهتر دیده می‌شوند، مثل این می‌ماند که چشم انسان یک دستگاه نورگیری خودکار بر اساس میزان روشنایی صحنه دارد.برای آشنایی بیشتر با نحوهٔ عکاسی HDR این ویدیو را تماشا کنید.گرافیک سه بعدیدر گرافیک سه بعدی زمانی که مقادیر روشنایی و رنگها در framebuffer ذخیره می‌شوند باید به طور پیش فرض در بازه‌ٔ 0.0 تا 1.0 محدود شوند. در ابتدا این عبارت به ظاهر بدون اشکال باعث می‌شود زمانی که در حال چیدن صحنه هستیم مقادیر نور و رنگ را طوری مشخص کنیم که مقدار fragmentها جایی درون این بازه قرار گیرند. این روش کار می‌کند و با نتایج خوبی همراه است اما اگر ما به یک ناحیهٔ خاص روشن با منابع نور روشن برویم که مجموع نورها از 1.0 بیشتر شود، چه اتفاقی خواهد افتاد؟ پاسخ این است که تمام fragment هایی که جمع نور یا روشنایی آنها بیش از 1.0 شود به مقدار 1.0 محدود می‌شود، که چندان زیبا و تماشایی نیست:به خاطر تعداد زیاد fragmentهایی که مقادیر رنگ آنها به 1.0 محدود شده است fragment ها در ناحیه‌های بزرگی مقدار رنگ سفید دقیقا یکسانی را خواهند داشت که باعث از دست رفتن قابل توجهی از جزییات تصویر شده و همچنین باعث ایجاد تصویری با ظاهر ساختگی و مصنوعی می‌شود.یک راه حل برای این مشکل این خواهد بود که قدرت منابع نور را کاهش دهیم و مطمئن شویم که هیچ ناحیه از fragmentها در صحنه منجر به روشنایی بزرگتر از 1.0 نشود، این راه حل خوبی نیست چون شما را مجبور می‌کند تا از پارامترهای نور غیر واقعی استفاده کنید. راه بهتر این است که اجازه دهیم مقادیر رنگها به صورت موقت از 1.0 بیشتر شود و بعد به عنوان آخرین گام آنها را بدون از دست دادن جزییات به بازهٔ اصلی 0.0 و 1.0 تبدیل(transform) کنیم.نمایشگرها محدود به نمایش رنگها در بازهٔ 0.0 و 1.0 هستند اما چنین محدودیتی در معادله‌های نورپردازی وجود ندارد. با دادن اجازهٔ عبور رنگهای fragment از 1.0 محدودهٔ رنگ بزرگتری از مقادیر رنگ داریم که برای کار روی آنها در درسترس است. این بازهٔ بزرگتر به (high dynamic range (HDR شناخته می‌شود. در این بازهٔ بزرگتر چیزهای روشن می‌توانند واقعا روشن باشند و چیزهای تاریک می‌توانند واقعا تاریک باشند و در عین حال جزییات در هر دو قابل مشاهده باشد.پرداخت HDR کمی مشابه چشم انسان کار می‌کند. در واقع اجازه می‌دهیم تا بازهٔ خیلی بزرگتری از مقادیر رنگ پرداخت شود و بازهٔ بزرگی از جزییات تاریک و روشن صحنه را جمع آوری کنیم و در نهایت همهٔ مقادیر HDR را به بازهٔ کوچک (low dynamic range (LDR با مقادیر [1.0, 0.0] تبدیل می‌کنیم. فرآیند تبدیل مقادیر HDR به مقادیر LDR را tone mapping می‌گویند. مجموعهٔ بزرگی از الگوریتم‌های tone mapping وجود دارد که هدف آنها نگهداری بیشترین جزییات HDR در فرآیند تبدیل است. گاهی این الگوریتم ها دارای یک پارامتر نورگیری هستند که اجازهٔ انتخاب ناحیه‌های روشن یا تاریک را به ما می‌دهد.در مورد real-time rendering نه تنها HDR به ما اجازه می‌دهد که از بازهٔ LDR مربوط به [1.0, 0.0] عبور کنیم و جزییات بیشتر را نگه داریم بلکه این قابلیت را می‌دهد که شدت منابع نور را با مقدار واقعی آنها مشخص کنیم. برای نمونه نور خورشید شدت بسیار بیشتری نسبت به چیزی مثل چراغ قوه دارد بنابراین چرا نور خورشید را به این صورت پیکربندی نکنیم. در این صورت ما اجازه داریم که نورهای صحنه را درست‌تر و با پارامترهای نور واقعی‌تر پیکربندی کنیم، چیزی که با رندر LDR ممکن نخواهد بود چرا که مقادیر به صورت مستقیم به 1.0 محدود می‌شوند.از آنجایی که نمایشگرها فقط رنگهای درون بازهٔ 0.0 و 1.0 را نشان می‌دهند نیاز داریم که مقادیر رنگ دامنهٔ پویای بالای جاری را به دامنهٔ نمایشگر تبدیل کنیم. صرف تبدیل و بازگرداندن رنگها با یک میانگین ساده خیلی به ما کمک نخواهد کرد چون ناحیه‌های روشن همچنان خیلی بیشتر غالب خواهند شد. به هر حال کاری که می‌توانیم انجام دهیم استفاده از معادله‌های مختلف و یا منحنی‌هایی است که مقادیر HDR را به LDR تبدیل کند و به ما کنترل کاملی روی روشنایی صحنه بدهد. این همان فرآیندی است که پیشتر به عنوان tone mapping معرفی کردیم و آخرین مرحلهٔ رندر HDR است.برای پیاده سازی HDR باید از framebuffer هایی استفاده کنیم که به ما اجازهٔ ذخیره مقادیر بزرگ را بدهد بنابراین معمولا از framebuffer هایی با مقادیر float32 استفاده می‌شود.ویدیوبرای بهره مندی از ویژگی های HDR در تصاویر ویدیویی نیاز به تجهیزات ضبط، ذخیره سازی و کدگذاری و نمایش خاصی است. برای مثال برای ضبط روشنایی تصویر به جای ۸ بیتی که در روش‌های SDR استفاده می‌شد، از ۱۰ بیت داده استفاده می‌شود.اولین دوربینی که قابلیت ضبط تصاویر HDR داشت در سال ۱۹۹۰ معرفی شد که با ترکیب دو تصویری که پشت سر هم گرفته شده‌اند کار می‌کرد. یک سال بعد اولین دوربین تجاری HDR عرضه شد.به مرور این تکنولوژی رشد کرد و به نمایشگرها رسید، برای همین نیاز به رابط خاصی برای انتقال تصاویر HDR به نمایشگر وجود داشت که در سال ۲۰۱۵ پشتیبانی آن در نسخه HDMI 2.0a اضافه شد.هم اکنون تکنولوژی HDR در اکثر تلویزیون‌ها و نمایشگرهای متوسط به بالا و حتی گوشی‌های همراه به راحتی در دسترس است.منابع:https://en.wikipedia.org/wiki/High_dynamic_rangehttps://en.wikipedia.org/wiki/High-dynamic-range_imaginghttps://learnopengl.com/Advanced-Lighting/HDRhttps://en.wikipedia.org/wiki/High-dynamic-range_videohttps://en.wikipedia.org/wiki/High-dynamic-range_renderinghttps://www.youtube.com/watch?v=aDZg8vBVYZU</description>
                <category>حجت جعفری</category>
                <author>حجت جعفری</author>
                <pubDate>Thu, 05 Dec 2019 12:39:34 +0330</pubDate>
            </item>
                    <item>
                <title>مفهوم Aliasing و Antialiasing در گرافیک سه بعدی</title>
                <link>https://virgool.io/@hojjatjafary/%D9%85%D9%81%D9%87%D9%88%D9%85-aliasing-%D9%88-antialiasing-%D8%AF%D8%B1-%DA%AF%D8%B1%D8%A7%D9%81%DB%8C%DA%A9-%D8%B3%D9%87-%D8%A8%D8%B9%D8%AF%DB%8C-zejm49wjihuz</link>
                <description>یک مثلث بزرگ مشکی را تصور کنید که در یک صفحه‌ی سفید از یک سمت به سمت دیگر در حرکت است. شدت نور سلولهای صفحه‌ی نمایش باید به نرمی از سیاه به سفید منتقل شوند ولی چیزی که اغلب می‌بینیم این است که سلولها ناگهان بین این دو رنگ تغییر می‌کنند.مثلث با لبه‌های تیزهمین مشکل برای خط هم اتفاق می‌افتد و لبه‌های دندانه دار را در آن می‌بینیم. به صورت رسمی به این مشکل aliasing می‌گویند و کارهایی که برای بر طرف کردن آن انجام می‌شود را anti-aliasing می‌گویند.نظریه نمونه‌گیری در حوزه پردازش سیگنالهای دیجیتال (Digital signal processing) مبحث گسترده‌ای در مورد نظریه نمونه‌گیری و فیلترینگ (Sampling Theory) وجود دارد که در اینجا فقط به صورت ساده و خلاصه آن را مطرح می‌کنیم.عکاسی را به صورت فیزیکی می‌توان به یک عمل نمونه‌گیری (Sampling) تشبیه کرد، نمونه‌گیری از نورهای یک صحنه‌ی خاص در یک لحظه‌ی خاص. این نمونه گیری می‌تواند به صورت آنالوگ و یا دیجیتال باشد. حتی ضبط کردن صوت هم نوعی نمونه‌گری است که می‌تواند به صورت آنالوگ یا دیجیتال صورت گیرد.فرایند پرداخت (Rendering) یک تصویر از فضای سه بعدی ذاتا یک عمل نمونه‌گیری محسوب می‌شود. فرآیند به دست آوردن مقادیر رنگ پیکسل‌ها از روی اشیا موجود در صحنه‌ی سه بعدی و ساخت یک تصویر از آنها. در خط لوله‌ی پرداخت (Rendering Pipeline) نمونه‌گیری عملا در مرحله‌ی Rasterisation انجام می‌شود.وقتی بحث نمونه‌گری مطرح می‌شود باید به بازسازی (Reconstruction) نیز فکر کنیم، یعنی چطور داده‌های نمونه‌گیری شده را دوباره به حالتی که بوده برگردانیم. مثلا در عکاسی دیجیتال نمایش عکس در صفحه‌ی نمایش یا پخش داده‌های صوتی در بلندگو. برای سادگی مطلب به چند نمونه سیگنال یک بعدی نگاه می‌کنیم، این مفاهیم به صورت طبیعی به ابعاد بالاتر نیز قابل گسترش است.نمونه‌گیری و بازسازی سیگنالهمانطور که در شکل بالا می‌بینیم یک سیگنال پیوسته در بازهای مشخص و هم اندازه نمونه‌گیری شده و به صورت گسسته در آمده. هدف از نمونه‌گیری بازنمایی اطلاعات به صورت دیجیتال است. در این فرآیند مقدار اطلاعات کاهش می‌یابد.به هر حال سیگنال نمونه‌گیری شده باید به صورت اصلی خود بازسازی شود که از طریق فیلترینگ (ﬁltering) می‌توان آن را انجام داد.هر زمان که نمونه‌گیری انجام شود ممکن است aliasing هم اتفاق بیافتد که باید برای به دست آوردن یک تصویر صاف و نرم با آن مقابله کرد.یک نمونه کلاسیک از aliasing در فیلم‌های وسترن قدیمی اتفاق می‌افتاد، زمانی که قطار به حرکت در می‌آمد و دوربین از چرخ‌های قطار تصویر می‌گرفت، چرخها یا به نظر خیلی کند می‌چرخیدند یا در خلاف جهت می‌چرخیدند یا کاملا بدون حرکت به نظر می‌رسیدند. برای اطلاع بیشتر در مورد temporal aliasing جستجو کنید.نمونه‌ی امروزی aliasing همان گوشه‌های تیز و دندانه دندانه در تصاویر سه بعدی است.در واقع aliasing زمانی رخ می‌دهد که سیگنال مورد نظر با بسامد بسیار کمی نمونه‌گیری شده باشد.در شکل زیر نقاط قرمز نقاط نمونه‌گیری شده است و خط چین سبز سیگنال بازسازی شده است که می‌بینیم تفاوت زیادی با سیگنال اصلی دارد.نمونه‌گری با بسامد کمبرای آگاهی بیشتر از نظریه نمونه‌گیری و نحوه‌ی بازسازی سیگنالها اینجا را ببینید.روش Anti-aliasing مبتنی بر صحفه‌ی نمایشیکی از مشکلات تصویر مثلثی که در ابتدا دیدیم کم بودن نرخ نمونه برداری بود. اولین تکنیکی که برای رفع این مشکل استفاده می‌شد Super Sample Anti-Aliasing یا SSAA بود که به صورت موقتی تصویر صحنه را با تفکیک پذیری بالاتری Render می‌کرد و بعد خروجی نهایی را کوچک می‌کرد و به حالت طبیعی در می‌آورد و نمایش می‌داد. این تفکیک پذیری بالاتر باعث می‌شد که مشکل لبه‌های دندانه دار حل شود اما به شدت باعث کاهش کارایی رندر می‌شد. بنابراین این تکنیک دوره‌ی شهرت کوتاهی داشت اما باعث به وجود آمدن تکنیک دیگری شد که امروز مورد استفاده قرار می‌گیرد.روش Multi-samplingدر مرحله‌ی Rasterisation راس‌های یک شکل هندسی اولیه (عموما مثلث) گرفته شده و کل شکل به بخش‌هایی که به آنها fragment گفته می‌شود تبدیل و سپس تقسیم می‌شود. از آنجایی که این تبدیل هندسی روی اعداد float اتفاق می‌افتد، مقادیر fragment می‌توانند هر عددی باشند ولی باید در محدوده‌ی تفکیک پذیری پنجره‌ی نمایش باشند. اما نکته اینجاست که نگاشت یک به یکی بین fragment ها و پیکسل های تصویر وجود ندارد چون با جدولی از نقاط صحیح (Integer) رو به رو هستیم. بنابراین rasterizer باید راهی برای نگاشت صحیح بین fragmentها و پیکسل‌ها پیدا کند.در تصویر بالا پیکسل‌های صفحه نمایش را می‌بینیم که مرکز هر پیکسل یک نقطه نمونه‌گیری را نشان می‌دهد، این نقاط برای تعیین این که آیا پیکسل توسط مثلث پوشیده شده یا نه استفاده می‌شوند. نقاط نمونه‌گیری قرمز توسط مثلث پوشش داده شده‌اند و یک fragment برای آنها تولید خواهد شد. با وجود این که بخشی از بعضی پیکسل‌ها توسط لبه‌های مثلث پوشیده شده اما چون نقطه‌ی نمونه‌گیری را پوشش نداده هیچ fragment ای برای آنها تولید نشده است. تصویر زیر نسخه رندر شده‌ی مثلث را نشان می‌دهد.به دلیل کم بودن تعداد پیکسل‌های تصویر برخی پیکسل‌هایی که در طول لبه‌های مثلث هستند رندر نخواهند شد و برخی با یک تغییر کوچک رندر می‌شوند که این باعث ایجاد مشکل است.می توانیم به جای در نظر گرفتن یک نقطه در مرکز هر پیکسل برای نمونه‌گیری، از چندین نقطه استفاده کنیم. استفاده از چند نقطه‌ی نمونه‌گیری به این معنا است که بافر رنگ (Color Buffer) ما نیز به نسبت تعداد نقاطی که برای نمونه‌گیری در نظر می‌گیریم بزرگتر خواهد شد.تصویر سمت چپ روش معمول برای تعیین پوشش یک پیکسل توسط مثلث را نشان می‌دهد. از آنجایی که نقطه‌ی نمونه‌گیری آن پیکسل توسط مثلث پوشش داده نشده است هیچ fragment خاصی برای آن تولید نشده و fragment shader برای آن اجرا نمی‌شود. سمت راست استفاده از چند نقطه‌ی نمونه‌گیری را می‌بینیم که از چهار نقطه، ۲تای آن توسط مثلث پوشش داده شده‌اند.تعداد نقاط نمونه‌گیری هر چندتا که بخواهیم می‌تواند باشد و هر چه تعداد نمونه‌گیری بیشتر باشد دقت پوشش آن پیکسل را بهتر نشان می‌دهد.اینجا جایی است که روش Multi sampling جالب می‌شود. ما تعیین کردیم که ۲تا از زیر نمونه‌ها (sub-samples) توسط مثلث پوشش داده شده‌اند، قدم بعدی این است که رنگ آن پیکسل خاص را تعیین کنیم. حدس اولیه ما این خواهد بود که fragment shader را برای هر زیر نمونه‌ی پوشش داده شده اجرا کنیم و بعد به ازای هر پیکسل رنگ زیرنمونه‌ها را میانگین بگیریم. در این حالت ما باید fragment shader را ۲ بار اجرا کنیم و نتیجه هر زیر نمونه را جدا ذخیره کنیم. خوشبختانه این کاری نیست که روش Multi sampling انجام می‌دهد چون به معنای این است که ما نیاز داریم تا fragment shader را به دفعات بسیار بیشتری نسبت به زمانی که Multi sampling نداریم اجرا کنیم که باعث کاهش شدید کارایی می‌شود.روشی که MSAA واقعا کار می‌کند بدین صورت است که fragment shader را صرف نظر از این که چند زیر نمونه از آن توسط مثلث پوشش داده شده، برای هر پیکسل فقط یک بار اجرا می‌کند. ورودی fragment shader با توجه به مرکز هر پیکسل تعیین می‌شود و خروجی آن در هر زیر نمونه‌‌ای که پوشش داده شده‌ ذخیره می‌شود. زمانی که زیر نمونه‌ها با رنگ‌های مثلث پر شدند، از رنگ‌های زیر نمونه‌های یک پیکسل میانگین می‌گیریم تا رنگ نهایی هر پیکسل تعیین شود. برای مثال در تصویر قبل چون فقط دو زیر نمونه از چهار زیر نمونه‌ پوشش داده شده‌اند، رنگ پیکسل از میانگین رنگ مثلث و دو زیر نمونه‌ی دیگری که رنگی ندارند به دست می‌آید، در نتیجه رنگ آبی روشن‌تری است.نتیجه، بافرِ رنگی است که لبه‌های اشکال در آن الگوی نرم تری خواهند داشت.در اینجا هر پیکسل چهار زیر نمونه دارد که زیر نمونه‌هایی که آبی هستند توسط مثلث پوشیده شده‌اند و آنهایی که پوشش داده نشده‌اند خاکستری هستند. در ناحیه درون مثلث به ازای هر پیکسل یک بار fragment shader اجرا خواهد شد و رنگ خروجی در همه‌ی چهار زیر نمونه ذخیره می‌شود. اما در لبه‌ها، مثلث همه‌ی زیر نمونه‌ها را پوشش نمی‌دهد بنابراین خروجی fragment shader فقط در برخی از آنها ذخیره‌ می‌شود. مبتنی بر این که چه تعداد از زیر نمونه‌ها پوشش داده شده‌اند رنگ نهایی هر پیکسل تعیین و ذخیره می‌شود.هر چه تعداد زیر نمونه‌هایی که پوشش داده شده‌اند بیشتر باشد پیکسل بیشتر به رنگ مثلث نزدیک خواهد شد و هر چه تعداد کمتری زیر نمونه پوشش داده شوند آن پیکسل رنگ کمتری از مثلث را به خود می‌گیرد. در شکل بالا می‌بینیم که لبه‌های تیز با رنگ‌های روشن‌تری از خود لبه‌ها احاطه شده‌اند که باعث می‌شود وقتی از فاصله‌ی بیشتر به لبه‌ها نگاه می‌کنیم بسیار نرم تر دیده شوند.چیزی که تا اینجا در مورد آن توضیح داده شد یک بررسی اجمالی در مورد Multi-sampling Anti-aliasing بود اما منطق اصلی درون rasterizer کمی پیچیده‌تر از این است که برای درک بهتر مفاهیم ساده سازی شده. روش های پیشرفته‌تر و پیچیده‌تری نیز برای برخورد با aliasing وجود دارد که هر یک مزایا و معایب خود را دارند.منابع:Real-Time Rendering, Tomas Möller, Eric Haines, Naty Hoffmanhttps://en.wikipedia.org/wiki/Anti-aliasing_filterhttps://learnopengl.com/Advanced-OpenGL/Anti-Aliasinghttps://en.wikipedia.org/wiki/Supersamplinghttps://en.wikipedia.org/wiki/Multisample_anti-aliasing</description>
                <category>حجت جعفری</category>
                <author>حجت جعفری</author>
                <pubDate>Sun, 20 Oct 2019 15:24:36 +0330</pubDate>
            </item>
                    <item>
                <title>شاهکار مهندسی ساخت NES</title>
                <link>https://virgool.io/@hojjatjafary/%D8%B4%D8%A7%D9%87%DA%A9%D8%A7%D8%B1-%D9%85%D9%87%D9%86%D8%AF%D8%B3%DB%8C-%D8%B3%D8%A7%D8%AE%D8%AA-nes-glruqtduyete</link>
                <description>همان طور که علاقمندان به بازی‌های کامپیوتری می‌دانند کنسول بازی Nintendo Entertainment System یا به اختصار NES که در ایران به نام میکرو شناخته می‌شود، با وجود این که در دوران خود خیلی قدرتمند محسوب نمی‌شد، یکی از موفق ترین کنسول های بازی است و تا سالها محبوبیت خود را حفظ کرد. پردازنده‌ی اصلی این کنسول یک میکروکنترولر Ricoh 2A03 با هسته‌ی پردازشی 6502 بود، فرکانس کارکرد حدود دو مگاهرتز و دقیقا دو کیلوبایت حافظه‌ی RAM داشت! بله فقط دو کیلوبایت! احتمالا بازی‌هایی دیده‌اید که دارای پیچیدگی و از نظر فنی بسیار چشمگیر هستند. ممکن هست برای همه سوال پیش بیاید که چطور با چنین محدودیتی می‌توان بازی های به این خوبی تولید کرد؟اگر تعداد زیادی بازی NES انجام داده باشید متوجه تفاوت چشمگیر بازی‌ها در کیفیت گرافیکی و حجم محتوای بازی‌های مختلف شده‌اید. البته بعضی از آنها بازی‌هایی با بودجه‌های کم هستند. اما مقایسه‌ی بازی‌هایی که خود Nintendo در اوایل عرضه‌ی این کنسول منتشر کرده با بازی هایی که بعدا منتشر کرده نشان از تغییر خاصی دارد.بازی‌های منتشر شده توسط نینتندو در اوایل تولید کنسول NESبازی‌هایی که بعدا نینتندو برای کنسول NES منتشر کردبازی‌های اولیه به خودی خود خیلی بد نیستند اما عناصر گرافیکی خیلی محدودی دارند. پس‌زمینه‌ها خیلی محدود و اکثرا خالی، سیاه یا تک رنگ هستند. تصاویر بازی‌های اولیه تقریبا نماینده‌ی تصاویر کل بازی هستند اما تصاویر بازی‌های بعدی فقط بخش کوچکی از گرافیکی است که می توانیم از آن در بازی لذت ببریم.البته تفاوت و رشد چشمگیر این اختلافات به خاطر افزایش تجربه‌ی افرادی بود که روی این بازی‌ها کار می‌کردند. در طول آن دوران هنرمندان به این نتیجه رسیدند که تصاویر دارای خط حاشیه بهتر از تصاویر مسطح دیده می‌شوند. بازی Super Mario Bros 1 را با Super Mario Bros 3 مقایسه کنید که چقدر از لحاظ بصری تمیزتر است. این کاری بود که می‌توانستند از همان ابتدا انجام دهند اما باید آن را از طریق تجربه یاد می‌گرفتند. آنها همچنین یاد گرفتند که چطور منوها و واسط های کاربری بهتری بسازند.اما بیشتر این تفاوت‌ها را نمی توان به حساب یادگیری و افزایش تجربه گذاشت. کنسول NES خیلی خوب طراحی شده بود، با کمترین سخت افزار خیلی مقرون به صرفه بود اما با یک برگ برنده‌ی عالی. کارتریج‌های بازی‌ها می‌توانستند شامل سخت افزاری برای توسعه‌ی توانایی‌های کنسول باشند.اگر به کارتریج فیزیکی نگاه کنید می‌بینید که دارای یک رابط پهن با پایه‌های زیاد است. کنسول و کارتریج می‌توانند یک رابطه‌ی دو طرفه را از طریق این پین‌ها داشته باشند. این نوع رابطه تفاوت زیادی با مثلا دیسک‌های نوری مثل CD یا DVD دارد چون کنسول فقط می‌تواند از روی آن بخواند و نمی‌تواند بنویسد. اگر کارتریج را باز کنید می‌توانید کل صفحه مدار داخل آن را ببینید. این صفحه مدار می‌تواند شامل هر چیزی که می‌توان به یک کامیپوتر ۸ بیتیِ کامل متصل کرد باشد. حتی RAM بیشتر. در حقیقت این راهی بود که بعضی از بازی‌ها مثل Legend of Zelda برای پیاده سازی Save در بازی استفاده کرده بودند. این بازی یک RAM اضافی روی کارتریج خود داشت و یک باطری ساعت که باعث می‌شد زمانی که کارتریج به منبع تغذیه خارجی متصل نیست محتوای RAM در طول زمان حفظ شود.(با پیشرفت تکنولوژی ما از حافظه‌ی فلش استفاده می‌کنیم که نیازی به منبع تغذیه ندارد.)کارتریج بازی زلداگفتیم که NES دو کیلوبایت حافظه‌ی RAM داخلی داشت اما این بدین معنا نیست که فقط می‌تواند دوکیلوبایت را شمارش کند. NES پنجره‌ی فضای آدرس بزرگی دارد که در دسترس کارتریج است تا از آن استفاده کند. به طور خاص یک پنجره‌ی ۳۲ کیلوبایتی برای کد برنامه‌ی بازی و یک پنجره‌ی ۸ کیلوبایتی برای گرافیک آن وجود داشت. این پنجره‌ها می توانند توسط ROM (حافظه‌ی فقط خواندنی) یا RAM روی کارتریج پر شوند. خود NES هیچ اطلاعی از آن ندارد و برایش مهم نیست. جادو واقعی اینجاست: یک کارتریج می تواند بیش از ۳۲ کیلوبایت کد یا ۸ کیلوبایت گرافیک داشته باشد. فقط باید کد و گرافیک به صورت قطعه هایی به داخل و بیرون جایگزین شوند. که این کار را کارتریج باید خودش و توسط میکروکنترلی که روی آن قرار دارد و به ROM و RAM متصل است انجام دهد. به این میکرو کنترلر Mapper گفته می‌شود. (کلمه‌ی Mapper به مفهوم Memory Mapping اشاره می‌کند)بازی Super Mario Bros 1 یکی از آموزنده ترین بازی‌ها برای بررسی است، چون یکی از پیچیده‌ترین بازی های NES است که می‌توان بدون داشتن یک Mapper خاص ساخت. نینتندو به Mapperها Memory Management Controllers یا به اختصار MMC می‌گوید. زمانی که یک کارتریج MMC0 داشته باشد به این معناست که هیچ گونه چیز خاصی برای جابه جایی داده‌ها بین چیپ‌های مختلف RAM و ROM ندارد. اگر به فایلهای ROM که در شبیه سازهای NES استفاده می‌شود نگاه کنید، خواهید دید که اندازه‌ی فایل بازی Super Mario Bros 1 دقیقا ۴۱ کیلوبایت است. یک کیلوبایت را از آن کم کنید چون مربوط به Header فایل است تا شبیه‌ساز بداند که چگونه باید فایل را بارگیری کند. ۴۰ کیلوبایت باقی می‌ماند که ۳۲ کیلوبایت آن برنامه‌ی ROM و ۸ کیلوبایت آن ROM گرافیک است. که دقیقا پنجره‌ی حافظه‌ی کارتریج را پر می‌کند.۸ کیلوبایت گرافیک به چه درد می خورد؟ دقیقا می‌شود ۵۱۲ خانه یا tile که هر یک ۸x۸ پیکسل هستند و فقط چهار رنگ در هر خانه پشتیبانی می‌شود. این ۵۱۲ خانه به دو صفحه تقسیم می‌شوند: ۲۵۶ خانه برای sprite ها و ۲۵۶ خانه برای پس زمینه. بازی Super Mario Bros 1 یک کلاس پیشرفته آموزشی است برای رسیدن به بیشترین gameplay با کمترین مولفه‌های گرافیکی. یک مثال معروف بوته‌ها و ابرها است که دقیقا از خانه‌های گرافیکی یکسانی ساخته شده‌اند که فقط پالت رنگ مختلفی روی آنها اعمال شده است.در واقع دهها Mapper توسعه یافته است و هم اکنون و تا امروز توسط کپی کنندگان غیر مجاز یا علاقمندان در خانه در حال توسعه است. طبیعت کاملا plug-and-play به معنای این است که هیچ چیز نمی‌تواند فرد را در ساختن یک Mapper جدید با ویژگی‌های جدید متوقف کند، و NES با خوشحالی کار خواهد کرد. یکی از دلایلی که اکثر شبیه سازها با بازی های مبهم یا کپی شده مشکل دارند همین است که مجبورند برای همه‌ی Mapper ها کار خاصی را انجام دهند و علاوه بر شبیه سازی خود NES چیپ های Mapper را نیز شبیه سازی کنند. البته بعضی Mapper ها نسبت به بقیه بسیار معمول تر هستند، بسیاری از بازی‌های شناخته شده از MMC1 و MMC3 استفاده می‌کنند.بازی Super Mario Bros 3 از MMC3 استفاده می‌کند. اگر به فایل ROM آن نگاه کنید حجم کمی کمتر از ۴۰۰ کیلوبایت دارد. بخش کمی از آن یعنی حدود ۱۲۸ کیلوبایت مربوط به صفحه‌های مختلف گرافیک است. بازی SMB3 تنوع گرافیکی بسیار بسیار بیشتری نسبت به SMB1 دارد. به جای این که جهان‌های مختلف مکان‌های یکسانی باشند که فقط رنگشان تغییر کرده واقعا مکان‌های کاملا متفاوتی به نظر می آیند. بقیه ۲۵۶ کیلوبایت شامل همه‌ی کدهای برنامه و داده‌های غیر گرافیکی مثل موسیقی است. تکرار می‌کنم که تنها ۳۲ کیلوبایت از  این داده ها می‌توانند در هر زمان بارگیری شده باشد. کد بازی در حال اجرا به میکروکنترلر Mapper می‌گوید که چه تغییراتی باید انجام دهد.در مورد MMC3 نکات بیشتری نسبت به این که فقط کار جایگزینی حافظه را آسان می‌کند وجود دارد. این Mapper یک ویژگی سخت افزاری کاملا جدیدی را به NES اضافه می‌کند. پشتیبانی داخلی NES برای Timer ها به شدت محدود است. MMC3 تایمر خود را دارد که می‌توان برای ایجاد جلوه‌های ویژه‌ی گرافیکی از آن استفاده کرد.تا الان متوجه شدیم که کارتریج ها چطور با استفاده از سخت افزاری که خود حمل می‌کنند قابلیت های کم NES را ارتقا می‌دهند. ممکن است به این فکر کنید که چرا همیشه این کار را نمی کردند؟ چرا Super Mario Bros 1 از همان Mapper قدرتمند Super Mario Bros 3 استفاده نمی‌کرد؟پاسخ هزینه اقتصادی است. چیپ‌های RAM و ROM قیمت قابل توجهی داشتند، اما این هزینه در طول عمر NES به سرعت کاهش پیدا کرد. هر سال شما می‌توانستید میزان بیشتری از ROM را روی کارتریج خود با همان قیمت پارسال داشته باشید. از این روی طراحی Super Mario Bros 1 که دقیقا پنجره‌ی حافظه‌ی کارتریج را پر می‌کرد و حتی یک بایت هم بیشتر نبود بهترین تصمیم اقتصادی در آن زمان بود. اما طراحی خردمندانه‌ی کارتریج NES باعث شد که بازی‌ها بتوانند به طور پیوسته بزرگتر و پیچیده‌تر شوند.منابع:https://abad1dea.tumblr.com/post/187429390285/roms-and-mappers-why-nes-games-can-be-sohttp://wiki.nesdev.com/w/index.php/Nesdev_Wikihttps://en.wikipedia.org/wiki/Nintendo_Entertainment_Systemhttps://en.wikipedia.org/wiki/Super_Mario_Bros.</description>
                <category>حجت جعفری</category>
                <author>حجت جعفری</author>
                <pubDate>Mon, 07 Oct 2019 11:13:44 +0330</pubDate>
            </item>
                    <item>
                <title>راه عاشقی...</title>
                <link>https://virgool.io/@hojjatjafary/%D8%B1%D8%A7%D9%87-%D8%B9%D8%A7%D8%B4%D9%82%DB%8C-tedkxs2hplx7</link>
                <description>ای کاش جابر بود و می‌دید که عاشقانه‌ی او برای نواده‌ی پیغمبر در روز چهلم تبدیل به چه شور عظیمی شده!نه سیل جمعیت زائرها تمام می‌شود و نه دریای محبت خادم‌ها...سحر زائر هست و خادم...ظهر زائر هست و خادم...شب زائر هست و خادم...لبخند محبت آمیز خادم میان سال عراقی با دشداشه مشکی بلند در ساعتٰ‌های اولیه بامداد، با چشمان پف کرده بیش از اینکه مرا بخنداند، می‌گریاند،این چه عشقی‌ست که خواب را از چشمان این مرد ربوده و محبت را در چهره‌اش جاری کرده...راه طولانی است و خستگی اجتناب ناپذیر،در این راه آنقدر خسته می‌شوی که دیگر نا نداری از خودت فرار کنی، اصلا دیگر نا نداری بد باشی،همه خوب می‌شوند، خوبِ خوب،فقط به پایان مسیر و رفتن در آغوش امام شهیدت فکر می‌کنی،این جاست که خادمها با تو معامله می‌کنند، خستگی و خاک پایت را می‌خرند تا محبت حسین به دست آورند. در این معامله‌ی پر سود نه کسی کلک می‌زند و نه در آن غشی صورت می‌گیرد، آنجا که به جای پول عشق جابه جا می‌شود که این حرفها نیست.فقط می‌روی  و  می‌روی...نه راه تمام می‌شود و نه محبت خادم‌های عراقی...تا می‌روی راه هست، تا راه هست زائر هست...انگار اصلا راه همین است و غیر از این نیست...راه راه حسین است.</description>
                <category>حجت جعفری</category>
                <author>حجت جعفری</author>
                <pubDate>Mon, 07 Oct 2019 11:08:44 +0330</pubDate>
            </item>
            </channel>
</rss>