Шпаргалки Просто Программиста
Работа с 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 не обрабатывается нигде.
Обновление Nginx 1.1 на 1.6 в Ubuntu 12.04
Решил обновить Nginx на последнюю стабильную версию, т.к. по умолчанию в Ubuntu 12.04 все еще лежит старьё Nginx 1.1, а на официальном сайте предлагают уже 1.6 и 1.7
Казалось бы, всё просто, как рекомендует официальный сайт:
Скачиваем сертификат и устанавливаем в систему:
wget http://nginx.org/keys/nginx_signing.key
sudo apt-key add nginx_signing.key
Потом открываем /etc/apt/sources.list
sudo nano /etc/apt/sources.list
и вставляем в конец файла
deb http://nginx.org/packages/ubuntu/ precise nginx
deb-src http://nginx.org/packages/ubuntu/ precise nginx
Далее выполняем обновление и получаем готовый свеженький Nginx:
sudo apt-get update
sudo apt-get dist-upgrade
Но, не тут-то было. Вместо профита получаем ошибку
Введение в фреймворк Kriswallsmith Assetic
Пожалуй, одной из самых мощных библиотек для управления статическими файлами (стилями, джава-скриптами, изображениями) через PHP-скрипты является Assetic. Тем не менее, начать с ходу использовать Assetic под силу далеко не каждому профессионалу. Не говоря уже о новичках, для которых серьезным барьером является и английский язык.
Библиотека решает такие задачи, как:
- Публикация статических фалов, находящихся в модулях за пределами директории веб-сервера
- Объединение мелких файлов скриптов или стилей в один для ускорения загрузки
- Встраивание мелких изображений в файлы стилей в кодировке base64 для ускорения загрузки
- Обработка и компиляция стилей и скриптов из различных языков, таких как less или coffeescript в нативные css и javascript
- Сжатие стилей и скриптов средствами различных оптимайзеров по вкусу
- Оптимизация изображений PNG и Jpeg без потери качества
Данный перевод из официальной документации является введением в Kriswallsmith Assetic
Assetic
Assetic - это фреймворк для управления статическими активами для PHP-приложений.
<?php
use Assetic\Asset\AssetCollection;
use Assetic\Asset\FileAsset;
use Assetic\Asset\GlobAsset;
$js = new AssetCollection(array(
new GlobAsset('/path/to/js/*'),
new FileAsset('/path/to/another.js'),
));
// код объединяет файлы при выгрузке
echo $js->dump();
Перегрев процессора из-за 100% загрузки gvfsd-metadata
На улице наконец установились теплые деньки... так же, как и у моего ноутбука vaio. При чем до такой степени, что печатать что-либо стало не возможно, т.к. руки постоянно потели.
Запустив в консоли команду top
, увидел, что почти все ресурсы процессора съедает программа gvfsd-metadata
:
~$ top
top - 19:10:37 up 1:22, 2 users, load average: 1,83, 1,89, 1,91
Tasks: 234 total, 2 running, 232 sleeping, 0 stopped, 0 zombie
%Cpu(s): 29,6 us, 4,0 sy, 0,0 ni, 61,6 id, 4,3 wa, 0,0 hi, 0,5 si, 0,0 st
КиБ Mem: 8157760 total, 5089708 used, 3068052 free, 328028 buffers
КиБ Swap: 8368124 total, 0 used, 8368124 free, 1725240 cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3299 username 20 0 120m 5032 2856 R 77,1 0,1 32:44.84 gvfsd-metadata
3681 username 20 0 1858m 734m 54m S 17,0 9,2 14:10.69 firefox
1715 root 20 0 207m 74m 40m S 7,0 0,9 4:04.32 Xorg
3310 username 20 0 738m 21m 13m S 6,3 0,3 3:53.82 unity-panel-ser
3312 username 20 0 342m 5448 3588 S 4,7 0,1 2:59.51 hud-service
3107 username 20 0 1607m 128m 56m S 4,3 1,6 1:46.43 compiz
Загуглив этот процесс, увидел, что проблема достаточно распространенная. Нашел решение на ubuntu-форумах. Предлагается всего лишь почистить директорию с данными этого процесса:
~$ rm -rf ~/.local/share/gvfs-metadata
После выполнения команды становится значительно легче работать, а кулер уже шумит не так громко. Не знаю, на сколько это решение окончательное, буду мониторить в ближайшие дни, и если проблема всплывет вновь, придется искать другое решение.