plv8 и PostgreSQL 14

По умолчанию поддержка в 14 версии отсутствует (на момент написания статьи).

Чтобы установить расширение требуется выполнить следующие шаги:

Шаг 1. Ставим зависимости

sudo apt install make git g++ clang python2 pkg-config libc++-dev libc++abi-dev libglib2.0-dev libtinfo5 ninja-build postgresql-server-dev-14

Шаг 2. Указываем, что команда python вызывает python версии 2

sudo ln -s /usr/bin/python2 /usr/bin/python
Версия python
Читать далее «plv8 и PostgreSQL 14»

Скрипт резервного копирования СУБД PostgreSQL

Резервное копирование производиться при помощи утилиты pg_probackup

sudo sh -c 'echo "deb [arch=amd64] https://repo.postgrespro.ru/pg_probackup/deb/ $(lsb_release -cs) main-$(lsb_release -cs)" > /etc/apt/sources.list.d/pg_probackup.list'
sudo wget -O - https://repo.postgrespro.ru/pg_probackup/keys/GPG-KEY-PG_PROBACKUP | sudo apt-key add - && sudo apt-get update
sudo apt-get install pg-probackup-12
sudo apt-get install pg-probackup-12-dbg

Примечание: на примере выше устанавливается 12 версия

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

sudo ln -s /usr/bin/pg_probackup-12 /usr/bin/pg_probackup
Читать далее «Скрипт резервного копирования СУБД PostgreSQL»

Подключение к ADB через Wi-Fi (через TCP)

ADB умеет подключаться к устройствам не только через USB, но и через TCP. Порой, это бывает весьма полезным.

1. Подключаем устройство через USB, а в консоль вводим команду adb tcpip 5555. В ответ будет выведена фраза «restarting in TCP mode port: 5555».
2. Отключаем устройство от USB, в консоль вводим команду adb connect <ip>:<port>, где <ip> — это адрес устройства, а <port>  в нашем случае — 5555. В ответ должна появится фраза «connected to 192.168.1.10:5555».

Во многих случаях достаточно выполнить лишь пункт 2 (т.е. бе предварительного подключения устройства по USB).

Проверяем, что устройство видно:

# adb devices
List of devices attached
192.168.1.10:5555 device

Соединение по TCP автоматически завершится в тот момент, когда вы подключите это устройство через USB. Также можно вручную указать ADB слушать только USB:

# adb usb

ViewModel в Java

Примечание: сразу уточню, что ViewModel — это не замена onSaveInstanceState(Bundle)

Ниже код ViewModel

package ag.krasnov.exampleviewmodel;

import android.util.Log;
import androidx.lifecycle.ViewModel;

public class MyViewModel extends ViewModel {

    private int mCount;


    public int getCount() {
        return mCount;
    }

    public void increment() {
        mCount++;
    }
}
Читать далее «ViewModel в Java»

Xcode: создание пакета

Создаем пакет стандартными способами xcode

Далее можно сохранить его в любой git и применять метки (tag):

git tag -a 1.0.0 -m "version 1.0.0"
git tag
1.0.0
git push origin --tags

Особенности работы iisnode

В логах windows можно увидеть следующую ошибку:

Faulting application name: w3wp.exe, version: 10.0.14393.0, time stamp: 0x57899b8a
Faulting module name: ntdll.dll, version: 10.0.14393.2969, time stamp: 0x5ccd148a
Exception code: 0xc0000005
Fault offset: 0x0000000000065553
Faulting process id: 0x2694
Faulting application start time: 0x01d88ba20ec97214
Faulting application path: c:\windows\system32\inetsrv\w3wp.exe
Faulting module path: C:\Windows\SYSTEM32\ntdll.dll
Report Id: f0c1f728-42d5-446e-b599-6bc97223eb12
Faulting package full name: 
Faulting package-relative application ID: 

Проблема заключалась в том, что в один момент времени процесс node.exe потребляет оперативной памяти больше 2Gb.

Читать далее «Особенности работы iisnode»

Перенаправление логов в systemd

Создаем сервис:

[Unit]
Description=RPC сервис
After=network-online.target

[Service]
User=www-data
Restart=on-failure
# тут указываем путь к серверному приложению
WorkingDirectory=/var/www/rpc-release
ExecStart=/usr/bin/node /var/www/rpc-release/bin/www conf=./release.conf
StandardOutput=file:/var/log/rpc/rpc-dev.log
StandardError=file:/var/log/rpc/rpc-dev-error.log

[Install]
WantedBy=multi-user.target
Читать далее «Перенаправление логов в systemd»

Locust: нагрузочное тестирование

Подробнее на официальном сайте: https://docs.locust.io/en/latest/quickstart.html

Создание простого теста:

from locust import HttpUser, task, between

class Exists(HttpUser):
    wait_time = between(1, 5)

    @task(1)
    def auth(self):
        self.client.get("/exists")

Для проверки можно выполнить:

import requests as r
base_url = 'http://localhost:5007/release'
r.get(base_url + '/exists')

# <Response [200]>
Читать далее «Locust: нагрузочное тестирование»