Шпаргалки Просто Программиста

Работа с 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
}

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

TL;DR


Создано: 18.01.2018 22:20

Работа с 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.

TL;DR


Создано: 18.01.2018 18:57

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

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

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

pm.status_path = /status
ping.path = /ping
ping.response = pong

TL;DR


Создано: 20.07.2016 23:33

Symfony DistributionBundle. Could not open input file: app/console.

Обновляя свою Siteforever CMS до версии 0.8, в которой ядро уже работает на ядре Symfony 2.8, столкнулся с проблемой. Как это выглядит, можно посмотреть на Travis CI. При выполнении composer install получаю ошибку:

  An error occurred when executing the "'cache:clear --no-warmup'" command:  

  Could not open input file: app/console   

Ошибка вызвана post-install-cmd скриптом Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache.

Дело в том, что Symfony 2.8 может работать с путями как в стиле 2.x, так и в стиле 3.x. Второй вариант мне нравится больше и версия CMS 0.8 именно его и использует. Т.е. console она должна искать в папочке bin. Для этого в файл composer.json надо прописать параметр:

  "extra": {
    "symfony-bin-dir": "bin",
  },

Но, почему-то эта настройка не помогает заставить работать DistributionBundle нормально.

TL;DR


Создано: 06.07.2016 13:18

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

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

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

sudo visudo

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

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

username ALL=(ALL) NOPASSWD: ALL

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

TL;DR


Создано: 11.06.2016 12:32

Запуск тестов в selenium на сервере без монитора

Selenium

Перед каждым разработчиком рано или поздно встает вопрос тестирования его кода. При чем unit-тестирование покрывает не всегда и не все нужды. Для более полного обеспечения качества создаваемого проекта приходится прибегать и к приемочному тестированию.

На сегодняшний день дела обстоят более менее не плохо. Есть набивший многим оскомину селениум. Есть Mink Константина Кудряшова, который позволяет писать функциональные/приемочные тесты в достаточно дружелюбном стиле. И при чем в качестве драйвера использовать не только селениум, среди перечня доступных есть вполне достойный безголовый zombie. Но, после моих тестов наиболее точным тестирование оказалось только через селениум. Зомби по каким-то причинам выкидывал ошибки при парсинге jquery.

Но, минус селениума в том, что ему для работы нужен браузер (по традиции firefox). А firefox требует для запуска дисплей. А на моем сервере, который используется для Continuous Integration монитора нет (это же сервер). Решение было найдено в лице утилиты Xvfb, представляющей из себя виртуальный дисплей.

TL;DR


Создано: 17.06.2014 15:39

Сравнение 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.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, а так же сжимать как стили, так и скрипты, пусть и не с максимальной экономией.

TL;DR


Создано: 02.06.2014 14:59

Переименовать файлы в нижний регистр

Переименовать все файлы в текущей и во всех вложенных директориях в нижний регистр:

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 не обрабатывается нигде.

TL;DR


Создано: 27.05.2014 15:34

Обновление 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

Но, не тут-то было. Вместо профита получаем ошибку

TL;DR


Создано: 16.05.2014 19:50

Правильная постановка задачи

Правильная постановка задачи - залог успеха Вашего проекта

По произведению Алексея Березина.

TL;DR


Создано: 13.05.2014 11:59