Собрался в этом году поиграть-таки в Advent of Code (сомневаюсь, конечно, что до католического Рождества уложусь, но до НГ — шансы есть).
Чем он интересен — так это подходом. Собственно, сам код там и не нужен, требуется только ответ. Никому не важно, насколько эффективным, красивым и т.д. было решение, позволившее этот ответ получить.
Хоть на бумажке делай, хоть в электронных таблицах, хоть прямо в консоли браузера. Есть только задачка и окошка для ввода ответа.
Я решил делать в консоли jshell преимущественно. До тех пор, пока это получается удобно и быстро.
Понадобилось мне получать с Хабра ленту комментариев пользователя в каком-то удобном виде, чтобы не заходить периодически на сайт для проверки её обновления. Очевидное решение — RSS.
В базе Хабр позволяет подписаться на профиль пользователя, или, по RSS, на ленту его публикаций. А вот для комментариев подобной возможности не предусмотрено (сама лента комментариев имеет вид https://habr.com/ru/users/user-name/comments/).
Первая мысль — воспользоваться Yahoo Pipes, ведь когда-то уже использовал его для решения подобных задач. Увы — оказалось, что сервис давно закрыт. Помолчим минуту (он был хорош!) и рассмотрим доступные альтернативы.
Решил собрать в одном месте (для памяти и удобства использования) некоторые нужные настройки и возможности MC, ранее валявшиеся разрозненно по разным заметкам.
Даже при ежедневном использовании MC в качестве файлового менеджера — некоторые горячие клавиши забываются и приходится перелистывать справку. Доступ к ним в табличном виде оказывается быстрей и удобней. По мере необходимости — буду пополнять заметку.
Небольшая памятка для себя. Понадобилось воспользоваться докером в Windows 10. При этом — уже установлена Ubuntu внутри WSL2. То есть — ставить сверху ещё и графический Docker Desktop, поднимающий свои контейнеры в отдельных виртуалках WSL, особой необходимости нет. Управлять контейнерами можно прямо из Idea.
Небольшое неудобство возникло с тем, что Docker плагин в idea (под Win) поддерживает Docker for Windows, но не умеет напрямую работать с докером внутри WSL. Вариантов несколько, среди них — подключение через tcp socket или через ssh.
Против tcp socket возникли два аргумента — сложнее настроить (чтобы просто пара настроек — и заработало — такого не произошло, пришлось повозиться); кроме того — руководство Docker не рекомендует пользоваться им из-за наличия потенциальной уязвимости.
Остановился на ssh — это проще, и в целом удовлетворяет моим потребностям. Читать далее Idea — подключение к Docker в Windows WSL2→
Понадобилось как-то в SAP Hybris настроить поиск по составному полю (состоящему из нескольких атрибутов продукта). Так, чтобы при запросе вида «желтый ботинок» в листинге товаров сначала выдавались не просто товары желтого цвета, а именно желтые ботинки (а затем — остальные ботинки). Решить это регулировкой коэффициентов усиления поиска по отдельным свойствам (boost) не удалось, пришлось городить огород с созданием и индексацией составного поля.
Модель товара ProductModel
Итак, в предлагаемом примере товар (Product) имеет два атрибута (помимо прочих), по которым надо искать в связке:
В IntelliJ IDEA существует довольно удобный механизм для автоматической проверки (при необходимости — и преобразования) кода, под название Code inspections. Сложилось так, что мне понадобилось добавить к нему собственное поведение, служащее для замены способа преобразования непустого Optional в его значение внутри стрима (из стиля Java 8 в стиль Java 9+).
Не то, чтобы добавление пользовательских инспекций было трудным делом, но для памяти и в качестве небольшого примера решил описать этот процесс чуть подробней.
Как-то я писал про бесплатный linux shell от провайдера Bshellz в заметке Бесплатный Linux-shell с Tmux на борту. Там же был приведён способ автоматического продления аккаунта — путём отправки (по расписанию) служебного сообщения боту Beschbot с помощью имеющегося на самом хостинге IRC-клиента irssi. Время показало, что способ, как и следовало ожидать, не лишён недостатков. А именно — периодически сервер Bshellz перезагружается, после чего настройка расписания в irssi слетает. Также — несколько раз наблюдались проблемы с подключением клиента к сети Freenode IRC. В результате возникло решение зарезервировать автообновление аккаунта в Bshellz путём использования дополнительного внешнего скрипта, также запускающегося по расписанию (раз в день в произвольное время, на домашней машине). Читать далее Bshellz shell autorenew — IRC-perl-скрипт для обновления аккаунта в Bshellz→
Так как пользоваться консолью ЖЖ для добавления или удаления друзей стало невозможно (эти команды отключили) — сделал небольшой скрипт lj-edit-friends, который позволяет редактировать список друзей для указанного аккаунта через XML-RPC интерфейс ЖЖ. Пользоваться несложно — получить список друзей для добавления/удаления с помощью LJ Add/Remove Friends, сохранить его в файл и обработать через lj-edit-friends. Подробности — ниже. Читать далее Массовое добавление и удаление друзей в LiveJournal через XML-RPC→
Сделал себе автоподключение к сессии tmux (или автозапуск tmux-сервера с новой сессией, если её ещё нет) при заходе в локальную консоль или при подключении по ssh к удалённым машинам (пользоваться бесплатным шеллом bshellz стало удобней).
# Autostart tmux on login
__autostart_tmux() {
# $( type -p ) - built-in in sh or bash only?
#TMUX_BIN="$( whereis tmux | cut -d " " -f 2 )"
# which versions different output format
TMUX_BIN="$( which tmux 2> /dev/null )"
if [ -z "${TMUX_BIN}" ]; then
echo "Tmux not found"
return 0
fi
TMUX_AS_SESS_NAME="$(echo "${USER}" | cut -c '1-3')"
# return empty line if specified session exist or return 1
TMUX_AS_SESS_RUN="$( tmux has-session -t "${TMUX_AS_SESS_NAME}" &> /dev/null || echo "$?" )"
#TMUX_AS_DAEMON_MODE="$1" # $1 == "-d" or " "
#TMUX_AS_EXIT="$2" # "return 0" or "exit 0"
# do not attach automatically to tmux session if login on local XTerm
if [ -z "${TMUX_AS_SESS_RUN}" ] && [ -z "${SSH_TTY}" ] && [ "${TERM}" = "xterm" ]; then
echo "Tmux: running, not attached on local XTerm"
return 0
# do not run tmux automatically in another tmux (or screen)
# in exists tmux session shell be started on non-login mode and .profile not used
# (see set -g default-command "${SHELL}" in tmux.conf)
elif [ -n "${TMUX}" ] || [ "${TERM}" = "screen" -o "${TERM}" = "screen-256color" ]; then
echo 'Tmux: not be running in another terminal multiplexer "'${TERM}'"'
return 0
# attach to existed tmux session or create it and exit login-shell; or print error message
else
((tmux has-session -t "${TMUX_AS_SESS_NAME}" && exec tmux attach-session -t "${TMUX_AS_SESS_NAME}") || (tmux new-session -d -s "${TMUX_AS_SESS_NAME}" && exec tmux attach-session -t "${TMUX_AS_SESS_NAME}")) && exit 0;
echo "Tmux: autostart failed: $?"
fi
}
Как ни странно, я только недавно познакомился с VCHS — надстройкой над Git, призванной облегчить резервирование конфигурационных файлов, расположенных в домашней директории (Version control system for $HOME — один из вариантов расшифровки аббревиатуры). Очень жаль, что этого не произошло раньше, и бэкап конфигов делался нерегулярно, кое-как, с изобретением различных костылей. Но, всё это в прошлом! Итак, что же представляет собой VCSH и как ей пользоваться? Читать далее VCSH — спасение настроек в $HOME→
Perl, Linux, программирование, настройка и что-нибудь ещё…