<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های میثم پورگنجی</title>
        <link>https://virgool.io/feed/@meysampg</link>
        <description>مهندسی داده، برنامه‌نویسی و ریاضی</description>
        <language>fa</language>
        <pubDate>2026-04-15 07:01:01</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/523/avatar/fTwxCF.jpg?height=120&amp;width=120</url>
            <title>میثم پورگنجی</title>
            <link>https://virgool.io/@meysampg</link>
        </image>

                    <item>
                <title>در باب delegation یا چطور تیم ساخته می‌شه.</title>
                <link>https://virgool.io/@meysampg/an-introduction-to-delegation-in-software-engineering-teams-iw0sj3ixindl</link>
                <description>امروز نیاز داشتم یه فایل پرینت بگیرم و رفتم یه کافی‌نت. کافی‌نت نسبتاً بزرگ و شلوغ بود و بیشتر شبیه لوازم‌التحریری که چاپ‌خونه هم هست می‌موند. گفتم پرینت می‌خوام و صاحب کافی‌نت به یه پسر حدوداً ده یازده ساله‌ای گفت که کارم رو انجام بده. القصه پسره که به نظر کمی مضطرب میومد و وقتی ازش خواستم یه تغییر کوچیک قبل از پرینت برام اعمال کنه، به نظر کمی مضطرب‌تر هم شد، فایل رو پرینت گرفت برام و رفتم که حساب کنم. صاحب کافی‌نت در حین حساب کردن برگه رو نگاه کرد و بهم تحویل داد. این داستان نکته‌ی خاصی نداشت اما اونجا در نظر من یه اتفاق جالب افتاده بود. یه تیم از آدما داشتن کار می‌کردن و مدیر اونجا به درستی داشت کارها رو واگذار (delegate) می‌کرد. صدالبته اعتبار دیدن این مسئله رو باید به کتاب Become an Effective Software Engineering Manager بدم. در واقع این پست فهم منه از این کتاب.بازی برد-بردواگذاری (delegation) در واقع بزرگترین نقطه قوت هم‌زمان یه تیم و یه مدیره اما درست انجام‌دادنش رو میشه تماماً هنر مدیر دونست. من بهترین تجربه‌هام در کار، تیم‌هایی بودن که مدیرانی با توانایی بالا در واگذاری داشتن و بدترین تجربه‌ام هم وقتی بود که مدیرش اونقدر که نیاز بود، در این زمینه توانا نبود. هر چند نمیشه ایراد گرفت، این کلمه ساده‌ست، ولی در عمل واقعاُ اونقدر ساده به نظر نمیاد. اما در نهایت بودن این ویژگی در یک مدیر، کار رو به یک بازی برد-برد تبدیل می‌کنه و به نوعی می‌شه اون رو شیرازه‌ی یک تیم دونست. آدم‌ها در یک چرخه‌ی واگذاری-انجام-فیدبک رشد می‌کنن، ارتباطات انسانی قوی‌تر می‌شه و در نهایت تیم تواناتر می‌شه.کالبدشکافی واگذاریواگذاری رو از ۲ وجه می‌شه بررسی کرد. اول واگذاریِ چی؟ و دوم، واگذاری، چطور؟ وجه اول ساده‌ست: چی واگذار می‌شه؟ مسئولیت و قدرت اجرا و به صورت سلبی، پاسخگویی هیچ وقت واگذار نمیشه. یعنی شما مسئولیت و قدرت اجرای یه تسک رو به کس دیگه‌ای محول می‌کنید، اما در نهایت این شمایید که باید برای انجام اون تسک پاسخگو باشید. داخل کافی‌نت کسی که مسئولیت پرینت گرفتن اون فایل رو بر عهده داشت اون پسربچه بود، اما به هر دلیل اگه من ناراضی بودم، مدیر کافی‌نت اون کسی بود که باید به من پاسخگو می‌بود.اما چگونگی واگذاری به همین شدت که قسمت اول ساده بود، تکنیکیه و در واقع هنره. برای فهم ساده‌تر این قسمت، می‌شه واگذاری رو در یک طیفِ چند لایه تعریف کرد و برای اینکه بفهمیم این لایه‌ها چی‌ان، می‌شه دید که حالت‌های حدی دو سر طیف چیا هستن. حالتی که همه چی واگذار شده: شما یه نیروی سنیور داخل تیم‌تون دارین و فقط بهش گفتین که نیاز چیه: در اینجا شما کم‌ترین امکان کنترل رو دارین. اون نیرو به اندازه‌ی کافی توانا هست که تسک رو با کیفیت قابل قبولی انجام و تحویل بده.حالتی که چیزی واگذار نشده: یه تسک خیلی خیلی مهم و حساس هست که باید کنترل کامل داشته باشین تا مرحله به مرحله در جریان باشین که وضع چطوره، مثل پایین اومدن پروداکشن. از بخش‌های مختلف با شما تماس می‌گیرن و جویای وضع می‌شن. باید از نیروهای مختلف آمار قسمت‌های مختلف سیستم رو بگیرین و در نهایت با منطقی نگه‌داشتن سطح تنش داخل تیم، مسئله رو پیدا کنین و همه چیز رو به حالت عادی برگردونین.به نظر دوتا شافتولک اینجا در حال الاکلنگ با همدیگه‌ن: واگذاری و کنترل. هر چی واگذاری کمتر/بیشتر، کنترل بیشتر/کمتر: این اون چیزیه که باهاش می‌شه لایه‌های واگذاری رو تعریف کرد.لایه‌های واگذاریبه عنوان یه مدیر، ترکیب‌های زیر رو می‌تونی برای واگذار کردن یه تسک در نظر بگیری:کامل واگذار می‌کنی: هیچ کنترلی نداری.واگذار می‌کنی و وقتی که تموم شد می‌گن که چک کنی: آخر کار می‌تونی نظرت رو بگی.واگذار می‌کنی و چند وقت یکبار وضع رو چک می‌کنی: گه‌گداری می‌تونی ببینی اوضاع چطور پیش می‌ره.واگذار می‌کنی ولی مرتباُ چک می‌کنی: حواست هست که چطور ماجرا داره پیش می‌ره.واگذار می‌کنی ولی می‌گی که چطور انجام شه: مسئله رو می‌شکنی و حواست به انجام هر قسمت هست.نشون می‌دی که چطور انجام شه: نه تنها مسئله رو می‌شکنی که چارچوب اجرای هر قسمت رو هم تعریف می‌کنی. ممکنه بعضی قسمت‌ها رو خودت انجام بدی.واگذار نمی‌شه: خودت انجام می‌دی.این همونجاست که مدیر هنرش رو نشون می‌ده: برای هر تسک و برای هر فرد، یکی از این موارد کار می‌کنه. یعنی ممکنه شخص الف برای تسک ۱ سطح واگذاری کامل رو باید تجربه کنه ولی همون الف برای تسک ۲ باید در کنارش باشی و با هم پیش ببرین. قبول کنیم که سخته :)).انجیل واگذاریدر واقع انجیلی برای واگذاری وجود نداره. این شمایی و تیم و تعاملات انسانی. اما چندتا توصیه رو می‌شه از این کتاب و اون کتاب و این سایت و اون سایت کنار هم گذاشت و گفت.نخواه بقیه کار رو جوری انجام بدن که تو انجام می‌دی: اگه طرف داره کار رو درست انجام می‌ده و از نظر مهندسی مشکلی نداره، نیازی نیست که کار رو جوری انجام بده که تو انجام می‌دی. یه مدیری داشتم که یبار بهم یه حرف خیلی قشنگی زد: جایی که احساس می‌کنی داری مدیریت -کنترل- می‌کنی، همونجا جاییه که داری می‌رینی.یه کم اضطراب بد نیست: یه معیار خیلی زیبا برای انتخاب لایه‌ی واگذاری اینه: فکر کن کدوم یکی از این لایه‌ها برای شخص الف و تسک ۱ باعث می‌شن اون شخص با راحتی و بدون چالش تسک رو تموم کنه، لایه‌ی بالایی‌اش رو انتخاب کن. باور کنید مریض نیستم :)) ولی همیشه چالش تیم رو زنده نگه می‌داره. قشنگ‌ترین تیم‌ها اونایی‌ان که اعضای تیم در انجام تسک دچار چالشن و از همدیگه کمک می‌گیرن. در نهایت هم این کار باعث می‌شه که تیم رشد کنه و هم اینکه بین آدم‌ها ارتباط انسانی سالمی شکل بگیره.کدخدا! پیاده شو با هم بریم: اصل اینه که همیشه واگذاری خوبه ولی اگه احساس می‌کنی در تیمی کار می‌کنی که نمی‌تونی کارها رو به اعضای تیم واگذار کنی، احتمالاً در جای اشتباهی هستی. یا تو مدیر مناسبی نیستی و یا نسبت به کاری که باید انجام شه، بدون اینکه منابع کافی دیده شده باشه باید پاسخگو باشی.حرمت لغو واگذاری: اگه این وسط احساس کردی تسکی رو در لایه‌ی اشتباهی واگذار کردی، کل واگذاری رو لغو نکن، فقط یک لایه بیا پایین‌تر. در نهایت اون چیزی که مهمه اینه که تیم رشد کنه نه اینکه قهرمان داشته باشه. اجازه بده تا حد ممکن آدم‌ها یاد بگیرن و رشد کنن.در نهایت این تویی که باید پاسخگو باشی. در واگذاری فقط مسئولیت اجرا واگذار شد و پاسخگو هم‌چنان تویی. پس این اوکیه که نسبت به اهمیت تسک اگه نیازه حدی از کنترل رو داشته باشی.سخن آخرواگذار کنین، قبل از اینکه واگذارتون کنن :)).</description>
                <category>میثم پورگنجی</category>
                <author>میثم پورگنجی</author>
                <pubDate>Tue, 22 Aug 2023 22:15:37 +0330</pubDate>
            </item>
                    <item>
                <title>کوله‌پشتی ۱۴۰۲</title>
                <link>https://virgool.io/@meysampg/%DA%A9%D9%88%D9%84%D9%87-%D9%BE%D8%B4%D8%AA%DB%8C-%DB%B1%DB%B4%DB%B0%DB%B2-hpk15graqale</link>
                <description>کوله‌پشتی ۰۱۱.   فرض کنید کوله‌پشتی دارید که قرار است در آن تجربیاتی را از سال ۰۱ بگذارید و با خود به سال ۰۲ ببرید. تجربیات مثبتی که همراه داشتن آنها به شما کمک می‌کند نسبت به سال قبل فردی توانمندتر بشوید. در کوله‌ی خود چه تجربیاتی را قرار می‌دهید؟پرسپکتیو در روایت‌گری. تو سالی که گذشت من برای یاد گرفتن روایت‌گری خیلی تلاش کردم. الان می‌تونم بگم که تو این زمینه یه جونیور محسوب می‌شم. در طی سال بعد به نظرم باید یاد بگیرم که اول برای خودم و بعد در رویارویی با دنیا، از چه پرسپکتیوی دنیا رو روایت می‌کنم.۲.   برای حرکت در مسیر زندگی باید سبک و چابک بود. چه مواردی را از کوله‌ی خود خارج می‌کنید که در سال ۰۱ باقی بماند و شما سبک‌تر حرکت کنید؟ چیزهایی که از کوله‌ خارج می‌کنید مثلا می‌تواند تجربیات ناخوشایند یا ناراحتی‌ها باشد.انتزاع. انتزاع و تجریدی فکر کردن خوبه، ولی در طراحی سیستم نه زندگی روزمره. دوست دارم در سال جدید تا بتونم از تو-مغز-زندگی کردن پرهیز کنم.۳.   فرض کنید در پایان سال ۰۲ بیشتر آن فردی شده‌اید که شبیه خود ایده‌آل شما است. در این صورت چه ویژگی‌ها و رفتارهایی باید در شما تقویت شود؟ چه چیزهایی را در کوله‌ی خود می‌گذارید که کمک می‌کند این ویژگی‌ها در شما  تقویت شود؟حسگر فعال. به نظرم میثم‌ی که باید در رلیزهای بعدی بهش برسم، میثم‌یه که بیشتر حس می‌کنه و از حواسش به عنوان یک ابزار شناختی استفاده می‌کنه. فکر می‌کنم «فکر می‌کنم» و انتزاعی زیستن، در تقابل با زندگی قرار داره. زندگی مهمه و نکته‌ی مهم‌تر اینه که زندگی تنها چیز مهمه.</description>
                <category>میثم پورگنجی</category>
                <author>میثم پورگنجی</author>
                <pubDate>Mon, 20 Mar 2023 20:49:54 +0330</pubDate>
            </item>
                    <item>
                <title>یک دور با Druid از صفر تا صد</title>
                <link>https://virgool.io/@meysampg/%DB%8C%DA%A9-%D8%AF%D9%88%D8%B1-%D8%A8%D8%A7-druid-%D8%A7%D8%B2-%D8%B5%D9%81%D8%B1-%D8%AA%D8%A7-%D8%B5%D8%AF-xooatec2t5iz</link>
                <description>از این سری: یک دور با کافکا از صفر تا صداین پست حاصل تلاش من برای فهم Apache Druid [که از این به بعد به آن برای سادگی دروید می‌گوییم] است و بیان روش من برای فهم یک موضوع: رفتن قدم به قدم در یک دور کامل از صفر تا صد. برای نوشتن این پست از نتایج سرچ‌هایم، راهنما و سورس دروید استفاده کرده‌ام اما به هر حال ممکن است فهم من در موردی غلط باشد که این لطف شماست اگر آنرا اصلاح  کنید.Apache Druid: a high performance real-time analytics database. معماری درویددروید از معماری «اشتراک در هیچ چیز» (Shared Nothing Architecture: SNA) پیروی می‌کنه. این به این معنیه که قسمت‌ها مختلف روی نودهای جداگانه (یا بسته به شیوه‌ی اجرا روی JVM مجزا) بالا میان و هیچ اشتراکی در منابع ندارن.https://phoenixnap.com/kb/shared-nothing-architecture برای درک بهتر این معماری در دروید می‌تونیم پسگرس رو به عنوان یک پایگاه داده توزیع‌نیافته با معماری SNA مقایسه کنیم. وقتی یک نسخه از پسگرس بالا میاد، تمام اجزایی که نیازه تا پسگرس کار کنه (مثل انجین اجرا یا انجین ذخیره‌سازی) با همون نسخه‌ی اجرایی حاضرن و نیاز به کار بیشتری نیست. در دروید اما داستان به این شکل نیست. هر کلاستر دروید از پنج نوع مختلف نود تشکیل شده:نود Coordinatorنود Overlordنود Brokerنود Middle Managerنود Historicalدر کنار این نودها نوع Router هم وجود داره که بود و نبودش اختیاری‌ه و در ادامه به همراه سایر نودها به بررسی اون می‌پردازیم.نود Coordinatorاین نود مسئولیت مدیریت داده‌ها و توزیع اونها رو بر عهده داره. یکی از مهم‌ترین وظیفه‌های این نود کنترل بار به وسیله‌ی توزیع کردن داده‌ها روی نودهای مختلف Historicalه. یعنی اگه یه نود Historical میزبان حجم بالایی از داده‌ها باشه میاد به یکی دیگه از این نودها می‌گه داداش شما فلان داده‌ها رو بارگذاری کن و به اون نودی که شلوغ باشه میگه فلان داده‌ها (همونایی که به اون یکی نود Historical گفته بارگذاری کنه) رو بی‌خیال شو. ارتباط این نود با بقیه غیرمستقیمه و از طریق Zookeeper صورت می‌گیره.نود Overlordاین نود مسئولیت اجرای تسک‌ها، توزیع تسک‌ها و ساختن Supervisorها رو بر عهده داره. تسک کوچکترین واحد اجراست و Supervisor بسته به نوع Indexer چیزیه که می‌تونه تسکی رو ران کنه. Indexer هم چیزیه که باهاش دروید به یک منبع داده وصل میشه.نود Brokerبروکر نودی‌ایه که کوئری‌ها رو دریافت می‌کنه، برای اجراشون برنامه‌ریزی می‌کنه و در نهایت نتیجه‌ی محاسبه رو به درخواست‌کننده بر می‌گردونه. این نود با Zookeeper در ارتباطه و از اونجا می‌تونه بفهمه که داده‌ها چطور روی کلاستر توزیع شدن و مسیر دسترسی بهشون چیه.نود Middle Managerنود Middle Manager نودیه که تسک‌ها رو می‌پذیره و شروع به بافر کردن داده‌ها موقع تزریق می‌کنه. این نود با شروع ساختن پارتیشن داده، اون رو در Zookeeper ثبت می‌کنه و با رسیدن کوئری از طرف Broker محاسبات رو روی داده‌های بافرشده انجام می‌ده و نتیجه رو به بروکر پس می‌ده. در نهایت داده‌های بافر شده رو روی Deep Storage ذخیره می‌کنه و انتشار اونا رو اعلام می‌کنه.نود Historicalنود Historical مسئول محاسبات روی داده‌های تاریخی‌ه. در شروع وقتی Coordinator اعلام می‌کنه که داده‌ی تاریخی‌ای منتشر شده، Historical کشش رو چک می‌کنه که ببینه داره اون داده رو یا نه، اگه نداشت داده رو از Deep Storage بارگذاری می‌کنه. در نهایت هم وقتی از طرف بروکر کوئری‌ای بهش می‌رسه محاسبات رو روی داده‌ها انجام می‌ده و نتیجه رو به بروکر بر می‌گردونه.نود Routerروتر نودی‌ایه که کنسول (پنل گرافیکی کار با دروید) رو بالا میاره و می‌تونه درخواست‌ها رو به نودهای مختلف پروکسی کنه. پروکسی کردن روتر خیلی قدرت‌منده و میشه با استفاده از اون کوئری‌های مختلف (بر اساس زمان یا تایپ کوئری) رو به بروکرهای مختلف هدایت کرد. این نود با صورت مستقیم با نودهای Coordinator، Overlord و بروکر در ارتباطه.کلاستر سه‌گانهمعماری پیشنهادی دروید یک دسته‌بندی منطقی سه‌گانه از نودهاست. سرورهای مستر شامل نودهای Coordinator و Overlord، سرورهای کوئری شامل نودهای بروکر و روتر و سرورهای دیتا شامل نودهای Middle Manager و Historical هستن. به صورت مشخص نودهای مستر با هیچ کدوم از نودها به صورت مستقیم کاری ندارن و ارتباط با اونها رو با Zookeeper انجام می‌دن. از نودهای کوئری، بروکر به نودهای دیتا دسترسی داره و از نودهای دیتا هم هیچ کدوم مستقیم با هم کاری ندارن.چرا دروید؟حالت عادی ذخیره‌سازی داده‌ها روی چیزی مثل HDFS و کوئری زدن با چیزی مثل اسپارک رو در نظر بگیریم. چیزی که واضحه اینه که سرعت اجرای کوئری‌ها پایین‌ان و به درد کوئری‌های تقریباً در لحظه نمی‌خورن. راه‌حل عموماً ساختن مارت‌های داده برای داده‌های پردازش شده‌ست. این کار مستلزم ساختن پایپ‌لاین‌های متفاوت و نگهداری از اوناست. دروید رو میشه به نوعی مکمل این سیستم دونست: ذخیره‌سازی داده‌های تاریخی در جایی مثل HDFS و سپردن کوئری‌های تحلیلی از ساخت پایپ‌لاین تا بهینه‌کردن اجرای کوئری‌ها به دروید. به صورت مشخص دروید Cubeعه که به صورت خفنی روی Roll-up تمرکز کرده.چطور Roll-up انجام میشه؟قبل از رفتن سروقت roll-up اول بببینیم دروید چه اثرپذیری‌ای از بقیه‌ی پایگاه داده‌های OLAP داشته. دروید از طرفی از cubeها بُعد (dimension) رو به ارث برده و از طرف دیگه متأثر از پایگاه داده‌های سری زمانی (time series databases) از زمان به عنوان یک بعد ثابت و دارای تظریف استفاده کرده. مثل بقیه‌ی OLAPها یک دسته از مقادیر هم به عنوان اندازه‌ها (measures) یا متریک‌ها وجود دارن که مقادیر عددی هستن و قراره در ترکیبی از بعدها معنای خاصی داشته باشن. مثلاً اگه سه بعد زمان، شهر و محصول رو به عنوان فاکتورهای موثر در یک گزارش در نظر بگیریم در یک ساختار cube به اینطور شکلی می‌رسیم:https://cubes.readthedocs.io/en/v1.0.1/introduction.htmlهمین شکل در یک ساختار جدولی به اینطور شمایلی در میاد:من اونجایی فهمیدم که باید برنامه‌نویس شم که دیدم تو هر چیزی که سلیقه می‌خواد هیچ استعدادی ندارم.اینجا جاییه که دروید از roll-up به عنوان یک عمل cube فراتر می‌ره و اون رو به عنوان کنشی در هنگام ذخیره‌ی داده‌ها در نظر می‌گیره. هر خط منحصربفرد از ابعاد، داده‌هاش بنا بر عملگری که تعریف شدن، تجمیع میشن و اونطور ذخیره میشن. مثلاً برای خط time1-city2-product1 (ستون چهارم در تصویر بالا) اگه گفته باشیم عملگر بیشینه باید مورد استفاده قراره بگیره، به جای ذخیره‌ی اعداد ۴، ۱۵ و ۳۲ تنها عدد ۳۲ ذخیره میشه و یا اگه گفته باشیم از عملگر جمع استفاده بشه، عدد ۵۱ ذخیره میشه. محشر بودن دروید در roll-up به همینجا ختم نمیشه و دروید از برخی از داده‌ساختار احتمالی پیاده‌سازی شده توسط DataSketches هم پشتیبانی می‌کنه که فکر کنم اینجا جای باز کردنش نباشه و شاید تو یه پست دیگه برم سر وقت‌شون. در نهایت roll-up اجباری نیست و میشه متریک‌ها رو به صورت خام ذخیره و بازیابی کرد، ولی اونطور دیگه صفایی نداره ماجرا.تظریف چی می‌گه؟تظریف یعنی میزان دقت موردنیاز. برای شرح بیشتر دروید از تظریف (ترجمه‌ی granularity. لغت به این معنی نیست ولی فکر کنم درسته در اینجا این ترجمه) در دو جا پشتیبانی می‌کنه. یکی در سطح ذخیره‌سازی داده‌ها (میزان دقت بُعد زمان) و یکی در سطح ذخیره‌سازی فایل‌ها. اول تظریف زمانی رو بررسی می‌کنیم و بعد از اینکه دیدیم داده‌ها چطور ذخیره میشن می‌ریم سر وقت تظریف در ذخیره‌ی فایل‌ها. مثلاً فرض کنیم فقط از زمان به عنوان بعد استفاده می‌کنیم و زمان الان هم که ۲۰ تیر ۱۴۰۱ - ۲۰:۱۶:۴۵عه. تظریف در اینجا مثل استفاده از تابع date_trunc داخل SQLه و مثلاً تظریف در مقایس ساعت، همه‌ی داده‌ها در فاصله‌ی ۲۰ تیر ۱۴۰۱ - ۲۰:۰۰:۰۰ تا ۲۰ تیر ۱۴۰۱ - ۲۰:۵۹:۵۹ رو در یک سبد قرار میده.چطور داده‌ها ذخیره میشن؟اگه از سه منظر buffer کردن، mutable بودن یا نبودن و ترتیب بخوایم به انجین دروید نگاه بندازیم، همون‌طور که در بالا اومد، دروید داده‌ها رو در Middle Manager بافر می‌کنه، به صورت immutable ذخیره می‌کنه و داده‌ها بر اساس ابعاد مرتب میشن و طبعاً برای کوئری‌های range خیلی مناسبن. برای توضیح از آخر به اول میریم. برای اینکه ببینیم داده‌ها چطور مرتب میشن داده‌های زیر رو در نظر بگیریم:دروید داده‌ها رو در سه دسته تقسیم‌بندی می‌کنه. اولین ستون زمانه (با نوع داده‌ی long)، دوم ستون‌های بُعد میان (با نوع داده‌ی String) و سومی هم متریک‌ها هستن (با نوع داده‌های صحیح، اعشاری یا DataSketch). دسته‌ی اول و سوم به صورت فشرده‌ی LZ4 ذخیره می‌شن. دسته‌ی دوم اما برای هر ستون از ترکیب سه داده‌ساختار نگاشت، داده‌های نگاشت‌شده و ایندکس Bitset ساخته میشن. یعنی برای هر ستون بُعد با شروع از بعد زمان، داده‌ها مرتب میشن: برای ستون زمان در تصویر اول ساعت ۱ میاد و بعد ساعت ۲، برای ستون Page نام‌ها برای ساعت‌های ۱ و ۲ برابرن، برای ساعت ۱ و Page با مقدار Justin Bieber در ستون Username اول مقدار Boxer میاد و بعد Reach و قس علی هذا. بعد از این مرحله، برای هر ستون یک نگاشت رشته به عدد ساخته میشه. برای مثال برای ستون Page نگاشت اینطور چیزی می‌شه:{
    &amp;quotJustin Bieber&amp;quot: 0,
    &amp;quotKe$ha&amp;quot:         1
}بعد از اون ستون داده‌ها ساخته میشن:[  0,
   0,
   1,
   1]این یعنی در دو سطر اول برای ستون Page مقدار Justin Bieber و برای سطر سوم و چهارم مقدار Ke$ha بوده. در نهایت نوبت به ایندکس معکوس می‌رسه:value=&amp;quotJustin Bieber&amp;quot: [1,1,0,0]
value=&amp;quotKe$ha&amp;quot:         [0,0,1,1]در ایندکس بالا اگه مقدار Ke$ha رو بخوایم سرچ کنیم، مقادیر ۱ نشون میدن که در چه سطرهایی می‌تونیم در این ستون اونها رو پیدا کنیم (در اینجا ۳ و ۴). پس در نهایت هر ستون با استفاده از نگاشت می‌تونه به حداکثر فشرده‌سازی برسه و با استفاده از ایندکس معکوس می‌تونه در جستجو سرعت بالاتری رو داشته باشه (جدا از اینکه با بالارفتن اندازه‌ی (Cardinality) یک بُعد ایندکس هم خلوت‌تر میشه و دروید از این خاصیت برای فشرده‌سازی ایندکس استفاده می‌کنه).در نهایت مقادیر هر ستون به صورت مجزا و باینری ذخیره میشن (به جز ابتدای ستون که به صورت یک Column Descriptorه که توسط Jackson قابل خوندنه و اطلاعات تصویر زیر در اون ذخیره شده). این محتوای باینری در چیزی به اسم Segmentفایل‌ها ذخیره میشن.در ابتدای هر ستون داده‌های بالا که به راحتی توسط Jackson قابل خوندنه ذخیره میشنسگمنت فایلیه که دروید داده‌ها رو با شرحی که رفت داخل اون ذخیره می‌کنه و به ازای هر بازه‌ی زمانی تعریف شده توسط تظریف زمانی فایل‌ها یا چند معیار دیگه ساخته میشه. این معیارها رو میشه به دو دسته تقسیم کرد: معیارهای پارتیشن‌بندی اولیه و معیارهای پارتیشن‌بندی ثانویه. پارتیشن‌بندی اولیه همون بخش‌بندی فایل‌ها بر اساس واحدهای زمانیه. مثلاً وقتی تظریف فایل‌ها رو روی هفته قرار می‌دیم، تمام داده‌های یک هفته داخل یک فایل میان. اما این امر مشکلاتی رو هم داره. اینکه یک فایل می‌تونه خیلی حجیم بشه و پردازش رو سخت می‌کنه. برای حل این مشکل دروید روی پارتیشن‌بندی اولیه دو معیار دیگه هم قرار داده. معیار حجم فایل و معیار تعداد سطرهای ذخیره شده در فایل. یعنی اگه فرضاً حجم فایل رو ۵۰۰ مگ در نظر بگیریم و تعداد سطر رو ۵ میلیون، با رسیدن به یکی از این دو معیار، فایل اول بسته میشه و به صورت immutable آماده‌ی انتشار میشه و داده‌ها از اون به بعد برای نوشته شدن روی فایل دوم از اون تظریف زمانی آماده میشن. این رویکرد مشکل حجم فایل رو حل می‌کنه اما باز مشکلات دیگه‌ای رو در پی خودش داره. یکی از اون مشکلات اینه که برای یک بُعد ممکنه داده‌ها داخل چند فایل پخش شن و برای کوئری زدن نیازه تا چند فایل خونده شه (مثلاً برای مثال قبل ممکنه Ke$ha داخل همه‌ی فایل‌ها باشه در زمان‌های مختلف). برای حل این مشکل دروید راه‌حل پارتیشن‌بندی ثانویه رو ارائه می‌ده.پارتیشن ثانویهپارتیشن -افراز- ثانویه میاد و در کنار پارتیشن اولیه قرار می‌گیره. یعنی اول فایل‌ها بر اساس تظریف زمانی تعریف‌شده تقسیم می‌شن، در کنار اون، چینش داده‌ها داخل فایل‌ها بستگی به پارتیشن‌بندی دوم داره. دروید از چهار نوع پارتیشن‌بندی ثانویه پشتیبانی می‌کنه:افراز Dynamic: در واقع این پارتیشن‌بندی همون پارتیشن کردن بر اساس حجم و تعداد سطرهاست. ویژگی خوبش اینه که سرعت نوشتن در این پارتیشن‌بندی بالاترینه اما به دلیلی که ذکر شد، سرعت خوندن می‌تونه پایین‌ترین باشه.افراز Hashed: در این پارتیشن‌بندی، دروید از مقادیر هش یک یا چند ستون برای پارتیشن‌بندی استفاده می‌کنه. از نظر سرعت نوشتن رتبه‌ی دوم رو می‌گیره و می‌تونه در صورت انتخاب درست ابعاد، باعث توزیع یکنواختی از حجم فایل‌ها شه. همچنان اما امکان مشکل نوشته شدن یک بعد در چند فایل وجود خواهد داشت.افراز SingleDim: برای این پارتیشن‌بندی یک بُعد به عنوان پارتیشن ثانویه انتخاب می‌شه. مشکل نوشته شدن یک بعد در چند فایل حل می‌شه اما می‌تونه موجب چولگی در میزان حجم فایل‌های مختلف شه که طبعاً در سرعت کوئری اثر می‌ذاره.افراز Range: این افراز رو میشه به نوعی ترکیب دو افراز قبل دونست. یک یا چند بعد برای پارتیشن انتخاب میشن و رنج‌های داده‌ها در فایل‌های مختلف قرار می‌گیرن. این رفتار باعث یکنواختی در حجم فایل‌ها و در عین حال عدم حضور داده‌ی بعد در چند فایل مختلف می‌شه و سرعت کوئری بالاتری رو میشه با این افراز انتظار داشت. از طرف دیگه اما سرعت نوشتن داده در این افراز پایین‌ترینه.نکته‌ی دیگه‌ای که وجود داره اینه که انتخاب پارتیشن بستگی به Indexerی داره که برای تزریق داده‌ها به دروید استفاده می‌کنیم. برای مثال indexer کافکا فقط از نوع اول پشتیبانی می‌کنه و برای تغییر فرم ذخیره‌سازی داده‌ها باید بعد از وارد کردن داده‌ها اونا رو reindex کرد یا براشون compaction تعریف کرد ولی برای indexerهای Batch مثل خوندن از Hadoop میشه در زمان تزریق شکل پارتیشن ثانویه رو مشخص کرد.چی شد؟ سگمنت کجا ذخیره شد؟تا اینجا رسیدیم که سگمنت‌ها چطور ساخته میشن و چه ساختاری دارن. یعنی گفتیم که ستون‌های زمان و متریک‌ها به صورت LZ4 ذخیره میشن و ستون‌های بعد هم هر کدوم به صورت مستقل توسط Jackson قابل خوندنن و میشه به تنهایی از هر ترکیبی از اونها استفاده کرد. برای ذخیره کردن داده‌ها به صورت ستونی (Columnar) فرض کنید راه‌حل این باشه که ستون‌ها رو تو فایل‌های جدا ذخیره کنیم. این رویکرد یک مشکل بزرگ داره و اونم اینه که تعداد File Descriptorها برای خوندن فایل‌ها بالا می‌ره. دروید برای ذخیره کردن مستقل ستون‌ها و در عین حال در کنترل نگه داشتن تعداد File Descriptorها میاد از تکنیکی به اسم Smoosh کردن فایل‌ها استفاده می‌کنه. با Smoosh کردن چند فایل، یک فایل داده و یک فایل meta ساخته میشه که در اون آفست هر فایل ذکر شده (فایل اول از آفست ۰ تا فلان، فایل دوم از آفست فلان تا ...). در اینجا فایل متا برای هر ستون این کار رو انجام می‌ده و به این وسیله میشه فقط ستون‌هایی که نیازه رو خوند.یک دور با یک ایونتمسیر نوشتنایونت به Middle Manager می‌رسه و با شرحی که رفت داخل یک Segment ذخیره می‌شه. بعد از اینکه یکی از معیارهای انتشار برای سگمنت اجرا شد، Middle Manager اعلام می‌کنه که سگمنت قابل انتشاره و اون رو داخل Deep Storage ذخیره می‌کنه.مسیر خواندنکوئری به Broker می‌رسه و بروکر نودهای Middle Manager و Historical واجد شرایط محاسبه‌ی کوئری رو انتخاب می‌کنه (در این بین اگه سگمنتی نیاز باشه که داخل هیچ نود Historicalی نباشه، Coordinator بر اساس توزیع بار و فشار، به یکی از Historicalها گفته که سگمنت مورد نیاز رو از Deep Storage بارگذاری کنه). بروکر بر اساس کوئری و محلی که داده‌ها حضور دارن، تعدادی ساب‌کوئری می‌سازه و به نودهای مرتبط با اون ساب‌کوئری‌ها می‌ده. اون نودها محاسبات رو انجام می‌دن و نتیجه رو به Broker تحویل می‌دن. در نهایت Broker نتایج رو ادغام می‌کنه و به درخواست‌کننده تحویل می‌ده.پیاده‌سازی نمودارهای یک صرافیبرای بخش پایانی فرض کنیم قراره یه بخش تحلیلی برای یک صرافی بسازیم. من از یه API رایگان برای گرفتن قیمت رمز‌ارزها و ارزهای معروف استفاده کردم که کدش اینه: https://gist.github.com/meysampg/0c05c74bfbebc8e87ce405ac1e5fc2a3 و روالی که قراره جلو بریم اینطور چیزیه. اول دروید رو با indexer کافکا به کافکا و تاپیکی که می‌خوایم وصل می‌کنیم:من در اینجا چون دروید رو با داکر آوردم بالا، داخل کافکا پروتکل و آدرس host.docker.internal رو دادم و پورتی که کافکا روی اون گوش بده. وقتی دروید بتونه داده‌ای رو از کافکا واکشی کنه، اونا رو به صورت خام نمایش میده. بعد از اون نوبت پارس کردن داده‌ها می‌رسه. اینجا جاییه که میشه ساختارهای تودرتو رو مسطح کرد و یا اگه داده‌ها JSON باشن میشه با استفاده از jq مقادیر مورد نیاز رو استخراج کرد:بعد از اون نوبت به پارس کردن زمان می‌رسه:دروید خودش تلاش می‌کنه ستون زمان و فرمتش رو تشخیص بده. اگه نداد هم میشه با انتخاب ستون فرمتش رو مشخص کرد و یا با استفاده از تب Expression و تابع timestamp_parse ستون رو پارس کرد. بعد تبدیل و فیلتر کردن (که در اینجا نداریم) نوبت می‌رسه به کانفیگ کردن Schema:در تصویر بالا من همه‌ی ستون‌ها رو حذف کردم و فقط ستون unit رو گذاشتم به عنوان پارتیشن بمونه. چندتا متریک هم بهش اضافه می‌کنم:تظریف کوئری رو اینجا من ساعت گذاشتم. بالاخره ماجرا می‌رسه به کانفیگ کردن پارتیشنینگ روی فایل (که فقط از نوع پارتیشن اولیه‌ست برای indexer کافکا) و انتشار اون:بعد از انتشار میشه از داخل تب کوئری روی داده‌ها کوئری زد:الان برای هر روز ما می‌تونیم بالاترین، پایین‌ترین و میانگین قیمت (با استفاده از تقسیم جمع بر تعداد) رو داشته باشیم، در زمانی کمتر از ثانیه!نتیجه‌گیریدروید یه راه‌حل خیلی خوب برای چیزی بین راه‌حل‌های تحلیلی و سری زمانی محسوب میشه. معماری «اشتراک در هیچ چیز» این امکان رو می‌ده که مقیاس‌پذیری هر بخش سیستم تحت کنترل و بر اساس نیاز باشه اما در کنارش بالا آوردن و نگهداری کلاستر رو هم کمی سخت‌تر می‌کنه. استفاده از roll-up به عنوان یک عمل هنگام تزریق داده منجر به کاهش حجم داده و سرعت بالاتر در هنگام محاسبات میشه و امکان استفاده از DataSketchها به عنوان متریک و پشتیبانی اونا از عملیات‌های مجموعه‌ای دست ما رو در ساختن کوئری‌های تحلیلی جذاب (مثل funnel) باز می‌ذاره، در عین حال برای داشتن تحلیل‌های متفاوت تاریخی نیازه تا دیتای خام در جای دیگه نگه‌داری شه تا در آینده منابع جدید ساخته شن.</description>
                <category>میثم پورگنجی</category>
                <author>میثم پورگنجی</author>
                <pubDate>Mon, 25 Jul 2022 08:15:55 +0430</pubDate>
            </item>
                    <item>
                <title>کوله‌پشتی ۱۴۰۱</title>
                <link>https://virgool.io/@meysampg/%DA%A9%D9%88%D9%84%D9%87-%D9%BE%D8%B4%D8%AA%DB%8C-%DB%B1%DB%B4%DB%B0%DB%B1-mbpcgcte8ivk</link>
                <description>کوله‌پشتی ۰۰۱.  فرض کنید کوله‌پشتی دارید که قرار است در آن تجربیاتی را از سال ۰۰ بگذارید و با خود به سال ۰۱ ببرید. تجربیات مثبتی که همراه داشتن آنها به  شما کمک می‌کند نسبت به سال قبل فردی توانمندتر بشوید. در کوله‌ی خود چه  تجربیاتی را قرار می‌دهید؟صریح حرف زدن. امسال سومین سال متوالی است که من از حرف زدن در پست کوله‌پشتی‌ام حرف می‌زنم :)). صریح حرف زدن شاید موجب رنجش لحظه‌ای شود اما در نهایت موجب جلوگیری از آسیب می‌شود.۲.  برای حرکت در مسیر زندگی باید سبک و چابک بود. چه مواردی را از کوله‌ی خود خارج می‌کنید که در سال ۰۰ باقی بماند و شما سبک‌تر حرکت کنید؟ چیزهایی که از کوله‌ خارج می‌کنید مثلا می‌تواند تجربیات ناخوشایند یا ناراحتی‌ها باشد.دغدغه. ظرف دغدغه‌مندی محدود است. دغدغه‌ها از حدی که بگذرند این ظرف سرریز می‌شود و نه دغدغه‌ها به جایی می‌رسند و نه فرد توانی برای جمع کردن اوضاع دارد. من از کوله‌ام دغدغه‌مندی را خارج می‌کنم.۳.  فرض کنید در پایان سال ۰۱ بیشتر آن فردی شده‌اید که شبیه خود ایده‌آل شما است. در این صورت چه ویژگی‌ها و رفتارهایی باید در شما تقویت شود؟ چه چیزهایی را در کوله‌ی خود می‌گذارید که کمک می‌کند این ویژگی‌ها در شما تقویت شود؟روایت‌گری. من فکر می‌کنم روایت‌گری هنری است که  پیش‌زمینه‌های متفاوتی می‌خواهد و فکر می‌کنم قدم‌های خوبی در این راه برداشته‌ام. احتمالا کافی نباشد اما این چیزی است که می‌توانم روی آن تمرکز بیشتری داشته باشم.سال خیلی سال تند و تیزی بود. نمی‌دونم خاصیت سنه یا چیز دیگه، ولی خیلی یجوری بود برای من این سال. سال قبل رو نوشتم عجیب بوده، اما امسال عجیب نبود. پر از سختی و خوشحالی و ناراحتی -همه در حد حدی بود. از سالی که گذشت اما دوست دارم یاد کنم از طه و اینکه جاش برای همیشه سبز.</description>
                <category>میثم پورگنجی</category>
                <author>میثم پورگنجی</author>
                <pubDate>Sun, 20 Mar 2022 12:48:09 +0330</pubDate>
            </item>
                    <item>
                <title>آمار بازدید پست‌های من در سال ۹۹</title>
                <link>https://virgool.io/@meysampg/%D8%A2%D9%85%D8%A7%D8%B1-%D8%A8%D8%A7%D8%B2%D8%AF%DB%8C%D8%AF-%D9%BE%D8%B3%D8%AA-%D9%87%D8%A7%DB%8C-%D9%85%D9%86-%D8%AF%D8%B1-%D8%B3%D8%A7%D9%84-%DB%B9%DB%B9-j2fow6cqobbv</link>
                <description>در طول تاریخ از اعداد استفاده کردیم تا اغلب داد و ستد کنیم و آن‌چیزی که شمردنی است را بشماریم. برای هر عدد واحد درست کردیم تا عددهای زندگی قاطی نشوند و از اعداد، شفاف‌تر استفاده کنیم؛ مثلا وقتی می‌گوییم ده هزار تومان به پول اشاره داریم و وقتی می‌گوییم ده هزار بلیط به بلیط!روز به روز که در زندگی جلو‌تر رفتیم عددها فرقی نکردند ولی این واحدها بودند که زیاد شدند. واحد کریپتو، واحد اصله درخت، واحد فاصله و …«واحد» یک توافق عمومی است برای شمردن؛ تا همانطور که گفتم شمردن‌ها قاطی نشود. مشاهده افراد دارای ثروت (اجتماعی یا مالی) به من ثابت کرده اینکه چه چیزی را بشماریم از اینکه چطور بشماریم مهم‌تر است. هرکس با واحد خاصی مسائل زندگی را می‌شمارد. اینطور به نظرم آمده که مشخص کردن واحد یعنی مشخص کردن اینکه من در زندگی برای چه چیزهایی ارزش قائلم و می‌خواهم چه چیزهایی را در زندگی بشمارم. https://cdn.virgool.io/annual-report/1399/itbvxter1iuc-QVDyk.mp4 اعدادی که بدون واحد ثبت کردمبه ویدیویی که ویرگول برایم ساخته که نگاه می‌کنم میبینم که در سال ۹۹، من در مجموع ۶,۴۳۸ کلمه در ویرگول نوشتم و منتشر کردم و مخاطبین، پست‌های من را ۱۸۶ مرتبه پسندیدند و  ۳۴ بار هم نظر خود را روی پست‌های من به اشتراک گذاشتند. در سال ۹۹، ۱۳۱ نفر در ویرگول من را دنبال کردند تا پست‌های بعدیم را بخوانند. این اعداد نشان میدهند من کاری کرده‌ام. هرکدام به واحدی وصل هستند. از خودم می‌پرسم من کدام واحد را شمارش کرده‌ام؟ کدامیک از واحدهای بالا از همه برای من مهم‌تر است؟ ادامه ویدیو را می‌بینم.آمار از اثر بیرونی می‌گویندطبق آمار پست‌های من ۱۸,۱۷۱ بار خوانده شدند و ۲,۳۹۱,۴۷۶ ثانیه صرف مطالعه آنها شده است، که با توجه به جمعیتی که در ایران به اینترنت دسترسی دارند، ویرگول به من می‌گوید که توانستم  ۰/۰۳۲۷۸۶۸۹۳ ثانیه، سرانه مطالعه دیجیتال کشور را بالا ببرم.از طرف دیگر ویرگول به من می‌گوید که اگر قرار بود پست‌هایم را چاپ و به دست تک تک خوانندگان برسانم باید ۸۵,۰۸۹ کاغذ مصرف می‌کردم.آن عددهای کوچک ابتدای ویدیو حالا تبدیل شده‌اند به عددهای بزرگ به اینکه من جلوی مصرف این تعداد کاغذ را گرفتم یا به اینکه من  ۰/۰۳۲۷۸۶۸۹۳ ثانیه، سرانه مطالعه دیجیتال کشور را جابه جا کرده‌ام. واحد این عددها برای من ملموس‌تر است.واحد نوشتن چیست؟همه عددهای بالا و همینطور اثر بیرونی که روی خوانندگان و همینطور در مقیاس بزرگتر طبیعت و جامعه اطرافم گذاشتم اعدادی هستند که من دوستشان دارم و به آنها افتخار می‌کنم. اگر چنین ویدیویی دست شما نیز رسید به شما بابت تک تک اعداد تبریک می‌گویم.اثر هر نوشته تا حدودی معلوم است، اگر بنویسید جلوی قطع درخت را می‌گیرید، به سرانه مطالعه کشور اضافه می‌کنید و خوانندگانی جذب می‌کنید که شما را از طریق نوشته‌هایتان می‌شناسند و …به نظرم می‌رسد که نوشته‌های من و شما واحد ندارند ولی اثر بیرونی دارند.</description>
                <category>میثم پورگنجی</category>
                <author>میثم پورگنجی</author>
                <pubDate>Mon, 22 Mar 2021 14:20:58 +0430</pubDate>
            </item>
                    <item>
                <title>کوله‌پشتی ۱۴۰۰</title>
                <link>https://virgool.io/@meysampg/%DA%A9%D9%88%D9%84%D9%87-%D9%BE%D8%B4%D8%AA%DB%8C-%DB%B1%DB%B4%DB%B0%DB%B0-pothg5xqgzun</link>
                <description>کوله‌پشتی ۹۹۱. فرض کنید کوله‌پشتی دارید که قرار است در  آن تجربیاتی را از سال ۹۹ بگذارید و با خود به سال ۰۰ ببرید. تجربیات مثبتی  که همراه داشتن آنها به شما کمک می‌کند نسبت به سال قبل فردی توانمندتر بشوید. در کوله‌ی خود چه تجربیاتی را قرار می‌دهید؟حرف زدن. پارسال هم برای من حرف زدن جواب این سوال بود ولی واقعیت امر، امسالی که گذشت برای من حرف زدن معجزه کرد. یعنی توانستم حرف بزنم و بشنوم و عالی بود، انصافا خیلی خوب بود. من فکر می‌کنم این ویژگی هنوز چیزهایی دارد که من باید آنها را یاد بگیرم و به نظرم لازم است تا سال بعد هم این تجربه را با خود داشته باشم و باز آنرا تجربه کنم.۲. برای حرکت در مسیر زندگی باید سبک و چابک بود. چه مواردی را از کوله‌ی خود خارج می‌کنید که در سال ۹۹ باقی بماند و شما سبک‌تر حرکت کنید؟ چیزهایی که از کوله‌ خارج می‌کنید مثلا می‌تواند تجربیات ناخوشایند یا ناراحتی‌ها باشد.خودمحورپنداری. من امسال فهمیدم که در ساحت جهان دیگری، اثری ندارد که من شکست بخورم یا پیروز شوم. اینکه من هدفی داشته باشم یا نداشته باشم. جملات بدیهی‌اند و احتمالا از سوم راهنمایی به بعد همه آنرا می‌دانیم ولی من امسال آنرا فهمیدم. من از فصل آخر سال تلاش کردم تا کم‌کم این خودمحورپنداری را از مبنای نگاهم به دنیا کم‌رنگ کنم و در سال جدید نیز به همین مسیر ادامه خواهم داد.۳. فرض کنید در پایان سال ۰۰ بیشتر آن فردی شده‌اید که شبیه خود ایده‌آل شما است. در این صورت چه ویژگی‌ها و رفتارهایی باید در شما تقویت شود؟ چه چیزهایی را در کوله‌ی خود می‌گذارید که کمک می‌کند این ویژگی‌ها در شما تقویت شود؟دویدن. سلامتی سال گذشته جواب من به این سوال بود ولی دروغ چرا، امسال به تنها چیزی که توجه نکردم سلامتی بود :)). برای امسال خیلی دوست دارم یک روتین خیلی ساده و کوچک از ورزش کردن را برای خودم بسازم. به نظرم برای من و با توجه به تاریخچه‌ای که از زندگی دارم دویدن می‌تواند روتین خوبی باشد. برای این منظور از دوستانی که به انجام این فعالیت مشغول بودند درخواست کمک کردم که پادکست رانیو قسمت ۳۶ برای من مفید بود و ایلیا به من کتاب «راهنمای مقدماتی دویدن» را هدیه داد از «ایان مک نیل». کتاب را خوانده‌ام و دقیقا همان چیزی است که می‌تواند به درد یکی مثل من بخورد ولی هنوز دویدن را شروع نکرده‌ام ولی دوست دارم روتین دویدن را تجربه کنم. کی؟ توکل به خدا :)).پ.ن: امسال برای من سال عجیبی بود، احتمالا همانطور که برای شما هم. برای من الان در پایان سال این حس وجود دارد که امسال از آن سال‌هایی بود که کم در زندگی آدم اتفاق می‌افتد؛ از آن سال‌هایی که حس می‌کنی وارد مرحله‌ی دیگری شده‌ای. مرحله؟ پله‌ی بعدی؟ جهانی متفاوت؟ هر چه که باشد من این حس را نسبت به امسالم داشتم و باز مثل سال قبل، اثر مهدی بر زندگی من آنقدر پررنگ بود که هیچ نیازی به توضیح ندارد.</description>
                <category>میثم پورگنجی</category>
                <author>میثم پورگنجی</author>
                <pubDate>Tue, 16 Mar 2021 14:55:08 +0330</pubDate>
            </item>
                    <item>
                <title>یک دور با کافکا از صفر تا صد</title>
                <link>https://virgool.io/coderlife/apache-kafka-from-zero-to-end-jloxjcbxs8e7</link>
                <description>از این سری: یک دور با Druid از صفر تا صداین پست حاصل تلاش من برای فهم کافکاست و بیان روش من برای فهم یک موضوع: رفتن قدم به قدم در یک دور کامل از صفر تا صد. برای نوشتن این پست از نتایج سرچ‌هایم، کتاب Kafka: The definitive guide، این لینک، سورس کافکا و Jocko و درایور ساراما از Shopify استفاده کرده‌ام اما به هر حال ممکن است فهم من در موردی غلط باشد که این لطف شماست اگر آنرا اصلاح کنید.ساختار کافکااگه بخوایم پوست‌پیازی بریم جلو، اول کار یه کلاستر کافکا داریم که از هاست‌های مختلفی (حداقل یکی) که یه نسخه از کافکا رو اجرا کردن و با هم مرتبط شدن تشکیل شده. به هر کدوم از اون instanceهای داخل کلاستر میگیم بروکر. هر بروکر هم از تعدادی تاپیک تشکیل شده. تاپیک چیزیه مثل سطل‌های اسم‌دار ارتباط با مسئولین که هر کی هر چی بخواد به یه مسئول خاص بگه رو میاد میندازه داخلش. هر تاپیک از یک یا چند پارتیشن تشکیل شده که به صورت فیزیکی پیام‌ها در اونا ذخیره میشه. پارتیشن‌ها داخل یه کلاستر توزیع میشن و برای هر پارتیشن یکی از بروکرها به عنوان رهبر انتخاب میشه. در نهایت هم پیام (که هر چیزی به صورت آرایه‌ای از بایت‌ها می‌تونه باشه) رو داریم که توسط یه تولیدکننده (Producer) به کلاستر تحویل داده میشه و لیدر پس از دریافت کردن اون داخل یکی از پارتیشن‌های تاپیکی که خواسته شده می‌نویسه و به یه تعداد مشخص از بروکرها هم میگه که اون پیام رو ذخیره کنن. در نهایت هم هر وقت که نیاز شد مصرف‌کننده‌ها (Consumer) می‌تونن بیان و از پیام استفاده کنن. کلاینت نیازی نیست بدونه یه پارتیشن از یه تاپیک در کجای کلاستر وجود داره یا رهبر برای فلان پارتیشن کیه و هر زمان می‌تونه از هر یک بروکرها اطلاعاتی از این قبیل رو دریافت کنه.https://www.researchgate.net/figure/Example-of-Kafka-cluster-with-three-brokers_fig2_338516815رهبر یک پارتیشن؟!گفتیم که هر تاپیک می‌تونه به یک یا چند پارتیشن تقسیم شه و هر کدوم از پارتیشن‌ها هم می‌تونن داخل بروکرهای مختلفی ذخیره شن. در واقع برای اینکه پیام‌ها به هر دلیلی از بین نرن، به یه تعداد مشخص (که بهش replication factor میگیم) که موقع ساختن تاپیک مشخص میشه (و بعدا میشه افزایشش داد) روی بروکرهای مختلف از پیام کپی تهیه میشه. در نهایت برای هر پارتیشن یکی از بروکرهایی که اون پارتیشن رو داره به عنوان رهبر انتخاب میشه و مسئولیت دریافت/پس‌دادن پیام‌ها رو به عهده می‌گیره. رهبر بعد از دریافت پیام اون پیام رو ذخیره می‌کنه و از رهروان خودش هم می‌خواد که اون پیام رو ذخیره کنن.https://www.confluent.io/blog/hands-free-kafka-replication-a-lesson-in-operational-simplicity/انتخاب رهبرهر چند نادر ولی به هر حال اتفاقیه که می‌تونه بیفته و یک رهبر بمیره. اگه این اتفاق بیفته از بین لیست بروکرهایی که با رهبر قبلی کامل هماهنگ بودن (ISR: in-sync replicas) یک بروکر به عنوان رهبر انتخاب میشه و باقی ماجرا همونه که بود. این کار به وسیله‌ی ZooKeeper انجام میشه. در واقع با بالا اومدن کلاستر یک بروکر نقش کنترلر رو به عهده می‌گیره و در زمان از بین رفتن رهبر زوکیپر بهش اطلاع میده که فلان رهبر مرد. کنترلر از بین ISR یه بروکر رو به عنوان رهبر انتخاب می‌کنه و ماجرا ختم به خیر میشه. البته حالتی هم هست که میشه برای کل کلاستر یا یک تاپیک مشخص، اجازه داد رهبر از یکی از بروکرهایی که داخل ISR نیستن انتخاب شه که انتخاب بین این دو استراتژی به مورد استفاده بر می‌گرده. یه نکته‌ای در انتخاب رهبر هست اینه که اگه بعد از انتخاب رهبر جدید، رهبر قبلی خودش رو باز در لیست ISR وارد کنه، باز به عنوان رهبر پارتیشن انتخاب میشه (به اون بروکر رهبر ترجیحی Preferred Leader گفته میشه و همیشه اولین بروکریه که موقع گرفتن اطلاعات یک تاپیک برای یک پارتیشن در لیست میاد). برای تغییر رهبر ترجیحی باید به صورت صریح از داخل کد یا خط فرمان عمل کرد.در نهایت اگه لیست ISR خالی شه کافکا اکسپشن میده و برای از بین نرفتن پیام‌ها و محاسبات، این وظیفه‌ی تولیدکننده‌ها/مصرف‌کننده‌هاست که مدام برای تولید/مصرف تلاش کنن تا وضعیت به حالت عادی برگرده.انتخاب کنترلرگفتیم که رهبر توسط کنترلر انتخاب میشه، اما اگه خود کنترلر بترکه چی؟ برای فهمیدن جواب این سوال ببینیم کنترلر چطور انتخاب میشه. برای بالا آوردن یه کلاستر کافکا، گفتیم که از ابزاری به اسم ZooKeeper استفاده می‌کنیم. در واقع اول این ابزار بالا میاد (و کارهایی مثل انتخاب رهبر و اینا اونجا هم انجام میشه :دی) و بعد ما شروع به استارت کردن بروکرها و ثبت‌شون در کلاستر می‌کنیم. اولین بروکری که بتونه خودش رو به زوکیپر بشناسونه و اسمش رو در یک مسیر مشخص ثبت کنه، کنترلر خواهد شد. این اتفاق در صورت مرگ کنترلر هم اتفاق خواهد افتاد، یعنی با مرگ کنترلر زوکیپر اعلام می‌کنه که به کنترلر نیاز داریم و باز هر کی اول نشست، اون برنده‌ست :)).تصویر از گوگل ایمیج. سایت اصلی باز نشد.مرگ رهرواین احتمال هم ممکنه که یکی از رهروان برای مدت مشخصی (که داخل تنظیمات کافکا میاد) خودش رو با لیدر هماهنگ نگه نداره و یا تعداد مسیج‌هایی که با رهبر فاصله داره خیلی زیاد شه. در این حالت رهبر اون فالور رو از لیست ISR خارج می‌کنه. با زنده شدن دوباره، فالور خودش رو در حالت بازیابی قرار می‌ده و تلاش می‌کنه خودش رو با لیدر سینک کنه (مسیج‌ها رو از لیدر Pull می‌کنه) و در نهایت زمانی که خودش رو سینک کرد به این لیست بر می‌گرده.پیام دریافت شد!پیام رو اگه آدم در نظر بگیریم، وقتی به بروکر می‌رسه (در واقع Push میشه) یه سری اطلاعات بهش اضافه میشه که میشه اون رو پاسپورت طرف دونست. در ادبیات کافکا به اون رکورد می‌گیم. پس رکورد شد اون چیزی که داخل خودش پیام و ملحقاتش (مثل کلید یا اطلاعات تاپیک و پارتیشن) رو داره و یه سری اطلاعات مربوط به اون (مثلا زمان دریافت) رو هم ذخیره کرده و روند اینطور شد که تولید‌کننده به ترتیب از لیستی که داره (bootstrap servers) می‌پرسه که من این پیام رو می‌خوام تو اون پارتیشن فلان تاپیک ذخیره کنم. کجا بفرستم؟ جوابی که می‌گیره آدرس رهبره و تولید‌کننده پیام رو به رهبر اون پارتیشن تحویل میده. این وسط اگه برنامه‌نویس پارتیشن رو به صورت مشخص در داخل کد مشخص نکرده باشه، شماره‌ی پارتیشن اینطور انتخاب میشه:اگه داخل پیام کلید مشخص شده باشه، باقی‌مانده‌ی مقدار کلید بر تعداد پارتیشن‌ها میشه شماره‌ی پارتیشن.کلید هم اگه مشخص نشده باشه، رندروبین (Round Robin) اتفاق میفته.ذخیره‌ی پیام‌هاپیام وقتی به لیدر رسید، لیدر چک می‌کنه تا ببینه تولید‌کننده‌ی این پیام در صورت نیاز دسترسی‌های مورد نیاز برای اون تاپیک رو داره و اگه مشکلی نبود، پیام رو روی پارتیشنی که مسئولشه ذخیره می‌کنه. در واقع پارتیشن یه WALه که پیام‌ها با یک شماره‌ی اکیدا افزایشی (Offset) روش ذخیره میشن (در واقع ترتیب فقط داخل پارتیشن وجود داره). بعد از اینکه لیدر پیام رو برای خودش ذخیره کرد، به همه‌ی رهروان خودش میگه که بیاین پیام جدید رو ذخیره کنین و منتظر تائید ذخیره (ack) از طرف اونا می‌مونه. پیام بنابر سیاست تولیدکننده تا زمانی که اتفاق مشخصی در مورد ack از طرف رهروان دریافت نشه کامیت نمیشه و پیامی که کامیت نشده باشه هم کانسیوم نمیشه. سیاست تولیدکننده می‌تونه یکی از این سه مورد باشه:رهبر باید از همه تائیدیه بگیره که پیام رو ذخیره کردنپیام روی WAL رهبر نوشته شه، ولی نیاز نیست منتظر دریافت تائیده از طرف بقیه باشیمکلا بی‌خیال هر چی!مصرف پیامبرای مصرف پیام، به مصرف‌کننده میگیم که شروع به گرفتن پیام‌های یک یا چند پارتیشن از یک یا چند تاپیک کنه. این کار در یک حلقه‌ی بی‌نهایت انجام میشه و به این صورته که کانسیومر لیدر هر پارتیشن رو انتخاب می‌کنه (و اطلاعاتش رو کش می‌کنه) و هر بار در حلقه آخرین اطلاعات مصرف‌نشده‌ی پارتیشن‌ها رو بر می‌گردونه (اطلاعات رو از کافکا Pull می‌کنیم) و این کار تا زمانی که اکسپشنی رخ بده یا خودمون بخوایم ادامه پیدا می‌کنه. اطلاعات برگشتی در واقع آرایه‌ای از رکوردهایی که ذخیره شده (شامل مسیج، کلید، اطلاعات تاپیک، زمان و ... که در بالا در مورد صحبت کردیم) هستن. معمولا استفاده از یک مصرف‌کننده خیلی کاربردی نداره و چند مصرف‌کننده داخل یک گروه این مسئولیت رو به عهده می‌گیرن.تعاونی مصرف‌کنندگانگفتیم که مسیج‌ها داخل پارتیشن‌های یک تاپیک به ترتیب می‌شینن و اینجاست که پای کانسیومر گروپ‌ها به ماجرا باز میشه. یک گروه مجموعه‌ای از کانسیومرهاست که دارای آیدی مشترکن (مثل تیم فوتبال که مثلا بازیکن‌های استقلالی که سرور پرسیپولیسه، بهشون میگن تیم استقلال). اطلاعات مصرف از تاپیک‌ها برای گروه‌ها اینطور ثبت میشه که برای هر پارتیشن از یک تاپیک از یک گروه، تا کجا مسیج‌ها پردازش شدن.Kafka: The Definitive Guideاما شیوه‌ی مصرف در یک گروه اینطوره که هر پارتیشن باید یکی از کانسیومرها رو به عنوان مصرف‌کننده داشته باشه و از یک گروه، دوتا کانسیومر نمی‌تونن به یک پارتیشن بچسبن. این یعنی اگه گروه یک کانسیومر داشته باشه و تاپیک پنج‌تا پارتیشن، اون یک کانسیومر مشترک هر پنج‌تا پارتیشن میشه و اگه دوتا کانسیومر باشه، مثلا یکی دوتا پارتیشن بر می‌داره و یکی سه‌تا. برای وقتی که گروه پنج‌تا کانسیومر داشته باشه، هر کانسیومر دقیقا یک پارتیشن رو بر می‌داره و در نهایت اگه هفت‌تا کانسیومر داخل اون گروه باشن، دوتا کانسیومر بی‌کار خواهند بود و بی‌مصرف و انگل جامعه. این نشون می‌ده بهترین حالت اینه که تعداد کانسیومرهای یک گروه با تعداد پارتیشن‌های یک تاپیک برابر باشه. چون اگه کمتر باشه یک کانسیومر مجبوره حداقل دوتا پارتیشن رو برداره و اگه محاسبات طول بکشه، طول می‌کشه تا پیام‌های بعدی اون پارتیشن پردازش شن و اگه بیشتر هم باشه که الکی منابع سیستم هدر رفته. طریقه‌ی مصرف هر یک از کانسیومرها هم که مثل بخش قبله. در نهایت وقتی محاسبه تموم شد آفست اون مسیج پارتیشن برای اون گروه کامیت میشه و شماره‌ی آخرین افست بروز میشه.از این به بعد هر وقت که یک عضو به گروه اضافه شه (مثلا برای ۵ پارتیشن، ۲ مصرف‌کننده داخل گروه بوده)، به راحتی میشه ازش برای مصرف پیام‌ها استفاده کرد. در واقع در گروه برای مصرف یک rebalance انجام میشه و با رعایت شرحی که اومد به عوض جدید هم یک یا چند پارتیشن اساین میشه. اگه هم که مشکلی پیش بیاد و سرویس ریست بشه، اینطور مشخصه که برای این گروه از کجا باید ادامه‌ی پردازش رو برای هر پارتیشن ادامه داد.سناریوهای شکستبه هر دلیل ممکنه هر جایی از سیستم بترکه و باید فکری برای پیام‌هایی که در ماجرا درگیر بودن برداشت. برای هر پیام سه‌تا حالت رو می‌تونیم در نظر بگیریم:حداقل یکبار: فرض کنید داخل کلاستر کافکا از همه‌ی replicaها خواستین که تایید (ack) کنن که پیام رو دریافت و ذخیره کردن. این وسط یکی از رپلیکاها به هر دلیلی مسیج رو ذخیره می‌کنه اما دیرتر به لیدر ack میده و ریکوئست به تایم‌اوت می‌خوره (شکست) و کلاینت فکر می‌کنه که نشد و مسیج رو دوباره بعدا می‌فرسته. این وسط ولی اون مسیج در نهایت ذخیره شده و مسیج جدیدی که اومده هم در واقع همون مسیج قدیمیه. در این حالت ما از یک پیام دوتا داریم و موقع مصرف کردن هم طبعا دوبار مصرف میشه (فکر کن درخواست واریز حقوق باشه :قلب).حداکثر یکبار: در حالت بالا فرض کنیم که کلاینت بعد از شکست اولش دیگه تلاش نکنه. اینجا حداکثر یک بار اون پیام ذخیره شده و شاید هم اصلا نشده باشه! (فکر کن درخواست واریز حقوق باشه :/).دقیقا یکبار: فرض کنیم در حالت اول هفتصد بار هم اگه کلاینت تلاش کنه نتونه پیامی که فکر می‌کنه شکست خورده ولی داخل سیستم هست رو وارد بروکر کنه. از اونور موقع مصرف هم مکانیزیمی باشه که مطمئن باشیم اگه مصرف‌کننده ترکید پیامی دوبار مصرف نمیشه. در این حالت می‌تونیم مطمئن باشیم یک پیام دقیقا یکبار تولید شده و برای یک مورد خاص دقیقا یکبار مصرف شده (فکر کن درخواست واریز حقوق باشه (: ).https://lpmanagementservices.com/safety-management-training-courses/electrical-training/failure-scenarios-critical-thinking/برای پیاده‌سازی Exactly Once Semantic کافکا راه رو به دو شقه تبدیل کرده. یکی وقتی که پیام داره تولید میشه و دیگری وقتی که پیام مصرف میشه. برای وقت تولید یه کلید منحصربفرد توسط کلاینت به پیام اضافه میشه و پیام به بروکر ارسال میشه. هر اتفاقی که این وسط بیفته و پیام داخل بروکر بشینه اما کلاینت متوجه نشه، دفعه‌ی بعد که پیام ارسال میشه اون آیدی داخل سیستم وجود داره و کافکا دیگه اون رو ذخیره نمی‌کنه (داخل WAL نشسته و کافکا میگه من اینو دارم!). برای وقت مصرف هم همونطور که بالاتر اومد متوجه شدیم که هر پارتیشن رو فقط یه کانسیومر از یک گروه می‌تونه بخونه و این وسط یه ترنزاکشن شکل می‌گیره. به هر دلیل اگه افست پیام در نهایت مصرفش کامیت نشه، افست مربوط به پارتیشن برای اون گروه بروز نمیشه و در دور بعدی اون پیام مصرف خواهد شد و چیزی از دست نمی‌ره.چیزی از دست نمی‌ره؟حالا نه اونطور هم. حتی با فرض EOS بودن ماجرا، چندجا هست که ممکنه باعث شه تا پیام یا محاسبه‌ای از دست بره و باید مواظب‌شون بود.تولیدکننده از بین بره: فرض کنید پیام برگشت می‌خوره (به هر دلیلی) و تولیدکننده دیگه تلاش نکنه یا خودش با مشکل روبرو شه.مصرف‌کننده جای اشتباه کامیت بزنه: گفتیم که داخل یه گروه مصرف‌کننده، بعد از اینکه محاسبات انجام شد، مصرف کننده باید افست رکورد رو کامیت کنه. اگه مصرف‌کننده قبل از اینکه مطمئن شه همه چی درسته این کار رو انجام بده، این احتمال هست که مشکلی پیش بیاد و نتایج محاسبات از دست بره و پیام هم به عنوان پیام مصرف‌شده کامیت شه.سرور بترکه: کافکا لاگ رو روی Page Cache می‌نویسه و منتظر نمی‌مونه ببینه لینوکس اطلاعات رو پرسیست کرده یا نه. به هر دلیل اگه پرسیست کردن اطلاعات ارسالی توسط رهبر با مشکل مواجه شه و ریکاور هم نشه، اطلاعات از دست رفته.مدیریت آفست‌هاتا حالا در مورد دو نوع کامیت کردن حرف زدیم. اولی وقتی بود که رهبر می‌خواست مطمئن شه که یه مسیج بعد از اضافه شدن به WAL ذخیره شده و دومی وقتی بود که گروه مصرف‌کنندگان پیامی رو پردازش کردن. در مورد اول در واقع اتفاقی که می‌افتاد این بود که آفست اساسا اونجا خودکار تولید می‌شد و دیگه هم هیچ وقت تغییر نمی‌کرد. اما در مورد دوم کامیت کردن (در واقع کامیت کردن یه آفست و نه یه رکورد) هم میشه به صورت اتوماتیک این کار رو انجام داد و هم به صورت دستی. برای اتوماتیک شدن ماجرا کافیه داخل تنظیمات گروه مقدار enable.auto.commit صحیح باشه. با انتخاب این روش و مشخص کردن مقدار برای auto.commit.interval.ms، عمل کامیت کردن در بازه‌های منظم x میلی‌ثانیه یک‌بار انجام میشه. این روش دنگ و فنگ کامیت کردن رو از سر بر می‌داره ولی می‌تونه باعث دو شکل مشکل شه. اولی اینه که ممکنه رکوردی پردازش شده باشه ولی قبل از رسیدن زمان کامیت، گروه ترکیده باشه و آفست کامیت نشده باشه. اینجا دوباره اون پردازش انجام میشه. مشکل دوم وقتی به وجود میاد که از هم‌روندی استفاده شه. محاسبات به عهده‌ی یه ترد دیگه گذاشته میشه اما طول زمان محاسبات از زمان بازه بیشتره. آفست کامیت میشه اما پردازش با شکست روبرو میشه. اینطور بدون پردازش کردن اون رکورد، به عنوان مصرف‌شده ثبت میشه.https://www.iamjrp.com/2020/kafka-offset-consumption/راه دیگه اما کامیت کردن دستی آفست رکوردهاست. این کار به سه شیوه قابل انجامه. اولین روش کامیت کردن متقارن مصرف‌کننده‌ست (commitSync). در این حالت بعد از اینکه پردازش تموم شد منتظر می‌مونیم تا افست کامیت شه و بریم سراغ بعدی و یا در صورت شکست برای کامیت دوباره تلاش کنیم (یکی از مثال‌های حالت شکست  وقتیه که آفستی با شماره‌ی بزرگتر قبلا کامیت شده باشه که در این صورت میشه بی‌خیال کامیت شد). حالت بعدی حالت نامتقارنه (commitAsync). در این حالت منتظر نمی‌مونیم و به کانسیومر می‌گیم در پشت پرده این کار رو انجام بده و طبعا تلاشی هم برای شکست نمی‌تونیم انجام بدیم. حالت سوم کامیت کردن یه آفست خاصه. در این حالت اطلاعات تاپیک و پارتیشن و آفستی که می‌خوایم کامیت شه رو برای کامیت کردن اعلام می‌کنیم.فهم از روی کدبرای فهم بهتر ماجرا میشه از این مخزن استفاده کرد که کافکا رو با گو بازنویسی کردن. سورس خود کافکا رو هم میشه از اینجا یافت که با اسکالا نوشته شده. کد درایور ساراما رو هم میشه از اینجا دید.نتیجهدر این پست دیدم که یک کلاستر کافکا چطور ساخته شده و پیام‌ها چطور ذخیره میشن. همینطور دیدیم که چطور میشه با استفاده از پیام‌ها محاسبات انجام داد و راه‌های جلوگیری از دست دادن پیام یا محاسبات چیه.</description>
                <category>میثم پورگنجی</category>
                <author>میثم پورگنجی</author>
                <pubDate>Thu, 27 Aug 2020 23:25:42 +0430</pubDate>
            </item>
                    <item>
                <title>مرگ بر رمانتیسم</title>
                <link>https://virgool.io/@meysampg/%D9%85%D8%B1%DA%AF-%D8%A8%D8%B1-%D8%B1%D9%85%D8%A7%D9%86%D8%AA%DB%8C%D8%B3%D9%85-crgkiujrarom</link>
                <description>https://www.lovethegarden.com/uk-en/article/growing-small-plants«شما تنها مالک چیزی هستید که بهای آنرا پرداخت کرده باشید»؛ این جمله از کامو پشتوانه‌ی نظری برای نگاه من به داشتن چیزی در زندگی رو به خوبی بیان می‌کنه. در واقع من از هر شکلی از رمانتیسم متنفرم. این تصور که جهان باید مطابق آرزوها و خیالات من پیش بره چیزی نیست جز راهی برای اتلاف فرصت زیستن در این دنیا.خیال بده؟من فکر می‌کنم خیال سازنده‌ترین چیزیه که آدمی رو به پیش می‌بره. مشکل من با اونجاست که از دنیا انتظار داشته باشیم که به خیالات من توجهی کنه و یا مبنای من برای تفسیر جهان آرزوها باشن. من با این مشکل دارم. هر خیال و تصویری که موجب کنشی در من بشه از نظر من فوق‌العاده‌ست و همین. من با وایسادن و نگاه کردن به آرزوها و خیالات و منتظر موندن برای وقوع چیزی در راستای اونها مشکل دارم.چون دنیا منطقیه؟از قضا من خیال می‌کنم دنیا اصلا منطقی نیست. ما در شرایطی قرار گرفتیم که با منابع محدود باید زنده بمونیم و این محدودیت هیچ قاعده و قانون و اخلاقی نمی‌شناسه. و این وسط تصور هر شکلی از منطق داشتن و محترم بودن دنیا خیال خامی بیش نیست.حیوون شیم؟هستیم در واقع. ولی اگه منظور وحشی شدنه به نظرم نه. نوع ما سالیان درازی با تکیه بر خودش تونسته زنده بمونه و هی زندگی رو بهتر و بهتر کنه. من فکر می‌کنم مشکل از جایی ایجاد شد که دلیل این بهبودها اشتباها به جای کنش‌گری انسان، منطقی بودن دنیا فهمیده شد. آدم‌ها خواستند و در راستای این خواستن تلاش کردند تا دنیا به اینجا رسید.خب؟بیا دست برداریم از رمانتیک بودن. آرزوها و تصورات ما واقعا به هیچ جای جهان نیست. به جای منتظر موندن بیا اون رو تبدیل کنیم به عمل. نتیجه‌ی عمل ممکنه خوب یا بد باشه ولی باز در هر صورت یک قدم رو به جلوئه. از وایسادن چیزی گیرمون نمیاد.من که آدم وایسادن و آرزو کردن نیستم! :/هستی. رمانتیک بودن نمود حدی‌اش میشه فهم جهان بر مبنای خیالات خود. حالا دیگه‌اش هم هست. همین که چیزی رو بخوای یا نخوای ولی قدمی بر نداری در راستای این میلت و انتظار داشته باشی چیزی درست شه، تو به نوعی از رمانتیسم احتمالا دچاری. خواستن یا نخواستن مهم نیست، مهم اینه که کاری بکنی.پس همه چیز شد اراده‌ی انسان دیگه؟نه! ولی همه چیزی که در اختیار انسانه و می‌تونه بهش تکیه کنه اراده‌شه. اتفاقا این انتظار که اراده کردن هم موجب میشه به چیزی که می‌خوای برسی شکلی از رمانتیک دیدن دنیاست :)). تو فقط می‌تونی اراده کنی و در راستایی که می‌خوای حرکت کنی. دیگه اینکه چه اتفاقی میفته رو هیچ کسی نمی‌دونه. سیب زندگی آدم تا برسه زمین هزار دور چرخیده.پس همیشه باید نگران بود!نه! تو فقط کنترلی بر چیزی که پیش میاد نداری و اگه دست از میل به کنترل داشتن برداری می‌بینی که سوار یه قایقی که داخل دریاست! تو می‌تونی به سمتی که می‌خوای حرکت کنی اما هیچ تضمینی هم نداره به جایی که می‌خوای برسی. این عدم تضمین باعث میشه تو حرکت نکنی؟ به نظر من نه! اگه آخر موندن تو جزیره مردنه و زدن به دریا هم احتمال مردن داره، اقلا لذت قایق‌سواری رو هم برده باشیم!پ.ن: در زمانه‌ی مقاله‌ی درست و درمون نویس‌ها، تو تیکه‌نویس باش :)).</description>
                <category>میثم پورگنجی</category>
                <author>میثم پورگنجی</author>
                <pubDate>Wed, 05 Aug 2020 14:01:41 +0430</pubDate>
            </item>
                    <item>
                <title>دایره</title>
                <link>https://virgool.io/@meysampg/%D8%AF%D8%A7%DB%8C%D8%B1%D9%87-hi8nenrc5egk</link>
                <description>عکس رو از اینترنت دزدیدم و ادیت کردم، شد این.«مثلا مثل اینکه یکی یه عزیزی رو از دست بده، خود اون عزیز یه مسئله‌ست و کانتکس عزاداری برای یک عزیز یه چیز دیگه. اون دومی برای من مسئلـ»؛ داشتم همینطور حرف می‌زدم که سرم رو بالا آوردم و دیدم در حالی که سرش رو خم کرده و دستش رو زیر چونه‌اش زده داره نگام می‌کنه. رشته‌ی فکرم پاره شد. «چرا یه آدم باید اینقدر خوشگل باشه؟»، تو خودم مشغول به این فکر بودم که صدایی رشته‌ی خیالم رو پاره کرد: «چرا مسئله‌ست؟». تو این چند سالی که می‌شناختمش عادتش همین بود. شنیدن کلی حرف و پرسیدن یک جمله‌: چرا؟چه می‌دونم چرا! مسئله‌ی من الان اینه که تو چرا اینقدر خوشگلی؟ اصن به من چه که بین علت و نمودهاش چه رابطه‌ای برقراره؟ ولی چاره‌ای نبود. فکرم رو جمع کردم و به کیف روی میز اونطرفی چشم دوختم. «چون ما آدما ذاتا فهمی جز از خویشتن نداریم یا در حالتی ضعیف‌تر، ما فهم چندانی از چیزی جز خویشتن نداریم. مثلا اون کیف رو ببین. کارکردش با یه گونی چه تفاوتی داره؟ تقریبا هیچی. جز اینکه احتمالا گونی بزرگ‌تره و خرت و پرت بیشتری توش جا میشه. اما وقتی به کیف نگاه می‌کنی تو وقار رو می‌بینی، یا یچی مثل این. و این باعث بیدار شدن حسی در کانتکس بالغ تو میشه. به عینه می‌تونی تصور کنی که وقتی باشکوهی چه تعیّنی در بیرون داری». چشماش خط شده بود و داشت فکر می‌کرد و این من رو نگران می‌کرد. جمله‌ی آخرم جمله‌ی دقیقی نبود. تنها نیاز داشتم که با فعل مفرد خطابش قرار داده باشم و ازش تعریف کرده باشم. احتمالا بعد از چند ثانیه همین می‌شد مویی که از ماست بیرون می‌کشید.همیشه همین بود. هر بار که من خواستم بحث رو با یک چرا به سمت خودمون ببرم، شروع به فلسفه بافتن کرد. فلسفه‌ی تو به چه درد من می‌خوره آخه؟ لعنت بهت! می‌میری مثل آدم حرف بزنی؟ تو این چند سالی که می‌شناختمش همیشه همین بود. یه آدم شوخ و شنگِ سربه هوا. هیچ وقت نشد که یکم دنیا رو جدی بگیره. هر وقت هم که جدی گرفت شروع به فلسفه‌بافی کرد. فلسفه‌ی تو به چه درد من می‌خوره آخه؟ توی فکر بودم که صداش رشته‌ی فکرم رو پاره کرد: «چاییت سرد شد.». چایی‌م سرد شد. چاییت سرد شد... پرسیدم «چرا تعیّن شکوه من در بیرون برای من اهمیت داره؟».اگر جز این بودی باید شک می‌کردم. از روز اولی که شناختمت همین بودی. و لعنت به من! من که تو رو می‌شناسم چرا باید با یه جمله اینطور خودم رو توی هچل بندازم؟ چاره‌ای نبود. باید یچی بگم. با چوب نبات که حالا روی چایی شناور مونده بود کمی بازی کردم. چی میشد گفت وقتی تمام حرف من برای عالم این بود که تو زیبایی و این قبول نیست که تو اینقدر زیبایی. «ببین، اول بذار سر چند چیز با هم توافق کنیم.» اولیش قطعا اینه که تو زیبایی و این یک اصل تشکیک‌ناپذیره. هاها! زورو! میزای بغلی رو خبردار نکنی اینقدر این رو بلند توی مغزت داد می‌زنی! «چیزی که وصفی ازش نداری با وجود نداشتنش چندان تفاوتی نداره. دوم اینکه فهم ما از شی، متناظر با اون شی‌عه و نه خودش. مثل تفاوت یک نقاشی با چیزی که نقاشی شده. حالا بیا در نظر بگیر که آدمی چطور می‌تونه خودش رو وصف کنه؟ با چه چیزی می‌تونه خودش رو وصف کنه اصلا؟ مشخصا بدون کلمه نمی‌تونه و این کلمه رو بدون نیاز به ارتباط نمی‌تونه به وجود بیاره. در واقع احتمالا ماجرا اینطور بوده که آدم و حوا می‌رسن به هم و یکی به اون یکی میگه عه این! و این عه این در طول سالیان می‌رسه به این همه کلمه. هر بار ظریف و ظریف‌تر شده. مثل همون اثر نقاشی که استادش ماهر و ماهرتر شده. حالا این وسط این کلمه‌ها می‌تونن عین تو باشن؟ به نظر من نه، ولی می‌تونن با شناختن بیشتر شبیه تو باشن. همین امر در ساحت خویشتن هم برقراره. تو برای شناخت خودت نیاز داری که کلمه داشته باشی و وقتی با خودتی کلمه‌ای نداری. اما وقتی اون تعیّن شکوه خودت رو در بیرون می‌بینی، چیزی رو در خود می‌بینی که مثالی داری براش برای ساختن چیزی هم‌سنگ در ذهنت. تو اون کیف نیستی، اما اون حسی که از شکوه دیدن شخص با اون کیف درک می‌کنی رو می‌تونی برای شکوه استفاده کنی. و این حس ظریف و ظریف‌تر میشه و اینطور تو شناخت بهتری از خودت پیدا می‌کنی. از سر همین تعیّن بیرونی اهمیت پیدا می‌کنه». لبخند محوی رو میشه گوشه‌ی لب‌هاش دید. به نظرم قانع شده.رگ به رگت کنن خری! حیف مغز تو که برای تولید این خزعبلات به کار گرفته میشه و حیف مغز من که برای شنیدنش خورده میشه. خوشحالم که تا ساعت پنج چیزی نمونده و میری گورت رو کم می‌کنی تا فردا که دلتنگ شم برای دیدنت. «بریم؟» و هر بار این جمله جوری تو رو غمگین می‌کنه که انگار قرار نیست فردایی باشه.حدود یازده ساله که می‌شناسمشون. اولا توجهی بهشون نداشتم. میومدن و می‌رفتن. ولی کم‌کم برام جذاب شدن. هر بار که قهوه‌ای سر میزشون می‌بردم سعی می‌کردم با میزهای دور و بر خودم رو سرگرم کنم و یا با تعلل برای برداشتن لیوان‌ها از میزشون بیشتر حرف‌هاشون رو بشنوم. آدم‌های بی‌آزاری‌ان. هر روز عصر میان و با هم بحث می‌کنن و یچی می‌خورن و می‌رن، این اواخر با عجله‌ی بیشتر. هر بار هم رو در خیال هم به آعوش می‌کشن و هیچ کدوم راهی برای بیرون رفتن از این دایره پیدا نمی‌کنن. تا سال پیش بیشتر می‌دیدمشون اما از وقتی که این قرص‌های لعنتی رو به خوردم میدن، کمتر میان سراغ من. دلم براشون تنگ میشه، برای این دیوونه‌های دوست‌داشتنی.</description>
                <category>میثم پورگنجی</category>
                <author>میثم پورگنجی</author>
                <pubDate>Thu, 30 Jul 2020 23:44:39 +0430</pubDate>
            </item>
                    <item>
                <title>چطور برای یک دیتا آنالیست شدن شروع کنیم؟</title>
                <link>https://virgool.io/@meysampg/how-to-become-data-analyst-an-introduction-mlxbqe20qsyv</link>
                <description>digitalvidya.com عکس از شروعمن دیتا آنالیست نیستم و راستش اونقدر هم نمیدونم که دیتا آنالیست‌ها چیکار می‌کنن، ولی حاصل سر و کله زدن با دیتا آنالیست‌های مختلف بهم نشون داده که اونا چیا نیاز دارن. با این توضیح این راهنما قرار نیست یک راهنمای کامل باشه و بیشتر به درد کسی می‌خوره که تازه میخواد شروع کنه. اگه شما حس می‌کنین آنالیز داده‌ها رو دوست دارین، احتمالا خوندن این متن براتون میتونه مفید باشه و از اونجایی که «وقتی راه بیفتیم، ترسمون میریزه» من فقط قدم‌های شروع راه افتادن رو میگم. هر چند خیال می‌کنم همین قدم‌ها هم اگه خوب برداشته شن، مسیر خیلی خوبی در این راه طی شده. مسیری که من متصور شدم چیزیه که داخل استک خودم بوده و استک‌های ماکروسافتی یا IBMی هم هستن که من دیدی بهشون ندارم و طبعا اگه میدونین از چی حرف می‌زنم نیازی هم به این متن ندارین :)).پایتوندر قدم اول شما نیاز دارین که پایتون رو تا حد خوبی یاد بگیرین. اینکه پایتون خوبه؟ اسکالا بهتر نیست؟ از کدوم IDE استفاده کنم؟ و حرف‌هایی از این قبیل رو رها کنین. شما الان باید یک چیز رو یاد بگیرین: پایتون. بهتون این قول رو میدم که پایتون اونقدر به دردتون بخوره که اگه بعدا خواستین تا زبان دیگه‌ای رو یاد بگیرین، حس نکنین که وقت‌تون رو تلف کردین. از اینجا تا آخر آموزش هر وقت بحث پایتون شد، منظور نسخه‌ی ۳ پایتونه.یاد گرفتن پایتون رو میشه به چند مرحله تقسیم کرد:۱. ساختار زبان. در این مرحله شما باید یاد بگیرین که متغیرها چطور تعریف میشن و چطور میشه داخل پایتون حلقه نوشت یا عبارات شرطی رو تعریف کرد. انواع داده‌ها چطور استفاده میشن و چیزهایی از این قبیل. برای این مرحله من منابع زیر رو پیشنهاد می‌کنم:۱. لینک -&gt; Kaggle جاییه که میتونه براتون کم‌کم جای بهشت رو بگیره. فعلا سعی کنین این آموزش پایتونش رو تا ته برین. احتمالا علاقه داشته باشین روی سیستم خودتون یچی شبیه اون ابزاری که کگل بهتون ارائه میده رو داشته باشین که این لینک میتونه براتون مفید باشه.۲. لینک -&gt; از این لینک اون قسمت که نوشته Learn the Basics رو هر جا نیاز داشتین نگاه کنین.۲. شی‌گرایی در پایتون. میدونم! شما نمیخواین جنگو یا فلسک یاد بگیرین! ولی برای مرحله‌ی بعدی ما نیاز داریم که بدونیم اصن شی چیه و داخل پایتون چطور میشه ازش استفاده کرد. داخلش چه خبره و در نهایت چطور میشه از یه شی دیگه ارث برد و چیزای جدید ساخت. به نظرم برای این مرحله از این منبع میشه استفاده کرد:لینک -&gt; این لینک دید کلی و خوبی ارائه میده. سعی کنین هی کلاس‌های مختلف با متدهای مختلف بسازین و شروع کنین باهاشون ور رفتن. اونقدر این کار رو انجام بدین تا روال شه ماجرا.۳. استفاده از کتابخونه‌ها. این کاربردی‌ترین بخشیه که شما باهاش سر و کله می‌زنین. شما باید بدونین چطور از کدهایی که بقیه نوشتن استفاده کنین تا اون چیزی که میخواین رو بسازین. حالا نه، ولی بعدنا که خفن شدین، نمودار زدین، با ۲۰ تا جدول رل زدین، خوبه کتابخونه‌ها و پکیج‌هایی که نوشتین رو منتشر کنین تا بقیه هم استفاده کنن: جمع به گشادی زنده‌ست. برای این قسمت منابع زیر خوبن:۱. فعلا در همین حد بدونین که با دستور pip install PACKAGE_FOLAN میشه یه بسته رو نصب کرد. اگه از لینوکس استفاده می‌کنین، در توزیع‌هایی مثل اوبونتو برای پیپِ پایتون ۳ باید از دستور pip3 install PACKAGE_FOLAN استفاده کنین.۲. لینک -&gt; برای اینکه بعدا بهتر بفهمین ماجرا چیه و چه کارهایی میشه با پیپ کرد.۴. ساختمان‌های داده در پایتون. شاید مفیدترین کاری که شما در تمام طول عمرتون در یک زبان برنامه‌نویسی انجام میدین، فهمیدن ساختمان‌های داده‌اش باشه. تجربه‌ی تا اینجام بهم میگه وقتی میگیم یچی خیلی سخته و گیجم میکنه، این احتمال خیلی قوی‌ایه که چیزی در مورد اون زبان، علی‌الخصوص به احتمال ۹۹ درصد در مورد ساختمان‌های داده‌شه که برامون گنگه. این کار بیهوده‌ایه که کل یک ساختمان داده رو حفظ باشید، ولی شما باید این رو بدونین که یه ساختمان داده چیه و چه کارهایی میتونه براتون انجام بده. این امر در طول زمان ساخته میشه ولی لینک‌های زیر هم میتونن مفید باشن.۱. لینک -&gt; این لینک جز مستندات خود پایتونه. بازش کنید و سر حوصله کامل هر خطش رو بخونید و ببینید که چی نوشته و اجرا کنید و نتیجه رو ببینید. لازم نیست اونا رو حفظ کنید ولی واجبه به اندازه‌ی کافی وقت بذارید و ببینید ماجرای هر کدوم چیه.۲. لینک -&gt; شما بعد از خوندن این لینک (و یا سرچ در موردش) باید بتونین فرق بین list و tuple و set رو توضیح بدین و بگین که هر کدوم کجا استفاده میشن و چه کاربردهایی دارن.۳. لینک -&gt; بخش دوم این لینک هر جا که گیر کردین میتونه راهنمای خوبی باشه براتون. اگه وقت دارین کل این لینک میتونه مفید باشه اصن :)).رسم!از شما انتظار میره که بتونین حجم بالای اطلاعات رو تبدیل به چیزی کنین که قابل فهم باشه. در واقع بیشتر وقت‌ها شما با آدم‌هایی سر و کار دارین که اصلا هیچ درک فنی‌ای ندارن و این هنر شماست که تمام زحمت بقیه‌ی تیم‌ها از مارکتینگ تا پروداکت رو به چشم میاره. با این نگاه شما باید کتابخونه‌های زیر رو یاد بگیرین:۱. کتابخانه‌ی Matplotlib. متپلات‌لیب خیلی وقت‌ها میتونه یه ابزار دم‌دستی و عالی باشه براتون تا ببینید که از داده‌هاتون چی میتونید بفهمید. اگه آمار بلد باشین این کار براتون آسونه و اگه هم بلد نباشین، بعدا که یاد گرفتین براتون آسون میشه. در حد واجب فعلا به مستندات متپلات‌لیب سر بزنین و تلاش کنین که چندتا نمودار رسم کنین.یه نمودار برای اینکه گول بخورین و فکر کنین که توی کار هم از این خبراست.۲. کتابخانه‌ی Plotly. پلاتلی کتابخونه‌ایه که باهاش میتونین از شیر مرغ تا جون آدمی‌زاد رو رسم کنین. در شروع نیاز نیست که درگیرش بشین چون اسیرتون میکنه، ولی گوشه‌ی ذهنتون داشته باشین که با پلاتلی زندگی‌تون زیباتر میشه.برای هر دو کتابخونه‌ی بالا (و یا هر ابزار رسم دیگه‌ای) الان نیاز نیست که همه‌ی نمودارها رو بلد باشین رسم کنین. ولی سعی کنین چند وقت یکبار که حوصله‌اتون سر رفت به گالری‌هاشون سر بزنید و ببینید که چیکارا میشه باهاشون کرد. وقتی که نیاز باشه راه برگشت براتون بازه.پانداس!پانداس به شما کمک میکنه تا داده‌هاتون رو فرآوری کنین و اونها رو به شکلی در بیارین که بتونین کارهای زیادی باهاش انجام بدین. چیزی که من از پانداس بلد بودم همین بود :)).۱. لینک -&gt; این آموزش باز از Kaggleه.۲. لینک -&gt; داکیومنت خود سایت پانداسه ولی خیلی خوب و روشن گفته که ماجرا چیه. به اون اولش که گفته برا پروداکشن فلان توجه نکنین فعلا.سْکوئل یا همون SQL خودموناس‌کیوئل زبانیه که به شما کمک میکنه تا داده‌ها رو از مخازن مختلف واکشی کنین. مخزن میتونه MySQL باشه یا SQLServer و یا یک سرور ایمپالا. اینکه اینا چی هستن و میدونین یا نمیدونین مهم نیست. مهم اینه که شما یاد بگیرین چطور باید با پایگاه داده‌های مختلف حرف بزنین و چیزی که میخواین رو ازشون بگیرین. این بخش رو به دو دسته تقسیم می‌کنم که هر دو بخش با هم اشتراک دارن، اما برای شروع به نظرم بهتره که اینطور اونا رو یاد بگیرین.عکس یه آموزش تو یوتیوب بود، قشنگ بود دزدیدمش.۱. مفاهیم پراستفاده‌ی مشترک. بعضی دستورات SQL هستن که وقتی شما میگین SQL احتمالا اشاره به اونا داره. چیزهایی مثل انتخاب جدول یا فیلتر کردن داده‌ها. بهتره که اول اونا رو یاد بگیرین و تلاش هم نکنین که خیلی عمیق شین، چون تو مرحله‌ی بعد این اتفاق میفته. فعلا تلاش کنین ببینین چیا هست و چطور باید داده‌ها رو با حالات مختلف واکشی کرد و فیلتر کرد. برای این حرفا منابع زیر به نظرم خوبن:۱. لینک -&gt; این لینک از سایت Kaggleه. تو این آموزش از بیگ‌کوئری گوگل استفاده شده ولی شما می‌تونین بهش توجه نکنین و فعلا دقت کنید که از چه دستوراتی داره برای واکشی اطلاعات استفاده می‌کنه.۲. لینک -&gt; این لینک قسمت دوم آموزش قبلیه.۳. لینک -&gt; شما بعدا باید خودتون بتونین از هر سورسی اطلاعات رو با پایتون واکشی کنید. برای این کار خیلی وقتا از کتابخانه‌ی SQLAlchemy استفاده میشه. فعلا می‌تونین بهش فکر نکنین ولی یادتون باشه که حداقل کانکشن ساختن باهاش رو یاد بگیرین :)).۲. اس‌کیوئل استاندارد. نسخه‌های مختلفی از اسکیوئل پیاده‌سازی شده. شما ممکنه با پایگاه داده‌ی NoSQLی در ارتباط باشید که زبانش رو SQL انتخاب کرده باشه، اما این دسته منظورِ این بخش نیستن. تو این بخش شما یاد خواهید گرفت که ANSI SQL چیه و چرا؟ و خوبیش هم اینه که با فهمیدنش دیگه خیلی پایگاه داده‌ای که دارین استفاده می‌کنین اهمیتی نداره و صرفا مهمه که ANSI هست یا نیست. البته یه خوبی دیگه‌اش هم اینه که می‌تونین برای این بخش یه برنامه‌ریزی خیلی بلندمدت کنین چون تنها سورسی که تو ذهنم هست کتاب SQL For Smartiesعه (این کتاب رو مجید عظیمی بهم معرفی کرد که مجید جان از همین جا روی ماه و کله‌ی درخشانت رو می‌بوسم).پای‌اسپارکدر نهایت نوبت داده‌های حجیم میشه! داستان داده‌های حجیم از جایی شروع میشه که حجم داده‌های شما زیاد میشه و دیگه توی رم جا نمیشن همه‌ی داده‌ها. شما باید از ابزارهایی استفاده کنین که بتونن محاسبات رو جوری انجام بدن که رم معقولی بخوان و یا روی یک شبکه از کامپیوترها اونا رو توزیع کنن و در نهایت جواب نهایی رو به شما برگردونن. برای این بخش من اسپارک رو پیشنهاد میدم و چون الان دیگه پایتون رو بلدیم، می‌تونیم از ماژول SQL اسپارک و رابط پایتونش استفاده کنیم. این لینکا برای این مرحله میتونن مفید باشن.۱. لینک -&gt; از این لینک اسپارک آموزش نصب اسپارک رو ببینین.۲. لینک -&gt; از این لینک ببینین که چطور باید از SparkSQL استفاده کرد.۳. لینک -&gt; در نهایت مثل همون کاری که برای ساختمان‌های داده کردیم، سعی کنین از لینک استفاده کنین و یدور بچرخین ببینین چیا داره اسپارک اسکیوئل و چه کارایی میشه باهاشون کرد (میدونم زیاده ولی خودم شاهد بودم که صولت این کارو کرد :)) ).آمارآمار چیزیه که احتمالش هست از سال ۲۰۲۱ در اتحادیه‌ی اروپا موقع امتحان راهنمایی و رانندگی ازش سوال بیاد. برای آمار من درسی که بوسیله‌ی دکتر شهبازی شناختم رو خیلی دوست دارم. «آمار و کاربردهای آن» که دکتر علیشاهی در دانشگاه شریف در بهار ۸۷ ارائه داده و الان که این متن رو می‌نویسم از این لینک در دسترسه. یادتون باشه اگه خواستین منبع دیگه‌ای پیدا کنین، آمار رو با احتمال اشتباه نگیرین. چیزی که شما نیاز دارین آماره و نه احتمال.شبیه صالح نیست دکتر علیشاهی؟پایاناین نظر شخصی منه که هفتصد و یازده نفر ممکنه باهاش مخالف باشن :)) ولی اگه از من می‌شنوین تلاش نکنین تا با منطق «تا کامل مسلط نشدم نمیرم سراغ بعدی» پیش برید. از هر بخش سعی کنین اونایی که واجبه رو خوب یاد بگیرین و یه ناخونک به بخش بعدی بزنین. تلاش کنین تا در هر مرحله‌ی ثمره‌ی کاری که می‌کنین رو ببینین و برای این کار برا خودتون مثال‌های واقعی بزنین و تلاش کنین با چیزهایی که یاد گرفتین به جواب برسین. مثال‌های واقعی یعنی مثال‌هایی که احتمالا توی زندگی و کار می‌بینین. برای داشتن این مثال‌ها کافیه یک) شروع به خیال‌پردازی کنین و خیال‌هاتون رو روی یه کاغذ بنویسین:اگر حقوقم ایکس تومن باشه و هر ماه ده درصدش رو پس‌انداز کنم، آخر سال چقدر پول دارم؟با فرض شرایط قبل، اگه تورم اونقدر باشه چقدر طول می‌کشه تا یه PS5 بخرم؟با توجه به نرخ رشد فلان بیماری در کشور، آیا رابطه‌ای وجود داره بین استان‌های کشور و دماشون و نرخ درگیری با بیماری؟با توجه به کتاب‌هایی که تا حالا خوندم، کدوم کتاب میتونه مورد علاقه‌ی من باشه؟بیشترین پولی که من خرج کردم متعلق به چه دسته‌ای بوده؟ میانگین کدوم دسته‌های بیشتر بوده؟ دسته‌ای هست که بتونم توش صرفه‌جویی کنم؟با توجه به ایمیل‌هایی که میاد برام، ایمیل‌هام بیشتر در چه دسته‌ای هستن؟بیشترین کلمات کلیدی توییتر من چی بوده؟و دو) تلاش کنین تا بین چیزهایی که یاد گرفتین و سوال‌ها رابطه برقرار کنین. ببینین چطور میشه از چیزهایی که بلدین به جواب این سوالات رسید. در شروع ممکنه خیلی راحت نباشه این کار که میشه تو گوگل جستجو کرد و فهمید (و نه دید) که بقیه چطور به جواب‌های مشابه رسیدن و یا از یکی که میدونین بلده بپرسین «من فلان و فو و بار رو بلدم، با اینا چطور میتونم اینطور مسئله‌ای رو حل کنم؟».پس از پایاننترسین! راه که بیفتیم، ترسمون میریزه.</description>
                <category>میثم پورگنجی</category>
                <author>میثم پورگنجی</author>
                <pubDate>Mon, 30 Mar 2020 04:54:25 +0430</pubDate>
            </item>
                    <item>
                <title>کوله‌پشتی ۹۹</title>
                <link>https://virgool.io/@meysampg/%DA%A9%D9%88%D9%84%D9%87%D9%BE%D8%B4%D8%AA%DB%8C-%DB%B9%DB%B9-mdyksvs4plb9</link>
                <description> کوله‌پشتی ۹۸۱. فرض کنید کوله‌پشتی دارید که قرار است در آن  تجربیاتی را از سال ۹۸ بگذارید و با خود به سال ۹۹ ببرید. تجربیات مثبتی  که همراه داشتن آنها به شما کمک می‌کند نسبت به سال قبل فردی توانمندتر  بشوید. در کوله‌ی خود چه تجربیاتی را قرار می‌دهید؟حرف زدن. همیشه برای من حرف زدن کم و بیش به معنی صحبت کردن و شنیدن و استنتاج منطقی بود. امسال با کمک مهدی (سلطان تمام تراپیست‌های عالم، ستون، منشور بین‌العالمی تراپی اصن) یاد گرفتم که این سیستم یه بخش دیگه داره و اونم احساس کردنه و احساس کردن با استنتاج کردن فرق داره کاملا :)). این دست‌آورد حاصل چالش‌ها و به گاج رفتن‌هایی بود که پارسال پشت سر گذاشتم و نمیدونم چطور سالم در اومدم و در نهایت مهدی آچارکشی کرد و فهمیدم این تیکه خراب بوده.۲. برای حرکت در مسیر زندگی باید سبک و چابک  بود. چه مواردی را از کوله‌ی خود خارج می‌کنید که در سال ۹۸ باقی بماند و  شما سبک‌تر حرکت کنید؟ چیزهایی که از کوله‌ خارج می‌کنید مثلا می‌تواند تجربیات ناخوشایند یا ناراحتی‌ها باشد.شک. در فلسفه‌خوانی شک همیشه یک ابزار کارگشا و قوی برای من بوده. از ده سال تا پیش من تا حالا اندیشه‌های چهار فیلسوف رو درک کردم و شک ابزاری بوده که بهم نشون داده اون چیزی که میخوام هنوز این نیست. خب این خوب بوده اما مشکل جایی شروع شد که شک وارد زندگی روزمره‌ی من هم شد. در زندگی روزمره شک سمه و این رو این چند وقت که دارم تلاش میکنم اون رو کنار بذارم داره خودش رو نشون میده. یک ابزار قوی برای مقابله با شک، انجام دادنه. درخت تصمیم تا یه سطح معقوله ساختنش تو ذهن و وقتی فکر کردی یه تصمیم درسته، پس فقط انجامش بده.۳. فرض کنید در پایان سال ۹۹ بیشتر آن فردی شده‌اید که شبیه خود ایده‌آل شما است. در این صورت چه ویژگی‌ها و رفتارهایی  باید در شما تقویت شود؟ چه چیزهایی را در کوله‌ی خود می‌گذارید که کمک  می‌کند این ویژگی‌ها در شما تقویت شود؟سلامتی. سلامتی اون چیزیه که دلم میخواد امسال بیشتر بهش توجه کنم. میدونی؟ ما آدمایی که به سی سال می‌رسیم :)) کم‌کم متوجه میشم که نفسمون به یه *ـوز بنده :)). دوست دارم امسال ورزش کردن رو شروع کنم و بعضی موارد که به علت اینکه خانواده ممکنه بخونه و از ارث محرومم کنه ولی مشخصا اگه تا اینجا اومدین می‌تونین تصور کنین چیاست رو کمتر و یا صفر کنم.پ.ن: من امروز با کولدپلی آشنا شدم :))). حاجی خیلی خوبه لعنتی. من این آهنگ Yellowی لعنتی اونجایی که غین غین غین میکنه رو خیلی دوست دارم. قشنگ داره روانم رو جلا میده :)).</description>
                <category>میثم پورگنجی</category>
                <author>میثم پورگنجی</author>
                <pubDate>Thu, 19 Mar 2020 00:43:08 +0330</pubDate>
            </item>
                    <item>
                <title>عالم بی‌خبری</title>
                <link>https://virgool.io/@meysampg/%D8%B9%D8%A7%D9%84%D9%85-%D8%A8%DB%8C%D8%AE%D8%A8%D8%B1%DB%8C-rf3uy9dozhch</link>
                <description>عکس از http://shiler.blogfa.com/post/11محمد عزیز،با سلام و عرض دلتنگی،تا امروز دو سال و هفت روز است که به عنوان معلم به این روستا آمده‌ام و در این روزها همه چیز مثل هر روز بوده است. امروز اما از سر اتفاقی که افتاد، خواستم تا این نامه را به تو بنویسم تا هم تجدید دوستی‌ای کرده باشم و هم اندکی از بار دل را بر زمین گذارم. امروز عصر وقتی برای ادای فاتحه و یادی از رفتگان به قبرستان ده رفته بودم، متوجه صدایی در گوشه‌ای از آن شدم. به سمت آن حرکت کردم و با رسیدن به آنجا متوجه شدم که دهیار و حاج‌شیخ (روحانی ده) و کَلرضا (پیرمردی که نفوذ بالایی در روستا دارد) در حال بحث و جدل با کارگری که در آنجا مشغول به کندن قبری بوده، هستند. بعد از احوال‌پرسی ماجرا را جویا شدم. گویا باجی مُرده است و کارگر در حال کندن قبر او بوده است و در این حین چند بیل خاک را در باغچه‌ای که دهیاری با کمک حاج‌شیخ و پول کلرضا در قبرستان ایجاد کرده‌اند، ریخته است. این ده هنوز بهداری و مدرسه‌ی درست و درمانی ندارد، اما تو نمی‌دانی که چقدر در حال رسیدن به قبرستان‌شان هستند. انگار قرار است جشنی برپا شود و محل گردهمایی را قبرستان گذاشته‌اند که اینگونه به آباد کردنش پرداخته‌اند. سرت را به درد نیاورم، کارگر با کلی معذرت‌خواهی و عجله باغچه را تمیز کرد و با وساطت من ماجرا فیصله پیدا کرد. چند دقیقه نگذشته بود که دو کارگر دیگر تابوتی را آوردند و باجی را به خاک سپردند. خاک‌سپاری تمام شد و تو گویی صحرای محشر، هر دسته به سمتی گریزان شد. من ماندم و آن کارگر و باجی و خاک‌های رویش.باجی پیرمردی در حدود ۸۰ ساله بود. قدی خمیده داشت و از دار دنیا هیچ کس را نداشت. مرحوم نه در زندگی‌اش خبری بود و نه وقتی که مُرد خبری شد. در کل به نظر نمی‌رسد هیچ کس از او خاطره‌ی خاصی به یاد داشته باشد، مگر آنکه باجی برای کارگری به خدمتش در آمده باشد که همین جمله تنها خاطره‌ی آنها خواهد بود. بالطبع برای اهالی وقتی اینچنین است، برای من هم چنین است. اما امروز وقتی همه به یکباره و با آن عجله از سر خاک باجی متفرق شدند، شرایط به شکلی پیش رفت که یاد خاطره‌ای افتادم. هر چند از این خاطره چندان نگذشته است اما آنقدر بی‌اهمیت بود که تقریبا همان زمان که اتفاق افتاد هم برایم اهمیتی نداشت.دو هفته پیش بود که عصبانی از همه چیز خواستم مدرسه را کمی سر و سامان دهم. از مدرسه که می‌گویم همین یک اتاق کاه‌گلی‌ای است که از کلاس اول تا پنجم همه در آن بر روی زمین می‌نشینند و به آنها درس می‌دهم. با دهیار و کلرضا صحبت کرده بودم که بیایند مدرسه را رنگ کنیم و یک زمین بازی برای بچه‌ها بسازیم. صدالبته که می‌توانی جواب آنها را حدس بزنی: بچه‌ها قرار است برای یاد گرفتن خواندن و نوشتن به مدرسه بیایند و چه کاری است حرام کردن پول برای رنگ کردن و زمین بازی. از سر پیشنهاد من، چنان خشم در چشمانشان دویده بود که انگار برای گرفتن انتقام زندگی‌ای که نکرده‌اند، کودکی بچه‌هایشان را می‌کشند. خلاصه پس از کلی بحث و دلیل آوردن و بلند و آرام صحبت کردن، حاصل تمام تلاشم این شد تا کارگری بیاید و علف‌های باغچه‌ی مدرسه را تمیز کند و آن کارگر باجی بود.صبح جمعه بود که آفتاب زده یا نزده صدای بیل زدنی را شنیدم. از اتاق بیرون آمدم و متوجه حضور باجی شدم که کار خود را شروع کرده بود. سلامی کردم و با تکان دادن سر و کلامی که بفهمی نفهمی بود و نبودش یکی بود، جواب سلام را داد و بی آنکه توجه بیشتری به من کند مشغول کار شد. باغچه آنچنان بزرگ نبود، اما باجی نیز با آن سن و سالش آنقدر فرز و زرنگ نبود که کار را سریع به پایان برساند. به اتاق برگشتم و کتری را روی چراغ گردسوز گذاشتم تا جوش بیاید و اول صبحی خودم و آن پیرمرد بی‌نوا را به یک چایی دعوت کنم. دردسرت ندهم. چایی جوش آمد و دو لیوان چایی ریختم و باجی را صدا زدم تا برای چایی بیاید. نگاهی به سمت من کرد و به نشانه‌ی تشکر سری تکان داد و به ادامه‌ی کارش مشغول شد. به ناچار لیوان‌ها را برداشتم و به سمت او رفتم. تعارفی زدم، نگاهم کرد و بعد از تاخیری کوتاه لیوان را گرفت. همان جا نشستم. باجی نگاهی با شرم به من انداخت و او هم نشست.سخت‌ترین کار، حرف زدنی است که ندانی طرفت به تو گوش می‌دهد یا نه و محمد، تو نمی‌دانی چقدر گشتم تا چیزی پیدا کنم تا با آن پیرمرد حرف بزنم. آنقدر تلخ بود که با هزار من عسل هم نمیشد حرف مشترکی با او پیدا کنم. از ناچاری گفتم: اینها نمی‌خواهند مدرسه آباد شود. انگار که گوش نمی‌داد و به زمین از داخل لیوان نگاه می‌کرد. نگاهش به زمین ادامه داشت. با صدایی آرام گفت: دارند قبرستان را آباد می‌کنند. لحنش آنقدر سرد بود که عطای حرف زدن با او را به لقایش بخشیدم. توی ذوقم خورده بود و من هم شروع به نگاه کردن روی زمین کردم. چایی هر دوی ما تمام شده بود اما همچنان خیره به زمین نشسته بودیم. نگاهی به باجی انداختم. دستش را نیمه‌باز گره کرده بود و جلوی دهانش گرفته بود و همچنان به زمین خیره بود. حوصله‌ام سر رفته بود و خواستم که بلند شوم و بروم داخل اتاق دراز بکشم. آمدم نفسی بلند کنم و دست به زمین بگذرام تا بلند شوم که باجی گفت: یکبار که به آدم دست بدهد، دست آدم تا آخر بو می‌دهد. نفهمیدم از چه حرف می‌زند و از طرفی اخلاقش هم آنقدر تلخ بود که نمی‌خواستم هم که بفهمم. چند دقیقه باز به سکوت گذشت و لیوان‌ها را برداشتم و هر دو پاشدیم. او مشغول شد و من به اتاق آمدم و رادیو را روشن کردم و دراز کشیدم.محمد جان، تمام خاطره همین بود. ماجرا اما آنجا برای من شروع شد که بعد از رفتن جماعت از سر قبر، کارگر که گوش مرا مفت گیر آورده بود و از ماحصل تلاش برای آبادی قبرستان انصافا فن روضه‌خوانی را نیز به خوبی یاد گرفته بود، در مورد باجی شروع به حرف زدن و گفتن خصائصی کرد که مرحوم در زنده بودنش هم معنی هیچ کدام از آنها را نمی‌دانست. و محمد، دروغ چرا، من هنوز همانم که دیده‌ای. وقتی می‌شود به یکی پر و بال داد و بال زدنش را دید، کوتاه نمی‌آیم. گفت و گفت و گفت تا آنجا که اسم سجایای نیکی که بلد بود، تمام شد. لاجرم از آنجا که پامنبری‌ای چون من گیر آورده بود و حیف بود مرا ساده از دست بدهد، شروع به گفتن از زندگی خصوصی او کرد. سال‌ها قبل باجی به عنوان معلم به این روستا می‌آید. روزی عاشق دختر کدخدا می‌شود و تمام تلاش‌اش برای رسیدن به او، گرفتن دستش برای عبور از روی سنگ‌چین رود بوده است. آن دختر این عشق را می‌فهمد یا نه، چند وقت بعد به شهر می‌رود و باجی دیگر با کسی حرف نمی‌زند. باجی در بی‌خبری مُرد و مُردنش برای کسی اهمیتی نداشت. اما از آن خاطره و این داستان، غمگینم. از عصر در سرم این شعر را که اولین بار از تو شنیدم در سرم می‌چرخد:عالم بی‌خبری طرفه نگاری بوده استحیف و صد حیف که ما دیر خبردار شدیماکنون که باجی مرده است، به هیاهوی سکوتش غبطه می‌خورم.به امید بهار و بازدیدن تو،م.</description>
                <category>میثم پورگنجی</category>
                <author>میثم پورگنجی</author>
                <pubDate>Thu, 09 Jan 2020 22:47:58 +0330</pubDate>
            </item>
                    <item>
                <title>دیدار با دختر دلخواه در ساعت ۱۰:۱۰</title>
                <link>https://virgool.io/@meysampg/%D8%AF%DB%8C%D8%AF%D8%A7%D8%B1-%D8%A8%D8%A7-%D8%AF%D8%AE%D8%AA%D8%B1-%D8%AF%D9%84%D8%AE%D9%88%D8%A7%D9%87-%D8%AF%D8%B1-%D8%B3%D8%A7%D8%B9%D8%AA-%DB%B1%DB%B0%DB%B1%DB%B0-tbt0hczxalap</link>
                <description>تا قبل از اینکه در اینجا بستری شوم، مثل هر پسر دیگری که در سن رشد است، به دنبال دختری بودم که با او وارد رابطه شوم. این وسط یک فرق کوچک وجود داشت که کمی مسئله را سخت می‌کرد. من سی ساله بودم و انتظار می‌رود که یک مرد سی ساله دیگر یک پسر بچه نباشد. خیلی مسخره است ولی چاره‌ای نیست. آدم‌ها بعضی وقت‌ها دوست دارند هر کس مثل خودشان نیست را بستری کنند. نه که قصد آزاری داشته باشند، بلکه فکر می‌کنند وقتی برای جوابی هیچ سوالی وجود ندارد، لابد آن جواب هم دم دست نباشد بهتر است. دکترم می‌گفت ذهنم در اثر اضطراب سختی فلج شده است، اما من می‌دانستم که این سکوتِ یک آرامش است. به هر حال اما حرف دکتر بروی بیشتری داشت و من هم چه می‌خواستم و چه نمی‌خواستم باید آنرا می‌پذیرفتم. خیلی مسخره‌ است ولی چاره‌ای نیست.خیلی مسخره است. دقیق‌تر بخواهم بگویم من خیلی مسخره‌ام. جدی می‌گویم. آخر آدم در سن سی سالگی چرا باید دنبال دختری باشد که با او وارد رابطه شود؟ به هر طریق چاره‌ای نیست، آدم نمی‌تواند دنبال دختری نباشد که با او وارد رابطه شود و من هم مثل باقی آدم‌ها از این قاعده مستثنی نبودم. با این وصف زندگی هر روزم در یک تکرار ثابت مانده بود: هر روز صبح ساعت ۸:۳۰ از خواب بیدار می‌شدم. سیگاری روشن می‌کردم و به این فکر می‌کردم که اعداد دلخواهم چه هستند. آخر غریبه که نیستید، هر چیزی را می‌توان با عدد بیان کرد. و شوخی هم که بر نمی‌دارد، زندگی است و حساب و کتاب آن باید روشن باشد. حواست نباشد می‌بینی حاصل یک تفریقت چنان زیاد شده است که یک روز می‌گویند مُرد و تو بدهکار مانده‌ای. آدم همیشه باید حواسش به عددها باشد، جدی می‌گویم. سرتان را درد نیاورم، تا حساب و کتاب عددها تمام می‌شد سیگار و دوش من نیز تمام شده بود. موهایم را سشوار می‌کشیدم و لباس می‌پوشیدم و از خانه بیرون می‌آمدم. در خانه را که قفل می‌کردم سیگاری روشن می‌کردم و تا ایستگاه تاکسی آنرا کش می‌دادم و در بین راه به این فکر می‌کردم که آیا حساب و کتابم از عددها درست بوده است یا نه. شوخی که نیست، بحث یک عمر زندگی است و نمی‌توان عددها را سرسری گرفت. تا به خودت بیایی می‌بینی حاصل یک تفریقت چنان زیاد شده است که یک روز می‌گویند مُرد و تو بدهکار مانده‌ای.تا برسم به ایستگاه تاکسی ساعت ۹:۱۵ دقیقه بود. اگر کمی قبل‌تر می‌رسیدم کمی با بند کفشم ور می‌رفتم تا ۹:۱۵ شود. آدم باید در زندگی جدی باشد و به عددها توجه کند. این جدیدترها می‌گویند OCD اما من می‌گویم داشتن حساب و کتاب عددها. حساب و کتاب عددها به تو نشان می‌دهد که با خودت چند چندی. سوار تاکسی می‌شدم و منتظر می‌ماندم که پر شود و یا اگر من آنی بودم که تاکسی را پر می‌کند، منتظر می‌ماندم که راننده رضایت دهد و از خیر بحث با دوستانش برای تحلیل مسائل خرد و کلان جهان بگذرد. نه اینکه بخواهم تحلیل راننده‌های تاکسی را مسخره کنم، اما واقعا مسخره است وقتی کسی در تحلیل‌هایش عددی ارائه نمی‌دهد. شوخی که نیست، حساب و کتاب عددها به تو نشان می‌دهد که با خودت چند چندی و آدمی که معلوم نباشد با خودش چند چند است، چطور می‌تواند ربطش را با مسائل خرد و کلان جهان پیدا کند؟ بای نحو راننده حرکت می‌کرد و من تا رسیدن به مقصد تعداد ترمزهای راننده را می‌شمردم. اگر تعداد ترمزهایش از حدی بیشتر می‌شد به نظرم او راننده‌ی بی‌تجربه‌ای می‌آمد. آدم وقتی تجربه داشته باشد می‌فهمد که خیلی جاها نباید گاز بدهد، چون بعدا مجبور است ترمز کند.نمی‌خواهم روده‌درازی کنم، جدی می‌گویم. آدم وقتی روده‌درازی می‌کند، بقیه دل و روده‌شان به هم می‌پیچد. آدم‌ها هم آدمند دیگر، حدی دارند. چون مشخصا همیشه طول روده‌ها باید یک عدد ثابت بماند و درازی روده‌ی یک آدم نتیجه می‌دهد که روده‌ی دیگری جمع شده است. اما شما به هر حال باید از من بپذیرید که توضیحات ناکافی می‌تواند موجب گمراهی شما از اصل مطلب شود و من چاره‌ای ندارم که به اندازه‌ی کافی توضیح دهم. آخر می‌دانید؟ اگر همیشه توضیح کافی‌ای برای هر چیزی وجود داشته باشد شاید آن وقت دیگر زندگی کردن لطفی نداشت باشد. زندگی به همین توضیح دادن‌هایش بعضی وقت‌ها جالب می‌شود. اصلا آدم‌ها به توضیح دادن است که دوست دارند آدم دیگری را ببینند. آدم‌ها هم آدمند دیگر، حدی دارند. نمی‌توانند که همیشه توضیح ندهند.خلاصه ساعت ۱۰:۰۵ دقیقه‌ی صبح من به میدان شهر می‌رسیدم. البته همیشه آن وقت نمی‌رسیدم، بعضی وقت‌ها زودتر می‌رسیدم. آدم که همیشه نمی‌تواند از بقیه‌ی آدم‌ها انتظار داشته باشد به میل او رفتار کنند. گاهی راننده زودتر می‌رسید و این موجب می‌شد که من زودتر از ساعت ۱۰:۰۵ دقیقه به میدان شهر برسم. آنجا چون شلوغ بود همیشه این امکان برایم به وجود نمی‌آمد که خم شوم و با بند کفشم ور بروم. این می‌شد که می‌رفتم و از راننده‌ی ماشین‌هایی که خالی بود می‌پرسیدم چقدر دیگر حرکت می‌کنند. خوبی این ماجرا این بود که چون من به ترتیب آنها را انتخاب می‌کردم، عموما آنها در نوبت بعدشان یادشان نمی‌آمد که من همیشه این سوال را می‌پرسم و هیچ وقت هم سوار نشده‌ام. البته بعضی‌ها یادشان می‌ماند و جواب نمی‌دادند. هر چند این رفتارشان خارج از ادب بود اما چه می‌توانستم انجام دهم؟ آدم که همیشه نمی‌تواند از بقیه‌ی آدم‌ها انتظار داشته باشد به میل او رفتار کنند. خلاصه جانم برایتان بگوید که ساعت ۱۰:۰۵ دقیقه از میدان شهر به سمت شرکت راه می‌افتادم. پیاده راه درازی بود، اما در پیاده‌رو همیشه می‌توانستم دخترهای خوشگلی را ببینم و اصلا بعید نبود که یکی از همین‌ها جزوه‌اش در هوا پخش شود و یا با سر بیفتد داخل جوب و بعد از کمک به او با او آشنا شوم و وارد رابطه شوم.در شرکت از سر نظم و وجدان کاری، تا عصر مثل خر کار می‌کردم و مثل سگ کار را ول نمی‌کردم. نه که بخواهم از خودم تعریف کرده باشم و یا خدای‌ناکرده به حیوانات توهینی کرده باشم، نه! ماجرا این است که آدم بعضی وقت‌ها دوست دارد حسش را به تمثیل بیان کند تا برای دیگری روشن‌تر شود. این روال تا عصر طی می‌شد، هر چند هر از گاهی از سر رفتاری انسان‌دوستانه، آدم چایی می‌خورد و یا لیوان چایی‌اش را می‌شویَد. به راستی که آدم بعضی وقت‌ها آنچنان از زندگی دور می‌افتد که همین انسان‌دوستی‌هاست که او را چون برگی رقصان از سوی درخت، روان به سوی بوسیدن آب جوی می‌کند. خلاصه در کار اگر می‌خواستم نمونه‌ای برای خودم بیاورم، حتی در مثل هم نمونه‌ای بهتر برای خودم نمی‌یافتم. نه که بخواهم خودم را بترسانم یا برای بقیه درس عبرت شوم بلکه ماجرا این است که آدم بعضی وقت‌ها دوست دارد حسش را به تمثیل بیان کند تا برای دیگری روشن‌تر شود.بعد از کار تاکسی می‌گرفتم و مستقیم به خانه می‌رفتم. یک چایی می‌گذاشتم و حساب و کتاب می‌کردم که عددهایی که آن روز حساب و کتاب کرده بودم درست بوده‌اند یا نه. نه از باب تعریف اما هر روز عددهایم با روز قبل می‌خواند. بعضی وقت‌ها حتی اگر چیزی کم باشد باز آنقدر زیاد است که حساب و کتابت بخواند. یعنی آنقدر این اعداد ثابت بودند که تکرار مکررشان آنها را عادت داده بود که هر روز من را ببینند. هر چند من خیلی وقت برای آنها صرف نمی‌کردم اما همین زمان کم هم برای اعداد آنقدر بود بتواند لذت زندگی کردن را به آنها بچشاند. راستش را بخواهم بگویم من خیال می‌کنم عددها نیز هر روز حساب می‌کردند که مبادا چیزی کم بیاید. بعضی وقت‌ها حتی اگر چیزی کم باشد باز آنقدر زیاد است که حساب و کتابت بخواند.بعد از حساب و لیوان چایی که سرد شده بود را در ظرف‌شور می‌ریختم و ساعت ۹:۵۵ دقیقه‌ی شب می‌رفتم که بخوابم. در رختخواب به سقف خیره می‌ماندم و ۱ ساعت و ۲۵ دقیقه به آنچه فردا پیش خواهد آمد فکر می‌کردم. آدم همیشه باید به فردایش فکر کند، حتی وقتی قرار نیست اتفاقی تازه در انتظارش باشد. اینطور همیشه خیالم مطمئن بود که در صورت بروز مشکلی می‌توانم حساب درستی را به خودم پس بدهم. آدم همیشه باید بتواند به خودش حساب پس بدهد. جدی می‌گویم. نه که بخواهم نصیحت کنم، اما آدم‌هایی که نمی‌توانند به خودشان حساب پس بدهند، لابد یک جای کارشان می‌لنگد. آدمی که یک جای کارش بلنگد لابد مشکلی دارد و آدمی که مشکلی دارد نمی‌تواند مطمئن باشد و آدمی که مطمئن نباشد نمی‌تواند برای خودش آینده‌ای متصور باشد. آدم همیشه باید به فردایش فکر کند، حتی وقتی قرار نیست اتفاقی تازه در انتظارش باشد.همه چیز روی حساب و کتاب در حال پیش رفتن بود تا اینکه یک صبح اتفاقی افتاد. ساعت ۹:۱۵ دقیقه تاکسی به سمت میدان شهر به راه افتاد. همه چی خوب پیش رفت به جز اینکه تاکسی در نزدیکی‌های مقصد خراب شد. شاید چیزهای خوب بی‌دلیل باشند، اما همیشه دلیلی برای یک چیز بد وجود دارد و چه دلیلی برای اعصاب و روان من بدتر از اینکه من تا پیاده به میدان شهر برسم، ساعت ۱۰:۰۷ دقیقه بود. آنقدر به تندی گام برداشته بودم که بند کفشم باز شده بود، اما امکان این نبود که خم شوم و بند کفشم را ببندم. جدی می‌گویم، وقتی آنقدر دیر کرده بودم چه دلیلی وجود داشت که من به بند کفشم فکر کنم؟ نبستن بند کفش همانا و رفتنش به زیر پایم و افتادن خودم و کیفم به داخل جوب همان. شاید چیزهای خوب بی‌دلیل باشند، اما همیشه دلیلی برای یک چیز بد وجود دارد.یادم نمی‌آید چند ثانیه در جوب افتاده بودم، اما همین که سعی کردم خودم را جمع و جور کنم، دستی کیفم را برداشت و برای کمک دستش را به سمتم دراز کرد. در حال بلند شدن بودم که دیدم ساعت شهر از کار افتاده است، ۱۰:۱۰. نتوانستم نگاهم را از چشمان قهوه‌ای دختری که دستم را گرفته بود بردارم. نمی‌دانم چقدر گذشت اما خیال می‌کنم یک خواب بود. آرزو می‌کردم ای کاش هیچ وقت بیدار نشده بودم. دختر لبخندی به من زد. احساس جنگ‌جویی را داشتم که بی‌سلاح است، هیچ عددی در ذهنم نبود. هر چه تلاش کردم چیزی بگویم، جز سکوت در ذهنم چیزی نبود. خیلی مسخره است، ولی چاره‌ای نیست. وقتی چیزی برای گفتن نداری، نمی‌توانی چیزی بگویی، حتی اگر احساس کنی باید چیزی بگویی تا به خودت بیایی می‌بینی حاصل یک تفریقت چنان زیاد شده است که یک روز می‌گویند مُرد و تو بدهکار مانده‌ای و هیچ نگفته‌ای. درست همان زمانی که فکر می‌کنی حساب و کتاب عددها به تو نشان می‌دهد که با خودت چند چندی، می‌فهمی که آدم‌ها هم آدمند دیگر، حدی دارند، همیشه قرار نیست با حساب و کتاب زندگی را پیش ببرند و این را چطور می‌توان به آدم‌ها حالی کرد؟ آدم که همیشه نمی‌تواند از بقیه‌ی آدم‌ها انتظار داشته باشد به میل او رفتار کنند. حالا هزارتا خدا و پیغمبر و خدم و حشم هم بیایند و از حساب و کتاب بگویند، آدم بعضی وقت‌ها دوست دارد که بزند زیر میز و اصلا شعر بگوید. ماجرا این است که آدم بعضی وقت‌ها دوست دارد حسش را به تمثیل بیان کند تا برای دیگری روشن‌تر شود، مخصوصا وقتی یک چیز هر چقدر هم کم آنقدر روشن است که دیگر توان بیانش را نیز نداری. بعضی وقت‌ها حتی اگر چیزی کم باشد باز آنقدر زیاد است که حساب و کتابت بخواند حتی اگر تمام حساب و کتابت را هم به هم ریخته باشد. نمی‌دانم این فکرها چقدر طول کشید، اما صدایی را شنیدم که گفت مواظب خودتون باشین و رفت. از آن روز دیگر من به سر کار نرفتم و همیشه به این فکر کردم که آیا فردا اگر باز به جوب بیفتم او را می‌بینم؟ آدم همیشه باید به فردایش فکر کند، حتی وقتی قرار نیست اتفاقی تازه در انتظارش باشد. از آن روز هر روز به جوب افتادم و این تنها جوابی بود که من برای چرایی زندگی‌ام داشتم. نمی‌دانم چرا، اما دیگر او را ندیدم. شاید چیزهای خوب بی‌دلیل باشند، اما همیشه دلیلی برای یک چیز بد وجود دارد.</description>
                <category>میثم پورگنجی</category>
                <author>میثم پورگنجی</author>
                <pubDate>Fri, 27 Dec 2019 02:29:47 +0330</pubDate>
            </item>
                    <item>
                <title>یگانه</title>
                <link>https://virgool.io/@meysampg/%DB%8C%DA%AF%D8%A7%D9%86%D9%87-ftdokoxmjaoj</link>
                <description>دیشب من مُردم. یا امروز صبح. یادم نیست. مثل هر روز صبح ساعت هفت و نیم آلارم گوشیم شروع به زنگ زدن کرد. من بیدار نشدم. چشمام رو باز کردم دیدم که بالای سر خودم نشستم. گوشیم در حال زنگ زدن بود و بخاری با شعله‌ی آرومی می‌سوخت. احساس کردم در حال خواب دیدن هستم و سعی کردم که بیدار شم، اما تلاش بی‌فایده بود. دور و بر خودم رو نگاه کردم، همه چی مثل همیشه بود.گوشیم در حال زنگ زدن بود و همچنان من هیچ تکونی نمی‌خوردم. ساعت هفت و نیم بود. انگار در یک توالی بی‌نهایت هر بار گوشیم در حال زنگ زدن بود. همه چی مثل ساعت هفت و نیم بود و من همچنان روی تخت دراز کشیده بودم. ترسیده بودم. انگار داخل یک حلقه گیر کردم. به هر چیزی که نگاه می‌کنم مثل همیشه‌ی ساعت هفت و نیمه. انگار همیشه ساعت هفت و نیمه. سعی کردم از بالای سر خودم بلند شم و ناگهان زمین کوچیک شد. مثل اسکرول کردن روی نقشه‌ی گوگل‌ارث.دهشتناک بود: هست. به هر طرف که نگاه می‌کردم تصویری تکرارشونده از زمین تا بی‌نهایت ادامه داشت. من در تاریکیِ بینِ زمین اسیر شده بودم؛ می‌ترسم و دوست دارم به بالای سرِ مرده‌ی خودم پناه ببرم، ساعت هفت و نیم. به سمتی نگاه کردم که انگار از اونجا اومده بودم و کمی تلاش کردم تا به اون سمت مایل شم. دنیا باز واقعی شد اما ترسناک‌تر از قبل. اینجا خونه‌ی من نیست، کوچه‌ایه که من در اون کودکیم رو سپری کردم.دارم کلافه میشم، چشمام رو بستم و دلم میخواد فرار کنم. صدای نفس نفس زدنی نزدیک میشه. به طرف صدا نگاه میندازم. پسر بچه‌ی هفت ساله‌ای که انگار داره از مدرسه میاد و تمام راه رو دویده. هفت سال و ۷ ماه و ۱۱ روز. بوی پوست پسته همه‌ی اطرافم رو گرفته. سوزِ سرمایِ عصرهایِ اولِ پاییز صورت پسرک رو کمی سرخ کرده، از دویدن خسته‌ام.پسرک به کنار در رسید، همونجایی که من وایسادم. کمی به زنگ در خونه خیره شدم، فکر کن که کللللیییی روزا بگذره و من بررررممم خلبان شم و برگردم خونههههه، میشم مثل همینی میشم که الان اینجا وایساده، صبر کن یه کراوات بزنم. پسرک بعد از چند ثانیه خیره شدن به چشمام لبخندی از سر شیطنت خیال‌پردازیش زد و در نیمه‌باز رو باز کرد و رفت داخل. چشمام رو بستم و به دیوار تکیه دادم. صدای نفس نفس زدنی نزدیک میشه. به طرف صدا نگاه میندازم. پسر بچه‌ی هفت ساله‌ای که انگار داره از مدرسه میاد و تمام راه رو دویده. از عصبانیت سرم رو به چپ تکون دادم و باز خودم رو بین یک هجمه‌ی تکرارِ زمین تا بی‌نهایت اسیر دیدم.راه فراری نیست. دلم برای احساس گرما، حتی سرما تنگ شده. برای گذر زمان. برای تموم شدن شارژ گوشیم. برای تموم شدن سیگارم. برای روشن کردن کامپیوترم. برای شروع یه کتاب جدید. دلم میخواد از این خواب بیدار شم و ساعت گوشیم رو خاموش کنم. فحش بدم و پاشم حوله‌ام رو بپوشم و سیگارم رو روشن کنم و برم دوش بگیرم. به هر طرف نگاه می‌کنم خطی از یه کره‌ی آبی رو می‌بینم که ادامه داره، تا بی‌نهایت و چقدر من از همه‌ی بی‌نهایت‌ها بیزارم. دلم می‌خواد با مشت بزنم به همه چی. ناخودآگاه خواستم دستم رو تکون بدم که احساس کردم باز روی زمینم.تهرا. ظاهرا بعد از فروپاشی اسم تهران هم عوض شده. این رو میشه از تابلوهایی که هر چند متر یکبار کاشته شده فهمید. هاها! حکومت بجای درخت انگار تبلت کاشته! هاها! بامزه! به مکالمه‌ی خودم نیشخند می‌زنم و دور و برم رو نگاه می‌کنم. انگار تهران یا به قول خودشون تهرا رو از اول ساختن. هیچ تمایلی به دیدن هیچی ندارم. چشمام رو می‌بندم و به صدای همهمه‌ی مردم گوش میدم. همهمه که نه، چی میگن؟ هر چی و برای فرار از بگومگوی خودم با خودم بر می‌گردم.باز خلاء. هیچ عذابی بالاتر از این نمی‌تونست باشه که نقصی وجود نداشته باشه و انگار کفاره‌ی همه‌ی خدانشناسی‌هام رو الان یکجا و برای همیشه با بودن داخل این گوی بی‌نهایت باید بدم. دلم می‌خواست می‌مُردم اما الان نسبت به مُردن در اینجا هیچ حسی ندارم. انگار تصور برگ سبز درخت، وسط کویر. غمگینم.غمگین شده بودم. هیچ راه فراری نبود. یا باید با سرگیجه‌ی دیدن نخ‌وار زمین کنار میومدم و یا شروع به چرخیدن می‌کردم، بین هر زمان تا هر زمان. هیچ حسی گندتر از حس رهایی نیست و بدتر از اون وقتیه که بدونی هیچ فراری از رهایی نداری. انگار سال‌ها بی‌تحرک و بدون خیره شدن به جایی نشسته بودم اما زمانی وجود نداشت که بگذره. حوصله‌م سر رفته بود، حسابی کلافه بودم. از لج خودم شروع به چرخیدن کردم و حجم همه‌جاکروی محاط برای من هم شروع به چرخیدن کرد. نمیدونم یک بار یا سال‌ها اما بدون اینکه بدونم چرا به یک نقطه خیره شده بودم. انگار این نقطه مبدأ همه چیز بود. انگار همه جا بود. بی‌اراده سعی کردم به سمت نقطه حرکت کنم که خودم رو روی زمین دیدم.شب بود، بارون بود، من بودم، سیگار بود، اون بود…شب بود، بارون بود، من بودم، سیگار بود، اون بود…شب بود، بارون بود، من بودم، سیگار بود، اون بود…شب بود، بارون بود، من بودم، سیگار بود، اون بود…شب بود، بارون بود، من بودم، سیگار بود، اون بود…شب بود، بارون بود، من بودم، سیگار بود، اون بود…شب بود، بارون بود، من بودم، سیگار بود، اون بود…شب بود، بارون بود، من بودم، سیگار بود، اون بود…شب بود، بارون بود، من بودم، سیگار بود، اون بود…بهشت اما تکرار بی‌نهایت صفرِ صفرِ صفره؛ بی‌زمان تا هر زمان.</description>
                <category>میثم پورگنجی</category>
                <author>میثم پورگنجی</author>
                <pubDate>Tue, 24 Dec 2019 06:10:18 +0330</pubDate>
            </item>
                    <item>
                <title>پروکسی پورت به پورت در Nginx</title>
                <link>https://virgool.io/@meysampg/%D9%BE%D8%B1%D9%88%DA%A9%D8%B3%DB%8C-%D9%BE%D9%88%D8%B1%D8%AA-%D8%A8%D9%87-%D9%BE%D9%88%D8%B1%D8%AA-%D8%AF%D8%B1-nginx-noqel8w02nh0</link>
                <description>آخر هنر من در طراحی پوستر!بعضی وقتا به چیزی مثل تصویر بالا نیازه. یعنی وقتی آدرس اول داخل مرورگر وارد شد، اون آدرس بر اساس عدد قسمت اول به پورتی در لوکال پروکسی شه. من این کارو با کانفیگ زیر انجام دادم:server {        listen 80;        listen [::]:80;        server_name ~^(?&lt;port&gt;.+)\.my\.domain\.ir$;        error_log /var/log/nginx/sd_error;        access_log /var/log/nginx/sd_access;        auth_basic &quot;Administrator Login&quot;;        auth_basic_user_file /etc/nginx/htpasswd;        location / {                proxy_pass http://127.0.0.1:$port;                proxy_set_header X-Real-IP $remote_addr;                proxy_set_header Host $http_host;                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;        }}با نصب ابزار apache-utils هم میشه اون فایل مربوط به یوزرپس رو ساخت و همین.پ.ن: من از کلودفلیر استفاده می‌کنم و کلودفلیر این امکان رو میده که با * وایلد تعریف  کرد برای ساب‌دامنه.</description>
                <category>میثم پورگنجی</category>
                <author>میثم پورگنجی</author>
                <pubDate>Sat, 16 Nov 2019 13:01:00 +0330</pubDate>
            </item>
                    <item>
                <title>دیکشنری کلیکی برای اوبونتو</title>
                <link>https://virgool.io/@meysampg/%D8%AF%DB%8C%DA%A9%D8%B4%D9%86%D8%B1%DB%8C-%DA%A9%D9%84%DB%8C%DA%A9%DB%8C-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%A7%D9%88%D8%A8%D9%88%D9%86%D8%AA%D9%88-elejnzll8qpu</link>
                <description>امشب از حمید پرسیدم برا دیکشنری تو لینوکس چیکار می‌کنه و این رشته توییتش رو رفرنس داد. حمید برای آرچ نوشته اون رو و خب من پیر شدم و حوصله ندارم دیگه :)). برای همین بر اساس روش حمید نسخه‌ی اوبونتو و کار راه‌اندازش رو برای خودم ساختم.ابزار trans رو روی سیستم خودتون نصب کنید.۲. اسکریپت زیر رو داخل فایل ~/.local/bin/select_and_translate بذارین و بهش اجازه‌ی اجرایی بدین: https://gist.github.com/meysampg/d3389713d70103ceb1cbb8a8f96f9568 ۳. یه شرتکات تعریف کنید و مقدار command رو براش select_and_translate انتخاب کنید:</description>
                <category>میثم پورگنجی</category>
                <author>میثم پورگنجی</author>
                <pubDate>Wed, 30 Oct 2019 19:39:21 +0330</pubDate>
            </item>
                    <item>
                <title>چطور با اینتلیج جاب اسپارک رو دیباگ کنیم؟</title>
                <link>https://virgool.io/@meysampg/%DA%86%D8%B7%D9%88%D8%B1-%D8%A8%D8%A7-%D8%A7%DB%8C%D9%86%D8%AA%D9%84%DB%8C%D8%AC-%D8%AC%D8%A7%D8%A8-%D8%A7%D8%B3%D9%BE%D8%A7%D8%B1%DA%A9-%D8%B1%D9%88-%D8%AF%DB%8C%D8%A8%D8%A7%DA%AF-%DA%A9%D9%86%DB%8C%D9%85-sh4nw9wyrpnz</link>
                <description>انگشت کردن یک سوراخمن چند وقتی هست که از بک‌اند سوئیچ کردم به دیتا و در این مسیر الان رسیدم به اسکالا و اسپارک. یکی از چیزایی که این وسط با گذشته تفاوت داره راه و روش دیباگ کردنه. قبلا توی php یا حتی Go، خیلی راحت متغیر رو چاپ می‌کردم و خودم خلاص و جونم آزاد :)) روشم درست نبود ولی جواب میداد و حداقل تو php از سر و کله زدن با اون xdebug لعنتی بهتر بود :)). ولی امروز به جایی رسیدم که واقعا دیگه نمیشد. باید بر می‌گشتم به راه و روشی که دکتر همتی برای سی++ مجبورمون می‌کرد: دیباگ کردن آدمی‌زادی.خب؟بعد از گشتن برای کانفیگ دیباگر به این لینک رسیدم؛ ماجرا خیلی ساده‌ست!۱.  اول برنامه رو پکیج کنید. طبعا من تو اسکالا از sbt استفاده می‌کنم و این کار با &#x60;sbt package&#x60; انجام میشه.۲. موقع سابمیت کردن جاب، سوراخ رو برای دیباگر باز کنید. این کار با اجرایexport SPARK_SUBMIT_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005داخل خط فرمان انجام میشه.۳. یه دیباگر ریموت ایجاد کنید. برای این کار از منوی Run گزینه‌ی Edit Configurations رو انتخاب کنید و با کلیک روی + گزینه‌ی Remote رو انتخاب کنید و اوکی کنید (تصویر زیر).۴. پکیج رو با آدرس کامل و همه‌ی بند و بساطش سابمیت کنید. برای پکیج من اینطور چیزی میشه:spark-submit --packages org.apache.spark:spark-streaming-kafka-0-10_2.11:2.4.3 $(pwd)/target/scala-2.11/stream_2.11-0.1.jar۵. داخل Intellij IDEA از منوی Run گزینه‌ی Run Filan رو انتخاب کنید که Filan همون اسمیه که تو مرحله‌ی ۳ انتخاب کردید.الان هر جا که بریک‌پوینت گذاشته باشید، تو پنجره‌ی دیباگ می‌تونید ببینید ماجرا چیه و از چه قراره.پ.ن: علی جان اگه این پست رو خوندی، من برای نوشتن توضیح اختیاری تصویر به مشکل خوردم. وقتی سر جاش کلیک می‌کنم و یچی می‌نویسم یدفه صفحه سفید میشه. فایرفاکس آخرین نسخه روی اوبونتو ۱۸.۰۴.</description>
                <category>میثم پورگنجی</category>
                <author>میثم پورگنجی</author>
                <pubDate>Mon, 21 Oct 2019 22:26:10 +0330</pubDate>
            </item>
                    <item>
                <title>چطور کتاب فارسی روی کیندل بخونیم؟</title>
                <link>https://virgool.io/@meysampg/%DA%86%D8%B7%D9%88%D8%B1-%DA%A9%D8%AA%D8%A7%D8%A8-%D9%81%D8%A7%D8%B1%D8%B3%DB%8C-%D8%B1%D9%88%DB%8C-%DA%A9%DB%8C%D9%86%D8%AF%D9%84-%D8%A8%D8%AE%D9%88%D9%86%DB%8C%D9%85-tprjzdwnmhvw</link>
                <description>خشایار امروز یه توییت کرده بود که آخرین نسخه‌ی کیندل کتاب‌های راست به چپ رو درست نشون میده و نیما از سر بحثی که چند روز باهاش داشتم من رو منشن کرده بود. رفتم از اینجا مدل کیندلم رو پیدا کردم و داخل صفحه‌ی مربوط به کیندلم، فریم‌ورش رو پیدا کردم و دانلود کردم، فایلی که دانلود کرده بودم رو انتقال دادم به پوشه‌ی اصلی کیندلم و کابل رو جدا کردم. بهم پیام داد که یه نسخه‌ی جدید هست،‌ بروز کنم؟ گفتم بروز کن و این شد از چطوری بروز کردن کیندلم (اگه نیومد، بعد از انتقال فایل باید رفت از داخل تنظیمات گزینه‌ی آپگرید یا اینطوری چیزی رو انتخاب کرد). کیندلم بروز شد ولی نیتجه این بود:همچنان مشکل پابرجا بود :/. سرچ کردم و فهمیدم که باید بجای فرمت mobi، کتاب‌ها رو با فرمت AZW3 ذخیره کرد. من برای تبدیل کتاب‌ها از Calibre استفاده می‌کنم و بعد از انتخاب کتاب برای تبدیل، اون گوشه بالا سمت راست میشه از کشو این فرمت رو پیدا کرد:و نتیجه خوب بود:دست اون دوستم که آلمانه و دوست نداره ازش تعریف کنم و خشایار و نیما و سازنده‌ی کالیبره و اینا درد نکنه! یه مشکل گنده حل شد برام :).</description>
                <category>میثم پورگنجی</category>
                <author>میثم پورگنجی</author>
                <pubDate>Wed, 17 Apr 2019 18:46:47 +0430</pubDate>
            </item>
                    <item>
                <title>برای پیمان یا چطور CORS رو روی Nginx دور بزنیم؟</title>
                <link>https://virgool.io/@meysampg/%D8%A8%D8%B1%D8%A7%DB%8C-%D9%BE%DB%8C%D9%85%D8%A7%D9%86-%DB%8C%D8%A7-%DA%86%D8%B7%D9%88%D8%B1-cors-%D8%B1%D9%88-%D8%B1%D9%88%DB%8C-nginx-%D8%AF%D9%88%D8%B1-%D8%A8%D8%B2%D9%86%DB%8C%D9%85-cphapn37an7t</link>
                <description>[این قسمت در مورد تبلیغات vue.js است و نخوندین هم نخوندین] یکی از خوبیای vue.js اینه که پیمان و نگار باهاش کد می‌زنن و علاوه بر این، پوست آدم زیبا میشه ولی اگه وب‌سرور توسعه‌دهنده nginx باشه دهنش ناراحت میره. به هر حال همونطور که همه‌ی خوشگلا یه مشگلایی هم دارن با خودشون، باید پذیرفت و اینا.[این قسمت ولی اصل کاریه] راهی که در نهایت پیدا شد اینه که:۱. یک دامنه‌ی فیک برای بک‌اند بسازید. برای این منظور در ویندوز سرچ کنید و در لینوکس یا مک فایل &#x60;/etc/hosts&#x60; رو ویرایش کنید و یه خط مثل &#x60;127.0.0.1   vue.mpg&#x60; بهش اضافه کنید. از این به بعد vue.mpg میشه دامنه‌ی فیک ماجرا.۲. این کانفیگ رو برای اون دامنه‌ی فیک درست کنید. به خطوط ۵ و ۹ و ۱۰ توجه لازم رو مبذول بدارین لطفا. خط ۵ که همون دامنه‌ی فیک مرحله‌ی ۱ه. خط ۹ میشه اون uriیی که API روش کال میشه و بک روتش رو روی اون تعریف کرده. خط ۱۰ میشه دامنه‌ی فیک بک‌اندتون (اگه نیست برو به ۱ و کلی مصیبت دیگه :دی) و خط ۱۴ هم میشه آدرسی که ویو باهاش سرو میشه. خط ۷ هم برا وقتیه که دارین یچی آپلود می‌کنین به خاطر حجم تو دیوار نرین. مشخصا تو خیلی جاها باید مواظب این خط بود و اگه روت خاصی برای آپلود هست این خط باید تو کانفیک بک و برای اون روت صرفا تغییر پیدا کنه و نه کل ماجرا. ولی فعلا حالا کارمون راه بیفته تا بعد خدا بزرگه، اگه باشه.server {    
    listen 80;
    listen [::]:80;

    server_name vue.mpg; # fake domain, made in step 1

    client_max_body_size 80M; # be careful about this config

    location /api { # the route which will be served by backend
        proxy_pass http://mybackend.mpg; # the fake backend domain
    }

    location / {
        proxy_pass http://127.0.0.1:8080; # the default URL which vue.js will serve
    }
}۳. خِلاص!پ.ن: قسمت اول عنوان پست رو پیمان خودش انتخاب کرد، به اجبار من.</description>
                <category>میثم پورگنجی</category>
                <author>میثم پورگنجی</author>
                <pubDate>Mon, 18 Mar 2019 12:39:46 +0330</pubDate>
            </item>
                    <item>
                <title>کوله پشتی ۹۸</title>
                <link>https://virgool.io/@meysampg/backback-of-98-frhvroznsfxw</link>
                <description>کوله‌پشتی ۹۷۱. فرض کنید کوله‌پشتی دارید که قرار است در آن تجربیاتی را از  سال ۹۷ بگذارید و با خود به سال ۹۸ ببرید. تجربیات مثبتی که همراه داشتن  آنها به شما کمک می‌کند نسبت به سال قبل فردی توانمندتر بشوید. در کوله‌ی خود چه تجربیاتی را قرار می‌دهید؟بیشتر خواهم خواند؛ وبلاگ، کتاب، مجله. من تا قبل از امسال بخش زیادی از بودجه‌ی خواندنی‌هایم را به کتاب‌هایی اختصاص داده بودم که یا نمی‌فهمیدم داستان چیست و یا برای فهم، هر کتاب مدت خیلی زیادی از من زمان می‌گرفت. بدون شک تأثیر این کتاب‌ها برای من آنقدر زیاد بوده است که حرفی در آن نداشته باشم، اما لزومی هم ندارد تمام سهم را به خود اختصاص دهند. می‌توانم ترکیبی از رمان، فلسفه، کتاب‌های مربوط به مدیریت، برنامه‌نویسی و ریاضیات را انتخاب کنم و سفره‌ی خوانش از این درویشی کمی میل به سمت قورمه‌سبزی کند :دی. سرچ‌ها و وبلاگ‌هایی که خواهم خواند نیز حول همین تغییر خواهند چرخید.۲. برای حرکت در مسیر زندگی باید سبک و چابک بود. چه مواردی را  از کوله‌ی خود خارج می‌کنید که در سال ۹۷ باقی بماند و شما سبک‌تر حرکت کنید؟ چیزهایی که از کوله‌ خارج می‌کنید مثلا می‌تواند تجربیات ناخوشایند یا ناراحتی‌ها باشد.بحث کردن تا رسیدن به جواب. هیچ لزومی ندارد هر چالشی جواب داشته باشد. همان قورمه‌سبزی ۱ هم بعضی وقت‌ها زمان می‌خواهد که جا بیفتد. بعضی وقت‌ها باید شُل کرد :)).۳. فرض کنید در پایان سال ۹۸ بیشتر آن فردی شده‌اید که شبیه خود ایده‌آل شما است. در این صورت چه ویژگی‌ها و رفتارهایی باید در شما تقویت شود؟ چه چیزهایی را در کوله‌ی خود می‌گذارید که کمک می‌کند این ویژگی‌ها در شما تقویت شود؟همدلیِ فعال به جای همدلیِ منفعل؛ و برای فهم و تقویت آن هنوز در حال خواندن و جستجوام! ;).پ.ن: ما تو خونه‌مون میگیم قرمه‌سبزی، تو توییتر میگن قورمه‌سبزی. چمیدونم والا!</description>
                <category>میثم پورگنجی</category>
                <author>میثم پورگنجی</author>
                <pubDate>Mon, 18 Mar 2019 10:20:39 +0330</pubDate>
            </item>
            </channel>
</rss>