Шпаргалки Просто Программиста
Как увеличить размер диска в Proxmox VE: пошаговое руководство
Виртуализация стала неотъемлемой частью современной ИТ-инфраструктуры, и Proxmox VE — одна из самых популярных платформ для управления виртуальными машинами. Однако при активном использовании ресурсов часто возникает необходимость расширить дисковое пространство виртуальной машины. Хотя сам Proxmox позволяет легко увеличить объём виртуального диска через веб-интерфейс, этого недостаточно: операционная система внутри виртуальной машины не всегда автоматически распознаёт новые размеры. В этой статье мы рассмотрим, как корректно расширить раздел файловой системы после увеличения диска в Proxmox VE.
Зачем нужны программисты?
В современном мире цифровые технологии проникают в практически все сферы жизни: от домашних устройств и медицинского оборудования до управления бизнесом и образования. В этом контексте роль программистов становится критически важной.
Отладка заголовков в 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, какие переданы заголовки.
Работа с 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
}
Для того, чтобы хранить параметр для каждого ключа отдельно, используем часть ключа как часть имени файла.
Работа с 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.
Настройка мониторинга php-fpm через Datadog
Для настройки мониторинга необходимо внести некоторые изменеия в pool, который собираемся мониторить, настройку хоста в nginx и подключить конфиг агенту datadog.
Для начала откроем файл пула и раскоментируем следующие строки:
pm.status_path = /status
ping.path = /ping
ping.response = pong
Используем в Ubuntu sudo без пароля
Если вам нужно часто управлять вашим домашним компьютером или сервером, может надоедать постоянно вводить пароль с командой sudo. Решение этого вопроса нашлось на http://askubuntu.com/a/147265.
Достаточно открыть терминал и ввести команду:
sudo visudo
после чего в последний раз ввести пароль.
Эта команда откроет конфигурацию sudo, в которую внизу нужно прописать:
username ALL=(ALL) NOPASSWD: ALL
где username - это имя вашего пользователя.
Запуск тестов в selenium на сервере без монитора

Перед каждым разработчиком рано или поздно встает вопрос тестирования его кода. При чем unit-тестирование покрывает не всегда и не все нужды. Для более полного обеспечения качества создаваемого проекта приходится прибегать и к приемочному тестированию.
На сегодняшний день дела обстоят более менее не плохо. Есть набивший многим оскомину селениум. Есть Mink Константина Кудряшова, который позволяет писать функциональные/приемочные тесты в достаточно дружелюбном стиле. И при чем в качестве драйвера использовать не только селениум, среди перечня доступных есть вполне достойный безголовый zombie. Но, после моих тестов наиболее точным тестирование оказалось только через селениум. Зомби по каким-то причинам выкидывал ошибки при парсинге jquery.
Но, минус селениума в том, что ему для работы нужен браузер (по традиции firefox). А firefox требует для запуска дисплей. А на моем сервере, который используется для Continuous Integration монитора нет (это же сервер). Решение было найдено в лице утилиты Xvfb, представляющей из себя виртуальный дисплей.
Сравнение 2х основных утилит для сжатия статических файлов
Решил сравнить способности по сжатию javascript у 2х основных утилит closure compiler от google и yui compressor от 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.js | 282766 |
| jquery-1.11.1.min.js | 95786 |
| jquery-1.11.1.cca.js | 87933 |
| jquery-1.11.1.cc.js | 96284 |
| jquery-1.11.1.yui.js | 107452 |
Лучше всего сжатие у closure compiler с опцией ADVANCED_OPTIMIZATIONS.
На следующем месте идет сжатый jquery от вендоров, так что если под рукой нет компрессора с java, лучше использовать его.
Как ни странно, мой любимый yui compressor на последнем месте. Но, в его защиту можно сказать, что он оставляет все комментарии с копирайтами, удалив которые, наверняка, можно было бы сэкономить еще. А так же, closure compiler не умеет сжимать css а размер его jar-файла 6 856 128 байт, против 891 148 yui, что в 7,69 раз больше.
Так что yui compressor по прежнему остается не заменимой утилитой, которую можно таскать и вместе с проектом в git, а так же сжимать как стили, так и скрипты, пусть и не с максимальной экономией.
Переименовать файлы в нижний регистр
Переименовать все файлы в текущей и во всех вложенных директориях в нижний регистр:
find ./ -type f | awk '{ print $1 " " tolower($1) }' | xargs -L 1 mv
Харитон Мизгирь пишет: Чтобы обрабатывались пути с пробелами и проч. непечатностями надо использовать конструкцию типа:
find -print0 | xargs -0
Объяснение по поводу параметра -print0 (find'а) и -0 (xargs'а)
В имени файла может попасться символ, который требует экранирования при обработке (single or double quotes, spaces or newlines). print0 заставляет выводить список найденных файлов разделяя их через нуль-символ (\0, в духе языка C, где он используется для декларации конца строки). xargs тоже должен быть готов к такому разделителю, для этого служит -0.
find и xargs по разному себя ведет когда ищут из текущей директории или когда ищут из родительской (в родительской прекрасно обрабатывал директории с пробелами и любыми кавычками, которые находились в дочерней директории). newlines не обрабатывается нигде.