Хобби: Десктопное UI - говно, что делать?
Feb. 3rd, 2011 04:20 pmДесктопные UI библиотеки {как будто} застыли в начале 90-х: картиночки в контрольчиках, автоматический ресайз, анимация - ничего этого или нету, или оно через жопу. И неудобно, долго писать. И в каждой новой библиотеке - на новый лад. И пара-тройка мегабайт для программы Hello, World! - это уже как бы и немного. Что делать? Есть ли выход? Выход есть, и он в вебовских технологиях на десктопе. Скорость разработки резко повышается, качество результата - тоже. Есть ли минусы? Ну, вроде нету. Я не вижу. Вижу одни плюсы.
Вебовский мир UI по сравнению с десктопным - мечта, волшебный сон. Во-первых, он ошеломляюще массовый, всего больше в десятки раз, если не в сотни - сравните число книг по веб-дизайну и по разработке UI на .Net или Java, или число тулсов по причёсыванию .html и .rc файлов. За счет массовости всё лучше отлизано, многократнее проверено, и понятнее описано. Во-вторых, HTML много разнообразнее и мощнее любой десктопной библиотеки - всё можно нарисовать картинками и оживить JavaScript-ом, всё можно засунуть внуть всего. В-третьих, писать HTML и JS руками прямо на живой программе, перегружая страничку по три раза в минуну для микро-тестирования - очень, очень быстрый способ разработки. В-четвертых - вебовский UI максимально кроссплатформен и тулсонезависим. Браузеров много, рендерится всё достаточно одинаково везде (см. ниже) - если вам надоел MS, запускайте те же исходники на iPad-е. Более того, можно одну и ту же программу с минимальными переделками запускать как десктопный исполнимый файл, и как интернетовский сайт.
Как достигается сей парадиз? Очень просто. Существует97 способов половых сношений как минимум 4 массово используемые технологии для. Почему четыре? По числу минимально живых браузеров плюс флэш. Надо взять любимый вашими потенциальными пользователями браузер, спрятать его внутри вашей программы, как-то упаковать туда же HTML/JS/etc., и всё.
IE состоит внутри из набора хорошо документированных COM-объектов, которые фактически являются частью Win32 API, есть в любой виндовой инсталляции, и массово используются в UI самих Виндов начиная с Search dialog box в Windows 2000 и всё чаще и чаще в каждой следующей версии. Гуглить надо IWebBrowser, самый простой способ попробовать - в MS VisualStudio создать MFC Application, выбрать Dialog Based и прочекать HTML Dialog. Всё. Оно создаст программу (кошмарную, но об этом позже), состоящую из живущего в ресурсах HTML и из одного окна класса CDHtmlDialog, которое в свою очередь не содержит ничего, кроме объекта IWebBrowser.
Крутость использования IE заключается в том, что он встроен в Винды и всегда везде есть. Соответственно суппорт просто почти как у голой Win32 программы, нету вечной борьбы за работоспособный рантайм, можно упихать программу с весёленьким UI в 100K - это полный размер всей инсталляции. Кроме того IE всё ещё самый популярный браузер, и если лень возиться с мультибраузерностью но нужно вываливать HTML в Интернет - быть IE-специфичным меньшее из зол.
Продолжение тут
Вебовский мир UI по сравнению с десктопным - мечта, волшебный сон. Во-первых, он ошеломляюще массовый, всего больше в десятки раз, если не в сотни - сравните число книг по веб-дизайну и по разработке UI на .Net или Java, или число тулсов по причёсыванию .html и .rc файлов. За счет массовости всё лучше отлизано, многократнее проверено, и понятнее описано. Во-вторых, HTML много разнообразнее и мощнее любой десктопной библиотеки - всё можно нарисовать картинками и оживить JavaScript-ом, всё можно засунуть внуть всего. В-третьих, писать HTML и JS руками прямо на живой программе, перегружая страничку по три раза в минуну для микро-тестирования - очень, очень быстрый способ разработки. В-четвертых - вебовский UI максимально кроссплатформен и тулсонезависим. Браузеров много, рендерится всё достаточно одинаково везде (см. ниже) - если вам надоел MS, запускайте те же исходники на iPad-е. Более того, можно одну и ту же программу с минимальными переделками запускать как десктопный исполнимый файл, и как интернетовский сайт.
Как достигается сей парадиз? Очень просто. Существует
IE состоит внутри из набора хорошо документированных COM-объектов, которые фактически являются частью Win32 API, есть в любой виндовой инсталляции, и массово используются в UI самих Виндов начиная с Search dialog box в Windows 2000 и всё чаще и чаще в каждой следующей версии. Гуглить надо IWebBrowser, самый простой способ попробовать - в MS VisualStudio создать MFC Application, выбрать Dialog Based и прочекать HTML Dialog. Всё. Оно создаст программу (кошмарную, но об этом позже), состоящую из живущего в ресурсах HTML и из одного окна класса CDHtmlDialog, которое в свою очередь не содержит ничего, кроме объекта IWebBrowser.
Крутость использования IE заключается в том, что он встроен в Винды и всегда везде есть. Соответственно суппорт просто почти как у голой Win32 программы, нету вечной борьбы за работоспособный рантайм, можно упихать программу с весёленьким UI в 100K - это полный размер всей инсталляции. Кроме того IE всё ещё самый популярный браузер, и если лень возиться с мультибраузерностью но нужно вываливать HTML в Интернет - быть IE-специфичным меньшее из зол.
Продолжение тут
no subject
Date: 2011-02-04 03:51 am (UTC)Про вебовский GUI странно. Там все то ли очень новое, то ли никому не нужное, но найти какой-либо документации или найти что-то общепринятое -- легче застрелиться. Результ получается обычно довольно печальный. У гениев из Гугла может быть что-то типа Maps и получается, но зато все знают автора как настоящего гуру ("он Maps написал!"). Было бы это обычное приложние, никто бы и не вспомнил. Или вот взять Gmail. У нас перевели туда всю контору и народ по-прежнему жалуется, и это в сравнении с Lotus Notes(!).
Про разработку и тестирование я не согласен вообще совсем. JavaScript -- интерпретируемый язык с first class functions. Отсюда никакая человеческая IDE невозможнна. Отладка намного больнее, чем какой-нибудь GUI dialog. Сами инструменты -- стращный сон, тот же JavaScript, ничего хуже придумать просто нельзя.
Если нужно что-то ставить на клиента, то какой уже смысл во всем этом? Можно просто принести свою программу со своим JVM и будет по настоящему кроссплатформенно и выглядеть нативно. Наверняка и ваш .NET ничуть не хуже.
В общем, на мой взгляд, польза тут совсем от не от того, а от:
1. От легкости деплоймента
2. Легкости интеграции с чем угодно
3. Легкости девелопмента за счет снижения стандарта UI. Плюс, не нужно заботиться от object lifetimes, ownership и прочем.
Но платится за все это более-менее кошмарными программами и пользователь нам дает знать недвусмысленно.
no subject
Date: 2011-02-04 04:33 pm (UTC)Во-первых, не надо сравнивать хрен с пальцем. Swing - это ведь Java, да? То-есть кривой интерпретируемый код с гиганскими рантаймными зависимостями, и хронической несовместимостью с самим собой. Ужас суппорта, мэйнтенанса и даунлоада. А IWebBrowser - это чистый Win32. Те же размеры, та же надежность.
Во-вторых - живой пример: пусть тебе надо сделать обычный виндозный About Box, нативно выглядящий, но слегка приукрашеный. Нужно в вертикальном дайлогбоксе разместить большую картинку - лого фирмы, текс шрифтами двух размеров, в окне с прокруткой - расшаркивания тем, у кого ты пёр исходники, и кнопку OK с картинкой зеленой галочки и акселетарором O.
Всё, конечно, должно центроваться и авторесайзится.
В вебе это делается ну скажем пятью строчками текста, в текстоыом редакторе, в одном месте, не в трёх разных форматах в пяти файлах. Плюс абсолютно любые картинки в абсолютно любом формате.
В Win32 API это дикий геморрой. В .Net это геморрой чуть меньше.
Я не знаю, что такое Swing. В нём это тоже пять строчек?
Про вебовский GUI странно. Там все то ли очень новое, то ли никому не нужное, но найти какой-либо документации или найти что-то общепринятое -- легче застрелиться.
Мы живем в разных вселенных. Ты не можешь найти документацию по тому, как писать HTML? Серьезно?
Результ получается обычно довольно печальный. У гениев из Гугла может быть что-то типа Maps и получается, но зато все знают автора как настоящего гуру ("он Maps написал!").
Ты путаешь Web и AJAX. Т.е. сравнительно статические странички "чтоб было удобно и красиво" и мегатонны трэша на JS. JS - хороший язык, но не настоящий. На нем не надо писать много. На нем надо писать чуть-чуть, а всё, что не влезло - в C++ / на сервер.
Про разработку и тестирование я не согласен вообще совсем. JavaScript -- интерпретируемый язык с first class functions. Отсюда никакая человеческая IDE невозможнна.
Это какие-то слишком умные слова, я их не понимаю. JS отлаживается много - много легче C++. Первый слой - в живую работающую программу вставляешь alert('a='+a);, и опять проходишь это место. Этого хватает для 70% случаев. Если всё плохо, и не лень - открываешь дебайгер в IE, он неплохой. Если совсем всё плохо - посыпаешь голову пеплом, и открывешь дебайгер в VS, как последний сиплюсплюсник. В VS дебайгер JS совершенно такой же, как C++.
Если нужно что-то ставить на клиента, то какой уже смысл во всем этом?
[Терпеливо]: Очень маленькая и быстрая программа, которая красивее выглядит и быстрее пишется чем большие и медленные.
Если тебе кажется, что в 21-м веке быть маленьким и быстрым необязательно, значит у тебя просто никогда не было 700K инсталляций.
Можно просто принести свою программу со своим JVM и будет по настоящему кроссплатформенно и выглядеть нативно. Наверняка и ваш .NET ничуть не хуже.
Хм. Похоже я не изложил важную мысль: IWebBrowser-based программы внешне неотличимы от Win32, если ты этого не хочешь. В CSS прописываются специальные кейворды, обозначающие что-то типа "системный цвет виндовой кнопки", и отличить становится невозможно никак. Не "почти никак" а "вообще никак" - я не знаю способов выяснить, Win32 программа или JS, программистских тулсов. И можно отличие от Win32 наращивать постепенно - скажем добавить картинки на кнопки, и больше ничего. Получается очень красиво.
Про .Net и Яву смотри выше - ты сравниваешь отлитое из бронзы со склееным из папье-маше.
Но платится за все это более-менее кошмарными программами и пользователь нам дает знать недвусмысленно.
Ты путаешь плохие, негодные веб-сайты и хорошие, продуманные десктопные программы. Они такие хорошие, что ты просто не воспринимаешь их как какие-то специальные. Шаравара пишется на IWebBrowser примерно на треть, если не на половину, коробочные программы - довольно массово, в Виндоуз 7, мне кажется, так сделаны больше половины дайлог боксов.
no subject
Date: 2011-02-04 06:17 pm (UTC)Оказалось это довольно геморройно - не нашел лучшего способа, чем VS-овским Spy++ смотреть классы и названия окон, из которых программа состоит. Соответственно программу надо заподозрить, запустить и проверить.
Можно ещё искать в ресурсах .HTML, но это не настолько чистый способ.
no subject
Date: 2011-02-04 07:12 pm (UTC)Я попробовал проверить: прочекал HTML Dialog и запустил результат. Получилось вот такое:
По мне так есть некоторые отличия.
> Я не знаю, что такое Swing. В нём это тоже пять строчек?
Я вот сделал сейчас "Сохранить веб-страницу, полностью" для пустой папки в gmail'е. Получилось 1.6 мегабайт, из них как минимум мегабайт какого-то беспробельного скриптового говна.
no subject
Date: 2011-02-04 10:59 pm (UTC)> Я попробовал проверить: прочекал HTML Dialog и запустил результат.
> По мне так есть некоторые отличия.
"если не хочешь" != "автоматически"
Вы MSThemeCompatible в хидер прописали?
> Я не знаю, что такое Swing. В нём это тоже пять строчек?
>> Я вот сделал сейчас "Сохранить веб-страницу, полностью" для пустой папки в gmail'е. Получилось 1.6 мегабайт, из них как минимум мегабайт какого-то беспробельного скриптового говна.
[Терпеливо]: Какие же выводы вы делаете из это удивительного факта?
no subject
Date: 2011-02-05 07:13 pm (UTC)Ну вот сейчас прописал. Кнопки округлились, но выделение и меню по правой кнопке - остались.
> Какие же выводы вы делаете из это удивительного факта?
Да в общем-то простые: описание приличного интерфейса хоть на плюсах, хоть на javascript'е занимает довольно много места. И как только возникают нетиповые задачи вроде "нарисовать вот такой вот особенный прогрессбар в левом верхнем углу", нижележащий браузер перестаёт помогать и даже, о ужас, может начать мешать. Как, впрочем, и win32'шные контролы в некоторых случаях.
Ну, в общем, HTML-движок - это, увы, не серебряная пуля для создания интерфейсов.
no subject
Date: 2011-02-04 11:06 pm (UTC)> ну вот, например на tcl/tk 8.5.8 под windows 7:
[Скучным голосм]: Там же написано "обычный виндоузный". А у вас картинки непрозрачные в рамочках, фонты фиксированные странные, кнопка странного размера... Типичная, вобщем, явская кривота.
> короче говоря, мне не очень понятно зачем в 2011 году делать что-то windows-only, когда есть кроссплатформенные инструменты (джавовский swing, обновленный tk или даже shoes для чудесного ruby).
Лучше объясните мне, зачем делать что-то не windows-only. Какой в этом финансовый смысл? Ну не считая iPad-а, но я что-то сомневаюсь, что под него удобно на Свинге писать.
Про врожденную убогость интерпретируемых сред с большим рантаймом для больших тиражей я уже писал.
no subject
Date: 2011-02-05 12:13 am (UTC)рамочка там специально (убирается за 1 секунду, будет в итоге только еще меньще кода), а непрозрачная она только потому, что юзерпикча у юзера жижечьки cranequinier тоже не имеет transparency. (btw, на картинке что на кнопке 'ok' есть transparent pixels)
фонты фиксированные странные
обычные виндюковые шрифты, маленький--какой там в tk по умолчанию (лень проверять), который жирненький--то требушет мс болд, в текстовом виджете--джорджия. все элементарно меняется на что угодно.
кнопка странного размера
ггг, ну разве что.
Лучше объясните мне, зачем делать что-то не windows-only
последние 3 года мак лезет во все щели :( местные даже покупают лаптопчик за $500 и ставят туда osx86. типа "экономят".
кроме того, статистика дает стабильные 11-12%:
http://getclicky.com/#/marketshare/global/operating-systems/
Про врожденную убогость интерпретируемых сред с большим рантаймом для больших тиражей я уже писал.
интерпретируемых среды бывают разные. программулина на tcl/tk, например, умеет заворачиваться в 1 exe файл без всяких зависимостей.
no subject
Date: 2011-02-05 12:30 am (UTC)> обычные виндюковые шрифты, маленький--какой там в tk по умолчанию (лень проверять), который жирненький--то требушет мс болд, в текстовом виджете--джорджия. все элементарно меняется на что угодно.
В Win32 программе шрифты не вшиты. Они задаются текущими настройками OS, и это принципиально важно для жизнеспособности программы где-то еще, кроме воркстейшена программиста. Фиксированные шрифты - сразу незачет.
>> Лучше объясните мне, зачем делать что-то не windows-only
> последние 3 года мак лезет во все щели :( местные даже покупают лаптопчик за $500 и ставят туда osx86. типа "экономят".
Вы уверены, что нарисованный вами свинговый эбаут бокс со вшитыми виндовыми шрифтами порадует своим видом маковского фанбоя?
no subject
Date: 2011-02-05 12:45 am (UTC)там 2 кастомно заданных шрифта (оба есть в любой поставке windows, начиная с xp или даже 2k--не уверен насчет джорджии). их можно убрать (будет еще меньше кода) и будут те шрифты которые в tk по умолчанию. оно все маштабируется так же как в любой "родной" windows программе, использует тот же родной windows рендеринг шрифтов и проч.
не понимаю, в чем проблема.
свинговый эбаут бокс
бггг, это не свинг и не джава!
порадует своим видом маковского фанбоя
без понятия. чтобы проверить, нужно взять мак и фанбоя. (и эбаут бокс на маке отрендерется иначе чем на windows)
no subject
Date: 2011-02-05 03:03 pm (UTC)btw, вот как оно выглядит под xorg в FreeBSD с отключенным antialiasing:
no subject
Date: 2011-02-04 09:21 pm (UTC)не флейму ради, но почему _кривой_?
btw, на пустой джаве писать это какой-то 2006 год. all cool kids are using scala nowadays, где в 2.8+ со swing'ом стало получше: http://ingomaier.blogspot.com/2010/11/scalaswing-package-in-28-and-beyond.html
no subject
Date: 2011-02-04 11:15 pm (UTC)>не флейму ради, но почему _кривой_?
[Терпеливо]: Потому что интерпретируемый. Вы когда-нибудь видели прямой интерпретируемый код? Вон вы выше даже эбаут бокс прислали кривой, казалось бы куда уж проще... Ничего личного - мой поинт как раз в том, что это неизбежно.
> btw, на пустой джаве писать это какой-то 2006 год. all cool kids are using scala nowadays, где в 2.8+ со swing'ом стало получше
Я, к счастью, могу уже не следить, что кул
пкидс носят в этом сезоне. Жизненный опыт учит нас, что в следующем они начнут носить что-то другое, старые игрушки бросят в полуживом состоянии, и привет баблу.В IT индустрии даже MS верить нельзя, что она ВНЕЗАПНО не засансеттит ваш кусок хлеба, а вы "cool kids".
no subject
Date: 2011-02-05 12:28 am (UTC)define прямой.
то что, например, отот примитивный эбаут бокс кривой, так то не tcl интерпретатор виноват, а я.
старые игрушки бросят в полуживом состоянии, и привет баблу.
это понятно, что на все бросаться нет смысла, но со скалой все a) было хорошо, b) будет отлично:
http://www.scala-lang.org/node/8579
The Scala research group at EPFL is excited to announce that they have won a 5 year European Research Grant of over 2.3 million Euros to tackle the "Popular Parallel Programming" challenge.
PS
зачем по умолчанию скринить комментарии?
no subject
Date: 2011-02-05 12:37 am (UTC)> define прямой.
define "define"
> то что, например, отот примитивный эбаут бокс кривой, так то не tcl интерпретатор виноват, а я.
Продемонстрируйте это! Напишите прямой. Причем чтоб он был прямой во всех виндах, во всех Mac OS, и на всех линуксах. Я не поленюсь проверить в семи-восьми VM, если будут сомнения. Вы же говорите, оно мультиплатформенное?
А потом честно расскАжите, сколько получилось
геморанедель работы.no subject
Date: 2011-02-05 01:00 am (UTC)ггг
define 'define "define"'
а если серьезно, то о чем спор? то что по волшебству ни жвавовский свинг, ни tk ни gtk+ ни qt ни shoes не сделают 100% идеально прилизанных "как будто родное" программулин? так никто и не спорит. чудеса не случаются.
при чем тут якобы кривость джавы я не понимаю.
вообще obsession по поводу пикселей на кнопочках у пользователей бывает чуть менее чем никогда. они, по моим наблюдениям, вообще этого не замечают: работает и ладненько. это, конечно, расстраивает: столько времени тратишь на, а им пофиг.
no subject
Date: 2011-02-07 05:48 pm (UTC)А зачем тогда пользоваться всеми этими пионерскими поделками? Пишите как взрослые люди, на Win32 API. И чудеса будут случаться постоянно.
вообще obsession по поводу пикселей на кнопочках у пользователей бывает чуть менее чем никогда. они, по моим наблюдениям, вообще этого не замечают: работает и ладненько.
Расскажите пожалуйста про ваших пользователей, да побольше. Я буду это перечитывать в трудные минуты.
no subject
Date: 2011-02-07 06:45 pm (UTC)бггг, K Вы такой N.
как тулкит Foo определяется плохим, негодным? на основании примера 1 диаложика от фиг знает кого в жижечьке. это дает автомагически несколько преимуществ:
1. всегда точно знать на будущее, не пробуя написать ни 1 строчки на Foo, что Foo--поделка жалких, ничтожных пионеров.
2. считать любой другой тулкит идеологически похожий на Foo--поделкой, может даже еще хуже Foo.
3. никогда не пробовать ничего нового и/или не от любимого вендора.
Расскажите пожалуйста про ваших пользователей, да побольше.
ооо! у меня такие пользователи, но я их Вам не покажу!
вот например, часто бывает как пишут:
I was going to stick with your foobar software but I realized last night that it has the ok button (sorry, didn't remember which one) in the options dialog that is almost 2 pixels wider than I prefer. Can I have my refund please?
no subject
Date: 2011-02-05 07:35 pm (UTC)Доктор, теперь Ваша очередь кунфу показывать... А то Вы сначала хотите галку на кнопке, а потом жалуетесь, что некрасиво получилось.
no subject
Date: 2011-02-07 05:38 pm (UTC)no subject
Date: 2011-02-07 06:11 am (UTC)Вы здесь неявно постулируете, что главная цель развития десктопного гуя - сделать так, чтобы свистелки и перделки громче свистели и пердели. Всякому же пользователю гуя совершенно очевидно, что это не так. Ему очевидно также, что программисты в этой области уже давно сделали всё, что от них могло потребоваться, и теперь дело за экспертами в области эргономики.
no subject
Date: 2011-02-07 05:45 pm (UTC)no subject
Date: 2011-02-09 03:10 am (UTC)no subject
Date: 2011-02-09 09:53 pm (UTC)oncontextmenu погуглить
> Чтоб стабильное было, неконфликтное с системным.
Чтоб стабильное было - WM_RBUTTONDOWN погуглить
> Равно как и тултипс сложнее чем просто два слова текстом с фиксированным системным фонтом.
Ну вы же где-то такой тултипс видели, раз спрашиваете? На веб сайте, наверное, каком-то? Ну вот там и
стырьтепосмотрите, благо у JS все кишки наружу.no subject
Date: 2011-02-09 11:13 pm (UTC)>Ну вот там и стырьте посмотрит
то есть прийдется накручивать кучу кода на джаваскрипте.
и так на любой чих и везде и всюду имитировать то что в виндах давно реализовано для нормальных средств разработки.
Как например обрабатывать локальные файлы?
опять таки - без датагрида ни одна бизнес апликуха не обходится - а в html/javascript с этим очень плохо. Особенно в IE. и приходится в лучшем случае все время долбиться в сервер обходя проблемные места. Да и датагридов толком нету - их штуки три всего.
та чего хорошего в вебных технологиях? крайне сложно съимитировать банальное дектопное приложение. про производительность вообще речи нет. громоздить кашу из помеси джаваскрипта и кода писанного на чем то другом?
В чем пойнт - кнопочки и там и там не проблема.
no subject
Date: 2011-02-10 05:54 am (UTC)[Вежливо]: А вы вообще читаете, что комментируете?
>>Ну вот там и стырьте посмотрит
>то есть прийдется накручивать кучу кода на джаваскрипте.
и так на любой чих и везде и всюду имитировать то что в виндах давно реализовано для нормальных средств разработки.
Не-текстовый тултипс? "Давно реализован"? Ну-ка расскажите, для каких это средств разработки он "давно реализован".
>Как например обрабатывать локальные файлы?
[Вежливо]: Погуглите функцию fopen(). Будет что-то непонятно - спрашивайте обязательно, не стесняйтесь.
> та чего хорошего в вебных технологиях?
Вы мне что, предлагаете переписать весь пост специально для вас лично, в ответе на комментарий? Ннууу... я готов. Высылайте пэйпалом на ЖЖ-шную почту предоплату $199.90 за первые 2 часа, на остальные $99.95/h я вас забиллю по факту.
> крайне сложно съимитировать банальное дектопное приложение.
[Бодрым, оптимистичным тоном]: Вот как раз для тех
чайниковпрофессионалов в других областях человеческой деятельности, которым "крайне сложно" вставить в окно IWebBrowser, и написать три кейворда в .html, и существуем мы - программисты! Всего за $90/h... А, впрочем я вам уже об этом писал.no subject
Date: 2011-02-26 09:52 am (UTC)no subject
Date: 2013-05-09 02:39 am (UTC)no subject
Date: 2013-05-09 04:07 pm (UTC)2) Ващще-та это Java, да? Java не пойдет, я не пишу одноразовые поделки на конкретного юзера, я пишу крупнотиражные программы. Тем более там какой-то Tomcat упоминается. Сомнения у меня, что всё это
зачеркнутоможно впихнуть в один standalone самодостаточноный .exe файл размером 200Kb.