<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>نوشته های عماد محمدی</title><link>https://virgool.ir/feed/@emadolsky</link><description>یه پسر ۲۲ساله که هنوز نمی‌دونه می‌خواد کی باشه. در حال حاضر، دانشجوی مهندسی کامپیوتر در دانشگاه تهران و تکنیکال تیم‌لیدر در ستون.</description><language>fa</language><pubDate>2026-11-11 10:44:47</pubDate><image><url>https://files.virgool.ir/upload/users/11060/avatar/jgdseH.jpeg</url><title>عماد محمدی</title><link>https://virgool.ir/@emadolsky</link></image><item><title>کوبرنتیز؛ سیستمی با قابلیت خودترمیمی</title><link>https://virgool.ir/@emadolsky/کوبرنتیز-سیستمی-با-قابلیت-خودترمیمی-mknl06utiyve</link><description>کوبرنتیز الانا به قدری گنده شده که معرفی نمی‌خواد دیگه. ولی خب برای یه توضیح کوتاه، کوبرنتیز یه container orchestratorه. نه اولینشونه و نه آخرینشون، ولی الان معروف‌ترینشونه.نمی‌خوام راجع به اینکه کوبرنتیز چیه صحبت کنم. می‌خوام یخرده راجع به تمایز جدی‌ای که کوبرنتیز با نمونه‌های مشابه خودش داره صحبت کنم؛ یه تصمیم طراحی بزرگ و یه رویکرد متفاوت.دیزاین Level Triggered کوبرنتیز بر اساس state - برگرفته از The Kubernetes Book یه مسئله‌ی ساده بگم!:یه چالشی که من بعضا دارم، جواب دادن به پیام‌های تلگراممه. حالا توی کیسای عادی شاید خیلی چالش نباشه ولی خب مثلا غزال شاکی می‌شه اگه جوابشو تو یه تایم معقولی ندم :))).حالا من رویکردم واسه اینکه بفهمم جوابی لازم هست بدم یا نه، می‌تونه این باشه که:روش ۱: اگه نوتیفیکیشن اومد، برم و بهش جواب بدم که خب مشکل اینه که بعضی اوقات به دلایل مختلف نوتیفیکیشن نمی‌آد برام. (تو پاورسیوینگ مود باشم، اینترنت مشکل داشته باشه، وی‌پی‌ان خراب شده باشه و...)روش ۲: یه کار دیگه‌ای که می‌تونم بکنم اینه که هر ۵ دیقه یه بار تلگرامم رو باز کنم و بذارم آپدیت شه که ببینم پیام جدید اومده یا نه. ولی حتی اینم مشکل داره. چون ممکنه دفعه‌ی آخری که توی چت بوده‌م، به هر دلیلی، یه پیامی رو ندیده باشم یا یادم رفته باشه جواب بدم یا حتی تو ذهنم جواب داده باشم ولی ننوشته باشم! ( بله این اتفاق واقعا برای من می‌افته :))) )روش ۳: کار آخری که می‌تونم انجام بدم و مطمئن باشم که دیگه حتما اگه پیامی هست جواب داده‌م، اینه که هر ۲۰ دیقه یه بار چت رو باز کنم و پیام‌ها رو بخونم و مطمئن بشم که همه رو جواب داده‌م. منطقا هم چون کاره زمان‌بره، نمی‌تونم خیلی زود زود انجامش بدم.به وضوح هر چقدر که پایین اومدیم، هزینه‌ی کارمون بیشتر شد. ولی خب در عوض خیلی مطمئن‌تر عمل کردیم و تونستیم اتفاقات رو کمتر میس کنیم. یه نکته‌ی مهم دیگه هم اینه که توی هر کدوم از روش‌های پایین‌تر، هنوز می‌شه رویکردهای بالاتر رو برای آپتیمایز بودن، داشت. یعنی چی؟ یعنی مثلا اگه من می‌خوام که ۲۰ دیقه یه بار چتو باز کنم و بخونم پیام‌ها رو که مطمئن بشم همه رو جواب داده‌م، اگه جایی نوتیفیکیشن اومد، خب می‌رم جواب می‌دم دیگه. وای‌نمی‌ستم ۲۰ دیقه بگذره. و مثلا هر ۵ دیقه یه بار هم فقط تلگرامو باز می‌کنم که آپدیت بشه اگه پیام جدیدی هست.یخرده اگه بخوایم تکنیکال‌تر به کیس‌هامون نگاه بکنیم،روش اولی Interruptه. یعنی من دارم کار خودمو می‌کنم، منتها از بیرون یه چیزی بهم push می‌شه و من بر اساس اون یه کاری انجام می‌دم.روش دومی Pollingه. یعنی من هر چند وقت یه بار بررسی می‌کنم ببینم خبر جدیدی هست یا نه که بر اساسش یه کار انجام بدم.هر دوتای این روش‌ها، event triggeredن. یعنی من الان تو یه شرایطی هستم، و از بیرون یه event یا رخدادی رو مشاهده می‌کنم (حالا یا خودم می‌رم می‌پرسم، یا بهم می‌گن.) و بر اساسش یه اکشنی می‌زنم. و دقیقا نکته‌ای که داره اینه که شاید بهینه باشه، ولی همیشه شانس از دست دادن یه رخداد رو داریم. و زمانی که یه رخداد رو از دست دادیم، شاید دیگه نتونیم ببینیمش.ولی رویکردی که توی سومی هست متفاوته. این مکانیزم رو بهش می‌گن Level triggered. یعنی دیگه اصلا چیزی به اسم event یا رخداد توش وجود نداره. چیزی که اهمیت داره stateه.یعنی توی روش سوم، اصلا مهم نیست یه مسج کی اومده یا من نوتیفیکیشن گرفته‌م یا قبلا خونده‌م یا هر رخداد دیگه‌ای. من الان مستقل از هر چیزی می‌دونم این پیام‌ها وجود دارن و باید جوابشون هم وجود داشته باشه.یعنی در واقع یک current state در حال حاضر وجود داره و من باید برسونمش به desired state. یعنی به یه شرایط دل‌خواه. و زمانی خوش‌حالم که current stateم همون desired stateم باشه.این دوتا لفظ Level و Edge از طراحی سیستم‌های دیجیتال می‌آن. اینکه کنترلر یه مدار، کارهایی که می‌خواد انجام بده رو روی عوض شدن مقدار یه سیگنال انجام می‌ده یا روی یه مقدار خاصی از سیگنال. یعنی مثلا وقتی سیگنال x از ۰ می‌شه ۱ (edge) یا وقتی سیگنال ۱ه (level).تفاوت Edge Triggering و Level Triggeringاین رویکردیه که کوبرنتیز تو دیزاینش داره. یه جایی توش هست به اسم kube-apiserver که توش desired stateها نگه‌داری می‌شه. این استیت‌ها توی یه سری منیفست نگه‌داری می‌شن. منیفست یه فایل با توصیفی از چیزیه که ما می‌خوایم. اینجا لازم به ذکره که API کوبرنتیز Declarativeه. یعنی تو چیزی که می‌خوای رو بهش می‌گی ولی بهش نمی‌گی چی‌کار بکن. اون خودش می‌دونه چی‌کار کنه که چیزی که می‌خوای رو بهت بده.مثلا اون تو، یه منیفست هست که توش نوشته یه pod می‌خواد که یه کانتینرِ nginx روش باشه و ۲core سی‌پی‌یو و ۴GB مموری داشته باشه. این منیفست وقتی ساخته می‌شه، به این معنی نیستش که چیزی که ما می‌خواستیم حاضره، به این معنیه که سفارش ثبت شده. هر موقع که هر اتفاقی بیفته، روی همون منیفست یه سری status ست می‌شه که بگه پادمون در چه فازیه الان.به اپلیکیشن‌هایی که بر اساس منیفست (که desired stateه) و state فعلی، یه سری کارا انجام می‌دن که به شرایط دلخواه برسیم، می‌گیم «کنترلر». این کنترلرها یه فرایند کلی براشون تعریف می‌شه که وقتی یه منیفست رو بهشون می‌دی، بتونن شرایط فعلی رو به شرایط دل‌خواه برسونن. بعلاوه، هر چند وقت یه بار، حتی اگه هیچ‌جای سیستم هیچ خبری هم نباشه، این فراینده واسه منیفست‌ها اجرا می‌شه. در واقع دائما کنترلرها شرایط کلاستر رو با منیفست‌ها سینک می‌کنن. به این عملیات سینک کردن تکرارشونده می‌گن Reconciliation. به کل این پترن طراحی هم می‌گن Controller Pattern.البته برای اینکه لازم نباشه برای اعمال هر تغییری بر اساس منیفست‌ها، به اندازه‌ی یه interval صبر کنیم، کنترلرها علاوه بر اینکه هر چند وقت یه بار کل منیفست‌ها رو reconcile می‌کنن، روی منیفست‌ها watch می‌کنن و اگر تغییری کردن، reconcileشون رو در همون لحظه اجرا می‌کنن. مثل همون که ما می‌خوایم چت تلگرامو ۲۰ دیقه یه بار چک کنیم که همه‌ی پیام‌ها رو جواب داده باشیم، اما اگه حالا نوتیفیکیشن اومد، همون لحظه جواب بدیم که بهینه‌تر باشیم.تصویرسازی Reconciliation - برگرفته از این مقالهحالا دقیقا کجا این دیزاینه کمک می‌کنه؟برای مثال اگه یه اتفاقی یه جایی افتاد و یه کنترلر بخاطر زمان‌بندی بد یا مشکل نتورک نتونست ببیندش (مثلا یه کانتینر exit کنه)، دفعه‌ی بعدی می‌بیندش. اگه دفعه‌ی بعدی هم نتونست، دفعه‌ی بعدیش می‌بینه و به همین منوال.یا مثلا اونجایی که این منیفست‌ها ساخته شده‌ن و یهو وسط ساختن یه پاد، اون سرویسی که قراره بیاردش بالا یا مثلا نتورکشو ردیف کنه، می‌ره پایین. وقتی که دوباره اومد بالا، دیگه اصلا براش مهم نیست کجای کار ول شده. وظیفه‌ش اینه که الان پاد رو بیاره بالا؛ مستقل از اینکه state فعلی چیه، بفهمدش و بتونه state رو به طوری که می‌خوایم در بیاره.یا برای مثال یه تغییر از بیرون اعمال می‌شه که یه چیزی رو خراب می‌کنه. وقتی کنترلر هر چند وقت یه بار می‌آد دوباره نگاه می‌کنه، مشکله رو درست می‌کنه.جدای از اینا، این دیزاین نسبت به این که بشکونیمش به تیکه‌های کوچیک و یه حالت میکروسرویسی داشته باشیم، کاملا انعطاف‌پذیره و علاوه بر این، همه‌ی کنترلرها statelessن و همه‌ی stateها جمع شده‌ن توی apiserver و هیچ‌جای دیگه لازم نیست دیتایی نگه داشته بشه.قطعا چنین طراحی‌ای چالشای خودش رو هم داره. توی کنترلر، عملیات‌های reconciliation باید idempotent باشن. idempotency چیه؟ به این معنیه که یه کاریو اگه دوبار یا ده بار انجام بدی فرقی با اینکه یه بار انجام بدی نداشته باشه. برای مثال اگه یه اندپوینت برای آپدیت یه رکورد توی دیتابیس داشته باشیم، اگه با یه محتوا چند بار callش کنیم، در نهایت فرقی با اینکه یه بار callش کنیم نداره. یعنی در واقع اون عملیات idempotentه. ولی مثلا اگه یه اندپوینتی داشته باشیم که یه رکوردی رو یکی اضافه کنه(counter)، قطعا idempotent نیست.حالا تو کنترلر چرا باید اینو داشته باشیم؟ چون بی‌نهایت بار قراره یه منیفست reconcile بشه و بدیهتا اگه یه وقتی در شرایط درستیه، نباید شرایطش تغییر کنه.یخرده بخوام در عمل توضیح بدم، توی کد کنترلر ما هیچ‌وقت یه چیزیو نمی‌سازیم یا پاکش نمی‌کنیم. ما توی کد کنترلر وجود یا عدم وجودش رو سینک می‌کنیم. یعنی مثلا اگه می‌خوایم باشه، کاری که می‌کنیم اینه که چک می‌کنیم که هست یا نه. اگه نبود، می‌سازیمش. اگه بود چک می‌کنیم محتواش همونیه که ما می‌خوایم یا نه. اگه همون نبود، آپدیتش می‌کنیم. و اگه همون بود، رهاش می‌کنیم.مثال سینک کردن یک deployment به روش کنترلریبخاطر اینه که می‌گن دیزاین کوبرنتیز جوریه که self-healingه. یعنی خودترمیم‌گره. اگه یه جایی خراب‌کاری بشه، بعدا بر می‌گرده درستش می‌کنه. هیچ‌وقت هم نگران میس شدن یه event نیستیم دیگه. چون اصلا سیستم با event کار نمی‌کنه و هر آن‌چه که هست و اهمیت داره stateه.در نهایت رویکردی که اینجا می‌بینیم تا حد خوبی با چیزی که برامون عادی باشه متفاوته. یه سری سختی‌هایی رو تحمیل می‌کنه به طراح و دولپر ولی در عین حال یه سیستمی رو در اختیارش قرار می‌ده که می‌تونه نگرانیای کم‌تری از نظر reliability داشته باشه. چون یه سری چالشا با این دیزاین از بین می‌رن.اگه دوست داشتین راجع به Controller Pattern عمیق‌تر بدونین و در عمل ببینید چه شکلیه، این پست‌ها براتون جالب خواهند بود:https://kubernetes.io/docs/concepts/architecture/controllerhttps://engineering.bitnami.com/articles/a-deep-dive-into-kubernetes-controllers.htmlپانوشت: با تشکر از زید خوبم که در تمامی مراحل نوشتن این پست پشتیبان و یاور من بود =)))</description><category>عماد محمدی</category><author>عماد محمدی</author><pubDate>Fri, 26 Feb 2021 21:54:12 +0330</pubDate></item><item><title>وقتی لودبالانسر لودت رو بالانس نمی‌کنه!</title><link>https://virgool.ir/@emadolsky/وقتی-لودبالانسر-لودت-رو-بالانس-نمی-کنه-sch4uiphktbt</link><description>همین چند وقت پیشا به یه مسئله‌ای خورده بودیم با بچه‌ها که خیلی طول کشید تا بتونیم مشکل رو پیدا کنیم و در پی اون من این پست رو می‌نویسم.داستان از این قرار بود که یه دیپلویمنتی داشتیم که یه کد قدیمی HTTP Server به زبان گو روش بالا اومده بود و داشت کار می‌کرد. این کده هم در واقع یه وب‌هوک بالا می‌آورد. یعنی ریکوئست‌ها به این سرویس از یه سرویس دیگه می‌اومدن. این شکلی هم بود که برای اینکه HA باشه، چند تا اینستنس داشت و روی اینستنس‌های مختلفش لودبالانس می‌کردیم. حالا ما یه تغییری روی کدش داده بودیم و می‌خواستیم دیپلویمنت رو آپدیت کنیم. از اونجایی که نگران بودیم تغییراتمون مشکلاتی برامون ایجاد کنه، گفتیم یهو همه‌ی بار رو نبریم رو دیپلویمنت جدید. در نتیجه، به اصطلاح قناری (canary) کردیم. به این صورت که اول ۱۰ درصد بار رو رو جدیده انداختیم، بعدش ۲۰ درصد، بعدش ۳۰ درصد. به این صورت این کارو کردیم که اومدیم از ۱۰ تا اینستنس قدیمی‌ای که بالا بود، یکی رو پایین آوردیم و به جاش جدیده رو بالا آوردیم و به همین شکل ادامه دادیم.اونجایی خیلی ناراحت شدیم که دیدیم هیچ ریکوئستی اون فیچر جدیدا رو نداره و دقیق‌تر که بررسی کردیم، دیدیم هیچ کدوم از جدیدا اصلا ریکوئستی نمی‌گیرن!و خب کل مدت ما اینجوری بودیم که:Load balancer! You had only one job!!!حالا مسئله این هم نیست همیشه. مثلا یه سرویسی داشتیم که ۳ تا اینستنس ازش بالا آورده بودیم و گذاشته بودیم پشت IPVS. اما لودشون اصلا بالانس نبود. مثلا به یکی ۲۰ درصد بیشتر از بقیه ریکوئست HTTP می‌رسید.تصویر متعلق به awsحالا اگه بخوایم یه صحبت کوچولویی راجع به لودبالانسینگ بکنیم، قراره لودو بالانس کنه دیگه. یعنی ماهیت و وظیفه‌ش خیلی ساده‌ست. منتها یه سوال خیلی مهم وجود داره که می‌تونه کلی داستان برای آدم درست کنه. سواله اینه که «این لودبالانسر تو کدوم لایه کار می‌کنه؟».لودبالانسرایی که ما باهاشون کار می‌کنیم عمدتا یا لایه ۴ (Transport Layer)ن یا لایه ۷ (Application Layer). توی فضای صحبت الانمون به صورت متناظر TCP Load Balancer و HTTP Load Balancer داریم. و خب اینا عملکردشون با هم فرق داره و نتایج استفاده از هر کدوم هم متفاوت می‌شه. فرقشون اینه که اولی کانکشن رو لودبالانس می‌کنه و بعدی ریکوئست HTTP رو. حالا چجوری این باعث عجایب(!) می‌شه؟ راجع به این قراره حرف بزنیم.ولی آدمای کمی داستانای تئوری دانش‌گاه‌طوری رو دوست دارن :)). اکثریت می‌خوان ببینن در عمل چی می‌شه. منم اول می‌خوام نشون بدم که در عمل چه تفاوتی می‌تونن داشته باشن.من ۳ تا نود دارم. روی یکی از این نودا یه HAProxy بالا می‌آرم (ubuntu1@192.168.56.101) و روی دو تا نود دیگه سروری که می‌خوام روش لودبالانس کنم رو (ubuntu2@192.168.56.102 و ubuntu3@192.168.56.103). و می‌خوام فرق‌های لودبالانس لایه ۴ و لایه ۷ رو روش ببینم.به کانفیگ دیفالت HAProxyم روی نود ۱ این کانفیگ‌ها رو اضافه می‌کنم:کانفیگ‌های لودبالانسینگ روی HAProxyیعنی این‌شکلی می‌شه که رو پورت ۸۰ لودبالانس لایه ۴ می‌کنه و رو پورت ۸۱ لودبالانس لایه ۷.علاوه بر این، یه کد کلاینت-سرور ساده‌ی گو هم برای تست کارهایی که می‌خوایم بکنیم زدم:کد کلاینت:تصویر قسمت اصلی کد کلاینتکد سرور:تصویر کد سرورحالا روی ۲ تا نود پشتی، کد سرور رو ران می‌کنیم. اول کد کلاینت رو با یه worker برای ۱۰ ثانیه به پورت ۸۱ که HTTP Load Balancer روش بالاست، روی لوکال سیستم، ران می‌کنیم. نتیجه یه همچین چیزی می‌شه:ترمینال بالا چپ نود ۱ - ترمینال پایین چپ لوکال - ترمینال وسط نود ۲ - ترمینال راست نود ۳ همونطور که واضحه، لودمون بالانس شده بین دوتا اینستنس.حالا همین تست رو به پورت ۸۰ که TCP Load Balancer روش بالاست تکرار می‌کنیم:وا! لود بالانس نشد! این دقیقا همون نقطه‌ایه که ما لودبالانسر گذاشتیم که لودمونو بالانس کنه ولی انگار نه انگار! ولی حالا بیایم یه تست دیگه بگیریم ببینیم چی می‌شه! به جای اینکه با یه worker بزنیم، با ۲تا worker هم‌زمان تست بگیریم:عه! لود بالانسه این دفعه! خب بیایم با ۳ تا worker هم بگیریم دیگه حالا:خب دوباره بالانس نیست! یکی ۲ برابر اون‌یکیه!چه اتفاقی داره می‌افته؟ جواب تو یه مکانیزمیه به اسم Keepalive. این Keepalive چی هست حالا؟ توضیح مفصلشو که سرچ کنیم پیدا می‌کنیم ولی خب خلاصه بخوایم بگیم، اینه که برای آپتیمایز کردن HTTP این مکانیزم ایجاد شده که ما نیایم برای هر ریکوئستمون به یه اندپوینت، کانکشن TCP بزنیم. اگه یه کانکشن زدیم، بعد اینکه تموم شد ریکوئستمون، نبندیمش. که اگه خواستیم دوباره ریکوئست بفرستیم به همونجا، رو همون کانکشن رد کنیم (به اصطلاح reuse کنیم کانکشن رو).دقیقا داستان ما هم همینه دیگه. این کلاینت ما داره از Keepalive استفاده می‌کنه (فکت: تو پکیج http زبان Go، فیچر Keepalive دیفالته) و زمانی که اولین ریکوئست به یکی از نودای ما می‌ره، دیگه بقیه‌ی ریکوئستا هم رو همون کانکشن اولی می‌رن. ولی وقتی ما دو workerه بزنیم، دوتا کانکشن داریم و چون کانکشنا داره لودبالانس می‌شه، یه worker به یه نود و worker دیگه به اون‌یکی نود می‌زنه.با توجه به این توضیحات، اگه ما به workerهامون بگیم که از Keepalive استفاده نکنن، رو پورت ۸۰ باید لود بالانس درست ببینیم (با یک worker):که همینطور هم می‌شه.ولی خب در عمل، اینکه ما Keepalive رو disable کنیم کار خوبی نیست. چون به ازای هر ریکوئست داریم کانکشن می‌زنیم که هزینه داره (حالا روی SSL هزینه‌ش بیشتر هم می‌شه).با توجه به همه‌ی این حرفا، آیا می‌تونیم بگیم که لودبالانس کردن HTTP با یه لودبالانسر لایه ۴ کار بد یا غلطیه؟ قطعا نه! بسته به ورک‌لودش کاملا می‌تونه فرق بکنه. یعنی مثلا ما اگه تعداد خیلی زیادی کلاینت داشته باشیم، اصلا این موضوع قابل صرف نظره. ولی خب اگه فقط یه کلاینت داشته باشیم که داره از این فیچر (Keepalive) استفاده می‌کنه انگاری اصلا لودبالانس نکرده‌یم. بعلاوه مثلا توی کیس‌هایی که می‌خوایم قناری کنیم و می‌خوایم یه درصدی از بار رو اینطوری پخش کنیم، این موضوع اهمیت پیدا می‌کنه. بعلاوه بهینگی لودبالانس لایه ۴ بیشتره و می‌شه آپتیمیزیشن‌های بیشتر و جدی‌تری روش اعمال کرد.هدف اصلی از این پست این بود که بیایم رفتار این دوتا رو تو یه سناریویی که ممکنه ما رو به تعحب بندازه مشاهده کنیم و راجع به دلیلش صحبت کنیم. چون خیلی جاها مثل اورکستریتورها یا کلاودها، لودبالانسرهایی که ارائه می‌شه، لودبالانسر لایه‌ی ۴ه.در نهایت هم این اولین بلاگ‌پست فنی‌ایه که دارم می‌نویسم و نمی‌دونم چقدر خوب تونستم چیزی که می‌خواستم رو ارائه کنم. امیدوارم که حال کرده باشید. خیلی خوش‌حال می‌شم فیدبک بگیرم که در آینده بتونم این مهارت رو توی خودم تقویت کنم. دم شما هم گرم :)).</description><category>عماد محمدی</category><author>عماد محمدی</author><pubDate>Fri, 12 Feb 2021 17:02:49 +0330</pubDate></item><item><title>برای کی داری زندگی می‌کنی؟</title><link>https://virgool.ir/@emadolsky/برای-کی-داری-زندگی-میکنی-vixq19etzslo</link><description>مهم‌ترین چیزی که پدر و مادر می‌تونن به بچه‌شون یاد بدن چیه؟ از بین همه‌ی اون کلیشه‌های «ادب» و «احترام به بزرگ‌تر» و «علم بهتر است از ثروت» و امثالهم؟این روزا خیلی فکر می‌کنم به اینکه شاید یه چیزی مهم‌تر از اینا باشه که خیلیا یاد نمی‌دن و خیلیام یادش نمی‌گیرن. اونم «احترام به خود» و «ارزش قائل بودن برای خود»‍ه.یه سری بزرگ می‌شن که بقیه رو از خودشون راضی کنن. بزرگ می‌شن که ارزش بدن به بقیه‌ی آدما و بقیه‌ی چیزا. آدمایی که موفقیتی کسب نمی‌کنن مگر اینکه آدمای دور و بر اسمشو موفقیت بذارن. مقبول خودشون نیستن تا وقتی بقیه قبولشون کنن. خودشونو دوست ندارن اگر دیگران دوستشون نداشته باشن.همیچین آدمی بودن راحت نیست. چون تابع شرایطی هستی که کنترل چندانی روش نداری. انگاری زندگیت دست خودت نیست. آدمای اون بیرون زندگیتو بالا و پایین می‌کنن.به مرور فراموش می‌کنی که باید خودتو دوست داشته باشی. فارغا چی این آدمو می‌خوای دوست داشته باشی؟ تملق نهانش برای گرفتن صلاحیتی که خودش نتونسته برای خودش متصور بشه؟ یا ضعفش تو اتکا به خودش؟از این بدتر نمی‌شه، نه؟ چرا. اصولا هر جا فکر می‌کنی بالاتر از سیاهی رنگی نیست، یه شرایطی برای خودت رقم می‌زنی که بهت ثابت شه هست. یه رنگی خیلی سیاه‌تر.کم کم دیگه با خودت کنار نمی‌آی. از خودت می‌پرسی «من که از هر کسی به خودم نزدیک‌ترم، نمی‌تونم خودمو بپذیرم! نمی‌تونم ارزشی توی خودم ببینم! نمی‌تونم خودمو دوست داشته باشم! چطور کس دیگه بتونه؟» و اینجا دیگه همه چیو می‌بازی.تا وقتی نتونی خودتو بپذیری و دنبال پذیرش بقیه‌ای، هیچ‌وقت آروم نمی‌شی. کسی بهت اینو یاد نداد. خودتم یادش نگرفتی.با این وجود،کی می‌تونی این رویه رو عوض کنی؟ نمی‌دونم.می‌تونی این رویه رو عوض کنی؟ نمی‌دونم.</description><category>عماد محمدی</category><author>عماد محمدی</author><pubDate>Sat, 16 Feb 2019 03:43:33 +0330</pubDate></item><item><title>اعتیاد به زندانی بودن</title><link>https://virgool.ir/@emadolsky/اعتیاد-به-زندانی-بودن-kbgmhzmqb38h</link><description>نمی‌دونم این حرفا از وقت‌های خالی و فکرای آشفته‌ای که در حال حاضر دارم نشأت گرفته یا نه، ولی یه سری سوالا خیلی ذهنمو مشغول کرده. که هزار تا سوال دیگه رو می‌کشونه وسط که جواب دادن به هر کدومشون برای خودش به مقدار زیادی پیچیده‌ست. سوال اینه که جایی که الان هستم، آدمی که هستم، علایقی که دارم، اهدافی که دارم و زندگی‌ای که دارم چقدرش متعلق به منه؟ چقدرش پیش اومده برام و چقدرشو خودم رقم زدم؟ چقدرش واقعا چیزی بوده که می‌خواستم و چقدرش چیزی بوده که بقیه می‌خواستن؟ چقدرش واقعا برام خوب بوده و چقدرش صرفا تعریف عمومی و کلیشه‌ای خوب بوده؟ من تو دوران دبیرستانم سعی کردم یه خرده بیشتر باشم از دیفالت یه دانش‌آموز. سعی کردم ثابت کنم با یه آدم عادی که کاراش براش تعریف شده و «باید» انجامش بده، تفاوت دارم. و حس خوبی بهم می‌داد. باعث شد یه بازه‌ی خوبی از زندگی دوران دبیرستانم به عنوان «تایم مفید» و «شکوفایی» تلقی بشه که تقریبا هدفمم همین بود بعلاوه‌ی یه مقداری نتیجه‌گرایی. ولی یه بار دیگه نگاه می‌کنم به گذشته و می‌بینم که این دو تا ارزشی که برای خودم تعریف کرده بودم شاید صدمه‌هایی بهم زده که الان تازه می‌تونم لمسشون کنم. اون بخش تایم مفید و شکوفایی، با این که باعث شد من مهارتایی پیدا کنم که پایه‌ی کارم بشه و مسیر دانشگاهیمو برام مشخص کنه، موجب این شد که من خیلی از دبیرستانم لذت نبرم. پروژه‌مون برام جذاب بود و حتی فعالیتایی که روش کردیم در سخت‌ترین شرایط هم جذبم می‌کرد. ولی اصولا نباید یه خرده بیشتر به خوش‌گذروندن بگذره اون تایما؟ من خیلی خاطره‌های تفریح ندارم از اون دوره‌م. یعنی الانا پیش رفیقام می‌شینیم و صحبت می‌کنیم و بعضا بحث دبیرستان می‌شه و اونا از خاطره‌ها و دیوونه‌بازیا و اتفاقاتی که براشون افتاده بود می‌گن، درحالی که من کل دوران دبیرستانمو تو کلاس درس و سایتی که توش رو پروژه کار می‌کردیم و مسیر بین این دوتا سیر کردم. بخش دیگه که بهش می‌گم نتیجه‌گرایی باعث می‌شد همیشه استرس داشته باشم و همیشه با خودم یه دلشوره‌ای رو حمل کنم. نزدیک ددلاینا و مسابقه‌ها من طوری از هم می‌پاشیدم که کنترل فکری و جسمیم از دستم خارج می‌شد و انواع آسیبا رو به خودم می‌زدم. طوری ذهنم درگیر می‌شد که انگاری دیگه نیازای طبیعی آدمیزادی مثل غذا خوردنو هم نداشتم و بعدش کلا از لحاظ جسمی می‌افتادم. خیلی عصبی می‌شدم و مثل دیوونه‌ها رفتار می‌کردم. این دو تا عنصر واقعا باعث این می‌شد که من متفاوت باشم از اون همه بچه‌های مدرسه و بعضا این حسو بکنم که من از اونا مفیدترم و دارم یه کار درست حسابی انجام می‌دم. قیمتشو ولی شاید نمی‌دونستم. یعنی خب منم یه بچه‌ی ۱۵-۱۶ ساله بودم که درونا دوست می‌داشت بره بیرون با دوستاش و دیوونه‌بازی دربیاره. یا مثلا منم مثل خیلیا یه کراشی داشتم و ذهنمو مشغول می‌کرد. یا اصلا منم خیلی اوقات دوست داشتم فقط لش کنم و هیچ کاری نکنم. ولی نتونستم به عمده‌ی اینا برسم. نمی‌گم هیچ‌وقت انجامشون ندادم ولی شاید هیچ‌وقت عمق لذتی که آدما از این دست کارا می‌برن رو تجربه نکردم چون هیچ‌وقت کنار نیومدم با خودم که اینطور باشم. توی اون دوره من با یه تعداد معدودی از بچه‌هامون ارتباط داشتم و با یه رفیقم خیلی نزدیک بودیم. اون دوره من خیلی سخت ارتباط می‌گرفتم با آدما. من آدم خیلی خوش‌حالی نبودم ولی متمرکز بودم در عین حال. یه جاهایی ممکن بود دیگه از خستگی و پریشونی از پا بیفتم ولی در نهایت داشتم کارمو می‌کردم و جلو می‌رفت. یه روزی تو پیش‌دانشگاهی دیگه شروع کرد که نره. من به خیلی از آرزوهام و هدفایی که داشتم رسیده بودم ولی هنوز خوشحال نبودم. گر چه با فکر کردن بهشون ذوق می‌کردم ولی برای یه مدت خیلی کوتاه. کنکور رو داشتم می‌خوندم و نتایجی که داشتم می‌گرفتم واقعا خیره‌کننده بود ولی اینا باعث نشد که روحیه‌ی ادامه بدست بیارم. شروع کردم به خودخوری کردن. فقط به چیزایی فکر کردم که نداشتمشون. فقط جاهایی رو دیدم که توشون خوب نبودم. جاهایی که گند زدم. چیزایی که نمی‌تونستم داشته باشم. و کم کم از یه آدم که حداقل از بیرون موفق به نظر می‌رسید، یه آدم که انگاری هیچی برای زندگی کردن نداره ساختم. کل تمرکزمو از دست دادم. در بدترین حال با بدحال‌ترین و فاجعه‌بارترین آدمایی که می‌تونستم توی مدرسه ارتباط برقرار کردم. خواستم همه‌ی اون چیزایی که نداشتم و از نداشتنشون ناراحت بودم رو در یک آن بدست بیارم. و از اون‌جایی که نمی‌تونستم، شروع کردم به دست و پا زدن و شرایط فقط بدتر و بدتر شد. می‌خواستم یهو کلی تفریح کنم. می‌خواستم یهو با دخترا ارتباط بگیرم و به زور رابطه‌ی عاطفی رو تجربه کنم. می‌خواستم آدما رو جذب خودم کنم و باهاشون ارتباط بگیرم. و طبیعتا هیچ‌کدوم از این اتفاقا نمی‌تونست یهو با فورس بیفته. توی منجلابی فرو رفتم که فرو رفتنش با خودم بود ولی بیرون اومدن ازش به هیچ وجه از پسم بر نمی‌اومد. اون دوره گذشت و بعد چندین ماه ریکاوری و روان‌درمانی تونستم به حالت عادی برگردم و زندگی نسبتا معقولی رو جلو ببرم و پیش‌دانشگاهی رو تموم کنم و برم سمت دانشگاه. تو دانشگاه برای یه مدتی نتونستم کار کنم و خیلی دانشگاه بودم و یه رابطه شروع کردم که اوضاع رو بهتر کرد یخرده و یه مقدار کمی تونست منو بکشونه بیرون از فضام. اونم بعد یه سال و نیم که تموم شد، من موندم و کارم و دانشگاهم و تکرار همون روند قدیمی. نان‌استاپ می‌خوام کار کنم ولی نمی‌تونم چون راندمان و انرژی کافی رو ندارم. ضمن این که مواقع تفریحمم نمی‌تونم با آرامش تفریحمو بکنم و با آدمای جدید خیلی ارتباط برقرار کنم. من بهش می‌گم اعتیاد به زندانی بودن؛ که قبلا تو سایت دبیرستان اتفاق می‌افتاد و الان تو شرکت. توی روزای تعطیل و غیر تعطیل. و کل زندگیمو فرا می‌گیره و کم کم فراموش می‌کنم که یه روزایی هم می‌اومد که حالم خوب بود. چیزی اگر قرار باشه من رو با بقیه تمییز بده، چه به عنوان یه دیوانه‌ی بازنده چه به عنوان یه آدم موفق، چه خوب، چه بد، ریشه‌ش توی همون دوره از زندگیمه که مشابهش الان در حال اتفاق افتادنه. من اگه اون دوره اون کارا رو نمی‌کردم مسیر زندگیم عوض می‌شد. شاید خیلی روتین‌تر از الان، بی‌حاشیه‌تر از الان و صادقانه، سطح پایین‌تر از الان می‌شد! ولی تهش ماها چی می‌خوایم؟ من آدم خوش‌حالی نبودم اون موقع، آدم خوش‌حالی نیستم الان، و در طول ۶-۷ سال اخیر شاید به اندازه‌ی یک سال، زندگی مورد علاقه‌مو نداشته‌م و خیلی اوقات سرکوب کرده‌م خودمو و خسته‌م. گر چه در عین تناقض، به خودم افتخار می‌کنم! حس می‌کنم به سوالات خودم اینطوری جواب می‌دم: جایی که الان هستم و بهش افتخار می‌کنم رو من برای خودم رقم زده‌م. آدمی که هستم اون آدمی هست که می‌خواستم برای بقیه باشم و آدمی نیست که می‌خواستم برای خودم باشم. بخشی از علایق درونی‌ی که دارم با کارایی که در طول روزم انجام می‌دم فاصله دارن و زندگیم یه تعارض بزرگ بین چیزاییه که دوست دارم و چیزایی که به نظرم درستن. اهدافی که داشتم یه بخش خوبیش برای این بوده که نشون بدم می‌تونم و متفاوتم. و تهش کی اهمیت می‌ده بجز خودم؟ خودمم که انگاری تو شرایط سخت اهمیت نمی‌دم. شرایط زندگی‌ای که دارم اگه خوب نباشه قطعا بد نیست، ولی مهم این نیست که توش خوش‌حال باشم؟ ولی جدا از اینا، در شرایط برعکس، آیا من می‌تونستم اینی که الان هستم نباشم و خیلی عادی‌تر از این زندگیمو ببرم جلو و بجای موقعیتایی که الان دارم، اون چیزایی که الان ندارمو داشته باشم؟ اینم خیلی سوال سختیه.</description><category>عماد محمدی</category><author>عماد محمدی</author><pubDate>Tue, 12 Feb 2019 02:41:12 +0330</pubDate></item></channel></rss>