Dev Perfects – Telegram
Dev Perfects
41 subscribers
9.23K photos
1.26K videos
468 files
13K links
بخوام خیلی خلاصه بگم
این کانال میاد مطالب کانالای خفن تو حوزه تکنولوژی و برنامه نویسی رو جمع میکنه

پست پین رو بخونید
https://news.1rj.ru/str/dev_perfects/455


ارتباط:
https://news.1rj.ru/str/HidenChat_Bot?start=936082426
Download Telegram
خب خب خب پشت صحنه دکوریتورها در پایتون: چه اتفاقی پشت پرده می‌افته؟ 🚀

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

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
Linux boot process explained

https://news.1rj.ru/str/addlist/KpzXaiSpKENkMGM0
Forwarded from LearnPOV | لرن پی او وی (Mohammad hossein)
واقعا keep it simple توی معماری و سیاست های shadcn به خوبی رعایت شده ...

شاید شما هم از خیلیا شنیده باشید که shadcn خیلی خوب و خفنه، ولی من ندیدم کسی بیاد به طور دقیق این مورد رو توضیح بده.
به زودی یه پست میزارم راجبش که ببینید چه ویژگی هایی وجود داره که انقدر shadcn رو نسبت به بقیه ui kit ها متمایز میکنه

#shadcn #tailwind #tips


یه جورایی میشه گفت shadcn تصمیم گرفت از محدودیت ها خارج بشه ؛)

𝗖𝗛𝗔𝗡𝗡𝗘𝗟  |  𝗚𝗥𝗢𝗨𝗣
Title not found

#⃣ #fun



🥷 CHANNEL | GROUP
لاراول نایت‌واچ - Laravel Nightwatch

تیلور آتوِل عزیز این ابزار خفنُ برای نظارت بر اپ‌های لاراولی ساخته که بهت کمک می‌کنه همیشه حواست به عملکرد و سلامت سیستمت باشه ولی هنوز ریلیز نشده. از درخواست‌ها و لاگ‌ها گرفته تا ارورها و مسیرهای کند، همه رو زیر نظر داره و سریع بهت هشدار میده. دیگه Telescope و Pulse رو بنداز دور

https://www.youtube.com/watch?v=-fJnnAm1qBs

@DevTwitter | <Vahid Kaargar/>
Forwarded from کدنویس یکروزه (پدرام رحیمی)
nodejs-intro.pdf
739.3 KB
روش ساخت سِرور با Node.js

پیش از این آشنایی با نُد و همینطور روش نصب اون رو شرح دادیم. حالا روش نوشتن برنامه و ایجاد یک سِرور کوچک را در چند خط ساده یاد بگیرید.

#nodejs #server #beginner #book
خب یه دوست گرامی انتخاب شد
با تشکر از همگی
This media is not supported in your browser
VIEW IN TELEGRAM
هشتگ‌هامونو دنبال کنید که بلکه چهارتا مطلب باحال به تورتون بخوره

devtwitter.t.me/5
#کارفرمای_آلت_چهره

‏دولوپر کیست؟
یک موجود که باید تمامی زبان های برنامه نویسی را بداند.
همیشه باید سکوت کند چون تمام برنامه نویسی از دید کارفرما چند if ساده است.

@DevTwitter | <بهزاد/>
Forwarded from Golden Code (علی 🇨🇴)
در MySQL میتونیم با استفاده از Table Partitioning جداول بزرگمونو به بخش‌های کوچکتر تقسیم کنیم.

فایدش چیه؟؟
این کار query performance رو خیلی میتونه بهینه تر کنه برامون.


مثلا اگه جدول فروشمون خیلی بزرگ باشه و دیتاش شامل تاریخ فروش باشه، میتونیم جدولمونو بر اساس سال پارتیشن‌بندی کنیم و خب اینطوری وقتی بخوایم دیتاهای یه سال خاصی رو جستجو کنیم، فقط بخش مربوط به همون یه سال بررسی میشه که خب باعث میشه فرایند جستوجو سرعتش بهینه تر بشه.
#Laravel
@GoldenCodeir
(به‌منبع و مثالش دقت کنید 👇🏾)
https://x.com/mmartin_joo/status/1890023138622116289?t=bgrX4CCiL7eaLwpI9CAdYw&s=35
🔥2
اگر هنوز فکر می‌کنید از کرنل لینوکس چیز جدیدتری رخ نداده، باید بگم فدورا و obs سر یک بسته غیررسمی فلت‌پک از obs دارن به سروکله هم میزنن و احتمالا obs شکایت رسمی تنظیم کنه.


https://news.itsfoss.com/obs-studio-fedora-feud/


@SohrabContents
‏WordPress DB VS joomla DB
مقایسه استراکچر دیتابیس جوملا با وردپرس

@DevTwitter | <Hamidreza Zolfaghar/>
Forwarded from Yasha
Readable code is reliable code.
-Rob Pike
نیاز به کمکتون دارم

اگر اپ موبایل می‌نویسید و سینیور محسوب می‌شید (ترجیحا هر چیزی غیر از react native)، یک راهنمایی در مورد حوزه‌ی کاریتون نیاز دارم.
زبان‌هایی که کار می‌کنید، چالش‌ها، پیش‌نیاز‌ها برای شروع و ...

* احتمالا مجموعه‌ای از مواردی که دوستان میگن رو توی چنل منتشر می‌کنیم

@dvtwi
Forwarded from جادی | Jadi
نابغه باید بمیرد - aaron swartz.pdf
2.2 MB
نگاهی به زندگی آرون شواتز و معرفی کتاب «نابغه باید بمیرد»

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

در این ویدئوی خیلی کوتاه با توجه به خبری که اخیرا در مورد شرکت متا / فیسبوک بوده نگاهی به زندگیش داریم و دلیل خودکشی اش و معرفی کتاب کوتاه «نابغه باید بمیرد» که نسترن خسروی از نوشته‌هاش جمع کرده.

https://youtu.be/qlWZmJzXBvY

#کتاب #ویدئو
This media is not supported in your browser
VIEW IN TELEGRAM
اگر بخش Layouts در zellij به Tmux اضافه میشود خوب بود

البته پلاگین هست ولی به خوبی zellij نیست

میتوانید انواع حالت ها کاری را از قبل تعریف کنید و با پسوند .kdl ذخیره کنید و هر زمان نیاز داشتید لود کنید
#Linux #لینوکس
Forwarded from یه شعر (Poem Bot)
مولانا | دیوان شمس | رباعیات | رباعی شمارهٔ ۵۵

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

#مولانا | گنجور
📍@iipoem
یه اشتباهی که خیلی ها می کنند اینه که فکر می کنند که Typenoscript یه زبان در مقابل جاوا اسکریپته

مثلا پایتون یه زبانه و جاوا یه زبان دیگه هست و شما تصمیم می‌گیری که کدت رو به زبان پایتون یا جاوا بزنی

اما رابطه تایپ اسکریپت و جاوااسکریپت به این شکل نیست
یعنی تایپ اسکریپت یه زبان جداگانه و جدید نیست که اومده باشه جاوا اسکریپت رو جایگزین کنه

بلکه تایپ اسکریپت همراه جاوا اسکریپته تا تایپ ها استاتیک باشند و خطا های زمان اجرا به زمان کامپایل بیاد و همینطور دولوپر ها تجربه بهتری هنگام کد زدن داشته باشند و بعد از کامپایل(ترنسپایل) کل کد تایپ اسکریپت به جاوا اسکریپت تبدیل میشه.

یعنی این دو تا زبان همراه هم خواهند بود.
(تا اینکه روزی browser ها به صورت native از تایپ اسکریپت پشتیبانی کنند)

البته تو بک اند deno و bun به صورت native می تونن typenoscript رو اجرا کنن که این خیلی خبر خوبیه

@DevTwitter | <Pouria Jahandideh/>
Media is too big
VIEW IN TELEGRAM
یک پروژه دیدم امروز روی گیتهاب که یک AI Agent بود که از طریق Whatsapp میتونستی باهاش صحبت کنید. فقط شلوغش کرده بود. فکر کردم یک پروژه مشابه درست کنم با تلگرام. این ویدیوی دمو هست (صدا هم داره قسمتی که ایجنت صحبت میکنه).
فعلا میتونید باهاش چت کنید، عکس generate میکنه و همچین متن به صدا. برای متن به صدا از Kodoro استفاده کردم و کاملا هم لوکال هست . برای عکس هم میشه از Dalle و هم از یک کمپانی/api دیگه به اسم Novita استفاده کنید.
اسم این agent را گذاشتم Nova. بیشتر از ۲ ساعت وقت نذاشتم و هنوز خیلی کار داره تا یک agent کامل بشه. ولی هسته کد آماده است. حتا readme هم کامل نیست. ولی میتونید متوجه بشید و استفاده کنید. pull request بدید اگه دوست داشتید.
Github: https://github.com/mallahyari/nova-assistant

@DevTwitter | <Mehdi Allahyari/>
Forwarded from Yasha
گروه تلگرام تهلاگ، اگه سوال لینوکسی دارید:
@TehlugGp