نمیدونم تا حالا بهش برخوردید یا نه ولی بعضی وقتا هست که یه فیلم یا سریالی دانلود میکنید که زیرنویسش باهاش سینک نیست. معمولا چند ثانیه جلوتر یا عقبتره. در این جور مواقع اولین راه حل پیدا کردن یه سری زیرنویس دیگهست که با نسخهی فیلم شما سینک باشه. راه حل دیگه نصب کردن ابزارهای ادیت زیرنویسه. حالا اگه حال نداشته باشیم چیز جدید نصب کنیم و نخوایم راه حلهای قبلی رو انجام بدیم چیکار کنیم؟
احتمالا که با ffmpeg آشنا هستید. یه ابزار برای کار با محتواهای صوتی و تصویری عه. کامند زیر توی ffmpeg میاد به میزانی که شما میخواید یه زیرنویس رو جا به جا میکنه روی فیلم.
مقدار input همون اسم فایل ویدیو ورودی شماست و output هم ویدیو اصلاح شده. اون [OFFSET_SECONDS] مدت زمانی که میخواد زیرنویس رو جلو عقب کنید رو نشون میده. اگه عدد مثبت بذارید تایم زیرنویس رو میبره جلو(دیرتر نمایش داده میشه) و اگه منفی باشه میبره عقب. [SUBTITLE_TRACK_INDEX] هم نشون میده میخواید با کدوم یکی از زیرنویسهایی که روی ویدیو هست این کار رو بکنید. چون یه فایل ویدیو ممکنه حاوی چندین زیرنویس باشه. البته معمولا ویدیوها یه زیرنویس داره و مقدار 0 براش جوابه.
مثلا کامند زیر زیرنویس اول روی ویدیو قسمت اول فصل اول Vikings رو ۱۰ ثانیه میبره جلو.
احتمالا که با ffmpeg آشنا هستید. یه ابزار برای کار با محتواهای صوتی و تصویری عه. کامند زیر توی ffmpeg میاد به میزانی که شما میخواید یه زیرنویس رو جا به جا میکنه روی فیلم.
ffmpeg -i input.mkv -itsoffset [OFFSET_SECONDS] -i input.mkv -map 0 -map 1:s:[SUBTITLE_TRACK_INDEX] -c copy -disposition:s:0 default output.mkv
مقدار input همون اسم فایل ویدیو ورودی شماست و output هم ویدیو اصلاح شده. اون [OFFSET_SECONDS] مدت زمانی که میخواد زیرنویس رو جلو عقب کنید رو نشون میده. اگه عدد مثبت بذارید تایم زیرنویس رو میبره جلو(دیرتر نمایش داده میشه) و اگه منفی باشه میبره عقب. [SUBTITLE_TRACK_INDEX] هم نشون میده میخواید با کدوم یکی از زیرنویسهایی که روی ویدیو هست این کار رو بکنید. چون یه فایل ویدیو ممکنه حاوی چندین زیرنویس باشه. البته معمولا ویدیوها یه زیرنویس داره و مقدار 0 براش جوابه.
مثلا کامند زیر زیرنویس اول روی ویدیو قسمت اول فصل اول Vikings رو ۱۰ ثانیه میبره جلو.
ffmpeg -i Vikings.S01E01.mkv -itsoffset 10 -i Vikings.S01E01.mkv -map 0 -map 1:s:0 -c copy -disposition:s:0 default Vikings.S01E01.Fixed.mkv
مکشوفات علیز
نمیدونم تا حالا بهش برخوردید یا نه ولی بعضی وقتا هست که یه فیلم یا سریالی دانلود میکنید که زیرنویسش باهاش سینک نیست. معمولا چند ثانیه جلوتر یا عقبتره. در این جور مواقع اولین راه حل پیدا کردن یه سری زیرنویس دیگهست که با نسخهی فیلم شما سینک باشه. راه حل…
در همین راستا سروش یه ابزار معرفی کرد بهم به اسم subliminal. این ابزاره میاد بر اساس فایل شما بین پروایدرهای مختلف میگرده و زیرنویس سینک پیدا میکنه. از زبانهای مختلف هم پشتیبانی میکنه.
GitHub
GitHub - Diaoul/subliminal: Subnoscripts, faster than your thoughts
Subnoscripts, faster than your thoughts. Contribute to Diaoul/subliminal development by creating an account on GitHub.
"TCP over ICMP"
بعضی وقتها که در یک سری شرایط ممکنه دسترسیمون به اینترنت محدود بشه. به این صورت که به هر دلیلی دیگه نتونیم کانکشن tcp/udp به بیرون از شبکهی لوکال(یا ملی) خودمون باز کنیم. ولی مثلا همچنان بتونیم با استفاده از یه سری پروتکلهای سبکتر به خارج از شبکهمون وصل بشیم(مثل dns یا icmp). که معمولا icmp به خاطر ضرورتش برای منیجمنت شبکه بسته نمیشه.
حالا توی این شرایط میتونیم یجوری این دسترسی نداشتن رو دور بزنیم. یه مفهومی به اسم tunneling توی شبکه وجود داره که شما میاد محتوایی که میخواید ارسال کنید رو میذارید داخل یه پروتکل دیگه و ارسال میکنید. مثلا توی این شرایط اگه بیایم tcp segment رو تیکه تیکه کنیم و بذاریمش توی payload بستههای icmp request و ارسال کنیم انگار که داریم یه تونل ایجاد میکنیم و دسترسیمون به دنیای بیرون باز میشه.
حالا برای انجام این کار نیاز به دوتا سرور داریم که یکیش توی شبکه خودمون باشه و یه سرور بیرون از شبکهی خودمون باشه و سرور داخلیمون به سرور خارجیمون اصطلاحا ping داشته باشه.
یه سری ابزار اوپن سورس هستن ک این تانل رو ایجاد میکنن. ولی خب معمولا ستاپ کردنش یه مقداری خرکاری داره. حالا این وسط یه سری ابزار مثل ansible وجود دارن که به اتومیت کردن کارهاتون کمک میکنن. حالا من برای راحتی ستاپ کردن این تانل اومدم یه ansible نوشتم که شما صرفا آیپی دو تا سرورتون رو میدید و خودش میاد یه تانل درست میکنه و v2ray هم روی سرور داخلیتون نصب میکنه و نهایتا یه uri براتون تولید میکنه که به راحتی میتونید توی کلاینت v2ray ای که روی موبایل یا کامپیوترتون دارید importش کنید و به اینترنت آزاد وصل بشید.
سعی کردم براش یه داکیومنتی بنویسم که استفاده ازش و دسترسی به اینترنت آزاد برای همه، به سادگی با خرید دو تا سرور و یه کامند امکان پذیر باشه.
https://github.com/alizmhdi/ptunnel-ansible
بعضی وقتها که در یک سری شرایط ممکنه دسترسیمون به اینترنت محدود بشه. به این صورت که به هر دلیلی دیگه نتونیم کانکشن tcp/udp به بیرون از شبکهی لوکال(یا ملی) خودمون باز کنیم. ولی مثلا همچنان بتونیم با استفاده از یه سری پروتکلهای سبکتر به خارج از شبکهمون وصل بشیم(مثل dns یا icmp). که معمولا icmp به خاطر ضرورتش برای منیجمنت شبکه بسته نمیشه.
حالا توی این شرایط میتونیم یجوری این دسترسی نداشتن رو دور بزنیم. یه مفهومی به اسم tunneling توی شبکه وجود داره که شما میاد محتوایی که میخواید ارسال کنید رو میذارید داخل یه پروتکل دیگه و ارسال میکنید. مثلا توی این شرایط اگه بیایم tcp segment رو تیکه تیکه کنیم و بذاریمش توی payload بستههای icmp request و ارسال کنیم انگار که داریم یه تونل ایجاد میکنیم و دسترسیمون به دنیای بیرون باز میشه.
حالا برای انجام این کار نیاز به دوتا سرور داریم که یکیش توی شبکه خودمون باشه و یه سرور بیرون از شبکهی خودمون باشه و سرور داخلیمون به سرور خارجیمون اصطلاحا ping داشته باشه.
یه سری ابزار اوپن سورس هستن ک این تانل رو ایجاد میکنن. ولی خب معمولا ستاپ کردنش یه مقداری خرکاری داره. حالا این وسط یه سری ابزار مثل ansible وجود دارن که به اتومیت کردن کارهاتون کمک میکنن. حالا من برای راحتی ستاپ کردن این تانل اومدم یه ansible نوشتم که شما صرفا آیپی دو تا سرورتون رو میدید و خودش میاد یه تانل درست میکنه و v2ray هم روی سرور داخلیتون نصب میکنه و نهایتا یه uri براتون تولید میکنه که به راحتی میتونید توی کلاینت v2ray ای که روی موبایل یا کامپیوترتون دارید importش کنید و به اینترنت آزاد وصل بشید.
سعی کردم براش یه داکیومنتی بنویسم که استفاده ازش و دسترسی به اینترنت آزاد برای همه، به سادگی با خرید دو تا سرور و یه کامند امکان پذیر باشه.
https://github.com/alizmhdi/ptunnel-ansible
GitHub
GitHub - alizmhdi/ptunnel-ansible
Contribute to alizmhdi/ptunnel-ansible development by creating an account on GitHub.
من چون این روزا حوصلهم سر رفته و بیکارم و خسته شده بودم هر دفعه برای پیدا کردن جواب "امروز چندمه؟" سایت "time.ir" رو باز کنم، این cli رو نوشتم که توی ترمینال تقویم شمسی رو به همراه روزهای هفته نشون میده. به صورت دیفالت تقویم ماه و روزی که توش هستیم رو نشون میده ولی کلا هر تقویم هر سال و ماهی که بخواید رو هم داره. سعی کردم فیچرهای کامند cal که برای تقویم میلادی عه رو داشته باشه. شاید هم بعدا تعطیلات رسمی رو بهش اضافه کنم.
پ.ن: در فرایند نوشتنش از DeepSeek کمک گرفتم :دی
https://github.com/alizmhdi/shamsi-calendar
پ.ن: در فرایند نوشتنش از DeepSeek کمک گرفتم :دی
https://github.com/alizmhdi/shamsi-calendar
مکشوفات علیز
خداحافظی کردن برام خیلی سخته. حداقل لبخند بزرگ روی صورتم موقعی که در آغوش میکشمت و بهت میگم "خداحافظ و مراقب خودت باش" نشونش نمیده. از اون خداحافظیهایی که معلوم نیست چند وقت دیگه همدیگه رو میبینیم باز. از اونایی که بعدش فاصلهمون میشه چند هزار کیلومتر.…
یک ماه دیگه این موقع توی هواپیما ام. نمیدونم شایدم دارم وسایلم رو جمع میکنم از موشکها و جنگندههای بالای سر تهران فرار کنم. ولی خب با هر احتمالی به نظر ماه آخر رو باید اختصاص داد به خداحافظی. از اون ماههایی که میشینی همه دوست و آشناها رو لیست میکنی که قبلا رفتن حتما ببینیشون. حتی برای چند دقیقه. حتی برای چند ثانیه. تا اگه یه وقتی نتونستی تا چند سال ببینیشون یه ذخیرهی کوچیک از لبخند روی صورتشون و گرمی صداشون داشته باشی.
"بمون، نرو"
پنج سالم بود. یه کوله پشتی کوچیک داشتم که روش عروسک پنگوئن بود. همیشه مینداختمش رو دوشم. مهمونی و خونه و مهدکودک فرقی نداشت. همه جا بود. آخرین بار تو خیابون جاش گذاشتم.
دبیرستان بودم. دوستام یواش یواش مهاجرت میکردن. بعضیاشون رو نتونستم برای آخرین بار ببینم و خداحافظی کنم. دوستام رو توی فرودگاه جا گذاشتم.
بزرگ شدم. اومدم دانشگاه. یه سریا رو موقع فرار تو خیابون کشاورز، انقلاب و پارکینگ دانشگاه جا گذاشتم.
بزرگتر شدم. ۲۳ سالمه. خودم دارم مهاجرت میکنم. شاید دارم خانواده و دوستامو جا میذارم.
ولی الان هستم. دیگه نمیخوام چیزی رو جا بذارم. تو میخوای برو، میخوای بمون. من چه برم، چه بمونم. تو رو میذارم تو این قلب. تو رو جا نمیذارم.
امیدوارم شما هم دیگه کسی رو جا نذارید.
پنج سالم بود. یه کوله پشتی کوچیک داشتم که روش عروسک پنگوئن بود. همیشه مینداختمش رو دوشم. مهمونی و خونه و مهدکودک فرقی نداشت. همه جا بود. آخرین بار تو خیابون جاش گذاشتم.
دبیرستان بودم. دوستام یواش یواش مهاجرت میکردن. بعضیاشون رو نتونستم برای آخرین بار ببینم و خداحافظی کنم. دوستام رو توی فرودگاه جا گذاشتم.
بزرگ شدم. اومدم دانشگاه. یه سریا رو موقع فرار تو خیابون کشاورز، انقلاب و پارکینگ دانشگاه جا گذاشتم.
بزرگتر شدم. ۲۳ سالمه. خودم دارم مهاجرت میکنم. شاید دارم خانواده و دوستامو جا میذارم.
ولی الان هستم. دیگه نمیخوام چیزی رو جا بذارم. تو میخوای برو، میخوای بمون. من چه برم، چه بمونم. تو رو میذارم تو این قلب. تو رو جا نمیذارم.
امیدوارم شما هم دیگه کسی رو جا نذارید.
Timber Mountain
من یه چند وقتی هست اومدم آمریکا پی اچ دی بخونم مثلا. تقریبا ۳ هفته. هی یه سری چیزا نوشتم دربارهی رفتن، مهاجرت، خداحافظی، اون قاب آخر پشت شیشه فرودگاه امام و ... ولی هر بار پشیمون شدم از منتشر کردنشون. نمیدونم اصلا مگه آدم باید همه چی رو منتشر کنه؟ چی میشه حالا یه غم رفتن بمونه برای خودم و داد نزنمش.
اینجا زندگی جالبه، جدیده، سخته، یه سری چیزاش فرق داره، آدماش فرق دارن. تنهایی زندگی کردن یه چیزه، تنها بودن یه چیز دیگه. ولی خب حداقل مثل اینکه کوههاش خیلی فرقی ندارن. اصلا انگاری که کوهها همه جا شبیه به هم ان.
من یه چند وقتی هست اومدم آمریکا پی اچ دی بخونم مثلا. تقریبا ۳ هفته. هی یه سری چیزا نوشتم دربارهی رفتن، مهاجرت، خداحافظی، اون قاب آخر پشت شیشه فرودگاه امام و ... ولی هر بار پشیمون شدم از منتشر کردنشون. نمیدونم اصلا مگه آدم باید همه چی رو منتشر کنه؟ چی میشه حالا یه غم رفتن بمونه برای خودم و داد نزنمش.
اینجا زندگی جالبه، جدیده، سخته، یه سری چیزاش فرق داره، آدماش فرق دارن. تنهایی زندگی کردن یه چیزه، تنها بودن یه چیز دیگه. ولی خب حداقل مثل اینکه کوههاش خیلی فرقی ندارن. اصلا انگاری که کوهها همه جا شبیه به هم ان.
"معمولی"
من عاشق گوش دادن به داستان آدمها هستم. به خصوص آنهایی که نویسنده نیستند.
آدمهایی که با تو مینشینند کنار جدولهای خیابان و از صدر تا ذیل داستانشان را میریزند وسط دایره. پک اول سیگارشان را که میزنند، تا آتش به جان توتون نیوفتاده، صاف و ساده، یکرنگ، بیدوز و کلک کلمات را از دلشان راهی زبانشان میکنند. آنهایی که با سراشیبیهای داستان آتش به جانشان میافتد و پک بعدی را عمیقتر میزنند و با سرازیریها نفس راحتی را از سینهشان بیرون میدهند. آنهایی که در اوج داستانشان چنان ذوق میکنند که وقتی به چشمانشان خیره میشوی لبخند کوچکی گوشهی لبهایت مینشیند. آنهایی که کلماتشان از زیر دست هزار ویراستار و مدیر مسئول و دبیر تحریره رد نشده تا روی کاغذ ریخته شود. آنهایی که برای روایتشان دنبال کلمات قلمبه سلمبه و ادبی نمیگردند و شش دنگ حواسشان را جمع نکردهاند تا نیمفاصلهای از زیر دستشان در نرود؛ بر خلاف این متن.
من عاشق گوش دادن به داستان آدمهای معمولی هستم. به خصوص آنهایی که نویسنده نیستند. آن آدم معمولیهایی که زندگیهای معمولیای در خانههای معمولیشان دارند. آدمهایی که صدایشان معمولی است و داستانهای غیر معمولیشان را با معمولیترین فرم ممکن برایت تعریف میکنند. معمولیترین داستانهایی که از غیر معمولیترین رمانهای داستایوفسکی هم شنیدنیتر و خواندنیتر است. آدم معمولیهایی که داستانهایشان در همین مکانهای معمولی وسط تهران خودمان اتفاق میافتد نه ده هزار کیلومتر آن طرفتر.
من عاشق گوش دادن به داستان آدمهام. و راستش رو بخواید خیلی دلم برای شنیدن آدمها تنگ شده. حتی برای اون پیرمرد توی پارک لاله که هر دفعه میخواست با یه داستان دروغی تیغمون بزنه.
من عاشق گوش دادن به داستان آدمها هستم. به خصوص آنهایی که نویسنده نیستند.
آدمهایی که با تو مینشینند کنار جدولهای خیابان و از صدر تا ذیل داستانشان را میریزند وسط دایره. پک اول سیگارشان را که میزنند، تا آتش به جان توتون نیوفتاده، صاف و ساده، یکرنگ، بیدوز و کلک کلمات را از دلشان راهی زبانشان میکنند. آنهایی که با سراشیبیهای داستان آتش به جانشان میافتد و پک بعدی را عمیقتر میزنند و با سرازیریها نفس راحتی را از سینهشان بیرون میدهند. آنهایی که در اوج داستانشان چنان ذوق میکنند که وقتی به چشمانشان خیره میشوی لبخند کوچکی گوشهی لبهایت مینشیند. آنهایی که کلماتشان از زیر دست هزار ویراستار و مدیر مسئول و دبیر تحریره رد نشده تا روی کاغذ ریخته شود. آنهایی که برای روایتشان دنبال کلمات قلمبه سلمبه و ادبی نمیگردند و شش دنگ حواسشان را جمع نکردهاند تا نیمفاصلهای از زیر دستشان در نرود؛ بر خلاف این متن.
من عاشق گوش دادن به داستان آدمهای معمولی هستم. به خصوص آنهایی که نویسنده نیستند. آن آدم معمولیهایی که زندگیهای معمولیای در خانههای معمولیشان دارند. آدمهایی که صدایشان معمولی است و داستانهای غیر معمولیشان را با معمولیترین فرم ممکن برایت تعریف میکنند. معمولیترین داستانهایی که از غیر معمولیترین رمانهای داستایوفسکی هم شنیدنیتر و خواندنیتر است. آدم معمولیهایی که داستانهایشان در همین مکانهای معمولی وسط تهران خودمان اتفاق میافتد نه ده هزار کیلومتر آن طرفتر.
من عاشق گوش دادن به داستان آدمهام. و راستش رو بخواید خیلی دلم برای شنیدن آدمها تنگ شده. حتی برای اون پیرمرد توی پارک لاله که هر دفعه میخواست با یه داستان دروغی تیغمون بزنه.
دانشگاه در ذهن من، برای هر جامعهای نهاد مهم و اثرگذاریه و به طبع، داستانهای حول دانشگاه هم اهمیت ویژهتری برای من دارن. از طرفی چند وقتیه از این ویدیو به اون ویدیو در یوتیوب سیر میکنم تا داستان جالبی پیدا کنم و بشینم پای صحبتش. بین همین سیر و سفرها یک کانالی پیدا کردم مصاحبههای جالبی با آدمهای جالبی میکنه که بین تمام روایتها، مصاحبه با سیاوش شهشهانی و فرهاد اردلان چشمم رو گرفت.
اگر احیانا داستانهای قبل و بعد از انقلاب حول فضای دانشگاهی کشور، تاسیس و سرگذشت دانشگاه شریف، IPM، دانشکدههای علوم پایه(ریاضی و فیزیک)، پایهگذاری زیرساخت اینترنت و ... براتون جالبه به نظرم حیفه که گوشش ندید.
اگر احیانا داستانهای قبل و بعد از انقلاب حول فضای دانشگاهی کشور، تاسیس و سرگذشت دانشگاه شریف، IPM، دانشکدههای علوم پایه(ریاضی و فیزیک)، پایهگذاری زیرساخت اینترنت و ... براتون جالبه به نظرم حیفه که گوشش ندید.
"آدمیزاد"
حمایت برای پادکستهای نوپا، با خدم و حشم و ویراستار و نویسندهست. روایت آدمها فقط نیاز به شنیدن داره.
اینستاگرامشون.
کستباکسشون.
حمایت برای پادکستهای نوپا، با خدم و حشم و ویراستار و نویسندهست. روایت آدمها فقط نیاز به شنیدن داره.
اینستاگرامشون.
کستباکسشون.
تو سال 2019 دولت قزاقستان با ادعای افزایش امنیت و جلوگیری از دزدیهای اینترنتی ISPها رو مجبور کرد یک Root CA روی دستگاههای ملت نصب کنند.
با نصب این Root CA، دولت عملاً سرتیفیکیت تقلبی میداد دست ملت و میتونست ترافیکهای HTTPS ملت رو رمزگشایی کنه، پسورد و ایناشون رو بدزده و اکتیویتیشون رو مانیتور کنه. وقتی کاربری میخواست به سایتهایی مثل Google یا Instagram وصل بشه، تجهیزات ISP دولتی وسط راه ارتباط رو قطع میکردند، ترافیک رو بازخوانی کرده و با Private Key خودشون دوباره رمز میکردند.
این کار رو هم فقط از طریق SNI میکردن و کل ترافیک اینترنت رو رصد نمیکردن. یعنی فقط وقتی دامنههای خاصی (مثل facebook.com) رو در پکتهای Client Hello میدیدن، Certificate جعلی اینجکت میکردن و تمام. اما حالا چجوری لو رفتن؟
یه سری ریسرچر امنیت از تو آمریکا(که اتفاقا سوپروایزرشون ایرانی هم هست) اومدن یه سری ریکوئست فیک با SNI گوگل و اینا به سرورهای censorship زدن رو با Hyperquack (خلاصهش اینه یه ریکوئست با دامنهی اصلی و یک ریکوئست با دامنهی فیک به یه وب سرور میزنن تا از روی تفاوت خروجی بتونن بفهمن داره جنس دستکاری میشه یا نه.) تشخیص دادن که سرتیفیکت داره اینجکت میشه.
آخرشم مرورگرهای Chrome و Firefox اون Root CA دولتی رو Block کردن تا داستان حل و فصل بشه بره.
دیتیل بیشترش رو هم تو این مقاله میتونید بخونید.
با نصب این Root CA، دولت عملاً سرتیفیکیت تقلبی میداد دست ملت و میتونست ترافیکهای HTTPS ملت رو رمزگشایی کنه، پسورد و ایناشون رو بدزده و اکتیویتیشون رو مانیتور کنه. وقتی کاربری میخواست به سایتهایی مثل Google یا Instagram وصل بشه، تجهیزات ISP دولتی وسط راه ارتباط رو قطع میکردند، ترافیک رو بازخوانی کرده و با Private Key خودشون دوباره رمز میکردند.
این کار رو هم فقط از طریق SNI میکردن و کل ترافیک اینترنت رو رصد نمیکردن. یعنی فقط وقتی دامنههای خاصی (مثل facebook.com) رو در پکتهای Client Hello میدیدن، Certificate جعلی اینجکت میکردن و تمام. اما حالا چجوری لو رفتن؟
یه سری ریسرچر امنیت از تو آمریکا(که اتفاقا سوپروایزرشون ایرانی هم هست) اومدن یه سری ریکوئست فیک با SNI گوگل و اینا به سرورهای censorship زدن رو با Hyperquack (خلاصهش اینه یه ریکوئست با دامنهی اصلی و یک ریکوئست با دامنهی فیک به یه وب سرور میزنن تا از روی تفاوت خروجی بتونن بفهمن داره جنس دستکاری میشه یا نه.) تشخیص دادن که سرتیفیکت داره اینجکت میشه.
آخرشم مرورگرهای Chrome و Firefox اون Root CA دولتی رو Block کردن تا داستان حل و فصل بشه بره.
دیتیل بیشترش رو هم تو این مقاله میتونید بخونید.