PostgreSQL: расстояние между двумя координатами в метрах

Можно добавить функцию вида:

CREATE OR REPLACE FUNCTION public.distance(
	lat1 double precision,
	lon1 double precision,
	lat2 double precision,
	lon2 double precision)
    RETURNS double precision
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE PARALLEL UNSAFE
AS $BODY$
DECLARE
    R integer = 6371e3; -- Метры
    rad double precision = 0.01745329252;

    f1 double precision = lat1 * rad;
    f2 double precision = lat2 * rad;
    df double precision = (lat2-lat1) * rad;
    dl double precision = (lon2-lon1) * rad;

    a double precision = sin(df/2) * sin(df/2) + cos(f1) * cos(f2) * sin(dl/2) * sin(dl/2);
    c double precision = 2 * atan2(sqrt(a), sqrt(1-a));    
BEGIN                                                     
    RETURN R * c;        
END
$BODY$;

PostGree: удаление всех таблиц в БД

Самый простой способ, в консоли зайти в БД и выполнить скрипт:

DO $$ DECLARE
    r RECORD;
BEGIN
    FOR r IN (SELECT tablename FROM pg_tables WHERE schemaname = current_schema()) LOOP
        EXECUTE 'DROP TABLE IF EXISTS ' || quote_ident(r.tablename) || ' CASCADE';
    END LOOP;
END $$;

Автоматическое увеличение номера билда на переносе скрипта с dev в prod

Задача: при переносе ряда скриптов с dev сервера на prod сервер, автоматически увеличивать номер сборки, дабы можно было идентифицировать, с какой версии начались потенциальные проблемы у пользователей

Решение: т.к. перенос скриптов из ветки dev в ветку prod происходит скриптом на bash, то просто допишем сей функционал, в виде что-то вроде:

read version</var/www/www-root/data/www/fewrfwer.ru/version.txt;
((version++))
echo $version>/var/www/www-root/data/www/fewrfwer.ru/version.txt;
D=$(date  +%Y-%m-%d)
T=$(date +%H:%M:%S)
echo "$D" "$T" " выпущена версия $version" >> /var/www/www-root/data/www/fewrfwer.ru/hist_version.txt;

Итого имеем в файле versions.txt — текущий номер сборки, а в файле дату и время формирования новой сборки. Ну собственно этого достаточно, например для того чтобы понять когда была внесена например ошибка, а далее уже дело техники..

JavaScript: добавить лидирующий 0 к числу

Задача: добавить к числу лидирующий 0, если число однозначное, и не добавлять соответственно, если двухзначное.

Решение: есть два способа, старый, работающий во всех браузерах, и новый — для браузеров 2018 года и новее.

Способ 1:

function pad(value) {
    return ("0"+value).slice(-2);
}

Способ 2:

function pad(value) {
    return value.tostring().padstart(2, 0);
}

PHP: Использование CURL с сертифкатом

Задача: Некий удаленный ресурс проверяет сертификат пользователя, при попытке получить с него данные. В наличии только стандартные сертификаты выданные LetEncrypt.

Решение:

Сертификаты необходимо сконвертировать. В наличии:

  • sert.crt — сертификат домена в PEM формате
  • sert.key — приватный ключ PEM формате

Конвертируем используя промежуточную конвертацию в формат p12:

openssl pkcs12 -export -in sert.crt -inkey sert.key -out sert.p12
openssl pkcs12 -in sert.p12 -nodes -out result.pem

По итогу получили файл result.pem. Далее его и будем использовать при работе с curl:

$ch = curl_init();
                curl_setopt($ch, CURLOPT_URL, "https://некий ресурс");    
                curl_setopt($ch, CURLOPT_SSLCERT, WUO_ROOT."result.pem" );
                curl_setopt($ch,CURLOPT_SSLCERTTYPE,"PEM");
                curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, True);
                curl_setopt($ch, CURLOPT_POST, True);
                curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
                $post=http_build_query($post, '', '&');
                curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
                curl_setopt($ch, CURLOPT_VERBOSE, true);
                $result = curl_exec($ch);
                curl_close($ch);   
1 16 17 18 19 20 55