16+
Воспроизвести
Видео

Moxy. Как устроена, и как этим пользоваться

Юрий Шмаков
Разработчик в Arello Mobile
  • Видео
  • Тезисы
  • Видео
Droidcon Moscow 2016
22 сентября 2016, Москва, Россия
Droidcon Moscow 2016
Запросить Q&A
Видеозапись
Moxy. Как устроена, и как этим пользоваться
Доступно
В корзине
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
В избранное
6,01 K
Мне понравилось 0
Мне не понравилось 0
Доступно
В корзине
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
  • Описание
  • Расшифровка
  • Обсуждение

О спикере

Юрий Шмаков
Разработчик в Arello Mobile

Фанат Android, занимается разработкой под него уже около 6 лет, как в рабочее, так и в свободное время. Любит решать сложности, встающие перед нами из-за того, что Android — это система для больших и маленьких устройств, для производительных и не очень, для дешевых и дорогих. Любит обсуждать вопросы архитектуры мобильных приложений и подходы к решению проблем, связанных с жизненным циклом и асинхронным выполнением задач.

Перейти в профиль

О докладе

Тематика: ИТ и технологии

Юрий рассказал об их собственной библиотеке для реализации MVP. Тема жизненного цикла и проблем наследования от множества библиотечных базовых Activity вызвала бурный интерес у слушателей.

Поделиться

с докладом Интересная история потому что у нас немножко вы могли заметить изменилось расписание К сожалению Лиза из Америки не смогла приехать в виду права с визой улица проблемы с визой матеуса которой Джуди из Польши проблемы с квартирой и он переезжает сегодня Жаль что не в Россию ну и соответственно мы нашли не менее достойных спикеров и вот у нас Юрий Юра сегодня расскажет нам про Framework Framework Да библи Макси который разработчикам ты являешься верно

Да послушайте очень интересно потому что одно дело Когда нам рассказывает кто-то прочитал документацию на гитхабе Западный библиотеке другое дело когда человек сам написал сам окунулся все проблемы сам разбирается с вашими ищу с которой вы заводите и делает мир Android лучше тебе слово Спасибо за Стараемся сделать жизнь лучше всего Community вот вообще я расскажу про Фокси как она устроена и как ей пользоваться так отлично так вообще Мокси Что такое мог сети библиотека реализующая mvp Android поэтому сначала напомню Что такое нпвп

это шаблон проектирования пользовательского интерфейса А почему именно пользовательского интерфейса они всего приложения Постой По той простой причине что не спится в говорит нам о том как стоит такую большую и важную часть приложение как бизнес-логика он говорит нам только о том что бизнес логика должна жить в модели всё больше про модели он ничего не говорит затем Вью Вью отвечает за пользовательский интерфейс приложения оно отвечает только за передачу команд пользователя в презентер из-за вывод того что он ей скажет View взаимодействует с устройствами ввода-вывода

причём хочется заметить что в качестве устройства ввода-вывода выступает не только дисплее но и например динамик вспышка внешний вид устройства или ещё что-нибудь об этом в качестве View может выступать не только Activity которые интенсивно взаимодействуют дисплеем но и например серверс потому что через него удобно подействует с такими устройствами как динамик и микрофон шины конец презентер презентер это по сути логика пользовательского интерфейса логика в Он знает как отреагировать на события которые произошли во View С какой модели

взаимодействовать Как вернуть результат работы презентера обратного View в принципе довольно легко основать ваш код на мвп даст до этого до этого вобью создать экземпляр презентера или даже лучше заинжектить его туда дагером после чего модель заинжектить в этот презентер и всё mvp готов такого подхода в том что во-первых его очень легко тестировать потому что кот разбивать на логические составляющие И в тоже время в принципе Понятно Что где стоит писать вот а ну

когда мы начинаем писать mvp мы хотели решить еще одну проблему с помощью компания мы стараемся не запрещать Android пиздос пересаживать Activity когда ему нужно то чтобы при повороте экрана он делал всё что хочет Вот и поэтому мы были вынуждены время использовать Лагера Лагера отлично решает свою задачу но очень неудобно и как раз он выпьем мы мы нашли решение этой проблемы Что если отвязать презентера жизненного цикла View то это самое подходящее место для синхронных Вот

и чтобы решить эту проблему мы сформулировали требования к библиотеке во-первых президенте должен спокойно переживать пересоздание View в тоже время созданное в должна подключаться к уже созданным уже работающим презентер а они создавать новый вот и это значит что пьют при подключении к прядению должна то состояние которое от неё ожидает презентер на данный момент Например если приснится рождает что пью показывает прогрет то как только всё А то что она должна тут же Показать этот прогресс а давайте для начала

рассмотрим схему Мокси и схематично как Взаимно компонента с View presenter моделью Вы уже в принципе знакомы Мы все еще такой компонент как viewstate на первую очередь на первый взгляд может показаться что устроители хранятся флажки того состояния Как должна выглядеть View но это очень неудобно и поэтому стоит хранит команды которые презентер передавал вобью И как только какая-то View цепляется к презентер у вертолёта замечает и передает очередь во View она применяет эти команды или Каким образом

принимает правильное состояние презентера теперь давайте рассмотрим пример как они взаимодействуют например произошло какое-то событие во View она передала его в презенте на основании чего президенту сперва скинешь одну команду которую отправил его View но не напрямую А через кусты густы сохранила эту команду сохранил сохранил эту команду в очередь команд после чего она успешно применяется кровью после чего президент выполняет асинхронные запросы модель и в результате этого запроса Сперва сперва

отправляет одну команду в Estate которая тоже складывается в очередь команд и тут стоит заметить Это команда удалила хранящуюся команду в очереди и только после этого она уже применять с кровью затем из презентера уходят еще одна команда она также сохраняется босиком ответа и применяется к View всё на данный момент всё отображает актуальное состояние презентера то что я хотел и тут происходит Вот что пользователь поворачивает устройство View перед создаётся и терять своё состояние в

этот момент густые замечает что капризы прятать 8 View и последовательно применяя к ней хранившиеся в очереди команды и таким образом View приняла нужное состояние вот в принципе в этом заключается основная идея Мокси Теперь давайте разберем пример как этот подход выглядит Надя предположим нам нужно сделать экран авторизации у которого будет такое поведение по нажатию на кнопку авторизации пользователя должен быть показан прогресс и должен начаться асинхронный запрос авторизации после чего в случае успеха Прогресс скрывается и пользователь попадает внутрь приложения иначе Прогресс

открывается и пользователь показывает ошибка для того чтобы нам реализовать такое поведение придётся сделать 3 вещи во-первых написать интерфейса интервью он просто описывать поведение View чем позволит ногти с генерировать класс в институте его команд затем нужно Activity которая собственно будет выступать в качестве пью и конец Нам нужен presenter который будет реализовывать логику этого экрана Да хорошо код видно вроде и вот непосредственно кот который придется сделать

сперва мы описали интерфейс стальную он говорит буквально следует что View должна уметь показать открыть Прогресс показать открыть ошибку и отреагировать на успешную авторизацию дальше приведён класс Activity в первую очередь хочется заметить что наследует от Amway Activity за счёт этого ему не нужно переживать о том когда создавать презентеры или использовать уже имеющиеся презентер когда прятаться иди а то что от него и в какой момент времени нужно сказать президенте же что в её финиширует больше в приятели не

нуждается и он может уничтожаться дальше у нас Прими Поля с превенторами понятно что первое поле презентера президенте который авторизовать отвечают собственную логику авторизации презентер я привел для примера чтобы Вы могли увидеть что 1 Activity может относиться к нескольким президентам например Здесь мы хотим на экране авторизации кроме всё показать пользователю какой-то счётчик текущих пользователей системы и такой подход позволит вам запросто использовать логику и счётчика количество пользователей в любом

другом месте Просто прятаться там этот президенту и реализуйте подходящую так вот оба эти поля аннотированная аннотация презентер за счёт этого Мокси сама поставить в них нужно экземпляры президенте РФ и мы сможем с ними взаимодействовать сразу после вызова методом hyperactivity он клеит приводить реализацию Я не стал потому что вы о методах просто переключается вещи были из различных Android них его больше там в принципе ничего не сделают не делается хочется заметить что по

нажатию авторизации уйдёт события в презенте что пользователь хочет авторизоваться И теперь рассмотрим самые интересные компонент собственно сперва хочется заметить что он помечен аннотация инжекте стоит за счёт этого Мокси с генерирует классу это создаст его пляж поставит в поле в это в этот презентер и за счет этого вывести вас всегда будет экземпляр в YouTube в этом президент или независима приартачена или деточкина какая-нибудь Юкатан презентера Вот вы всегда можете с ним работать он никогда не будет знал потому что это

поляницы прямо в конструкторе презентера дальше собственно происходит следующее мы не хотим репозитории которое отвечает непосредственно за авторизацию пользователя вот этот доклад не провайдер поэтому на нём не будем заострять свое внимание и дальше собственно определён метод авторизации в котором говорится буквально следующее viewstate скоро ошибку Покажи Прогресс после чего репозиторий авторизует пользователя синхронно и в результате в случае успеха строй-прогресс и проведи отреагировал на успешную социализацию иначе Прогресс Покажи ошибку

в принципе на этом логика экран авторизации заканчивается хочется заметить плюсы данного во-первых логика авторизации никак не привязана к тому что сейчас происходит на экране что сейчас происходит с девайсом на экране может вообще не выводиться ничего но как только View будет придаточных президент Ирана сразу покажет покажет актуальное состояние процесс авторизации в чём не важно в какой момент она пряталась сама может превратиться в момент асинхронного вызова или после его завершения

ещё можно увидеть плюсы в удобстве такого подхода например Вы можете при использовании рыкса Вы можете заинжектить в завершить синхронные scheduler и таким образом метод авторизации за синхронного превращается в синхронной так же хочется заметить за счёт того что президент не привязан к жизненному циклу можно не беспокоиться о том об утечках памяти Вы можете использовать с тоски RX чистый газовые трейдеры чувствуете в себе силы вам не нужно переживать что Android уничтожит Activity но ссылка на неё останется где-то в асинхронности и BC не сможешь собрать память вам

достаточно не перед ссылку на эти случайно в презентер для этого достаточно всё время работать просто в методом Get View State работаете с ним у вас не будет НПФ И в тоже время утечек памяти в принципе текущих знаний вам уже достаточно чтобы начать успешно использовать Мокси хотел сказать что после такого Примера в принципе любой ну не ну Многие джуниоры могут сразу начать писать правильный код потому что они понимают где писать асинхронность день писать умею никаких нет теперь хочется рассказать несколько больше деталей Мама всё чтобы просто вы

знали о тех вещах которые происходят под капотом которые вам могут очень помочь а для начала рассмотрим Сколько живут различные компоненты Макси в первую очередь Вью Вью живет ровно столько Сколько живёт его реализация на примере слегка выступают Activity то она же покажут Activity всё просто затем есть такой компонент как президент Что именно в нем хранятся все экземпляры президенте РФ и он живёт Покажи в процесс приложение в котором он собственно находится интереснее выглядит жизненный процесс президенте РФ

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

взаимодействовать в принципе ничего сложного нет чтобы сделать такой кот но как бы он уже сделан Может просто брать Макси и пользоваться этим есть глобальные презентера глобальные презентеры живут независимо от того приартачена к нему какая-нибудь View или нет то есть вот какая-то в.ю. попросила глобальное presenter появится он появился И после этого он всё равно продолжает работать в принципе на самом деле отличия его от локального презентера заключается в том что для него и девичник дерутся а пользователь сам указывает необходимые

hyosung Поэтому в разных value он может указать 111 айдишник презентера и тогда один президент будет использовать всю и есть 30 президенте РФ Это вид презентера они очень похожи на глобальные презентеры но Разница в том что когда финиширует все View для которых он создавался он тоже будет уничтожен такой притеснитель Может вам пригодиться Например если вы делаете какой-то Wizard причём такой Wizard которые смысл только если пользователь прошел все его этапы в таком случае

вы создаете Вик презентер а то чтиво в каждой в ухе при каждом визарда Вот и когда weather будут закончены все экраны визарда закроются Тойоту презентер тоже будет уничтожен и не будет занимать память и самое интересное компонент это viewstate viewstate живёт президент или поэтому он живет ровно столько Сколько живёт презентер за счёт того что viewstate показывает нам не состоянии в.ю. непосредственно Он даже больше показывает состояние презентера нет смысла в её встретил жить дольше чем презентер Потому что он будет тогда показывать Ну и в обратную сторону тоже

работает потому что если устают уничтожаться только когда капризничал упорядочивать какая-то вьюха что будет показывать тоже непонятно Поэтому вот так ещё хочется дать несколько советов по использованию Макси Например у вас запросто может быть такая ситуация что для начала работы презентера вам может потребоваться его как-то социализировать например вы открыли activities деталями новости его нужно сказать презентера что вам нужно загрузить детали конкретно

такой новости айдишник Weekend А в таком методе он кричит вы просто вызовите метод презентера какой-нибудь инет в которой передадите то ты видишь ник новости и в этом монете вы сможете начать загрузку данных вот в то же время вот в этом методе Нет вы проверьте что если презентер уже принят зарезервирован то не нужно заново загружать данные потому что в юмор перед создаться метод oncreate соответственно Вызови то опять опять вызовите метод init Вот но у вас уже на

самом деле это новость может быть загружено Мы её не нужно заново загружать просто учтите это а затем хотелось бы сказать что Несмотря на то что moxios кодогенерация очень сильно все автокомплит и будут у вас работать сразу потому что мы старались сделать такую архитектуру что собственно Вы специально старались сделать так чтобы была возможность ещё хотелось бы заметить что в принципе ваш кот даже соберётся если вы отключите кодогенерация только у вас

просто приложение будет падать в рантайме Вот это уже на Это уже другая проблема собственно это уже проблема того чтобы отключили куда генерал проявляется очень весомой частью Макси Почём Мокси изначально так расстроилась чтобы любой момент можно было использовать или не использовать её фичи Вы можете вообще не использовать например аннотации Кто она предоставляет Вы можете сами подставлять например на брезентовом Вы можете сами создать класс в уста или

поставить этот экземпляр этого View State of Web presenter вот в принципе у вас этот код будет работать Просто он придется самим всё это написать и в то же время мы сделали кодогенерация такую чтобы Вы могли зайти в Исходный код вот этот сгенерированный его прочитать То есть он абсолютно читаем можно легко понять что собственно Происходит что наворачивать Мокси и в принципе у неё такая архитектура то например случится такая ситуация что вы захотите отказаться от Макси

Вот видите там кучу багов или что-нибудь неудобно Вы спокойно её отключайте убирайте все аннотации убирайте все исследования и в принципе у Вас остаётся чистый код потому что у вас были четкое разделение View presenter модель и ещё хочу рассказать о том как лепить делегат в принципе вот там в примере было им Выпей Activity там внутри неё нет ничего особенного создаётся делегатов которые просто методы что там Activity началась финишировал и останавливается у вас за счет этого вы можете

любой класс превратить всю например Вы можете адаптер при бабушку Вот его Давтян ведь президента который будет какую-то логику только на адаптер применять в принципе может быть полезно Вот и ещё один вопрос бы хотелось затронуть это как наладить общение между различными компонентами одного уровня Например у вас может быть такое что вы захотите ec1v you передать какое-то сообщение команду другую Вот как это нужно сделать Например у вас может быть а казаться что

1 Activity будет одновременно являться разными вирусами и вы может вас может быть может появиться такой Соблазн прямо через Activity собственно пообщаться между двумя руками но так делать не стоит потому что тогда ваше сообщение теряются и при создании Activity смысл от Макси Пропадет пропадет потому что в июне запомнил твоё состояние Вот прогоните это сообщение через презентеры вот в то же время Как прогнать сообщение между разными предметами нужно общаться через модель

а потому может в любой момент Переса сдаться и ещё Почему через моделлини через View а Софью вы будете общаться как через viewstate Вот и Представьте вы передали какой-то сообщение Вовану стоит О'кей всё Это выполнит возьмет какой-то презентер ему передать события тут в Опере создаётся и всё это опять эту команду накатит на неё Вот и у вас получится совсем не то чего вы ожидали вот поэтому всегда общаетесь через модель в качестве модели может выступать даже eventbus если вам удобно можете сделать класс какой-нибудь просто Будет ли Ну в

который будут записываться или серы и получать сообщения вот в принципе это всё что я хотел и что я успел рассказать всё спасибо Здравствуйте спасибо за доклад скажите вы можете подробнее рассказать про то как работает очередь Что будет с производительностью если 1553 команды и как почему одни команды заменяют другие другие не заменяют сперва отвечу можно вернуть я там кое-что расскажу сперва производительность на самом деле вот у нас есть ос-1б проект моего полгода пили Вот никаких

проблем с производительностью нет потому что команд на самом деле получается не так много вам буквально чаще всего нужно что-то загрузить показать там пару в переключить и всё а потом при создании не нужно же это заново нужно просто это показать вот Canon получается не очень много я проводил синтетический тест я сделал 1000 команд для View вот ну и он отработал очень быстро То есть даже лагов никак не было заметно её не будет дергать в разные стороны что её не будет дергать в разные стороны от моментального исполнения команд Нет не будет потому что они выполняться до того как её

будет пока то есть Несмотря на то что всё точиться в он старте всё равно она сперва эти команды применятся но не будут рисованные Они чуть чуть-чуть позже отрисовываются поэтому лагов нет а сейчас второй вопрос про очередь был сейчас есть такое большое большой большая прослойка в Макси как 33g собственно каждую команду можно пометить аннотации и в это аннотацию указать стратегию с которой команда собственно попадет в очередь команд проспекта Ну про них

очень много нужно говорить она доклад мало времени Вот в общем это через как механизм Спасибо предположим она свою реагирует на команду с анимацией получается что если накопленное того через команду только мультик про играется Хороший вопрос но я тоже думали обниматься за это уже должна отвечать в.ю. логично потому что она знает как отображать опреснители только отобразить вот мы должны это А например в Activity разрулить А для этого есть метод у президента ра из инвестор стоит защита вы можете узнать вы первый раз применили это уже повторное применение То есть вы уже один раз

показали анимацию второй раз мне нужен показывать А через этот метод вы можете узнать Понятно пойдём Так ну говорят у вас вот как раз Выпей Activity чем-то mapcam appcompat Activity незацепляйки Никаким образом или у вас вы берете только дефолтную sdk Activity а для всего остального съесть делегат скажи-ка Мы поступаем у нас за Павлишин модуль sfp аймаксе Android вот в нем собственно находится в эффекте в ней мы используем обычный Android Activity но у себя в

каждом проекте мы создаем такую же Activity как вот у нас лежит в moxy Android модуля Вот и просто вызываем методы делегата То есть как бы вы можете не менять базовую свою Activity Вы можете либо под неё построиться либо сверху неё наложить еще одну прослойку активити превратит в Емве Activity и у неё просто подергать методы легат по сути Как реализованы appcompatactivity там же тоже просто дёргаются методы то что вот она создалась уничтожил Да просто есть всякие библиотеки которые иногда вот так вот Пока нет то есть они

предоставляются своей реализации которых стремится от appcompatactivity которые могут повредить зависимости То есть вы так не делать Это замечательно хорошо спасибо за вопрос А по поводу взаимодействия с моделью вас был пример использования Java Вот Но правильно там вот хотя бы уточнить Мокси предоставляет какие-нибудь другие механизмы именно для взаимодействия с моделью Вот например если используя лежала там как мне поступать как правильно с моделью работать из президентов вообще Мокси не отвечает за модель

Вот она отвечает за связь президенте разобью вы как хотите так используете Вы можете заметить модель Да начать с ней работать хотите асинхронные сделать через сделайте через сходи через хотите через эсэмэски делать Спасибо можно создавать или использовать kingroot он но это уже собственно задача дайверы и другой вопрос Можно ли несколько View инжекте для одного президента Да можно но его нужно будет сделать глобальный потому что собственно как мы инжектион View presenter мы собственно танцы inject presenter собственно это говорим и в этот вот этот аннотацию можно

передать тип презентера ее вайтишник Вот вы говорите что вас глобальный То есть он доступен из разных views.py указывайте айтишник который вы будете потом других местах использовать потом вас может быть даже несколько несколько глобальных кризисов 1 типа и можете их использовать а внутри президент это как мы поймём Какая какой её набрать вот в этом в принципе сути мог себя в том что вам не нужно этого У вас есть презентер он работает и у него есть какой-то отображение неважно например Это Перри созданное в или вообще другая она просто будет

отвечать как уже этот нарисовать опреснители есть Как нарисовать Поэтому ему неважно Вот Но в принципе у вас здесь в августе эти вот всё это вы можете достать все придаточные в ухе и с ними работать но всего Так последний вопрос и у нас перерывчик пять минуточек А спасибо за доклад У меня вопрос такой вот в начале была такая фраза скользкая сказано что бухой может быть а сам доклад показывает как мы привязываем президента соответственно либо как тили-тили-бом фрагмент этой системы элементов у которых есть жизненный

цикл И от меня интересует А что вы случае сервиса и Стоит ли так вообще делать И что будет случай кастомный какой-то вьюхи которая хочу передать у которой жизненный цикл он совсем не такой как у mvp Activity fragment а сперва отвечу про-сервис А вот сервис нужно сделать Тоже самое что происходит в Activity просто в он старте сервисов возьми Передайте в него что View создалась и тут же её можно проточить Ну потому что у него нету таких стоит А что там View создаётся

вот в юрист сервер создал сразу готов можно с ним работать вон destroya сервиса просто отписываемся презентера с кастомной вэйхай там конечно интереснее для этого мы можем использовать собственный делегат Вот ваше состоятельных делегацию него просто Ну у него вызывайте нужно и методы тогда когда совью Хай происходит нужное событие вот можно что есть такая возможность в один делегат добавить несколько chile делегатов например Вы можете взять делегат Activity и в него подсунуть делегат

кастомные в юшке И когда у делегат Activity называться что он там например остановился тогда учил дома в делегатов тоже будет называться что они остановились так она будет работать Спасибо тебе большое аплодисменты спикером так спасибо большое для тех кто еще Не синхронизируются у нас на 20 минут идёт сдвиг соответственно прибавлять к расписанию на листочках 20 минут Сейчас у нас там 4 минутки перерыв давайте выберем давай кому мы дадим футболочку отдавать лучше даже 2.1 кто по футболке заслуженная Мне понравилось что поменял заметил что очередь команды можно как-то и управлять на

самом деле это очень важный момент да потому что ну бывают команды которые ненужного успеете сохранять например там startactivity он нужно как только она давала чтоб всё выше эти команды не было и нет Потому что он реально доставучий кому спасибо спасибо ребята оставайтесь с нами и сейчас мы через 4 минут чем или не забывайте про Вторую секцию там тоже интересные доклады спасибо спасибо всем

Комментарии для сайта Cackle

Купить этот доклад

Доступ к видеозаписи доклада «Moxy. Как устроена, и как этим пользоваться»
Доступно
В корзине
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно

Доступ ко всем записям докладов мероприятия

Доступ к записям всех докладов «Droidcon Moscow 2016»
Доступно
В корзине
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Билет

Интересуетесь тематикой «ИТ и технологии»?

Возможно, вас заинтересуют видеозаписи с этого мероприятия

11-13 октября 2019
Киев
68
218
аутсорс, ит, маркетинг, менеджмент, планирование, проекты, ресурсы, стратегия, управление, энтерпрайс

Похожие доклады

Александр Смирнов
Head of Android в Splyt
Доступно
В корзине
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Евгений Ртищев
Разработчик в Сбербанк-Технологии
Доступно
В корзине
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Илья Коробицын
Программист в Grid Dynamics
Доступно
В корзине
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно

Купить это видео

Видеозапись

Доступ к видеозаписи доклада «Moxy. Как устроена, и как этим пользоваться»
Доступно
В корзине
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно
Бесплатно

Conference Cast

ConferenceCast.tv — архив видеозаписей докладов и конференций.
С этим сервисом вы можете найти интересные лекции специально для вас!

Conference Cast
1250 конференций
38669 докладчиков
16710 часов контента