Показаны сообщения с ярлыком UWP. Показать все сообщения
Показаны сообщения с ярлыком UWP. Показать все сообщения

четверг, августа 29, 2024

Научно-технический подвиг 😉

 Есть у меня программка, написанная в технике UWP, которой пользуется некоторое количество людей, в т.ч., я сам. Писалась довольно давно и местами выглядит архаично. Главное, в ней используются контролы "американской" фирмы SyncFusion. Часть из них получилось заместить, но остался контрол для рисования графиков - довольно мощный, но и столь же тормозной.

Сама платформа UWP находится в предсмертном состоянии - MSFT всё пытается её закопать, но наточить лопату не получается. Да и Windows тоже как-то хлипко выглядит - спасибо крысёнку, MSFT даже договорилась до каких-то неведомых санкций в отношении всех россиянцев.

Так и пришлось пускаться в размышления, что же  предпринять, чтоб не остаться без программки и всего прочего.  Кончилось тем, что переделал программку под Авалонию, заодно заменил chart-систему на ScottPlot:  нужная мне функциональность на месте, скорость рисования - очень высокая. В итоге программка работает как на Windows-, так и на Linux-компьютерах и даже синхронизируется по данным между ними с использованием клиента MEGA.

Единственное, что не получилось - запустить программку на планшете Samsung под Windows x86 - Авалония не рисует на нём шрифты, только линии (границы элементов). Но на планшете по-прежнему работает uwp-версия.

Осталось другие программки, которыми сам пользуюсь, переписать, и нам не страшен серый волк msft со своими санкциями.

воскресенье, декабря 26, 2021

Игрушечка-15, Shazam и командная строка

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

В процессе выяснилось, что сделать всё это не так уж и сложно, хоть и не без ухабов и шероховатостей (ну, у MS гладко только в примерах бывает) – например, в UWP-программе нет возможности динамически, в процессе исполнения, скрыть splash-экран или изменить размер окна приложения. Очень уж напрягает этот моргающий рисунок – похоже, изобретатели вовсе не предполагали запуска uwp-программ не из иконки на стартовом экране. Тем не менее, костылики для других способов запуска всё же приложили, за что спасибо. Наверное.

В итоге трудов получилась возможность вызвать программку командной строкой вида

Lafm.exe --параметр <данные> ...

Подробности про параметры – на странице программы.

В клиенте Shazam потребовалось добавить соответствующие средства – отключение вывода информации в буфер обмена и вызов программы LastFm Writer с нужными параметрами – параметры --NoClipboard и --lafm соответственно. Подробности – на странице программы.

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

Следующим действием, вероятно, должна стать автоматизация запуска самого процесса “шазаминга”…


воскресенье, октября 31, 2021

Импортозамещение - 3.

 Продолжаем изучение возможностей обходиться без "фирменных" элементов в UWP-программках. Такие элементы иногда вполне неплохие, но вот "фирмы" бывают разными - к примеру, могут внезапно присоединиться к санкциям против государства, в котором тебя угораздило родиться и жить. Много чего могут…

На нынешнем этапе в деле замены на open-source пришла очередь контрола RadDataGrid фирмы Telerik. Ничего плохого не могу сказать про саму фирму, но политика есть политика - рано или поздно она за тобой придёт.

В качестве кандидата на замену выступает DataGrid из пакета Windows Community Toolkit. Несомненным преимуществом контрола является его бесплатность и открытsq код. Остальные его недостатки можно преодолеть путём высказывания некоторых магических слов в адрес разработчиков, сопровождаемое плотным сидением за монитором и клавиатурой. В процессе выяснилось, что отсутствие у контрола врождённой встроенной сортировки по колонкам исправляется буквально десятком строк кода. Отсутствие у колонок типа (они все там DataGridTextColumn) и параметров форматирования (типа CellContentFormat или FormatString) вполне компенсируется конвертером FormatStringConverter из того же Community Toolkit. Также на достаточно приличном уровне находится способность контрола автоматически выставлять ширину колонок. Конечно, среди отображаемых данных обязательно найдётся строка большой длины и вся табличка станет шире монитора, но программа при этом не валится.

На совершенно аховом уровне  - внешний вид контрола. Для раскраски совершенно не воспринимаются никакие "тематические" цвета наподобие {ThemeResource SystemChromeHighColor}, только константы типа White, Gray и т.п. В результате раскрасить строки в альтернативные цвета не получается, только "вырвиглаз" или смена цвета шрифта на серый (всякий другой выглядит плохо при смене темы dark/light). Про раскраску границ ячеек и всего контрола - только магические слова.

Но с получившимися табличками жить можно:




понедельник, июня 21, 2021

UWP vs WPF

 Вот такую диаграмму (9 графиков) изображает моя UWP-программка.



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

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

А вот для WPF существует «встроенный» подходящий с первого взгляда грид, а пакетов для рисования графиков можно найти даже два, что удивительно на фоне того, что MS платформу WPF не развивает практически с самого рождения и там нет много чего из того, что есть в UWP.

Такая вот дилемма.

среда, апреля 07, 2021

Импортозамещение-2


Предыдущий пост был про начало работы по замене контролов конторы SyncFusion на что-то более пристойное и, главное, поддерживаемое производителем.

Вторым шагом эпопеи стала НИР по замене контрола SfDataGrid для табличного вывода данных. Контрол с первого взгляда неплохой, до накопления в программе довольного большого количества данных (500-1000 строк в таблицах) работал сравнительно быстро. Со временем работа заметно замедлилась, а на слабых компьютерах стала и вовсе раздражать. Никакие предложенные производителем способы ускорения работы так и не помогли. Дополнительно выяснилось, что с увеличением сложности вёрстки страницы, на которой расположен контрол, отключается сортировка по столбцам, что сильно сказывается на возможности анализа данных пользователем. Да ещё и "санкции"… В общем, сильно захотелось попрощаться с контролом.

Кандидатов на замену нашлось ровно два - DataGrid из пакета Windows Community Toolkit и RadDataGrid от болгарской фирмы Telerik. Оба денег не просят и по уровню функциональности  показались примерно одинаковыми, однако контрол из ToolKit'а при тестировании оказался совсем уж примитивным и из соревнований выбыл. 

Болгарский RadDataGrid после приложения некоторых усилий по доведению внешнего вида до приемлемого (что-то, правда, так и не удалось сделать, но дарёному коню даже в зубы не смотрят, а тут пришлось бы сосем уж в неприличные места залезать…) был установлен на страницы программы и сборка отправлена в магазин. 

Главное, функциональность (сортировка и фильтрация в колонках таблицы) контрола не отключилась при переносе с простой страницы для тестов на сложные страницы программы. Ура, победа!


 




среда, октября 07, 2020

Попал под санкции или импортозамещение.

Где-то лет пять-семь назад "американская" фирма Syncfusion предложила бесплатную пожизненную  community-лицензию на свой пакет контролов для UWP. Ну, бесплатно же, отчего бы не взять.

По ходу дела выяснилось, что не так уж у них с контролами и хорошо, как в демо-роликах. Пришлось даже поучаствовать в доработках некоторых из них - во время общения с конторой стало понятно, что фирма, скорее, индийская. В частности, поэтому стал присматриваться, чем заменить их контролы, которые использовал в своих программках. В итоге к последнему времени таких контролов оставалось три: SfDataGrid для табличного вывода данных, SfChart для отображения графиков и  SfTimePicker для выбора периода времени.

Пару недель назад "фирма" не пустила меня на свой сайт за обновлениями под предлогом, что она американская, а я – российский, а санкции… В принципе, ходить на сайт уже года два приходилось через прокси и впн, но теперь, похоже, решили забанить по профилю, в котором, вероятно, сказано про Россию. Что ж, хозяева своему слову - дали лицензию, назад забрали, хоть и комьюнити. Ну и ладно, жили как-то раньше без этой "американской" фирмы, и дальше проживём. Другие американские выручат, надеюсь.

Собственно, вот по этим причинам и решил заняться любимым делом наших вождиков, хотя они больше калякают об этом, чем делают.

Первым контролом к замене стал SfTimePicker. Очень криво сделанный и плохо работающий (только в светлой теме, на планшете пальцем проворачивать список значений - изматеришься), но единственный, который удалось приспособить для выбора и редактирования данных типа TimeSpan для интервалов времени – с часами, минутами и секундами. Было как-то странно при поисках - довольно много народу интересуется такими контролами, а к использованию никто ничего не предлагает.

Пришлось городить самому, без особых затей, но со всеми нужными свойствами. В итоге получился контрол, отображающий промежуток времени по заданному формату с всплывающим редактором значения. Можно использовать диапазон времени от нуля до 33 дней 23 час. 59 мин. 59 сек. Редактор, построенный на комбобоксах, работает несравненно быстрее и легче "американского", хоть и не такой "красивый”.