آملی کوچولوی من! تو استخون‌های شیشه‌ای نداری، تو می‌تونی ضربه‌های زندگی رو بگیری، اگه بذاری شانست از دست بره در نهایت قلبت مثل استخون‌های من خشک و شکننده می‌شه.

به نظرم آدم‌ها در یک طیف زندگی می‌کنند. زندگی بر پایه‌ی شانس در یک سو، زندگی برپایه‌ی اراده در سوی دیگر. توزیع این نمودار هم نرمال است. اکثریت آدم‌ها در میانه‌ی طیف زندگی می‌کنند.

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

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

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

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

۱. شنونده باشید و کاری کنید اون فرد هم بفهمه که شما دارید با دقت به‌ش گوش می‌دید.

به اون آدم این حس رو بدید که مهمه.

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

۲. حمایت کنید.

آدم‌ها دنبال راه‌حل از شما نیستند. دنبال حمایت هستند. ژست دانای کل نگیرید. همراه و هم‌دم باشید.

  • من پیشتم.
  • هیچ‌چیز تصوری که ازت دارم و احساسی که به‌ت دارم رو تغییر نمی‌ده.
  • من دوستت دارم. مهم‌نیست که چی بشه. بیا این رو هم باهم حل کنیم.

۳. کمک کنید اون آدم بیشتر و بیشتر حرف بزنه و شما بیشتر و بیشتر بشنوید.

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

  • وای. این شرایط خیلی سخته.
  • وقتی این اتفاق افتاد تو چه احساسی داشتی؟

۴. بپرسید کی این احساسات پیدا شدن و تاثیرشون چی بوده؟

سعی کنید بفهمید چه مدته که اون آدم داره با این افکار و احساسات دست و پنجه نرم می‌کنه و چه تاثیری روی زندگیش داشتن.

  • چه مدته که چنین احساساتی داری؟ از کی شروع شدن؟
  • این افکار منجر به مشکلی در زندگیت شدن؟ مثلا بدخوابی؟
  • آیا خودت رو ایزوله کردی نسبت به دنیا؟

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

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

  • داری به این فکر می‌کنی که خودت رو بکشی؟

حواس‌تون باشه که قضاوتش نکنید. مثلا با چنین جمله‌ای «تو که به اون کار احمقانه فکر نمی‌کنی؟ آره؟»

یا عذاب وجدان ندید.

  • فکر کردی که این کار چه بر سر پدر و مادرت میاره؟

این حس رو بدید که درک‌شون می‌کنید و اهمیت می‌دید.

  • تو برام خیلی مهمی و می‌تونی هر چیزی رو به‌م بگی. هر چیزی.

۶. چی باید بگید وقتی راجع به خودکشی حرف می‌زنن؟

آروم بمونید. و با آرامش به‌شون گوش بدید. وقت بذارید و سوالات تکمیلی بپرسید.

  • اکثرا چه زمان‌هایی این افکار میان سراغت؟
  • وقتی خیلی حالت بد می‌شه چی‌کار می‌کنی؟
  • چه چیزی در مورد این افکار تو رو می‌ترسونه؟
  • الان اگه چی داشته باشی احساس امنیت می‌کنی؟

یادآوری کنید که کمک در دسترسه و این افکار نشونه‌هایی‌ـه برای مراجه به یک تراپیست یا روان‌شناس.

  • حقیقت اینه‌که افکارت به من می‌گن که یک اتفاق مهمی در تو داره رخ می‌ده. اون بیرون کمک و آدم‌های درست وجود دارن. من می‌خوام کمک کنم که از اون منابع کمک بگیریم.

۷. حواس‌تون باشه که چه زمانی باید مکالمه رو قطع کنید.

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

  • آیا اوکی‌ای که صحبت رو ادامه بدیم؟
  • مطمئن باش که اگر بخوای، بعدا هم می‌تونیم ادامه‌ی صحبت‌مون رو انجام بدیم.

۸. چطوری پیشنهاد بدیم که دوست‌مون به تراپیست مراجعه کنه؟

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

این‌طوری می‌تونید موضوع رو پیش بکشید:

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

کمک کنید. و در کنارشون باشید.

  • من تا مطب تراپیست باهات میام و اون‌جا منتظرت می‌مونم. دوستت دارم. می‌دونی که؟

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

روان‌شناس رازهای شما رو نگه می‌داره و تا نخواید به خانواده‌تون نمی‌گه.

۹. اگر پیشنهاد رو رد کردن چی؟

اشکالی نداره. اگر اون آدم آسیب فیزیکی به خودش نزده، فشار نیارید.

  • مشکلی نداره. می‌فهمم که سخته. اما به‌ش فکر کن. اگر نظرت عوض شد من این‌جام که کمک کنم.

مکالمه رو با قدردانی و تشکر پایان بدید.

  • این مکالمه خیلی برام ارزشمنده. ارتباط ما عمیق‌تر شد و من همیشه هستم. من رو یادت نره.
💡
اگر وضعیت اورژانسی بود، می‌تونید با شماره ۱۲۳ اورژانس اجتماعی تماس بگیرید.

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

سابقا در غم‌انگیزترین روزهای زندگی‌ام، می‌نوشتم. بیشتر از همیشه. و حالا این موهبت من را ترک کرده. پر از احساسات مخدوش‌ام و در عین حال خالی‌ام. دانته در برزخ چیزی با این مضمون نوشته: «هیچ رنجی بالاتر از یادآوری روزهای خوش گذشته نیست، زمانی که هیچ امیدی در رو به رو نیست.» من در برزخم؟

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

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

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

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

چرا غم؟ به شادی فکر می‌کنم. چرا هیچ‌گاه کاملا شاد نبوده‌ام؟ چرا برای شاد بودن حد دارم اما برای غم نه؟ غم انگار فرصتی است برای بازگشت به خودم. به صداهای درونم. شادی مرا از خودم بیرون می‌برد. خودم را تخریب می‌کنم. با سیگار. شبیه یک خودکشی آرام. سالانه بیش از ۷ میلیون نفر در اثر مصرف سیگار جان می‌دهند. بله. رسم روزگار چنین است.

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

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

بله. رسم روزگار چنین است.

در این پست قراره درباره‌ی بازی زندگی بخونید و با جان کانوی ریاضی‌دان مشهور انگلیسی آشنا بشید؛ در نهایت هم یک شبیه‌سازی بامزه از بازی زندگی رو روی مدل انقلاب و دو قطبی‌ سیاسی می‌بینیم.

بازی زندگی یا Game Of Life یا به اختصار «زندگی» یک شبیه‌ساز سلولی ابداع شده توسط جان کانوی هست که برای بررسی سیستم‌های پیچیده و رفتارشون کاربرد داره.

در مارس ۱۹۷۰ مارتین گاردنر نامه‌ای ۱۲ صفحه‌ای از ریاضی‌دان مشهور جان کانوی دریافت می‌کنه؛ صفحه‌ی ۹ با یک تیتر شروع می‌شه: بازی زندگی

یک مدل ریاضی، شبیه‌ساز سلولی که نسل به نسل تغییر می‌کنه؛ جان کانوی بقیه‌ی عمر کاریش رو به کار بر روی نوعی از زندگی می‌گذرونه که امروزه به نام «بازی نامحدودِ بدون بازیکن» شناخته می‌شه.

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

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

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

یکی از الگوهای کشف شده برای بازی زندگی:

Snark - LifeWiki

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

در این مدل انقلابیون سلول‌های زنده هستند (رنگی) و غیر انقلابیون (سلول‌های مرده یا خالی)، سلول‌های زنده به دو قطب تبدیل شدند، رنگ قرمز یک گروه و رنگ آبی گروه دیگه. صفحه ۷۰ در ۷۰ هست و انقلاب در مختصات ۳۰ و ۳۰ با شعاع ۱۰ تعیین شده.

در هر دور قوانین بازی به این صورت تعیین شده:

  • برای هر سلول زنده مجموع همسایگان آبی و قرمز شمرده می‌شه، اگر کمتر از دو بودند، سلول با قانون تنهایی می‌میره.
  • برای هر سلول زنده، مجموع همسایگان آبی و قرمز شمرده می‌شه و اگر بیشتر از ۴ بودند سلول می‌میره.
  • برای هر سلول زنده اگر همسایگان آبی ۲ یا ۳ بودند اون سلول تبدیل به یک سلول آبی می‌شه و اگر قرمز بودند اون سلول هم قرمز می‌شه.
  • برای هر سلول مرده اگر مجموع همسایگان آبی و قرمز برابر ۳ بود سلول زنده می‌شه، در اون صورت اگر آبی‌ها بیشتر از قرمز بودند سلول آبی و اگر برعکس بود سلول قرمز می‌شه.
  • پس از اتمام دور، مدل قطبیدگی سیاسی اعمال می‌شه؛ مقدار قطبیدگی ۰.۳ فرض شده: در این مرحله به طور میانگین یک سوم از سلول‌های زنده به صورت رندوم به قطب سیاسی متفاوت تبدیل می‌شوند. آبی به قرمز و قرمز به آبی.
  • بعد مدل انقلاب اعمال می‌شه. مختصات انقلاب در صفحه ۳۰ و ۳۰ (مرکز صفحه) با قدرت ۱۰ انتخاب شده. در این مرحله فاصله‌ی اقلیدسی هر سلول با مختصات انقلاب محاسبه می‌شه و اگر عدد به دست آمده کمتر یا مساوی قدرت انقلاب باشه سلول مرده زنده می‌شه و سلول زنده می‌میره. هر سلولی که در این مرحله زنده می‌شه ۵۰ درصد شانس قرمز شدن و ۵۰ درصد شانس آبی شدن داره.

در زیر می‌تونید نمونه رو ببینید و بررسی کنید با چیدمان‌های مختلف سیستم چطور کار می‌کنه و در چه وضعیتی به ثبات می‌رسه.

نکته‌ی جالب اینه که در بعضی چیدمان‌ها قطبیدگی سیاسی بین انقلابیون باعث از بین رفتن سریع سلول‌های زنده می‌شه.

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

Game Of Life model for Political Revolution and Political Polarization
Game Of Life model for Political Revolution and Political Polarization - gof.html

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

بعدها بخشی از رویام به واقعیت پیوست. بطری‌هایی رها شده در دریا پیدا می‌کردم. کوکاکولا یا پپسی. خانواده یا کوچیک. بدون نامه. زباله‌هایی که قرن‌ها در طبیعت باقی می‌مونن.

مدتی پیش، در یک شب طولانی و در حالی که با بی‌خوابی دست و پنجه نرم می‌کردم یک بات تلگرامی خنده‌دار نوشتم برای تجربه‌ی این رویا.

قصد هزینه نداشتم و می‌خواستم کل پروژه در دو سه ساعت تموم بشه. پس به Cloudflare Workers فکر کردم و برای دیتابیس هم به Cloudflare KV.

سرویس Workers یک سرویس بر پایه‌ی معماری Serverless هست؛ یعنی شما نیاز به کانفیگ سرور ندارید؛ همچنین سرور ۲۴ ساعته بالا نیست و به شما اختصاص داده نشده؛ فقط زمانی که نیازه و ریکوئستی میاد منابع به شما اختصاص داده می‌شه. در نتیجه کلا ارزون‌تر هم هست برای پروژه‌های شخصی.

کلاد فلیر تا ۱۰۰ هزار ریکوئست در روز رو به صورت رایگان میزبانی می‌کنه و بیش از این باید هزینه‌ی اندکی بپردازید.

همچنین Cloudflare KV یک دیتابیس غیررابطه‌ای key/value هست که به صورت رایگان در ورکرها قابل استفاده هستند.

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

هردوی دیتابیس و ورکرها برای بات کافی بودند. پروژه بعد از دو ساعت منتشر شد. برای چند نفر از دوستانم فرستادم و خوابیدم.

روز بعد بات ۹۰ کاربر داشت و من هیجان‌زده شدم. احساس می‌کردم آدم‌هایی هستیم با رویاهای کودکی مشترک که حالا یک‌جایی پیدا کردیم که این رویا رو زندگی کنیم.

اما دیتابیس KV برای چنین چیزی بهینه نبود. امکان کوئری نداشت و هر بار باید کل دیتابیس رو می‌خوند و بعد رندوم یکی رو انتخاب می‌کرد. ضمن این‌که بعضی‌ها ممکنه بدشانسی بیارند؛ و در زمانی که شانس گرفتن نامه برای هر کس ۱ به ۸۹ـه و ممکنه کمتر هم بشه (با افزایش کاربران)، هیچ‌وقت نامه نگیرند.

یک روز بیشتر روی پروژه کار می‌کنم. به دنبال دیتابیس‌های رابطه‌ای، serverless و رایگان می‌گشتم و CockroachDB رو پیدا کردم. سازندگانش البته این دیتابیس رو برای اسکیل‌های بسیار بالا طراحی کرده‌‌ند و پلن رایگانش برای یک بات تلگرام بیش از اندازه سخاوت‌مندانه‌ست. این سوسک عزیز، تمام نیازهای فعلی و آینده‌ی پروژه روحل می‌کنه و با تمام درایورها Postgres هم سازگاره. پس کار عجیب و غریبی نداریم برای اتصال به این‌جا.

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

این‌جا Grammy ناجی بود. یک کتابخونه‌ی قوی با داکیومنت‌های خوب برای دیپلوی روی اکثر ارائه‌دهنده‌های زیرساخت serverless. البته به جز کلاد فلیر ورکر!

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

امکان ارسال ویس اضافه شد و گرافیک بات هم زیباتر شد (کیبوردها و منوها)؛ همچنین حالا یک دیتابیس کامل هم داشتم. امکان ریپورت نامه‌های نامناسب اضافه شد و تحویل نامه از حالت کاملا رندوم خارج شد. حالا کاربرها بر اساس زمان آخرین نامه‌ای که دریافت کردند، مرتب می‌شن و نامه دریافت می‌کنن. اونی که مدت زمان بیشتریه که نامه نگرفته، حالا زودتر نامه می‌گیره و به این ترتیب هیچ‌کس بدون نامه نمی‌مونه. البته همچنان ارسال‌کننده و دریافت‌کننده نامه‌ها ناشناسند. چون کل جذابیت پروژه روی همین بنا شده.

نوبت به دیپلوی رسید و بعد از امتحان کردن Deno تا Azure Function و ور رفتن با Workers به Vercel رسیدم.

مشکل Deno لیمیا ریکوئست بود که باعث می‌شه نامه‌های طولانی رو نتونه پاسخ بده و Azure Functions و ورکرهای Cloudflare هم سر سازگاری نداشتند و من البته تصمیم گرفتم وقت بیشتری صرف نکنم برای دیپلوی.

ورسل یک پلتفرم از تیم پشت NextJSـه که اول برای میزبانی پروژه‌های serverless بر پایه‌ی Next ساخته شده بود اما حالا تقریبا هر پروژه JS بر بستر serverless قابلیت اجرا دارن روش.

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

مهم‌ترین مشکل حالا وصل کردن بات به دیتابیس در پروداکشن بود که به دلیل جدید بودن CockroachDB و اتصال SSL، مجبور شدم مستقیما از پکیج node-postgres استفاده کنم به جای orm های رایج؛ که بد هم نشد.

من فکر می‌کنم این موهبت دنیای ماست؛ این حجم زیاد ابزارها، راحت و ارزان (رایگان) برای تبدیل سریع ایده‌ها و رویاها به چیزی واقعی در دسترسه. و امیدوارم پروژه‌های کوچک دوست‌داشتنی بیشتری ببینیم.