چگونه از فایل .env در محیط لینوکس خودمون استفاده کنیم؟
همونطوری که توی پست مربوط به این فایل توضیح دادم ، وقتی بخوایم از متغییری برای اجرای دستورات متعدد استفاده کنیم ، میایم اون متغییر رو توی فایل .env قرار میدیم ، و ازش داخل دستورات مختلف استفاده میکنیم ، با همان منطق برنامه نویسی.
بیشتر کجا کاربرد داره؟ وقتی که توکن یا پسورد یا Key داریم و برامون مهمه که جایی این ها ذخیره باشن که هم جاشون امن باشه و هم بتونیم توی دستورات از آنها استفاده کنیم بدون نیاز به دوباره نوشتن آن ها.
اما نکته ای که داره ، باید قبل از استفاده از دستور زیر استفاده کنیم :
دستور source .env در واقع باعث میشود که متغیرهای محیطی تعریفشده در فایل .env در محیط فعلی ترمینال بارگذاری و در دسترس قرار گیرند.
وقتی شما از source استفاده میکنید، فایل .env بهصورت خط به خط اجرا میشود و هر متغیری که تعریف شده، در محیط فعلی فعال میشود. به این ترتیب، میتوانید از آن متغیرها در دستورات دیگر بدون نیاز به دوبارهنویسی مقدارشان استفاده کنید.
این کار برای زمانی مفید است که بخواهید مقادیر حساس یا طولانی را مدیریت کنید، بهخصوص در اسکریپتها یا دستوراتی که چندین بار اجرا میشوند.
توی یک فایل اسکریپتی هم به صورت زیر قرار میگیرد:
همونطوری که توی پست مربوط به این فایل توضیح دادم ، وقتی بخوایم از متغییری برای اجرای دستورات متعدد استفاده کنیم ، میایم اون متغییر رو توی فایل .env قرار میدیم ، و ازش داخل دستورات مختلف استفاده میکنیم ، با همان منطق برنامه نویسی.
بیشتر کجا کاربرد داره؟ وقتی که توکن یا پسورد یا Key داریم و برامون مهمه که جایی این ها ذخیره باشن که هم جاشون امن باشه و هم بتونیم توی دستورات از آنها استفاده کنیم بدون نیاز به دوباره نوشتن آن ها.
اما نکته ای که داره ، باید قبل از استفاده از دستور زیر استفاده کنیم :
source .env
دستور source .env در واقع باعث میشود که متغیرهای محیطی تعریفشده در فایل .env در محیط فعلی ترمینال بارگذاری و در دسترس قرار گیرند.
وقتی شما از source استفاده میکنید، فایل .env بهصورت خط به خط اجرا میشود و هر متغیری که تعریف شده، در محیط فعلی فعال میشود. به این ترتیب، میتوانید از آن متغیرها در دستورات دیگر بدون نیاز به دوبارهنویسی مقدارشان استفاده کنید.
این کار برای زمانی مفید است که بخواهید مقادیر حساس یا طولانی را مدیریت کنید، بهخصوص در اسکریپتها یا دستوراتی که چندین بار اجرا میشوند.
توی یک فایل اسکریپتی هم به صورت زیر قرار میگیرد:
password = ${MYSQL_ROOT_PASSWORD}👏1
اثر ماندلا چیست؟
اثر ماندلا (Mandela Effect) به پدیدهای گفته میشود که در آن تعداد زیادی از افراد بهطور نادرست یک رخداد، نام، یا جزئیات خاص را به یاد میآورند و باور دارند که این خاطرهها درست است. نام این اثر از خاطرات غلطی که بسیاری از افراد در مورد مرگ نلسون ماندلا داشتند، گرفته شده است. در دهه ۱۹۸۰، تعداد زیادی از مردم به اشتباه معتقد بودند که نلسون ماندلا در زندان جان خود را از دست داده است، در حالی که او در سال ۲۰۱۳، مدتها پس از آزادی، درگذشت.
این اثر اغلب با مسائل فرهنگی و اتفاقات روزمره نیز مرتبط میشود. برای مثال، افراد ممکن است جزئیات مربوط به نام یا شکل لوگوی یک برند، یا حتی نقل قولهای مشهور و دیالوگهای فیلمها را بهدرستی به یاد نیاورند و باور داشته باشند که نسخه دیگری از واقعیت وجود دارد.
از دیدگاه علمی، اثر ماندلا به اشتباهات حافظه و نحوه شکلگیری و بازسازی خاطرات مرتبط است. حافظه انسان به جای آنکه واقعیت را دقیقاً ضبط کند، گاهی اوقات با بازسازی خاطرات، دچار تحریف میشود.
موضوع جالبیه ، در موردش مطالعه کنید.
اثر ماندلا (Mandela Effect) به پدیدهای گفته میشود که در آن تعداد زیادی از افراد بهطور نادرست یک رخداد، نام، یا جزئیات خاص را به یاد میآورند و باور دارند که این خاطرهها درست است. نام این اثر از خاطرات غلطی که بسیاری از افراد در مورد مرگ نلسون ماندلا داشتند، گرفته شده است. در دهه ۱۹۸۰، تعداد زیادی از مردم به اشتباه معتقد بودند که نلسون ماندلا در زندان جان خود را از دست داده است، در حالی که او در سال ۲۰۱۳، مدتها پس از آزادی، درگذشت.
این اثر اغلب با مسائل فرهنگی و اتفاقات روزمره نیز مرتبط میشود. برای مثال، افراد ممکن است جزئیات مربوط به نام یا شکل لوگوی یک برند، یا حتی نقل قولهای مشهور و دیالوگهای فیلمها را بهدرستی به یاد نیاورند و باور داشته باشند که نسخه دیگری از واقعیت وجود دارد.
از دیدگاه علمی، اثر ماندلا به اشتباهات حافظه و نحوه شکلگیری و بازسازی خاطرات مرتبط است. حافظه انسان به جای آنکه واقعیت را دقیقاً ضبط کند، گاهی اوقات با بازسازی خاطرات، دچار تحریف میشود.
موضوع جالبیه ، در موردش مطالعه کنید.
Medical News Today
Mandela Effect: Examples and explanation
The Mandela effect is one popular but heavily debated type of false memory. Learn more about it here, including potential causes and some famous examples.
👍2
This media is not supported in your browser
VIEW IN TELEGRAM
TCP vs UDP Comparison!
This media is not supported in your browser
VIEW IN TELEGRAM
چالش های شروع و رشد یک کسب و کار
❤🔥4🔥2👍1
داکر چیست و چه ساختاری داره؟
(پارت اول)
داکر دقیقا چیه؟
داکر یه پلتفرمه که به شما کمک میکنه برنامههاتون رو به شکل کانتینر (Container) اجرا کنید. حالا کانتینر چیه؟! کانتینر یه محیط بسته و ایزوله شدهست که برنامه شما رو با همه چیزایی که نیاز داره (مثل کتابخانهها و تنظیمات خاص) تو خودش نگه میداره. این یعنی برنامهتون بدون دردسر از یه سیستم به سیستم دیگه منتقل میشه و اجرا میشه، بدون اینکه وابسته به تنظیمات و نرمافزارهای اون سیستم خاص باشه. البته که نرم افزار هایی که روی کرنل ویندوز کانتینر میشن روی تمامی سیستم عامل های ویندوز قابلیت اجرا داشته و اونایی هم که روی لینوکس کانتینر میشن ، روی توزیع های لینوکس قابلیت اجرا دارن
چرا؟
چون کانتینرهای داکر به سیستمعاملی که روی اون اجرا میشن وابسته هستن، به این معنی که کانتینرهای ویندوز فقط روی هسته ویندوز و کانتینرهای لینوکس فقط روی هسته لینوکس اجرا میشن.
چرا داکر اینقدر پرطرفداره؟
فرض کنید برنامهتون توی کامپیوتر خودتون عالی کار میکنه، ولی وقتی اون رو روی سرور یا یه سیستم دیگه اجرا میکنید، با مشکلاتی مواجه میشه. دلیلش اینه که شاید اون سیستم یه کتابخونه یا تنظیم خاصی که برنامه نیاز داره، نداشته باشه. اینجا داکر به دادتون میرسه، چون همه چیز رو توی یه بسته (همون کانتینر) جمع میکنه و تضمین میکنه که برنامه همونطوری که توی کامپیوتر شما اجرا میشه، روی هر سیستم دیگهای هم به همون شکل کار کنه.
داکر چند تا مزیت بزرگ داره:
قابل حمل بودن: کانتینرها رو میتونید به راحتی از یه سیستم به سیستم دیگه منتقل کنید و مطمئن باشید که به همون شکل کار میکنن.
ایزوله بودن: هر کانتینر به شکل مستقل از بقیه کانتینرها کار میکنه، یعنی اگه توی یکی از کانتینرها مشکلی پیش بیاد، بقیه کانتینرها تحت تأثیر قرار نمیگیرن.
سبکی و سرعت: کانتینرها نسبت به ماشینهای مجازی خیلی سبکتر و سریعتر هستن، چون نیازی به راهاندازی سیستمعامل کامل ندارن؛ فقط چیزایی که برنامه نیاز داره رو فراهم میکنن.
کانتینر بهتره یا ماشین مجازی؟
هر دوشون راههایی برای ایزوله کردن برنامهها و سرویسها هستن، ولی کانتینرها سبکتر و سریعتر هستن. ماشینهای مجازی (مثل VMware یا VirtualBox) کل سیستمعامل رو شبیهسازی میکنن، ولی کانتینرها فقط چیزهایی که برنامه نیاز داره رو فراهم میکنن. برای همین استفاده از کانتینرها به منابع کمتری نیاز داره و سریعتر راهاندازی میشن.
مقایسهای سادهتر
فرض کنید یه مجتمع مسکونی داریم:
ماشین مجازی شبیه اینه که هر واحد مسکونی (هر برنامه) یه برق، آب، و خدمات شهری جداگانه داشته باشه. هر واحد، مستقل و کامله، ولی هزینهها و منابع بیشتری مصرف میکنه.
کانتینر شبیه اینه که همه واحدهای مسکونی (برنامهها) از همون برق و آب شهری استفاده کنن، ولی دیوار و حریم خصوصی خودشون رو دارن. اینطوری، منابع مشترک هستن و مصرف کلی کمتره.
پس چرا کانتینرها سریعتر و سبکترن؟
چون در کانتینرها نیازی به سیستمعامل جداگانه برای هر برنامه نیست، فقط همون کتابخانهها و فایلهایی که برنامه نیاز داره در کانتینر قرار میگیره. به همین دلیل:
مصرف منابع کمتره: چون به حافظه و پردازنده کمتری نیاز داریم.
زمان راهاندازی سریعتره: چون سیستمعامل جدیدی راهاندازی نمیشه؛ فقط محیط برنامه اجرا میشه.
قابلیت مقیاسپذیری بیشتری داره: چون کانتینرها سریعتر ساخته و اجرا میشن، میتونید به راحتی تعداد زیادی کانتینر رو روی یه سرور ایجاد و مدیریت کنید.
مثالهای کاربردی
اگر بخواید یه وبسرور (مثل Nginx) رو روی یه سرور اجرا کنید، با کانتینر فقط همون Nginx و فایلهای پیکربندی موردنیازش توی یه محیط ایزوله قرار میگیرن.
اما اگه از ماشین مجازی استفاده کنید، علاوه بر Nginx باید یه سیستمعامل (مثل اوبونتو یا CentOS) هم داشته باشید که مصرف منابع رو بیشتر میکنه.
این ساختار سبک کانتینرها، دلیل اصلی محبوبیت داکره و اینه که شرکتها میتونن برنامههاشون رو سریعتر، با هزینه کمتر و کارایی بیشتر توی محیطهای ابری یا سرورهای محلی اجرا کنن.
چرا باید از داکر استفاده کنم؟
اگه نیاز دارید برنامهتون رو روی سیستمهای مختلف (مثل توسعه، تست، و تولید) به شکل یکسان اجرا کنید، یا اگه برنامههای زیادی دارید که میخواید به شکل مستقل از هم کار کنن، داکر یه ابزار عالیه. مخصوصاً توی محیطهایی که نیاز به مقیاسپذیری و سرعت بالا دارن، استفاده از داکر خیلی رایجه.
این پست قرار هست چندین پارت داشته باشه ، تا حد امکان هم عامیانه توضیح میدم ، جدای از پست آموزشی ، این برای خودمم یجور مرور به حساب میاد ، پس اگه علاقه مند هستید یا حوصله دارید ، مطالعه ی محتوای این سلسله پستها میتونه به دردتون بخوره!
(پارت اول)
داکر دقیقا چیه؟
داکر یه پلتفرمه که به شما کمک میکنه برنامههاتون رو به شکل کانتینر (Container) اجرا کنید. حالا کانتینر چیه؟! کانتینر یه محیط بسته و ایزوله شدهست که برنامه شما رو با همه چیزایی که نیاز داره (مثل کتابخانهها و تنظیمات خاص) تو خودش نگه میداره. این یعنی برنامهتون بدون دردسر از یه سیستم به سیستم دیگه منتقل میشه و اجرا میشه، بدون اینکه وابسته به تنظیمات و نرمافزارهای اون سیستم خاص باشه. البته که نرم افزار هایی که روی کرنل ویندوز کانتینر میشن روی تمامی سیستم عامل های ویندوز قابلیت اجرا داشته و اونایی هم که روی لینوکس کانتینر میشن ، روی توزیع های لینوکس قابلیت اجرا دارن
چرا؟
چون کانتینرهای داکر به سیستمعاملی که روی اون اجرا میشن وابسته هستن، به این معنی که کانتینرهای ویندوز فقط روی هسته ویندوز و کانتینرهای لینوکس فقط روی هسته لینوکس اجرا میشن.
چرا داکر اینقدر پرطرفداره؟
فرض کنید برنامهتون توی کامپیوتر خودتون عالی کار میکنه، ولی وقتی اون رو روی سرور یا یه سیستم دیگه اجرا میکنید، با مشکلاتی مواجه میشه. دلیلش اینه که شاید اون سیستم یه کتابخونه یا تنظیم خاصی که برنامه نیاز داره، نداشته باشه. اینجا داکر به دادتون میرسه، چون همه چیز رو توی یه بسته (همون کانتینر) جمع میکنه و تضمین میکنه که برنامه همونطوری که توی کامپیوتر شما اجرا میشه، روی هر سیستم دیگهای هم به همون شکل کار کنه.
داکر چند تا مزیت بزرگ داره:
قابل حمل بودن: کانتینرها رو میتونید به راحتی از یه سیستم به سیستم دیگه منتقل کنید و مطمئن باشید که به همون شکل کار میکنن.
ایزوله بودن: هر کانتینر به شکل مستقل از بقیه کانتینرها کار میکنه، یعنی اگه توی یکی از کانتینرها مشکلی پیش بیاد، بقیه کانتینرها تحت تأثیر قرار نمیگیرن.
سبکی و سرعت: کانتینرها نسبت به ماشینهای مجازی خیلی سبکتر و سریعتر هستن، چون نیازی به راهاندازی سیستمعامل کامل ندارن؛ فقط چیزایی که برنامه نیاز داره رو فراهم میکنن.
کانتینر بهتره یا ماشین مجازی؟
هر دوشون راههایی برای ایزوله کردن برنامهها و سرویسها هستن، ولی کانتینرها سبکتر و سریعتر هستن. ماشینهای مجازی (مثل VMware یا VirtualBox) کل سیستمعامل رو شبیهسازی میکنن، ولی کانتینرها فقط چیزهایی که برنامه نیاز داره رو فراهم میکنن. برای همین استفاده از کانتینرها به منابع کمتری نیاز داره و سریعتر راهاندازی میشن.
مقایسهای سادهتر
فرض کنید یه مجتمع مسکونی داریم:
ماشین مجازی شبیه اینه که هر واحد مسکونی (هر برنامه) یه برق، آب، و خدمات شهری جداگانه داشته باشه. هر واحد، مستقل و کامله، ولی هزینهها و منابع بیشتری مصرف میکنه.
کانتینر شبیه اینه که همه واحدهای مسکونی (برنامهها) از همون برق و آب شهری استفاده کنن، ولی دیوار و حریم خصوصی خودشون رو دارن. اینطوری، منابع مشترک هستن و مصرف کلی کمتره.
پس چرا کانتینرها سریعتر و سبکترن؟
چون در کانتینرها نیازی به سیستمعامل جداگانه برای هر برنامه نیست، فقط همون کتابخانهها و فایلهایی که برنامه نیاز داره در کانتینر قرار میگیره. به همین دلیل:
مصرف منابع کمتره: چون به حافظه و پردازنده کمتری نیاز داریم.
زمان راهاندازی سریعتره: چون سیستمعامل جدیدی راهاندازی نمیشه؛ فقط محیط برنامه اجرا میشه.
قابلیت مقیاسپذیری بیشتری داره: چون کانتینرها سریعتر ساخته و اجرا میشن، میتونید به راحتی تعداد زیادی کانتینر رو روی یه سرور ایجاد و مدیریت کنید.
مثالهای کاربردی
اگر بخواید یه وبسرور (مثل Nginx) رو روی یه سرور اجرا کنید، با کانتینر فقط همون Nginx و فایلهای پیکربندی موردنیازش توی یه محیط ایزوله قرار میگیرن.
اما اگه از ماشین مجازی استفاده کنید، علاوه بر Nginx باید یه سیستمعامل (مثل اوبونتو یا CentOS) هم داشته باشید که مصرف منابع رو بیشتر میکنه.
این ساختار سبک کانتینرها، دلیل اصلی محبوبیت داکره و اینه که شرکتها میتونن برنامههاشون رو سریعتر، با هزینه کمتر و کارایی بیشتر توی محیطهای ابری یا سرورهای محلی اجرا کنن.
چرا باید از داکر استفاده کنم؟
اگه نیاز دارید برنامهتون رو روی سیستمهای مختلف (مثل توسعه، تست، و تولید) به شکل یکسان اجرا کنید، یا اگه برنامههای زیادی دارید که میخواید به شکل مستقل از هم کار کنن، داکر یه ابزار عالیه. مخصوصاً توی محیطهایی که نیاز به مقیاسپذیری و سرعت بالا دارن، استفاده از داکر خیلی رایجه.
Medium
DOCKER EXPLAINED
1 — INTRODUCTION :
❤🔥5❤1👍1
This media is not supported in your browser
VIEW IN TELEGRAM
مقایسه درآمد جف بزوس با کارگر کمپانیش تو هر ثانیهای که از مکالمشون داره میگذره.
❤🔥3👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Cybersecurity doesn’t have to be hard…
You might feel intimidated by how much there is to learn.
You might feel intimidated by how much there is to learn.
❤🔥3
آیا میشه به سرور لینوکسی ریموت دسکتاپ یا RDP زد؟
این امکان وجود دارد بتونیم به یک سرور لینوکسی که از پکیج دسکتاپ برخوردار هست ، ریموت دسکتاپ بزنیم ، خیلی حرکت عجیبی هم نیست اما خب دونستنش خالی از لطف نیست براتون .
فقط کافیه خط به خط کد های زیر رو روی سرور لینوکسی خودتون اجرا کنید :
و تمام ، حالا میتونید با باز کردن برنامه ی Remote Desktop یا mstsc روی ویندوز خودتون ، به سرور لینوکسی ریموت دسکتاپ بزنید .
نکته ی مهم : اگر به صورت لوکال به سرور لینوکسی متصل هستید ، حتما و حتما لاگ اوت یا Log Out کنید ، بعد تلاش کنید که ریموت دسکتاپ بزنید به سیستم ، چرا چون اگر یک Session فعال روی سرور لینوکسی داشته باشید ، امکان ریموت دسکتاپ زدن را به شما نمیدهد.
خیلی کار عجیبی نیست ، اما خب آپشن های دیگری هم برای اتصال به محیط دسکتاپ سرور لینوکسی وجود دارد ، ولی این گزینه جزو راحت ترین گزینه های موجود هست که با همین چند خط کد میتونید به سادگی به محیط سرور دلخواهتون وصل بشید
راه حل دیگه هم استفاده از VNC (مثلاً TigerVNC یا RealVNC)
مزایا: کنترل کامل بر دسکتاپ با کیفیت تصویر بهتر نسبت به xrdp در برخی موارد.
معایب: نیاز به نصب سرور VNC روی کالی و کلاینت VNC در دستگاه شما، و همچنین احتمالاً سرعت کمتر در اتصالات با پهنای باند محدود.
در واقع VNC یکی از رایجترین راهها برای اتصال به دسکتاپ گرافیکی از راه دور است و میتوانید از برنامههای مختلف VNC (مانند RealVNC یا TigerVNC) استفاده کنید. برای امنیت بیشتر، معمولاً اتصال VNC روی SSH تونل میشود.
این امکان وجود دارد بتونیم به یک سرور لینوکسی که از پکیج دسکتاپ برخوردار هست ، ریموت دسکتاپ بزنیم ، خیلی حرکت عجیبی هم نیست اما خب دونستنش خالی از لطف نیست براتون .
فقط کافیه خط به خط کد های زیر رو روی سرور لینوکسی خودتون اجرا کنید :
sudo apt update
sudo apt install xrdp -y
sudo systemctl start xrdp
sudo systemctl start xrdp-sesman
sudo update-rc.d xrdp enable
و تمام ، حالا میتونید با باز کردن برنامه ی Remote Desktop یا mstsc روی ویندوز خودتون ، به سرور لینوکسی ریموت دسکتاپ بزنید .
نکته ی مهم : اگر به صورت لوکال به سرور لینوکسی متصل هستید ، حتما و حتما لاگ اوت یا Log Out کنید ، بعد تلاش کنید که ریموت دسکتاپ بزنید به سیستم ، چرا چون اگر یک Session فعال روی سرور لینوکسی داشته باشید ، امکان ریموت دسکتاپ زدن را به شما نمیدهد.
خیلی کار عجیبی نیست ، اما خب آپشن های دیگری هم برای اتصال به محیط دسکتاپ سرور لینوکسی وجود دارد ، ولی این گزینه جزو راحت ترین گزینه های موجود هست که با همین چند خط کد میتونید به سادگی به محیط سرور دلخواهتون وصل بشید
راه حل دیگه هم استفاده از VNC (مثلاً TigerVNC یا RealVNC)
مزایا: کنترل کامل بر دسکتاپ با کیفیت تصویر بهتر نسبت به xrdp در برخی موارد.
معایب: نیاز به نصب سرور VNC روی کالی و کلاینت VNC در دستگاه شما، و همچنین احتمالاً سرعت کمتر در اتصالات با پهنای باند محدود.
در واقع VNC یکی از رایجترین راهها برای اتصال به دسکتاپ گرافیکی از راه دور است و میتوانید از برنامههای مختلف VNC (مانند RealVNC یا TigerVNC) استفاده کنید. برای امنیت بیشتر، معمولاً اتصال VNC روی SSH تونل میشود.
YouTube
How to Setup Remote Desktop in Kali Linux Using XRDP | Kali Linux 2021.2
In this video tutorial, I am gonna show how to setup remote desktop in Kali Linux using XRDP, so that you can use your windows remote desktop to access Kali desktop from anywhere. XRDP is an open-source implementation of the Microsoft Remote Desktop Protocol…
❤🔥3❤1👍1
This media is not supported in your browser
VIEW IN TELEGRAM
The source code of Windows’ troubleshooting program has leaked.
❤🔥3👍1
دکوراتورها در پایتون ابزارهایی هستند که به ما امکان میدهند رفتار توابع را بدون تغییر در کد اصلی آنها گسترش دهیم.
🧩 دکوراتورها با افزودن قابلیتهای جدید به توابع، کد را بهینه میکنند و از تکرار جلوگیری میکنند. این امر به خوانایی و نگهداری بهتر کد کمک میکند.
🔄 استفاده از دکوراتورها به ما این امکان را میدهد که بدون تغییر در توابع اصلی، قابلیتهای جدیدی اضافه کنیم و کدها انعطافپذیرتر شوند.
🛠️ ساختار دکوراتورها به ما اجازه میدهد قبل و بعد از اجرای توابع اصلی، کارهایی انجام دهیم؛ این ویژگی برای مواردی مانند لاگکردن یا بررسی ورودیها مفید است.
⚠️ یکی از چالشهای استفاده از دکوراتورها این است که ممکن است نام توابع اصلی در زمان دیباگ کردن قابل شناسایی نباشد و به مشکلاتی در شناسایی خطاها منجر شود.
📈 استفاده از کتابخانه "functools" میتواند به حفظ هویت اصلی توابع کمک کند و از مشکلات اورراید جلوگیری کند، و امنیت بیشتری فراهم آورد.
🤔 درک صحیح از دکوراتورها و نحوهی کارکرد آنها نیاز به زمان و تمرین دارد؛ این مفهوم میتواند در ابتدا گیجکننده باشد، اما با تمرین به راحتی قابل فهم میشود.
💡 استفاده معقول از دکوراتورها میتواند به بهبود کیفیت کد کمک کند، اما افراط در استفاده ممکن است کد را پیچیده کند و باید در نظر گرفت تا کدها قابل نگهداری و توسعه باقی بمانند.
https://youtu.be/CuCudHMIPi4?si=_g-sZfyso-vpl_Qe
🧩 دکوراتورها با افزودن قابلیتهای جدید به توابع، کد را بهینه میکنند و از تکرار جلوگیری میکنند. این امر به خوانایی و نگهداری بهتر کد کمک میکند.
🔄 استفاده از دکوراتورها به ما این امکان را میدهد که بدون تغییر در توابع اصلی، قابلیتهای جدیدی اضافه کنیم و کدها انعطافپذیرتر شوند.
🛠️ ساختار دکوراتورها به ما اجازه میدهد قبل و بعد از اجرای توابع اصلی، کارهایی انجام دهیم؛ این ویژگی برای مواردی مانند لاگکردن یا بررسی ورودیها مفید است.
⚠️ یکی از چالشهای استفاده از دکوراتورها این است که ممکن است نام توابع اصلی در زمان دیباگ کردن قابل شناسایی نباشد و به مشکلاتی در شناسایی خطاها منجر شود.
📈 استفاده از کتابخانه "functools" میتواند به حفظ هویت اصلی توابع کمک کند و از مشکلات اورراید جلوگیری کند، و امنیت بیشتری فراهم آورد.
🤔 درک صحیح از دکوراتورها و نحوهی کارکرد آنها نیاز به زمان و تمرین دارد؛ این مفهوم میتواند در ابتدا گیجکننده باشد، اما با تمرین به راحتی قابل فهم میشود.
💡 استفاده معقول از دکوراتورها میتواند به بهبود کیفیت کد کمک کند، اما افراط در استفاده ممکن است کد را پیچیده کند و باید در نظر گرفت تا کدها قابل نگهداری و توسعه باقی بمانند.
https://youtu.be/CuCudHMIPi4?si=_g-sZfyso-vpl_Qe
YouTube
دکوریتور در پایتون | Decorator in Python
من در شبکه های اجتماعی دیگه:
اینستاگرام
https://instagram.com/am.mthri
کانال تلگرام
https://news.1rj.ru/str/mthri_tips
توییتر
https://twitter.com/a_mthri
وبلاگ
https://iamamir.ir
اینستاگرام
https://instagram.com/am.mthri
کانال تلگرام
https://news.1rj.ru/str/mthri_tips
توییتر
https://twitter.com/a_mthri
وبلاگ
https://iamamir.ir
👍5❤🔥2
چگونه پوت های باز روی سرور لینوکسی خود را ببینیم؟
ابزار های زیادی برای این کار وجود دارد ، اما یکی از آن ها:
استفاده از ابزار netstat:
ابتدا باید مطمئن باشیم که پکیج مروبطه بر روی سرور ما نصب باشد :
و بعد از نصب کامند زیر را اجرا میکنیم :
که هر آپشن در اینجا مشخص کننده ی یک ویژگی میباشد :
آپشن t : برای پروتکلهای TCP
آپشن u : برای پروتکل های UDP
آپشن l : برای نمایش پورتهایی که در حالت "LISTEN" هستند (در حال گوش دادن)
آپشن n : برای نمایش آدرسها به صورت عددی که دلبخواه است و میتوانید نزنید .
ابزار های زیادی برای این کار وجود دارد ، اما یکی از آن ها:
استفاده از ابزار netstat:
ابتدا باید مطمئن باشیم که پکیج مروبطه بر روی سرور ما نصب باشد :
apt install net-tools
و بعد از نصب کامند زیر را اجرا میکنیم :
sudo netstat -tuln
که هر آپشن در اینجا مشخص کننده ی یک ویژگی میباشد :
آپشن t : برای پروتکلهای TCP
آپشن u : برای پروتکل های UDP
آپشن l : برای نمایش پورتهایی که در حالت "LISTEN" هستند (در حال گوش دادن)
آپشن n : برای نمایش آدرسها به صورت عددی که دلبخواه است و میتوانید نزنید .
❤🔥4👍2
مفهوم HeartBeat در کلاستر ها !
در مباحث کلاسترینگ (خوشهبندی)، «heartbeat» به سیگنالهایی گفته میشود که بین گرهها (nodes) در کلاستر ارسال میشود تا وضعیت آنلاین یا آفلاین بودن هر گره را مشخص کند. این سیگنالها بهطور منظم و با فاصلههای زمانی کوتاه بین گرهها رد و بدل میشوند. اگر یکی از گرهها به هر دلیلی پاسخ ندهد یا heartbeat خود را ارسال نکند، سیستم متوجه میشود که آن گره دچار مشکل شده و ممکن است عملیات failover یا جابهجایی وظایف آن گره به گرههای دیگر را انجام دهد.
این مکانیزم در سیستمهای حساس و با دسترسپذیری بالا (high availability) بسیار مهم است تا مطمئن شویم که در صورت خرابی یکی از گرهها، سیستم بدون وقفه به کار خود ادامه میدهد.
اگه بخوایم مثالی بزنیم :
فرض کنید در یک بانک بزرگ از سیستم کلاسترینگ استفاده میشود تا خدمات مالی بدون وقفه به مشتریان ارائه شود. این بانک دو سرور دارد که بهطور موازی کار میکنند و اگر یکی از آنها دچار مشکل شود، دیگری بتواند بدون قطع خدمات به کار ادامه دهد. این دو سرور (که به آنها گره یا node گفته میشود) برای این منظور به یکدیگر heartbeat میفرستند.
1. ارسال و دریافت heartbeat:
هر چند ثانیه یک بار، هر یک از گرهها سیگنالی به نام heartbeat برای دیگری ارسال میکند. این سیگنال شامل اطلاعاتی مانند زمان ارسال، وضعیت عملکرد و بار فعلی سیستم است. هدف از ارسال این سیگنال این است که هر گره متوجه شود دیگری فعال است و به درستی کار میکند.
2. شناسایی خرابی گرهها:
فرض کنید گره ۱ بهدلیل بروز یک مشکل سختافزاری یا نرمافزاری از کار میافتد و دیگر قادر به ارسال heartbeat نیست. در این حالت، گره ۲ که سیگنال heartbeat را دریافت نکرده است، متوجه میشود که گره ۱ از دسترس خارج شده است. این شناسایی خرابی معمولاً بر اساس مدت زمانی که سیگنال heartbeat قطع شده است انجام میشود. اگر چند سیگنال پشت سر هم دریافت نشود (برای مثال، پس از ۳ ثانیه)، گره ۲ نتیجه میگیرد که گره ۱ دچار مشکل شده است.
3. اجرای failover یا جابهجایی وظایف:
با تشخیص خرابی گره ۱، گره ۲ فوراً وارد عمل میشود و وظایف گره از کار افتاده را به عهده میگیرد. به این فرآیند «failover» گفته میشود. در این مرحله، گره ۲ از دستورات و اطلاعاتی که برای حالت پشتیبان آماده کرده بود، استفاده میکند تا بدون هیچ قطعی، سرویسها و اطلاعات مورد نیاز کاربران را ارائه دهد.
4. بازگرداندن سیستم به حالت اصلی:
پس از تعمیر گره ۱ و بازگشت آن به حالت عادی، دو گره دوباره به تبادل heartbeat ادامه میدهند. بسته به نوع تنظیمات سیستم، ممکن است گره ۲ وظایف را به گره ۱ بازگرداند یا بهعنوان پشتیبان باقی بماند تا در صورت خرابی مجدد، باز هم بتواند وظایف را به عهده بگیرد.
در مباحث کلاسترینگ (خوشهبندی)، «heartbeat» به سیگنالهایی گفته میشود که بین گرهها (nodes) در کلاستر ارسال میشود تا وضعیت آنلاین یا آفلاین بودن هر گره را مشخص کند. این سیگنالها بهطور منظم و با فاصلههای زمانی کوتاه بین گرهها رد و بدل میشوند. اگر یکی از گرهها به هر دلیلی پاسخ ندهد یا heartbeat خود را ارسال نکند، سیستم متوجه میشود که آن گره دچار مشکل شده و ممکن است عملیات failover یا جابهجایی وظایف آن گره به گرههای دیگر را انجام دهد.
این مکانیزم در سیستمهای حساس و با دسترسپذیری بالا (high availability) بسیار مهم است تا مطمئن شویم که در صورت خرابی یکی از گرهها، سیستم بدون وقفه به کار خود ادامه میدهد.
اگه بخوایم مثالی بزنیم :
فرض کنید در یک بانک بزرگ از سیستم کلاسترینگ استفاده میشود تا خدمات مالی بدون وقفه به مشتریان ارائه شود. این بانک دو سرور دارد که بهطور موازی کار میکنند و اگر یکی از آنها دچار مشکل شود، دیگری بتواند بدون قطع خدمات به کار ادامه دهد. این دو سرور (که به آنها گره یا node گفته میشود) برای این منظور به یکدیگر heartbeat میفرستند.
1. ارسال و دریافت heartbeat:
هر چند ثانیه یک بار، هر یک از گرهها سیگنالی به نام heartbeat برای دیگری ارسال میکند. این سیگنال شامل اطلاعاتی مانند زمان ارسال، وضعیت عملکرد و بار فعلی سیستم است. هدف از ارسال این سیگنال این است که هر گره متوجه شود دیگری فعال است و به درستی کار میکند.
2. شناسایی خرابی گرهها:
فرض کنید گره ۱ بهدلیل بروز یک مشکل سختافزاری یا نرمافزاری از کار میافتد و دیگر قادر به ارسال heartbeat نیست. در این حالت، گره ۲ که سیگنال heartbeat را دریافت نکرده است، متوجه میشود که گره ۱ از دسترس خارج شده است. این شناسایی خرابی معمولاً بر اساس مدت زمانی که سیگنال heartbeat قطع شده است انجام میشود. اگر چند سیگنال پشت سر هم دریافت نشود (برای مثال، پس از ۳ ثانیه)، گره ۲ نتیجه میگیرد که گره ۱ دچار مشکل شده است.
3. اجرای failover یا جابهجایی وظایف:
با تشخیص خرابی گره ۱، گره ۲ فوراً وارد عمل میشود و وظایف گره از کار افتاده را به عهده میگیرد. به این فرآیند «failover» گفته میشود. در این مرحله، گره ۲ از دستورات و اطلاعاتی که برای حالت پشتیبان آماده کرده بود، استفاده میکند تا بدون هیچ قطعی، سرویسها و اطلاعات مورد نیاز کاربران را ارائه دهد.
4. بازگرداندن سیستم به حالت اصلی:
پس از تعمیر گره ۱ و بازگشت آن به حالت عادی، دو گره دوباره به تبادل heartbeat ادامه میدهند. بسته به نوع تنظیمات سیستم، ممکن است گره ۲ وظایف را به گره ۱ بازگرداند یا بهعنوان پشتیبان باقی بماند تا در صورت خرابی مجدد، باز هم بتواند وظایف را به عهده بگیرد.
YouTube
How to use Heartbeat and DRBD for HA (high availability)
We look into high availability using Heartbeat and DRBD. Heartbeat is a software to monitor and failover when a machine is unresponsive and DRBD can help you replicate data between machines making your setup highly available. This solution can help you doing…
❤🔥4👍2
چگونه تشخیص بدیم معماری سرور لینوکسی ما چی هست؟
برای تشخیص معماری سیستمعامل لینوکسی خود ، میتونیم از دستور زیر استفاده کنیم:
حالا با توجه به خروجی که میده میتونه در یکی از دسته های زیر قرار بگیرد:
اگر خروجی x86_64 باشد، معماری سیستم شما 64 بیتی و Intel یا AMD است.
اگر خروجی aarch64 باشد، سیستم شما 64 بیتی ARM است.
اگر خروجی armv7l یا armv6l باشد، سیستم شما 32 بیتی ARM است.
یک روش دیگه برای بررسی این موضوع استفاده از دستور زیر است :
خروجی هایی که این دستور میدهد :
اگر amd64 برای سیستمهای 64 بیتی مبتنی بر Intel یا AMD
اگر arm64 برای سیستمهای 64 بیتی ARM
اگر armhf برای سیستمهای 32 بیتی ARM
برای تشخیص معماری سیستمعامل لینوکسی خود ، میتونیم از دستور زیر استفاده کنیم:
uname -m
حالا با توجه به خروجی که میده میتونه در یکی از دسته های زیر قرار بگیرد:
اگر خروجی x86_64 باشد، معماری سیستم شما 64 بیتی و Intel یا AMD است.
اگر خروجی aarch64 باشد، سیستم شما 64 بیتی ARM است.
اگر خروجی armv7l یا armv6l باشد، سیستم شما 32 بیتی ARM است.
یک روش دیگه برای بررسی این موضوع استفاده از دستور زیر است :
dpkg --print-architecture
خروجی هایی که این دستور میدهد :
اگر amd64 برای سیستمهای 64 بیتی مبتنی بر Intel یا AMD
اگر arm64 برای سیستمهای 64 بیتی ARM
اگر armhf برای سیستمهای 32 بیتی ARM
👍7❤🔥2
در این ویدیو به تفاوتهای بین is و == و همچنین str و repr در پایتون پرداخته میشود.
تفاوت is و ==: is به آدرس حافظه و == به مقادیر واقعی آبجکتها توجه دارد.
استفاده از متد copy(): برای ایجاد کپی از لیستها و تفاوتهای بین آبجکتها کاربرد دارد.
متدهای str و repr: هر دو برای تبدیل آبجکتها به رشته استفاده میشوند، اما کاربردهای متفاوتی دارند.
اهمیت متد repr: برای دیباگ و نمایش دقیقتر اطلاعات آبجکتها مفید است.
توصیه به پیادهسازی هر دو متد: پیادهسازی همزمان str و repr برای جلوگیری از رفتار غیرمنتظره مهم است.
بررسی آدرسهای حافظه: با استفاده از id() میتوان فهمید که آیا دو آبجکت یکسان هستند یا خیر.
اهمیت یادگیری is و ==: درک دقیق این تفاوتها به بهبود کیفیت کد کمک میکند.
تفاوت بنیادی: is بررسی میکند که آیا دو متغیر به یک آدرس حافظه اشاره میکنند، در حالی که == بررسی میکند که آیا مقادیر آنها برابر هستند. این نکته برای جلوگیری از خطاهای منطقی بسیار مهم است.
کاربرد copy(): استفاده از copy() برای ایجاد کپیهای مستقل از لیستها ضروری است، زیرا اشتباه در این موضوع میتواند منجر به تغییرات ناخواسته شود.
دیباگینگ آسانتر: استفاده از repr در دیباگینگ کمک میکند تا اطلاعات بیشتری درباره نوع و وضعیت آبجکتها به دست آورید، که در شناسایی مشکلات کد بسیار مفید است.
پیادهسازی همزمان: همیشه توصیه میشود که هر دو متد str و repr را پیادهسازی کنید تا از رفتار غیرمنتظره جلوگیری کنید. عدم پیادهسازی یکی از آنها میتواند به نتایج غیرمنتظره منجر شود.
اهمیت آدرس حافظه: بررسی آدرس حافظه با استفاده از id() میتواند به شما بگوید که آیا دو متغیر به یک آبجکت اشاره میکنند یا خیر، که در تصمیمگیریهای منطقی بسیار حیاتی است.
تسلط بر مفاهیم: یادگیری و درک تفاوتهای بین is، == و متدهای رشتهای در پایتون به توسعهدهندگان کمک میکند تا کدهای بهتری بنویسند و از بروز خطاهای احتمالی جلوگیری کنند.
https://youtu.be/FNJ2NZxIhfs?si=fVAlS-fk7JEcvNvq
تفاوت is و ==: is به آدرس حافظه و == به مقادیر واقعی آبجکتها توجه دارد.
استفاده از متد copy(): برای ایجاد کپی از لیستها و تفاوتهای بین آبجکتها کاربرد دارد.
متدهای str و repr: هر دو برای تبدیل آبجکتها به رشته استفاده میشوند، اما کاربردهای متفاوتی دارند.
اهمیت متد repr: برای دیباگ و نمایش دقیقتر اطلاعات آبجکتها مفید است.
توصیه به پیادهسازی هر دو متد: پیادهسازی همزمان str و repr برای جلوگیری از رفتار غیرمنتظره مهم است.
بررسی آدرسهای حافظه: با استفاده از id() میتوان فهمید که آیا دو آبجکت یکسان هستند یا خیر.
اهمیت یادگیری is و ==: درک دقیق این تفاوتها به بهبود کیفیت کد کمک میکند.
تفاوت بنیادی: is بررسی میکند که آیا دو متغیر به یک آدرس حافظه اشاره میکنند، در حالی که == بررسی میکند که آیا مقادیر آنها برابر هستند. این نکته برای جلوگیری از خطاهای منطقی بسیار مهم است.
کاربرد copy(): استفاده از copy() برای ایجاد کپیهای مستقل از لیستها ضروری است، زیرا اشتباه در این موضوع میتواند منجر به تغییرات ناخواسته شود.
دیباگینگ آسانتر: استفاده از repr در دیباگینگ کمک میکند تا اطلاعات بیشتری درباره نوع و وضعیت آبجکتها به دست آورید، که در شناسایی مشکلات کد بسیار مفید است.
پیادهسازی همزمان: همیشه توصیه میشود که هر دو متد str و repr را پیادهسازی کنید تا از رفتار غیرمنتظره جلوگیری کنید. عدم پیادهسازی یکی از آنها میتواند به نتایج غیرمنتظره منجر شود.
اهمیت آدرس حافظه: بررسی آدرس حافظه با استفاده از id() میتواند به شما بگوید که آیا دو متغیر به یک آبجکت اشاره میکنند یا خیر، که در تصمیمگیریهای منطقی بسیار حیاتی است.
تسلط بر مفاهیم: یادگیری و درک تفاوتهای بین is، == و متدهای رشتهای در پایتون به توسعهدهندگان کمک میکند تا کدهای بهتری بنویسند و از بروز خطاهای احتمالی جلوگیری کنند.
https://youtu.be/FNJ2NZxIhfs?si=fVAlS-fk7JEcvNvq
YouTube
'is' vs '==' and '__str__' vs '__repr__' in python
من در شبکه های اجتماعی دیگه:
اینستاگرام
https://instagram.com/am.mthri
کانال تلگرام
https://news.1rj.ru/str/mthri_tips
توییتر
https://twitter.com/a_mthri
وبلاگ
https://iamamir.ir
اینستاگرام
https://instagram.com/am.mthri
کانال تلگرام
https://news.1rj.ru/str/mthri_tips
توییتر
https://twitter.com/a_mthri
وبلاگ
https://iamamir.ir
❤🔥3👍2