пятница, декабря 26, 2014
Игрушечка-9 или Sharing-2
И всё бы шло своим чередом, но на ребят из Shazam напал зуд рационализаторства. Программка, может, и лучше стала работать (как они сами говорят), но формат данных для обмена они поменяли. Раньше обычным текстом писали типа “Я только что прослушал «С чего начинается родина» от Кобзона” на разных языках, теперь же выдают нечто вроде вот этого, без всякой локализации. Как из этого получить данные трека, неясно. Не парсить же страницу… Обращение в суппорт Shazam сделать как было принесло радостный ответ с уверениями, что как только разгребут завалы писем, так сразу моё и прочитают. Неделя прошла – пока не прочитали.
Так и пришлось (другой-то такой программки и нет) парсить страницу по адресу, благо, страница оказалась небольшой и данные не закопаны глубоко (хотя, резервы есть и любители подковать блоху не переводятся не только на Руси).
Но основной-то подвох заключался в другом – изменили не только состав информации на обмене, но и тип объектов, которые программка отдаёт по шарингу. И никому, как водится, об этом не сказали. И самому об этом узнать непонятно как.
Сделать обмен в эмуляторе телефона под отладчиком не получается – на эмулятор нельзя поставить программу из магазина. Сделать обмен на настоящем телефоне тоже не получается – программка использует SQLite, вследствие чего компилится под платформу x86, а Студия не представляет, как такую конструкцию в телефон засунуть. Так и пришлось писать специальное «универсальное приложение» для изучения шаринга. Попутно выяснилось, что на телефоне отладчик студии бесполезен – после запуска обмена с приложением отладчик от него отцепляется. На десктопе, правда, ничего не отцепляется, но и Shazam здесь ещё не обновили…
В итоге пригодились старые верные способы “отладка методом пристального взгляда” и “исследования протоколов работы”. Получилось достаточно универсально, чтоб и других умников-рационализаторов охватить по возможности.
В общем, слушаем радио дальше…
четверг, октября 16, 2014
Игрушечка-8 или Windows 10
На втором же шаге выяснилось, что одна из SettingsFlyout, использующихся для настроек программы, не желает работать - другие вполне себе работают, а эта молча не показывается вовсе.
После запуска программки на windows 10 под отладчиком на проблемной страничке прямо в конструкторе получаю ошибку с сообщением "XAML parsing failed.". Вот и здрасьте...
Бля!!! Дело оказалось в задании значений для комбобокса:
<x:Int32>50</x:Int32>
<x:Int32>100</x:Int32>
<x:String>100</x:String>
Игрушечка-7 или Локализация-2
среда, июля 30, 2014
Как у всех…
Давно с прискорбием констатирую, что качество программного обеспечения (ПО) постоянно снижается (говоря “толерантно” - не улучшается). Добавят в программу (операционную систему, инструмент управления и т.д.) новое средство, свойство и т.п. – и с ними новые ошибки. А старые исправлять – недосуг, надо вперёд мчаться, как маркетинг и экономическая модель велят.
В итоге может случиться всё, что угодно. Например, самая супер-распупер ОС Windows 8.1 на моём десктопе временами может вывести из себя и не пустить обратно… Загрузка из выключенного состояния до рабочей обстановки (запустить ФАР, Студию, браузеры с 15-20 окнами, OneNote и некоторые мелочи) занимает минуты полторы или две. Та же обстановка из состояния “сна” получается через 5 минут или больше. Ну, не переносят многие программы этого сна, трудно просыпаются, как с похмелья или после тяжёлых наркотиков. И ладно бы это были подозрительные примочки типа Punto Switcher, но это и MS-мышка, VS 2013, и ИЕ 11, и Ёксель 2013, и Хром. Их всех приходится, как правило, перезапускать. И такое не только после “сна”, но и после 30-40 минут простоя. Эти ребята, похоже, думают, что кроме планшетов и телефонов других компьютеров не осталось. Остались ещё десктопы, и не надо на них экономить без моей просьбы, засовывая “нормальные” программы в состояние Suspending, как метрошные игрушки.
Большой Брат, фиг ли…
Равняются на него, Большого, и братья поменьше. Например, есть такая программка μTorrent – всегда считал её в некотором роде образцом: маленькая, ресурсы почти не жрёт, сколько заданий ей ни подкинь, как бы плохо ни работала сеть – программка методично исполняет свою работу и рано или поздно – иногда и через месяц-два - файлы у тебя будут. Постепенно, с добавлением новых фич, типа рекламы всякой дряни, “встроенного” проигрывателя и много чего ещё не менее полезного, ресурсы стали пожираться весьма заметно. “Усовершенствовали” также алгоритмы работы с полученными данными – запись на диск, кеширование (может, ещё чего-то, но эти видны невооружённым глазом).
В итоге все эти “доработки” – сейчас версия 3.4.2 (может, также во взаимодействии с “восьмёркой”) - приводят к зависанию на заданиях сложнее, чем скачивание одиночного файла размером 50 Мб. Начало это проявляться на планшете (там можно ещё списывать на общую слабосильность и медленные “диски”), но вот вчера программка сумела подвесить мне десктоп с 4-ядерным i7, 15 Гб памяти и SATA-диском. А всего-то попросил скачать сериал Клиника (около 200 файлов общим объёмом 49 Гб). И не то, чтобы висит ОС насовсем, но и не качается ничего, только программа место под файлы занимает (100% загрузки диска, за 1.5 часа разместила 10 Гб), и выгрузить программку цивилизованно нельзя, только кувалдой. [На планшете в таком состоянии и кувалдой не получается, приходится hard reset применять…].
То ли это такая “борьба с пиратством”, то ли полная деквалификация разработчиков… Надеюсь, что, всё же, второе – косорукие они, но не самоубийцы же… Может, садисты, правда.
А выручает в торрент-делах, как ни забавно, метрошная программка Torrex. На планшете работает совсем без сбоев (там простые задания), на десктопе же несколько раз останавливалась с сообщением о недостатке памяти (!?) и пару раз завалилась с сообщениями о конфликтах блокировок. С кем она там конфликтует, понять не удалось, но программка сразу возобновляла работу после перезапуска.
суббота, июля 26, 2014
Игрушечка-6 или Списки значений
Хорошо, но мало: справочники растут, а пользы от этого никакой. Первая мысль – сделать на их основе автодополнение для ввода в форме программы. Ура! Одна малость – подходящих под эту задачу контролов как-то не наблюдается ни среди стандартных, ни среди розданных на халяву фирмой Terlerik. Пришлось сооружать такой контрол самостоятельно. Контрол получил гордое имя “TextBoxWithList”:
После ввода с клавиатуры нескольких символов список заполняется подходящими значениями из справочника и выводится на дисплей:
Windows 8.1. | WinPhone 8.1 |
Собственно, всего этого достаточно, если бы не одна малость – на телефонах работает как задумано только на 6” устройствах. На меньших экранах с третьим полем формы случается неувязка: выпадающий список практически полностью перекрывается находящейся в этот момент на экране клавиатурой. Для других полей список перекрывается частично и это не мешает им воспользоваться:
Сразу же возникает мысль использовать suggestions клавиатуры, однако обращение к собратьям эту мысль на время похоронило. Не придумал ничего лучшего, как при появлении списка сдвигать все элементы вверх, для чего пришлось прикрутить к контролу событие VisibilityListChanged, в обработчике которого и двигаются элементы формы:
Вариант с рисованием списка выше поля ввода мне не нравится – и сам контрол надо переделывать, и основная форма ещё больше станет станет различаться в вариантах Windows/WinPhone, от чего Студия свихнётся окончательно...
Игрушечка-5 или Локализация
XAML, который используется для разработки нашей программки, имеет собственные средства для локализации элементов интерфейса. Но не всех, для которых приходится выдумывать собственные средства. Например, вот такой класс пришлось сочинить:
Второй интересный вопрос – где брать локализованные строки. В смысле, чем переводить…Если с русско-английским переводом сильно больших проблем не возникает – программка Babylon Translator (переводчики Google и Bing переводят гораздо смешнее) помогает вполне пристойно, то с переводом на украинский хуже. Babylon делает очень смешно – переводит русские строки на английский, результат уже переводит на украинский. В итоге получаем смесь украинских и английских слов. Хорошо, что существует специальный ресурс pereklad.online.ua, который умеет переводить напрямую, без английского.
На результаты, поставленные рядом (по жизни их рядом нигде не видно, даже в магазине) смотреть довольно забавно:
воскресенье, июня 01, 2014
Игрушечка-4 или Sharing
Достаточно случайно заметил, что некоторые программы могут делиться не только текстами и скриншотами, но и выделенными в них файлами:
Пришлось сделать обработку этих файлов – извлекать из них, если есть, медиа-информацию, и отправлять её на сервис. Благо, такая функция в программе уже была, только применялась для файлов, выбранных File Picker’ом.
При более внимательном рассмотрении выяснилось, что подобный фокус можно проделать также и с использованием “традиционных” файловых менеджеров – Explorer, Far – лишь бы они умели выполнять операцию копирования в clipboard. Для взаимодействия с моей программкой используется переходник – программа Clipboard (“Буфер обмена”):
В обоих случаях запускается обработка группы файлов:
среда, мая 28, 2014
Ничего нового…
Возился с “живыми плитками” в “универсальном приложении”, по ходу дела пришлось немного переделывать картинки, использующиеся для тайлов и прочих эмблем-заставок.
Всё шло хорошо до момента сборки пакета для телефонного магазина (пакет для магазина Windows собрался без приключений). Телефонная сборка не удалась с сообщением "Ошибка 20: манифест приложения ссылается на изображение …, которое не имеет кандидата в главном пакете приложения." или "APPX3210: App manifest references the image … which does not have a candidate in main app package.". Выяснилось, что к такому приводит использование “визуального редактора” манифеста, который “помогает” выбрать файл для графического ресурса. При этом файл переименовывается и иногда может записываться в папку телефонного приложения. Если же путь к файлу написать руками, никаких переименований-перемещений не будет, а работать программка будет и так.
В проекте для Windows такого прикола нет, в итоге общая папка картинок для тайлов выглядит так (файлы с суффиксом .wp телефонные, остальные для windows):
Собственно, ничего необычного: здесь переименовали, там об этом позабыли, а тут - рыбу заворачивали (©).
Если всё же удалось в передрягу с телефонными файлами попасть, надо переименовать файлы взад (убрать .scale-100), удалить папки \bin и \obj, переименованные файлы включить в разделяемый проект.
воскресенье, мая 25, 2014
Игрушечка-3 или Универсальные приложения.
Модное направление - как бы из одного кода получать приложения как для Windows 8.1 - десктоп, планшет – так и для смартфонов под Winphone 8.1.
Что называется, уговорили, черти красноречивые… Пришлось запустить вторую версию программки, теперь в технике “универсального” приложения.
Microsoft для изготовления таких приложений выпустила специальное обновление для Студии 2013, которое, в общем-то, нормально в работе помогает - шаблоны проектов, ссылки на общие файлы, конвертация предыдущих проектов и т.п.
Самое большое, что пришлось переделывать – это вызов страниц типа “About program”, “Settings” и т.п. В предыдущей версии (для Windows) программы для этого использовались страницы типа SettingsFlyout с вызовом через системные средства:
В телефонном API таких средств не находится, поэтому пришлось делать отдельные страницы типа Page и запускать их через системное меню:
Самое крупное, до чего не додумались почему-то в Microsoft – это условная компиляция XAML, наподобие #if … #endif в C#. Очень скоро выяснилось, что без этого жить сильно сложно - внешний вид в win- и wp-приложениях может (иногда и должен) сильно различаться: расположение и оформление контролов, даже разный их набор… Можно, конечно, разрулить кодом, но тогда зачем XAML?
Хорошие ребята, всё же, до нужного решения додумались - XAML Conditional Compilation. C этим решением возможны конструкции наподобие такой:
Студия, правда, не сильно это понимает, талдычит об ошибках там и сям и неправильно рисует внешний вид страниц в конструкторе. Иногда приходится по-разному называть контролы - по мнению Студии, имена используются дважды… Увеличивается количество строк в ресурсах для локализации… При сборке приходится дополнительно запускать очистку решения - но эти неудобства перекрываются тем, что не нужно писать массу "художественного" - для отрисовки - кода (которого и без этого хватает).
Выяснились некоторые другие проблемы отрисовки на телефоне некоторых элементов – AppBarButton, ComboBox.
Ещё выяснилось, что “просто так” шрифт для разных телефонов не масштабируется. Иногда на большом – шестидюймовом - телефоне можно некоторые надписи и не рассмотреть.
В случае надписей “при полях ввода” достаточно установить стандартный стиль:
Для “заголовков”, которые хочется видеть “пожирнее”, стили нужны разные:
В итоге получается достаточно пристойно на разных устройствах. Становится хуже, если начать крутить в настройках телефона размер шрифта - можно на максимуме получить наползающие друг на друга строки и т.п. Как с этим бороться - ХЗ. Скорей всего, и не стоит: которые крутят на максимум - ССЗБ.
В связи с малыми размерами телефонов пришлось добавить ещё один способ ввода регулярных выражений – загрузку из текстового файла (попытка набить с клавиатуры закончилась на втором переключении на спецсимволы…). Файл со всеми актуальными - известными мне на сегодня - выражениями повесил на сайт с описанием программы. И с планшета, и с телефона получилось этот файл загрузить на устройство и прочитать текст.
Гораздо смешнее оказалась ситуация с получением данных о проигрываемой музыке от других программ. Этот режим стал для меня лично основным режимом использования программы: слушаю на планшете, например, калифорнийское джазовое радио через турецкую программу RADYO, периодически нажимаю кнопку шаринга и отправляю данные на Last.fm. Буквально 4 движения-нажатия. Набралось несколько и других программ, через которые иногда слушаю музыку.
Во второй, универсальной, версии, расширил перечень принимаемых при обмене форматов в попытке получить дополнительную информацию. Получилось извлечь нужную информацию из данных от программ jamendo и 22tracks, в которых тоже есть неплохая музыка. Но всё это в Windows-окружении.
В телефонном магазине, как оказалось, музыкальных программ, которые обмениваются по стандартному протоколу, практически и нет.
Те программы, аналоги которых на Windows работают как требуется, для телефонов либо отсутствуют, либо обмениваются только “текстом” с адресом страницы. Обмен в "нормальном" виде, с информацией о треке - только с Твиттером и Фейсбуком, чистый хардкод.
В принципе, для телефонов есть пара клиентов Last.fm, передающих информацию о проигрываемых треках, однако не все проигрыватели пользуются стандартными средствами и скробблеры их не понимают. Так что, для статистики на last.fm они потеряны.
Из функций программки, в итоге, телефону достаются только ручная набивка данных в форме и скробблинг по файлам на диске. До появления программ, разработанных под WinPhone 8.1, вовсе не обязательно “универсальных”.
Страница с описаниями - https://sites.google.com/site/dyakovkm/lastfmuniwrite
Программы можно взять в магазинах:
пятница, апреля 18, 2014
Игрушечка-2 или LastFM Writer
Некоторое время назад начал делать программку для ручного скробблинга под Windows 8.1.
За прошедшие 3-4 месяца ничего, по большому счёту, в этой области не изменилось (если не считать появления плеера Duet with Last.Fm, который сам играет, сам и скробблит), то программка получила несколько дополнительных функций, надобность в которых возникла у меня самого.
Во-первых, добавил возможность извлекать информацию непосредственно из аудиофайлов. Использую в сценарии, когда запускаю проигрыватель на папке с аудиофайлами, а скробблинга по какой-либо причине не происходит. Обрабатываются, правда, только mp3- и wma-файлы – других WinRT не знает (или хорошо знания скрывает).
Во-вторых, добавил возможность принимать от других программ (по стандартному механизму “шаринга”) текстовые строки и выделять из них информацию по аудио-треку при помощи регулярных выражений. Использую в сценарии, когда какая-то мелодия, например, в радиоприёмнике, распознаётся программой Shazam, а результат передаётся в мою программку:
На случай, если появится какая-то другая программа распознавания аудио или если потребуется обмен данными ещё по какой-то причине, добавил возможность ввести и хранить любое количество собственных регулярных выражений, выделяющих из строк нужную информацию.
Как для любой порядочной программы, пришлось завести сайт с описанием, на который понаставил ссылок в самой программе .
Чуть ли не самое смешное в процессе разработки и публикации программы – тестирование перед отправкой и в магазине. При запуске тестов после сборки (Студия 2013 имеет соответствующую примочку) на рабочем десктопе регулярно получал отрицательный результат при тестировании перехода в suspend. Все остальные проходят, при самостоятельном запуске программки suspend на месте, а вот в тестах – хоть убейся. Водрузил на планшет express-версию Студии, делал сборку и тестирование там – тест проходил успешно. По прошествии некоторого времени, правда, глюк прошёл – и на Windows ставились обновления, и на Студию – что-то исправило ситуацию…
При прохождении тестов в магазине труднопреодолимым местом оказалась любовь тестеров к запуску программы на расхлябанной системе – в частности, с неверно выставленным временем. И даже не сам этот тест труден (нужно, конечно, и в такой ситуации вменяемо работать), а оказалось очень непросто обратить внимание тестеров на то, что программа в сообщении призывает поменять время на правильное. И даже сочинить раздел “Системные требования” на сайте программы.
Второй камень преткновения – любовь тестеров к переносу пароля из описание в поле логина могучим методом copy/paste, который часто делает не то, на что надеялся тестер. В результате программа возвращается на доработку в сопровождении рекомендации проверить, не закончился ли срок действия пароля на сервисе и прочей чепухи. Кончилось тем, что завёл на сервисе специальную тестовую учётку, а в программке подставляю для неё правильный пароль. В итоге тестер может переносить пароль любым самым бессмысленным способом - аутентификация на сервисе проходит нормально.
Собственно, на этом в развитии программки решил остановиться. Появятся потребности – начну версию 2.
четверг, апреля 17, 2014
Update-юмор не иссякает…
Только-только порадовались новым супер-пупер изменениям в Windows 8.1 (и в сервере), как сегодня система под угрозой репрессий (сам не поставишь, насильно поставим чуть позже) стала требовать установить патч KB2919355 (в котором, собственно, и были те самые супер-нововведения). Только нынешний, в отличие от того, который ставился меньше двух недель назад, имеет размер всего в 2.5 Мб.
Стал присматриваться в надежде понять, в чём хохма-то – никакой разницы не видно: описание одинаковое, ссылаются на одну и ту же KB2919355. Похоже, накосячили с основным патчем, решили по-быстрому и втихаря выпустить заплатку на патч… Естественно, без перезагрузки дело никак не обходится…
При дальнейшем рассмотрении выяснилось, что патч зачем-то по-разному называется в разных ОС:
На сервере – вот так (не очень понятно, правда, кто там “обновлённая”) :
На планшете с x86-версией – не менее гордое название:
На десктопе с x64-версией – длинно и буднично:
Такое разнообразие, наверное, чтоб админам скучно не было при поисках в списках установленных исправлений…
среда, января 29, 2014
Игрушечка.
Конечно, основной способ пополнения музыкальной статистики – “скробблеры” для медиаплееров и до появления планшета под Windows 8 их вполне хватало и программкой пользоваться приходилось довольно редко. Но при попытке найти скробблер для metro-приложений был весьма озадачен их полным отсутствием. На WP8 есть, а на Win8 – нету… Даже популярная Shazam для распознавания мелодий функции отправки данных на сервис не предлагает. Смешно…
Пришлось поупражняться немного в сооружении “магазинных” приложений для Win8.1 и с какой-то попытки адаптированную под metro-интерфейс программку приняли в магазин Windows под гордым названием LastFM Writer. Ну, приняли – и хорошо, может, кому пригодится…
Сегодня получаю письмо, что программка-то - практически супер-пупер:
Your app "LastFM Writer" has been tested and rated by the BestWindows8Apps.net. Feel free to use Editor's pick award on your web page to show your visitors how highly we value your app.
Ну вот, так и придётся какие-то усовершенствования вносить…
четверг, января 23, 2014
И снова про ЭТО.
Включил сегодня компьютер и обнаружил, что процессор используется на 60% процессом с гордым именем explorer_3.exe. ProcessExplorer рассказал, что в параметрах процесса есть УРЛ какого-то сайта. При внимательном рассмотрении в папке C:\Windows обнаружились ещё 2 эксплорера – “_1” и “_2” вместе с bat_start.exe (эта оказалась кривой и при запуске упала с сообщением о несловленном исключении в .NET, чем, собственно, себя и выдала). Все имеют одну дату создания и ни одного опознавательного знака типа копирайта или ещё чего-то. Вспомнил, что вчера “устанавливал” гаджет для мониторинга батареи из файла BatteryMonitor__2348_i281263245_il16641.exe. Правда, никакой гаджет в итоге не установился (остался zip-файл с ним на рабочем столе), зато установилась кучка какой-то хрени:
При этом установщик использовал новый способ маскировки сообщения об установке “подарков” (для меня, по крайней мере – обычно на каждый “подарок” бывает своя страничка - да и станешь разве ожидать на Windows 8 установку какой-то андроидной развлекухи?):
Папки этих программ в C:\Users\...\AppData\Local\ имеют ровно такую же дату создания, что и “эксплореры”, и больше папок/файлов с такой датой на дисках не обнаруживается. Значит, отсюда троянец и заполз… Какого-то вреда от троянца не находится, сильно похоже, что на халяву пользуются процессором – в одной из папок троянца есть подпапка data7 с файлами, в которых есть строка “http://upload.voga360.com/mu3/…”. Bitcoin’ы добывают, что ли?
Интереснее другое: на компьютере имеется как встроенная “антивирусная” программа “Защитник Windows”, так и “антитроянская” программа
И ни одна
Похоже, дело кончится выбрасыванием всей этой пафосной “защитной” хрени и использованием парочки ClamWin + ClamSentinel. Там, по крайней мере, есть соответствующие настройки.