четыре 6-битовых дают три 8-битных:
00000011 11112222 22333333
(()=>{
// из четырёх чисел 0..63 получить строку цвета типа "#abcdef"
const makeColor = (n1, n2, n3, n4) => {
const r = (n1 & 63) << 2 | (n2 & 48) >> 4;
const g = (n2 & 15) << 4 | (n3 & 60) >> 2;
const b = (n3 & 3) << 6 | n4 & 63;
return '#' + [r,g,b].map(n => n.toString(16).padStart(2,'0')).join('');
}
// из массива чисел от 0 до 63, длиной кратной 4, получить массив цветов
const arrToColor = arr => {
const len = arr.length;
if (len % 4) throw "Длина массива не кратна 4";
const result = [];
for (let i=0; i<len; i+=4)
result.push(makeColor(...arr.slice(i, i+4)));
return result;
}
// тест
const test = () => arrToColor(
[...new Array(64)].map(()=>Math.floor(64 * Math.random()))
);
return test();
})()
/*
#941510,#4b31ca,#eec8c9,#4c9202,
#336a01,#95b7ec,#e73d44,#4069e6,
#4d1700,#8efa27,#8e0333,#f089af,
#67b561,#fc8fc8,#48503c,#f308a9
*/
fps=1/16
берет 1 кадр из 16 секунд.fps
, чтобы получилось 80 кадров: fps=80/длина_видео_в_секундах
thumbnail
– он выбирает наиболее значимый кадр и серии кадров. Работает чуть медленнее и требует больше памяти, но выбранные кадры получаются лучше - без размытого движения и т.п. Тут тоже нужно знать длину видео и частоту кадров, т.е. общее число кадров в видео. И разделить его на 80. Например, видео длиной 15 минут с частотой кадров 30 даёт 30 * 15 * 60 = 27000 кадров. Разделить на 80 получится 337.5 кадров. Т.е. нужно бы использовать вместо fps=..
фильтр thumbnail=338
x = a * cos(t)
y = b * sin(t)
0 ≤ t ≤ 2π
где a, b − полуоси эллипса, t − параметр.
t
: (sin^2 + cos^2) = 1
a
как функцию b
при известных (x, y).a = f(b)
<section>
<article>
<a href="#">1 ссылка</a>
</article>
</section>
const el = document.querySelector('a'); // находит первый подходящий элемент
const text = el.innerText;
const digitText = text.substring(0,1); // тут будет текст единичка
const digitNumber = +digitText; // тут уже число 1
span
так же:const el = document.querySelector('span'); // найдет самый первый элемент span в документе
<span>не нужный</span>
<div id="theone">
<span>300 спартанцев</span>
</div>
const span = div.querySelector('#theone span');
function insertFirst(id) {
const li = document.createElement('li'); // создали новый листайтем
li.innerText = "меня тут не стояло";
const parent = document.getElementById(id); // это ul
const first = parent.firstChild; // это первый li до вставки
parent.insertBefore(li, first); // впихнули новый li перед бывшим первым
}
function camelize(str) { // на вход приходит строка
return str // вот тут пока ещё строка
.split('-') // здесь из этой строки сделали массив, разбив её по символу дефиса
// ниже пошёл массив ["lol", "kek", "cheburek"]
.map((word, index) => index == 0 ? word : word[0].toUpperCase() + word.slice(1)) // что-то сделали с каждым элементом массива
.join(''); // соединяет ['my', 'Long', 'Word'] в 'myLongWord'
}
map()
– он просто применит функцию в нём к каждому элементу массива. На выходе получится новый массив..map((word, index) => index == 0 ? word : word[0].toUpperCase() + word.slice(1)) //**
// то же самое, что:
.map(
function(word, index) {
return index == 0 ? word : word[0].toUpperCase() + word.slice(1);
}
)
// то же самое, что:
.map(
function(word, index) {
if (index == 0) {
return word;
} else {
return word[0].toUpperCase() + word.slice(1);
}
}
)
.map()
вызывает функцию, которая в нём аргументом, для каждого элемента массива и передёт в неё следующие три параметра:array_slice()
. Что будет, если передать его в array_slice()
по ссылке – уменьшится использование памяти?mass[i][0]
Другим способом (введённым в ECMAScript 5) является рассмотрение строки как массивоподобного объекта, в котором символы имеют соответствующие числовые индексы:return 'кот'[1]; // вернёт "о"
При доступе к символам посредством нотации с квадратными скобками, попытка удалить символ, или присвоить значение числовому свойству закончится неудачей, поскольку эти свойства являются незаписываемыми и ненастраиваемыми. Смотрите документацию по методу Object.defineProperty() для дополнительной информации.
const titleCase = str => str
.toLowerCase()
.split(' ')
.map(word => {
const chararr = word.split('');
chararr[0] = chararr[0].toUpperCase();
return chararr.join('');
})
.join(' ');
titleCase("I'm a little pea"); // I'm A Little Pea
titleCase("I love the sky and the trees"); // I Love The Sky And The Trees
/home/user/privacy_policy
лежат два файла index.html
и policy.html
location /privacy-policy {
alias /home/user/privacy_policy;
index index.html;
try_files $uri index.html =404;
}
## вернут содержание index.html:
https://site.ru/privacy-policy
https://site.ru/privacy-policy/
https://site.ru/privacy-policy/index.html
https://site.ru/privacy-policy/trololo.zip
## вернёт содержание policy.html:
https://site.ru/privacy-policy/policy.html