en
Feedback
mosTafa Arshadi

mosTafa Arshadi

Open in Telegram

Bio : https://mosishon.vercel.app Github: https://github.com/mosishon [The content of this channel is only my personal thoughts and opinions.] پیشنهاد؟ 👇🏼 @mosishon or https://telegram.me/BChatsBot?start=sc-zGajnP498D

Show more
Iran188 874The category is not specified
397
Subscribers
No data24 hours
No data7 days
No data30 days
Posts Archive
رابطه‌ی تخصص شما و اعتماد بنفستون در مورد اون تخصص به این شکله. علت: شما هرچه متخصص تر میشید، بیشتر متوجه میشید که چه چیزا ها
رابطه‌ی تخصص شما و اعتماد بنفستون در مورد اون تخصص به این شکله. علت: شما هرچه متخصص تر میشید، بیشتر متوجه میشید که چه چیزا هایی رو بلد نیستید و کل نگاهتون به نوک قله هست. این باعث میشه فاصلتون تا قله رو ببینید. عاقل میدونه که نمیدونه، نادان نمیدونه که نمیدونه. ✍️ M.A @mosTafaArshadi

پروژه جدید تیممون که منتشر شده توی اپ استور :) وقت کردید تست بزنید و فیدبک بدید (ios) LINK

Repost from Dev Feed
من که همینم واقعاً شمارو نمی‌دونم ⚙️ @DevFeed01 | mosTafa
من که همینم واقعاً شمارو نمی‌دونم ⚙️ @DevFeed01 | mosTafa

حرف آخر پس چرا طول هش ثابته؟ چون کاربردی، استاندارد و بهینه است. و چرا با وجود مشکل تصادم، باز هم امنه؟ چون فضای خروجی اونقدر عظیم و نجومیه که پیدا کردن یک تصادم، اگرچه از نظر ریاضی ممکنه، اما از نظر فیزیکی و عملی غیرممکنه. امنیت دنیای دیجیتال ما روی همین "غیرممکن بودن عملی" بنا شده. 🛡 ✍️ M.A @mosTafaArshadi

سلام به همگی. پست امروز رو میخوام با یه سوال شروع کنم. چرا توابع هش قفلی زدن روی طول ثابت؟ 🤔 امروز داشتم با یکی از بچه‌ها صحبت می‌کردم، یه سوال خیلی خوب و بنیادی پرسید که شاید سوال خیلی‌هامون باشه: "چرا خروجی توابع هش همیشه یه طول ثابت داره؟ مثلاً چرا خروجی SHA-256 همیشه ۲۵۶ بیته؟ اگه نباشه چی میشه؟" این سوال، ما رو به مباحث و ارقام جالبی میکشونه که باهم حسابشون میکنیم (فقط به دقت اعداد خیلی گیر ندید سعی میکنم نزدیک حساب کنم اگر هم خطا داشته باشم کمه، به بزرگواری خودتان ببخشید) سوال) چرا واقعاً طولش ثابته؟ جواب ساده و منطقیش اینه: استانداردسازی و کارایی. فکر کن چرا آدرس‌های IP (نسخه ۴) یه ساختار ثابت دارن؟ چون کل شبکه اینترنت باید روی یک استاندارد توافق کنه تا بتونن با هم حرف بزنن. برای هش هم همینه: ذخیره‌سازی و مقایسه: وقتی طول هش همیشه یکسانه، ذخیره کردنش توی دیتابیس و مقایسه کردن دوتا هش با هم، فوق‌العاده سریع و بهینه میشه. Checksum: از هش به عنوان Checksum برای تأیید سلامت فایل‌ها استفاده میشه. یک خروجی استاندارد و ثابت برای این کار ضروریه. حالا مشکل: مشکل ذاتی طول ثابت: تصادم (Collision) این ثابت بودن یه چالش بزرگ ایجاد می‌کنه. ورودی ما می‌تونه بی‌نهایت باشه (از یک کلمه تا کل محتوای یوتیوب!) ولی خروجی ما محدوده (مثلاً برای SHA-256، تعداد حالات ممکن( دو به توان 256) اینجاست که اصل لانه کبوتری میاد وسط: اگه تعداد کبوترها (ورودی‌ها) از لانه‌ها (خروجی‌ها) بیشتر باشه، حتماً یه لانه هست که دوتا کبوتر توش جا شده! یعنی قطعاً دو تا ورودی متفاوت وجود دارن که یک هش یکسان تولید می‌کنن. به این میگن تصادم. سوال) پس چرا دنیای دیجیتال ما هنوز امنه؟ جواب توی بزرگی این اعداد نهفته‌ست. بیاید بریم سراغ SHA-256 و عدد معروفش: (2 به توان 256) این عدد تقریباً برابره با 10 به توان 77 یا :
100000000000000000000000000000000000000000000000000000000000000000000000000000
برابره و برای اینکه بدونید چقدر بزرگه تعداد کل اتم های تخمین زده شده توی کل دنیا 10 به توان 80 هست که یعنی همون بالای ۳ تا صفرش کمتر. برای اینکه تضمینی (با احتمال صدرصد) یه تصادم پیدا کنی، باید 2 به 256حالت حساب کنی تا همه چی به اندازه باشه و یدونه اضافه تر که این یدونه هش اضافی بشه و برخورد کنه. آیا این کار شدنیه؟ زمان: فرض کنیم یه ابرکامپیوتر داریم که هر ثانیه یک تریلیون تریلیون (10 به توان 24) هش حساب می‌کنه. با این سرعت هم، حدود 10 به توان 53 ثانیه زمان لازمه. این زمان چند ده تریلیون برابر عمر کل جهانه!(از بیگ بنگ تا الان) فضا: حتی اگه این محاسبات رو انجام بدی، جایی برای ذخیره کردن این همه هش نداری! به حافظه‌ای بیشتر از تمام اتم‌های کره زمین نیاز داری. 30000000000000000000000000000000000000000000000000000000000000000000 ترابایت حافظه نیاز داری. (اگر هر کارکتر ۱ بایت باشه و ما بخوایم ۲۵۶ بایت به ازای هر هش حساب کنیم ضربدر 2 به توان 256) ولی یه سوالی که پیش میاد اینکه ما حتما نیاز نیست همشو حساب کنیم که برخورد ایجاد بشه، شاید یهو بیای ۱۰۰ تا هش حساب کنی بین همین ۱۰۰ تا برخورد ایجاد بشه، 2 به توان ۲۵۶ برای وقتیه که صدرصد بخوای تصادم پیدا کنی یعنی در بدترین حالت ممکنه که قبلش هیچ تصادمی رخ نده و همه چیز فیت در بیاد ولی اخرش که ما از ظرفیت کل یدونه بیشتر حساب کنیم تصادم رخ میده. ولی خب توی دنیای واقعی چنین چیزی نیست و یه اصل دیگه هم هست (حمله روز تولد) یا Birthday Attack: ین حمله میگه برای پیدا کردن تصادم در یک هش n-بیتی، لازم نیست 2 به توان n حالت رو چک کنی. با چک کردن حدود 2 به توان n/2 حالت، شانس بالایی برای موفقیت داری. برای SHA-256 این عدد میشه 2 به توان 128 که خیلی از 2 به توان 256 کمتره که میشه : 340282366920938463463374607431768211456 کوچیکتره، ولی این عدد هم خودش به تنهایی یک غول نجومیه و هنوز از توان محاسباتی و فیزیکی بشر خارجه! حالا فرض کنید که میخوایم 10^10 حالت اول رو حساب کنیم و ببینیم چقدر احتمال داره توی این هش های اول یه تصادم رخ بده. طبق فرمول تصادم که میتونید توی اینترنت سرچ کنید: K**2 / 2N که K میشه هش هایی که ساختیم و N میشه تعداد کل. (10^10)^2 / (2**256)*2 = 0.00000000000000000000000000000000000000000000000000000000004% یعنی اگر 10000000000 تا هش حساب کنیم فقط اون عدد ناچیز احتمال داره که برخورد پیدا کنیم. این احتمال اونقدر ناچیزه که در حال حاضر از برخورد شهاب سنگ به زمین و شروع جنگ جهانی سوم و جنگ اتمی و ... خیلی کمتره و موضوعی نیست که خیلی نگرانش باشیم. و اینکه ممکنه حتی توی دنیا این برخورد تا حالا پیش اومده باشه، ولی نکته اینه که کسی متوجش نمیشه. چون کل هش های دنیا رو کنار هم نمیزاره تا تکراری بودنشون رو پیدا کنه.

Repost from Dev Feed
اگه chat pgt دارید و حداقل ۳ ماهه باهاش چت کردید پرامپت زیر رو تست کنید و حتما اسکرین‌شات رو توی کامنت ها بفرستید: ۱)نفرین من چیه؟ توضیح نده. بعد از اینکه جوابتون رو داد ۲) منظورت چیه؟ بعد از اینکه جوابتون رو داد ۳)رو چه حساب اینارو میگی؟ نتیجه‌اش شگفت زدتون میکنه.

این شما و این ai-agent دست‌ساز خودم. میشه بهش دستور داد روی وبسایت های مختلف بره برات محتوا بیاره و تحلیل کنه. تا هفته آینده میخوام روی یه اجنت کد نویس کار کنم به صورت لوکال کار کنه. حتما اوپن سورسش میکنم چیز باحالی میشه.

Repost from Dev Feed
جالبه که بدونید یک باگ توی دیتابیس Mysql وجود داره که حدود 20 ساله رفع نشده. یه قسمتی از کامنت های مربوط به این باگ رو براتون
جالبه که بدونید یک باگ توی دیتابیس Mysql وجود داره که حدود 20 ساله رفع نشده. یه قسمتی از کامنت های مربوط به این باگ رو براتون گذاشتم:))) پ.ن: فقط اونجا که یکی پرسیده میخوام بدونم زندگی گزارش دهنده باگ چطوره و اینکه هنوز از mysql استفاده میکنه یا نه. گزارش دهنده هم پیام گذاشته مرسی که پرسیدی اره هنوز استفاده میکنم😂 لینک گزارش باگ: https://bugs.mysql.com/bug.php?id=11472 ⚙️ @DevFeed01 | mosTafa

سلام به همگی! خیلی خوشحالم که پروژه شخصی جدیدم رو با شما به اشتراک بذارم: Healthy API 🩺 این یک ابزار مانیتورینگ سرویس هست که با زبان Go نوشتم. همیشه دوست داشتم ابزاری ساده و در عین حال قدرتمند داشته باشم که بتونه به صورت مداوم سلامت سرویس‌های مختلف رو چک کنه و اگه مشکلی پیش اومد، سریعاً من رو با خبر کنه و گفتم چرا خودم یکی ننویسم. 🚀 چندتا از ویژگی‌های کلیدی Healthy API: مانیتورینگ همزمان: با استفاده از قدرت Goroutineها، تمام سرویس‌ها رو به صورت همزمان چک می‌کنه. سیستم هشدار قابل توسعه: در حال حاضر از ایمیل (SMTP) و پیامک پشتیبانی می‌کنه. معماری پروژه رو طوری طراحی کردم که اضافه کردن نوتیفایرهای جدید (مثلاً Slack یا Telegram) در آینده خیلی ساده باشه. پیکربندی آسان: تمام تنظیمات فقط با یک فایل YAML ساده انجام می‌شه. این پروژه یک تجربه یادگیری عالی در زمینه مفاهیم System Design و Concurrency در Go بود. پروژه به صورت اوپن سورس روی گیت‌هاب قرار داره. خوشحال می‌شم نگاهی بهش بندازید، نظرات و پیشنهاداتتون رو بگید و اگه براتون جالب بود، با ستاره ⭐️ از پروژه حمایت کنید! یدونه عکس از نمونه‌ی کانفیگ و ساختار معرفی سرویس ها هم زیر پست قرار دادم. 🔗 لینک ریپازیتوری در گیت‌هاب: https://github.com/mosishon/healthy-api

البته بگم این فقط فیلترینگ دامنه بودش، بعدا در مورد اینترنت ملی و فیلتر کردن سرور و ... هم یه چیزی آماده میکنم.

با سلام خدمت همگی. امروز می‌خوام به صورت مبتدی در مورد سیستم #فیلترینگ صحبت کنم؛ اینکه چطوری یک سایت، سرور، اپلیکیشن یا... فیلتر می‌شه. سرور و آدرس IP در مرحله‌ی اول باید بدونید که وب‌سایت‌ها، اپلیکیشن‌ها (موبایل، دسکتاپ یا هر پلتفرمی) یا هر سرویسی که سیستم متمرکز داره و ما داریم از اون سرویس استفاده می‌کنیم، دارای یک سرور هست. هر سرور دارای یک آدرس آی‌پی (IP) هست که شناسه‌ی یکتای اون سروره و برای اینکه درخواستی یا پیغامی به اون سرور بفرستیم، از اون آدرس استفاده می‌کنیم. فرمت IP به این شکله:
xxx.xxx.xxx.xxx
یعنی از چهار قسمت تشکیل شده که با نقطه از هم جدا می‌شن. مثل:
192.168.1.1
دامنه (Domain) به خاطر سپردن آی‌پی‌ها یک خورده ناجوره؛ هم سخته و هم بعضی جاها باعث مشکل می‌شه. به خاطر همین، یه مفهومی به وجود اومد به اسم دامنه. مثل:
google.com
دامنه صرفاً یک اسم هست که به یک IP منتسب می‌شه. یعنی وقتی یک دامین داریم، اون دامین قطعاً به یک IP اشاره می‌کنه. این کار باعث می‌شه که: ۱. راحت‌تر بتونیم اسم سرویس رو به خاطر بسپریم. ۲. اگر IP سرور ما تغییر کرد، نیازی نیست که به کل استفاده‌کننده‌هامون اطلاع بدیم؛ صرفاً اون IPای که دامنه‌ی ما بهش اشاره می‌کنه رو عوض می‌کنیم. مثلاً:
google.com -> 192.168.1.1
وقتی IP سرور ما تغییر کنه، ما می‌ریم و اون رو عوض می‌کنیم:
google.com -> 172.16.1.1
حالا کاربرای ما بدون اینکه بدونن، روی IP جدید ما سوییچ کردن. سرور DNS این دامنه‌ها کجا ذخیره می‌شن؟ این دامنه‌ها خودشون روی سرورهایی ذخیره شدن که بهشون می‌گیم DNS SERVER. برای مثال: Cloudflare: 1.1.1.1 Google: 8.8.8.8 این‌ها دو نمونه DNS سرور هستن. منطقاً ما نمی‌تونیم به DNS سرورها دامنه بدیم، چون اون موقع قبل از اون، باید یکی باشه که بتونه اون دامنه رو به این IPها تبدیل کنه و در یک حلقه‌ی بی‌پایان (Loop) میفتیم. فرآیند یک درخواست اینترنتی حالا وقتی ما داریم به سایتی مثل گوگل درخواست می‌زنیم (مثلاً توی مرورگر)، در مرحله‌ی اول، یک درخواست DNS ساخته می‌شه و به سرور DNS (بستگی داره روی سیستم ما چی ست شده باشه) ارسال می‌شه. سرور، IP منتسب شده به اون دامنه رو به ما می‌ده و بعد، درخواست اصلی ما به سرور مقصد ارسال می‌شه. نکته‌ی مهم: درخواستی که به DNS سرور می‌فرستیم، رمزنگاری شده نیست و قابل شنود و دستکاری شدنه. فیلترینگ چگونه اتفاق می‌افتد؟ اینجاست که سیستم فیلترینگ می‌تونه وارد عمل بشه. برای مثال، وقتی می‌خوان abc.com رو فیلتر کنن، میان و کل پکت‌هایی که مربوط به درخواست DNS هست رو شنود می‌کنن. شما یک درخواست به سرور DNS می‌فرستی و می‌گی من IP مربوط به abc.com رو می‌خوام:

{
  "request": "HI, I WANT abc.com"
}
سرور یک پاسخ معتبر می‌ده:

{
  "response": "HI, ITS IP: 192.168.1.1"
}
دقیقاً اینجا فیلترینگ (فیلتر کردن دامنه) اتفاق میفته. شرکت خدمات‌دهنده‌ی اینترنت (ISP) میاد و این IP رو حذف می‌کنه و یک IP نامعتبر جای اون می‌ذاره. در نتیجه، پکت دستکاری‌شده به این شکل درمیاد:

{
  "response": "HI, ITS IP: 10.10.10.1" // آدرس جعلی و نامعتبر
}
این پکت دستکاری‌شده به ما تحویل داده می‌شه. سیستم ما فکر می‌کنه اون IP که دریافت کرده، IP صحیح اون دامنه هست، بهش درخواست می‌زنه ولی هیچ پاسخی دریافت نمی‌کنه. اینجاست که فیلترینگ دامنه اتفاق میفته. کاربردهای دیگر دستکاری DNS این وسط، کارهای جالب (و خطرناکی) هم می‌تونه رخ بده. ۱. فیشینگ (Phishing) فرض کنید شما IP سایت اینستاگرام رو می‌خواید و اون وسط، یک هکر پکت‌ها رو شنود کنه و IP سرور خودش رو به شما بده. بعد روی سرور خودش، یک سایتی دقیقاً شبیه سایت اینستاگرام بالا بیاره. اون موقع شما توی مرورگرتون دقیقاً دامنه‌ی instagram.com رو می‌بینید، ولی در اصل به سرورهای اصلی اون وصل نیستید و اگر اطلاعاتی وارد کنید، به سرور هکر ارسال می‌شه. ۲. سرویس‌های رفع تحریم سرویس‌های فیلترشکن و رفع تحریم به وجود میان. مثلاً shecan.ir همینطوری کار می‌کنه. به شما ۲ تا DNS سرور می‌ده که روی سیستمتون ست می‌کنید و از این به بعد، سیستم شما دامنه‌ها رو از این سرورها استعلام می‌گیره. سایت cloud.google.com آی‌پی ما رو تحریم کرده، ولی وقتی از DNSهای shecan استفاده کنیم، shecan میاد و به جای IP اصلی این سرور، به ما IP سرورهای خودش رو می‌ده. درخواست ما به سرور shecan می‌ره و حالا اون سرور، از طریق یک IP خارج از ایران، درخواست رو به گوگل (یا هر سایتی که ما رو تحریم کرده) می‌فرسته (در اصل پروکسی انجام می‌ده) و جواب اون رو به ما برمی‌گردونه. عملاً بدون اینکه ما بفهمیم، داریم از پروکسی استفاده می‌کنیم. این بود یک پارت ساده از نحوه‌ی کارکرد DNS و سیستم فیلترینگ و یا حتی تحریم‌شکن. امیدوارم لذت ببرید. ✍️ M.A @mosTafaArshadi

ابزار های باحالی هم توشه 😁
ابزار های باحالی هم توشه 😁

یه قسمتی از درس جبرخطی رو به صورت یه سایت استاتیک و سینگل پیج در اوردم. یه بخش AI هم داره که اگر از Google ai studio یه کلید
+2
یه قسمتی از درس جبرخطی رو به صورت یه سایت استاتیک و سینگل پیج در اوردم. یه بخش AI هم داره که اگر از Google ai studio یه کلید بگیری و وارد کنی توی بخشای مختلف میتونی از gemini توضیحات بیشتر بخوای. چیز جالبی شد اگر کسی درس جبرخطی کاربردی رو داشته باشه به کارش میاد (متاسفانه ترم ۶ تازه جبر خطی رو برداشتم). روی گیت‌هاب هاست میشه و البته که رسپانسیو هم نیست(ادیت:رسپانسیو شد) پس روی سیستم بازش کنید. اینم لینکش: https://algebra.mosishon.ir/

در حال حاضر هم دارم روی فاین‌تیون کردن مدل nllb کار میکنم.طبق تحقیقی که کردم روی متون عادی و عامیانه ترین شده و خیلی دید خوبی نسبت به ترجمه‌ی متن های تخصصی حوزه‌ی کامپیوتر نداره. میخوام تعدادی جمله‌ی تخصصی تو فیلد کامپیوتر و IT به همراه ترجمه‌اش رو بسازم. (حدود ۲۰۰۰ تا باشه هم کفایت میکنه). و بعدش مدل رو روی اون فاین تیون کنم. اینطوری مدل یه جورایی مخصوص ترجمه متون تخصصی اموزش می‌بینه و کیفیت ترجمش چندین برابر بیشتر میشه. بعد از فاین‌تیون کردن مدل، یه مقایسه انجام میدم و نتیجشو میزارم ببینید. و قضاوت کنید که مدل قبلی بهتر ترجمه کرده یا مدل فاین‌تیون شده.

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

سلام به همگی. امروز اومدم که زبان برنامه‌نویسی Mosi رو معرفی کنم! ( خیلی جدی نگیرید) تو پروژه درس "زبان‌های برنامه‌نویسی" یک مفسر کامل برای زبان سفارشی Mosi نوشتم که با پایتون پیاده‌سازی شده. 😅 چرا این پروژه جالب شد؟ راستش اول فکر می‌کردم یه پروژه معمولی درسیه - بنویسیم، نمره بگیریم، تموم! ولی وقتی شروع کردم کد زدن، حس کردم دارم چیز جدیدی کشف می‌کنم. 🔧 چی ساختم؟ Mosi یه زبان کامل با این قابلیت‌هاس: متغیرهای var و const توابع با پارامتر و return حلقه‌های while با break و continue تابع چاپ Bechap() (به فارسی!) توابع ریاضی مثل sin, cos, log آرایه‌ها و HashMap ها Scope مناسب برای متغیرها مثال کد:
function zarb(a: int, b: int) int {
    return a * b;
}

var area: int = zarb(5, 5);
Bechap(area);
sin(90);
🤔 یه زبان برنامه نویسی که رو بنویسی اینارو یاد میگیری: Tokenization: کد رو چجوری به توکن تبدیل کنیم Parsing: AST رو چجوری بسازیم Interpretation: کد رو چجوری اجرا کنیم Scope Management: متغیرها چجوری تو حافظه مدیریت میشن Error Handling: خطاها رو چجوری پیدا و گزارش کنیم بنظرم برای درک از زبان های برنامه نویسی و درک کارایی که میکنن یا حتی درک اینکه چرا بعضی ها سریع تر از بقیه هستن آدم باید یه زبان مینیمال رو خودش از صفر طراحی کنه. پروژه جالبی بود هم نمرشو گرفتیم و هم یاد گرفتیم. قبلاً همیشه فکر می‌کردم زبان‌های برنامه‌نویسی یه چیز عجیب غریبی هستن که نمی‌شه فهمیدشون! ولی الان که خودم یکی ساختم، می‌بینم که اونا هم مثل بقیه نرم‌افزارها قابل درک و ساخت هستن - فقط باید یکم صبر کنی و قدم به قدم پیش بری. (ولی ساخت یه زبان کامل و بزرگ واقعا مستعد داشتن دانش و تجربه زیادی هست) 📚 برای کی مفیده؟ اگه دانشجوی کامپیوتری یا کسی که دوست داره بدونه این زبان‌ها چجوری کار می‌کنن، شاید بتونی از کدهاش استفاده کنی یا یه چیزی یادبگیری. کد رو توی گیت‌هاب گذاشتم - اگه حوصله داشتید نگاهی بهش بندازید! با تشکر از دکتر نیلوفر رنجبر (استاد) که این فرصت رو دادن. #زبان_برنامه_نویسی #کامپایلر #پایتون #دانشگاه #پروژه_دانشجویی #Programming #Interpreter #ComputerScience GitHub Link

+1
01-sub-translated.srt0.10 KB

یک نمونه ویدیو انگلیسی. زیرنویس های ساخته شده رو هم این زیر قرار میدم :

سلام به همگی. یه چند وقت پیش یه دوره‌ی آموزشی انگلیسی دانلود کردم که کلی ذوق داشتم براش. دوره‌اش درباره یه موضوع تخصصی بود که مدت‌ها دنبالش بودم، ولی وقتی بازش کردم دیدم نه زیرنویس انگلیسی داره، نه فارسی، هیچی! اولش گفتم اشکال نداره، با دقت گوش می‌دم. ولی بعد از ۵ دقیقه حس کردم مغزم داره داغ می‌کنه. مخصوصاً جاهایی که استادش لهجه‌دار حرف می‌زد یا تند می‌رفت، اصلاً نمی‌فهمیدم چی شد چی نشد. همونجا بود که یه جرقه خورد تو ذهنم. گفتم خب چرا خودم براش زیرنویس درست نکنم؟ بعد که بیشتر فکر کردم، گفتم حالا که قراره زیرنویس بسازم، چه بهتر که فارسیش رو هم دربیارم. اینطوری هم خودم راحت‌تر یاد می‌گیرم، هم شاید بعداً برای بقیه هم مفید باشه. نتیجه‌ش شد ساخت یه ابزار ساده ولی کاربردی که این کارو برام انجام بده. پروسه‌ش هم اینطوریه: اول با ffmpeg صدا رو از ویدیو جدا می‌کنم. یعنی ویدیو رو می‌دی بهش، اون فقط صدای خامش رو برات درمیاره. بعدش می‌فرستمش برای مدل whisper-large-turbo که میاد کل حرفای داخل صدا رو تبدیل می‌کنه به متن و به صورت srt یا vtt زیرنویس تحویلت می‌ده. وقتی زیرنویس انگلیسی آماده شد، می‌فرستمش برای مدل NLLB (همون No Language Left Behind) که یه مدل ترنسفورمر قویه و برای ترجمه ساخته شده. اونم زیرنویس فارسی رو می‌ده بهم. البته یه حالت دیگه هم داره که به‌جای NLLB از Google Translate استفاده می‌کنه، یعنی دست خودته که با چی ترجمه کنی. با کارت گرافیک خودم که یه 3060 شش گیگه، هر ۱۰ دقیقه ویدیو رو تقریباً توی یک دقیقه پردازش می‌کنه، یعنی سرعتشم کاملاً قابل قبوله. حجم کل کد و مدل‌ها هم حدوداً ۵ گیگ درمیاد. یعنی با فقط ۵ گیگ می‌تونی یه زیرنویس‌ساز خوب داشته باشی :) فعلاً دارم یه سری قابلیت‌های دیگه هم بهش اضافه می‌کنم، مثل پشتیبانی از چند فایل پشت سر هم، هماهنگ‌سازی دقیق‌تر تایم‌کدها، و یه رابط کاربری ساده‌تر. اگه شما هم مثل من یه دوره‌ی انگلیسی بی‌زیرنویس دارید که دلتون می‌خواد فارسی‌ش کنید، یا دوست دارید این ابزار رو تست کنید، خوشحال می‌شم خبرم کنید یا نظرتون رو برام بنویسید.

تعدادی از جملات معروف رابرت مارتین که توی کتاب های clean architecture و clean code بهشون برخوردم: "The only way to go fast, is to go well." یعنی: «تنها راه برای حرکت سریع، حرکت درست و با کیفیت است.» "Clean code always looks like it was written by someone who cares." یعنی: «کدی که تمیز نوشته شده، همیشه انگار توسط فردی نوشته شده که به آن اهمیت می‌دهد.» "The ratio of time spent reading code versus writing code is well over 10 to 1." یعنی: «نسبت زمانی که صرف خواندن کد می‌شود، بیش از ۱۰ برابر زمانی است که صرف نوشتن آن می‌شود.» "Truth can only be found in one place: the code." یعنی: «حقیقت تنها در یک جا یافت می‌شود: در کد.» "A language that doesn't affect the way you think about programming is not worth knowing." یعنی: «زبانی که شیوه تفکر شما درباره برنامه‌نویسی را تغییر نمی‌دهد، ارزش یادگیری ندارد.» "If you want to go fast, if you want to get done quickly, if you want your code to be easy to write, make it easy to read." یعنی: «اگر می‌خواهید سریع پیش بروید، کارها سریع انجام شوند و کد شما راحت نوشته شود، آن را به گونه‌ای بنویسید که خواندنش آسان باشد.» "Clean code is simple and direct. Clean code reads like well-written prose." یعنی: «کد تمیز، ساده و مستقیم است؛ کد تمیز مانند نثری زیبا و روان خوانده می‌شود.»