Блог


03 Apr 2026

Как встраивать статические ресурсы в бинарные файлы Go

Хотите узнать, как использовать HTML-шаблоны, CSS, JavaScript, картинки и конфиги прямо внутри вашего Go-приложения? Давайте разберёмся, как это сделать с помощью пакета embed.

Одна из самых крутых фишек Go — это возможность собрать всё приложение в один-единственный бинарный файл. И начиная с версии 1.16, пакет embed делает процесс встраивания статических файлов простым и интуитивным. Забудьте о ситуациях, когда в продакшене вдруг не хватает какого-то файла или ресурса: теперь всё, что нужно, будет всегда под рукой — прямо внутри исполняемого файла.

12 Jan 2026

🚀 Запускаем нейросети (LLM) на AMD GPU в Proxmox: гайд для начинающих

Привет, коллега! 👋

Если ты хочешь запустить локальную нейросеть (например, через Ollama) на своём домашнем сервере с Proxmox и видеокартой AMD — ты по адресу. В этой статье разберём по шагам, как «подружить» AMD GPU, ROCm и LXC-контейнер, даже если ты не гуру виртуализации.

18 Nov 2025

Как увеличить размер диска в Proxmox VE: пошаговое руководство

Виртуализация стала неотъемлемой частью современной ИТ-инфраструктуры, и Proxmox VE — одна из самых популярных платформ для управления виртуальными машинами. Однако при активном использовании ресурсов часто возникает необходимость расширить дисковое пространство виртуальной машины. Хотя сам Proxmox позволяет легко увеличить объём виртуального диска через веб-интерфейс, этого недостаточно: операционная система внутри виртуальной машины не всегда автоматически распознаёт новые размеры. В этой статье мы рассмотрим, как корректно расширить раздел файловой системы после увеличения диска в Proxmox VE.

31 Jan 2025

Зачем нужны программисты?

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

11 Mar 2024

Отладка заголовков в Nginx

Сервер Nginx позволяет передавать заголовки при проксировании через директивы:

Синтаксис:    proxy_set_header поле значение;
Умолчание:
proxy_set_header Host $proxy_host;
proxy_set_header Connection close;
Контекст:    http, server, location

Выглядит в конфиге это примерно так:

location / {
    proxy_pass http://headers;
    proxy_set_header X-FORWARDED-FOR $remote_addr;
}

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

18 Jan 2018

Работа с API криптобиржи Yobit на golang - Получение собственного баланса

Все примеры работают с go version go1.9.2 linux/amd64

Работа с API для торгов

Получение своего баланса

Прежде всего для работы с api торгов нужно создать пару Ключ - Секрет на странице https://yobit.io/ru/api/keys/

Все будет немного сложнее, чем в предыдущем примере. Именно авторизация на бирже и подпись параметров вызвали у меня больше всего вопросов. Потому-то и хочется оставить рабочий код здесь.

Для начала каждый запрос нам нужно будет подписывать. И чтобы запросы (и подписи) отличались, биржа требует указывать каждый раз параметр nonce в виде целого числа в диапазоне 1..2147483646. При чем в каждом следующем запросе это число должно быть больше, чем в предыдущем. Для обнуления нужно создать новый ключ.

Для получения параметра nonce напишем отдельную функцию, чтобы мы могли пользоваться им даже после рестарта приложения:

import (
    "io/ioutil"
    "strconv"
)

func GetNonce(key string) (nonce int, err error) {
    nonceFileName := "nonce." + key[0:8] + ".txt"
    nonceBytes, err := ioutil.ReadFile(nonceFileName)
    if err == nil {
        nonce, _ = strconv.Atoi(string(nonceBytes))
    }
    nonce++
    err = ioutil.WriteFile(nonceFileName, []byte(strconv.Itoa(nonce)), 0644)

    return
}

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

18 Jan 2018

Работа с API криптобиржи Yobit на golang - Получение доступных пар

Все примеры работают с go version go1.9.2 linux/amd64

Работа с открытым API

Получение информации о доступных валютных парах

Посмотрим, что написано в документации:

Пример запроса: https://yobit.net/api/3/info

Пример ответа:

{
    "server_time":1418654531,
    "pairs":{
        "ltc_btc":{
            "decimal_places":8,
            "min_price":0.00000001,
            "max_price":10000,
            "min_amount":0.0001,
            "hidden":0,
            "fee":0.2
        }
        ...
    }
}

В первую очередь для работы с json-api нам потребуется создать структуры данных, в котрые мы будем разбирать полученный JSON.

20 Jul 2016

Настройка мониторинга php-fpm через Datadog

Для настройки мониторинга необходимо внести некоторые изменеия в pool, который собираемся мониторить, настройку хоста в nginx и подключить конфиг агенту datadog.

Для начала откроем файл пула и раскоментируем следующие строки:

pm.status_path = /status
ping.path = /ping
ping.response = pong
11 Jun 2016

Используем в Ubuntu sudo без пароля

Если вам нужно часто управлять вашим домашним компьютером или сервером, может надоедать постоянно вводить пароль с командой sudo. Решение этого вопроса нашлось на .

Достаточно открыть терминал и ввести команду:

sudo visudo

после чего в последний раз ввести пароль.

Эта команда откроет конфигурацию sudo, в которую внизу нужно прописать:

username ALL=(ALL) NOPASSWD: ALL

где username - это имя вашего пользователя.

02 Jun 2014

Сравнение 2х основных утилит для сжатия статических файлов

Решил сравнить способности по сжатию javascript у 2х основных утилит от google и от yahoo.

Будем сравнивать с несжатой и сжатой версией jquery:

java -jar compiler.jar --js jquery-1.11.1.js --js_output_file=jquery-1.11.1.cc.js
java -jar compiler.jar --compilation_level ADVANCED_OPTIMIZATIONS --js jquery-1.11.1.js --js_output_file=jquery-1.11.1.cca.js
java -jar yuicompressor.jar jquery-1.11.1.js -o jquery-1.11.1.yui.js
jquery-1.11.1.js282766
jquery-1.11.1.min.js95786
jquery-1.11.1.cca.js87933
jquery-1.11.1.cc.js96284
jquery-1.11.1.yui.js107452

Лучше всего сжатие у closure compiler с опцией ADVANCED_OPTIMIZATIONS. На следующем месте идет сжатый jquery от вендоров, так что если под рукой нет компрессора с java, лучше использовать его.

Как ни странно, мой любимый yui compressor на последнем месте. Но, в его защиту можно сказать, что он оставляет все комментарии с копирайтами, удалив которые, наверняка, можно было бы сэкономить еще. А так же, closure compiler не умеет сжимать css а размер его jar-файла 6 856 128 байт, против 891 148 yui, что в 7,69 раз больше.

Так что yui compressor по прежнему остается не заменимой утилитой, которую можно таскать и вместе с проектом в git, а так же сжимать как стили, так и скрипты, пусть и не с максимальной экономией.


Готовы начать проект?

Я всегда открыт для обсуждения новых возможностей и интересных задач.