Pull to refresh
26
0
Send message
Да еще и зарегистрированный 24-го апреля :)
Честно говоря, я несколько озадачен. Я использую ReactiveUI в контексте WPF-a и точно помню что при возникновении исключения в подписчике кнопка переставала вызывать команду. Однако, сейчас попробовал воспроизвести ситуацию, и кнопка продолжает нормально работать (вызывать подписчик с исключением) после первого нажатия. Возможно, я ошибаюсь и что-то не так раньше проверял :)
В любом случае, это тихое «проглатывание» исключения доставляет проблемы, так как часто нужно вызывать быструю (без запросов в сеть/базу данных и проч.) логику и это удобно делать через синхронную команду, без костылей в виде асинхронных команд.
В седьмой версии фреймворка обещают сильно изменить команды: сделать нормальную типизацию для синхронных команд, передача Action'a при создании синхронных команд и т.д. Но вот когда седьмая версия выйдет — хз. Никакой информации о дате релиза я так и не смог найти.
Наконец-то дождался статьи на тему команд в ReactiveUI, а то не так уж и много информации о них можно найти в сети (особенно учитывая куцую документацию). У синхронных Reactive-команд есть особенность, о которой в статье упомянуто, но не слишком широко. Речь про «глотание» ошибок, выброшенных в подписчике. В такой ситуации в приложении не происходит ровным счетом ничего, только кнопка перестает реагировать на команду, так как команда завершилась с ошибкой. Максимум что можно увидеть — скромную строчку Exception thrown: 'System.Exception' in ReactiveUI.Test.exe в логе при запуске с дебагом.
В итоге в подписчике синхронных команд крайне опасно вызывать методы, которые могут выкинуть исключения. Любое проскочившее необработанное исключение просто «убьет» команду, не выдав никакого уведомления пользователю, а именно не скрашив приложение в соответствии с принципом «Fail fast».
А ведь исключение может быть выброшено где угодно, в том числе и в методе, который был вызван в методе, который был вызван в методе ->… -> который был вызван в подписчике. Получается надо либо как параноику обертывать код подписчика в try-catch с самим Exception в catch-блоке чтобы иметь возможность хотя бы уведомить об ошибке, либо использовать синхронные ReactiveCommand для самых-самых простых вешей, которые уж точно не выкинут исключений.
Иногда из-за этой особенности приходилось эмулировать асинхронность при вызове быстрого синхронного кода:

CommandDoSomething = ReactiveCommand.CreateAsynctTask(() => { Код, который может выкинуть коленце });
CommandDoSomething.ThrownExceptions.Subscribe(...логирование либо уведомление...);
CommandDoSomething.Subscribe();


Иначе все возможные дефолтные проверки, такие как ArgumentNullException, IndexOutOfRangeException и прочие, при вызове методов из подписчика оказываются бесполезными.
Технически есть один небольшой подводный камень:

ReactiveUI.Fody не добавляет свой weaver автоматически в FodyWeavers.xml. <ReactiveUI/> туда надо добавлять ручками. И если банально забыть это сделать, то приложение спокойно скомпилится, но не будет правильно работать, а разработчик будет голову ломать в чем же проблема, когда вроде бы все правильно написано. Сам несколько раз так попадался :)

Еще раньше была проблема, если в FodyWeavers.xml добавить weaver для ReactiveUI, но при этом ни в одном из файлов проекта не использовать аттрибуты вивера ([Reactive], [ObservableAsProperty]). Такое бывает когда добавляется сразу несколько проектов-заготовок в новый солюшн. Тогда проект не компилился из-за какой-то ошибки. Точно ошибку не помню, но она была, по-моему, не слишком очевидной. Сейчас, кажется, проблема исправлена.
Буквально недавно выбирал домой кресло и столкнулся с неожиданной проблемой отсутствия нормального выбора. Я искал эргономичное кресло с сетчатой спинкой и сидушкой, поддержкой спины, регулировкой ручек, спинки, вылета подушки и.д, а также с подголовников и синхромеханизмом качания. И выяснилось, что в Санкт-Петербурге (вроде не маленький город) совершенно отсутствует выбор подобных кресел. Эргономичные кресла — штуки весьма дорогие и выбирать их следует строго под себя, а для этого надо в них посидеть. И для меня стало неприятным сюрпризом практически полное отсутствие кресельных шоурумов в городе.

Кое-как составил список мест, где есть хоть какой-то выбор «живых» кресел и поехал примеряться. По итогу вышло следующее:
— Кресло, на которое изначально примерялся — Chairman-769 — оказалось полной фигней. ОГРОМНАЯ сидушка, на которой мне с моим вполне нормальным ростом (176 см) было неудобно, очень широко стоящие подлокотники, бестолковый подголовник и абсолютно никакая поддержка спины, которая спиной просто напросто выбивается. Розничная цена этого кресла составляет около 18-19к (хотя его уже ни в одном магазине не найти), в шоуруме, где я его обнаружил, это был последний экземпляр и шел со скидкой 50%, но даже этих денег оно не стоит;
— Посетил салон, торгующий немецкими креслами (салон занимается, в основном, не розничной продажей, а оптовыми заказами на отделку офисов). Там был приличный выбор вполне приличных кресел, но по совершенно безумной цене. Кресло, которое мне понравилось по эргономике, стоило 1300 евро, отчего у меня глаза на лоб полезли, так как выглядело оно довольно скучно и даже не имело подголовника. Другие кресла были менее удобными и с кожаными спинками (что сразу ставило на них крест) при этом по схожей цене. Были там и два кресла российского производства по цене 30-40к. Meh. Одно из них — стул как стул. Ничего, что бы оправдывало такой конский ценник я в нем не нашел. Второе же вообще возмутило — подлокотники у него дребезжали как китайский пластиковые детские игрушки. Девушка-консультант смущенно краснела и опускала глаза от такого;
— Широко известных кресел Herman Miller (Aeron, Embody) так нигде и не нашел для примерки. Впрочем, учитывая их текущий ценник в России, то и шут с ними;
— В каком-то закутке в скромном торговом центре нашел кресла DUOREST с двойной спинкой — вот такого плана по цене около 40к. Меня лично не впечатлило, хотя многие писали что огонь — удобно. Тут все индивидуально и это еще один хороший пример того что надо примерять самому;
— В том же закутке неожиданно обнаружил весьма удобное кресло по адекватной цене. На тот момент оно стоило чуть больше 26к. Порадовало наличие подголовника и очень удобная поддержка спины. Этот поясничный валик оказался отличной штукой, но один единственный недостаток поставил крест на покупке. У этого кресла вертикальная регулировка ручек и спинки последовательная. То есть чтобы опустить ручки на одну позицию вниз их надо сперва поднять на самый верх и отпустить, а уже потом набрать нужный уровень. В случай ручек это не большая проблема, но спинка — другое дело. Для меня самой удобной была верхняя — 4-я — позиция спинки и при попытке встать с кресла, задница подпирала спинку через валик поясничной поддержки и слегка ее поднимала, отчего спинка доходила до крайнего положения и шумно ухала вниз. В случае домашнего использования пришлось бы либо очень аккуратно вставать с кресла, либо регулировать спинку каждый раз. Увы, но эта деталь убила все плюсы данной модели.

После похода так и не получилось выбрать толкового кресла, но последний вариант мне понравился в плане удобства, поэтому я решил поискать похожие конструкции. И в конце концов нашел искомое — Ergohuman Plus legrest. Понравившаяся мне конструкция поясничной поддержки, сетка, 4D-подлокотники (вверх-вниз, вперед-назад, вправо-влево и поворот), нормальная фиксация спинки, ругулировки вылета сидушки, подголовник и встроенная выдвижная поддержка для ног. Так как я собираюсь использовать кресло дома, в том числе и для просмотра фильмов, то подголовник и поддержка для ног — самое оно. И при такой нафаршированности кресло все равно стоит в 2 раза дешевле Aeron'a и в 2,5 раза дешевле Embody. Хотя ценник с текущим курсом все равно адский — обошлось оно мне в 57 тысяч.
К сожалению, привести персональные впечатления пока не могу, так как кресло приедет ко мне лишь через неделю-полторы, но надеюсь на разочарует.

Зы: надеюсь, данная информация кому-то поможет при выборе, так как сам я несколько дней и кучу нервных клеток убил на поиски, писая кипятком от неудобства выбора. Что за дела, в конце концов — хочешь купить хорошее кресло, готов потратить солидную сумму, а ни выбора, ни нормальных шоурумов для примерки нифига нет :/ Кстати, кресло мне пришлось из Нижнего Новгорода — у нас в магазинах его нет, а поставки не скоро.
За прыгающую кнопку «Позвонить» на сайте темплейтмонстра хочется кому-то руки оторвать… А на сам сайт не заходить никогда-никогда.
В его профиле появились кое-какие персональные данные. Судя по ним это он. Какие образом этот товарищ относится к IT — непонятно.
Тоже задался этим вопросом, а потом, внезапно, увидел себя в списке победителей :) Жаль только что на лишь на футболку. Теперь вот думаю, буду ли ее носить :)

Зы: выигрывать в конкурсах всегда приятно, но есть что-то ироничное в выигрыше футболке в конкурсе Mail.Ru
Ну вот, заинтриговали. Теперь хочется узнать что за картинка была :)
Куда уж ниже? Nexus 5 и так продается за 13к сейчас. За такие деньги — лучший выбор.
Все с G+ хорошо, нигде он не провалился. Кому надо — тот пользуется им, кому не надо — не пользуется. Люди редко меняют соц.сети из-за привычек и устоявшегося круга общения, поэтому народ неохотно «перетекает» в G+. Многих просто не устраивает его формат — соц. сети предназначены (и используются) в основном для общения, а общение в G+, надо признать, не очень удобно организовано. Зато очень удобно организовано поглощение информации — настраиваешь желаемые круги и читаешь их вместе, либо переключаясь между ними. Я, например, организовал себе несколько кругов, связанных с проф.деятельностью — Android dev, Web dev, Windows dev и тому подобное, добавил в каждый круг несколько крупных и активных людей или сообществ и читаю теперь свою ленту, состоящую из этих кругов. Весьма удобно.
Удобно, кстати, и то, что в G+ отмечаются все +1, поставленные где угодно — на сайте, на ютубе, в самом G+. Получается своего рода «избранное». Поэтому я стал более активно лайкать и репостить полезную для меня информацию (в vk я редко лайкаю и почти никогда не репосчу).
Так что лично я, в соответствии с идеей автора, разделяю сферы интересов, только использую для этого не одну соц.сеть, а две. VK — для общения и музыки, а G+ для работы. И мне удобно пользоваться обеими сетями. А фейсбук — какашка.
Ну просто святая вещь! Идиотизм навигации по коду на гитхабе изрядно утомлял, а теперь стало очень удобно бродить по проекту.
О, заработало. У меня почему-то до этого по клику на иконке открывалась страница расширения в Web Store.
Отличная штука, все ждал пока кто-нибудь да реализует подобное, уже сам собирался заняться :). А тут удобный интерфейс, интересные фичи. Вот только не могу почему-то зайти в настройки — пункт «Настройки» в контекстном меню не активен.
Поставил апдейт до версии 1.1.0 на Android. В апдейте обещалась подсветка новых комментариев и она действительно есть… вот только работает она лишь когда я уже нахожусь в ленте комментариев. При переходе к статье из ленты постов все комментарии помечаются как прочитанные. То есть подсветка в данной реализации полезна только когда я сижу в ленте с большим количеством комментариев и постоянно их обновляю. Для более распространенного юзкейса (увидел в ленте посты с новыми комментариями -> зашел почитать комментарии) она пока не применима.

Радует изменение цвета рекламы в темной теме и более контрастный цвет шрифта в посте (хотя межстрочный интервал все равно считаю мелковатым).
Я действительно не вижу смысла конкурировать с официальным приложением. Лучше помочь сделать его полнофункциональным удобным клиентом :) Я отправлял список своих замечаний Mofas'у, да и другие хабражители в комментариях и Google Play высказывают свои пожелания, так что уверен, скоро все необходимое появится.
Через год-полтора узнаем
Огромную проблему составляют заказчики, которые хотят «just like on iOS» и все тут. Прямо сейчас занимаюсь разработкой пары android-приложений для одного заказчика, у которого как раз есть подобная зацикленность на iOS. Приходится с боем выгрызать решения по дизайну, нативные для Android.

И вот эта фраза:

Несомненно, подход «один дизайн — много платформ» позволяет сэкономить приличное количество времени

не всегда соответствует действительности, так как то, что на iOS быстро реализовывается нативными средствами, на Android может потребовать создания собственных костылей.
В качестве network library могут посоветовать обратить внимание на RoboSpice. Сам пользовался и остался очень доволен. У них есть демо-приложение в Google Play, в котором наглядно объясняются недостатки стандартных подходов (AsyncTask, AsyncTaskLoader) и преимущества RoboSpice.

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Registered
Activity