float power(float X, int N) {
if (N == 0) {
return 1;
}
if (N < 0) {
return 1. / power(X, -N);
}
if (N % 2 == 0) {
float b = power(X, N / 2);
return b * b;
}
return X * power(X, N - 1);
}
Кажется, что вся эта конструкция держится на том, что тот единственный корневой (?) сертификат, которым подписаны все остальные, есть только у удостоверяющего центра.Именно. Система держится на доверии к УЦ.
почему все так боятся, что кто-то установит в их систему левый корневой сертификат?Потому что это позволит злоумышленнику сгенерировать свои сертификаты на произвольные имена, подписанные корневым сертификатом, которому доверяет ваша система и, при возможности перенаправления трафика, отправить вас на свой сайт или просматривать ваш https-трафик, который вы считаете зашифрованным.
И сразу второй вопрос: почему какой-нибудь Fiddler, который устанавливает в систему свой корневой сертификат вообще работает?Без установки своего корневого сертификата Fiddler не сможет перехватывать https-трафик. Тот, кто ставит себе Fiddler, должен понимать, что в системе возникает уязвимость.
const modalWindow = () => {
if (e.target.classList.contains('button_openModal')) {
document.getElementById(e.target.dataset.open)?.classList.add('modal_show');
return;
}
if (e.target.classList.contains('button_closeModal')
|| e.target.closest('.modal_show') === null) {
document.querySelector('.modal_show')?.classList.remove('modal_show');
}
};
user_id соответсвует количеству зарегистрированных клиентов и написал следующий кодНеудачное решение. Нет никаких гарантий, что id будут идти строго последовательно.
WITH RECURSIVE `dates` (`date`) AS (
SELECT '2021-06-01'
UNION
SELECT `date` + INTERVAL 1 DAY
FROM `dates`
WHERE `date` < '2021-06-30'
)
SELECT `d`.`date`, MAX(`c`.`count`) OVER `win` AS `registered`
FROM `dates` AS `d`
LEFT JOIN (
SELECT DISTINCT `date`, COUNT(*) OVER `win` AS `count`
FROM `registers`
WINDOW `win` AS (ORDER BY `date`)
) AS `c` ON `c`.`date` = `d`.`date`
WINDOW `win` AS (ORDER BY `d`.`date`)
document.addEventListener(
'click',
(e) => {
const target = e.target.closest('.media-category__item');
if (!target) {
return;
}
document.querySelector('.media-category__item.active')?.classList.remove('active');
target.classList.add('active');
document.querySelector('.media-tab.active')?.classList.remove('active');
document.querySelector(`.media-tab[data-tab="${target.dataset.category}"]`)?.classList.add('active');
},
);
$t = unserialize('a:2:{i:0;s:15:"_identity-admin";i:1;s:14:"[3,null,21600]";}');
var_dump($t);
// array(2) {
// [0] => string(15) "_identity-admin"
// [1] => string(14) "[3,null,21600]"
// }
<page-following>
<page-header
title="Following"
:buttons="buttons"
@buttonPressed="onButtonPressed"
/>
<!-- здесь контент -->
<page-footer />
</page-following>
const parseDate = (date) => Date.parse(date.split('/').reverse().join('-'));
const findClosest = (list, date = (new Date()).toLocaleDateString('en-GB')) => {
const findDate = parseDate(date);
return list.reduce(
(acc, cur) => {
const delta = parseDate(cur.date) - findDate;
return (delta >= 0 && delta < acc.delta) ? { delta, el: cur } : acc;
},
{ delta: Number.MAX_SAFE_INTEGER, el: null },
).el;
};