(123.4567).toExponential() // "1.234567e+2"
[1, 10)
, после запятой и степень.[1, 234567, 2]
>=
, <=
const fuzzy = {
split: n => {
const parts = n.toExponential().split('e')
.map((p, i) => i ? parseInt(p) : p.split('.').map(x => parseInt(x)));
if (parts[0].length < 2) parts[0].push(0);
return [parts[0][0], parts[0][1], parts[1]];
},
eq: (a, b) => {
a = fuzzy.split(a);
b = fuzzy.split(b);
if (a[2] !== b[2]) return false;
const diff = Math.abs(a[1] - b[1]);
if (diff === 0) return Math.abs(a[0] - b[0]) <= 1;
if (a[0][0] !== b[0][0]) return false;
return (diff <= 1);
}
}
fuzzy.eq( 12.1234, 12.1233) // true
const tests = [
[1, 1, true],
[111, 112, true],
[0.001, .002, true],
[0.001, .0025, false],
[0.001, .003, false],
[12.345, 1.2345, false],
[123.88, 123.870, true],
[-1.11111111, 1.11111110, false],
[-1.11111111, -1.11111112, true],
[2.000000001, 2, true],
[4.9999999998, 4.9999999999, true],
[7.9, 8.02, false],
[7.99, 7.98, true],
[7.99, 7.99, true],
[7.99, 8.00, true], // НЕ ПРОХОДИТ! Надо этот случай предусмотреть, но я ушёл спать.
];
let allok = true;
tests.forEach(test => {
if (fuzzy.eq(...test) !== test[2]) {
console.log("FAIL:", test);
allok = false;
} else {
console.log("OK:", test);
}
});
console.log(allok ? 'All OK!' : "Some tests FAILED");
const getById = id => data.filter(s => s.structureId === id)[0] || false;
const getChild = me => data.filter(s => s.parentId === me.structureId)[0] || false;
const getMyParent = me => getById(me.parentId);
const getParentsChain = me => {
const chain = [];
let parent = getMyParent(me);
while(parent) {
chain.unshift(parent);
parent = getMyParent(parent);
}
return chain;
}
const getChildrenChain = me => {
const chain = [];
let child = getChild(me);
while(child) {
chain.push(child);
child = getChild(child);
}
return chain;
}
// test
const me = getById(3);
console.log([...getParentsChain(me), me, ...getChildrenChain(me)]); /*
0: Object { name: "Дирекция юкрк", parentId: null, structureId: 1 }
1: Object { name: "Южно-Курильск", parentId: 1, structureId: 2 }
2: Object { name: "Служба главного инженера", parentId: 2, structureId: 3 }
3: Object { name: "Мехцех", parentId: 3, structureId: 4 } */
ffmpeg -ss 16:27.600 -i movie.mp4 -t 5:55 audio.wav
ffmpeg -hide_banner -i movie.mkv
-map
:ffmpeg -ss 16:27.600 -i movie.mp4 -map 2:a -t 5:55 audio.wav
[avi @ 000000000043f780] non-interleaved AVI
означает, что в AVI файле отдельно записано всё видео одним куском, потом отдельным сплошным куском всё аудио. А задумаывалось, чтобы они часто чередовались, и плеер считав в буфер кусок, мог проиграть видео и соответствующее ему аудио сразу.ffmpeg -i 01.avi -c:v libx264 -c:a aac 01_youtube.mp4
.nextSibling
вернёт Node типа TEXT_NODE
(3). document.getElementById('aa').nextSibling.textContent // "222"
data
- в наследство от CharacterData;e.delegateTarget
по идее содержит элемент, на котором висит слушатель.function getUniqueNum(offset = 0) {
const now = new Date();
noise.seed(0xCEED);
let num = 0;
let hours = now.getHours() + offset;
while(hours-- >= 0) num += Math.round((1 + noise.perlin2(hours / (24 + offset), now.getDate() / 32)) * 100);
return num;
}
function test(a, b, funcName) {
let c = a+b;
if (typeof this[funcName] === "function") this[funcName]();
else throw `No such function ${funcName}`;
return c;
}
function multiplication() {
console.log("multiplication!");
}
test(2, 3, 'multiplication'); // выведет multiplication!
test(6, 4, 'division'); // выкинет ошибку, бо нет такой функции
if
, который, is evil, использовать proxy_cache_bypass
:location = /page/index.php {
proxy_pass http://backend;
proxy_cache nginx;
proxy_cache_key $scheme$proxy_host$uri;
proxy_ignore_headers Cache-Control Expires Set-Cookie;
proxy_cache_valid 10m;
proxy_cache_methods GET;
# перечислить каждый из возможных параметров:
proxy_cache_bypass $arg_a$arg_b$arg_c;
}
http://11.12.13.14
, http://11.12.13.14:81
http://11.12.13.14?site=one
, http://11.12.13.14?site=two
http://11.12.13.14/#one
, http://11.12.13.14/#two
(|x| + x) / 2
(|x| - x) / 2
z > 0
, вторая для z < 0
. Параметр z
тут только переключает части и более никак не участвует в результате. Если идея понятна, сможете модицифировать как вам удобнее.f(x,z) = ((|z| + z) / 2) * |x| + (|z| - z) / 2) * x
ffmpeg \
-i "c:/ffmpeg/videos/video_1.avi" \
-t 10 \
-c:v copy \
-c:a copy \
"c:/ffmpeg/videos2/video_1.avi"
"5" > "499999"
// замените
var bal = $.trim($('#bal').val());
// на
var bal = +$.trim($('#bal').val());
cl
– сделать из текста число.cl
окажется свежий результат выполнения ajax-запроса?var cl1 = $.ajax({
url: "ajaxs.php",
data: "x=test",
type: "POST",
success: function (data) {
window.test1 = data;
}
});
var cl = test1;
ffmpeg \
-i input.mp4 \
-lavfi '[0:v] scale=ih*16/9:-1, boxblur=luma_radius=min(h\,w)/20:luma_power=1:chroma_radius=min(cw\,ch)/20:chroma_power=1[bg]; [bg][0:v]overlay=(W-w)/2:(H-h)/2, crop=h=iw*9/16' \
-vb 800K \
output.webm