Мир мобильных телефонов очень сильно изменил нашу жизнь. В наше время невозможно представить современного человека, без этого чудо устройства. На рынке появляется все больше устройств и приложений. И чтобы удобнее пользоваться этими приложениями пользователи выбирают “умные” телефоны, или как их еще принято называть смартфоны. В своем докладе я хочу поделиться своим опытом автоматизации приложений под Android и iOS. Я расскажу о том, какие инструменты автоматизации я использовал. Поговорим о недостатках этих инструментов и какие из них стоит использовать у себя на проекте.
Rocket Jump: Project integration into few social networks is not a headacheDevGAMM Conference
Having created a successful project, a development team faces the challengу to integrate it into different social networks. Regarding the peculiarities of each social network, the process may appear rather effortful. The lecture is devoted to technical characteristics of the integration process and the solutions we use to save time and resources.
Мир мобильных телефонов очень сильно изменил нашу жизнь. В наше время невозможно представить современного человека, без этого чудо устройства. На рынке появляется все больше устройств и приложений. И чтобы удобнее пользоваться этими приложениями пользователи выбирают “умные” телефоны, или как их еще принято называть смартфоны. В своем докладе я хочу поделиться своим опытом автоматизации приложений под Android и iOS. Я расскажу о том, какие инструменты автоматизации я использовал. Поговорим о недостатках этих инструментов и какие из них стоит использовать у себя на проекте.
Rocket Jump: Project integration into few social networks is not a headacheDevGAMM Conference
Having created a successful project, a development team faces the challengу to integrate it into different social networks. Regarding the peculiarities of each social network, the process may appear rather effortful. The lecture is devoted to technical characteristics of the integration process and the solutions we use to save time and resources.
Нещодавно відбувся Online TechTalk “Flutter Mobile Development”!
Під час заходу спікери розібрали, що таке Flutter, та навіщо використовувати саме його. Також поговорили про основні принципи та підходи до розробки на Flutter, його перспективи та найпопулярніші аплікації зроблені на ньому.
Деталі та відео заходу: https://bit.ly/3mKszBR
Есть такая штука как инструментирование кода. Мало кто знает о ней, даже пользуясь результатами ее применения. Между тем, с инструментированием можно делать много всего интересного и, главное, полезного. Например, это может вам помочь лучше понять код или сделать процесс разработки более эффективным. Примеры инструментирования кода и принципы его работы.
'The best practices' by KONSTANTIN KULAKSYZ at OdessaJS'2020OdessaJS Conf
How to develop web applications using Vue.js and implement best practices from the first day of development. Consider practical recommendations for using Vue.js, based on personal experience, thoughtful reading of documentation and analysis of best practices suggested by other developers. During the talk, you will learn what you can implement today in your development practice to make your web applications on Vue.js more productive and the development process more efficient.
Как можно применить аспектно ориентированное программирование к шаблонам проектирования. Какие из них становится легче использовать? Какие полностью выносятся в шаблон и больше не являются частью вашей бизнес-логики.
Как создать более чистый код?
- на эти вопросы ответ в презентации.
Использование аспектов в реализации PostSharp к рефакторингу кода, к шаблонам банды четырех.
Большую часть инфраструктурного кода можно выделить и переиспользовать в других проектах.
Слайды одноименного доклада с конференции C++ CoreHard Autumn 2018 (г.Минск, 2018.11.03).
Краткое описание доклада:
На предыдущих конференциях C++ CoreHard автор доклада рассказывал про Модель Акторов и опыт ее использования в C++. Но Модель Акторов -- это далеко не единственный способ борьбы со сложностью при работе с многопоточностью. Давайте попробуем поговорить о том, что еще можно применить и как это может выглядеть в C++.
Нещодавно відбувся Online TechTalk “Flutter Mobile Development”!
Під час заходу спікери розібрали, що таке Flutter, та навіщо використовувати саме його. Також поговорили про основні принципи та підходи до розробки на Flutter, його перспективи та найпопулярніші аплікації зроблені на ньому.
Деталі та відео заходу: https://bit.ly/3mKszBR
Есть такая штука как инструментирование кода. Мало кто знает о ней, даже пользуясь результатами ее применения. Между тем, с инструментированием можно делать много всего интересного и, главное, полезного. Например, это может вам помочь лучше понять код или сделать процесс разработки более эффективным. Примеры инструментирования кода и принципы его работы.
'The best practices' by KONSTANTIN KULAKSYZ at OdessaJS'2020OdessaJS Conf
How to develop web applications using Vue.js and implement best practices from the first day of development. Consider practical recommendations for using Vue.js, based on personal experience, thoughtful reading of documentation and analysis of best practices suggested by other developers. During the talk, you will learn what you can implement today in your development practice to make your web applications on Vue.js more productive and the development process more efficient.
Как можно применить аспектно ориентированное программирование к шаблонам проектирования. Какие из них становится легче использовать? Какие полностью выносятся в шаблон и больше не являются частью вашей бизнес-логики.
Как создать более чистый код?
- на эти вопросы ответ в презентации.
Использование аспектов в реализации PostSharp к рефакторингу кода, к шаблонам банды четырех.
Большую часть инфраструктурного кода можно выделить и переиспользовать в других проектах.
Слайды одноименного доклада с конференции C++ CoreHard Autumn 2018 (г.Минск, 2018.11.03).
Краткое описание доклада:
На предыдущих конференциях C++ CoreHard автор доклада рассказывал про Модель Акторов и опыт ее использования в C++. Но Модель Акторов -- это далеко не единственный способ борьбы со сложностью при работе с многопоточностью. Давайте попробуем поговорить о том, что еще можно применить и как это может выглядеть в C++.
4. ...Простое и понятное API
[Inject]
public var сommandMap : IEventCommandMap;
[Inject]
public var mediatorMap : IMediatorMap;
[Inject(name=”privateInjector”)]
public var injector : IInjector;
…
commandMap.map(CoreEvent.BUY_ITEM).toCommand(BuyItemCommand).withGuards(EnoghMoneyGuard);
commandMap.map(CoreEvent.BUY_ITEM).toCommand(ShowBuyCoinsPopupCommand).withGuards(NotEnoghMoneyGu
ard);
...
injector.map(Model).asSingleton();
injector.map(Model).toSingleton(ConcreteModel);
injector.map(Model).toValue(new Model());
injector.map(IModel).toType(ConcreteModel).seal();
…
mediatorMap.map(IBottomBar).toMediator(BottomBarMediator);
mediatorMap.map(SettingsView).toMediator(SettingsMediator).autoRemove(false);
6. Основные плюсы и возможности:
● модульность
● гибкий и понятный синтаксис
● удобная и простая система внедрения зависимостей
● удобная система расширений
● нет привязки к конкретной реализации сущностей
● унифицирующий стиль разработки
Небольшой минус:
● фреймворк не быстрый
9. Когда доступно:
public class MyInstanceClass {
[Inject]
public var variable:Number;
public function MyInstanceClass() {
// not ready
}
[PostConstruct]
public function initialize():void {
// ready
}
}
17. Bundles
● Набор расширений, описанных в одном файле.
public class MVCSBundle implements IBundle
{
public function extend(context:IContext):void {
context.logLevel = LogLevel.DEBUG;
context.install(
ContextViewExtension,
EventDispatcherExtension,
ModularityExtension,
DirectCommandMapExtension,
EventCommandMapExtension,
LocalEventMapExtension,
ViewManagerExtension,
StageCrawlerExtension,
StageSyncExtension);
context.configure(ContextViewListenerConfig);
}
}
18. Views
● нет конкретной реализации
● рендеринг на основе входящих данных
● предоставляет API
● ничего не знает об устройстве приложения, все данные получает из
медиатора
● может только отправлять события-оповещения для медиатора
● ссылки на вью имеют только другие вью или медиатор
● может иметь несколько медиаторов за раз
19. Mediators
● работает только с одним экземпляром вью за раз
● можно мапить на интерфейс или на несколько классов вью
● создается автоматически при добавлении вью в дисплей лист
● удаляется при удалении вью из дисплей листа (можно отключить)
● служит для связи вью и остальных компонентов приложения
● не имееет никакой постронней логики
● может дергать модели и сервисы напрямую
● может слушать и посылать события отв приложение
20. Commands
● нет привязки к конкретной реализации
● запускаются в ответ на события из общей шины
● предназначены для выполнения какого то одного действия
● создаются, выполняют действие, удаляются
● нельзя получить ссылку на команду
● содержат бизнес логику
● могут дергать модели и сервисы, запускать другие событие
● не могут слушать события приложения
21. Models
● инкапсуляция данных и предоставление API для доступа к ним
● могут диспатчить события в приложение
● не могут слушать события от приложения
● не должны содержать лишней логики
22. Services
● сущности для работы с внешними сервисами
● не хранят данные
● могут парсить данные
● могут диспатчить события в приложение
● не могут слушать события от приложения
23. Guards
● используются для предотвращения создания или выполнения чего либо
● нет привязки к конкретной реализации
● нельзя получить ссылку на гуард
● применяются те же инджекты что и для основной цели
● выполняется непосредственно перед созданием основной цели
● если гаурд не одобряет то основная цель не создается
● мгновенны, асинхронных гуардов пока что нет
● на момент запуска гуарда, все данные должны быть доступны в
24. А теперь все вместе!
делите свой код на более мелкие части по зонам ответственности
25. Что почитать:
● http://knowledge.robotlegs.org/
● https://github.com/robotlegs/robotlegs-framework
● https://github.com/robotlegs/swiftsuspenders
● https://github.com/alebianco/robotlegs-utilities-macrobot
● https://github.com/robotlegs
● ActionScript Developer's Guide to Robotlegs