Настройка приема платежей через PayPal

Внимание: Платежная система PayPal с 31 июля 2021 г. прекратил осуществления клиентских внутренних переводов и платежей по России. Об этом говорится в заявлении компании. При этом пользователи системы в России по-прежнему смогут осуществлять перевод за рубеж или получать перевод из-за границы.

Прием платежей реализован через NodeJS и библиотеки express. Создаем проект и добавляем в зависимость npm модуль @paypal/checkout-server-sdk.

npm i @paypal/checkout-server-sdk

Прием платежей через PayPal реализуется в два этапа:

  1. создание (формирование) платежа клиентом.
  2. подтверждение приема платежа.
Читать далее «Настройка приема платежей через PayPal»

Установка настройка pgAgent

Оригинал инструкции размещен на сайте https://gist.github.com/peterneave/83cefce2a081add244ad7dc1c53bc0c3

  • Устанавливаем приложение
sudo apt update
sudo apt install pgagent
  • Далее создаем файл .pgpass в рабочей директории postgresql (/var/lib/postgresql)
sudo su - postgres
echo localhost:5432:*:pgagent:securepassword >> ~/.pgpass
chmod 600 ~/.pgpass
chown postgres:postgres /var/lib/postgresql/.pgpass
Читать далее «Установка настройка pgAgent»

Обновление NodeJS

Иногда может быть ситуация, когда требуется использовать более новые версии NodeJS.

Инструкция по обновлению следующая:

  • Скачиваем инсталяк
curl -sL https://deb.nodesource.com/setup_16.x -o nodesource_setup.sh
# тут setup_16.x номер версии node
  • Запускаем скрипт
sudo bash nodesource_setup.sh
  • Устанавливаем nodejs
sudo apt install nodejs

Оригинал статьи: https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-ubuntu-20-04-ru

Ошибка unable to verify the first certificate в NodeJS

Если в приложении express используется nodemailer и используется порт 25 без шифрования, то выходит вот такая ошибка.

Чтобы исправить это, нужно в файле /bin/www добавить

// добавлено специально, чтобы была рассылка писем с 25 порта
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";

Google Platform Cloud. Скачивание образа виртуальной машины

  • Создаем образ на основе диска, где находиться ОС, которую нужно скачать:

Переходим в раздел Images и нажимаем кнопку Create Image

выбираем источник Disk (по умолчанию именно он установлен).

Читать далее «Google Platform Cloud. Скачивание образа виртуальной машины»

Установка pfx сертификата на NGINX

Требуется при помощи программы openssl преобразовать *.pfx сертификат в два файла: открытый сертификат и приватный ключ.

Примечание: если установлен GIT то openssl можно использовать и оттуда:

C:\Program Files\Git\usr\bin\openssl.exe

Внимание: при работе с сертификатом *.pfx требуется пароль для работы с ним без.

Читать далее «Установка pfx сертификата на NGINX»

Обновление Apache2 на Ubuntu 20.04 до версии 2.4.51

Устанавливаем все обновления

sudo apt update && sudo apt upgrade -y

Примечание: мы изначально предполагаем, что apache2 установлен на сервере.

Проверяем версию apache2

apache2 -v
# Server version: Apache/2.4.41 (Ubuntu)
Читать далее «Обновление Apache2 на Ubuntu 20.04 до версии 2.4.51»

JavaScript для глубокого обучения TensorFlow.js

Данная статья является кратким изложением книги «JavaScript для глубокого обучения: TensorFlow.js»

Простой пример машинного обучения для «линейных» данных:

const trainData = {
    sizeMB: [0.080, 9.000, 0.001, 0.100, 8.000,
        5.000, 0.100, 6.000, 0.050, 0.500,
        0.002, 2.000, 0.005, 10.00, 0.010,
        7.000, 6.000, 5.000, 1.000, 1.000],
    timeSec: [0.135, 0.739, 0.067, 0.126, 0.646,
        0.435, 0.069, 0.497, 0.068, 0.116,
        0.070, 0.289, 0.076, 0.744, 0.083,
        0.560, 0.480, 0.399, 0.153, 0.149]
};

const testData = {
    sizeMB: [5.000, 0.200, 0.001, 9.000, 0.002,
        0.020, 0.008, 4.000, 0.001, 1.000,
        0.005, 0.080, 0.800, 0.200, 0.050,
        7.000, 0.005, 0.002, 8.000, 0.008],
    timeSec: [0.425, 0.098, 0.052, 0.686, 0.066,
        0.078, 0.070, 0.375, 0.058, 0.136,
        0.052, 0.063, 0.183, 0.087, 0.066,
        0.558, 0.066, 0.068, 0.610, 0.057]
};

const trainTensors = {
    sizeMB: tf.tensor2d(trainData.sizeMB, [20, 1]),
    timeSec: tf.tensor2d(trainData.timeSec, [20, 1]),
};

const testTensors = {
    sizeMB: tf.tensor2d(testData.sizeMB, [20, 1]),
    timeSec: tf.tensor2d(testData.timeSec, [20, 1]),
};

const model = tf.sequential();
model.add(tf.layers.dense({inputShape: [1], units: 1}));
model.compile({optimizer: 'sgd', loss: 'meanAbsoluteError'});

(async function() {
    await model.fit(trainTensors.sizeMB, trainTensors.timeSec, { epochs: 200 });
    model.evaluate(testTensors.sizeMB, testTensors.timeSec).print();

    model.predict(tf.tensor2d([[7.8]])).print();
})();

Скачать книгу можно с ресурса https://1drv.ms/b/s!AnBjlQFDvsITgqFSIHj1pfyIoIcfGg?e=qdLYsi