Статический и динамический полиморфизм в C++, Дмитрий ЛевановYandex
На примере некоторых архитектурных решений Крипты Дмитрий расскажет о способах реализации полиморфного поведения в программах на C++, о преимуществах и недостатках этих способов, а также о новых возможностях C++11.
Статический и динамический полиморфизм в C++, Дмитрий ЛевановYandex
На примере некоторых архитектурных решений Крипты Дмитрий расскажет о способах реализации полиморфного поведения в программах на C++, о преимуществах и недостатках этих способов, а также о новых возможностях C++11.
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекPython Meetup
"SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек", Алексей Черкес
Кратко рассказано о том, что такое биндинг и Pуthon c API. Краткий обзор средств биндинга для Python. SWIG: что такое, зачем нужен, особенности, схема работы утилит, порядок запуска и сборки, принципы работы, как происходит сопоставление объектных моделей С++ и целевого языка. Примеры на Python и C#. Опыт применения, плюсы/минусы.
Денис Кормалев — Qt. Как выжить на минном поле. Советы сапёруYandex
Денис Кормалев, Опенсофт.
Этот небольшой доклад рассказывает о различных проблемах и хитростях разработки на C++/Qt, не всегда видимых с первого взгляда. Все примеры основаны на реальных событиях, с которыми так или иначе сталкивался докладчик. Рассчитан на людей, которые уже используют Qt в разработке, но ещё не успели досконально разобраться, как работает этот инструмент.
1. The document provides tips on how to learn International Business Communication (IBC) effectively by setting proper goals, having passion and motivation, and using various study techniques and resources.
2. Some ineffective ways of learning IBC mentioned are not having proper goals or passion/motivation, and just learning for marks or responsibility instead of one's own knowledge and future career.
3. Various solutions proposed include setting goals and sticking to them, reframing techniques in Neuro Linguistic Programming, linking meanings, using flashcards, practicing vocabulary and grammar, studying in groups online or with a teacher, and having an enthusiastic attitude.
Reinventing Wellness: What to Include in a Wellness OrientationCIEE
This session will focus on the development of wellness practices that strengthen staff, faculty, and student learning. Janice Abarbanel will expand on her idea of an "emotional passport," a dynamic skill set that can be learned and practiced as one prepares for shifting and settling into new cultures. Cynthia Mitchell will address issues of visibility and invisibility as students from different racial and cultural backgrounds negotiate the ways they're perceived in new environments. Participants will learn strategies to support students' emotional engagement, to enhance curiosity, and to help students recognize their accomplishments as they learn abroad.
- A method was developed to calculate the direct impact on human health from dermal absorption of chemicals in consumer products during use, called the Product Intake Fraction (PiF).
- The PiF considers key variables like the rate at which chemicals leach from the product and the skin permeability coefficient.
- Direct impacts calculated for a pacifier, hand soap, and shampoo were found to be of similar or higher magnitude than indirect life cycle impacts from product emissions and use.
- This work introduces a novel method for including dermal exposure in life cycle assessment, which is currently an important pathway not fully addressed.
Статический и динамический полиморфизм в C++, Дмитрий ЛевановYandex
На примере некоторых архитектурных решений Крипты Дмитрий расскажет о способах реализации полиморфного поведения в программах на C++, о преимуществах и недостатках этих способов, а также о новых возможностях C++11.
Статический и динамический полиморфизм в C++, Дмитрий ЛевановYandex
На примере некоторых архитектурных решений Крипты Дмитрий расскажет о способах реализации полиморфного поведения в программах на C++, о преимуществах и недостатках этих способов, а также о новых возможностях C++11.
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекPython Meetup
"SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек", Алексей Черкес
Кратко рассказано о том, что такое биндинг и Pуthon c API. Краткий обзор средств биндинга для Python. SWIG: что такое, зачем нужен, особенности, схема работы утилит, порядок запуска и сборки, принципы работы, как происходит сопоставление объектных моделей С++ и целевого языка. Примеры на Python и C#. Опыт применения, плюсы/минусы.
Денис Кормалев — Qt. Как выжить на минном поле. Советы сапёруYandex
Денис Кормалев, Опенсофт.
Этот небольшой доклад рассказывает о различных проблемах и хитростях разработки на C++/Qt, не всегда видимых с первого взгляда. Все примеры основаны на реальных событиях, с которыми так или иначе сталкивался докладчик. Рассчитан на людей, которые уже используют Qt в разработке, но ещё не успели досконально разобраться, как работает этот инструмент.
1. The document provides tips on how to learn International Business Communication (IBC) effectively by setting proper goals, having passion and motivation, and using various study techniques and resources.
2. Some ineffective ways of learning IBC mentioned are not having proper goals or passion/motivation, and just learning for marks or responsibility instead of one's own knowledge and future career.
3. Various solutions proposed include setting goals and sticking to them, reframing techniques in Neuro Linguistic Programming, linking meanings, using flashcards, practicing vocabulary and grammar, studying in groups online or with a teacher, and having an enthusiastic attitude.
Reinventing Wellness: What to Include in a Wellness OrientationCIEE
This session will focus on the development of wellness practices that strengthen staff, faculty, and student learning. Janice Abarbanel will expand on her idea of an "emotional passport," a dynamic skill set that can be learned and practiced as one prepares for shifting and settling into new cultures. Cynthia Mitchell will address issues of visibility and invisibility as students from different racial and cultural backgrounds negotiate the ways they're perceived in new environments. Participants will learn strategies to support students' emotional engagement, to enhance curiosity, and to help students recognize their accomplishments as they learn abroad.
- A method was developed to calculate the direct impact on human health from dermal absorption of chemicals in consumer products during use, called the Product Intake Fraction (PiF).
- The PiF considers key variables like the rate at which chemicals leach from the product and the skin permeability coefficient.
- Direct impacts calculated for a pacifier, hand soap, and shampoo were found to be of similar or higher magnitude than indirect life cycle impacts from product emissions and use.
- This work introduces a novel method for including dermal exposure in life cycle assessment, which is currently an important pathway not fully addressed.
Este documento describe las funciones de varias teclas de una computadora o dispositivo móvil, incluyendo las teclas de escape, control, inicio, ALT, barra espaciadora, teclas de dirección, enter, suma, resta, multiplicación, división, suprimir, insertar, shift, bloqueo de mayúsculas, tabulador y fin, las cuales se utilizan para cancelar operaciones, realizar funciones especiales, posicionar el cursor, habilitar menús, introducir espacios, seleccionar celdas, pasar a la siguiente línea, realizar
This document advertises hiring app developers from Openwave to take on challenges. Openwave offers dedicated app developers for hire at +1(212) 209-1537. They can be contacted at info@openwavecomp.com for more information on their developer services.
The student learned about various technologies through constructing a magazine. They used a Canon 600D camera to take photos, learning about functions like ISO and aperture. Adobe Photoshop was used to adjust black and white photos by changing levels and composition. Research was conducted using Internet Explorer and a blog was updated using Blogger. A mobile phone allowed for photography, emails, and focus group research. Microsoft PowerPoint displayed research and lighting was used but positioning it was difficult to learn. Overall, technology made the process easier, quicker, and the final product more professional.
Google Now es un asistente personal inteligente desarrollado por Google que está disponible dentro de la aplicación Google Search para dispositivos Android. Google Now utiliza una interfaz de lenguaje natural para responder preguntas y ofrecer recomendaciones basadas en los hábitos de búsqueda y ubicación del usuario. El asistente predice la información que el usuario necesitará y la muestra de forma proactiva a través de "tarjetas".
Users spend most of their mobile time in apps rather than mobile browsers. They regularly use about 15 out of the 40 apps they download from the over 1 million available. Marketers should focus on communicating with customers through mobile apps to reach them, and provide helpful emergency tips and information that can also be accessed offline.
The document discusses unit testing in Python. It defines unit testing as testing individual units or components of code to determine if they work as intended. It covers key concepts like test cases, test fixtures, test suites, and test runners. It also provides examples of how to write unit tests in Python using the unittest module and concepts like assertions, setup and teardown methods.
Альтернативная монетизация — краудфандинг, Каменев Игорь, основатель проекта ...Mail.ru Group
Один из важных этапов создания продукта — валидация гипотезы о том, что этот продукт может заработать. Докладчик расскажет, как с помощью Indiegogo можно малой кровью проверить эту гипотезу и начать зарабатывать еще до того, как платный функционал появится в приложении.
This presentation describes the WEP issued in the original IEEE 802.11 and points out it's weakness and how can attacks be executed. Also, it summarizes the best practices to introduce security to the Wireless enviroment.
El documento resume la vida y carrera de José de San Martín. Nació en 1778 en Yapeyú, Argentina. Recibió educación militar en España y luchó contra Napoleón. En 1812 regresó a Argentina y se unió a la lucha por la independencia. Organizó el Ejército de los Andes y lideró la campaña que liberó a Chile y Perú del dominio español.
Михаил Рахманов рассказывает о паттерне Promise и его использовании в iOS разработке.
Краткие тезисы:
- Что такое promises?
- Использование promises в iOS разработке (существующие библиотеки и подходы)
- Реализация promises библиотекой PromiseKit (основные методы, цепочки promises, обработка ошибок)
- Какие задачи можно решить с помощью promises, а какие - нельзя
- Использование promises на примере приложения: драм-машины с возможностью сохранять аудио-дорожки
- Подведение итогов: преимущества и недостатки.
RDSDataSource - внутренние пятничные митапы iOS-команды RAMBLER&Co.
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и JavascriptSergey Platonov
Шаблоны — мощный инструмент, добавляющий в язык новые возможности, а программистам в команде — новые проблемы. Доклад покажет, как тщательно продуманный шаблонный код может не усложнить, а упростить жизнь и дать надёжную абстракцию межпроцессных межъязыковых асинхронных вызовов функций. С помощью шаблонов можно:
адаптировать Promise/A+ из Javascript для C++
автоматически проверять и раскладывать динамический массив аргументов на статичные аргументы функции
сделать аналог std::bind для weak_ptr.
Эти вещи будут показаны на примере взаимных вызовов между C++ и Javascript в одном приложении с помощью CEF3.
мартюшев александр - необходимые навыки технического лидера в Agile проектахMagneta AI
В IT проектах уровень неопределенности очень высок. В Agile проектах такие изменения происходят гораздо чаще, чем
в традиционных, потому что
Agile стимулирует изменения, и никак их не ограничивает. Если ничего не предпринимать, то под действием новых требований техническое качество будет ухудшаться от итерации к итерации. Некачественный код, неадекватный дизайн — все это может привести
к замедлению эффективности разработки, а возможно и к провалу проекта.
Григорий Демченко — Асинхронное программирование и сопрограммыYandex
Как показывает практика, повсеместное применение классического, основанного на callback’ах подхода к асинхронному программированию обычно оказывается неудобным. Для упрощения написания и поддержки сложного асинхронного кода можно использовать иной подход — с использованием сопрограмм. Он значительно сокращает объём и сложность кода, а также существенно упрощает реализацию нетривиальных сценариев, связанных с отменой вычислений и таймаутами операций.
Сергей Константинов — Что интересного готовит нам W3CYandex
2014 год обещает нам множество интересных нововведений. Помимо новинок в HTML5, нас ждут глобальные изменения в самой веб-платформе. Promises и модули — революция в стандартах разработки стандартов. Service Workers — новый подход к решению проблемы офлайновых веб-приложений. @@create — отнаследуйся от HTMLElement! Обо всём этом и пойдёт речь в докладе.
Este documento describe las funciones de varias teclas de una computadora o dispositivo móvil, incluyendo las teclas de escape, control, inicio, ALT, barra espaciadora, teclas de dirección, enter, suma, resta, multiplicación, división, suprimir, insertar, shift, bloqueo de mayúsculas, tabulador y fin, las cuales se utilizan para cancelar operaciones, realizar funciones especiales, posicionar el cursor, habilitar menús, introducir espacios, seleccionar celdas, pasar a la siguiente línea, realizar
This document advertises hiring app developers from Openwave to take on challenges. Openwave offers dedicated app developers for hire at +1(212) 209-1537. They can be contacted at info@openwavecomp.com for more information on their developer services.
The student learned about various technologies through constructing a magazine. They used a Canon 600D camera to take photos, learning about functions like ISO and aperture. Adobe Photoshop was used to adjust black and white photos by changing levels and composition. Research was conducted using Internet Explorer and a blog was updated using Blogger. A mobile phone allowed for photography, emails, and focus group research. Microsoft PowerPoint displayed research and lighting was used but positioning it was difficult to learn. Overall, technology made the process easier, quicker, and the final product more professional.
Google Now es un asistente personal inteligente desarrollado por Google que está disponible dentro de la aplicación Google Search para dispositivos Android. Google Now utiliza una interfaz de lenguaje natural para responder preguntas y ofrecer recomendaciones basadas en los hábitos de búsqueda y ubicación del usuario. El asistente predice la información que el usuario necesitará y la muestra de forma proactiva a través de "tarjetas".
Users spend most of their mobile time in apps rather than mobile browsers. They regularly use about 15 out of the 40 apps they download from the over 1 million available. Marketers should focus on communicating with customers through mobile apps to reach them, and provide helpful emergency tips and information that can also be accessed offline.
The document discusses unit testing in Python. It defines unit testing as testing individual units or components of code to determine if they work as intended. It covers key concepts like test cases, test fixtures, test suites, and test runners. It also provides examples of how to write unit tests in Python using the unittest module and concepts like assertions, setup and teardown methods.
Альтернативная монетизация — краудфандинг, Каменев Игорь, основатель проекта ...Mail.ru Group
Один из важных этапов создания продукта — валидация гипотезы о том, что этот продукт может заработать. Докладчик расскажет, как с помощью Indiegogo можно малой кровью проверить эту гипотезу и начать зарабатывать еще до того, как платный функционал появится в приложении.
This presentation describes the WEP issued in the original IEEE 802.11 and points out it's weakness and how can attacks be executed. Also, it summarizes the best practices to introduce security to the Wireless enviroment.
El documento resume la vida y carrera de José de San Martín. Nació en 1778 en Yapeyú, Argentina. Recibió educación militar en España y luchó contra Napoleón. En 1812 regresó a Argentina y se unió a la lucha por la independencia. Organizó el Ejército de los Andes y lideró la campaña que liberó a Chile y Perú del dominio español.
Михаил Рахманов рассказывает о паттерне Promise и его использовании в iOS разработке.
Краткие тезисы:
- Что такое promises?
- Использование promises в iOS разработке (существующие библиотеки и подходы)
- Реализация promises библиотекой PromiseKit (основные методы, цепочки promises, обработка ошибок)
- Какие задачи можно решить с помощью promises, а какие - нельзя
- Использование promises на примере приложения: драм-машины с возможностью сохранять аудио-дорожки
- Подведение итогов: преимущества и недостатки.
RDSDataSource - внутренние пятничные митапы iOS-команды RAMBLER&Co.
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и JavascriptSergey Platonov
Шаблоны — мощный инструмент, добавляющий в язык новые возможности, а программистам в команде — новые проблемы. Доклад покажет, как тщательно продуманный шаблонный код может не усложнить, а упростить жизнь и дать надёжную абстракцию межпроцессных межъязыковых асинхронных вызовов функций. С помощью шаблонов можно:
адаптировать Promise/A+ из Javascript для C++
автоматически проверять и раскладывать динамический массив аргументов на статичные аргументы функции
сделать аналог std::bind для weak_ptr.
Эти вещи будут показаны на примере взаимных вызовов между C++ и Javascript в одном приложении с помощью CEF3.
мартюшев александр - необходимые навыки технического лидера в Agile проектахMagneta AI
В IT проектах уровень неопределенности очень высок. В Agile проектах такие изменения происходят гораздо чаще, чем
в традиционных, потому что
Agile стимулирует изменения, и никак их не ограничивает. Если ничего не предпринимать, то под действием новых требований техническое качество будет ухудшаться от итерации к итерации. Некачественный код, неадекватный дизайн — все это может привести
к замедлению эффективности разработки, а возможно и к провалу проекта.
Григорий Демченко — Асинхронное программирование и сопрограммыYandex
Как показывает практика, повсеместное применение классического, основанного на callback’ах подхода к асинхронному программированию обычно оказывается неудобным. Для упрощения написания и поддержки сложного асинхронного кода можно использовать иной подход — с использованием сопрограмм. Он значительно сокращает объём и сложность кода, а также существенно упрощает реализацию нетривиальных сценариев, связанных с отменой вычислений и таймаутами операций.
Сергей Константинов — Что интересного готовит нам W3CYandex
2014 год обещает нам множество интересных нововведений. Помимо новинок в HTML5, нас ждут глобальные изменения в самой веб-платформе. Promises и модули — революция в стандартах разработки стандартов. Service Workers — новый подход к решению проблемы офлайновых веб-приложений. @@create — отнаследуйся от HTMLElement! Обо всём этом и пойдёт речь в докладе.
Случалось ли, что вы видели (чужой) код и хотели все переписать? Бывало такое, что вы не могли понять, почему кем-то было принято конкретное решение, не другое? Хотели ли вы воскликнуть:«А я бы сделал еще круче!»?
Если вы задумывались об этом, вам будет интересно послушать историю о том, как эти вопросы возникали у Александра и Кирилла и как они решались в условиях большой компании.
Разработчики расскажут, как в самом начале пути вытаскивали шашки и шли в атаку на проблемную архитектуру. Но все оказалось не так просто, и по мере погружения в проект парни стали понимать, что архитектура большой системы — компромисс между различными подходами и решениями, инновациями и легаси (наследованным кодом), централизацией и децентрализацией компонентов. Докладчики наработали очень много опыта в решении архитектурных задач и поделятся опытом и выработанными принципами, которых придерживаются в настоящее время.
Во время доклада будут обсуждаться непростые вопросы, возникающие при принятии решений о том, как будет жить и эволюционировать система.
Вместе со слушателями Александр и Кирилл проделают упражнение по созданию «таблицы технологий» и её эволюции. Также они покажут, насколько важно инженерное решение на любой из стадий развития системы.
Слайды одноименного доклада с конференции "C++ Russia 2018". В докладе речь идет о том, насколько C++ мешает и насколько C++ помогает в разработке акторного фреймворка для C++.
Serghei Iakovlev "Chaos engineering in action"Fwdays
Let's talk about what chaos engineering is and how this discipline can be applied in projects where PHP is used as the main language.
Among other things, we will cover the following topics:
What problems does chaos engineering solve?
What are the solutions exist?
How to develop your own solution?
What is a controlled failover?
A little about ZendEngine and what tools are out of the box?
A bit about chaos design.
A bit about the code leading to chaos.
Денис Чернилевский: Генерация тестовых данных. Библиотека ObjectBuildersYandex
Один из неотъемлемых этапов тестирования любых приложений — подготовка тестовых данных. Существует ряд систем, для которых данные крайне важны, так как от них зависит поведение всей системы. Например, так устроены системы биллинга, ERP-системы или система медийной рекламы Яндекса. И в таких случаях подготовка тестовых данных становится довольно сложной и масштабной задачей. В своем докладе я расскажу об одном из возможных подходов к решению этой проблемы и представлю нашу библиотеку ObjectBuilders. Она облегчает разработку автотестов и позволяет легко генерировать разнообразные данные для тестируемых систем. Библиотека ObjectBuilders — это проект с открытым исходным кодом, что даёт каждому возможность использовать её для своих нужд.
Similar to Михаил Рахманов — Promises, или почему обещания надо выполнять (20)
Расскажу про развитие идеи реактивного программирования. Пройдем путь от MVVM к VIPER при использовании рективщины, обсудим плюсы и минусы последнего в сравнении с императивной реализацией.
Александр Зимин – Анимация как средство самовыраженияCocoaHeads
Расскажу о том, как создавать сложные анимации в iOS приложениях.
- CoreAnimation и его особенности
- Анимационные переходы между экранами
- Работа с анимациями, экспортированными из Adobe After Effects
Николай Ашанин – Team Lead. Структурирование мыслейCocoaHeads
Расскажу, как вырасти из разработчика в тимлида и не сойти с ума. Технические и психологические рекомендации, ошибки, негатив и дельные советы для разработчиков. Будет интересно разработчикам, которые задумываются о росте.
Виктор Брыкcин — Как всё починить и ничего не сломать: работа со сложным кодо...CocoaHeads
Я расскажу, как внести функциональные изменения в плохо спроектированный код в разумные сроки и при этом ничего не сломать — о возможных проблемах, ошибках в процессе и о том, как с ними справляться.
В частности, покажу, как в этом помогают тесты и почему они важны как система раннего обнаружения ошибок. Расскажу о зависимостях, их классификации и о том, какое влияние разные типы зависимостей оказывают на наше понимание работы программы и возможности её протестировать.
Большую часть этого доклада я посвятил простым практическим приёмам рефакторинга и модификации кода — для упрощения понимания системы и более лёгкого внесения функциональных изменений.
Самвел Меджлумян — S3: API на Swift за пять минутCocoaHeads
Мы поговорим о том, что может Swift за рамками iOS-разработки и что он из себя представляет в качестве Server Side решения. Изучим готовые продукты для реализации сервера на Swift и сравним их между собой. Будет также короткое демо, как за пять минут поднять API на Swift.
Александр Зимин (Alexander Zimin) — Магия SwiftCocoaHeads
Александр говорил о нестандартных особенностях языка для реальных проектов. О том, зачем усложнять себе жизнь и какие преимущества это может дать.
- Protocol-Oriented Programming и его дилеммы
- Когда и зачем использовать обобщения и вложенные типы
- Настоящее и будущее Swift
Катерина Трофименко — Разработка фич: от флагов до a/b-тестовCocoaHeads
Катя рассказала, что такое feature flags, как они помогают нам в Badoo разрабатывать большие фичи итерационно, силами нескольких разработчиков, и не переживать из-за кода, уходящего в релизы. Рассказала о том, как система таргетированной раскладки фич переросла в систему a/b-тестирования и как все это выглядит со стороны iOS-клиента
Андрей Володин — Как подружиться с роботомCocoaHeads
This document provides instructions for building a "hello world" application and the Fiber2D framework for Android using Swift. It outlines setting up the necessary prerequisites like the Android NDK. It then describes compiling a simple "hello world" executable to test the setup. The bulk of the document focuses on compiling the Fiber2D 3D graphics framework, which involves creating a build script to configure the Swift compiler, link dependencies, and build a dynamic library that can be used in an Android application.
Александр Зимин (Alexander Zimin) — UIViewController, откройся!CocoaHeads
The document discusses iOS app development topics including UIKit, transitions, animations, view controllers, and protocols. It provides information about modal presentation styles in UIModalPresentationStyle, transition coordinators using the UIViewControllerTransitioningDelegate protocol, and animating view controller changes using the UIViewControllerContextTransitioning protocol. The document outlines responsibilities for animating transitions between views.
Сергей Пронин, Никита Кошолкин — Как мы разрабатываем App in the Air: процесс...CocoaHeads
An app called App in the Air grew from 0 to 1,000,000 users. The document outlines lessons learned from the experience including that launch is just the beginning, retention matters more than initial buzz or downloads, and gatekeepers, team composition, industry, feedback loops, thinking big, and vision are important factors for long term growth. It provides data on the app's user growth and retention over time from launch to 1 million users.
Макс Грибов — Использование SpriteKit в неигровых приложенияхCocoaHeads
This document discusses using SpriteKit, Apple's 2D game framework, for non-game applications. It introduces SpriteKit components like SKView, SKScene and SKNode that can be used to build interactive visual experiences. It also covers SpriteKit actions for animation, physics integration, and organizing visual hierarchies with nodes.
2. Поговорим о промисах
• Какие проблемы стояли перед создателями?
• Что это и зачем они нужны?
• Создадим собственные промисы
• Используем их в демо-проекте
• Рассмотрим их преимущества и недостатки
4. Проблемы
• Уменьшение задержки
при вычислениях на
удаленных машинах
• Необходимость
максимально
использовать
возможности систем с
множеством процессоров
6. АProcess 1: B+
АProcess 2: C+
Process 3:
Future
A
Future
A
Future
B
Future
C
Process Queue Result
Future A
Result
A
Result
A
Futures
(H. Baker, C. Hewitt)
7. Fork 1:
Fork 2:
Queue:
Promises
(B. Liskov, L. Shira)
Record
Grade
Record
Grade
Record
Grade
Promise
Student A
Promise
Student B
Promise
Student C
Print
Student A
Print
Student B
Print
Student C
DataBase:
9. Как это могло бы выглядеть в коде?
let downloadPromise = Promise<UIImage>()
let downloadFuture = downloadPromise.future
downloadFuture
.then { image in
self.imageView.image = image
}
.error { err in
…
}
downloadPromise.resolve(image)
10. Разные реализации в разных языках
• С++: promise + future
• Scala: promise + future
• Javascript: только promise
• Swift: нет в стандартной библиотеке
в PromiseKit - только Promise
14. … а как бы это выглядело с callback’ами
record { recording in
upload(recording) { result, error in
if let result = result { // code showing alert }
// error handling
}
}
15. Параллельные операции
func bankUserInfo() ->
Promise<BankUserInfoConfiguration>
func localBackendUserInfo() ->
Promise<LocalBackendUserInfoConfiguration>
combine(localBackendUserInfo, bankUserInfo)
.then { local, bank in
…
show(userInfoConfiguration)
}
17. Promise
Спецификация
Операции выполняются
сразу же после создания
Можно записать
результат один раз
Ошибка прерывает
выполнение всей
Выполняется на
произвольной очереди
Метод combine и другие
Метод then - цепочка
промисов
В любой
момент можно
получить
доступ к
результату
18. Под капотом
var result: Result<T>?
var handlers: [PromiseHandler<T>] = []
let queue = DispatchQueue(label: "promise.queue",
attributes: .concurrent)
19. Конструктор
let promise = Promise<Int> { resolve, reject in
resolve(someValue)
}
Closure, которые дергают внутренние методы Promise
20. Реализация конструктора
init(closure: PromiseClosure<T>) {
closure(resolve, receivedError)
}
func resolve(_ parameter: T) {
guard result == nil else { return }
result = .resolved(parameter)
handlers.forEach { $0(result!) }
}
Выполняетс
я сразу
после
создания
21. Метод then
downloadPromise.then { object in
return something(object)
}
нужно продумать несколько вариаций:
например, then принимает другой promise в
качестве параметра
22. Реализация метода then
func then(onQueue q: DispatchQueue, closure: (T) throws -> U)
-> Promise<U> {
}
return Promise<U> { resolve, reject in
}
self.addHandler { result in
q.async {
switch result {
case .resolved(let parameter):
resolve(try closure(parameter))
case .rejected(let error):
reject(error)
}
}
}
Аналогичная реализация
метода error
23. Делегаты - отдельная история
Сложно обернуть в callback
Как нам преобразовать их
в Promise?
Ответ: передаем значение в Promise извне
26. Метод combine
let resultGroup = DispatchGroup()
var objects: [T] = []
let promiseTuple = Promise<[T]>.promiseTuple()
resultGroup.enter()
promise.then { value in
resultGroup.leave()
objects.append(value)
...
}
.error { err in
promiseTuple.reject(err)
}
func combine<T>(q: DispatchQueue,
promises: [Promise<T>]) -> Promise<[T]>
Для каждого promise
37. Когда стоит использовать Promises?
• Сложный бекэнд (последовательные/
параллельные запросы)
• Много трудоемких операций в бекграунд потоке
• Последовательная анимация
• Использование promise в качестве
контейнера
38. Преимущества Promises
• Декларативно - весь код находится рядом
• Хранит результат для переиспользования
• Легко собирать результаты разных операций
• Удобно обрабатывать ошибки
39. Недостатки Promises
• Неудобно отлаживать
• Не подходит для непрерывного потока данных
• Неочевидная работа с делегатами