• Насколько (не)безопасны беспроводные клавиатуры?

    CityCat4
    @CityCat4 Куратор тега Информационная безопасность
    Внимание! Изменился адрес почты!
    Любой вопрос, касающийся ИБ начинается с модели нарушителя, что собственно и сделал alexalexes . Любая подобная атака эффективна на расстоянии вытянутой руки (да, производители обещают десятки метров, но зачастую клава после года-двух эксплуатации "не видит" приемник стоящий от нее на полметра).

    Если вы ищете себе устройство домой - не морочьте голову. Эфир в стандартном доме настолько зашумлен, что Вы отошли на метр - и атака потеряла свою эффективность - ну а на расстоянии метра от компьютера вопрос безопасности стоит уже немного по-другому :)

    "...- Не совсем, молодой человек, не совсем... Пэвээс - пистолет
    специального назначения. Его пуля теряет убойную силу на расстоянии
    вытянутой руки. Если вы выстрелите в кого-то, кто находится в метре от
    вас, эффект будет, как от горошины. Из него надо бить только в упор. Но
    если вы не самоубийца и собираетесь поразить кого-то другого. То гораздо
    надежнее и удобнее воспользоваться кинжалом или этой шпагой...."
    Александр Шалимов. Приобщение к большинству
    (жуткий киберпанк советских времен)

    Если же все-таки на работе - то Вы либо оборудуете себе кабинет попросторнее (можно с клеткой Фарадея чтобы уж по полной параноить) либо, если такой возможности нет - миритесь с указанной возможностью :)

    Но IMHO Вы морочите себе голову. Вы не Киркоров, не глава разведки, не президент Газпрома, чтобы становиться целью таких специализированных атак :)
    Ответ написан
    3 комментария
  • Насколько (не)безопасны беспроводные клавиатуры?

    msHack
    @msHack
    Есть приборы Устройства защиты от ПЭМИН
    https://nppgamma.ru/catalog/ustroystva_zashchity_o...

    На Ютубе были перехваты нажатия с клавы с помощью SDR Приемника работает в пределах комнаты
    Ответ написан
    1 комментарий
  • Насколько (не)безопасны беспроводные клавиатуры?

    GavriKos
    @GavriKos
    Все то же самое можно делать и с проводной клавиатурой. Методов очень много. И я не шучу.
    Ответ написан
    3 комментария
  • Как визуализировать магнитное поле?

    @pvvv
    2d: femm.info
    3d: radia, но там что-то сайт старой версии для математики помер, на гитхабе вроде была более свежая версия с привязкой к питону.
    прямоугольные параллелипипеды и дуги с равномерно распределённым током считает аналитически.
    но вот строить сложную геометрию по кусочкам удовольствие то ещё.
    65b904f7c8adc398443742.png
    65b904fdf331c771219016.png
    Ответ написан
    Комментировать
  • Как визуализировать магнитное поле?

    @rPman
    Попробуй phet interactive simulation, судя по видеодемонстрациям это очень простая и в то же время функциональная система для обучения, как я понял магнитные поля там есть для постоянных токов в проводниках (собирай из сегментов свою конфигурацию)

    Для переменных токов нужны очень и очень сложные и дорогие пакеты.
    Ответ написан
    5 комментариев
  • Локальная дата и время?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    const dateTimeFormatter = new Intl.DateTimeFormat(
      'sv-SE',
      {
        dateStyle: 'short',
        timeStyle: 'medium',
      },
    );
    console.log(dateTimeFormatter.format(new Date()));
    // "2024-01-29 09:11:47" 
    console.log(dateTimeFormatter.resolvedOptions().timeZone);
    // "Europe/Moscow"
    Ответ написан
    2 комментария
  • Есть ли возможность перенаправить человека в telegram с заготовленным сообщением?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Такой возможности нет. Можно передать текст в аргумент команды start бота. Больше информации в официальной документации https://core.telegram.org/api/links

    Возможно, более разумным является веб-логин через Телеграм на самом сайте или, например, использование Web App в самом Телеграме. Но это надо существенно пересматривать всё взаимодействие с пользователем.
    Ответ написан
    Комментировать
  • Как разместить N файлов по папкам?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Это задача об упаковке. Она сложная. И ближе даже не к задаче о рюкзаке, а к задаче о мульти-рюкзаке. Для больших размеров файлов и N решения, кроме переборного, нет.

    Если N маленькое, то есть быстрые алгоритмы вроде Динамического Программирования. Но там и перебор будет не то, чтобы сильно медленнее.

    Если вам не важно получить абсолютно минимально возможное количество папок, то подойдет какое-нибудь жадное решение. Оно даст хорошее приближение. Скажем, вместо 30 идеальных папок вы часто получите 40.

    Например, кладите файлы в текущую папку, пока они туда помещаются. Потом создавайте следующую папку. Заполняйте ее, пока размер папки + размер следующего файла <= 2Mb.

    Можно всякие эвристики сюда навешивать: например, отсортиовали файлы по размеру. Жадно пихаем самые большие файлы, пока помещается. Потом жадно пихаем самые маленькие. Потом начинаем новую папку.
    Ответ написан
    Комментировать
  • Как с помощью reduce и рекурсии получить уровни вложенности для всех вложенных объектов?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Функции добавить параметр - глубину вложенности.

    Проверяем, чем является значение, если не объект, то возвращаем как есть. Иначе собираем новый объект, в который записываем текущую глубину вложенности и свойства исходного объекта, обработав их значения функцией - делаем рекурсивный вызов с глубиной вложенности, увеличенной на единицу:

    const addDepth = (val, depth = 0) =>
      val instanceof Object
        ? Object.entries(val).reduce((acc, n) => (
            acc[n[0]] = addDepth(n[1], depth + 1),
            acc
          ), { depth })
        : val;
    Ответ написан
    Комментировать
  • Почему консоль выводит это значение?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    Вы пытаетесь в качестве имени свойства использовать объект, а JS разрешает там только строки.
    Объект приводится к строке и ваш код превращается в итоге вот в это:
    dwayne['[object Object]'] = 123;
    dwayne['[object Object]'] = 456;
    
    console.log(dwayne['[object Object]']);

    Думаю, тут уже понятно, почему результат именно такой.

    При этом, если бы вы использовали другой синтаксис, то и результат был бы другим:
    dwayne.daniel = 123; // аналог dwayne['daniel']
    dwayne.jason = 456; // аналог dwayne['jason']
    
    console.log(dwayne.daniel);

    Но эти daniel и jason никак не связаны с одноимёнными объектами выше.
    Ответ написан
    1 комментарий
  • Как можно переводить минут/секунд/часы в число если получаю не в формате числа?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const getSeconds = str =>
      [
        [ 'час', 60 * 60 ],
        [ 'минут', 60 ],
        [ 'секунд', 1 ],
      ].reduce((acc, n) => {
        return acc + (str.match(RegExp(`\\d+(?=\\s+${n[0]})`)) ?? 0) * n[1];
      }, 0);
    
    
    getSeconds('2 часа 22 секунды') // 7222
    getSeconds('99 минут') // 5940
    getSeconds('1 час 1 минута 1 секунда') // 3661
    getSeconds('666 секунд') // 666
    Ответ написан
    2 комментария
  • Как сделать подобную анимацию?

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    Никакой Three.js тут не нужен. Ну то есть, конечно, никто не мешает сделать все это на WebGL и прикрутить здоровенный фреймворк сверху, но все же это будет слегка избыточным решением в большинстве случаев. Такое можно аргументировать только если весь сайт изначально так и делается на WebGL и это просто "один из" эффектов, которые туда нужно интегрировать.

    В 99% остальных случаев подобные штуки делаются одной svg-картинкой, одним path, который рисуется в зависимости от положения мышки и размеров контейнера. Немного школьной геометрии, ограничение диапазона возможных смещений всего этого - и дальше можно до посинения играть с алгоритмом расчета смещения, до тех пор, пока реакция на мышку не начнет нравится. Там уже нет универсального рецепта, все от дизайна зависит. Можно линейно привязать к положению мыши. Это обычно выглядит скучно. Можно использовать какую-то функцию от расстояния до центра, чтобы сделать движения менее равномерными. В каких-то случаях делают полноценный эффект инерции, как верно подмечено в соседнем ответе. Там получаются более естественные движения (обычно все это является развитием гравитационных моделей). Есть совсем замороченный подход, когда используется моделирование системы пружин (для общего развития можно загуглить силовые алгоритмы визуализации графов). Там можно получить целый ряд занятных эффектов, которые часто оказываются в тему как раз в таких фонах, где какие-то штуки связаны между собой прямыми линиями. Ну и можно просто вдохновиться какими-то физическими явлениями и сделать что-то "по мотивам".

    Ответ написан
    22 комментария
  • Существует ли способ получить список классов, которые используют тот или иной аттрибут?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Includ'ите все файлы, содержащие ваши классы, получаете список имён всех классов (get_declared_classes), для каждого делаете рефлексию (new ReflectionClass), и проверяете список атрибутов (getAttributes).
    Ответ написан
    Комментировать
  • Как удалять теги из массива, которые уже не используются?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Зайдите с другой стороны - вместо удаления того, чего больше нет, получите то, что есть, и замените массив:

    tags = Array.from(new Set(data.flatMap(n => n.tags)));

    Если массив по какой-то причине заменять нельзя, тогда удалите все элементы из существующего и запишите новые:

    tags.splice(0, tags.length, ...new Set(data.flatMap(n => n.tags)));
    Ответ написан
    Комментировать
  • Может ли повториться хэш сумма?

    Vindicar
    @Vindicar
    RTFM!
    Да, это называется коллизия.
    Идея хэш суммы в том, что она с пренебрежимо малой вероятностью повторится для похожих (sic!) входных строк.
    Т.е. Если у тебя есть exe-шник и ты вычислил его хэш сумму - ты можешь подобрать другой файл с такой же хэш суммой. Но будет исчезающе малый шанс, что это тоже будет рабочий exe шник или вообще что-то распознаваемое, а не просто набор бинарного мусора.

    Следует различать коллизии первого рода (у двух разных файлов сошлась хэшсумма) и коллизии второго рода (злоумышленик подобрал другой файл под заданную хэшсумму).
    Ответ написан
    Комментировать
  • Почему нельзя клонировать события?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    Ну потому что не берёт: The structured clone algorithm > Supported types

    Cloning DOM nodes likewise throws a DataCloneError exception.
    Как минимум нельзя клонировать DOM, а в Event есть на него ссылки.
    Ответ написан
    1 комментарий
  • В чём деловая польза нейросетей?

    vpetrov
    @vpetrov
    частный SEO-специалист, textarget.ru
    Странный вопрос.
    Нейросеть способна обработать такой объём данных, который никакой человек обработать физически не в состоянии. Если вам нужны найти скрытые связи, из монолита вычленить скульптуру, вообще работать с данными - тут нейросеть незаменима.
    То, о чём вы говорите - это крайне попсовое и глупое применение мощнейшего инструмента. И этот инструмент в доступе уже лет примерно 20. Просто кожаным показали самые примитивные возможности - и этого хватило, чтобы массы забились в оргазме и ужасе.
    Ответ написан
    Комментировать
  • Есть ли статьи, которые приводят наглядные примеры того, как код на rust превосходит код на других языках?

    vabka
    @vabka
    Токсичный шарпист

    Особенно там, где был использован язык Си или С++

    (если исключить memory safety и fearless concurrency)
    1. Хороших плюсовиков найти всё сложнее, ибо молодые разработчики часто хотят что-то более современное/простое/приятное.
    2. Переход с какого-нибудь более высокоуровнего языка на Rust гораздо легче, чем на C++
    3. DX у Rust на порядо лучше.
    4. Код на Rust на порядок более выразительный, чем код на Си

    За счёт этого поддержка кодовой базы на Rust заметно дешевле выходит

    Например вот что Тинькофф пишет:

    Наш Процессинговый Центр занимается разработкой финансовых систем, критичных к даунтайму и времени обработки. Изначально мы делали все свои продукты либо на чистом Си, либо на плюсах (C++14), однако пару лет назад мы переписали большой кусок нашего бэкенда на Rust, и нам настолько понравилось, что теперь все наши новые процессинговые сервисы пишутся на нём.



    Мне бы хотелось видеть какое-то сравнение, что вот так стало сильно лучше и безопаснее, а вот было так написано изначально на оригинальном языке

    Это можно будет определить только если ведётся статистика по багам и они классифицируются по причинам возникновения, но такую статистику ведут не все.
    В среднем статистика показывает, что багов связанных с неправильной работой с памятью в проектах на Rust на порядки меньше, чем в проектах на C++.


    ну тут все-равно unsafe

    В проектах на Rust он явный и от него можно избавиться, завернув в безопасную обёртку, которая будет гарантировать корректную работу с памятью и ffi.
    В проектах на C++ у тебя по факту всё является unsafe.

    ну, нам еще нужен подсчет ссылок

    В плюсах тоже активно пользуются подсчётом ссылок и всякими умными указателями, если по коду не очевидно, когда можно будет освободить память
    Ответ написан
    6 комментариев
  • Зачем перед str ставить +?

    axifive
    @axifive
    Software Engineer
    Чтобы преобразовать строку в число

    +"76" == Number("76")
    Ответ написан
    3 комментария
  • Как с помощью input открыть нужный элемент массива?

    MrDecoy
    @MrDecoy Куратор тега JavaScript
    Верставший фронтендер
    1. Код стоит оформлять соответствующим образом - с помощью тэга <code> который доступен в редакторе с помощью кнопки </>.
    2. Нужно иметь знания обработки событий. Например обработка клика по кнопке.
    3. Знания вывода на экран (Вы не указываете как именно должно выводиться, поэтому в элементарном примере это alert)
    4. Знания работы с полями ввода и поиском элементов в dom. То есть нужно будет найти инпут в DOM дереве и считать его свойство value.
    5. Знания по работе с массивами. А именно .filter - для отсеивания не соответствующих элементов.
    6. Ну и скорее всего метод .includes тоже пригодится для проверки вхождения введённого текста в genre элементов массива.
    7. Ну и само собой понимание что такое объект и как считывать его свойства.

    итого на псевдокоде:
    по нажатию на кнопку --> взять значение из инпута --> прогнать исходный массив через фильтр по значению инпута и свойству genre --> вывести результат на экран
    Ответ написан
    Комментировать