Задать вопрос
  • Как правильно задать тип события мыши?

    bingo347
    @bingo347 Куратор тега TypeScript
    Crazy on performance...
    React.MouseEvent - это события реакта, их нельзя передавать в addEventListener, только в ноды реакта.
    Event - это наиболее обобщенный тип события.
    Вам нужен тип MouseEvent, в нём будет соответствующее свойство.
    Ну и сам element должен иметь тип HTMLElement или производные по идее.
    Ответ написан
    2 комментария
  • Как собрать свой Linux дистрибутив с grub?

    bingo347
    @bingo347
    Crazy on performance...
    Ну вот ещё туториал:
    https://habr.com/ru/articles/709528/

    А вообще адекватный туториал вот:
    https://linuxfromscratch.ru/

    А если честно, чем не угодили alpine, arch, artix, gentoo?

    получается на выходе файл .img
    Со слепком root-fs получившейся ОС? Тогда достаточно флешки форматированной в fat32, заливаете этот образ туда и делаете туда же grub-install с монтированием этого образа.
    Ответ написан
  • Чем записать возможности программы, чтобы показать на собеседовании?

    bingo347
    @bingo347
    Crazy on performance...
    - записать экран с программой
    OBS Studio
    - нанести надписи - тут такой компонент, тут делал то
    Kdenlive или DaVinci Resolve
    Ответ написан
    Комментировать
  • Как проверять линтом только измененные файлы при pre-push?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Что-то вроде такого:
    git ls-tree --name-only -r origin/HEAD | egrep '\.(js|ts)$' | xargs npx eslint
    Ответ написан
    Комментировать
  • Как реализовать взятие текста из файла JSON, в Rust?

    bingo347
    @bingo347
    Crazy on performance...
    У Вас относительный путь, относительные пути зависят от контекста запуска, то есть считаются они относительно той папки из которой производится запуск.
    То есть данная программа будет искать разные файлы в зависимости от того из какой папки Вы её запустите.
    Ответ написан
  • Как передать параметр из события?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    rMyEvent.initCustomEvent( 'appTabsGroupOpen', false, false, { rElem: 'DDDDD' });
    то что посылается последним аргументом, это и есть event.detail

    Ну а правильнее конечно делать так:
    new CustomEvent("appTabsGroupOpen", {
      detail: {
        rElem: 'DDDDD',
      },
    });
    Ответ написан
    2 комментария
  • В чем причина ошибки IndentationError: unexpected unindent?

    bingo347
    @bingo347
    Crazy on performance...
    // вот тут косяк:
        @bot.message.handler(content_types=['text'])
    def bot_massage(massage):
    декоратор находится на уровне предыдущей функции, а функция, которую он декорирует на верхнем уровне
    Ответ написан
    Комментировать
  • Как сделать правильный shared проект?

    bingo347
    @bingo347 Куратор тега Node.js
    Crazy on performance...
    Вариант 1: монорепа
    Подойдёт если все 3 проекта будут в одном репозетории.
    Доп пакеты (вроде lerna) уже не нужны, используйте npm/yarn workspace
    https://docs.npmjs.com/cli/v10/using-npm/workspaces

    Вариант 2: установка из git
    Подойдёт если каждый проект в своём репо
    https://docs.npmjs.com/cli/v10/commands/npm-install
    Ответ написан
    Комментировать
  • Есть ли реальный профит от использования актуальных фронтенд-технологий?

    bingo347
    @bingo347
    Crazy on performance...
    Да используйте что хотите, кто Вам запретит то?
    Только не удивляйтесь, если однажды наступит бас-фактор и Ваш разработчик за 50 тыс уволится, уйдёт на пенсию или ещё чего хуже... А нового найти на это легаси будет проблема, мало кто будет готов, а те кто готов запросто могут запросить з/п 500к+.
    Я бы может согласился, но просил бы лям... Хотя скорее всего нет, нервы дороже бабла...
    Ответ написан
  • Как сделать чтобы терминал в VS Code был таким же как у этого челика?

    bingo347
    @bingo347
    Crazy on performance...
    Судя по всему это один из клонов oh-my-zsh, например oh-my-powershell или что-то в этом роде
    Ответ написан
  • Как написать такой тип для typescript?

    bingo347
    @bingo347 Куратор тега TypeScript
    Crazy on performance...
    const transformObject = <const K0 extends string, const K1 extends string>(obj: Record<K0, Record<K1, string>>) => {
      let result: Partial<Record<K1, Partial<Record<K0, string>>>> = {};
    
      for (const key of Object.keys(obj) as K0[]) {
        for (const lang of Object.keys(obj[key]) as K1[]) {
          (result[lang] ??= {} as Partial<Record<K0, string>>)[key] = obj[key][lang];
        }
      }
    
      return result;
    };
    Ответ написан
    Комментировать
  • Простыми словами, чем отличаются UTC or GMT?

    bingo347
    @bingo347
    Crazy on performance...
    UTC - Universal Time Coordinated, универсальное координированное время.
    Стандарт регулирования времени с точностью до секунд или дробных частей секунд. Эталоном являются атомные часы. На основе UTC формируется время в разных часовых поясах.

    GMT - Greenwich Mean Time, среднее время по Гринвичу.
    По сути является усредненным за некоторый промежуток времени измерением времени по солнцу в определенной точке земли, а именно в обсерватории Гринвича, что недалеко от Лондона.

    От какого времени принято отталкиваться в программировании
    Делают и так и так, но лучше от UTC ибо стандарт и формально более точный, например учитывает високосные секунды именно в те дни, когда они были добавлены.
    Ответ написан
    Комментировать
  • Как открывать много TCP соединений и поддерживать их?

    bingo347
    @bingo347
    Crazy on performance...
    Как уже написали в соседнем ответе, лимит портов 65535 на 1 интерфейс.
    Но это на один интерфейс, самое простое решение тут воткнуть несколько сетевых карт, да у них будут разные ip (по сути у одной машины будет пул ip), но для 100к коннектов хватит 2 карточек.
    В Linux (насчет других ОС не уверен, но возможно тоже) есть способы поизвращаться и поднять 2+ виртуальных интерфейса на одной сетевой карте. При этом у машины так же будет 2 ip адреса и нужно будет распределять соединения между ними.

    Хотя по хорошему я бы посмотрел здесь в сторону UDP с одним занятым портом на машине, а необходимые возможности TCP уже воспроизводить программно.
    Ответ написан
    5 комментариев
  • Как правильно расположить config.toml?

    bingo347
    @bingo347
    Crazy on performance...
    Cargo считывает все конфигурационные файлы начиная с папки проекта (там где файл Cargo.lock и папка target) и во всех его родительских папках, а так же в домашней папке cargo.
    https://doc.rust-lang.org/cargo/reference/config.h...
    То есть в данном примере будут работать оба этих файла.

    Я бы проверял в сторону работает ли это условие:
    cfg(all(windows, target_env="msvc"))
    Ответ написан
    1 комментарий
  • Как правильно мержить в main из dev, если там есть незаконченные фичи?

    bingo347
    @bingo347
    Crazy on performance...
    Фича ветки делаем только от актуального main.
    Для проверки мержим фича-ветку в dev, но не удаляем.
    Когда одна или несколько фичей проверены и готовы, то делаем от main релизную ветку и мержим туда все готовые фичи, прогоняем тесты и если всё ок, то мержим релизную вету в main.
    Ну и полезно мержить main в фича ветки, когда main обновился.
    Ответ написан
    Комментировать
  • Зачем нужен блок инструкций без управляющей инструкции?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Любой блок создает лексическую область видимости (переменные объявленные с помощью let и const видны только в пределах своего блока).

    Очень похоже, что такой код уже обработан какими либо инструментами.
    Допустим в исходном коде было что-то вроде:
    var currentExtraStackFrame = null;
    function setExtraStackFrame(stack) {
      if (process.env.NODE_ENV === 'production') {
        currentExtraStackFrame = stack;
      }
    }
    В процессе сборки process.env.NODE_ENV было заменено на 'production', а так как 'production' === 'production' - это всегда истинное условие, то от if можно избавиться, оставив только его тело, вот только от блока при этом инструменты не избавляются, так как можно сломать видимость переменных.
    Ответ написан
    Комментировать
  • Сталкивался кто-нибудь, как переделать из querySelector в querySelectorall?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Нужно слайдеры в цикле обрабатывать. Выше уже предложили одно из решений, но в нём есть нюанс - создание функций в цикле достаточно дорого по ресурсам (мы же заботимся о наших пользователях?), благо есть альтернатива, в качестве слушателя события может быть не только функция, но и объект с методом handleEvent:
    class PrevClickListener {
        constructor(track, next) {
            this.track = track;
            this.next = next;
        }
    
        handleEvent() {
            const {track, next} = this;
            next.removeAttribute('disabled');
            track.scrollTo({
                left: track.scrollLeft - track.firstElementChild.offsetWidth,
                behavior: 'smooth',
            });
        }
    }
    
    class NextClickListener {
        constructor(track, prev) {
            this.track = track;
            this.prev = prev;
        }
    
        handleEvent() {
            const {track, prev} = this;
            prev.removeAttribute('disabled');
            track.scrollTo({
                left: track.scrollLeft + track.firstElementChild.offsetWidth,
                behavior: 'smooth',
            });
        }
    }
    
    class TrackScrollListener {
        constructor(track, prev, next) {
            this.track = track;
            this.prev = prev;
            this.next = next;
        }
    
        handleEvent() {
            const {track, next, prev} = this;
            const trackScrollWidth = track.scrollWidth;
            const trackOuterWidth = track.clientWidth;
    
            prev.removeAttribute('disabled');
            next.removeAttribute('disabled');
    
            if (track.scrollLeft <= 0) {
                prev.setAttribute('disabled', '');
            }
    
            if (track.scrollLeft === trackScrollWidth - trackOuterWidth) {
                next.setAttribute('disabled', '');
            }
        }
    }
    
    const sliders = document.querySelectorAll('[data-slider]');
    for (const slider of sliders) {
        const track = slider.querySelector('[data-slider-track]');
        const prev = slider.querySelector('[data-slider-prev]');
        const next = slider.querySelector('[data-slider-next]');
        if (!track || !prev || !next) continue;
    
        prev.addEventListener('click', new PrevClickListener(track, next));
        next.addEventListener('click', new NextClickListener(track, prev));
        track.addEventListener('scroll', new TrackScrollListener(track, prev, next));
    }
    Ответ написан
    Комментировать
  • Взгляд опытных программмистов, что улучшить и исправить?

    bingo347
    @bingo347
    Crazy on performance...
    1. Много дублирующегося кода в функции check_field.
    Можно вынести в константу массив массивов с выигрышными позициями и проверять в цикле.
    При этом позиций проверяется 7, хотя их должно быть 8.

    2. Проверку на ничью в той же check_field, можно делать ранний выход из цикла если найдена первая пустая клетка.

    3. Вынести в enum результат функции check_field, сейчас там магические числа возвращаются.

    4. Ввод имен игроков в функции game_with_people.
    Буффер на 10 байт на стеке легко переполнить и будет UB.

    5. В функции main опять повторяющийся код на вывод меню.

    6. Нет проверки на некорректный ввод в scanf.

    7. В game_with_people проверки на результат check_field можно сделать через switch case.

    8. Если игрок введет некорректную клетку, то ход уйдёт другому игроку.

    9. Можно перетереть уже занятую клетку.
    Ответ написан
    3 комментария
  • Как импортировать функцию под другим именем?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    https://developer.mozilla.org/ru/docs/Web/JavaScri...
    import { export as alias } from "module-name";
    Ответ написан
    Комментировать