مثلا ما برنامه نویسیم
373 subscribers
490 photos
93 videos
62 files
283 links
رو به پیشرفت و آزادی

گروه:
@pythonfarsiGP
---------
سرور دیسکورد:
https://discord.com/invite/vRWCSQYs
سرور guilded:
https://www.guilded.gg/i/k3Zjgl12
Download Telegram
🔹یه مشکل عجیب در برنامه‌های Linux؛ برنامه کاملاً مستقل باشه ولی باز هم از GPU استفاده کنه

وقتی یک برنامه Linux رو به‌صورت Static می‌سازی، بخش زیادی از وابستگی‌هاش به کتابخانه‌های سیستم حذف می‌شن.

این موضوع برای ساختن یک فایل اجرایی قابل‌حمل خیلی خوبه؛ اما وقتی برنامه بخواد از GPU استفاده کنه، داستان پیچیده می‌شه.

درایورهای GPU روی سیستم معمولاً به شکل کتابخانه‌های اشتراکی مثل .so در دسترس هستن و برنامه باید بتونه اون‌ها رو از سیستم میزبان دریافت و اجرا کنه.

اینجاست که Solo وارد می‌شه.

؜Solo یک Loader برای فایل‌های .so ساخته که اجازه می‌ده یک برنامه Static، در صورت نیاز، کتابخانه‌های اشتراکی سیستم میزبان رو هم بارگذاری کنه.

مثلاً برنامه‌ای که با Vulkan یا OpenGL کار می‌کنه می‌تونه همچنان از درایور GPU سیستم استفاده کنه، بدون اینکه لازم باشه خود برنامه به کتابخانه‌های سیستم مقصد وابسته باشه.

در نتیجه ایده Solo اینه:

یک فایل اجرایی نسبتاً مستقل داشته باشی، ولی وقتی به سخت‌افزار سیستم مثل GPU رسیدی، بتونی از کتابخانه‌های مربوط به همون سیستم استفاده کنی.

پروژه هنوز جدیده، اما ایده‌اش برای ساخت برنامه‌های قابل‌حمل Linux جالبه.

🔗 GitHub:
https://github.com/pg83/solo

#Linux #Programming #OpenSource

‎────────────
‎@PythonFarsi2024
👍1
🔹یه سیستم دوربین مداربسته که می‌تونی باهاش حرف بزنی

؜OpenNVR یه پروژه متن‌بازه که دوربین‌های شبکه رو به یک سیستم نظارتی هوشمند تبدیل می‌کنه.

قسمت جالبش اینه که فقط تصویر رو ضبط نمی‌کنه؛ می‌تونی از دوربین سؤال بپرسی.

مثلاً:

«پشت در کسی هست؟»

یا:

«امروز چه کسی جلوی در اومده؟»

؜OpenNVR می‌تونه تصویر دوربین رو با مدل‌های هوش مصنوعی بررسی کنه و جواب بده.

حتی می‌تونه اتفاقات داخل ویدئوهای ضبط‌شده رو جست‌وجو کنه؛ مثلاً بپرسی:

«دیروز کامیون قرمز از جلوی دوربین رد شد؟»

نکته مهم اینه که برای استفاده اصلی، لازم نیست تصاویرت رو به یک سرویس ابری بفرستی. پروژه برای اجرای کاملاً محلی طراحی شده و مدل پیش‌فرضش هم با Ollama روی سیستم خودت اجرا می‌شه.

می‌تونی از دوربین‌های شبکه معمولی استفاده کنی و کل سیستم رو با Docker روی کامپیوتر، سرور یا حتی Raspberry Pi راه‌اندازی کنی.

پروژه هنوز در حال توسعه‌ست، ولی ایده‌اش جالبه:

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

🔗 GitHub:
https://github.com/open-nvr/open-nvr

#AI #Linux #OpenSource

‎────────────
‎@PythonFarsi2024
🔹 یه پروژه جالب برای لینوکس‌بازها

یه پروژه متن‌باز به اسم XODUS داره روی اجرای بازی‌های Xbox PC روی Linux و macOS کار می‌کنه.

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

ولی هنوز یه مشکل بزرگ مونده:
خود بازی‌ها فعلاً اجرا نمی‌شن و بخش Xbox Gaming Runtime هنوز در حال توسعه‌ست.

پروژه با Rust نوشته شده و کدش هم روی GitHub منتشر شده.

🔗 https://github.com/xodus-gaming/xodus

فعلاً خبری از Game Pass روی لینوکس نیست؛ ولی پروژه ارزش زیر نظر گرفتن داره.

#Linux #Gaming #OpenSource

────────────
@PythonFarsi2024
🔹؜‎Mojo می‌خواد Python رو به GPU نزدیک‌تر کنه

؜؜Mojo یه زبان برنامه‌نویسی جدیده که توسط Modular ساخته شده؛ با تمرکز روی اجرای سریع کد، مخصوصاً در کارهای مربوط به AI.

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

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

یکی از تمرکزهای اصلی Mojo هم اجرای کد روی CPU، GPU و شتاب‌دهنده‌های مختلفه.

حالا اتفاق مهم این هفته:

؜ Mojo در ۱۱ آگوست به نسخه 1.0 رسید.

چند روز بعد، در ۱۸ آگوست، Modular کامپایلر و بخش‌های اصلی زبان رو هم Open Source کرد.

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

؜ Mojo هنوز قرار نیست جای Python رو بگیره.

ولی ایده‌اش جالبه:

به‌جای اینکه برای هر بخش سنگین برنامه از Python به یک زبان کاملاً متفاوت مهاجرت کنی، Mojo می‌خواد فاصله بین این دو دنیا رو کمتر کنه.

🔗 GitHub:
https://github.com/modular/modular

#Python #Mojo #AI

────────────
‎@PythonFarsi2024
🔹؜‎GitHub داره AI Agent رو وارد خودِ روند برنامه‌نویسی می‌کنه؜

؜ ‎قبلاً AI بیشتر یه ابزار بود؛
؜ ‎کد می‌نوشتی، ازش کمک می‌گرفتی و خودت تصمیم می‌گرفتی چی وارد پروژه بشه.

؜ ‎ولی GitHub داره یک قدم جلوتر می‌ره.

؜ ‎؜با GitHub Agentic Workflows می‌تونی به یک AI Agent بگی داخل repository کارهایی مثل بررسی Issueها، بررسی Pull Requestها، تحلیل خطاهای CI یا کارهای تکراری پروژه رو انجام بده.

؜ ‎؜؜؜حتی لازم نیست برای هر کار یک اسکریپت پیچیده بنویسی؛ دستورالعمل Agent رو با Markdown تعریف می‌کنی و GitHub اون رو از طریق Actions اجرا می‌کنه.

؜؜مثلاً می‌تونی یک Agent داشته باشی که وقتی Issue جدیدی باز شد، محتواش رو بررسی کنه، برچسب مناسب بزنه و اگر لازم بود گزارش بده.

؜ ‎اما یک نکته مهم وجود داره:

؜ ‎AI قرار نیست همین‌طوری کد رو خودش وارد پروژه کنه.

؜ ‎در این سیستم، Pull Requestها همچنان باید توسط انسان بررسی و تأیید بشن.

؜ ؜‎یعنی GitHub داره نقش AI رو از «دستیار برنامه‌نویس» کم‌کم به «عضو خودکار تیم» نزدیک می‌کنه.
؜
؜ ‎و این شاید یکی از تغییرات مهمی باشه که باید بهش عادت کنیم:

؜ ‎؜به‌جای اینکه فقط از AI سؤال بپرسیم، ممکنه به‌زودی Agentها بخشی از کارهای روزمره پروژه‌هامون رو خودشون انجام بدن.

‎🔗 GitHub Agentic Workflows:
‎https://github.github.com/gh-aw/

#GitHub #AI #Programming

‎────────────
‎@PythonFarsi2024
🔹 فقط cargo build کافی بود تا بدافزار اجرا بشه
یک حمله زنجیره تأمین به اکوسیستم Rust اتفاق افتاده که ماجراش کمی جدی‌تر از یک پکیج آلوده معمولیه.
سه crate به نام‌های arrayref، internment و append-only-vec دستکاری شده بودن و نسخه‌های مخربشون وارد crates.io شده بود.
مشکل اصلی اینجا بود که کد مخرب مستقیماً داخل این پروژه‌ها به شکل واضح قرار نگرفته بود.
مهاجم یک dependency جعلی به اسم proc-macro1 اضافه کرده بود؛ اسمی که عمداً شبیه proc-macro2 انتخاب شده بود.
این dependency یک build.rs مخرب داشت که هنگام کامپایل پروژه، payload بعدی رو دانلود و اجرا می‌کرد.
یعنی در سناریوی آلوده، لازم نبود برنامه رو اجرا کنی.
فقط:
cargo build
می‌تونست برای اجرای کد مهاجم کافی باشه.
یکی از crateهای تحت تأثیر arrayref 0.3.10 بود که طبق گزارش‌ها بیش از ۲۴۵ میلیون دانلود داشته.
تیم امنیتی Rust نسخه‌های آلوده رو از crates.io حذف کرده.
این اتفاق یک یادآوری مهمه:
وقتی یک dependency رو به پروژه اضافه می‌کنیم، فقط کدی که خودمون می‌بینیم مهم نیست؛ کدهایی که هنگام build اجرا می‌شن هم بخشی از سطح حمله هستن.
🔗 گزارش رسمی Rust:
Rust Security Advisory
#Rust #Security #CyberSecurity
────────────
@PythonFarsi2024
Forwarded from Magic Adrenaline
📊 قیمت دلار آمریکا 💱
منبع: الان چنده

🟢 قیمت زنده: 200,100
🔵 تغییر: +100%
⏰ آخرین به‌روزرسانی: 10:11:01
───ғ✧˖°.🐋☁️.°˖✧•--───
دیجی کالا قطع شد
دوباره برگشت
🔹 ۱۴ پکیج npm که ظاهر کاملاً معمولی داشتن، یک Backdoor لینوکسی پخش می‌کردن
چند پکیج npm با اسم‌هایی مرتبط با تقویم و ابزارهای ساده منتشر شده بودن، اما داخلشون چیزی بیشتر از چیزی که به نظر می‌رسید وجود داشت.
محققان ۱۴ پکیج آلوده رو شناسایی کردن که می‌تونستن RedC2 4.0 رو روی سیستم Linux قربانی اجرا کنن.
نکته جالب اینجاست که حتی لازم نبود یک اسکریپت نصب عجیب‌وغریب اجرا بشه.
یکی از فایل‌های اصلی پکیج، هنگام import شدن، فایل مخرب همراه خودش رو پیدا می‌کرد و اجرا می‌کرد.
یعنی ممکن بود یک برنامه‌نویس فقط یک dependency به پروژه اضافه کنه و بعد با استفاده معمولی از اون، کد مخرب هم روی سیستم اجرا بشه.
؜RedC2 هم صرفاً یک فایل ساده نیست؛ قابلیت‌هایی مثل دسترسی Shell، سرقت credential و اجرای payload روی سیستم آلوده رو فراهم می‌کنه.
قسمت عجیب‌تر ماجرا اینه که نسخه Linux این بدافزار با نام RedShell عرضه شده و زیرساخت RedC2 قابلیت‌های مرتبط با AI هم داره.
این اتفاق دوباره نشون می‌ده چرا نصب یک پکیج از npm فقط با نگاه کردن به اسم و تعداد دانلودها نباید انجام بشه.
گاهی خطرناک‌ترین dependencyها دقیقاً همون‌هایی هستن که کاملاً عادی به نظر می‌رسن.
🔗 گزارش:
The Hacker News — 14 Trojanized npm Packages
#Linux #NodeJS #Security
────────────
@PythonFarsi2024
🔻مکتب خونه دوباره کد تخفیف ۱۰۰درصدی گذاشته

https://mktb.me/xmzu/
؜🔹 Cursor داره وارد قلمرو GitHub می‌شه
؜Cursor تا امروز بیشتر به‌عنوان یک ادیتور کدنویسی با قابلیت‌های AI شناخته می‌شد.
اما حالا فقط نمی‌خواد جایی باشه که داخلش کد می‌نویسیم.
این شرکت Origin رو معرفی کرده؛ یک پلتفرم میزبانی کد که Repository، Pull Request، Code Review و مرور کد رو ارائه می‌ده.
حتی می‌تونه repositoryهای GitHub رو با خودش Sync کنه.
اما بخش جالب ماجرا جای دیگه‌ست.
؜Cursor می‌خواد Origin رو از ابتدا برای دنیایی طراحی کنه که AI Agentها هم بخشی از تیم توسعه هستن.
یعنی به‌جای اینکه GitHub فقط محلی برای ذخیره کد و مدیریت Pull Request باشه، Origin می‌خواد کد، Agent و فرایند توسعه رو تا حد ممکن در یک محیط جمع کنه.
فعلاً Origin در مرحله Beta قرار داره و برای کاربران پلن‌های پولی Cursor ارائه شده.
هنوز خیلی زوده که بگیم می‌تونه جای GitHub رو بگیره.
ولی حرکت Cursor جالبه؛ چون رقابت ابزارهای AI برنامه‌نویسی داره کم‌کم از «چه کسی کد بهتری می‌نویسه؟» به «چه کسی کل فرایند توسعه نرم‌افزار رو در اختیار می‌گیره؟» تغییر می‌کنه.
🔗 Origin:
Cursor Origin
#Cursor #GitHub #AI #Programming
────────────
@PythonFarsi2024
«اگر نتونستم تبلیغات رو بلاک کنم، سایت رو عوض کن»

#ublock_origin_lite #persian_blocker
🤣3
🔹 یه AI تونست برای یک تبلت قدیمی Root پیدا کنه

یه نفر یه Amazon Fire HD 10 مدل ۲۰۲۱ داشته که برای Home Assistant ازش استفاده می‌کرده.

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

راه‌حل دائمی؟

گرفتن Root و کنترل کامل دستگاه.

اما یک مشکل وجود داشت:
برای این مدل Fire HD 10 تا اون موقع روش عمومی و شناخته‌شده‌ای برای Root وجود نداشت.

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

مدل‌ها شروع کردن به بررسی firmware، کدها و راه‌های ممکن برای دسترسی بیشتر به دستگاه.

در نهایت GLM-5.3 تونست بخش اصلی کار رو در یک روز جلو ببره و مسیر Root کردن دستگاه پیدا شد.

نکته جالب اینجاست که برای این کار یک آسیب‌پذیری قدیمی در درایور GPU دستگاه استفاده شد؛ آسیب‌پذیری‌ای که قبلاً شناخته شده بود، اما این دستگاه هنوز نسخه‌ای از FireOS رو اجرا می‌کرد که در برابرش آسیب‌پذیر بود.

یعنی AI اینجا فقط «کد تولید نکرد».

باید با یک دستگاه واقعی، firmware واقعی و یک مشکل واقعی سر و کله می‌زد تا در نهایت به یک راه‌حل عملی برسه.

این شاید یکی از جالب‌ترین نمونه‌های استفاده از AI برای Reverse Engineering روی سخت‌افزارهای قدیمی باشه.

🔗 داستان کامل:
https://news.ycombinator.com/item?id=49409073

#AI #Android #ReverseEngineering

────────────
@PythonFarsi2024
❤1
🔹 این LSP برای Rust می‌خواد با کمتر از 100MB RAM کار کنه

؜Rust Glancer یه LSP جدیده که با یک ایده متفاوت ساخته شده:

اطلاعات تحلیل پروژه رو قرار نیست همه‌اش داخل RAM نگه داره.

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

نتیجه‌ای که سازنده دنبالشه؟

مصرف حافظه خیلی پایین‌تر از چیزی که ابزارهایی مثل rust-analyzer معمولاً دارن؛ هدف پروژه برای پروژه‌های معمولی کمتر از 100MB رم اعلام شده.

ولی این کار یه هزینه هم داره.

؜Rust Glancer قرار نیست بعد از هر تغییر، همه‌چیز رو همون لحظه دوباره تحلیل کنه.

بعضی تحلیل‌ها بعد از Save انجام می‌شن و در عوض، اطلاعات قبلی روی دیسک باقی می‌مونه تا لازم نباشه هر بار کل پروژه از صفر بررسی بشه.

یعنی سازنده عملاً یه معامله کرده:

؜RAM کمتر ←→ کمی تأخیر بیشتر

پروژه هنوز خیلی جوونه و قرار نیست جای rust-analyzer رو گرفته باشه.

ولی ایده‌اش جالبه؛ مخصوصاً وقتی می‌بینی برای داشتن ابزارهای توسعه قدرتمند، همیشه لازم نیست چند گیگ RAM درگیر باشه.

🔗 پروژه:
https://rust-glancer.github.io/

#Rust #Programming #OpenSource

────────────
@PythonFarsi2024
🔹 شاید مشکل AI Agent خودِ مدل نباشه

چرا بعضی Agentها با وجود استفاده از مدل‌های قدرتمند، باز هم عملکرد خوبی ندارن؟

؜یک دلیل مهم می‌تونه چیزی باشه که بهش می‌گن «Harness».

؜Harness محیطیه که مدل داخلش کار می‌کنه؛
ابزارها، حافظه، دسترسی به فایل‌ها، محدودیت‌ها و نحوه مدیریت کار.

یعنی ممکنه دو Agent از یک مدل یکسان استفاده کنن، ولی یکی خیلی بهتر عمل کنه.

چون برای Agent فقط «مدل» مهم نیست؛
چیزی که دور مدل ساخته شده هم اهمیت داره.

به همین دلیل رقابت Agentها داره کم‌کم از «کدوم مدل باهوش‌تره؟» به «کدوم محیط بهتره؟» تغییر می‌کنه.

🔗 https://www.earendil.com/what-is-a-harness/

#AI #AIAgents #Programming

────────────
@PythonFarsi2024
؜🔹 netcat رو با Tailscale ترکیب کنی چی می‌شه؟

؜Tailcat یه ابزار کوچیک و متن‌بازه که ایده‌ی netcat رو میاره روی شبکه Tailscale.

اگه با netcat کار کرده باشی، می‌دونی می‌تونه بین دو سیستم یک اتصال ساده TCP/UDP برقرار کنه.

؜Tailcat همین ایده رو داره، ولی برای دستگاه‌هایی که داخل شبکه Tailscale هستن.

یعنی می‌تونی بدون درگیر شدن با Port Forwarding، باز کردن پورت روی اینترنت یا پیدا کردن IP عمومی، بین دستگاه‌های خودت ارتباط برقرار کنی.

مثلاً یه لپ‌تاپ و یه سرور که هر دو Tailscale دارن؛ Tailcat می‌تونه یک ارتباط مستقیم بینشون ایجاد کنه.

قسمت جالبش اینه که به جای ساختن یک ابزار کاملاً جدید، تجربه‌ی آشنای netcat رو با شبکه‌ی خصوصی Tailscale ترکیب کرده.

یه ابزار کوچیک، ولی برای کارهای شبکه‌ای خیلی کاربردی.

🔗 GitHub:
https://github.com/tailscale/tailcat

#Linux #Tailscale #Networking #OpenSource

────────────
@PythonFarsi2024
🔹 وقتی lower() باعث شد Python یک دامنه رو اشتباه ببینه!

یک آسیب‌پذیری در Python پیدا شده که ریشه‌اش به پردازش نام دامنه‌های غیرانگلیسی برمی‌گرده.

مشکل از اینجا شروع می‌شه که Python برای تبدیل بعضی دامنه‌ها باید طبق قوانین قدیمی Unicode 3.2 عمل کنه.

اما در یک مسیر از کد، به‌جای اون قوانین، از str.lower() استفاده می‌شد.

این دو روش برای بعضی کاراکترهای خاص نتیجه یکسانی ندارن.

یعنی ممکنه یک ورودی مثل:

دامنه‌ای با یک کاراکتر خاص

در یک قسمت برنامه به یک نام تبدیل بشه، ولی قسمت دیگه همون ورودی رو به نام متفاوتی تبدیل کنه.

حالا تصور کن برنامه قبل از انجام یک عملیات حساس، دامنه رو بررسی کنه.

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

این مشکل با شناسه CVE-2026-17084 ثبت شده و Python برای رفعش، پردازش IDNA 2003 رو اصلاح کرده.

نکته جالب اینه که:

؜ str.lower() خراب نیست.؜

مشکل از این بود که برای یک کار حساس، تابعی استفاده شده بود که قوانین Unicode متفاوتی رو دنبال می‌کرد.

🔗 توضیح فنی:
https://sethmlarson.dev/when-str-lower-is-a-security-vulnerability

#Python #Security #CyberSecurity

────────────
@PythonFarsi2024
🔴 یک باگ بحرانی Gitea الان در حال سوءاستفاده است

یک آسیب‌پذیری با شدت 9.8 در Gitea پیدا شده که می‌تونه به مهاجم اجازه بده روی سروری که Gitea روش اجرا می‌شه، دستور اجرا کنه.

ماجرا از جایی شروع می‌شه که مهاجم می‌تونه یک Patch مخرب به repository بده.

؜ Gitea این Patch رو پردازش می‌کنه و در شرایط خاص، مهاجم می‌تونه از همین مسیر یک Git Hook مخرب وارد repository کنه.

بعد از اون، Hook با سطح دسترسی کاربر سرویس Gitea اجرا می‌شه.

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

این آسیب‌پذیری با شناسه CVE-2026-60004 ثبت شده و نسخه‌های 1.17 تا قبل از 1.27.1 تحت تأثیر قرار دارن.

و حالا موضوع فقط یک باگ تئوری نیست:

؜ CISA این آسیب‌پذیری رو به فهرست Known Exploited Vulnerabilities اضافه کرده و حمله‌های واقعی علیه Gitea گزارش شده.

اگر Gitea روی سرور داری، این یکی رو نباید بندازی برای بعد.

🔗 گزارش رسمی Gitea:
https://github.com/go-gitea/gitea/security/advisories/GHSA-rcr6-4jqh-j84m

#Gitea #Security #Git #OpenSource

────────────
@PythonFarsi2024
🔸 می‌خواید موقع گوش دادن به آهنگ، متن آهنگ هم همزمان براتون نمایش داده بشه؟

با فایل‌های LRC می‌تونید متن آهنگ رو با زمان‌بندی دقیق به موزیک پلیر اضافه کنید؛ مثلاً در پلیرهای شیائومی، هواوی و خیلی از پلیرهای دیگه.

برای ساخت فایل LRC می‌تونید از برنامه LRC Editor استفاده کنید:

🔗 لینک دانلود:
https://f-droid.org/packages/com.cg.lrceditor

چند نکته:
▪️ هر بخش از متن آهنگ در یک Line قرار می‌گیره.
▪️ با زدن دکمه + می‌تونید زمان شروع هر خط رو مشخص کنید.
▪️ فایل .lrc باید هم‌نام فایل آهنگ باشه و هر دو داخل یک پوشه قرار بگیرن.
▪️ برای پیدا کردن متن آهنگ می‌تونید از AI یا سایت‌هایی مثل Genius کمک بگیرید.

مثلاً می‌تونید متن فارسی ترجمه‌شده رو هم کنار متن اصلی قرار بدید تا موقع گوش دادن، ترجمه هم داشته باشید.

#متفرقه #lyric
────────────
@PythonFarsi2024
❤2💔1