Моё первое дополнение для Firefox
Буквально только что пришло письмо, что наконец-то опубликовано публично моё первое расширение для Firefox!
Без долгих разгонов, вот ссылка: https://addons.mozilla.org/ru/firefox/addon/groupper/
И, конечно же, исходники: https://gitrepo.ru/NeonXP/Grouper
А теперь немного про то, что это за расширение: это расширение для Firefox для автоматической группировки вкладок по группам на базе доменного имени сайта. При этом домен преобразуется в имя вкладки по следующим правилам:
- Домен делится по точкам
- Отсекается домен 1 уровня (.ru, .com, .net и т.п.)
- Если самый верхний уровень домена — www, то он так же отсекается, как не информативная часть
- Оставшееся преобразуется в Title Case (то есть первая буква каждого слова становится заглавной)
Таким образом, например, все страницы домена www.some.site.ru сгруппируются
автоматически в группу Some Site.
qChat — чатик поверх SSH
Для собственного интереса написал на Go реализацию IRC-подобного чата, который работает поверх прокола SSH.
Умеет пока немного, но много я от него и не хотел. Основная идея в том, чтобы его можно было запустить без конфигурации, с минимальными усилиями на любой «картошке» и чтобы он могу обслуживать, например, небольшую группу пользователей в одной локальной сети (хотя может работать и по интернету).
Получилось очень гиковски и лампово. Так сказать, чатик на случай ядерной войны :)
Про здоровые и нездоровые технологии
Я заметил, что часто стал в речи употреблять словосочетания «здоровая технология» или «нездоровая технология». Но при этом, я не задумывался о том, а что же именно это для меня значит, и как определить что есть здоровая, а что нездоровая технология. Я классифицировал исключительно интуитивно, исходя из принципа «я так чувствую».
Но раз есть классификация, то должны быть и критерии. Так? Так. И критерии я опираясь на собственное ощущение, вроде как, нашёл.
Тернарник в Go
Хотите немного наркомании сахара для Go?
Их есть у меня:
Тернарный оператор для Go на генериках
func If[T any](condition bool, thn T, els T) T {
if condition {
return thn
}
return els
}
Будет настроение — добавлю в свою либку https://neonxp.ru/go/extra , а пока, как-то так держите.
Не стоит использовать в реальном коде. Я лично не вижу никакого оправдания для использования, кроме как покекать.
Guessr
На недавних выходных я запилил очередной «проект выходного дня». На этот раз — аналог известного сервиса GeoGuessr, но в отличие от него, все точки сконцентрированы в моей родной Казани. Ну и я не использую панорамы, а фотографии мест.
Я обещал выложить исходники, и в общем, вот они: https://git.neonxp.ru/guessr.git/
Немного про разработку
Первым встал вопрос, откуда брать данные, а именно фотографии и координаты
точек. Пару лет назад нашу страну покинул такой проект, как Ingress,
представлявший собой гео игру в дополненной реальности. В свою очередь, я
посчитал, что раз проект решил отказаться от нас, как игроков, я посчитал
морально оправданным спизэкспропреировать кусочек их данных, а именно
спарсил с их карты intel.ingress.com т.н. «порталы», которые, по сути и есть эти
самые геоточки с фотографиями.
Гиперлокальность
Это очередной пост моих пространных рассуждений про тенденции и будущее интернета, которых в последнее время становится как-то многовато. Вероятно, в последствии, это станет даже серией постов.
Этот же я воспринимаю, как вводный в лор гиперлокальности.
Сначала, пожалуй, расскажу про посылки, а потом уже о том, куда они ведут, и какие из этого можно сделать выводы.
Obsidian
Некоторое время назад я писал про заметочник Joplin.
С тех пор мои вкусы несколько поменялись и я открыл для себя его величество Obsidian.
В целом он такой же заметочник, с ± тем же функционалом, но имеет для меня одну особенность, которая буквально переворачивает всё. Это мощнейшая система плагинов. Серьёзно, я нашел плагины которые покрывают для меня всё, кроме одного (но об этом позже).
Что такое Obisidian?
Obsidian представляет собой приложение для ведения персональных баз данных, основанное на принципах локальных файлов Markdown. Это значит, что ваши данные хранятся в виде обычных текстовых файлов, что обеспечивает максимальную гибкость и независимость от облачных сервисов.
Приложение работает на операционных системах: Windows, macOS, Linux, iOS, Android.
Цитатник Рунета
В середине-конце нулевых был очень популярный сайт баш.орг.ру. Думаю, те, «кому за» помнят ещё такой.
Сайт просто был сборником цитат из разных чатов, irc каналов или личных переписок. Изначально, был исключительно анимешно-айтишной направленности и тем самым для нас, студентов и гиков был крайне популярным местом. В своё время, он подарил мне много часов приятного времяпрепровождения и ламповых вечеров.
Затем, когда БОР (как часто его сокращали) выиграл премию Рунета, на него хлынул поток, как сейчас бы сказали, «нормисов». Которые, уже в свою очередь, заполнили БОР всяким про отношения, офисно-планктонные темы, фейковыми цитатами, ответами на цитаты, ответами на ответы на цитаты и прочим подобным, далёким от изначального айтишного флёра, шлаком.
Заметочник Joplin
Просто хочу поделиться отличным приложением для заметок, вместо популярного Notion и менее популярного Obsidian.
Название на для русского уха звучит по дурацки — Joplin. Но, не смотря на такое название, самоприложение очень даже серьёзное.
В общем и целом, это достаточно продвинутый опенсорсный заметочник. В качестве формата текста он использует Markdown1.
Так же, из приятностей — большое количество плагинов (https://github.com/topics/joplin-plugin) и возможность использовать свой сервер для синхронизации https://docs.vultr.com/how-to-host-a-joplin-server-with-docker-on-ubuntu . Для себя я, конечно же, поставил на свой сервак. Ну, а более бюджетно, если нет своего сервера — можно использовать любой WebDav сервер. В частности, Облако Mail.Ru или Яндекс Диск (адрес https://webdav.yandex.ru, необходимо использовать пароль приложения).
Вам не нужны пуши!
Я не шучу. Серьёзно.
С неделю назад меня осенила крайне простая мысль, которая ранее, почему-то, мне не приходила.
Конфигурация HTTPS с сертификатом от Минцифры
Третьего дня потратил достаточно много времени на установку на данном сайте сертификата от Минцифры.А поскольку сертификат краткоживущий (90 дней) — заметка мне самому пригодится на будущее.
Началось всё с того, что я с удивлением обнаружил, что на госуслугах теперь
можно выпустить сертификат для домена физлицу.Это меня обрадовало, хотя ранее я
приунывал что нет никакой альтернативы простым смертным. Теперь есть.
Закрывайте буржуйнет.
Поехали!
- Идём сюда: https://www.gosuslugi.ru/627603/1/form
- По приведенной инструкции генерируем файл запроса сертификата. Вкратце так (только вместо neonxp.ru указываем свой домен):
Важно! Нужно сохранить файл ключа neonxp.ru.key в надежном месте. Если он попадет в чужие руки — нужно будет отзывать сертификат и начинать всё заново! SAN и Wildcard пока не поддерживается, но что имеем — то и имеем. Но по слухам таки будут, как минимум SAN.openssl req -out neonxp.ru.csr -new -subj "/C=RU/CN=neonxp.ru" -addext "keyUsage = digitalSignature, keyEncipherment" -addext "subjectAltName=DNS: neonxp.ru" -addext "extendedKeyUsage = serverAuth" -newkey rsa:2048 -nodes -keyout neonxp.ru.key - Полученный файл csr загружаем там же на госуслуги
- Ждём не долго (реально недолго, у меня прислали сертификат буквально через несколько минут!)
- В ответ придёт файл с рандомным названием. Сохраняем его туда, где лежат другие файлы под названием “домен.crt”
- Скачиваем корневой и промежуточные сертификаты:
wget https://gu-st.ru/content/Other/doc/russian_trusted_root_ca.cer wget https://gu-st.ru/content/Other/doc/russian_trusted_sub_ca.cer - Преобразуем скачанный сертификат в формат PEM:
openssl x509 -in neonxp.ru.crt -out neonxp.cer -outform PEM - Соединяем свой сертификат и минцифровские в один бандл:
cat neonxp.cer russian_trusted_sub_ca_pem.cer russian_trusted_root_ca_pem.cer > chain.cer - Используем полученный бандл и сгенерированный в пункте 2 файл ключа в конфигурации вебсервера. У меня используется Caddy, поэтому мой конфиг выглядит так:
neonxp.ru:443 { tls /data/ssl/chain.cer /data/ssl/neonxp.ru.key ... }
В общем-то, всё. Как настанет время продлевать — я дополню заметку деталями именно продления. Если будут вопросы — пишите, попробуем решить.
Немного мыслей о TLS (HTTPS) в России
Накопилось немного мыслей относительно того, что может грозить нам (и мне) в связи с трендом на “балканизацию” рунета.
И самое болезненное место — HTTPS который нынче стандарт де-факто в современных интернетах. А болезненное оно потому, что целиком и полностью контролируется другой стороной нынешного противостояния. Все доверенные удостоверяющие центры принадлежат странам “коллективного запада”. Помню, были ещё какие-то китайские, вроде, но с ними был какой-то скандал и не факт что они есть.
Импортозамещение Gist
И в догонку к комментариям, запустил на своём серваке свой аналог Gist’ов от GitHub.
Вот и он: gist.neonxp.ru
Пользуйтесь 🙂
GitRepo.ru
Сегодня серьезно переделал свой хостинг репозиториев кода:
- Переехал на большой арендованный сервак
- Привел в порядок оркестрацию вокруг сервака с использованием Docker Compose
- Gitea заменил на её форк Forgejo
- Впилил CI/CD на основе Woodpecker CI
Приглашаю пользоваться заместо бездуховного западного github: https://gitrepo.ru/
Сервер физически находится в датацентре в Москве у весьма годного провайдера Selectel.
Тем более, время сейчас неспокойное и неизвестно когда github станет недоступен для РФ, а GitRepo — он вот тут, в нашей стране.
Golang подборка 1
Просто собираю подборку интересных ссылок по гошке на почитать потом.
- Extra — Моё. Пакет с разными полезными функциями без дополнительных зависимостей.
- Серия видосов про создание игры в стиле Animal Crossing на golang с помощью raylib — https://www.youtube.com/watch?v=iWp-mCIQgMU&list=PLVotA8ycjnCsy30WQCwVU5RrZkt4lLgY5&index=1
- Самописный распределенный типа Postgres https://notes.eatonphil.com/distributed-postgres.html. Под капотом raft от hashicorp, boltdb и самое интересное — парсинг SQL
- Рассчет расстояния между двумя Geo точками:
import "math"
...
// https://en.wikipedia.org/wiki/Haversine_formula
func GetDistance(lat1, lon1, lat2, lon2 float64) float64 {
lat1 *= math.Pi / 180
lon1 *= math.Pi / 180
lat2 *= math.Pi / 180
lon2 *= math.Pi / 180
return 12742 * math.Asin(
math.Sqrt(
math.Pow(math.Sin((lat2-lat1)/2), 2) +
math.Cos(lat1) *
math.Cos(lat2) *
math.Pow(math.Sin((lon2-lon1)/2), 2)
)
)
}
- god — Утилита подгатавливающая демоны из go программы. Для меня ценное — что генерит systemd конфиги.
Немного о цифровой гигиене
Вступление
Как раз вступление тут особо и не нужно. Ни для кого не открою америки, что в современном цифровом обществе все мы являемся товаром для интернет-медиа гигантов, того же фейсбука да гугла. Не скажу что это для меня, как личности опасно или вредно, но мне это неприятно. Решил с этим что-то делать.
Вводные
- В интернетах я уже очень давно и много где и как “наследил” своими данными. И с этим уже ничего не поделать.
- У меня в телефоне и на всех компьютерах куча приложений работающих с интернетом, и не только мессенджеры.
- У меня достаточно узкий круг людей с кем бы я хотел быть на связи, и не хочу чтобы мои действия как-то ухудшили или усложнили их жизнь.
- Вопрос анонимности для меня не стоит, я не анонимен и это моё осознанное решение. Я законопослушный человек и прятаться мне не от кого. И да, я знаю что этот тезис стараниями либерах нынче пытаются выставить как глупость, но нет. Глупость — это слушать либерах, а не иметь свою голову на плечах. И контртезис “Гы гы гы, ну раз тебе нечего скрывать — поставь камеру у себя в спальне и ванной” даже комментировать не буду в силу его ущербности.
- Я пользователь техники Apple и с этим уже ничего не поделать, менять целиком экосистему для меня не вариант (это очень дорого, бессмысленно, а местами и невозможно, например, рабочий мак мне поменять не на что). И да, есть наивная надежда что у яблок в плане приватности всё получше чем у ведроидов. Во всяком случае по сравнению со стоком. Гиковские прошивки с вырезанными зондами в расчет не беру, верю что у них совсем всё хорошо.
Цели
- Уменьшить информационный шум вокруг себя и тем самым улучшить качество жизни.
- Уменьшить свой “информационный след”
- Иметь больше контроля над своими данными, чтобы мои волосы стали мягкими и шелковистыми.
Наброски плана
- Перейти максимально на собственные ресурсы, которые я контролирую и которые точно не сливают ничего налево.Примерно так: социалки => https://soc.neonxp.ru/ , GitHub => https://gitrepo.ru/ , Облачные диски => локальный NAS Synology и т.д.
- Мне надо сократить мессенджеры в идеале до одного, не считая корпоративного рабочего. Тут всё просто — оставляю Telegram, остальные сношу.
- Мне надо отказаться от неэтичных социальных сетей, где я не могу полностью контролировать свои данные.
- При отказе от социальных сетей чтобы не доставить проблем моим контактам надо оставить “новый адрес” по которому со мной можно связаться и, например, этот пост. Я не хочу чтобы для всех мои действия были прозрачны и понятны, а не “молча удалиться” оставив кого-то в недоумении.
- Везде где возможно отключить или заблокировать телеметрию, чтобы как можно меньше моих данных неконтролируемо утекало. Да, полностью не перекрыть, но сократить возможно.
- Для связи с “миром” оставить только e-mail как наиболее удобный асинхронный метод коммуникации.
Дальнейшие шаги
- Превратить наброски плана в цельный план. Написать манифест? Возможно.
- Подготовить “визитку” с актуальными контактами и объяснением что произошло. Причем как в виде изображения, так и текста.
- Вышеуказанную визитку поместить на уже неактуальных для меня местах обитания (инстаграм, вк и проч). Удаляться не хочу. Жалко контент за столько лет, да и пункт 3 предыдущего абзаца.
- Удалить “лишние” приложения от вышеуказанных сервисов.
- Разлогиниться в этих сервисах и очистить браузеры от них, чтобы исключить треккинг на сторонних сайтах.
- ?????
- PROFIT!
Обратная связь
Очень бы хотелось получить обратную связь по моему плану. Комментарии про то что упустил и предложения улучшений приветствуются в комментариях к посту, в комментариях к телеграм каналу, или на почту a.kiryukhin@mail.ru (кстати, стоит наверное и почту перевести к себе? Но пока уровень сервиса врядли смогу адекватный обеспечить)
Jsonnet
Редко такое бывает, что случайно натыкаешься на какую-то технологию и она вызывает вау-эффект и буквально переворачивает всё верх дном. На днях для меня такой технологией стал Jsonnet от Google.
В кратце, это надмножество JSON являющееся языком описания шаблонов. Пока звучит не очень круто, да? На деле это офигенный Тьюринг полный функциональный язык, результатом выполнения которого будет сформированый JSON (и не только) документ(или несколько документов1).
Если интересно, рекомендую сразу переходить к туториалу — https://jsonnet.org/learning/tutorial.html.