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

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

Практические знания и советы по:
- Python
- Selenium
- командная строка
- C++
- много других интересностей, которые пригодятся вам в профессии
Download Telegram
хотелось написать сюда, но не знал о чем… 🤔

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

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

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

#python #stats #terminal
🔥5😁2🤓2
Реальный Код
хотелось написать сюда, но не знал о чем… 🤔 … и накидал скрипт, который считает статистику использования мною команд в терминале что получилось – ниже 👇 выше ☝️ можно такое на собесах спрашивать, чтобы больше узнать о человеке: чем пользуется, какой стек…
сегодня начинаю серию постов про мои топ утилиты/программы, которые я чаще всего использую

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

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
Реальный Код
хотелось написать сюда, но не знал о чем… 🤔 … и накидал скрипт, который считает статистику использования мною команд в терминале что получилось – ниже 👇 выше ☝️ можно такое на собесах спрашивать, чтобы больше узнать о человеке: чем пользуется, какой стек…
следующая утилита, которую я использую чаще всего после питона, это настоящий ящик Пандоры 🤪 просто бездонный кладезь с кучей возможностей 🙈

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
Реальный Код
хотелось написать сюда, но не знал о чем… 🤔 … и накидал скрипт, который считает статистику использования мною команд в терминале что получилось – ниже 👇 выше ☝️ можно такое на собесах спрашивать, чтобы больше узнать о человеке: чем пользуется, какой стек…
замыкает первую тройку моих наиболее используемых программ 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
немного полезностей вам

говорить ниже будем про Линукс/Мак

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

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


history


и увидев ваш пароль

небольшое отвлечение: в целом, конечно же, лучше вообще не передавать пароли в утилиты/скрипты в открытом виде. предпочитайте этому промпты самих утилит, тк обычно они вообще не отображают их на экране

ну например, вместо изменения пароля пользователя в постгре таким способом

ALTER USER <user_name> WITH PASSWORD ‘<password>’;


используйте команду внтури psql

sudo -u postgres psql

postgres=# \password postgres


ну так вот, если все же вам приходится отдавать пароль в голом виде, то начните команду с пробела. и тогда она не будет сохранена в истории 😉

вот такой лайфхак. проверяйте!

#terminal #hint #security #postgresql
1🔥1🤓1