Обновить
49

Люблю делать UI и офисные приложения

0,5
Рейтинг
16
Подписчики
Отправить сообщение

Во-первых, надо лезть и включать. Во-вторых, эта фича появилась далеко не сразу.

Но, главное, сейчас не девяностые. Трудно найти компьютер без мышки, а новую можно купить за полчаса за копейки (и дома вечно валяется несколько старых с плохой прокруткой/даблкликом). Сейчас и управлением через Tab мало кто пользуется. В девяностые же нередко можно было встретить компьютеры вообще без мышки, а если она ломалась, это становилось большой проблемой.

В детстве я сильно недоумевал, столкнувшись с тем, как работает клавиатурное управление в винде, почему для тех, у кого нет мыши или одной руки не сделать так: при отключении Num Lock цифроблок начинает управлять курсором (не кареткой, а именно курсором). Как микроджойстик, который встраивают в клавиатуру на некоторых ноутбуках. Это:

  1. Интуитивно понятное решение с минимальным порогом вхождения.

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

Я ваши эмоции частично понимаю. Недавно я задавал вопрос, чем в CI/CD препроцессить HTML, как раз для подобных встроек (чтобы писать его с сокращениями, с прицелом на будущую генерацию на стороне юзера из DSL). Так вот, пришёл некий чел и написал, что всё это бесполезная затея, потому что Vue так всё равно не запихнуть. Эти новые программисты не понимают, как можно что-то писать без какого-нибудь Vue. И это бесит. Я, как мог вежливо, написал, что HTML != Vue, но сдержаться было трудно.

Но только вот на здоровую-то голову зачем валить? Начинается с того, что вам надоедает каждый раз писать void OnResize() { for (int i = 0; i < _Controls.size(); i++) { … } }, и вы начинаете думать о DSL, который позволил бы этого не делать. И желательно, чтобы он поддерживал условия вида «размер этого компонента — столько-то процентов от общей ширины, но не меньше столько-то пикселей, и не больше столько-то пикселей, в случае нехватки ширины с переносом на следующую строку, в случае совсем уж нехватки ширины — с появлением горизонтального скролбара». Поздравляю, вы изобрели flex, который позволяет писать писать это формулами вида 1 1 100px. Затем вам надо добавить анимации (сворачивание, разворачивание, подсвечивание и т.п.), и вы изобретаете transition (не в цикле же их писать каждую по отдельности). Затем вам надо поддержать HiDPI-мониторы (4К/8К), хотя бы в форме скейлинга (как Telegram). В HTML для этого есть вёрстка в rem/em. (Вот статья, которую я об этом написал, она больше для фронтендеров, но другого способа написать адаптивные приложения (в том числе десктопные) не существует — вам надо или взять готовую реализацию rem/em, или изобрести свою, только забагованную и ни с чем не совместимую). Затем вам надо пройти сертификацию, и поддержать accessibility. Чтобы скринридер мог озвучить, где у вас меню, где тебю. Интерфейс на HTML, если вы сделали его правильно, автоматически совместим со скринридерами, а с приложением, написанным по старинке, обычно надо сделать вдвое больше работы. Потом вам надо сделать так, чтобы юзер мог работать только с клавиатуры. Потом…

И вы понимаете, что написали свой браузер. (Либо написали колхозное приложение, которое не умеет в современный вид, HiDPI, accessibility и layout’инг).

18 мегабайт кушает браузер под названием Sciter. Почему его так раздуло — не знаю, пчёлы покусали, наверно )) Я им пользовался, когда он весил 5 мегабайт, и умел ВСЁ вышеперечисленное. Вот это приложение весило вместе с ним 10 мегабайт и кушало памяти… там чистые измерения нельзя провести, как вы понимаете, потому что код находится в адресном пространстве explorer.exe, но если измерить грубо, Блокнот в Windows 11 жрёт больше.

Кстати, Sciter вырос из HTMLayout, который вообще не поддерживал скрипты. Только разметку и CSS. Обработчики надо было писать на CSS+ и на C++. Тогда он весил 3 мегабайта и тормозить там было нечему.

Ultralight, про который я написал ниже, весит, конечно, побольше, но он заточен под скорость, и его запилили для геймдевелоперов. На нём предполагается писать HUD для игр. Проценты здоровья, или встроенный планшет с заданиями. Знаете, чем отличается бесплатная версия от платной? Бесплатная залочена на 60fps. Больше не даёт. Вы думаете, там что-то тормозит? А, ну ещё платная компилирует весь JS в нативный код. Хотя JS надо просто избегать.

Если бы веб жрал меньше, то на него все и пересаживались бы.

А вы думаете, легко использовать Sciter или правильно использовать Webkit/CEF? Для этого надо уметь в C++/многопоточку/маршаллинг и т.п. Или, может быть, вы думаете, что легко встраивать Ultralight в движок своей игры?

Наелись уже от веб-макак.

А нормальные программисты тут причём? Те, кто знают, какой браузер кушает меньше, чем Блокнот?

Макаки и среди нативщиков встречаются частенько. Не могут нативно в layout’инг, и делают большие окна non-resizable.

Веб-слоп делает веб-слопом не рендеринг интерфейса в браузере, а бизнес-логика десктопного приложения, написанная на джаваскрипте. Конечно, многое ещё зависит от того, какой именно взят браузер. Есть браузер, который весит 18 мегабайт и кушает меньше памяти, чем Блокнот.

Если бы мой монитор в виде плитки или обоев начал показывать призывы к миру во всём мире, и мне бы это не понравилось, я бы начал с того, что попробовал подключить его к более другому источнику сигнала.

И, разумеется, я бы НИКОГДА не купил мониторную плитку или обои у Mercedes-Benz. С их жадностью и с их ЦА они бы наверняка встроили туда компьютер, а доступ через него продавали по подписке.

Это моя первая попытка сделать что-либо полезное на C++ для опенсорса, буду очень рад объективной критике, советам

Ну, теперь не говорите, что не просили моего совета! ))

В этой области можно столько полезного на C++ сделать для опенсорса, а выбран был почему-то способ засунуть React в обёртку над WebView2.

Я сейчас вынужденно пилю обёртку на C++ над Ultralight. (Вам с геймдевным бэкграундом, наверно, будет интересен Ultralight). Потому, что их родная оконная обёртка (ultralight::Window) очень тупая и не позволяет делать layered-окна. А куда же без них? Без них не сделать даже такую штуку, как простое советское контекстное меню c круглыми краями (которые я хочу задавать при помощи border-radius). Пилить эту обёртку мне совершенно не хочется, душа просит чего-то лёгкого и воздушного, например, ваять анимации на CSS, но увы: никто другой не обернул.

Если не хочется оборачивать чужие коммерческие проекты, можно аналогичным образом обернуть CEF. CEF, конечно, это не Ultralight — сплошные утечки памяти и много процессов (как и у вас сейчас из-за WebView2, кстати говоря), но возможность сделать контекстное меню c круглыми краями и блуром прямо на CSS — это всё равно круто и мегаполезно. (Для этого надо вписывать результаты рендеринга CEF в виндовый композитинг через буфер кадров — и направлять ввод в его псевдоокно).

Если не хочется брать CEF, то вот тут @drakkonne хвалит WebKit.

А React или ванилин — это уж второстепенной важности вопрос. Тем более, люди, которым нужен React, скорее всего, всё равно возьмут React Native или что-нибудь похожее. Или просто Electron.

Боролся с богом но сам уверовал в ИИ)

А почему эти вещи противопоставляются? По-моему, они одинаково глупы. Люди верят в бога не по научным соображениям, а потому что им комфортно жить в таком мире, где есть бог. Наукой их не проймёшь )) А иногда бывает, как я в сатирическом рассказе читал в детстве: тётенька крестила сына, директор завода снимает маляров с покраски яслей, и заставляет их малевать лозунг «Бога нет», потом выясняется, что тётеньке не с кем оставить сына, потому что ясли никак не откроют, а бабушка согласилась сидеть с ребёнком только при условии крещения.

При этом, лично я считаю Докинза одним из величайших учёных всех времён и народов. Его теория эволюции с активными репликаторами великолепна.

1 к 1

1 к 1 это как? Это же не XSLT. Вот вам некоторые вопросы.

Заворачивать текст в <p> или нет? Для курсива и болда использовать <i>/<b> или <span class="…">? Генерировать <body> вокруг всего документа? Что делать с flavored-вставками, например, с <cut />, который используется в статьях Хабра (кстати, с ходу даже не сообразишь)? Какие теги генерировать для строк между `````js`` и ``````` (о, а вот и баг в хабровском парсере: он не умееет эскейпить бэктики), т.е. для ключевых слов языка ES? И многие другие вопросы, которыми задаёшься при интенсивной реальной работе с MD.

Вместо того, чтобы тащить в браузер всю эту кухню (настройку схемы преобразования для каждого типа документа), которая нужна, если всё делать по уму, гораздо логичнее вынести построение DOM в аддон, который сделает трансформацию так, как вам надо.

А делать тяп-ляп преобразование в браузере — лично мне хватило XML в IE в своё время. Спасибо, не надо.

У меня же получается написать код, чтобы его и на старой, и на новой, и на *nix’е запустить.

Думается мне, это как раз благодаря «и на *nix’е запустить». А мне не надо кросс-платформенность, и что, я должен с .vcxproj переползать на CMake, ради непонятно чего? Особенно для «одного окна с единственной кнопкой».

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

Возможно, содержимым (в т.ч. паром — это же, всё-таки, «Термос»).

Почему браузеры умеют из коробки показывать html, xml, txt и пр., но не умеют md?

Какой в этом смысл, если для просмотра важна стилизация? Универсально прикрутить кастомную стилизацию документа произвольного типа к браузеру не самое архитектурно правильное решение, гораздо лучше взять связку из двух аддонов: один для построения DOM из .md, .fb2 и чего там ещё хочется просматривать в браузере, а второй, типа Stylus, для стилизации этого DOM’а (если не хотите вникать в тонкости CSS, в Stylus можно просто скачать набор стилей, относящихся к документу, заканчивающемуся на .md или .fb2, из расшаренной базы на сервере).

В любом случае, построение DOM неоднозначная операция.

Иногда запускаешь программу уровня хеллоу уолд с одной кнопкой, а она вместо того, чтобы спокойно отработать на условной WinXP, Win 7 сообщает, что у тебя ядро ОС слишком старое для её могучейшего алгоритма. )))

Эти претензии должны быть не к автору программы, а к Microsoft, которая из новых компиляторов злонамеренно убирает поддержку старых версий виндов. У автора выбор: писать на более свежем стандарте C++, или собирать только под более свежие версии виндов. Можно ещё, конечно, поискать компилятор от третьей стороны, но это сильно усложняет процесс разработки. А так, довольно редко бывает, что тебе нужен вызов функции, которой не было в более старом WinAPI. Кроме того, Microsoft перестала публиковать в документации реально минимальную версию для каждой функции (типа, Windows 95), а начала просто врать, что всё равно нужна свежая винда. То есть, разработчику теперь стало труднее принимать решение, хочет он воспользоваться функцией ценой повышения минимальных требований или нет.

Только ленивость или неумность разработчика…

Удобно устроилась Microsoft: со стороны всего этого не видно, и их грехи валят на разработчиков.

Всё детство жил в очень маленьком и очень удалённом городке за Уралом. О чём, кстати, абсолютно не жалею: жителям маленьким городков свойственен определённый шарм (впрочем, может от региона зависит). Даже в суровые 90-е оттуда постоянно ходил междугородний автобус (типа «Икаруса»), доезжавший до центра области с аэропортом за 4 часа (сейчас, если верить Яндексу, 3:40, а до аэропорта ещё меньше, маршрут проходит через аэропорт). Но на таком автобусе обычно ездили только студентики к родителям на праздники, остальные гоняли на машинах (2 часа). Отправлялись прямые рейсы часто (раз в час), а чтобы совсем не ждать, можно было поехать с пересадками (тогда ожидание составляло менее 15 минут), стоимость поездки от этого не менялась, только надо было в соседнем городе с одного борта перейти на другой. Трудно поверить, но даже у такого города были сателлиты — совсем уж мелкие деревеньки и бывшие совхозы, от них можно было автобусом доехать до автовокзала моего города за полчаса. Такие дела.

Сейчас поискал на карте самый глухой угол того региона, нашёл населённый пункт, откуда автобусы вообще до облцентра не ходят. Яндекс просто не может построить маршрут общественным транспортом. Пригляделся, а там рядом как раз аэродром.

Первая версия нарочито раздутая … Звук поедания яблока — эффекты в WAV (44,1 кГц; 16 бит), потому что «а вдруг кто-то услышит разницу»

Честно говоря, непонятно, как это связано с семикратным хранением модельки из примера в начале. По-моему, это очень разные кейсы.

Не использовать сжатие с потерями потому, что кто-то действительно может услышать/увидеть разницу (в данном случае не знаю, я не звуковик) — это одно. А отсутствие центрального наследуемого (расширяемого) репозитория ресурсов, что приводит к копипасте огромных размеров — совсем другое.

В первом случае мы тратим плоды прогресса (память/ЦПУ/ГПУ) на то, чтобы сделать продукт лучше. Во втором — просто выкидываем их ни на что.

Над календарём добавили в 25H2, слава богу. Будем справедливы, хоть что-то хорошее они сделали. А то до этого приходилось веб-страницу с часами открывать, чтобы на секунды посмотреть.

Если мы говорим про один и тот же проект, то вырезание мусора лежит на Гитхабе в виде скрипта, обрабатывающего оригинальный образ. Любой желающий может провести аудит безопасности, так почему это презрительно называют «сборка от Васяна»?

Я столкнулся с таким отношением, когда этот проект ещё только появился (2023? не помню точно), и оно меня сильно удивило.

Я поискал «беспроводной usb удлинитель», думая, что давно уже всё сделано, и ничего не нашёл. Кроме вопросов, где такой взять ))

обеспечение электроэнергией отдалённых регионов и островов

Опять память подорожает.

Юзайте redlib, кому надо. Обновляемый список актуальных инстансов:

https://github.com/redlib-org/redlib-instances/blob/main/instances.json

Это, конечно, если чукча читатель, а не писатель.

Дело было в нулевые, а Интернет на тот момент был не свой, а одного института, где я подрабатывал после школы.

1
23 ...

Информация

В рейтинге
2 600-й
Откуда
Россия
Зарегистрирован
Активность

Специализация

Десктоп разработчик, Разработчик приложений
HTML
CSS
JavaScript
Windows API
C++
UI/UX дизайн
Разработка интерфейсов
Дизайн продукта
Adobe Photoshop
Проектирование интерфейсов