Задать вопрос
  • Используете ли вы static не inline, и для чего?

    @ReggieMan
    А чем inline переменные в хедере с C++17 хуже? Я просто пишу static int x = 5; прямо в классе, и все работает без отдельных cpp-файлов. Зачем усложнять
    Ответ написан
    Комментировать
  • Как заблокировать входящие по подстроке идентификатора?

    opium
    @opium
    Просто люблю качественно работать
    CallScreeningService работает не так просто как кажется: в onScreenCall() приходит урезанный Call.Details, только номер (handle) и служебные поля, getCallerDisplayName() там пустой.

    Название организации, которое рисует гугловский dialer, это его собственный Business Caller ID, не CNAM, и публичного API к нему нет — так что фильтровать офлайн по подстроке названия не выйдет.

    Рабочий вариант: свой CallScreeningService, номер из callDetails.getHandle(), сверка со своей локальной базой номер→категория, по совпадению "bank" в имени зовёшь respondToCall с setDisallowCall(true).
    Ответ написан
    2 комментария
  • Используете ли вы static не inline, и для чего?

    opium
    @opium
    Просто люблю качественно работать
    Похожий трюк масштабируется шире ресурсов: объявил static-поле в хедере без определения — если нужный .cpp не подключён к сборке, линковщик даст undefined reference. Так можно enforce'ить обязательную линковку конкретной единицы трансляции: регистрация плагина, feature-флаг, конфиг под сборку — забыл модуль, поймаешь на линковке, а не в рантайме.

    Плюс: меняется только инициализатор — правишь .cpp, а не хедер, остальные TU не пересобираются каскадом. До C++17, пока не было инлайн-переменных, это вообще был единственный вариант.
    Ответ написан
    Комментировать
  • Что означают буквы в скобках в разных частях браузера?

    VoidVolker
    @VoidVolker Куратор тега Windows
    Dark side eye. А у нас печеньки! А у вас?
    Хоткеи же. Это так-то всегда было нормой в ОС и в десктопных приложениях сразу в названии пункта меню или кнопки указывать хоткей для использовании данного элемента интерфейса.
    На уровне ОС настраивается тут:
    • Панель управления -> Специальные возможности -> Клавиатура -> Изменить действия для сочетания клавиш -> Подчёркивать клавиши доступа, когда они доступны

    Но это работает только с системными элементами. А многие современные приложения не используют системные элементы интерфейса и в таких приложения это всё зависит только от них самих.
    Ответ написан
    Комментировать
  • Доступен ли сейчас built-in VPN в Firefox for Android?

    opium
    @opium
    Просто люблю качественно работать
    На Android его тоже раскатывают, но не через about:config: смотри Настройки → VPN (в самом низу списка), там же логин в Mozilla Account. Флаги browser.ipProtection.* только включают видимость кнопки, в сам rollout по стране и когорте они не пускают. Россия пока не в списке (там США, UK, Германия, Франция, Канада и ещё почти три десятка стран) — так что пункта может просто не быть, хоть на Nightly 155, хоть на любой другой сборке.
    Ответ написан
    2 комментария
  • Схема в Telegram: "медсестра", звонок на номер и "авторизация пройдена", затем просят СНИЛС. Как это работает?

    CityCat4
    @CityCat4 Куратор тега Информационная безопасность
    Жил да был черный кот за углом...
    Работает довольно просто, весь расчет на психологию.

    1. "Медсестра" - начальный заход, нужен только для того, чтобы был звонок на указанный номер. Вместо "медсестры" может быть "электрик", "сантехник", "оператор домофонов" - кто угодно, тут неважно, главное, чтобы человек повелся и позвонил.
    2. Звонок по указанному номеру. Никакой авторизации там конечно нет, там стоит тупой бот, который запрограммирован произнести эту фразу. Почему именно так - чтобы человек напугался, подумал что взломали и начал дергаться.
    3. Обратный звонок (может не быть). Говорят, что плохо слышно, спрашивают СНИЛС - по СНИЛС можно на ГУ зайти - если сказать СНИЛС наверняка последует дальнейший развод про взлом ГУ, ааааа, спасайте деньги на безопасный счет!
    4. Так как фаза "обратный звонок" не прошла - с "якобы ГУ" позвонили самостоятельно и начали пугать - опять же в расчете, что чел испугается и начнет дергаться и тут опять конечно же ааааа, спасайте деньги!

    Ничего нового, кроме начального захода.
    Ответ написан
  • Как удалить элемент из LocalStorage?

    @7rows
    Frontend Разработчик / Vue / JS / TS / CSS
    Привет, смотри, есть несколько причин
    1- внутри renderTable() ты каждый раз добавляешь новый обработчик события на tbody, что приводит к дублированию. Лучше добавить его один раз вне этой функции.
    2-
    const isWatched = document.querySelector('#isWatched').cahecked;
    -
    тут у тебя кажется тоже ошибка
    3- чтобы удалить нужный фильм, нужно знать, какой именно элемент массива удалять. Удобно добавить каждому фильму уникальный id - если есть, если нет, то добавь randomUUId / Date
    Ну и далее, у тебя при удалении будет
    films = films.filter(film => film.id !== filmId);
            localStorage.setItem('films', JSON.stringify(films));

    4-
    edit: 'Редактировать',
            delete: 'Удалить'

    не имеет смысла хранить, это элементы интерфейса, но никак не данных

    Примерно такой код, он не идеален, но должен работать

    const form = document.querySelector('#film-form');
    const tbody = document.querySelector('#film-tbody');
    
    function getFilms() {
        return JSON.parse(localStorage.getItem('films')) || [];
    }
    
    function setFilms(films) {
        localStorage.setItem('films', JSON.stringify(films));
    }
    
    function renderTable() {
        const films = getFilms();
        tbody.innerHTML = '';
        films.forEach(film => {
            const row = document.createElement('tr');
            row.dataset.id = film.id;
            row.innerHTML = `
                <td>${film.title}</td>
                <td>${film.genre}</td>
                <td>${film.releaseYear}</td>
                <td>${film.isWatched ? "Да" : "Нет"}</td>
                <td>
                    <button class="edit">Редактировать</button>
                    <button class="delete">Удалить</button>
                </td>
            `;
            tbody.appendChild(row);
        });
    }
    
    function addFilmToLocalStorage(film) {
        const films = getFilms();
        film.id = Date.now();
        films.push(film);
        setFilms(films);
        renderTable();
    }
    
    function handleFormSubmit(e) {
        e.preventDefault();
        const title = document.querySelector('#title').value;
        const genre = document.querySelector('#genre').value;
        const releaseYear = document.querySelector('#releaseYear').value;
        const isWatched = document.querySelector('#isWatched').checked;
        addFilmToLocalStorage({ title, genre, releaseYear, isWatched });
        form.reset();
    }
    
    tbody.addEventListener('click', e => {
        const target = e.target;
        if (target.classList.contains('delete')) {
            const row = target.closest('tr');
            const id = Number(row.dataset.id);
            let films = getFilms();
            films = films.filter(f => f.id !== id);
            setFilms(films);
            renderTable();
        }
    });
    
    form.addEventListener('submit', handleFormSubmit);
    renderTable();


    Ну и лучше, в таких случаях кидать ссылку на пример
    Ответ написан
    1 комментарий
  • Концепт проверки совместимости с шаблонным конструктором?

    opium
    @opium
    Просто люблю качественно работать
    Вывод шаблонного параметра квалификационных преобразований не делает, а is_same_v требует точного тождества. Глянь, что реально выводится: в Output(const Args&...) для L"Test" получается Args = wchar_t[5], без const — его съедает const в самом параметре. Дальше convertible_to берёт declval<Args>(), массив распадается в wchar_t*, тоже без const, и конструктор выводит T = wchar_t*. is_same_v<wchar_t*, const wchar_t*> даёт false, конструктора нет, концепт не прошёл; gcc так и пишет: [with Args = {wchar_t [5]}]. С нешаблонным Argument(const wchar_t*) работало потому, что там это доводит перегрузка. Вторая ветка вдобавок мёртвая: у параметра по значению вывод срезает ссылку и верхний const. Нужен перечень типов — сравнивай decay_t<T>, а не remove_cvref_t: тот массив не распадает.
    Ответ написан
    Комментировать
  • Большая пауза перед скачиванием из браузера - это смерть SSD?

    opium
    @opium
    Просто люблю качественно работать
    SSD вряд ли виноват — с других осей тот же диск летает сразу. About:blank сам по себе не доказывает SmartScreen, так иногда просто открывает вкладку сайт-источник. Тест простой: качни тот же файл другим браузером на винде, потом на минуту выруби Defender SmartScreen (Edge → Конфиденциальность и безопасность → защита от вредоносных сайтов и загрузок) и попробуй снова, не забудь включить обратно. Если пауза пропадёт, дело в проверке репутации файла, не в SSD. А 28% на Intel 660 всё равно повод сделать бэкап.
    Ответ написан
    Комментировать
  • Стоит ли оставлять Windows 7 на i5-12400F и RTX 3050, если система завелась через модифицированный .inf (драйвер 474.11)?

    VoidVolker
    @VoidVolker Куратор тега Железо
    Dark side eye. А у нас печеньки! А у вас?
    Главная проблема семёрки сегодня — это отказ поддержки семёрки со стороны производителей ПО/игр и невозможности использовать это ПО/игры в семёрке.
    Ответ написан
    4 комментария
  • Какой метод биометрической аутентификации лучше для СКУД в офисе с высокой проходимостью: лицо, отпечаток или карта?

    @Drno
    физика всегда надёжнее всего.
    руки могут быть мокрыми \ грядными
    лицо может быть небритым итд..(пока я норм сработку толька на айфонах видел)

    мой личный выбор - физ носитель, там где это возможно
    Ответ написан
    1 комментарий
  • Возможно ли сделать скрин действующего окна через Alt + PrtSc на С++?

    opium
    @opium
    Просто люблю качественно работать
    PrintWindow() с флагом PW_RENDERFULLCONTENT, доступен с Win8.1. Ровно то что Alt+PrtSc делает под капотом — DWM рисует DirectX-слой без хуков в видеопамять:
    PrintWindow(hWnd, hdc, PW_RENDERFULLCONTENT);
    p.s. и rect.right+8 в CreateCompatibleBitmap у тебя не ширина, а координата, размер будет кривой.
    Ответ написан
    1 комментарий
  • Утечка кейвордов в Телеграм при посещении постороннего сайта?

    SysAnalyst_Serge
    @SysAnalyst_Serge
    Не женат, сис аналитик
    Возможно, утечка идёт не через JS, а через HTTP-реферер. Проверьте, не передаёт ли ваш браузер адрес текущей страницы при запросе картинок или шрифтов с yastatic.net. Также убедитесь, что сторонние куки не блокируются полностью.
    Ответ написан
    1 комментарий
  • Куда смотреть для диагностики проблемы?

    opium
    @opium
    Просто люблю качественно работать
    Похоже на power management адаптера. Диспетчер устройств → Wi-Fi адаптер → Управление электропитанием → снять галку «разрешить отключение устройства для экономии энергии», попробуй сначала это.

    Если не поможет: после сна запусти ping 8.8.8.8. Пингуется, а сайты нет? DNS слетает. Не пингуется вообще? DHCP или драйвер.
    Ответ написан
    Комментировать
  • Как ограничить жор ОЗУ со стороны раздела "изменено"(диспетчер задач)?

    master_z
    @master_z
    Программист
    Установите Process Explorer.

    Включите колонки: Private Bytes, Working Set, WS Private.

    Отсортируйте процессы по WS Private и определите основных потребителей ОЗУ.

    При необходимости сравните значения Working Set и Private Bytes для дополнительного анализа использования памяти.

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

    Нередко подобные проверки позволяют устранить проблему быстрее, чем поиск процесса-потребителя памяти.

    Если потребуется помощь с анализом результатов — пишите в личку.
    Ответ написан
    Комментировать
  • Почему бинарник скомпилированный через CMake весит больше, чем напрямую скомпилированный через clang++?

    opium
    @opium
    Просто люблю качественно работать
    скорее всего CMake компилирует с другими флагами: без явного CMAKE_BUILD_TYPE оптимизация не включается (-O2/-Os не ставятся). Сравни реальные команды через cmake --build build --verbose и посмотри, чем они отличаются от build.sh. Фиксится: cmake -B build -S . -DCMAKE_BUILD_TYPE=Release, для минимального размера — MinSizeRel.
    Ответ написан
    3 комментария
  • Утечка кейвордов в Телеграм при посещении постороннего сайта?

    vpetrov
    @vpetrov
    частный SEO-специалист
    Невозможно на 100% сохранить приватность. Суперкуки, логи выдачи, футпринты, обмен данными между рекламными сетями и т.п. в любом случае позволяют хотя бы приближённо сформировать пользовательский профиль, посчитать его вероятные интересы и определить в какую-то группу.
    Единственный вариант - антидетект-браузеры, максимально затрудняющие отслеживание. Но этот вариант сильно на любителя игр с анонимностью в сети.
    Ответ написан
    4 комментария
  • Утечка кейвордов в Телеграм при посещении постороннего сайта?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Обычная персонализация рекламы. Вы набирали запросы или посещали сайты с аналогичной тематикой, телега могла выкупить "аудиторные сегменты" у того, через кого собиралась статистика (например у яши или гугла), дальше самостоятельно персонализировать рекламу под вас в телеге.
    Ответ написан
    3 комментария
  • Как лучше тегировать элементы в Markdown'е?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    В стандарте markdown нет тегов. Так что всё определяется тем софтом и/или плагинами, которые вы используете.
    Ответ написан
    Комментировать
  • Как лучше тегировать элементы в Markdown'е?

    opium
    @opium
    Просто люблю качественно работать
    у меня тоже схожая история с заметками — [FF] с [x] не конфликтует. GFM task-маркер требует ровно один символ внутри скобок: пробел или x/X. Несколько символов = просто текст, не разметка. Для максималки с фильтрацией: Obsidian нативно понимает #FF как inline-тег.
    Ответ написан
    2 комментария