Доклад о Realm и самописной бесплатной синхронизации данных Realmius

Выступил на DevPro 2017.
Сделал доклад про новую мобильную БД Realm и как мы написали для неё альтернативный механизм синхронизации с хранением данных в SQL Server.

Всем рекомендую использовать как Realm, так и Realmius :) У нас есть даже документация!

А слайды и видео, как обычно, ниже :)

Включение упавших тестов в email-уведомления на TFS 2015 (scripted builds)

В TFS 2015 появилась новая система конфигурации сборок, которая в заметно лучшую сторону отличается от предыдущей системы, основанной на XAML. Конфигурирование билдов и создание собственных шагов сборки стало намного проще, и для этого больше не нужно обладать космическим набором знаний :)

Однако система новая, и поэтому некоторыми возможностями, которые были встроены в предыдущую версию, она пока не обладает.
С одной из таких проблем мы сегодня и разберемся.

Предыдущая система сборок предоставляла подробные email-оповещения о свалившихся тестах. В этих письмах, в частности, были перечислены упавшие тесты. В случае интеграционного тестирования это очень удобно: тесты зависят от внешних систем и поэтому могут иногда падать, и по списку непрошедших тестов легко диагностировать проблему и решить, нужно ли её исправлять, или это «типичная» проблема внешних систем, которая «пройдет» вместе со следующей сборкой.
Continue reading

Интеграция Xamarin.Forms в существующие проекты iOS (и утечки памяти)

Xamarin.Forms, о котором я недавно писал, отлично подходит для применения в новых приложениях и прототипирования нового функционала. Однако даже и в существующих больших приложениях могут появится новые требования, для реализации которых оптимально воспользоваться Xamarin.Forms.
Так получилось и в нашем случае, и в целом внедрение прошло гладко, кроме одной небольшой проблемы, обнаружившейся на самом последнем этапе. Об этой проблеме я и расскажу :)
Continue reading

Здравствуй, Xamarin.Forms, или пост, запоздавший на 4 месяца

Черновик этой заметки был написан еще в июле, но по непонятным причинам забыт/отложен/отправлен на доработку. В свете свежеприобретенного опыта, я решил таки достать его из запасников истории и представить на свет божий :)

Меньше месяца назад, в июне 2014-го (да, заметка писалась еще в июле :)) ребята из Xamarin выпустили то самое, что от них ожидалось очень давно. Это — фреймворк для построения кроссплатформенного UI — Xamarin.Forms.
Такое решение — золотая середина между html-подобным интерфейсом, который выглядит ненативно на всех платформах, зато обладает на 100% общим кодом; и изначальным подходом Xamarin — где UI на каждой платформе полностью уникальный, отлично и естественно смотрится на всех устройствах, но требует разработки «с нуля» под каждую платформу.
Идея Xamarin.Forms в том, что многие базовые контролы пользовательского интерфейса так или иначе реализованы во всех системах (поддерживаются iOS/Android/WinPhone). Действительно, кнопки, надписи, поля ввода и переключатели есть везде. Xamarin выделил этот общий набор, собрал воедино все их свойства, и назвал эту абстракцию Xamarin.Forms. Из получившихся платформо-независимых классов можно строить интерфейс, а в результате под каждую платформу будет сгенерирован вполне естественный нативный UI с использованием «родных» компонентов.
Делать обзор функционала Forms через 5 месяцев после релиза слегка глуповато, так что я просто остановлюсь на некоторых плюсах и минусах, с которыми я успел столкнуться в процессе полу-продакшеновой практической эксплуатации Xamarin.Forms.
Continue reading

NoSQL против реляционных СУБД в задаче Entity-Attribute-Value

Задача хранения в базах данных схемы типа Объект — Множество Атрибутов — Значения атрибутов давно стала «классической».
В рамках реляционных СУБД, простейшее решение выглядит как-то так (anti-pattern detected!):

    public class Product
    {
        public int Id { get; set; }
        public List<propertyvalue> PropertyValues { get; set; }
        public string ProductTitle { get; set; }
        public decimal ProductPrice { get; set; }
    }

    public class Property
    {
        public int Id { get; set; }
        public string Title { get; set; }
    }

    public class PropertyValue
    {
        public int Id { get; set; }
        public Property Property { get; set; }
        public string Value { get; set; }
    }

И это не учитывая потенциальной типизации значений свойств (некоторые могут быть числовыми, другие — датой/временем и т.п.) и полагаясь на ORM для генерации таблицы связи много-ко-многим (Product/PropertyValue).
Continue reading

Видеозапись семинара по итогам конференции DevCon-2014 в Rubius

Мы в Rubius очень давно не проводили семинары (с последнего, кажется, прошло уже 5 месяцев), поэтому решили восполнить пробел и поговорить о перспективах развития технологий и разработки на платформе Майкрософт.
Я кратко презентовал наиболее запомнившиеся мне моменты с конференции DevCon-2014, а потом мы достаточно бурно обсудили, что со всем этим технологическим счастьем делать и как дальше жить :)

Мои извинения за ужасный звук :)

P.S. презентацию выложу по запросу, но особой необходимости в ней я не вижу.

Universal App — кроссплатформенное счастье с #ifdef’ами и рефакторингом

Еще на конференции Build 2014 майкрософтовцы рассказали о новом типе проектов — Universal App. Естественно, на прошедшем DevCon 2014 я постарался разузнать побольше об этом типе проектов, и как он может помочь при разработке под iOS/Android.

Microsoft традиционно акцентирует внимание на том, что UniversalApp поможет повторно использовать кода между WinPhone и WinRT приложениями, не слишком афишируя то, что начиная с Xamarin 3.0 этот подход сработает и для iOS и Android приложений.
Давайте попробуем и посмотрим, что же у нас получится :)
Continue reading

Дружим Android и Windows 8.1 по ADB (особенно с китайскими устройствами)

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

Проблема была в банальной невозможности подключиться по adb к стародавнему Android-планшету — CUBE U9GT2 :) Не нужно искать в этом приступы геронтофилии — как оказалось OpenGL на процессорах MTK работает слегка странно, и доставляет проблемы нашему приложению, поэтому дебаг был жизненно необходим :)

После подключения к компьютеру на Win 8.1 этот старичок категорически не находился в выводе adb devices, а значит и отладка на нём была невозможна.
Проблема разделилась на 2 части:
Continue reading

Доклад на DevPro-2014

Сегодня прошла вторая конференция DevPro, организованная компанией Rubius.

На ней я выступил с докладом «Кроссплатформенное приложение за 15 минут или Беды и победы мобильной разработки».
Посмотреть презентацию можно на СлайдШаре:

Исходные коды демо-приложения (вместе с iOS версией).

Лучи благодарности организаторам и всем слушателям — очень приятно было находиться в атмосфере мотивированных и заинтересованных профессиональных коллег :)

Жутко обрезаная видео-версия доступна на youtube:

P.S. Желающим посмотреть мой доклад 2013 года — добро пожаловать по ссылке.