screen
, уже не боясь оставить/отключиться, вместо scp
, может, удобнее воспользоваться rsync
— он зипует, что может ускорить передачу:rsync -avz /var/www/projectOldName user@newserver.example.com://var/www/projectNewName
Ctrl + A
, D
— чтобы покинуть работающий вирт. терминал и спокойно отключиться от SSH. Позже, когда снова зайдете, командой screen -r
снова подключитесь к оставленной сессии. ^
- это операция XOR. XOR вернёт единицу в том случае, если один из операндов (битов) 1 а другой 0. Таким образом, к примеру, 3 ^ 5
вернет 6 потому, что 0b011 ^ 0b101
(для простоты, биты будем считать слева направо):0 ^ 1 = 1
.1 ^ 0 = 1
.1 ^ 1 = 0
.0b110 = 6
.undefined ^ N
или 0 ^ N
, что вернёт нам само число. const getDuplicatesIndex = (arr, key = n => n) =>
Object.fromEntries(Object
.entries(arr.reduce((acc, n, i) => ((acc[key(n)] ??= []).push(i), acc), {}))
.filter(n => n[1].length > 1)
);
Map
:const getDuplicatesIndex = (arr, key = n => n) =>
new Map(Array
.from(arr.reduce((acc, n, i) => {
const k = key(n);
acc.set(k, acc.get(k) ?? []).get(k).push(i);
return acc;
}, new Map))
.filter(n => ~-n[1].length)
);
dd
выводит отчёт не в stdout, а в stderr. Так что нужно сначала перенаправить stderr в stdout, а потом передавать его в tee
:# башизм
dd if=/dev/zero of=/tmp/zerofile bs=100M count=5 |& tee ku.log &
# должно работать везде
dd if=/dev/zero of=/tmp/zerofile bs=100M count=5 2>&1 | tee ku.log &
Несмотря на долгий срок работы в проекте, нахожу новые интересные задачи, которые не позволяют заскучать.
function test() {
const a = [1];
return a[0] += 3; // что вы вернет?
}
a
?// с запятой
array.reduce((a,b,i)=>function(){
const sum = a[i%2] + b; // вычисление
a[i%2] = sum; // присваивание
return a; // возврат массива
}, [0,0]);
// без запятой
array.reduce((a,b,i)=>function(){
const sum = a[i%2] + b; // вычисление
a[i%2] = sum; // присваивание
return sum; // возврат результат суммирования
// и на следующей итерации будет ошибка из-за попытки обратиться к числу как к массиву.
}, [0,0]);
React.KeyboardEvent
- это синтетическое событие, которое генерируется в React. KeyboardEvent
- это оригинальное событие, которое генерируется в браузере.KeyboardEvent
лежит в event.nativeEvent
у React.KeyboardEvent
.const closeByESC = (event: KeyboardEvent | React.KeyboardEvent) => {
document.addEventListener('keydown', closeByESC);
{ сумма: счётчик }
, сколько раз каждая сумма встретилась на всём диапазоне 000..999
(для n = 6
, т.е. половина = 3)function getLuckyTicketsCount(n) {
const sums = {};
for (let i = 0; i < Math.pow(10, n >> 1); i++) {
// посчитать сумму цифр
let sum = 0, d = i;
while (d > 0) {
sum += d % 10; // прибавили младшую цифру
d = Math.floor(d / 10); // сдвинули число вправо на 1 цифру
}
// и в словарь прибавить 1 для этой суммы
sums[sum] = (sums[sum] || 0) + 1;
}
return Object.values(sums) // счетчики суммм
.map((n) => n * n) // квадраты
.reduce((acc, c) => acc + c); // сложить все
}
:hover
для "stuck" состояния элемента с position: sticky
. Ведь его явно не хватает почти любому кто использовал этот стиль. Однако его не будет, о причинах (логичных, но далеко неочевидных) можно почитать в соответствующем issue.