Forwarded from 🎄 DevTwitter | توییت برنامه نویسی
چند وقت پیش با یکی از دوستام که برنامه نویس یه فروشگاه اینترنتی بزرگه، حرف میزدم. سایتشون یه وردپرس سنگین بود که ترافیکش از یه حدی که رد شد، شروع کرد به کند شدن و داون شدنهای پشت سر هم. مشکل چی بود؟ مثل همیشه، MySQL به گلوگاه تبدیل شده بود.
یه دوستی بهشون گفته بود که راهش واضحه، Read/Write Splitting. دیتابیس رو Replica بزنید، Readها رو بفرستید روی Replica و Writeها روی Primary، فشار کم میشه، مشکل حله!
من خندیدم گفتم: این روی کاغذ جواب میده، ولی توی یه فروشگاه واقعی به درد نمیخوره. فرض کن یه مشتری یه محصول رو میخره، ولی چون Replica هنوز Sync نشده، توی صفحه محصول هنوز موجود نشون داده میشه. بعد یکی دیگه میاد، خرید میکنه، و یهویی دوتا سفارش برای یه محصولی که فقط یکی ازش مونده ثبت میشه. حالا میخای چیکار کنی؟
پرسید پس چیکار کنیم؟
سه تا راه به ذهنم میرسید برای بهینه کردن.
اول کوئری های سنگین مثل لود محصولات رو redis cache کن، دیتابیس یکم نفس بکشه
دوم شاردینگ رو امتحان کن. جدول های ووکامرس رو روی یه دیتابیس دیگه ببر ببین فرقی میکنه یا نه
۳ اینکه چرا سبد خرید کاربرات رو توی دیتابیس نگه میداری؟ ببرشون روی ردیس
نمیدونم مشکلشون برطرف شد یا نه
ولی تجربه ثابت کرده وردپرس بالای دوهزار تا پست، دردسرش بیشتره تا منفعتش.
همین که بیزینستون بزرگ شد، به مهاجرت از وردپرس اقدام کنید,
@DevTwitter | <Mohammad Haquqatkhah/>
یه دوستی بهشون گفته بود که راهش واضحه، Read/Write Splitting. دیتابیس رو Replica بزنید، Readها رو بفرستید روی Replica و Writeها روی Primary، فشار کم میشه، مشکل حله!
من خندیدم گفتم: این روی کاغذ جواب میده، ولی توی یه فروشگاه واقعی به درد نمیخوره. فرض کن یه مشتری یه محصول رو میخره، ولی چون Replica هنوز Sync نشده، توی صفحه محصول هنوز موجود نشون داده میشه. بعد یکی دیگه میاد، خرید میکنه، و یهویی دوتا سفارش برای یه محصولی که فقط یکی ازش مونده ثبت میشه. حالا میخای چیکار کنی؟
پرسید پس چیکار کنیم؟
سه تا راه به ذهنم میرسید برای بهینه کردن.
اول کوئری های سنگین مثل لود محصولات رو redis cache کن، دیتابیس یکم نفس بکشه
دوم شاردینگ رو امتحان کن. جدول های ووکامرس رو روی یه دیتابیس دیگه ببر ببین فرقی میکنه یا نه
۳ اینکه چرا سبد خرید کاربرات رو توی دیتابیس نگه میداری؟ ببرشون روی ردیس
نمیدونم مشکلشون برطرف شد یا نه
ولی تجربه ثابت کرده وردپرس بالای دوهزار تا پست، دردسرش بیشتره تا منفعتش.
همین که بیزینستون بزرگ شد، به مهاجرت از وردپرس اقدام کنید,
@DevTwitter | <Mohammad Haquqatkhah/>
Forwarded from Ninja Learn | نینجا لرن
خب خب خب پشت صحنه دکوریتورها در پایتون: چه اتفاقی پشت پرده میافته؟ 🚀
تو پست قبلی یه نگاه کلی به دکوریتورها داشتیم و دیدیم چقدر میتونن کاربردی باشن. ولی بیاین یه کم عمیقتر بشیم و ببینیم وقتی یه دکوریتور روی تابع یا کلاس اعمال میشه، دقیقاً چه اتفاقی پشت صحنه رخ میده؟ حتی قبل از اینکه کد اجرا بشه.
1⃣ پایتون چطوری کد رو اجرا میکنه؟ 📜
قبل از اینکه بریم سراغ دکوریتورها، یه نکته مهم:
پایتون یه زبان مفسریه، یعنی خطبهخط کد رو اجرا میکنه. ولی قبل از اجرا، اول کد رو به بایتکد تبدیل میکنه و بعد اون رو میفرسته برای ماشین مجازی پایتون (PVM).
تو این فرآیند، هر تابع و کلاس یه آبجکت جداگانه توی حافظه میشه و همینجاست که دکوریتورها وارد عمل میشن 🚀
2⃣ دکوریتورها دقیقاً چیکار میکنن؟ 🔧
1⃣ وقتی @ میذاریم، واقعاً چی میشه؟
وقتی یه تابع رو با @my_decorator دکوریت میکنیم، پایتون پشت صحنه این کارو انجام میده:
میشه این:
یعنی تابع اصلی ساخته میشه، بعد به دکوریتور داده میشه و خروجی دکوریتور جایگزین تابع اصلی میشه. این اتفاق در لحظه تعریف تابع رخ میده، نه وقتی تابع اجرا میشه
2⃣ ترتیب اجرا چطوریه؟
وقتی دکوریتور روی تابع اعمال میشه:
پس، از این به بعد هر وقت تابع رو صدا بزنید، در واقع دارید خروجی دکوریتور رو اجرا میکنید، نه تابع اصلی رو
3⃣ چه بلایی سر تابع میاد؟ 🔍
1⃣ تابع اصلی تبدیل میشه به...
هر تابع تو پایتون یه آبجکته، پس دکوریتورها میتونن روش تغییرات زیادی بدن:
قبل از اجرا یه کار انجام بدن (مثلاً لاگ بگیرن).
تابع اصلی رو اجرا کنن.
بعد از اجرا هم یه کار دیگه انجام بدن (مثلاً خروجی رو دستکاری کنن).
یا حتی یه چیز کاملاً جدید برگردونن
در نتیجه، اسم تابع دیگه به اون چیزی که اول تعریف کردید اشاره نمیکنه، بلکه به خروجی دکوریتور اشاره داره.
2⃣ مشکل متادیتا و راهحل functools.wraps
یه مشکل اینه که دکوریتور باعث میشه اطلاعات تابع (مثل نام، توضیحات و...) از بین بره. برای حل این مشکل، باید از functools.wraps استفاده کنیم:
اینطوری، متادیتای تابع اصلی حفظ میشه وdoc __doc__ دسترسی داشت. 😎
3⃣ دکوریتورهای پشت سر هم (Chaining Decorators)
اگه چندتا دکوریتور رو روی یه تابع بذاریم، ترتیبش مهمه. به این مثال دقت کن:
اول decorator_b اجرا میشه و خروجیش میره تو decorator_a. پس ترتیب اجرا به این شکله:
پس، دکوریتوری که پایینتر نوشته شده، زودتر اجرا میشه 🔄
4⃣ پشت صحنه در زمان کامپایل و اجرا 🕒
1⃣ دکوریتور کی اجرا میشه؟
دکوریتورها همون موقعی که تابع یا کلاس تعریف میشه اجرا میشن، نه وقتی که تابع رو صدا میزنید. پس این کد:
در لحظهای که پایتون به این خط کد میرسه، my_decorator(my_func) اجرا میشه و خروجیش جایگزین my_func میشه.
2⃣ ذخیره تابع در فضای نام (Namespace Binding)
بعد از این فرآیند، اسم تابع به تابع دکوریتشده اشاره میکنه. پس اگه تابع اصلی رو نگه نداشته باشید، دیگه بهش دسترسی ندارید
3⃣ تأثیر روی بهینهسازی
چون دکوریتورها میتونن کد تابع رو تغییر بدن، ممکنه باعث بشن که بهینهسازیهایی که پایتون انجام میده، دیگه درست کار نکنه. برای مثال، اگه دکوریتور یه حلقه اضافه کنه یا اجرای تابع رو تغییر بده، بایتکد نهایی کاملاً متفاوت میشه.
5⃣ نکات مهم که باید رعایت کنید 💡
✅ از functools.wraps استفاده کنید
اگه دکوریتورتون متادیتای تابع رو تغییر میده، این کار باعث میشه اطلاعات تابع اصلی حفظ بشه.
✅ ترتیب دکوریتورها مهمه
اگه چند دکوریتور دارید، حتماً ترتیب اجرا رو بررسی کنید که به مشکل نخورید.
✅ موقع اشکالزدایی حواستون باشه
چون دکوریتورها موقع تعریف اجرا میشن، اگه کدتون مشکل داشته باشه، ممکنه سختتر اشکالزدایی بشه. پس بهتره با print یا لاگ گرفتن، مراحل اجرا رو چک کنید.
➖➖➖➖➖➖➖➖➖
تو پست قبلی یه نگاه کلی به دکوریتورها داشتیم و دیدیم چقدر میتونن کاربردی باشن. ولی بیاین یه کم عمیقتر بشیم و ببینیم وقتی یه دکوریتور روی تابع یا کلاس اعمال میشه، دقیقاً چه اتفاقی پشت صحنه رخ میده؟ حتی قبل از اینکه کد اجرا بشه.
1⃣ پایتون چطوری کد رو اجرا میکنه؟ 📜
قبل از اینکه بریم سراغ دکوریتورها، یه نکته مهم:
پایتون یه زبان مفسریه، یعنی خطبهخط کد رو اجرا میکنه. ولی قبل از اجرا، اول کد رو به بایتکد تبدیل میکنه و بعد اون رو میفرسته برای ماشین مجازی پایتون (PVM).
تو این فرآیند، هر تابع و کلاس یه آبجکت جداگانه توی حافظه میشه و همینجاست که دکوریتورها وارد عمل میشن 🚀
2⃣ دکوریتورها دقیقاً چیکار میکنن؟ 🔧
1⃣ وقتی @ میذاریم، واقعاً چی میشه؟
وقتی یه تابع رو با @my_decorator دکوریت میکنیم، پایتون پشت صحنه این کارو انجام میده:
@my_decorator
def func(...):
...
میشه این:
def func(...):
...
func = my_decorator(func)
یعنی تابع اصلی ساخته میشه، بعد به دکوریتور داده میشه و خروجی دکوریتور جایگزین تابع اصلی میشه. این اتفاق در لحظه تعریف تابع رخ میده، نه وقتی تابع اجرا میشه
2⃣ ترتیب اجرا چطوریه؟
وقتی دکوریتور روی تابع اعمال میشه:
تابع اصلی به عنوان یه آبجکت ساخته میشه.
دکوریتور اجرا میشه و تابع اصلی رو میگیره.
خروجی دکوریتور جایگزین تابع اصلی میشه.
پس، از این به بعد هر وقت تابع رو صدا بزنید، در واقع دارید خروجی دکوریتور رو اجرا میکنید، نه تابع اصلی رو
3⃣ چه بلایی سر تابع میاد؟ 🔍
1⃣ تابع اصلی تبدیل میشه به...
هر تابع تو پایتون یه آبجکته، پس دکوریتورها میتونن روش تغییرات زیادی بدن:
قبل از اجرا یه کار انجام بدن (مثلاً لاگ بگیرن).
تابع اصلی رو اجرا کنن.
بعد از اجرا هم یه کار دیگه انجام بدن (مثلاً خروجی رو دستکاری کنن).
یا حتی یه چیز کاملاً جدید برگردونن
در نتیجه، اسم تابع دیگه به اون چیزی که اول تعریف کردید اشاره نمیکنه، بلکه به خروجی دکوریتور اشاره داره.
2⃣ مشکل متادیتا و راهحل functools.wraps
یه مشکل اینه که دکوریتور باعث میشه اطلاعات تابع (مثل نام، توضیحات و...) از بین بره. برای حل این مشکل، باید از functools.wraps استفاده کنیم:
import functools
def log_calls(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
print(f"قبل از اجرای {func.__name__}")
result = func(*args, **kwargs)
print(f"بعد از اجرای {func.__name__}")
return result
return wrapper
اینطوری، متادیتای تابع اصلی حفظ میشه وdoc __doc__ دسترسی داشت. 😎
3⃣ دکوریتورهای پشت سر هم (Chaining Decorators)
اگه چندتا دکوریتور رو روی یه تابع بذاریم، ترتیبش مهمه. به این مثال دقت کن:
@decorator_a
@decorator_b
def func():
pass
اول decorator_b اجرا میشه و خروجیش میره تو decorator_a. پس ترتیب اجرا به این شکله:
func = decorator_b(func)
func = decorator_a(func)
پس، دکوریتوری که پایینتر نوشته شده، زودتر اجرا میشه 🔄
4⃣ پشت صحنه در زمان کامپایل و اجرا 🕒
1⃣ دکوریتور کی اجرا میشه؟
دکوریتورها همون موقعی که تابع یا کلاس تعریف میشه اجرا میشن، نه وقتی که تابع رو صدا میزنید. پس این کد:
@my_decorator
def my_func():
pass
در لحظهای که پایتون به این خط کد میرسه، my_decorator(my_func) اجرا میشه و خروجیش جایگزین my_func میشه.
2⃣ ذخیره تابع در فضای نام (Namespace Binding)
بعد از این فرآیند، اسم تابع به تابع دکوریتشده اشاره میکنه. پس اگه تابع اصلی رو نگه نداشته باشید، دیگه بهش دسترسی ندارید
3⃣ تأثیر روی بهینهسازی
چون دکوریتورها میتونن کد تابع رو تغییر بدن، ممکنه باعث بشن که بهینهسازیهایی که پایتون انجام میده، دیگه درست کار نکنه. برای مثال، اگه دکوریتور یه حلقه اضافه کنه یا اجرای تابع رو تغییر بده، بایتکد نهایی کاملاً متفاوت میشه.
5⃣ نکات مهم که باید رعایت کنید 💡
✅ از functools.wraps استفاده کنید
اگه دکوریتورتون متادیتای تابع رو تغییر میده، این کار باعث میشه اطلاعات تابع اصلی حفظ بشه.
✅ ترتیب دکوریتورها مهمه
اگه چند دکوریتور دارید، حتماً ترتیب اجرا رو بررسی کنید که به مشکل نخورید.
✅ موقع اشکالزدایی حواستون باشه
چون دکوریتورها موقع تعریف اجرا میشن، اگه کدتون مشکل داشته باشه، ممکنه سختتر اشکالزدایی بشه. پس بهتره با print یا لاگ گرفتن، مراحل اجرا رو چک کنید.
#⃣ #python #programming
➖➖➖➖➖➖➖➖➖
🥷 CHANNEL | GROUP
Forwarded from Linux Labdon
Forwarded from LearnPOV | لرن پی او وی (Mohammad hossein)
واقعا keep it simple توی معماری و سیاست های shadcn به خوبی رعایت شده ...
یه جورایی میشه گفت shadcn تصمیم گرفت از محدودیت ها خارج بشه ؛)
شاید شما هم از خیلیا شنیده باشید که shadcn خیلی خوب و خفنه، ولی من ندیدم کسی بیاد به طور دقیق این مورد رو توضیح بده.
به زودی یه پست میزارم راجبش که ببینید چه ویژگی هایی وجود داره که انقدر shadcn رو نسبت به بقیه ui kit ها متمایز میکنه
#shadcn #tailwind #tips
یه جورایی میشه گفت shadcn تصمیم گرفت از محدودیت ها خارج بشه ؛)
𝗖𝗛𝗔𝗡𝗡𝗘𝗟 | 𝗚𝗥𝗢𝗨𝗣
Forwarded from Ninja Learn | نینجا لرن
Forwarded from 🎄 DevTwitter | توییت برنامه نویسی
لاراول نایتواچ - Laravel Nightwatch
تیلور آتوِل عزیز این ابزار خفنُ برای نظارت بر اپهای لاراولی ساخته که بهت کمک میکنه همیشه حواست به عملکرد و سلامت سیستمت باشه ولی هنوز ریلیز نشده. از درخواستها و لاگها گرفته تا ارورها و مسیرهای کند، همه رو زیر نظر داره و سریع بهت هشدار میده. دیگه Telescope و Pulse رو بنداز دور
https://www.youtube.com/watch?v=-fJnnAm1qBs
@DevTwitter | <Vahid Kaargar/>
تیلور آتوِل عزیز این ابزار خفنُ برای نظارت بر اپهای لاراولی ساخته که بهت کمک میکنه همیشه حواست به عملکرد و سلامت سیستمت باشه ولی هنوز ریلیز نشده. از درخواستها و لاگها گرفته تا ارورها و مسیرهای کند، همه رو زیر نظر داره و سریع بهت هشدار میده. دیگه Telescope و Pulse رو بنداز دور
https://www.youtube.com/watch?v=-fJnnAm1qBs
@DevTwitter | <Vahid Kaargar/>
Forwarded from کدنویس یکروزه (پدرام رحیمی)
nodejs-intro.pdf
739.3 KB
Forwarded from Ninja Learn | نینجا لرن
خب یه دوست گرامی انتخاب شد
با تشکر از همگی
با تشکر از همگی
Forwarded from 🎄 DevTwitter | توییت برنامه نویسی
Forwarded from 🎄 DevTwitter | توییت برنامه نویسی
#کارفرمای_آلت_چهره
دولوپر کیست؟
یک موجود که باید تمامی زبان های برنامه نویسی را بداند.
همیشه باید سکوت کند چون تمام برنامه نویسی از دید کارفرما چند if ساده است.
@DevTwitter | <بهزاد/>
دولوپر کیست؟
یک موجود که باید تمامی زبان های برنامه نویسی را بداند.
همیشه باید سکوت کند چون تمام برنامه نویسی از دید کارفرما چند if ساده است.
@DevTwitter | <بهزاد/>
Forwarded from Golden Code (علی 🇨🇴)
در MySQL میتونیم با استفاده از Table Partitioning جداول بزرگمونو به بخشهای کوچکتر تقسیم کنیم.
فایدش چیه؟؟
این کار query performance رو خیلی میتونه بهینه تر کنه برامون.
مثلا اگه جدول فروشمون خیلی بزرگ باشه و دیتاش شامل تاریخ فروش باشه، میتونیم جدولمونو بر اساس سال پارتیشنبندی کنیم و خب اینطوری وقتی بخوایم دیتاهای یه سال خاصی رو جستجو کنیم، فقط بخش مربوط به همون یه سال بررسی میشه که خب باعث میشه فرایند جستوجو سرعتش بهینه تر بشه.
#Laravel
@GoldenCodeir
(بهمنبع و مثالش دقت کنید 👇🏾)
https://x.com/mmartin_joo/status/1890023138622116289?t=bgrX4CCiL7eaLwpI9CAdYw&s=35
فایدش چیه؟؟
این کار query performance رو خیلی میتونه بهینه تر کنه برامون.
مثلا اگه جدول فروشمون خیلی بزرگ باشه و دیتاش شامل تاریخ فروش باشه، میتونیم جدولمونو بر اساس سال پارتیشنبندی کنیم و خب اینطوری وقتی بخوایم دیتاهای یه سال خاصی رو جستجو کنیم، فقط بخش مربوط به همون یه سال بررسی میشه که خب باعث میشه فرایند جستوجو سرعتش بهینه تر بشه.
#Laravel
@GoldenCodeir
(بهمنبع و مثالش دقت کنید 👇🏾)
https://x.com/mmartin_joo/status/1890023138622116289?t=bgrX4CCiL7eaLwpI9CAdYw&s=35
X (formerly Twitter)
Martin Joo (@mmartin_joo) on X
Table partitioning in MySQL can dramatically improve query performance by splitting large tables into smaller physical files.
🔥2
Forwarded from محتوای آزاد سهراب
اگر هنوز فکر میکنید از کرنل لینوکس چیز جدیدتری رخ نداده، باید بگم فدورا و obs سر یک بسته غیررسمی فلتپک از obs دارن به سروکله هم میزنن و احتمالا obs شکایت رسمی تنظیم کنه.
https://news.itsfoss.com/obs-studio-fedora-feud/
@SohrabContents
https://news.itsfoss.com/obs-studio-fedora-feud/
@SohrabContents
It's FOSS News
Open Sue! OBS Studio Threatens Fedora With Legal Action
Another day, another Linux-related drama. This time, it's OBS Studio and Fedora going at it.
Forwarded from 🎄 DevTwitter | توییت برنامه نویسی
WordPress DB VS joomla DB
مقایسه استراکچر دیتابیس جوملا با وردپرس
@DevTwitter | <Hamidreza Zolfaghar/>
مقایسه استراکچر دیتابیس جوملا با وردپرس
@DevTwitter | <Hamidreza Zolfaghar/>
Forwarded from 🎄 DevTwitter | توییت برنامه نویسی
نیاز به کمکتون دارم
اگر اپ موبایل مینویسید و سینیور محسوب میشید (ترجیحا هر چیزی غیر از react native)، یک راهنمایی در مورد حوزهی کاریتون نیاز دارم.
زبانهایی که کار میکنید، چالشها، پیشنیازها برای شروع و ...
* احتمالا مجموعهای از مواردی که دوستان میگن رو توی چنل منتشر میکنیم
@dvtwi
اگر اپ موبایل مینویسید و سینیور محسوب میشید (ترجیحا هر چیزی غیر از react native)، یک راهنمایی در مورد حوزهی کاریتون نیاز دارم.
زبانهایی که کار میکنید، چالشها، پیشنیازها برای شروع و ...
* احتمالا مجموعهای از مواردی که دوستان میگن رو توی چنل منتشر میکنیم
@dvtwi
Forwarded from جادی | Jadi
نابغه باید بمیرد - aaron swartz.pdf
2.2 MB
نگاهی به زندگی آرون شواتز و معرفی کتاب «نابغه باید بمیرد»
آرون شوارتز، آرون سوارتزِ سوارتس یا ارون سورتز یا هر جور دیگه که تلفظش کنین، نابغهای در دنیای کامپیوتر بود. کسی که چیزهایی مثل آر اس اس، ردیت و مارکداون بخشی از کارهاش هستن و هکتیویسمش نمونه ای برای هرکسی که می فهمه خوبه سواد فنیاش فایده اجتماعی هم داشته باشه.
در این ویدئوی خیلی کوتاه با توجه به خبری که اخیرا در مورد شرکت متا / فیسبوک بوده نگاهی به زندگیش داریم و دلیل خودکشی اش و معرفی کتاب کوتاه «نابغه باید بمیرد» که نسترن خسروی از نوشتههاش جمع کرده.
https://youtu.be/qlWZmJzXBvY
#کتاب #ویدئو
آرون شوارتز، آرون سوارتزِ سوارتس یا ارون سورتز یا هر جور دیگه که تلفظش کنین، نابغهای در دنیای کامپیوتر بود. کسی که چیزهایی مثل آر اس اس، ردیت و مارکداون بخشی از کارهاش هستن و هکتیویسمش نمونه ای برای هرکسی که می فهمه خوبه سواد فنیاش فایده اجتماعی هم داشته باشه.
در این ویدئوی خیلی کوتاه با توجه به خبری که اخیرا در مورد شرکت متا / فیسبوک بوده نگاهی به زندگیش داریم و دلیل خودکشی اش و معرفی کتاب کوتاه «نابغه باید بمیرد» که نسترن خسروی از نوشتههاش جمع کرده.
https://youtu.be/qlWZmJzXBvY
#کتاب #ویدئو
Forwarded from کانال مهرداد لینوکس
This media is not supported in your browser
VIEW IN TELEGRAM
✅ اگر بخش Layouts در zellij به Tmux اضافه میشود خوب بود
البته پلاگین هست ولی به خوبی zellij نیست
میتوانید انواع حالت ها کاری را از قبل تعریف کنید و با پسوند .kdl ذخیره کنید و هر زمان نیاز داشتید لود کنید
#Linux #لینوکس
البته پلاگین هست ولی به خوبی zellij نیست
میتوانید انواع حالت ها کاری را از قبل تعریف کنید و با پسوند .kdl ذخیره کنید و هر زمان نیاز داشتید لود کنید
#Linux #لینوکس