
IDE → Снова санкции + РКН
Уже как-то писал тут про санкции и вот опять...
Утром 14-го ноября, без объявления войны, пидорасы редиски из JetBrains деактивировали мою IDE-шечку 😐 Не сказать, чтобы это было совсем неожиданно, среда разработки помирала в течении длительного времени, подобным образом выключались некоторые плагины. Учитывая, что я пару лет как уже потерял возможность оплачивать их продукцию обычным образом, проводил учения по пересадке самого себя на другие инструменты, присматривался, так сказать, но функционирующие JB IDE быстро приманивали меня обратно.
Штош... Это был отличный продукт, таким он и остаётся, но уже не для меня. Платил за их ПО с 2013-го года, сначала за отдельные IDE, вроде PhpStorm, PyCharm и RubyMain, а позже за весь пак, когда суммарно за всё стало дешевле, чем поштучно.

Bash → Ориентация изображения и EXIF
Написал небольшой баш-скрипт, чтобы менять ориентацию фоток без преобразования их изображения, а заменой битов ориентации в EXIF-информации. Генерирует все восемь вариантов. Пусть будет тут:
1 2 3 4 5 6 7 8 9 10 11 | #!/usr/bin/env bash
if ! [[ -f $1 ]]; then
echo "File does not exist"
exit 1
fi
for i in $(seq 1 1 8); do
fout="${i}_${1}"
exiftool -n -Orientation=$i -o $fout $1
done
|

Вёрстка → Шрифт с эмоджи в Firefox
В один прекрасный момент, а именно вчера, включил вечером компьютер, чтобы заняться своим пет-проджектом и обнаружил, что эмоджи поменялись в фаерфоксе и стали как в хроме, только вот ещё утром они были прежними. Скрин для сравнения прилагаю 🤨
Конечно, оставить как есть, я не мог, решил вернуть как было, веб-разработчик я или нет. Первым делом нагуглил название шрифта, который в Firefox используется по умолчанию для эмоджей, это Twemoji Mozilla, и указал его в CSS явно, привычные эмоджи вернулись. Ну а дальше добавил в стилях правило, исключительно для FF. Что-то вроде такого:
1 2 3 4 5 6 7 8 9 | body {
font-family: "DejaVu Sans Mono", monospace;
}
@supports (-moz-appearance:none) {
body {
font-family: "DejaVu Sans Mono", monospace, "Twemoji Mozilla";
}
}
|
И готово. Этот путь не единственный и прежний шрифт используется только для одного этого исправленного сайта. Можно пофиксить настройки самого FF на странице about:config. Далее найти там настройку font.name-list.emoji, в моём случае в ней было прописано "Noto Color Emoji, Twemoji Mozilla", и поменять шрифты местами.
Golang → go-chi: Генерация URL по имени роута
Пересадил свой блог с gorilla/mux на go-chi и в процессе переделывания обнаружил два момента:
- В go-chi нет генерации урлов из коробки
- gorilla/mux уже не заброшенный проект, у него появилась новая команда мантейнеров
Последний пункт, в принципе, сделал задачу по замене роутера ненужной, ведь я менял его потому, что gorilla/mux не поддерживается, но меня было уже не остановить, ведь процесс программирования тоже важен, а не только конечный результат 😊
Веб-сервер → Как проверить SSL-сертификат в командной строке
Допустим, вы склонировали из репозитория проект, а в нём в настройках веб-сервера уже настроено https-подключение и прописаны сертификат и ключ. И интересно посмотреть, для какого домена и не просроченный-ли этот самый сертификат. Сделать это можно в командной строке при помощи OpenSSL
1 | openssl x509 -in cert.pem -text -noout
|
Ключ -text говорит о том, что будет выведена вся информация сертификата, а не отдельные детали, вроде -subject, -dates и т.п. -noout убирает собственно сам сертификат из вывода в консоль
Git → Перезапись истории, замена автора
Иногда возникает необходимость перезаписать в истории коммитов автора этих саммых коммитов. На такой случай как раз и добавлю эту заметку, потому что с тех пор, как использую git, такая потребность случалась уже трижды! 😏
Далее под кат...

Golang → Дата, время и часовые пояса в Golang
Можно сказать, что сейчас будет краткий пересказ документации и всё элементарно, но когда столкнулся с необходимостью работать с таймзонами, то пришлось поискать информацию и примеры. Так что пусть будет 🙂
Создадим объект даты и времени, соответствующий данному моменту времени. Этим в Go занимается пакет time
1 2 3 4 5 6 7 8 9 10 11 12 | package main
import (
"fmt"
"time"
)
func main() {
dt := time.Now()
fmt.Println("Current time:", dt)
}
|
В результате увидим:
1 | Current time: 2024-04-29 12:52:04.130203218 +0300 MSK
|
Создадим объекты даты и времени, соответствующие конкретному моменту времени. В явном виде и через его текстовое представление. Последний вариант на практике приходится использовать куда чаще
Git → Git-хуки
Решил на днях починить автотесты в админке этого блога и в процессе их восстановления начал обнаруживать и баги, которые появились с тех пор, как тесты были заброшены, включая и недавние изменения. Не то, что бы и баги, здесь не так много функциональности, чтобы поломка прошла незамеченной, скорее некорректное поведение системы, вроде неправильного часового пояса в контейнере приложения и т.п.
Чтобы обойтись без внешних CI-сервисов, решил запускать тесты локально перед каждый пушем, автоматически, для чего в системе контроля версий Git предусмотрены хуки, ниже как раз приведён пример подобного pre-push хука (в папке .git/hooks их на разные случаи жизни):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #!/usr/bin/env bash
echo -e "Start pre-push hook\n"
docker compose run --rm --remove-orphans -T rhinoceros bash -c "bin/phpspec run"
retVal=$?
if [ $retVal -ne 0 ]; then
echo -e "\e[31m phpspec error\e[0m\n"
exit 1
else
echo -e "\e[32m phpspec OK\e[0m\n"
fi
exit 0
|

Программирование → Санкции (рестрикции) и программирование оффлайн
Почти год уже нахожусь в Крыму и часто сталкиваюсь с вводимыми ограничениями со стороны разнообразных технологических компаний. Например, не работает сайт документации по Go, да и сами релизы этого ЯП не скачиваются без дополнительных манипуляций. Вместо этого или 403-я ошибка, или 404-я
Кроме этого пока ещё нет толком интернета и мобильной связи на даче в горах, мобильная вышка с другой стороны горы и ею же закрывается 😅 Программирование само по себе без интернета приобретает иной уровень сложности, попробуйте, допустим, без поисковика определить программным методом в каком-нибудь питоне или PHP определить время последней модификации файла и тому подобное. Поэтому пришлось озаботиться оффлайн-документаций.
MySQL → emoji, MySQL и кодировка UTF-8
Давно уже, многие годы, знал о проблеме, что комментарии в этом блоге с эмоджами не сохраняются, как и статьи, потому что MySQL ругался чем-то вроде Incorrect string value: '\xF0\x9F\x87\xB2...' for column 'text' at row 1 и записи не сохранял. Но исправить эту штуку было просто недосуг, комментируют здесь не то, чтобы сильно часто, да и то чаще боты со спамом. А вот в новой версии движка блога, которая уже фактически запущена, это было запланировано к исправлению 😁
Когда переносил блог на новый сервер, то установил там восьмую версию мускула и проверил, сохраняет или нет. Вдруг разработчики базы данных давно уже исправили этот incorrect string value, я ведь не один такой на планете с эмоджами, нас десятки и сотни тысяч, уверен, если не миллионы. Но результат не поменялся, та же ошибка. Не прокатило, штош...