Задать вопрос
  • Как сделать оптимальную перестановку элементов массива с XORом индексов?

    bingo347
    @bingo347
    Crazy on performance...
    Так как все индексы мы xor'им с одним и тем же числом cryptor то повторы между i и i ^ cryptor будут заключены в равных отрезках, притом размер этого отрезка всегда будет ближайшей от cryptor степенью 2 сверху, а сами повторы будут распределены в разных половинах данных отрезков, длина половинок соответственно ближайшая от cryptor степенью 2 снизу.
    Ну и нужно не забывать, что есть крайний случай, когда cryptor равен 0, при котором перестановок вообще не будет
    uint8_t main_buffer[512];
    uint8_t cryptor;
    
    cryptor = readCryptor();
    
    if(cryptor != 0)
    {
        // вычислим ближайшую к cryptor степень 2 снизу
        uint8_t pow2 = 0x80;
        while((pow2 & cryptor) == 0) pow2 >>= 1;
    
        while(readNext512Bytes(main_buffer))
        {
            // один большой цикл заменим на 2 маленьких
            // k будет считать отрезки
            // i будет считать позицию внутри отрезка
            for(uint16_t k = 0; k < 512; k += pow2 << 1) for(uint8_t i = 0; i < pow2; i++)
            {
                uint8_t tmp;
                tmp = main_buffer[i + k];
                main_buffer[i + k] = main_buffer[(i + k) ^ cryptor];
                main_buffer[(i + k) ^ cryptor] = tmp;
            }
        }
    }
    Ответ написан
    1 комментарий
  • Какой оптимальный JS фреймворк для мобильного SPA?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Svelte

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

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

    плагин хватало на стандартные функционалы
    Начать поиск отсюда можно
    Ответ написан
    8 комментариев
  • Xubuntu или Lubuntu?

    bingo347
    @bingo347
    Crazy on performance...
    Что лучше?
    Ну как по мне Arch + Cinnamon вне конкуренции, а из любой убунты выпиливать дофига всего дольше чем арч собрать. Но это по мне. А что конкретно Вам зайдет можете сказать только Вы.

    В чём отличие?xubuntu или Lubuntu

    Как уже сказали, оба основаны на ubuntu server и отличаются лишь предустановленным софтом и десктопом
    Ответ написан
    Комментировать
  • Как дождаться конца выполнения цикла?

    bingo347
    @bingo347 Куратор тега Node.js
    Crazy on performance...
    .then(lefts => {
        return Promise.all(
            lefts.map(left => models.db.l_d.findOne({where: {id: left.l_d.id}})
                .then(ld => ld.getMains())
            )
        ).then(mains => mains.flatMap((main, i) => main.map(m => ({
            data: data.name,
            dataId: data.Id,
            left: lefts[i].name,
            leftId: lefts[i].id,
            main: m.name,
            mainId: m.id,
            linkId: m.ld_m.id
        }))));
    }).then(
        result => console.log(result),
        err => console.log(err)
    )
    Советую получше изучить промисы
    Ну и давать нормальные имена переменным не лишнее
    Ответ написан
    Комментировать
  • Типизация push функции. Почему не выходит?

    bingo347
    @bingo347 Куратор тега TypeScript
    Crazy on performance...
    Не умеет TS работать со спред оператором не в конце массива, пока с этим можно только смириться.
    Ну и с рекурсивными типами стоит поаккуратнее быть, они вполне могут тайпчекер повесить, так как типизация TS тьюринг полная, точнее это лямбда исчисления в чистом виде, что, впрочем, с точки зрения вычислимости, одно и то же.
    Ответ написан
  • Нужна логика цикла чтобы перебрать все строки в таблице?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    var pos = 0;
    $(this).closest('#rrr').find('th:last input, td:last input').each(function() {
      pos += +$(this).val();
    });
    Обратите внимание, что я поправил ошибку в селекторе
    Ответ написан
    Комментировать
  • Как проверить ошибки в вводимом тексте?

    bingo347
    @bingo347
    Crazy on performance...
    Нужен словарь, представленный в виде дерева, где в узлах буквы, а любое слово - это проход от корня до листа. Тогда задача обнаружения ошибки сводится к проверке достижимости листа из корня при заданном наборе букв (слове), а предлагаемые подсказки выводятся из ближайших соседей
    Ответ написан
    Комментировать
  • Как вывести результат js скрипта в том же месте где он вставлен на странице?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    https://developer.mozilla.org/ru/docs/Web/API/Docu...
    обратите внимание на Notes
    Ответ написан
    Комментировать
  • Как задать переменные в области видимости для нового экземпляра класса?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    не изобретать граблей, а сделать по простому:
    // A.js
    class A {
      constructor(some_var) {
        this.some_var = some_var;
      }
    
      do() {
        console.log(this.some_var);
      }
    }
    module.exports = A;
    
    // index.js
    const A = require('./A');
    function print_it(param) {
      const a = new A(param);
      a.do();
    }
    print_it('wow'); // В консоли должно вывестись: wow
    print_it('123'); // В консоли должно вывестись: 123


    P.S. snake_case не принят в js, рекомендуется использовать camelCase

    UPD:
    Вам придется хакнуть модульную систему ноды. Почитать можно в офф доке:
    https://nodejs.org/dist/latest-v14.x/docs/api/modu...
    https://nodejs.org/dist/latest-v14.x/docs/api/vm.html
    Ответ написан
    4 комментария
  • Как все настроить на VDS для запросов к вебсокетам на node js?

    bingo347
    @bingo347 Куратор тега Node.js
    Crazy on performance...
    По нормальному нода не должна торчать наружу, Вы ведь остальное апи проксируете через nginx наверняка? Можно просто сделать для определенного локейшена прокси на порт где он поднят, что-то вроде такого:
    location /ws {
      proxy_pass http://localhost:3000;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "Upgrade";
    }


    Как запустить процесс сервера и сделать так, что бы можно было закрыть консоль и он автоматически перезапускался при падении и запускался при перезагрузке VDS
    pm2
    Ответ написан
    Комментировать
  • Какие задачи решают на Rust, а какие на Golang?

    bingo347
    @bingo347
    Crazy on performance...
    Какие задачи решают на Rust
    любые. Rust - язык общего назначения, применимый к большинству возможных задач. Rust достаточно высокоуровневый для написания на нем прикладного ПО и компилируется в достаточно эффективный машинный код, для применения в ядрах ОС, драйверах или embedded разработке. Так же Rust на сегодня имеет самый маленький размер при компиляции в wasm, что критично для использования в web. Я честно не знаю такой сферы, к которой бы не подошел Rust.
    Единственной проблемой в применимости Rust я вижу недостаточную его распиаренность в РФ, что часто бывает самым важным критерием для "манагеров" и прочих людей принимающих решения о используемом стеке.
    а какие на Golang
    Golang тоже язык общего назначения, но имеющий ряд ограничений:
    - Крайне тяжелый рантайм не дает возможность использовать его в wasm, embedded или компонентах ядра.
    - Необходимость в сборке мусора опять таки ограничивает разработку для embedded или компонентов ядра.
    - Отказ от llvm в качестве бэкенда компилятора ограничивает число целевых платформ.
    Можно один заменить другим?
    Rust спокойно заменяет Golang в любой возможной на последнем задаче, наоборот же иногда имеем ряд ограничений.

    Вместо P.S.:
    Golang скорее всего окажется более быстрым для прототипирования и быстрого старта. Однако отсутствие полиморфизма в любом виде (утиная типизация не в счет) и ограниченность одной парадигмой структурного программирования делает этот язык крайне дорогим в поддержке. Так же этому (и быстрому прототипированию и дорогой поддержке кода) способствует лютая ненависть создателей языка к принципу DRY.
    Rust имеет такую редкую сегодня строгую типизацию, одним из нюансов которой являются концепции владения и заимствования (которые позволяют делать автоматическое управление памятью в compile time), что порождает с одной стороны высокий порог входа в технологию (что сглаживается человекопонятным выводом компилятора, если входящие умеют читать, что еще более редко встречается сегодня, чем строгая типизация), но так же удешевляет поддержку продукта длительное время. Так же надо понимать, что Rust не спасет от кривых рученок быдлокодеров (разве что они не смогут его освоить), так как при большом желании можно сделать и утечки памяти и дедлоки и гонки данных (хотя в Golang это все сделать на порядок проще).
    Ну и надо не забывать, что много где присутствует hype-driven-development и Golang распиарен, а Rust нет.
    Ответ написан
    3 комментария
  • Как передать аргумент, который передается в функцию в обработчик событий addeventlistener?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Восполняем недостающие знания тут:
    https://developer.mozilla.org/ru/docs/Web/JavaScri...
    https://developer.mozilla.org/ru/docs/Web/API/Even...
    и вопрос отпадет сам собой...

    Ну и еще:
    https://developer.mozilla.org/ru/docs/Web/JavaScri...
    https://developer.mozilla.org/en-US/docs/Web/API/N...
    понимаем, что это под капотом цикл:trigger.forEach(btn => {понимаем, что на каждой итерации этого цикла мы создаем по функции тут:(total) => {и ужасаемся, сколько процессорного времени и памяти мы сожрали в пустую
    Ответ написан
  • Как ускорить выполнение JavaScript в браузере? Как распаралелить JavaScript?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Однозначно нужно выносить эту работу в WebWorker'ы
    Вот тут можно почитать: https://developer.mozilla.org/ru/docs/DOM/Using_we...

    Ну и еще в плане ускорения, так ли нужно парсить текст регулярками? Регулярки очень медленные. И на больших объемах текста естественно это становится заметно. Разбор текста узконаправленным алгоритмом, сделанным под конкретный формат данных будет в разы быстрее, если правильно его сделать.
    Ответ написан
    4 комментария
  • Как открыть текущую страницу в новой вкладке, а в старой другую?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Можно как-то так:
    const link = document.querySelector('a.some-link'); // подставьте свой селектор
    link.addEventListener('click', event => {
      event.preventDefault();
      window.open(location.href);
      location.assign(link.href);
    });
    Но это неожиданное для пользователя поведение. И состояние страницы в новой вкладке будет как при загрузке.
    Ответ написан
    3 комментария
  • Как сделать инпут, который может принимать телефон или email?

    bingo347
    @bingo347
    Crazy on performance...
    Ответ написан
    Комментировать
  • Порядок изучения frontend?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    frontend.png
    от себя бы добавил, что вместо bem лучше использовать css-modules;
    в качестве первого фреймворка я бы брал последний ангуляр, а не реакт, так как и хорошим практикам научитесь и ценник свой поднимите, ну и кроме основной тройки я бы рекомендовал попробовать svelte, хотя бы что бы просто знать, что можно писать меньше и проще
    Ответ написан
  • Какое регулярное выражение использовать для валидации числа по нижеуказанным требованиям?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Какое регулярное выражение использовать для валидации числа по нижеуказанным требованиям?
    Никакое, ибо не зачем.

    Валидация делается по событиям keyup и paste
    Почему бы не городить костыли и просто не использовать событие input?

    input с type="number" уже отсеет невалидные символы, хотя валидное число будет далеко не обязательно
    Ответ написан
    4 комментария
  • Как распознать ссылку в строке?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Единственный 100% работающий способ проверить, а ссылка ли в строке - это попробовать ее распарсить как ссылку:
    function isURL(str) {
      try {
        new URL(str);
        return true;
      } catch {
        return false;
      }
    }
    
    console.log(isURL('http://')); // false
    console.log(isURL('http://site.ru')); // true

    И не слушайте тех кто предлагает Вам регулярки. Регулярки это очень дорого как по вычислительным ресурсам, так и по поддержке кода. Люди пользуются регулярками только в 2х случаях:
    1. у них нет времени сделать нормально, но потом они намерены это переделать
    2. они макаки не способные сделать нормально
    Ответ написан
    1 комментарий
  • Как производиться валидация захешированного пароля?

    bingo347
    @bingo347 Куратор тега Node.js
    Crazy on performance...
    Если вводить один и тот же пароль несколько раз- хеш всегда будет разный
    нет. Вся суть хэш функций, что при всей своей необратимости они всегда выдают детерминированный результат, то есть простым языком на одни и те же входные параметры выдаются одни и те же выходные.
    То есть один и тот же пароль всегда даст один и тот же хэш.

    Конкретно с bcrypt - это хэш с солью. То есть у него не 1 входной параметр (пароль), а 2 - пароль и соль. При создании нового хэша генерируется новая соль (в идеале крипто рандомом). Поэтому и меняется хэш. Это усложняет взлом, так как без соли я бы просто мог иметь заранее рассчитанный словарик хэшей для частых паролей, а с солью мне придется делать полный перебор, даже если у пользователя банальный qwerty пароль.

    Для валидации соль хранится в базе вместе с хэшем, мы просто не генерируем новую соль, а хэшируем с сохраненной.
    Ответ написан
    1 комментарий