Было и стало

ВёрсткаШрифт с эмоджи в 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", и поменять шрифты местами.

Golanggo-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

Создадим объекты даты и времени, соответствующие конкретному моменту времени. В явном виде и через его текстовое представление. Последний вариант на практике приходится использовать куда чаще

GitGit-хуки

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

Чтобы обойтись без внешних 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
Google 404 Not Found

ПрограммированиеСанкции (рестрикции) и программирование оффлайн

Почти год уже нахожусь в Крыму и часто сталкиваюсь с вводимыми ограничениями со стороны разнообразных технологических компаний. Например, не работает сайт документации по Go, да и сами релизы этого ЯП не скачиваются без дополнительных манипуляций. Вместо этого или 403-я ошибка, или 404-я

Кроме этого пока ещё нет толком интернета и мобильной связи на даче в горах, мобильная вышка с другой стороны горы и ею же закрывается 😅 Программирование само по себе без интернета приобретает иной уровень сложности, попробуйте, допустим, без поисковика определить программным методом в каком-нибудь питоне или PHP определить время последней модификации файла и тому подобное. Поэтому пришлось озаботиться оффлайн-документаций.

MySQLemoji, MySQL и кодировка UTF-8

Давно уже, многие годы, знал о проблеме, что комментарии в этом блоге с эмоджами не сохраняются, как и статьи, потому что MySQL ругался чем-то вроде Incorrect string value: '\xF0\x9F\x87\xB2...' for column 'text' at row 1 и записи не сохранял. Но исправить эту штуку было просто недосуг, комментируют здесь не то, чтобы сильно часто, да и то чаще боты со спамом. А вот в новой версии движка блога, которая уже фактически запущена, это было запланировано к исправлению 😁

Когда переносил блог на новый сервер, то установил там восьмую версию мускула и проверил, сохраняет или нет. Вдруг разработчики базы данных давно уже исправили этот incorrect string value, я ведь не один такой на планете с эмоджами, нас десятки и сотни тысяч, уверен, если не миллионы. Но результат не поменялся, та же ошибка. Не прокатило, штош...

Convert PFX to PEM

Веб-серверКонвертация PFX в PEM

Потребовалось как-то обновить на сервере SSL-сертификат, который я и заполучил. Только вот не оказалось ключа шифрования, без которого установить сертификат не представляется возможным. Однако ни о каких ключах клиент и слыхом и не слыхивал, зато скинул какой-то PFX-файл, к ключу и сертификату имеющий непосредственное отношение. Оставалось только извлечь их оттуда.

1
2
openssl pkcs12 -in domain.pfx -clcerts -nokeys -out domain.pem
openssl pkcs12 -in domain.pfx -nocerts -nodes -out server.key

Вжух и готово, domain.pem - клиентский сертификат, server.key - ключ шифрования. На вид, конечно, решение простое и так оно и есть, только ему предшествовали часы гугления и борьба с ошибкой вроде "Unable to load Private Key... ANY PRIVATE KEY", я несколько раз даже было усомнился, что искомый ключ в PFX-файле имеется :)

GitСинхронизация форкнутого репозитория с оригинальным

Очередная заметка для самого себя, чтобы не искать. Вроде бы всё до ужаса элементарно, но не запомню, пока не напишу об этом :)

Первым делом добавляем remote-репозиторий, ссылающийся на оригинальный, назовём его, к примеру upstream1. Список удалённых репозиториев можно посмотреть командой git remote -v, чтобы убедиться, что всё верно.

После вытягиваем все изменения, произошедшие в репозитории upstream2 и сливаем их со своим репозиторием3.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# шаг 1

git remote add upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git

# шаг 2

git fetch upstream

# шаг 3

git checkout master
git merge upstream/master