Реальный Код pinned «обо мне 👋 кстати, надо наверное немного сказать о себе… кратко: // 20+ лет в разработке // 15+ лет разработки в области видео, стриминга, транскодирования, анализа медиа и телевидения + все что с этим связано // 10+ лет управления командами ~ ~ ~ ~ ~ ~…»
Реальный Код
хотелось написать сюда, но не знал о чем… 🤔 … и накидал скрипт, который считает статистику использования мною команд в терминале что получилось – ниже 👇 выше ☝️ можно такое на собесах спрашивать, чтобы больше узнать о человеке: чем пользуется, какой стек…
сегодня начинаю серию постов про мои топ утилиты/программы, которые я чаще всего использую
и начинаем мы... па-бааааааа-мммм... ну конечно же с питона 😆
python – это программа-интерпретатор одноименного языка программирования. что значит интерпретатор? а это такая программа, которая читает исходный код программы на этом языке и исполняет каждую строку за строкой
пробежимся по основным возможностям...
вообще, вот следующие три варианта можно использовать во всех unix-подобных операционных системах и частично с некоторыми особенностями – в Windows
// показать справку по аргументам программы и краткую информацию по ее использованию (вместо питона может быть любая программа):
в среде Windows исторически было принято вызывать страницу с описанием параметров с помощью аргумента /h или /?, однако сейчас все больше программ, которые используют unix-like стиль. да и в целом, кросс-платформенные программы обычно используют тот же unix-like подход
// вывести версию программы:
// получить развернутую помощь по программе (unix-like системы: Linux, MacOS и прочие):
еще раз подчеркну, что три варианта использования выше применимы к абсолютному большинству программ и утилит. рекомендую первым делом всегда начинать знакомство с новой утилитой через эти параметры
итак, к питону...
// запустить скрипт на выполнение:
// запустить пакет на выполнение:
например, вывести список установленных пакетов:
тут мы говорим интерпретатору запустить пакет (`-m`) с именем pip и передать ему параметр list. в итоге будет распечатан список установленных пакетов
// выполнить кусок питоновского кода:
например, вот так мы можем сгенерировать пароль:
этот код выведет что-то вроде:
или в другой раз:
// запустить интерактивную среду Python (она ещеназывается REPL, Read-Eval-Print Loop), или, проще говоря, ИДЕ на самых минималках, а скорее даже питонячий плейграунд для проверки каких-то конструкций языка:
при этом у вас появится в начале строки такой знак:
который означает, что вы находитесь как раз в интерактивном интерпретаторе питона
в нем вы можете также писать исходный код, включая многостроковые конструкции. после вбивания питоновских конструкций и жамканья Enter вы будете тут же получать результат. рекомендую: зайдите-поиграйтесь, если еще не пробовали
для выхода используйте функцию exit()
вот например как может это выглядеть:
на этом на сегодня все. happy питонинга вам 😉
#python #repl #terminal
и начинаем мы... па-бааааааа-мммм... ну конечно же с питона 😆
python – это программа-интерпретатор одноименного языка программирования. что значит интерпретатор? а это такая программа, которая читает исходный код программы на этом языке и исполняет каждую строку за строкой
пробежимся по основным возможностям...
вообще, вот следующие три варианта можно использовать во всех unix-подобных операционных системах и частично с некоторыми особенностями – в Windows
// показать справку по аргументам программы и краткую информацию по ее использованию (вместо питона может быть любая программа):
python --help
в среде Windows исторически было принято вызывать страницу с описанием параметров с помощью аргумента /h или /?, однако сейчас все больше программ, которые используют unix-like стиль. да и в целом, кросс-платформенные программы обычно используют тот же unix-like подход
// вывести версию программы:
python --version
// получить развернутую помощь по программе (unix-like системы: Linux, MacOS и прочие):
man python
еще раз подчеркну, что три варианта использования выше применимы к абсолютному большинству программ и утилит. рекомендую первым делом всегда начинать знакомство с новой утилитой через эти параметры
итак, к питону...
// запустить скрипт на выполнение:
python my_script.py
// запустить пакет на выполнение:
python -m package
например, вывести список установленных пакетов:
python -m pip list
тут мы говорим интерпретатору запустить пакет (`-m`) с именем pip и передать ему параметр list. в итоге будет распечатан список установленных пакетов
// выполнить кусок питоновского кода:
python -c <код>
например, вот так мы можем сгенерировать пароль:
python -c "import random; print(''.join(random.choice(string.ascii_letters + string.digits) for _ in range(8)))"
этот код выведет что-то вроде:
2Lqszm8l
или в другой раз:
WTgs90No
// запустить интерактивную среду Python (она ещеназывается REPL, Read-Eval-Print Loop), или, проще говоря, ИДЕ на самых минималках, а скорее даже питонячий плейграунд для проверки каких-то конструкций языка:
python
при этом у вас появится в начале строки такой знак:
>>>
который означает, что вы находитесь как раз в интерактивном интерпретаторе питона
в нем вы можете также писать исходный код, включая многостроковые конструкции. после вбивания питоновских конструкций и жамканья Enter вы будете тут же получать результат. рекомендую: зайдите-поиграйтесь, если еще не пробовали
для выхода используйте функцию exit()
вот например как может это выглядеть:
>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2024, 11, 16, 20, 9, 31, 518836)
>>> ll = [1, 2, 3, 4, 5]
>>> ll
[1, 2, 3, 4, 5]
>>> '-'.join(ll)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: sequence item 0: expected str instance, int found
>>> ', '.join(ll)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: sequence item 0: expected str instance, int found
>>> ll = ['a', 'b', 'c']
>>> '-'.join(ll)
'a-b-c'
>>> exit()
на этом на сегодня все. happy питонинга вам 😉
#python #repl #terminal
🔥3👍2❤1
а вот кстати в тему собесов…
мое мнение: в ИТ среди разработчиков и тимлидов очень многие просто не умеют проводить собеседования!
при этом собеседования либо превращаются в экзамен, либо в бенефис самоутверждения, либо в почесывание своего ЧСВ у 25-тилетних всех из себя разсеньористых сеньоров, которые прочитали две книги (ГоФ и кабанчика) и считают себя мега-экспертными гуру в разработке
другой важный аспект – очень многие в ИТ имеют крайне низкие софт-скиллы и низкий уровень эмпатии. а говоря проще – большинство интроверты (хотя тут надо понимать, что можно быть интровертом и иметь высокий уровень эмпатии)
либо собеседования проводят не те люди, которые должны 🤦♂️ ну это ваще фейспалм и проёб со стороны руководства. и да, я такое встречал, в том числе в компаниях, где я работаю либо работал 🤬
и вот вам примеры:
// глава разработки отдела в 60+ человек участвует в собесах для поиска человека не то что в нижестоящую команду, а в команду двумя уровнями ниже, то есть между ним и новым человеком будет 2 тимлида!
// на собесах черезчур много людей: приходят такие HR, глава разработки, тимлид и еще два разработчика… WAAAAAT?!!
еще бывают случаи, когда сам HR не умеет проводить собесы. придет такой на технический собес и сидит уши греет, а то и вставляет свои «экспертные» вопросы
на мой взгляд, самое главное – это человеку, который ищет человека к себе в команду, было комфортно работать с человеком
и да, моя немейнстримовая позиция, на которой я настаиваю: софт-скиллы важнее хард-скиллов. тут все просто: прокачать хард-скиллы – дело наживное и я с этим как руководитель справлюсь. а вот если человек тяжел в общении и с ним сложно коммуницировать команде – тут будут проблемы… как грится «плавали – знаем»
кстати, тут есть люди, которых я собеседовал и которые работали со мной. они знают мой подход 😉
тут ведь еще такой момент очень важный: проходить собеседования – это отдельный навык, зачастую не коррелирующий с работой как таковой. проще говоря, можно надрюкаться к собесу как к экзамену, пройти и нифига не перформить. а можно ведь и наоборот…
и вот мы подходим к тому важному, чем я хотел бы с вами поделиться – еще одним непопулярным мнением, которого я придерживаюсь: я бы предпочел посмотреть на опен-сорс код человека, и он бы мне сказал о многом, а в первую очередь, о его зрелости как профессионала
да-да! не надо никаких задач на собесах. они мало что дадут. потому что помимо кодинга в работу разработчика входит очень много чего еще: коммуникации, написание документации, проведение код-ревью, умение оформлять свой код, следование процессам и так далее…
именно поэтому, когда я даю тестовое, я прошу коммитить все это в открытую репу. потому что, еще раз вкратце – коммиты покажут уровень разработчика и его подход к работе!
вот вам пример, какие уровни зрелости человека могут быть на основе его коммитов на ГитХабе/ГитЛабе:
// не пользуется системой контроля версий или закоммитил тестовое один раз одним куском как было на локальном диске
// коммит раз в месяц с текстом "-" со всеми потрохами личных настроек его ИДЕ
// коммит раз в неделю с текстом "as is"
// обдуманные коммиты с разбиением на атомарные фичи + используется .gitignore
// настроенный CI/CD с пре-коммит хуком, автоматическим прогоном тестов
// все настроено с отвязкой от ИДЕ, можно девелопить продукт под все платформы
// все что выше + заполненный ридми
// все то же самое + выкатка релиза с автоматическими релиз ноутсами, документация
// все выше + поддержка проекта: нетоксичный ответ на вопросы пользователей, прием ПРов, ведение проекта в ГитХабе (задачи, планы по релизам) и прочее
вот тебе и распределение по грейдам. очевидно, что человек, который делает все это, значительно опытнее, профессиональнее и более зрелый, чем находящийся на первых ступенях
конечно, это один из примеров, накиданный на скорую руку (на самом деле это был мой ответ на RSDN – я там кстати есть, забегайте). но это вот именно то, на что я лично обращаю внимание
и не надо никаких задротских разворотов списка, круглых люков и гномиков 🤮
#собесы #зрелось #софтСкиллы
мое мнение: в ИТ среди разработчиков и тимлидов очень многие просто не умеют проводить собеседования!
при этом собеседования либо превращаются в экзамен, либо в бенефис самоутверждения, либо в почесывание своего ЧСВ у 25-тилетних всех из себя разсеньористых сеньоров, которые прочитали две книги (ГоФ и кабанчика) и считают себя мега-экспертными гуру в разработке
другой важный аспект – очень многие в ИТ имеют крайне низкие софт-скиллы и низкий уровень эмпатии. а говоря проще – большинство интроверты (хотя тут надо понимать, что можно быть интровертом и иметь высокий уровень эмпатии)
либо собеседования проводят не те люди, которые должны 🤦♂️ ну это ваще фейспалм и проёб со стороны руководства. и да, я такое встречал, в том числе в компаниях, где я работаю либо работал 🤬
и вот вам примеры:
// глава разработки отдела в 60+ человек участвует в собесах для поиска человека не то что в нижестоящую команду, а в команду двумя уровнями ниже, то есть между ним и новым человеком будет 2 тимлида!
// на собесах черезчур много людей: приходят такие HR, глава разработки, тимлид и еще два разработчика… WAAAAAT?!!
еще бывают случаи, когда сам HR не умеет проводить собесы. придет такой на технический собес и сидит уши греет, а то и вставляет свои «экспертные» вопросы
на мой взгляд, самое главное – это человеку, который ищет человека к себе в команду, было комфортно работать с человеком
и да, моя немейнстримовая позиция, на которой я настаиваю: софт-скиллы важнее хард-скиллов. тут все просто: прокачать хард-скиллы – дело наживное и я с этим как руководитель справлюсь. а вот если человек тяжел в общении и с ним сложно коммуницировать команде – тут будут проблемы… как грится «плавали – знаем»
кстати, тут есть люди, которых я собеседовал и которые работали со мной. они знают мой подход 😉
тут ведь еще такой момент очень важный: проходить собеседования – это отдельный навык, зачастую не коррелирующий с работой как таковой. проще говоря, можно надрюкаться к собесу как к экзамену, пройти и нифига не перформить. а можно ведь и наоборот…
и вот мы подходим к тому важному, чем я хотел бы с вами поделиться – еще одним непопулярным мнением, которого я придерживаюсь: я бы предпочел посмотреть на опен-сорс код человека, и он бы мне сказал о многом, а в первую очередь, о его зрелости как профессионала
да-да! не надо никаких задач на собесах. они мало что дадут. потому что помимо кодинга в работу разработчика входит очень много чего еще: коммуникации, написание документации, проведение код-ревью, умение оформлять свой код, следование процессам и так далее…
именно поэтому, когда я даю тестовое, я прошу коммитить все это в открытую репу. потому что, еще раз вкратце – коммиты покажут уровень разработчика и его подход к работе!
вот вам пример, какие уровни зрелости человека могут быть на основе его коммитов на ГитХабе/ГитЛабе:
// не пользуется системой контроля версий или закоммитил тестовое один раз одним куском как было на локальном диске
// коммит раз в месяц с текстом "-" со всеми потрохами личных настроек его ИДЕ
// коммит раз в неделю с текстом "as is"
// обдуманные коммиты с разбиением на атомарные фичи + используется .gitignore
// настроенный CI/CD с пре-коммит хуком, автоматическим прогоном тестов
// все настроено с отвязкой от ИДЕ, можно девелопить продукт под все платформы
// все что выше + заполненный ридми
// все то же самое + выкатка релиза с автоматическими релиз ноутсами, документация
// все выше + поддержка проекта: нетоксичный ответ на вопросы пользователей, прием ПРов, ведение проекта в ГитХабе (задачи, планы по релизам) и прочее
вот тебе и распределение по грейдам. очевидно, что человек, который делает все это, значительно опытнее, профессиональнее и более зрелый, чем находящийся на первых ступенях
конечно, это один из примеров, накиданный на скорую руку (на самом деле это был мой ответ на RSDN – я там кстати есть, забегайте). но это вот именно то, на что я лично обращаю внимание
и не надо никаких задротских разворотов списка, круглых люков и гномиков 🤮
#собесы #зрелось #софтСкиллы
❤2🔥2❤🔥1👍1💯1
Реальный Код
хотелось написать сюда, но не знал о чем… 🤔 … и накидал скрипт, который считает статистику использования мною команд в терминале что получилось – ниже 👇 выше ☝️ можно такое на собесах спрашивать, чтобы больше узнать о человеке: чем пользуется, какой стек…
следующая утилита, которую я использую чаще всего после питона, это настоящий ящик Пандоры 🤪 просто бездонный кладезь с кучей возможностей 🙈
ffmpeg
вообще, FFmpeg – это целый фреймворк, который состоит как из набора консольных утилит, так и из SDK. предназначен он для всевозможной работы с аудио/видео/субтитрами и прочее-прочее-прочее, относящееся к трансформации, записи, воспроизведения, вещания и бработки аудио- видео- и других данных
ffmpeg – это как раз одна из консольных утилит, входящих в состав FFmpeg. вот как они сами пишут о себе:
ну вроде все ясно – это такой в своем роде медиа-комбайн 😆
если чуть конкретнее, то эта утилита предназначена для перекодирования (т.е. преобразования) форматов из одного в другой. по-правильному это называется транскодирование. например, вы хотите сжать 4K видео в 720p, потому что смотреть будете на маленьком экране и вам нужно уменьшить размер файла. или же вам нужно приготовить видео для монтажа, и вы хотите сделать цветовые преобразования в соответствии с требуемым вам форматом
переходим к примерам...
// если ваш телевизор понимает только MKV, а вы скачали файл в формате MP4, то следующая команда поможет вам преобразовать его в нужный формат:
да, утилита достаточно умная, чтобы понять по расширению, что на выходе вы хотите получить именно MKV. -c copy говорит, что аудио и видео мы не перекодируем, т.е. оставляем их как есть
а вот такой командой вы можете ужать видео из 4K до 1280х720:
давайте ченить поинтереснее...
// например, вырезать аудио из файла:
// или например вырезать из файла только кусок с 10 по 30 секунды:
// ну и еще интересненького напоследок – сделаем гифку из картинок, лежащих в папке:
при этом мы ожидаем, что в текущей папке у нас лежат файлы с именем 01.png, 02.png, 03.png ну и так далее...
на этом для ознакомления все. ffmpeg настолько обширный и всемогущий инструмент, что одного поста ну никак не хватит осветить и доли процента его возможностей
могу лишь сказать, что так как я занимаюсь этим профессионально (о чем свидетельствует уверенное второе место в моем списке наиболее употребимых утилит), то могу отдельно ответить на ваши вопросы или запросы. кроме того, вы можете подписаться на мой другой (пока пустой, увы 😒) канал на соответствующую тематику – @the_real_streaming. всем велком 🙌
#ffmpeg #terminal
ffmpeg
вообще, FFmpeg – это целый фреймворк, который состоит как из набора консольных утилит, так и из SDK. предназначен он для всевозможной работы с аудио/видео/субтитрами и прочее-прочее-прочее, относящееся к трансформации, записи, воспроизведения, вещания и бработки аудио- видео- и других данных
ffmpeg – это как раз одна из консольных утилит, входящих в состав FFmpeg. вот как они сами пишут о себе:
Universal media converter
ну вроде все ясно – это такой в своем роде медиа-комбайн 😆
если чуть конкретнее, то эта утилита предназначена для перекодирования (т.е. преобразования) форматов из одного в другой. по-правильному это называется транскодирование. например, вы хотите сжать 4K видео в 720p, потому что смотреть будете на маленьком экране и вам нужно уменьшить размер файла. или же вам нужно приготовить видео для монтажа, и вы хотите сделать цветовые преобразования в соответствии с требуемым вам форматом
переходим к примерам...
// если ваш телевизор понимает только MKV, а вы скачали файл в формате MP4, то следующая команда поможет вам преобразовать его в нужный формат:
ffmpeg -i file.mp4 -c copy file.mkv
да, утилита достаточно умная, чтобы понять по расширению, что на выходе вы хотите получить именно MKV. -c copy говорит, что аудио и видео мы не перекодируем, т.е. оставляем их как есть
а вот такой командой вы можете ужать видео из 4K до 1280х720:
ffmpeg -i file_4k.mp4 -s:v 1280x720 file_720p.mp4
давайте ченить поинтереснее...
// например, вырезать аудио из файла:
ffmpeg -i file.mp4 -c copy -an file_no_audio.mp4
// или например вырезать из файла только кусок с 10 по 30 секунды:
ffmpeg -ss 00:00:10 -i file.mp4 -to 00:00:20 -c copy file_short.mp4
// ну и еще интересненького напоследок – сделаем гифку из картинок, лежащих в папке:
ffmpeg -framerate 0.5 -i %02d.png action.gif
при этом мы ожидаем, что в текущей папке у нас лежат файлы с именем 01.png, 02.png, 03.png ну и так далее...
на этом для ознакомления все. ffmpeg настолько обширный и всемогущий инструмент, что одного поста ну никак не хватит осветить и доли процента его возможностей
могу лишь сказать, что так как я занимаюсь этим профессионально (о чем свидетельствует уверенное второе место в моем списке наиболее употребимых утилит), то могу отдельно ответить на ваши вопросы или запросы. кроме того, вы можете подписаться на мой другой (пока пустой, увы 😒) канал на соответствующую тематику – @the_real_streaming. всем велком 🙌
#ffmpeg #terminal
❤2👍2🔥1👏1🤓1
regex
хочу поделиться с вами онлайн-утилитой, в которой я всегда отлаживаю свои регулярные выражения – https://regex101.com
могу рекомендовать, да. очень удобная. мне лично очень нравится. есть поддержка диалектов для разных языков
ну а те кто не в курсе о чем речь – как-нить расскажу подробнее
если вкратце, это некое описание строки, которую мы ожидаем увидеть либо которую хотим найти в тексте
например, указывая (\d+), мы говорим, что ожидаем увидеть число (0, 1 или более цифр). а так (abc){3} – ровно три раза повторяющуюся строку abc, то есть
да-да. конечно же парсинг (синтаксический разбор) имейлов, телефонов и логов происходит с использование регулярок
например, нам нужно найти все появления времени в строке. для этого можем использовать такой regex:
на следующих входных данных он даст соответствующий результат:
для наглядности приложил скрин, как это выглядит на указанном сайте
как-то так вкратце. поиграйтесь… вот, в частности, можете написать регулярное выражение для поиска дат в привычном нам формате
#regex #junior #link
хочу поделиться с вами онлайн-утилитой, в которой я всегда отлаживаю свои регулярные выражения – https://regex101.com
могу рекомендовать, да. очень удобная. мне лично очень нравится. есть поддержка диалектов для разных языков
ну а те кто не в курсе о чем речь – как-нить расскажу подробнее
если вкратце, это некое описание строки, которую мы ожидаем увидеть либо которую хотим найти в тексте
например, указывая (\d+), мы говорим, что ожидаем увидеть число (0, 1 или более цифр). а так (abc){3} – ровно три раза повторяющуюся строку abc, то есть
abcabcabc
да-да. конечно же парсинг (синтаксический разбор) имейлов, телефонов и логов происходит с использование регулярок
например, нам нужно найти все появления времени в строке. для этого можем использовать такой regex:
(\d{1,2}):(\d{1,2})
на следующих входных данных он даст соответствующий результат:
11:00 – True
1:00 – True
:22 – False
11:x – False
xx:12 – False
03:04 – True
для наглядности приложил скрин, как это выглядит на указанном сайте
как-то так вкратце. поиграйтесь… вот, в частности, можете написать регулярное выражение для поиска дат в привычном нам формате
mm.dd.yyyy
. потестировать сможете как раз на этом сайте#regex #junior #link
❤2🔥2👍1🤓1
Реальный Код
хотелось написать сюда, но не знал о чем… 🤔 … и накидал скрипт, который считает статистику использования мною команд в терминале что получилось – ниже 👇 выше ☝️ можно такое на собесах спрашивать, чтобы больше узнать о человеке: чем пользуется, какой стек…
замыкает первую тройку моих наиболее используемых программ ffprobe
ffprobe – это еще одна утилита из продукта FFmpeg (да-да, именно так, в названии продукта именно две заглавных F). предназначена она, как видно из названия, для пробы, то есть позволяет «пощупать», что же енто там такое есть в медиа-файле
несмотря на кажущуюся простоту, утилита имеет достаточно обширный набор опций. с которым, кстати, можно подробнее ознакомиться на странице официальной документации https://ffmpeg.org/ffprobe.html
// давайте начнем с простого – получить информацию о файле:
получаем:
тут вы видим информацию о контейнере (формате) – в нашем случае это семейство ISO-совместивым форматов, по-простому конкретно здесь – mp4. длительность файла 3 минуты 46 секунд. видео у нас AVC/H.264 с разрешением 1920x824. аудио, как мы видим, отсутствует
также можно посмотреть и намного более детальную информацию: подробную информацию по каждому стриму, фреймы, пакеты и так далее. для этого есть ряд команд, вроде -show_format, -show_frames, -show_packets, -show_entries. эту более подробную информацию мы можем вывести в различных форматах, таких как ini, CSV, JSON, XML
вообще, рядовому пользователю такая подробная информация вряд ли пригодится, разве что только из любопытства. а вот для людей, занимающихся видео – вполне может быть полезна
кстати, мы конечно должны понимать, насколько удобно можно получить и работать с такой информацией в связке ffprobe+python: запускает ffprobe, указывая нужные нам параметры, сохранив результат в JSON, а потом загрузив эти данные в питоновский скрипт и обрабатывать так, как нужно нам. может как-нибудь напишу отдельный пост с подобным примером
итак, давайте компем глубже...
// получить подробные данные об аудио и видео и сохранить это в файл в формате JSON:
на выходе в файле forrest_gump_trailer.json будет обычный JSON с подробной информацией о параметрах аудио/видео
// ну и еще одной командой мы получим информацию о каждом видео-кадре в формате CSV:
в файле я получил вот такую информацию:
кстати, этой же командой можно получить информацию и о стриминговых форматах, таких как RTSP (потоки с камер, например) или HLS
// вот так мы получим информацию о записанном потоке с WWDC 2024:
// получить информацию о потоке с камеры (чисто для примера, нужно подставить известный вам адрес камеры):
на сегодня все. stay tuned!
#ffmpeg #ffprobe #terminal
ffprobe – это еще одна утилита из продукта FFmpeg (да-да, именно так, в названии продукта именно две заглавных F). предназначена она, как видно из названия, для пробы, то есть позволяет «пощупать», что же енто там такое есть в медиа-файле
несмотря на кажущуюся простоту, утилита имеет достаточно обширный набор опций. с которым, кстати, можно подробнее ознакомиться на странице официальной документации https://ffmpeg.org/ffprobe.html
// давайте начнем с простого – получить информацию о файле:
ffprobe forrest_gump_trailer_1080p.mp4
получаем:
ffprobe version 7.0.2 Copyright (c) 2007-2024 the FFmpeg developers
... (тут часть вывода пропущена)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'forrest_gump_trailer_1080p.mp4':
Metadata:
major_brand : dash
minor_version : 0
compatible_brands: iso6avc1mp41
creation_time : 2019-05-19T16:58:13.000000Z
Duration: 00:03:46.31, start: 0.000000, bitrate: 2850 kb/s
Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1920x824 [SAR 1:1 DAR 240:103], 58 kb/s, 23.98 fps, 23.98 tbr, 24k tbn (default)
Metadata:
creation_time : 2019-05-19T16:58:13.000000Z
handler_name : ISO Media file produced by Google Inc. Created on: 05/19/2019.
vendor_id : [0][0][0][0]
тут вы видим информацию о контейнере (формате) – в нашем случае это семейство ISO-совместивым форматов, по-простому конкретно здесь – mp4. длительность файла 3 минуты 46 секунд. видео у нас AVC/H.264 с разрешением 1920x824. аудио, как мы видим, отсутствует
также можно посмотреть и намного более детальную информацию: подробную информацию по каждому стриму, фреймы, пакеты и так далее. для этого есть ряд команд, вроде -show_format, -show_frames, -show_packets, -show_entries. эту более подробную информацию мы можем вывести в различных форматах, таких как ini, CSV, JSON, XML
вообще, рядовому пользователю такая подробная информация вряд ли пригодится, разве что только из любопытства. а вот для людей, занимающихся видео – вполне может быть полезна
кстати, мы конечно должны понимать, насколько удобно можно получить и работать с такой информацией в связке ffprobe+python: запускает ffprobe, указывая нужные нам параметры, сохранив результат в JSON, а потом загрузив эти данные в питоновский скрипт и обрабатывать так, как нужно нам. может как-нибудь напишу отдельный пост с подобным примером
итак, давайте компем глубже...
// получить подробные данные об аудио и видео и сохранить это в файл в формате JSON:
fprobe -show_streams -show_programs -output_format json forrest_gump_trailer.mp4 -o forrest_gump_trailer.json
на выходе в файле forrest_gump_trailer.json будет обычный JSON с подробной информацией о параметрах аудио/видео
// ну и еще одной командой мы получим информацию о каждом видео-кадре в формате CSV:
ffprobe -show_frames -select_streams v:0 -output_format csv forrest_gump_trailer.mp4 -o forrest_gump_trailer.csv
в файле я получил вот такую информацию:
frame,video,0,1,0,0.000000,0,0.000000,0,0.000000,512,0.040000,106188,7955,1280,720,0,0,0,0,yuv420p,1:1,I,0,0,0,tv,bt709,bt709,bt709,left
frame,video,0,0,512,0.040000,512,0.040000,512,0.040000,512,0.040000,114143,394,1280,720,0,0,0,0,yuv420p,1:1,P,0,0,0,tv,bt709,bt709,bt709,left
...
кстати, этой же командой можно получить информацию и о стриминговых форматах, таких как RTSP (потоки с камер, например) или HLS
// вот так мы получим информацию о записанном потоке с WWDC 2024:
ffprobe https://devstreaming-cdn.apple.com/videos/wwdc/2024/102/1/A8ECDDD9-F782-4267-B6E0-782B4D9ECB88/cmaf.m3u8
// получить информацию о потоке с камеры (чисто для примера, нужно подставить известный вам адрес камеры):
ffprobe rtsp://admin:123456@192.168.1.180:540/media/video1
на сегодня все. stay tuned!
#ffmpeg #ffprobe #terminal
❤2🔥2👍1🤓1
открыл DBeaver (это такая десктоп-утилита для работы с базами данных). обычно я пользуюсь Valentina Studio. ну вот такой у меня выбор 🤷♂️ зашла, хоть и не всем нравится
ну короче, решил попробовать бивера ентого… только открывается окно, и я мысленно думаю «че интерфейс такой странный?» вот чисто подсознательно – странный
далее полез поглядеть (без задней мысли) че там у них в комьюнити в ГитХабе, какие задачки есть открытые, че в коде интересного…
и вижу – 99,6% кода на джаве 🤦♂️ ну теперь все понятно!
вот почему? ну почему почти все Java-десктопные программы с таким странным интерфейсом?? у меня прям глаз за них цепляется. что, блин, Eclipse, что другие (не вспомню уже, потому что стараюсь их избегать… бррррр). ну вот странные и неказистые
вот такое у меня отношение к десктопу на Джаве 🤷♂️
#java #desktop #applications #db
ну короче, решил попробовать бивера ентого… только открывается окно, и я мысленно думаю «че интерфейс такой странный?» вот чисто подсознательно – странный
далее полез поглядеть (без задней мысли) че там у них в комьюнити в ГитХабе, какие задачки есть открытые, че в коде интересного…
и вижу – 99,6% кода на джаве 🤦♂️ ну теперь все понятно!
вот почему? ну почему почти все Java-десктопные программы с таким странным интерфейсом?? у меня прям глаз за них цепляется. что, блин, Eclipse, что другие (не вспомню уже, потому что стараюсь их избегать… бррррр). ну вот странные и неказистые
вот такое у меня отношение к десктопу на Джаве 🤷♂️
#java #desktop #applications #db
❤1🔥1😁1🤣1🙈1
а вот вам любопытное – бенчмарк веб-серверов https://www.techempower.com/benchmarks/
ищите свой любимый фреймворк, берите названия фреймворков для изучения и тыканья в них палочкой. но имейте ввиду: там есть не все. как минимум, там просят добавить некий плюсовый Drogon, которого в бенчмарке нет
и пожалуйста, помните: это искусственные тесты. то есть для ваших нужд и в вашем кейсе те же фреймворки могут показывать иные результаты и быть не такими шустрыми
#benchmark #link #webServer
ищите свой любимый фреймворк, берите названия фреймворков для изучения и тыканья в них палочкой. но имейте ввиду: там есть не все. как минимум, там просят добавить некий плюсовый Drogon, которого в бенчмарке нет
и пожалуйста, помните: это искусственные тесты. то есть для ваших нужд и в вашем кейсе те же фреймворки могут показывать иные результаты и быть не такими шустрыми
#benchmark #link #webServer
www.techempower.com
TechEmpower Framework Benchmarks
Performance comparison of web application frameworks using community-contributed test implementations.
🔥1🤔1
немного полезностей вам
говорить ниже будем про Линукс/Мак
бывают такие команды, которые я вам рекомендую НЕ сохранять в истории. например, ввод пароля в открытом виде
ну допустим, у вас есть скрипт, который принимает пароль системы для каких-то действий. так вот, если вы введете вызов этого скрипта и передадите пароль в голом виде, это сохранится в истории, после чего кто-то может этим воспользоваться, вызвав команду
и увидев ваш пароль
небольшое отвлечение: в целом, конечно же, лучше вообще не передавать пароли в утилиты/скрипты в открытом виде. предпочитайте этому промпты самих утилит, тк обычно они вообще не отображают их на экране
ну например, вместо изменения пароля пользователя в постгре таким способом
используйте команду внтури psql
ну так вот, если все же вам приходится отдавать пароль в голом виде, то начните команду с пробела. и тогда она не будет сохранена в истории 😉
вот такой лайфхак. проверяйте!
#terminal #hint #security #postgresql
говорить ниже будем про Линукс/Мак
бывают такие команды, которые я вам рекомендую НЕ сохранять в истории. например, ввод пароля в открытом виде
ну допустим, у вас есть скрипт, который принимает пароль системы для каких-то действий. так вот, если вы введете вызов этого скрипта и передадите пароль в голом виде, это сохранится в истории, после чего кто-то может этим воспользоваться, вызвав команду
history
и увидев ваш пароль
небольшое отвлечение: в целом, конечно же, лучше вообще не передавать пароли в утилиты/скрипты в открытом виде. предпочитайте этому промпты самих утилит, тк обычно они вообще не отображают их на экране
ну например, вместо изменения пароля пользователя в постгре таким способом
ALTER USER <user_name> WITH PASSWORD ‘<password>’;
используйте команду внтури psql
sudo -u postgres psql
postgres=# \password postgres
ну так вот, если все же вам приходится отдавать пароль в голом виде, то начните команду с пробела. и тогда она не будет сохранена в истории 😉
вот такой лайфхак. проверяйте!
#terminal #hint #security #postgresql
❤1🔥1🤓1
захотелось мне что-то пофилософствовать и порассуждать про работу по найму. на самом деле, размышления на эту тему были еще в прошлом году, и вот сейчас созрел поделиться
в общем, речь пойдет про вопрос «когда пора уходить из компании?»
помимо привычного ряда причин я задумался над одной не самой очевидной…
когда тебе нечему научиться у коллег
как так получается? очень просто. обычно ты чему-то постоянно учишься у коллег
когда ты джун, ты учишься у опытных коллег коммитить, ребейзить, не наступать на грабли, методам отладки, как что-то запустить-поставить и прочее
когда мидл, учишься у сеньоров писать более оптимальный код, не копипастить, обкладывать тестами, немного задумываться про архитектуру
когда сеньор, начинаешь учиться у тим-лида декомпозировать, оценивать сроки, давать задачи джунам и помогать мидлам, смотришь, как он разруливает конфликты, как ведет митинги, как ведет себя в команде, коммуницирует, и все также прокачиваешь технические скилы. у того же тим-лида или архитектора учишься дизайнить АПИ, интегрироваться со сторонними системами и соседними командами
когда ты тим-лид, ты учишься у коллег тим-лидов решать тим-лидские вопросы: в основном по коммуникациям внутри команды, разруливать сложные ситуации в межличностных отношениях, увольнять, нанимать, строить планы на команду и взаимодействовать с соседними отделами, планировать с другими тим-лидами общую активность. у юнит-лида или Head of R&D учишься планировать в долгосрок, разруливать сложные проектные треугольники «время-качество-деньги», знакомишься с ФОТом и бюрократией, учишься мыслить стратегически на горизонте 3-5 лет
когда ты Head of R&D или CTO, ты учишься уже у собственника бизнеса или топ-менеджмента: здесь больше про бизнес, переговоры, освоение рынка, занятие новых ниш, куда двигаются технологии и индустрия, как управлять большим «кораблем» с огромным экипажем, когда одно твое движение даст видимую отдачу через месяцы, учишься ждать и принимать решения, которые скажутся на N людях…
а когда ты понимаешь, что на своей текущей позиции ты уже ни у кого ничему не можешь научиться новому, вот тогда и становится грустно 😞 демотивация, бессмысленность. ты стоишь у этой стеклянной двери, и понимаешь, что нового ты ничего тут уже не узнаешь… и при этом тебе не дают возможность научить других…
и вот тут получается тупик. и тогда понимаешь – тут дальше уже бессмысленно
#работа #философия
в общем, речь пойдет про вопрос «когда пора уходить из компании?»
помимо привычного ряда причин я задумался над одной не самой очевидной…
когда тебе нечему научиться у коллег
как так получается? очень просто. обычно ты чему-то постоянно учишься у коллег
когда ты джун, ты учишься у опытных коллег коммитить, ребейзить, не наступать на грабли, методам отладки, как что-то запустить-поставить и прочее
когда мидл, учишься у сеньоров писать более оптимальный код, не копипастить, обкладывать тестами, немного задумываться про архитектуру
когда сеньор, начинаешь учиться у тим-лида декомпозировать, оценивать сроки, давать задачи джунам и помогать мидлам, смотришь, как он разруливает конфликты, как ведет митинги, как ведет себя в команде, коммуницирует, и все также прокачиваешь технические скилы. у того же тим-лида или архитектора учишься дизайнить АПИ, интегрироваться со сторонними системами и соседними командами
когда ты тим-лид, ты учишься у коллег тим-лидов решать тим-лидские вопросы: в основном по коммуникациям внутри команды, разруливать сложные ситуации в межличностных отношениях, увольнять, нанимать, строить планы на команду и взаимодействовать с соседними отделами, планировать с другими тим-лидами общую активность. у юнит-лида или Head of R&D учишься планировать в долгосрок, разруливать сложные проектные треугольники «время-качество-деньги», знакомишься с ФОТом и бюрократией, учишься мыслить стратегически на горизонте 3-5 лет
когда ты Head of R&D или CTO, ты учишься уже у собственника бизнеса или топ-менеджмента: здесь больше про бизнес, переговоры, освоение рынка, занятие новых ниш, куда двигаются технологии и индустрия, как управлять большим «кораблем» с огромным экипажем, когда одно твое движение даст видимую отдачу через месяцы, учишься ждать и принимать решения, которые скажутся на N людях…
а когда ты понимаешь, что на своей текущей позиции ты уже ни у кого ничему не можешь научиться новому, вот тогда и становится грустно 😞 демотивация, бессмысленность. ты стоишь у этой стеклянной двери, и понимаешь, что нового ты ничего тут уже не узнаешь… и при этом тебе не дают возможность научить других…
и вот тут получается тупик. и тогда понимаешь – тут дальше уже бессмысленно
#работа #философия
🔥4💯2👍1😢1
о полезности чтения чужих исходников
я кажется уже упомниал, что крайне полезно читать чужой код. благо, егокак говна за баней очень много на ГитХабе: по любой тематике, любого качества, на любом языке
через это ты не только учишься быстро понимать и вникать в код (а это тоже навык), но самое главное – можешь учиться новому (к вопросу про мой предыдущий пост, кстати☝️), перенимать какие-то фишки, приемчики или даже узнавать новые конструкции языка или используемые бибилиотеки. ну а где-то, наоборот, можешь понять, почему ты бы написал лучше и чем данный код плох, какие есть минусы и почему его сложно читать (=поддерживать)
это, кстати, касается и код-ревью: важно читать и перенимать чужой опыт и фишечки написания кода
так вот… читаю я сегодня на досуге код OpenShot (это такой видеоредактор). а что примечательно – его ГУЕвая часть написана на связке Python+Qt
читаю-читаю, и натыкаюсь в разделе инициализации логов на такую конструкцию:
и узнаю, что в питоне, оказывается, из коробки есть log rotation (об этом в другой раз; вкратце, это когда лог пишется до определенного момента в файл, после чего начинает писаться в следующий файл, чтобы файлы не разрастались)
поглядел в доке: так там целая поляна всевозможных лог хендлеров, от null до отправления UDP-датаграмм
так что в очередной раз даю совет: читайте чужой код!
#python #log #sourceCode #опыт
я кажется уже упомниал, что крайне полезно читать чужой код. благо, его
через это ты не только учишься быстро понимать и вникать в код (а это тоже навык), но самое главное – можешь учиться новому (к вопросу про мой предыдущий пост, кстати☝️), перенимать какие-то фишки, приемчики или даже узнавать новые конструкции языка или используемые бибилиотеки. ну а где-то, наоборот, можешь понять, почему ты бы написал лучше и чем данный код плох, какие есть минусы и почему его сложно читать (=поддерживать)
это, кстати, касается и код-ревью: важно читать и перенимать чужой опыт и фишечки написания кода
так вот… читаю я сегодня на досуге код OpenShot (это такой видеоредактор). а что примечательно – его ГУЕвая часть написана на связке Python+Qt
читаю-читаю, и натыкаюсь в разделе инициализации логов на такую конструкцию:
#
# Create rotating file handler
#
if os.path.exists(info.USER_PATH):
fh = logging.handlers.RotatingFileHandler(
os.path.join(info.USER_PATH, 'openshot-qt.log'),
encoding="utf-8",
maxBytes=25*1024*1024, backupCount=3)
fh.setLevel(info.LOG_LEVEL_FILE)
fh.setFormatter(file_formatter)
log.addHandler(fh)
else:
class DummyHandler:
def setLevel(self, level):
return True
fh = DummyHandler()
и узнаю, что в питоне, оказывается, из коробки есть log rotation (об этом в другой раз; вкратце, это когда лог пишется до определенного момента в файл, после чего начинает писаться в следующий файл, чтобы файлы не разрастались)
поглядел в доке: так там целая поляна всевозможных лог хендлеров, от null до отправления UDP-датаграмм
так что в очередной раз даю совет: читайте чужой код!
#python #log #sourceCode #опыт
🔥2👍1👌1
Реальный Код
+ АПИшку давайте прикрутим, чё уж там 😁 дернем публичное АПИ для получения списка праздников, чтобы отметить красным официальные выходные дни тут в канале все как всегда просто, когда двигаемся маленькими шагами step-by-step – берем requests, получаем ответ…
кто недавно присоединился, вот рекомендую посмотреть интересный пост, где на коленке накидан производственный календарь на голом HTML и нативном питоновском веб-сервере
только что проверил – для текущего года тоже работает 😃
только что проверил – для текущего года тоже работает 😃
🔥1🆒1
… а вообще, хочется в очередной раз сказать, что Scrum, как и в целом Agile – это в первую, и самую главную, очередь, про изменение подхода в голове! это про иной майндсет и другое восприятие разработки! это про более высокий уровень зрелости команды 🚀
а всякие формальности вроде настройки доски в Джире, количество столбцов и переходы между статусами – это 100500-е дело…
жаль, что очень многие этого не понимают и гордо заявляют «у нас Скрам», продолжая работать в проектом подходе. а еще многие воротят нос и жалуются на свой скрам, где он на самом деле неправильный и превращен в формальности (например, отчитаться на дейлике 🤮)
#scrum
а всякие формальности вроде настройки доски в Джире, количество столбцов и переходы между статусами – это 100500-е дело…
жаль, что очень многие этого не понимают и гордо заявляют «у нас Скрам», продолжая работать в проектом подходе. а еще многие воротят нос и жалуются на свой скрам, где он на самом деле неправильный и превращен в формальности (например, отчитаться на дейлике 🤮)
#scrum
🔥1💯1
CTO vs. VP Engineering
привет! сегодня не совсем обычная тема для этого канала. и тем не менее, уже пару недель хочу с вами поделиться информацией, которую сам для себя разложил по полочкам
казалось бы: две таких похожих должности и вроде про одно и то же 🤷♂️ однако, есть разница
CTO отвечает за стратегическое развитие компании в плане технологий и направления движения разработки. он своего рода двигатель и идейный вдохновитель технической и продуктовой стороны компании. он понимает тренды развития технологий и с учетом этого выстраивает стратегию развития компании и направляет компанию в разрезе средне- и долгосрочного планирования
зачастую CTO стоит у истоков компании и является одним из основателей и учредителей. да, в крупных и очень крупных компаниях, корпорациях все больше вероятность, что это будет и наемный человек совсем со стороны
VP Engineering же, находясь под CTO, занимается вопросами деливери, соблюдения сроков, оценки производительности команд и пипл-менеджментом. то есть он скорее про более «приземленные» вещи. однаяко, при этом его роль очень высока и он конечно точно также планирует работу всех команд и отделов
проще говоря, CTO отвечает за куда, тогда как VP Engineering – за как и в срок
конечно, грань достаточно тонкая. более того, в различных компаниях как в одну, так и в другую позицию могут вкладываться различные смыслы и ставиться разные цели
также, оба эти человека дополняют друг друга и плотно взаимодействуют друг с другом
зачастую в стартапах, ессно, есть только CTO, который выполняет обе роли. роль же VP Engineering уместна обычно в больших компаниях с сотнями и тысячами разработчиков/тестировщиков/прочих ИТ-спецов
вот такой сегодня у меня рассказ о том, какие бывают роли (очень высокие роли) в мире разработки ПО
#management #career #roles #профессии #cLevel
привет! сегодня не совсем обычная тема для этого канала. и тем не менее, уже пару недель хочу с вами поделиться информацией, которую сам для себя разложил по полочкам
казалось бы: две таких похожих должности и вроде про одно и то же 🤷♂️ однако, есть разница
CTO отвечает за стратегическое развитие компании в плане технологий и направления движения разработки. он своего рода двигатель и идейный вдохновитель технической и продуктовой стороны компании. он понимает тренды развития технологий и с учетом этого выстраивает стратегию развития компании и направляет компанию в разрезе средне- и долгосрочного планирования
зачастую CTO стоит у истоков компании и является одним из основателей и учредителей. да, в крупных и очень крупных компаниях, корпорациях все больше вероятность, что это будет и наемный человек совсем со стороны
VP Engineering же, находясь под CTO, занимается вопросами деливери, соблюдения сроков, оценки производительности команд и пипл-менеджментом. то есть он скорее про более «приземленные» вещи. однаяко, при этом его роль очень высока и он конечно точно также планирует работу всех команд и отделов
проще говоря, CTO отвечает за куда, тогда как VP Engineering – за как и в срок
конечно, грань достаточно тонкая. более того, в различных компаниях как в одну, так и в другую позицию могут вкладываться различные смыслы и ставиться разные цели
также, оба эти человека дополняют друг друга и плотно взаимодействуют друг с другом
зачастую в стартапах, ессно, есть только CTO, который выполняет обе роли. роль же VP Engineering уместна обычно в больших компаниях с сотнями и тысячами разработчиков/тестировщиков/прочих ИТ-спецов
вот такой сегодня у меня рассказ о том, какие бывают роли (очень высокие роли) в мире разработки ПО
#management #career #roles #профессии #cLevel
❤2✍1❤🔥1🤔1
создал организацию в ГитХабе для учебных проектов, которые бы лежали не как сейчас, в одной репе, а каждый проект – в отдельной репе в рамках одной группы
велком смотреть 🙌 скоро будет наполняться 🚀
https://github.com/The-Real-Coding
#gitHub #news
велком смотреть 🙌 скоро будет наполняться 🚀
https://github.com/The-Real-Coding
#gitHub #news
GitHub
The Real Coding
Playground aka примеры простых программ для новичков + для Telegram и YouTube каналов - The Real Coding
🔥2❤1👍1🤩1🦄1