Информация
- В рейтинге
- 1 858-й
- Откуда
- Россия
- Зарегистрирован
- Активность
Специализация
Десктоп разработчик, Разработчик приложений
HTML
CSS
JavaScript
Windows API
C++
UI/UX дизайн
Разработка интерфейсов
Дизайн продукта
Adobe Photoshop
Проектирование интерфейсов
Autoruns хорош разве что как TODO-list на удаление. И вообще, для диагностики. Но не для управления: вы всё отчекните, а потом кто-то чекнет всё назад, например, при обновлении. Наверное, те самые гномики, которых в Майкрософте заставляют считать на собеседованиях. На должность маркетологов и менеджеров по злодейству.
Мой рецепт: файлы надо вычистить, забрать ownership на папку и явно запретить к ней доступ всем, кроме себя, чтобы при обновлении восстановить не получилось. Так надо сделать с Edge, WinStore и всеми остальными из их братии. Но, наверно, умнее поступить как @MrBotikkk — поставить сразу корпоративную LTSC. Лично я просто хотел посмотреть на 11-ую глазами среднего юзера, а когда насмотрелся до тошноты, переставлять стало лень.
P.S. Если кто-то хочет сказать мне, что я ламер и ещё пожалею о кощунственном вмешательстве в священные винды своими кривыми руками (такое периодически пишут), то да, я ламер и пожалею. Всенепременнейше. Помолитесь о моей заблудшей душе.
Тут ситуация следующая. Если вы хотите видеть и управлять всеми процессами, вам нужны админские права. Единственный способ запустить приложение с админскими правами при логине — создать задачу в скежулере с повышенными привилегиями и повесить её на событие входа. Но из-за бага в Explorer’е при этом происходит race condition, и запросы на создание иконок в трее не выполняются с вероятностью, зависящей от скорости компьютера. Имейте в виду, если будете писать приложение, создающее иконки в трее, которому нужны повышенные права и которое запускается при логине.
Не знаю, связан ли запуск за «секунды 3» с попыткой закостылить этот баг, это надо у Руссиныча спрашивать. Что касается меня, лично я поставил задержку задаче запуска PE целых 30 секунд. И только после этого ни разу не было так, что PE запустился, а иконок в трее нет. Даже с учётом того, что у меня запускается при логине до черта всего. И всё с админскими правами. Спасибо за это Майкрософту, который отключает глобальные клавиатурные хуки у приложений, когда в фокусе окно с более высоким Integrity. Даже AIMP приходится запускать с админскими правами. Тоже через задачу, и тоже с задержкой, но уже 35 секунд (5 секунд отдано PE).
И даже если PE 3 секунды тратит на что-то своё, не связанное с этим багом, на фоне задержки в полминуты я этого всё равно не вижу. А окно из трея он открывает мгновенно.
Ключ в реестре для поддержки uBlock Origin и других расширений MV2: https://download.mozilla.org/?product=firefox-stub&os=win&lang=en-US
Долго искал, как настроить фон колонок, и не нашёл. Функционала много, но оформлен неудобно.
Типичный опенсорс. Решил, что остаюсь пока на PE.PE не тормозит, а на исходники мне наплевать. Но по функционалу он действительно понавороченнее. Например, сходу мне показал, когда я в трей вынес иконку физического расхода памяти, кто главные проглоты.
Спасибо за рекомендацию.
Это надо говорить не мне, а коллеге, который перевёл тему на поделки. Если качество кода — самостоятельное понятие и не зависит от того, где код использован, в домашней поделке или огромном проекте, зачем тогда было упоминать домашние поделки? Понятно, что это было сделано, чтобы унасекомить. Так я тоже так умею 8-P
Если возразить по сути, без личных нападок, типа, что будет при несовпадении
"IsFolder"иentry.is_folder, так я и отвечу по сути. Какая разница, где я это использовал. Хотя, конечно, приятно вспомнить, что этот код не сломался у (без малого) миллиона моих юзеров. Во многом благодаря тому, что я фанатично уничтожаю копипасту.Так в этом же суть.
Когда я задал вопрос про стрингизацию в C++23, то ждал, пока кто-нибудь спросит, а зачем мне вообще маппинг имён 1:1. Ответ (на незаданный вопрос): во-первых, в C++ очень строгие требования к идентификаторам. Я это знаю, потому что пытался их обойти, соорудив новый синтаксис лямбд из символа
→(сделать из простой клавиатуры типографическую в любом случае полезно). Такой выразительности позавидовали бы и C#, и JS. Но не вышло, не фартануло. Как оказалось, C++ хорошо знает, где буква, а где нет. Вот так можно:А вот так — нельзя:
Во-вторых, при маппинге обеспечивается уникальность пары «категория + настройка». Иначе код просто не скомпилируется. В чистом итоге, чего мы добились, гарантировав (пришлось это сделать макросами, хотя я бы предпочёл рефлексию) маппинг 1:1? Добились мы того, что компилятор проверяет валидность имён (нет спецсимволов, которые могут озадачить сериализатор и парсер) и проверяет непротиворечивость формата файла. Что может быть прекраснее, чем нагрузить компилятор ещё одной проверкой, да ещё и данных?
Подумать, какое это отношение имеет к
item.set_item("IsFolder", entry.is_folder)остаётся в качестве самостоятельного упражнения.У последнего зарелизенного проекта с внутренней логикой на C++, над которым я работал (с ещё одним коллегой), было немногим менее миллиона пользователей. Пойдёт такая поделка?
«В большом проекте писать потенциально опасные макросы» — если вы это про глобальные макросы, которые реально потенциально опасны, то не надо приплетать к ним меня. Я практикую другой препроцессинг: написал, тут же использовал, тут же уничтожил. Как бы, я привёл два разных примера на эту тему, можно было увидеть паттерн (если есть желание понять).
А вообще, любой желающий отлить свой негатив к макросам во что-то общественно-полезное приглашается вот сюда: Как сделать простую рефлексию (стрингизацию имён типов) на C++23?. Вот куда я бы точно не хотел совать макросы, так это туда, но как всегда, когда коснулось, оказалось, что завезли один magic_enum.
То, что LLM’щики грабят (другого слова не подберу) open source, это плохо. Но патенты в софтвере ещё хуже. (Не верите мне, послушайте Кармака). Так что, лекарство страшнее болезни.
Не надо. Объявление потому и написано одной строчкой выше использования, чтобы было видно, что это такое, и что это НЕ функция. И регистр как бы намекает.
А по поводу грамотности добавления лишних «трюков с
do { ... } while(0)» поговорите с коллегой из подветки, который считает что они и так слишком громоздки. Я же придерживался и придерживаюсь золотой середины. Использовать буду, но без лишней писанины, которая сама — источник багов.Чем оно лучше PE? Есть смысл скачать и глянуть?
Копипаста не может быть меньшим из зол, в этом мой поинт. Автор привёл один пример, я другой, и поверьте, ловить редкую разницу в путях… А там, знаете, есть нормализация 8.3 (до сих пор надо учитывать!), есть резолвинг (всякие
.и..)… Короче, это было больно.Метапрограммирование макросами, как раз, не громоздкое. Писать можно тот же самый код. Что там громоздкого? Склеивание
##? В VS 2026 есть классная штука: ПКМ по файлу → Preprocess, и вы видите то, во что развернулись макросы. Я часто пользуюсь. Вот этот пример сpos.##AXIS, прежде, чем запостить комментарий, я отрендерил и проверил в Студии. Добавили, не прошло и 50 лет после изобретения макросов. Или прошло? Сейчас посчитал, прошло 54 года. Непонятно, почему отладчик не умеет переключаться в режим раскрытия локальных макросов (всё подряд, как в Preprocess, слишком вербозно). Видимо, ещё через полвека добавят. Сейчас в МС сильно заняты проверкой возраста и ИИ.Ваш синтаксис мне нравится больше, чем имеющийся. В нём меньше копипасты, а то, что имеет семантику списка, оформлено как список.
Периодически я пытаюсь найти альтернативы макросам, но каждый раз оказывается, что их нет. По этой причине, и потому, что мне надоело писать
constвместоmut(и ещё по десятку причин) я серьёзно думаю, не переписать ли для начала десяток файлов на C++2. Тамошние генераторы хочу попробовать.Если вы ошибётесь в дефайне, это будет совсем другой тип ошибки. Объект будет, например, просто стоять на месте, если условие по ошибке всегда будет ложным. В оригинале у вас происходит смешение компонентов, а это гораздо хуже. Поэтому есть смысл избавиться только от плохого типа ошибок, если есть такая возможность. Полностью избавиться от ошибок всех типов нельзя, пока есть буквы.
Вот пример из реального проекта, который был написан с копипастом и ошибку ловили долго, потому что на практике некоторые разные поля почти всегда совпадают, отличаются они в особенных ситуациях, и тогда это баг:
Исправленная версия:
Код очень старый (циклы, понимаешь!), я бы сейчас, конечно, декларативно это всё написал. Но более свежего кода нет: с тех пор, как я научился избавляться от копипасты препроцессором (тогда и научился), на эти грабли я больше ни разу не наступал. Чего и всем желаю.
Знакомый рассказывал, когда в него въехали на светофоре, чуть голова не оторвалась. Чуть-чуть водитель сзади не успел затормозить, т.е. скорость была, ну, около 40. А E ~ v².
Записал.
Потому что копипаста / DRY violation. Хотя бы так надо было:
Это лучше, чем «clang‑tidy с bugprone-* и -Wshadow», потому что уничтожает саму возможность совершить описанную ошибку.
Я иногда говорю разрабам на языках без адресной арифметики и с виртуальной машиной, где всё отслеживается средой и заворачивается в подарочную упаковку exception’ов (C#, Java, ES): «Баги бывают в C/C++/Delphi. А у вас-то какие баги? Так, прохиндейство…» Обижаются!
Да кто его знает, куда пойдут юзеры, если у них отобрать .exe и пойдут ли куда-то вообще. Не исключено, что половина останется запускать Edge с Office’ом из-под WinStore, а вторая половина пойдёт покупать Мак. Вот и настанет PC-культуре большое и светлое будущее. То, что есть сегодня, меня более-менее устраивает (и как юзера, и как разработчика), и пусть оно продлится подольше.
Я второй раз напишу: причём тут вообще доверие? Я вскользь про него упомянул, и только потому что вы эту тему затронули.
Суть в том, что если вы сегодня начнёте ставить приложения через WinStore, завтра вы не сможете запускать программы без него. Это совершенно очевидно, поскольку WinUI3-приложения уже нельзя запускать напрямую, без инсталляции.
Без рекламы-то?
Ладно, шучу. Мне тоже было непривычно на маршруте IE11 → FF4. Проходит за несколько месяцев.