Flashing Tuya WT5 dimmer with openbeken
Terraforming NixOS hosts
I’ve made a provider to deploy Nixos hosts with Terraform.
Here is a list of features it support at this moment:
- configuration deployment
- secrets deployment
- SSH bastions
- provider, Nix, SSH settings overriding on per-host basis
- host addresses prioritization
Collaborative editing with Emacs
This note is about using Emacs for collaborative editing with help of package called crdt.el.
Using Certbot with Knot DNS (knsupdate)
This is a note about the integration of the Certbot with Let’s encrypt DNS–01 authentication mechanism. Will not use any cloud services (fuck cloud), just self-hosted DNS instances, like good old times. I’ll show how to configure Knot DNS to accept dynamic DNS updates from knsupdate
and how to create a rudimentary hook for Certbot which will use knsupdate
to set TXT
records with _acme-challenge
.
choosing the best adhesive for Go code #1
Одна из сторон языка Go, за которую его многие любят, это простота. Она же является и его слабостью, выражающейся в увеличении количества кода вместе с повышением уровня абстракции.
Я хочу писать более абстрактный код там где это требуется, снимая ограничения системы типов если это необходимо. Для этого в серии статей буду искать такую реализацию скриптового языка, которую можно подружить с Go рантаймом и я точно знаю что хочу нечто lisp-подобное.
Зачем такой язык нужен:
- конфигурация: на скриптовом языке описывается конфигурация приложения
- инициализация: из кода на интерпретируемом языке происходит инициализация компонентов, написанных на языке компилируемом
- расширение: виртуальной машине интерпретируемого языка в некоторые моменты передаётся управление с целью увеличения гибкости
run PostgreSQL by hands
Раз в год (или около того) мне нужно запустить PostgreSQL с целью поразрабатывать что-нибудь. За то время что я его не использую знания выветриваются, так что на будущее я делаю эту заметку, в основном для себя.
Запускать PostgreSQL можно разными способами, вот два самых распространенных:
- использовать docker
- поставить пакет
Оба способа немного магические. Контейнеры стараются быть удобными и покрывать как можно больше функциональности, что выливается в адские entrypoint’ы на bash с обратным удобству эффектом. Пакеты в распространенных дистрибутивах тоже содержат не мало магии, ведь они обычно (как минимум) инициализируют директорию с данными СУБД и запускают её сервис.
В nixos тоже есть пакет для PostgreSQL, но он не управляет ни запуском, ни процессом инициализации. Так что полезно помнить как работать руками.
reproducible docker containers
Многие сегодня используют docker для доставки своих решений в продакшен. Обычно образы собираются с помощью т.н. Dockerfile
, который может иметь следующий вид:
FROM golang:latest as builder WORKDIR /go/src COPY . . RUN go build -o app FROM alpine:latest COPY --from=builder /go/src/app /bin/app CMD /bin/app
Можно ли сказать что образ, полученный в результате сборки с указанным Dockerfile
, будет воспроизводимым?
Нет. Эта заметка объясняет:
- почему
- как писать
Dockerfile
чтобы приблизиться к воспроизводимости - чем заменить
Dockerfile
чтобы сделать сборки воспроизводимыми
emacs + go-mode + lsp + REPL
Некоторое время назад я начал переезжать с spacemacs обратно на самописную конфигурацию(мне так стабильнее и кастомайзить проще). Common LISP и scheme работают почти без настройки, а вот с golang пришлось поплясать.
Цель: настроить среду разработки, которая способна:
- к автокомплиту
- выводу документации
- go to definition
Это минимум, необходимый мне для работы.
Скажу сразу:
- не всё заработало
- некоторые вещи тормозят
- некоторые работают странно
Но жить можно, плюс ко всему - понятно что улучшать.