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

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

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

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

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

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

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

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

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

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


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

Игрушечка-14 и Shazam

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

Какое-то время назад новый владелец сервиса Shazam зачем-то взял и удалил из магазина Windows помянутый старенький клиент. С моего компьютера, правда, не удалил (не смог?), но работать клиент стал заметно хуже и один раз впал в кому, а вывести его из неё средствами Windows не удалось (сброс не помогал, переустановить нельзя). Пришлось восстановить систему из бекапа.

Все эти приключения подвигли на изучение проблемы и поиск решения, которое нашлось, как ни удивительно, на github. И даже не одно. Правда, для моих целей потребовались доработки (достаточно простые), в результате получился консольный клиент сервиса Shazam, который передаёт данные в буфер обмена, из которого моя программка отправляет их на Last.fm.

Ура! 



воскресенье, октября 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 после приложения некоторых усилий по доведению внешнего вида до приемлемого (что-то, правда, так и не удалось сделать, но дарёному коню даже в зубы не смотрят, а тут пришлось бы сосем уж в неприличные места залезать…) был установлен на страницы программы и сборка отправлена в магазин. 

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