Разработка HomeKit аксессуара на Golang
Разработка HomeKit аксессуара на Golang
https://github.com/brutella/hc — прекрасная библиотека для написания обработчиков своих аксессуаров по протоколу HomeKit.
Что предоставляет библиотека? Удобный интерфейс для объявления своего аксессуара и обработка сигналов с пульта управления Home App в ios. Давайте попробуем написать новый обработчик аксессуара и добавить его внутри домашней сети.
Простейшая реализация будет выглядеть как-то так:
2D игры на Golang c Ebiten. Введение
2D игры на Golang c Ebiten. Введение
Решил попробовать пописать простые 2D игры на Golang. Основная цель — развлечение и более углубленное понимание того как можно писать простые любительские 2D игры на Go.
В начале пути
Скорее всего это будет цикл небольших, но полезных статей для всех интересующихся 2D играми и Golang. Первое, что нам необходимо решить — каким инструментом мы будем пользоваться для разработки игры. Я остановился на довольно простом игровом фреймворке — Ebiten. Основная идея библиотеки — все что есть это просто изображение. Порядок, позиция, угол наклона и масштаб зависит от вашей игровой логики.
Скрипт проверки GitHub rate limit
Скрипт проверки GitHub rate limit
GitHub API имеет лимиты на запросы в час — 12 500 максимум и 5000 на одного пользователя. В некоторых случаях количество лимитов недостаточно и вам необходимо знать текущий баланс кредитов.
Для проверки таких «кредитов» на API запросы напишем небольшой bash скрипт:
#!/usr/bin/env bash while true do remain=$(curl -s -H "Authorization: token $GITHUB_TOKEN" -X GET https://api.github.com/rate_limit | jq -r '.rate.remaining') date=$(date -u +"%Y-%m-%dT%H:%M:%S%Z") echo "$date $remain" sleep 3 done
Получаем такой вывод:
Подсветка текста в Bash скриптах
Подсветка текста в Bash скриптах
Удобный сниппет для подсвечивания текста разными цветами в bash скриптах, рассмотрим пример:
Создадим файл t.sh:
#!/usr/bin/env bash red=$'\e[1;31m' grn=$'\e[1;32m' yellow=$'\e[1;33m' white=$'\e[0m' echo "$yellow [WARN] Hello world! $white"; echo "$red [ERR] Hello world! $white"; echo "$grn [INFO] Hello world! $white";
Итого при запуске скрипта мы можем видеть текст разного цвета:
Мониторинг Nginx при помощи stub_status и Prometheus Exporter. Часть 2
Мониторинг Nginx при помощи stub_status и Prometheus Exporter. Часть 2
Для получения данных с Nginx status монитора в Prometheus необходим запуск Prometheus exporter в Kubernetes кластере. Напишем deployment манифест для запуска экспортера в Prometheus.
Создадим файл exporter.yaml:
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: nginx-prometheus-exporter
spec:
replicas: 1
template:
metadata:
labels:
app:nginx-prometheus-exporter
spec:
containers:
- name:nginx-prometheus-exporter
image: "nginx/nginx-prometheus-exporter:0.8.0"
imagePullPolicy: Always
args: ["-nginx.scrape-uri", "https://mywebsite/basic_status"]
ports:
- containerPort: 9113
name: http
---
apiVersion: v1
kind: Service
metadata:
name: nginx-prometheus-exporter
annotations:
prometheus.io/scrape: 'true'
prometheus.io/port: '9113'
spec:
ports:
- name: http
port: 80
protocol: TCP
targetPort: 9113
selector:
app: nginx-prometheus-exporter
type: ClusterIP
Для того, чтобы Prometheus мог забирать данные с pod-ов очень важно добавить соответствующую аннотацию в Service манифест:
Мониторинг Nginx при помощи stub_status и Prometheus Exporter
Мониторинг Nginx при помощи stub_status и Prometheus Exporter
Не так давно возникла задача мониторинга проекта, который не бежит внутри Kubernetes и простые настройки Prometheus не совсем подходят. Знать нагрузки на сервис интересно, но не хочется много накручивать и писать дополнительный код (к тому же проекты работают весьма успешно на PHP). Посмотрев что может отдать стандартный nginx понял, что в принципе базовую нагрузку вытащить будет довольно легко. Приступаем:
Golang — использование rate limiter в коде
Golang — использование rate limiter в коде
Rate limiting — ограничение скорости запросов в определенной системе. К примеру вы можете поставить ограничения на ваш веб сервер — не более 10 запросов в секунду. Возможно создание ограничения только для определенного клиента или типа машины.
В Golang добавление rate limit довольно просто, достаточно использовать готовую библиотеку golang.org/x/time/rate
Golang — функция вывода user IP
Golang — функция вывода user IP
В случае использования вашего приложения через load balancer или через различные прокси вида Cloudflare задача вывода клиентского IP адреса заключается в правильной выборке header. От X-Real-Ip до CF_CONNECTING_IP или же X-Original-Forwarded-For.
Для этого я написал простую функцию по выборке IP адреса:
func readUserIP(r *http.Request) string {
address := r.Header.Get("X-Original-Forwarded-For")
if address == "" {
address = r.Header.Get("X-Forwarded-For")
}
if address == "" {
address = r.Header.Get("X-Real-Ip")
}
if address == "" {
address = r.RemoteAddr
}
return address
}
Алгоритм прост — мы смотрим на входящие HTTP хедеры и вытаскиваем возможный IP адрес по очереди:
Golang — Вывод POST response в fmt.Println
Golang — Вывод POST response в fmt.Println
Сниппет для вывода запроса при отладке:
...
// Save a copy of this request for debugging.
requestDump, err := httputil.DumpRequest(r, true)
if err != nil {
fmt.Println(err)
// handle errors
}
fmt.Println(string(requestDump))
...
Конфигурация и настройка rippled кошелька
Конфигурация и настройка rippled кошелька
Шаг 1. Установка
Требования к установке: минимум 16 GB памяти и от 100 GB свободного места.
Пример установки на Ubuntu 20.04:
sudo apt -y update && \ sudo apt -y install apt-transport-https ca-certificates wget gnupg && \ wget -q -O - "https://repos.ripple.com/repos/api/gpg/key/public" | \ sudo apt-key add - && \ echo "deb https://repos.ripple.com/repos/rippled-deb bionic stable" | \ sudo tee -a /etc/apt/sources.list.d/ripple.list && \ sudo apt -y update && \ sudo apt -y install rippled && \ systemctl status rippled.service
Шаг 2. Настройка конфигурации