Реальный Код
25 subscribers
42 photos
6 videos
55 links
The Real Coding - твой проводник в мир разработки ПО.

Делюсь реальным опытом разработки с новичками.

Практические знания и советы по:
- Python
- Selenium
- командная строка
- C++
- много других интересностей, которые пригодятся вам в профессии
Download Telegram
Forwarded from Job in IT&Digital
Ведущий технический писатель (docs as code)
Удаленный формат (только по России) или гибрид (по желанию), офис в Москве.
180К — 280К

Известная российская компания, есть аккредитация.
Уникальный для России проект, которым пользуются 350К разработчиков.

Задачи:
 — разработка документации и методических материалов для нескольких продуктов: описание новой функциональности, проработка существующей документации, вся документация на русском языке;
 — исследование предметной области и сбор недостающей информации для подготовки технической документации;
 — взаимодействие с разработчиками технологии.

Подробнее
Ищет Оксана Полякова op@new.hr
👀2
лист компрехэншн

если вы хоть раз задумывались, зачем нужны list comprehension в питоне, и, может быть думали, что они быстрее, то все просто и однозначный ответ раскрыт в PEP 202 (https://peps.python.org/pep-0202/):

Rationale

List comprehensions provide a more concise way to create lists in situations where map() and filter() and/or nested loops would currently be used.


так что это всего лишь для краткости записи


[subscriber.add_mark(random.choice(['👍', '👎', '🤔'])) for subscriber in get_subscribers()]


#python #pep #comprehension
👍42🔥2🤓1👀1
хотелось написать сюда, но не знал о чем… 🤔

… и накидал скрипт, который считает статистику использования мною команд в терминале

что получилось – ниже 👇 выше ☝️

можно такое на собесах спрашивать, чтобы больше узнать о человеке: чем пользуется, какой стек 😆

#python #stats #terminal
🔥5😁2🤓2
а вот вам немножечко раскрытие меня и моих локов 🤭 (LOC, Lines f Code) и как оно менялось за год

первая картинка – 14 сентября 2023, вторая – 13 ноября 2024

видно, что питона стало сильно больше. вообще, в последнее время питон – мой основной и очень любимый инструмент

также видно, что чутка щупал плюсы и немного Го

ну и видно, что питон просто жутко вырвался вперед – более половины моего кода – на питоне!

и в целом, ±25K строк кода за год только лишь на питоне и только лишь пет- и сайд-проектов – это мощно! 💪 горжусь собой 😇

да, это только лишь мой код не включая third-party и dependencies, конечно же

ну а сделать такие же графики и запулить их к себе в ГитХаб можно с помощью утилиты https://github.com/DiPaolo/git-stats-plate-gen

да, она может не так легко завестись. может дойдут руки и сделаю веб-сервис, чтобы каждый легко и просто мог такое сделать для себя. опять же, тут есть нюанс: фишка в безопасности и приватности – утилита запускается на вашем компе и ничего никуда не отправляет! это ее главная отличительная выгодная особенность

потому – будут проблемы с запуском и буду видеть, что кому-то это нужно – доработаю ее, чтобы легко было запускать на любом компе без плясок с бубном (как мы не любим 🤣🤣)

#sourceCode #tools #loc
👏4🔥3🏆3😎1
finita la comedia

нет-нет, все хорошо, просто речь сегодня пойдет про ключевое слово (а точнее – аннотацию) final в питоне

надо сказать, что я лично узнал об этой фиче совсем недавно, тогда как в языке она присутствует с версии 3.8

ну и сразу дам ссылку на PEP – https://peps.python.org/pep-0591/

если говорить кратко – это аналог ключевого слова const в других языках. тем самым мы говорим, что значение переменной не будет меняться

хотя погодите! все ли так очевидно? давайте смотреть на примере…


from typing import Final

TEST = 11
print(f'TEST before: {TEST}')

TEST += 1
print(f'TEST after: {TEST}')

TEST_CONST: Final = 12
print(f'TEST_CONST before: {TEST_CONST}')

TEST_CONST += 1
print(f'TEST_CONST after: {TEST_CONST}')


вывод:

TEST before: 11
TEST after: 12
TEST_CONST before: 12
TEST_CONST after: 13


хммммм…. но как же так?! я же сам сказал, что это константа, как мы смогли поменять ее значение??

все дело в том, что мы должны помнить, питон – нетипизированный язык! и все эти задания типов, в том числе и рассматриваемая сегодня аннотация final – это не строгое правило, а лишь подсказка (так и называется – type hint) для IDE и для утилит статического анализа

то есть, в ИДЕшке-то оно вам подсветит возможную проблему, а статический анализатор навроде ruff – ругнется и скажет, что у вас ошибка в коде. при всем при это код вы сможете запустить и он будет изменять значение вашей переменной, обозначенной как final!

так что имейте ввиду эту особенность, ну и конечно крайне рекомендую – используйте аннотацию final везде, где только возможно. этим вы еще дополнительно скажете человеку, который будет читать ваш код, что это – константа, и не предполагается ее изменение. хотя, теперь вы знаете, что если очень хочется… 😁

#python #final
🤔3😱3👀3
я завалил собес по питону 😒

это было ожидаемо, на самом деле… ввиду моей особенности. те, кто знакомы со мной лично, могут знать: я очень плох в технических собесах

я могу что угодно написать: написать быстро, хорошо, качественно, практически на любом языке и независимо от фреймворка… я легко переключаюсь между языками и фреймворками, даже стеками… но на собесе… 😒😒😒 на собесе совсем не так

такая вот у меня особенность 🤷‍♂️ да, я хорош в практике и очень плох в теории. а готовиться-зубрить… ну честно говоря не хочется, да и смысла большого не вижу

вообще, собес был ну очень простой 🤦‍♂️

но вот эта моя особенность не позволила мне его пройти. но как сказал в начале – я особо и не возлагал на него надежд. позиция кстати была изначалльно на юнит-лида, но потом перешла на тимлида. так что да – это был собес по питону на тимлида

что ваще смешно: была задача, которую я сам делал 2 недели назад 😅 в своем рабочем коде. мне там понадобилось считать длительность отработки запроса, и я прикрутил декоратор, который это делает. ну прикрутил за 20 минут и забыл

да, так это работает у меня: я могу быстро найти решение, запилить его и дальше забыть. но при этом буду помнить, где, что, для чего и как в общих чертах я это делал

и тут они значит дают задачу: написать декоратор, который запускает функцию N раз и считает длительность ее выполнения. и я не смог его написать! 😩 я помнил, когда, где и для чего писал такой же декоратор, а вот вспомнить наизусть синтаксис я не смог 🤷‍♂️

короче, такие у меня дела…

это я все к чему… ну во-первых, поделиться с вами. во-вторых, вас ждут решения этих задач 😅

#python #собес
😱2😢2😭2😨1😎1
эффект Зейгарник

ну и еще дополню предыдущий пост… я сначала хотел написать, потом стер: решил, что лишнее и не по теме. и все же хочется чуть выйти за рамки только лишь кода и поделиться с вами…

не так давно узнал одну штуку – так называемый эффект Зейгарник. открыт был как раз той самой дамой с такой фамилией сто лет назад

заключается он в том, что незавершенные задачи запоминаются нашим мозгом лучше, чем завершенные

это перекликается с программами: положил данные в стек, выполнил задачу – попнул 😅 из стека. и все – забыли-едем дальше. а вот если данные из стека по какой-то причине не выбрасываются – то происходит memory leak (утечка памяти) – плохая, вредная и порой трудноуловимая штука (как раз кстати щас такую исследую в ffmpeg на определенных данных – но это другая история…)

также и в человеческом мозге: то, что актуальное – помнится хорошо. а если по какой-то причине это все начинает застревать в мозгу/памяти – начинаются проблемы с психикой…

все это еще сильно перекликается с гештальт-подходом

интересеная, в общем, штука... рекомендую ознакомиться, кому интересно

ну так вот, у себя я действие этого эффекта замечаю постоянно. это вообще мне очень свойственно – сделал и забыл. вот и на собесе то же самое случилось: две недели назад для продакшн-кода делал, сделал, забыл, то есть все – вымылось из памяти. на собесе то же самое не смог вспомнить…

в общем, возьмите на заметку 😉 не все ж нам про кодинг тут разговаривать…

#психология #неКодинг
👍3🔥32🤔1👀1
вообще, очень часто и много хочется в последнее время писать сюда. потому ждите… 😜

ну и рассказывайте про канальчик своим друзьям/знакомым/коллегам. мне будет невероятно приятно, если число подписчиков будет расти ☺️
🔥2🥰2🎉21🦄1
Скоро начну опять снимать для вас видосы на новом оборудовании. Очень надеюсь, что качество станет лучше и смотреть будет приятнее ☺️
🔥52👍2🎉2🤗2
то самое слово – корутины 😱

читаю сейчас первоисточник про корутины в питоне – PEP 492 – Coroutines with async and await syntax (https://peps.python.org/pep-0492/)

позже приду к вам с мыслями и информацией по поводу асинхронщины нашей любимой 😆 … и такой полезной 🔥

#python #pep #coroutines #async
🔥3🤓2👀2
обо мне 👋

кстати, надо наверное немного сказать о себе…

кратко:
// 20+ лет в разработке
// 15+ лет разработки в области видео, стриминга, транскодирования, анализа медиа и телевидения + все что с этим связано
// 10+ лет управления командами

~ ~ ~ ~ ~ ~ ~ ~ ~

пара моих статей на Medium: https://medium.com/@dipaolo
GitHub: https://github.com/DiPaolo
GitLab: https://gitlab.com/dipaolo
LinkedIn: https://www.linkedin.com/in/pavel-ditenbir-31838965/

~ ~ ~ ~ ~ ~ ~ ~ ~

мои каналы:

YouTube: https://www.youtube.com/@the_real_coding
Yandex.Дзен: https://dzen.ru/the_real_coding
ВК: https://vk.com/the_real_coding

всем привет здесь 🙌

#обоМне
👍53🔥2👏2
Реальный Код pinned «обо мне 👋 кстати, надо наверное немного сказать о себе… кратко: // 20+ лет в разработке // 15+ лет разработки в области видео, стриминга, транскодирования, анализа медиа и телевидения + все что с этим связано // 10+ лет управления командами ~ ~ ~ ~ ~ ~…»
Реальный Код
хотелось написать сюда, но не знал о чем… 🤔 … и накидал скрипт, который считает статистику использования мною команд в терминале что получилось – ниже 👇 выше ☝️ можно такое на собесах спрашивать, чтобы больше узнать о человеке: чем пользуется, какой стек…
сегодня начинаю серию постов про мои топ утилиты/программы, которые я чаще всего использую

и начинаем мы... па-бааааааа-мммм... ну конечно же с питона 😆

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👍21
а вот кстати в тему собесов…

мое мнение: в ИТ среди разработчиков и тимлидов очень многие просто не умеют проводить собеседования!

при этом собеседования либо превращаются в экзамен, либо в бенефис самоутверждения, либо в почесывание своего ЧСВ у 25-тилетних всех из себя разсеньористых сеньоров, которые прочитали две книги (ГоФ и кабанчика) и считают себя мега-экспертными гуру в разработке

другой важный аспект – очень многие в ИТ имеют крайне низкие софт-скиллы и низкий уровень эмпатии. а говоря проще – большинство интроверты (хотя тут надо понимать, что можно быть интровертом и иметь высокий уровень эмпатии)

либо собеседования проводят не те люди, которые должны 🤦‍♂️ ну это ваще фейспалм и проёб со стороны руководства. и да, я такое встречал, в том числе в компаниях, где я работаю либо работал 🤬

и вот вам примеры:

// глава разработки отдела в 60+ человек участвует в собесах для поиска человека не то что в нижестоящую команду, а в команду двумя уровнями ниже, то есть между ним и новым человеком будет 2 тимлида!

// на собесах черезчур много людей: приходят такие HR, глава разработки, тимлид и еще два разработчика… WAAAAAT?!!

еще бывают случаи, когда сам HR не умеет проводить собесы. придет такой на технический собес и сидит уши греет, а то и вставляет свои «экспертные» вопросы

на мой взгляд, самое главное – это человеку, который ищет человека к себе в команду, было комфортно работать с человеком

и да, моя немейнстримовая позиция, на которой я настаиваю: софт-скиллы важнее хард-скиллов. тут все просто: прокачать хард-скиллы – дело наживное и я с этим как руководитель справлюсь. а вот если человек тяжел в общении и с ним сложно коммуницировать команде – тут будут проблемы… как грится «плавали – знаем»

кстати, тут есть люди, которых я собеседовал и которые работали со мной. они знают мой подход 😉

тут ведь еще такой момент очень важный: проходить собеседования – это отдельный навык, зачастую не коррелирующий с работой как таковой. проще говоря, можно надрюкаться к собесу как к экзамену, пройти и нифига не перформить. а можно ведь и наоборот…

и вот мы подходим к тому важному, чем я хотел бы с вами поделиться – еще одним непопулярным мнением, которого я придерживаюсь: я бы предпочел посмотреть на опен-сорс код человека, и он бы мне сказал о многом, а в первую очередь, о его зрелости как профессионала

да-да! не надо никаких задач на собесах. они мало что дадут. потому что помимо кодинга в работу разработчика входит очень много чего еще: коммуникации, написание документации, проведение код-ревью, умение оформлять свой код, следование процессам и так далее…

именно поэтому, когда я даю тестовое, я прошу коммитить все это в открытую репу. потому что, еще раз вкратце – коммиты покажут уровень разработчика и его подход к работе!

вот вам пример, какие уровни зрелости человека могут быть на основе его коммитов на ГитХабе/ГитЛабе:

// не пользуется системой контроля версий или закоммитил тестовое один раз одним куском как было на локальном диске
// коммит раз в месяц с текстом "-" со всеми потрохами личных настроек его ИДЕ
// коммит раз в неделю с текстом "as is"
// обдуманные коммиты с разбиением на атомарные фичи + используется .gitignore
// настроенный CI/CD с пре-коммит хуком, автоматическим прогоном тестов
// все настроено с отвязкой от ИДЕ, можно девелопить продукт под все платформы
// все что выше + заполненный ридми
// все то же самое + выкатка релиза с автоматическими релиз ноутсами, документация
// все выше + поддержка проекта: нетоксичный ответ на вопросы пользователей, прием ПРов, ведение проекта в ГитХабе (задачи, планы по релизам) и прочее

вот тебе и распределение по грейдам. очевидно, что человек, который делает все это, значительно опытнее, профессиональнее и более зрелый, чем находящийся на первых ступенях

конечно, это один из примеров, накиданный на скорую руку (на самом деле это был мой ответ на RSDN – я там кстати есть, забегайте). но это вот именно то, на что я лично обращаю внимание

и не надо никаких задротских разворотов списка, круглых люков и гномиков 🤮

#собесы #зрелось #софтСкиллы
2🔥2❤‍🔥1👍1💯1
Реальный Код
хотелось написать сюда, но не знал о чем… 🤔 … и накидал скрипт, который считает статистику использования мною команд в терминале что получилось – ниже 👇 выше ☝️ можно такое на собесах спрашивать, чтобы больше узнать о человеке: чем пользуется, какой стек…
следующая утилита, которую я использую чаще всего после питона, это настоящий ящик Пандоры 🤪 просто бездонный кладезь с кучей возможностей 🙈

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, то есть 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

// давайте начнем с простого – получить информацию о файле:

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
1🔥1😁1🤣1🙈1
null
2🔥2🙏2