01 сентябрь 2021 07 сентябрь 2021 JavaScript


Когда необходимо обработать query_string из урла с помощью JS то самый простой и экономный вариант использовать URLSearchParams и reduce следующим образом

// распасить урл
const searchParams = new URLSearchParams(window.location.search.substring(1)); 

// преобразовать в обычный Объект
const params = [...searchParams.entries()].reduce((acm, x) => {return {...acm, [x[0]]: x[1] }}, {}); 

константа params будет содержать словарь с данными из запроса (исключая дубли)

Может статься так, что потребуется передать строку больше чем 2048 байт, в таком случае использовать  window.location.search не получится из-за ограничений GET запроса протокола HTTP.

Но можно воспользоваться дополнение window.location.hash это строка Хеш идущая после символа #

в таком случае чуть в код добавляет маленькая вставка

const searchParams1 = new URLSearchParams(
    window.location.search.substring(1) + '&' + window.location.hash.substring(1)
);

const args = [...searchParams1.entries()].reduce(
    (akm, x) => ({ ...akm, ...Object.fromEntries([x]) }), {},
);

 


30 август 2021 Базы данных, PSQL, MySQL select psql concat



Иногда появляется необходимость скопировать некоторые поля из одной базы данных в другую. Как мне кажется, самым простым способом копирования отдельных полей у некоторых строк является генерация SQL скрипта в одной базе и исполнение этого запроса на другой. Например,

select order_num, slug  from catalog_humanmenu where tree_id = 6 and is_public= true  and order_num > 0 order by order_num

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

select concat('update catalog_humanmenu set order_num=',order_num,' where slug=''',slug,''';')  from catalog_humanmenu where tree_id = 6 and is_public= true  and order_num > 0 order by order_num;

теперь переключаем вывод результатов запроса не в терминал, а файл на локальном или удалённом диске

\o ordering-guid.txt

-- затем повторяем генератор SQL скрипта и вывод этой команды сохранится в файле ordering-guid.txt

select concat('update catalog_humanmenu set order_num=',order_num,' where slug=''',slug,''';')  from catalog_humanmenu where tree_id = 6 and is_public= true  and order_num > 0 order by order_num;

-- закрываем SQL сессию

\q

в новообразованном файле ordering-guid.txt необходимо удалить первые и последние строки, а затем выполнить его в базе назначения

psql < ordering-guid.txt

Всё, необходимые поля из отобранных строк перенесены в соответствующие поля и строки базы назначения


12 июль 2021 14 июль 2021 JavaScript reduce рекурсия children


Для конвертирования иерархии любой вложенности удобно применять рекурсию совместно с reduce

function object_list_2_flat_array (obj_list) {

    var conv = function(xxx, x) {
        return [x, ...x["children"].reduce(conv, xxx)];
    };
    return obj_list.reduce(conv, new Array());

};

Тут накапливающий метод reduce вызывает рекурсию для каждого узла иерархии и результаты складывает в аккумулятор.


20 май 2021 Linux


выключить звуковой сервер

killall -9 pulseaudio

запустить звуковой сервер

pulseaudio -D

 


03 май 2021 15 июль 2021 Linux | решать тесты


Основной компьютер

бенчмарк от 7z на Intel(R) Core(TM) i5-6400 CPU @ 2.70GHz

p7zip Version 16.02 (locale=ru_RU.UTF-8,Utf16=on,HugeFiles=on,64 bits,4 CPUs Intel(R) Core(TM) i5-6400 CPU @ 2.70GHz (506E3),ASM,AES-NI)

Intel(R) Core(TM) i5-6400 CPU @ 2.70GHz (506E3)
CPU Freq: - - - - - - - - -

RAM size:   11890 MB,  # CPU hardware threads:   4
RAM usage:    882 MB,  # Benchmark threads:      4

                       Compressing  |                  Decompressing
Dict     Speed Usage    R/U Rating  |      Speed Usage    R/U Rating
         KiB/s     %   MIPS   MIPS  |      KiB/s     %   MIPS   MIPS

22:       9252   261   3451   9000  |     117231   321   3117  10002
23:      10885   289   3837  11091  |     111271   310   3107   9628
24:      10924   297   3955  11746  |     110634   313   3103   9712
25:      11265   311   4137  12862  |     100321   289   3093   8928
----------------------------------  | ------------------------------
Avr:             289   3845  11175  |              308   3105   9567
Tot:             299   3475  10371

Резервный компьютер

бенчмарк от 7z на AMD Phenom II x6 1075t

7-Zip [64] 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18
p7zip Version 9.20 (locale=ru_RU.UTF-8,Utf16=on,HugeFiles=on,6 CPUs)

RAM size:    7975 MB,  # CPU hardware threads:   6
RAM usage:   1275 MB,  # Benchmark threads:      6

Dict        Compressing          |        Decompressing
      Speed Usage    R/U Rating  |    Speed Usage    R/U Rating
       KB/s     %   MIPS   MIPS  |     KB/s     %   MIPS   MIPS

22:   13256   519   2486  12895  |   182836   585   2821  16492
23:   13247   533   2533  13497  |   179127   581   2821  16390
24:   12986   542   2573  13963  |   177860   587   2809  16498
25:   12686   551   2627  14484  |   172736   581   2795  16244
----------------------------------------------------------------
Avr:          536   2555  13710               583   2811  16406
Tot:          560   2683  15058

Рабочий компьютер

бенчмарк от 7z на Core(TM) i5-3470 CPU

7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=ru_RU.UTF-8,Utf16=on,HugeFiles=on,64 bits,4 CPUs Intel(R) Core(TM) i5-3470 CPU @ 3.20GHz (306A9),ASM,AES-NI)

        Intel(R) Core(TM) i5-3470 CPU @ 3.20GHz (306A9)
CPU Freq:  3271  3314  3372  3305  3346  3342  3349  3334  3339

RAM size:   32064 MB,  # CPU hardware threads:   4
RAM usage:    882 MB,  # Benchmark threads:      4

                       Compressing  |                  Decompressing
Dict     Speed Usage    R/U Rating  |      Speed Usage    R/U Rating
         KiB/s     %   MIPS   MIPS  |      KiB/s     %   MIPS   MIPS

22:      13665   319   4166  13294  |     146238   362   3444  12476
23:      13197   324   4156  13447  |     132546   333   3442  11469
24:      13252   330   4312  14249  |     140723   359   3444  12353
25:      12177   318   4369  13904  |     138048   359   3423  12286
----------------------------------  | ------------------------------
Avr:             323   4251  13724  |              353   3438  12146
Tot:             338   3844  12935  

второй резервный

Архитектура:                     x86_64
CPU op-mode(s):                  32-bit, 64-bit
Порядок байт:                    Little Endian
Address sizes:                   36 bits physical, 48 bits virtual
CPU(s):                          4
On-line CPU(s) list:             0-3
Потоков на ядро:                 1
Ядер на сокет:                   2
Сокетов:                         2
NUMA node(s):                    1
ID прроизводителя:               GenuineIntel
Семейство ЦПУ:                   6
Модель:                          15
Имя модели:                      Intel(R) Xeon(R) CPU            5160  @ 3.00GHz
Степпинг:                        6
CPU МГц:                         2938.028
BogoMIPS:                        5984.54
Виртуализация:                   VT-x
L1d cache:                       128 KiB
L1i cache:                       128 KiB
L2 cache:                        8 MiB
NUMA node0 CPU(s):               0-3
Vulnerability Itlb multihit:     KVM: Mitigation: VMX disabled
Vulnerability L1tf:              Vulnerable
Vulnerability Mds:               Vulnerable: Clear CPU buffers attempted, no mic
                                 rocode; SMT disabled
Vulnerability Meltdown:          Mitigation; PTI
Vulnerability Spec store bypass: Vulnerable
Vulnerability Spectre v1:        Mitigation; usercopy/swapgs barriers and __user
                                  pointer sanitization
Vulnerability Spectre v2:        Mitigation; Full generic retpoline, STIBP disab
                                 led, RSB filling
Vulnerability Srbds:             Not affected
Vulnerability Tsx async abort:   Not affected
Флаги:                           fpu vme de pse tsc msr pae mce cx8 apic sep mtr
                                 r pge mca cmov pat pse36 clflush dts acpi mmx f
                                 xsr sse sse2 ht tm pbe syscall nx lm constant_t
                                 sc arch_perfmon pebs bts rep_good nopl cpuid ap
                                 erfmperf pni dtes64 monitor ds_cpl vmx est tm2
                                 ssse3 cx16 xtpr pdcm dca lahf_lm pti tpr_shadow
                                  dtherm

MATHERBORAD

SMBIOS 2.4 present.

Handle 0x0022, DMI type 2, 16 bytes
Base Board Information
    Manufacturer: Apple Computer, Inc.
    Product Name: Mac-F4208DC8
    Version: PVT
    Serial Number: Base Board Serial#
    Asset Tag: Base Board Asset Tag#
    Features:
        Board is a hosting board
        Board is replaceable
    Location In Chassis: Part Component
    Chassis Handle: 0x0023
    Type: Motherboard
    Contained Object Handles: 0

p7zip Version 16.02 (locale=ru_RU.UTF-8,Utf16=on,HugeFiles=on,64 bits,8 CPUs Intel(R) Xeon(R) CPU           X5355  @ 2.66GHz (6F7),ASM)

Intel(R) Xeon(R) CPU           X5355  @ 2.66GHz (6F7)
CPU Freq: - - - - - - - - -

RAM size:   32110 MB,  # CPU hardware threads:   8
RAM usage:   1765 MB,  # Benchmark threads:      8

Compressing  |                  Decompressing
Dict     Speed Usage    R/U Rating  |      Speed Usage    R/U Rating
         KiB/s     %   MIPS   MIPS  |      KiB/s     %   MIPS   MIPS

22:      16176   741   2124  15736  |     246332   786   2674  21011
23:      14728   755   1988  15006  |     240288   783   2654  20794
24:      12957   706   1973  13931  |     234731   784   2629  20602
25:      12399   722   1960  14158  |     225780   778   2583  20094
----------------------------------  | ------------------------------
Avr:             731   2011  14708  |              783   2635  20625
Tot:             757   2323  17666

Резервная материнская плата

GIGABYTE GA-880GA-UD3H


22 апрель 2021 30 август 2021 Базы данных, PSQL, MySQL Postgresql psql bash awk for drop table cascade | решать тесты


Скрипт каскадного удаления таблиц в psql
 

for t in $(echo '\dt' | psql $database |awk -F\| '{print $2}'); do 
    echo "drop table $t cascade;" ; 
done | psql $database

Суть скрипта проста:


13 апрель 2021 22 апрель 2021 Bash bash curl check 404 | решать тесты


Список ссылок размещён в файле /tmp/pdf.csv
 

for u in $(cat /tmp/pdf.csv); do 
curl -I $u 2> /dev/null | grep 'HTTP/1.1 404' -q && echo 404 `basename $u` || echo ok `basename $u`  
done

 


12 январь 2021 Nginx


certbot --dry-run --manual --agree-tos --preferred-challenges dns certonly --server https://acme-v02.api.letsencrypt.org/directory  -d *.sitename.ru -d sitename.ru -m webmaster@sitename.ru

в два захода добавляем TXT записи с именем _acme-challenge и выводимыми утилитой значениями

certbot --manual --agree-tos --preferred-challenges dns certonly --server https://acme-v02.api.letsencrypt.org/directory  -d *.sitename.ru -d sitename.ru -m webmaster@sitename.ru

добавляем ещё одно значение _acme-challenge

cat  /etc/letsencrypt/live/sitename.ru/fullchain.pem /etc/letsencrypt/live/sitename.ru/privkey.pem >  /etc/haproxy/certs/www.sitename.ru.pem

генерируем контейнер и перезапускаем балансировщик

haproxy -c -V -f /etc/haproxy/haproxy.cfg && service haproxy reload

 


02 декабрь 2020


DALI COMMANDS

Type of addresses:

address byte:

Short or group address

YAAAAAAS

Short addresses (64)

0AAAAAAS

Group addresses (16)

100AAAAS

Broadcast

100AAAAS

Special command

101CCCC1

Special command

110CCCC1

 

 

S: selector bit:

S = ‘0’ direct arc power level following

 

S = ‘1’ command following

 

Y = ‘0’ short address

 

Y = ‘1’ group address or broadcast

A: significant address bit

 

C: significant command bit

 

 

 

Table 1 contains a complete summary of the DALI command set. Basically there are four types of commands (forward frames):

1. Direct / Indirect arc power control commands – used to set ballast power level.

2. Configuration commands – configures the ballast (for example: add to a group or store level). Command must be repeated within 100 ms, otherwise it’s ignored.

3. Query commands – ask slave (ballast) for status information (for example: power level or version number). The slave can send a backward frame.

4. Special commands – used to initialize and setup the ballast, some must be repeated within 100 ms, and some require an answer from the slave. Most commands are only processed within 15 minutes after an “INITIALIZE” command is received.

Table 1. DALI Command Set Summary

Number

Command Code

Repeat < 100 ms

Answer Slave

Command Name

-

YAAA AAA0 XXXX XXXX

no

no

DIRECT ARC POWER CONTROL

0

YAAA AAA1 0000 0000

no

no

OFF

1

YAAA AAA1 0000 0001

no

no

UP

2

YAAA AAA1 0000 0010

no

no

DOWN

3

YAAA AAA1 0000 0011

no

no

STEP UP

4

YAAA AAA1 0000 0100

no

no

STEP DOWN

5

YAAA AAA1 0000 0101

no

no

RECALL MAX LEVEL

6

YAAA AAA1 0000 0110

no

no

RECALL MIN LEVEL

7

YAAA AAA1 0000 0111

no

no

STEP DOWN AND OFF

8

YAAA AAA1 0000 1000

no

no

ON AND STEP UP

9-15

YAAA AAA1 0000 1XXX

 

 

RESERVED

16 - 31

YAAA AAA1 0001 XXXX

no

no

GO TO SCENE

32

YAAA AAA1 0010 0000

yes

no

RESET

33

YAAA AAA1 0010 0001

yes

no

STORE ACTUAL LEVEL IN THE DTR

34 - 41

YAAA AAA1 0010 XXXX

 

 

RESERVED

42

YAAA AAA1 0010 1010

yes

no

STORE THE DTR AS MAX LEVEL

43

YAAA AAA1 0010 1011

yes

no

STORE THE DTR AS MIN LEVEL

44

YAAA AAA1 0010 1100

yes

no

STORE THE DTR AS SYSTEM FAILURE LEVEL

45

YAAA AAA1 0010 1101

yes

no

STORE THE DTR AS POWER ON LEVEL

46

YAAA AAA1 0010 1110

yes

no

STORE THE DTR AS FADE TIME

47

YAAA AAA1 0010 1111

yes

no

STORE THE DTR AS FADE RATE

48 - 63

YAAA AAA1 0011 XXXX

 

 

RESERVED

64 - 79

YAAA AAA1 0100 XXXX

yes

no

STORE THE DTR AS SCENE

80 - 95

YAAA AAA1 0101 XXXX

yes

no

REMOVE FROM SCENE

96 - 111

YAAA AAA1 0110 XXXX

yes

no

ADD TO GROUP

112 -127

YAAA AAA1 0111 XXXX

yes

no

REMOVE FROM GROUP

128

YAAA AAA1 1000 0000

yes

no

STORE DTR AS SHORT ADDRESS

129 -143

YAAA AAA1 1000 XXXX

 

 

STORE DTR AS SHORT ADDRESS

144

YAAA AAA1 1001 0000

no

yes

QUERY STATUS

145

YAAA AAA1 1001 0001

no

yes

QUERY BALLAST

146

YAAA AAA1 1001 0010

no

yes

QUERY LAMP FAILURE

147

YAAA AAA1 1001 0011

no

yes

QUERY LAMP POWER ON

148

YAAA AAA1 1001 0100

no

yes

QUERY LIMIT ERROR

149

YAAA AAA1 1001 0101

no

yes

QUERY RESET STATE

150

YAAA AAA1 1001 0110

no

yes

QUERY MISSING SHORT ADDRESS

151

YAAA AAA1 1001 0111

no

yes

QUERY VERSION NUMBER

152

YAAA AAA1 1001 1000

no

yes

QUERY CONTENT DT


28 сентябрь 2018 Python


#!/usr/bin/env python
# $ID$ #
import sys
import subprocess


try:

    IIDD = "$I"+"D: {}  $".format(
        subprocess.check_output(['git', 'log', '-1', '--format=%ae / %an / %cd']).decode("utf-8")[:-1]
    )

    if IIDD:
        for line in sys.stdin:
            sys.stdout.write( line.replace("$I"+"D$", IIDD ) )

except:
    pass

А вот настройки git для работы с этим скриптом

файл .git/config


[filter "idder"]
    smudge = python iidd.py
    clean = perl -pe \"s/\\\\\\$ID[^\\\\\\$]*\\\\\\$/\\\\\\$ID\\\\\\$/\"

файл .gitattributes


*.js filter=idder
*.py filter=idder
*.css filter=idder
*.html filter=idder


28 сентябрь 2018 20 апрель 2021 Nginx


Не все знают зачем к имени сайта добавляют префикс www., по мимо субъективных причин, про world wide web и удобство парсинга урлов есть совершенно объективная причина использовать алиас WWW.

Всё дело в структуре протокола DNS, когда происходит преобразование доменного имени обычного домена первого уровня, то происходит запрос к корневому серверу зоны, а корневые сервера зон обновляются достаточно редко, например в зоне .RU обновление происходит 4 раза в день, а при преобразовании домена третьего уровня, про выполняется запрос к DNS серверу контролирующему домен, а он обновляется быстрее чем корневые сервера зоны.

Таким образом, если у вас отключили сервер сайта, и вы меняете IP адрес парковки домена на IP адрес резервного, то вашим клиентам придётся ждать обновления корневого DNS, а если меняется IP адрес у алиаса WWW.yourdomain то обновление произойдёт гораздо быстрее, в некоторых случаях сразу


28 июнь 2018 29 сентябрь 2018 Linux


Есть таблица dispatch_dispatch_form в дублирующимися строками

чтобы быстро почистить таблицу от дублей необходимо:

delete from dispatch_dispatch_form  a using dispatch_dispatch_form b WHERE a.id < b.id AND a.email = b.email ;

вот так всё просто