О компьютерной грамотности-2

топ 100 блогов hardsign04.06.2025

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

Скрипт для автоматизации какой-нибудь домашней рутины — это всегда нестандартное взаимодействие. Каждый такой текст из полусотни строчек содержит россыпь жемчужин, которые приходится искать по всему интернету, и которые незаметны постороннему взгляду. Никакой искусственный интеллект никогда в жизни не поймёт, зачем эти странности, и не сможет их воспроизвести.

1. Bash умеет выполнять арифметические действия, но только над целыми числами. Если надо сложить два действительных числа, можно воспользоваться калькулятором bc:

$ A=13.5
$ B=12.7
$ echo $((A+B))
bash: 13.5: ошибка синтаксиса: недопустимый математический оператор (неверный маркер «.5»)
$ echo "${A}+${B}" | bc
26.2

2. Правда, если абсолютное значение результата меньше единицы, bc выдаёт число без ведущего нуля, а некоторые программы (например, ffmpeg) чисел, начинающихся с точки, не понимают. Товарищи со StackOverflow посмотрели исходный код bc и поняли, что заставить не получится. Но зато можно поправить вывод при помощи любого обработчика текста. Например, при помощи sed:

$ echo "1.2-0.5" | bc
.7
$ echo "1.2-1.6" | bc
-.4
$ echo "1.2+3.3" | bc
4.5
$ echo "1.2-0.5" | bc | sed -re "s/^(-?)\./\10./"
0.7
$ echo "1.2-1.6" | bc | sed -re "s/^(-?)\./\10./"
-0.4
$ echo "1.2+3.3" | bc | sed -re "s/^(-?)\./\10./"
4.5

3. Распоряжение «сделай чёрный прямоугольник формата FullHD, убедись, что слайд презентации помещается в прямоугольник 1280×1080, и при необходимости уменьши его, сохранив соотношение сторон, а потом помести этот слайд в левый нижний угол прямоугольника» выражается одной командой:

$ convert \( -size 1920x1080 canvas:black \) \( "${imgfile}" -resize "1280x1080>" \) -gravity SouthWest -composite "${imgfile}.slide.png"

4. ffmpeg очень медленно превращает статическую картинку в видео. Например, на моём пусть и стареньком, но всё же i7 он генерирует около сотни кадров в секунду. Получается, ролик, где в течение десяти минут на экране будет демонстрироваться единственный слайд, генерируется две с половиной минуты:

$ ffmpeg -hide_banner -loglevel error -y -loop 1 -framerate 25 -i slide.png -r 25 -vcodec libx264 -tune stillimage -pix_fmt yuv420p -t ${duration} "slide.mp4"

Гораздо быстрее сгенерировать ролик длиной в одну секунду, а потом размножить его:

$ ffmpeg -hide_banner -loglevel error -y -loop 1 -framerate 25 -i slide.png -r 25 -vcodec libx264 -tune stillimage -pix_fmt yuv420p -t 1 "slide.1.mp4"
$ ffmpeg -hide_banner -loglevel error -y -stream_loop -1 -i "slide.1.mp4" -c copy -t ${duration} "slide.mp4"

5. В bash есть команда mapfile, которая позволяет прочитать файл в массив. Но только файл, а не вывод другой команды. Вот так работает:

$ mapfile -t str $ echo ${#str[@]}
215

А вот так уже нет:

$ jq -r ".slides[].file" index.json | mapfile -t str1
$ echo ${#str1[@]}
0

Причину на каком-то форуме объяснили: команды выполняются в разных процессах, и в случае конвейера заполненный массив остаётся не в том процессе, который нужен (да, Unix — это весело). А чтобы массив оказался там, где нужно, вместо конвейера надо воспользоваться конструкцией «вывод как файл» <(...):

$ mapfile -t str2 < <(jq -r ".slides[].file" index.json)
$ echo ${#str2[@]}
50

Вот такие россыпи в одном маленьком скриптике. А у меня их десятки...

Оставить комментарий

Архив записей в блогах:
Сын  написал Папа сейчас сказал ужасно грустное — умер его брат, мой дядя Сережа, Sergey Eygenson. Просто хочу сказать, что это был, вероятно, самый умный, образованный и ...
Сколько тут кошек с котами? И ещё один на десерт:) ...
Поразительная криминальная история в Бостоне. Прямо Голливуд. Когда сотня полицейских не могут угнаться на автомобилях за юнцом. Да и вообще туманная история. Совсем уж смешно с гонорарами Ильи Пономарева в Сколково. Это уже не голливуд, а с видя имени Довженко в ее худшие времена. Или в ...
Источник: https://prof-afv.livejournal.com/183765.html ...
Все помнят, я на посту. Пост у меня. Во имя улучшения формы и содержания личности. Решила поделиться прекрасным. Опытом. Прекрасным опытом. Чем могу, так сказать. За день до начала поста Ой, как же я люблю орешки и курагу! Буквально все орешки люблю, ...