SlideShare a Scribd company logo
DECOUPLED CODE
IN
Speaker: Anatolii Landyshev
• Founder, CTO of Patriotic Games
• 7 years of experience in
• Unity Certified Developer
http://patriotic.games
Anatolii Landyshev
Why ?
• Max number of supported platforms
Why ?
• Best VR & AR support
Why ?
• 3rd party services support Unity
Why ?
• Editor
Why ?
Component Architecture
Components instead of Inheritance
MonoBehaviour
Player Spaceship
AIPlayer
HumanPlayer
Scout
Defender
Cruiser
MonoBehaviour
Player Spaceship
AIPlayer
HumanPlayer
Scout
Defender
Cruiser
MonoBehaviour
Player Spaceship
AIPlayer
HumanPlayer
Scout
Defender
Cruiser
AIPlayer
Defender
Gun
Composition over inheritance
AIPlayer
Defender
Gun
Composition over inheritance
AIPlayer
Player
AI
Render
Health
Team
Defender
Move
Render
Health
Team
Gun
Components instead of inheritance
AIPlayer
Player
AI
Render
Health
Team
Defender
Move
Render
Health
Team
Gun
Components instead of inheritance
AIPlayer
Player
AI
Render
Health
Team
Gun
Defender
Move
Render
Health
Team
Gun
Components instead of inheritance
AAA games with Unity-like architecture
• No constructor in components
Unity architecture drawbacks
public class X : MonoBehaviour {}
…
var x = new GameObject().AddComponent<X>();
• No single entry point
Unity architecture drawbacks
void main() {}
How to design code in Unity?
The common architecture in Unity
Most Unity tutorials use Singletons
Most Unity tutorials use Singletons
Singleton
• Represents GLOBAL STATE in your code
• Programs using global state are VERY
difficult to test and debug
• Programs relying on global state HIDE their
dependencies
class X {
…
public X() { … }
public int DoSomething() { … }
}
int a = new X().DoSomething();
int b = new X().DoSomething();
Global State
class X {
…
public X() { … }
public int DoSomething() { … }
}
int a = new X().DoSomething();
int b = new X().DoSomething();
Global State
Does a == b or a != b?
Global State
int a = new X()  X
Y
Q
Z
Global State
int a = new X()  X
Y
Q
Z
int b = new X()  X
Y
Q
Z
Global State
int a = new X() 
.DoSomething()
X
Y
Q
Z
int b = new X() 
.DoSomething()
X
Y
Q
Z
a == b
Global State
int a = new X() 
.DoSomething()
X
Y
Q
Z
int b = new X() 
.DoSomething()
X
Y
Q
Z
a != b
GS
Same in Unity
class X : MonoBehaviour {
public int DoSomething() { … }
}
X x1 = new GameObject().AddComponent<X>();
int a = x1.DoSomething();
X x2 = new GameObject().AddComponent<X>();
int b = x2.DoSomething();
Does a == b or a != b?
Deceptive API
Deceptive API
[SerializeField] GameObject _enemyPrefab;
void SpawnEnemy() {
var enemy = Instantiate(_enemyPrefab);
}
Deceptive API
[SerializeField] GameObject _enemyPrefab;
void Awake() {
var enemy = Instantiate(_enemyPrefab);
}
Deceptive API
[SerializeField] GameObject _enemyPrefab;
void Awake() {
var enemy = Instantiate(_enemyPrefab);
}
Deceptive API
[SerializeField] GameObject _enemyPrefab;
[SerializeField] PlayerHealth _player;
void Awake() {
GameManager.Instance.Player = _player;
var enemy = Instantiate(_enemyPrefab);
}
Deceptive API
[SerializeField] GameObject _enemyPrefab;
[SerializeField] PlayerHealth _player;
void Awake() {
GameManager.Instance.Player = _player;
var enemy = Instantiate(_enemyPrefab);
}
Deceptive API
[SerializeField] GameObject _enemyPrefab;
[SerializeField] PlayerHealth _player;
void Start() {
GameManager.Instance.Player = _player;
var enemy = Instantiate(_enemyPrefab);
}
Deceptive API
A a = new A();
B b = new B();
a.x();
b.z();
a.y(b);
B b = new B();
b.z();
A a = new A();
a.x();
a.y(b);
• Code should be commutative (a*b = b*a)
• The above code will fail if there’s Global State
Singleton
public class GameSettings : MonoBehaviour {
public static GameSettings Instance;
private GameObject _state1;
private GameObject _state2;
private GameObject _state3;
void Awake() {
if (Instance == null)
Instance = this;
else if (Instance != this)
Destroy(this);
}
Singleton
public class GameSettings : MonoBehaviour {
private GameObject _state1;
private GameObject _state2;
private GameObject _state3;
void Awake() {}
• Class no longer enforces its “singletoness”
• Application code creates only one instance
Better API – Method Injection
[SerializeField] GameObject _enemyPrefab;
[SerializeField] PlayerHealth _player;
void Start() {
var enemy = Instantiate(_enemyPrefab);
var enemyMovement =
enemy.GetComponent<EnemyMovement>();
enemyMovement.Init(_player, …);
}
Better API – Property Injection
[SerializeField] GameObject _enemyPrefab;
[SerializeField] PlayerHealth _player;
void Start() {
var enemy = Instantiate(_enemyPrefab);
var enemyMovement =
enemy.GetComponent<EnemyMovement>();
enemyMovement.Player = _player;
}
Dependency Injection
Dependency Injection
- better than Singleton
• Constructor injection
Types of Injection
class X {
private Y _y;
public X(Y y) { _y = y; }
…
}
var x = new X(y);
• Constructor injection
Types of Injection
class X {
private Y _y;
public X(Y y) { _y = y; }
…
}
var x = new X(y);
var z = new Z(x);
• Method Injection
Types of Injection
class X {
private Y _y;
public void SetY(Y y) { _y = y; }
…
}
var x = new X();
x.SetY(y);
• Method Injection
Types of Injection
class X {
public void Init(Y y, Z z) {…}
…
}
var x = new X();
x.Init(y, z);
• Property Injection
Types of Injection
class X {
public Z Z {get; set;}
…
}
var x = new X();
x.Z = z;
• Constructor injection
• Method injection
• Property injection
Types of Injection
• Constructor injection
• Method injection
• Property injection
Types of Injection in Unity
X x = new GameObject().AddComponent<X>();
x.Init(a, b, c);
Y y = new GameObject().AddComponent<Y>();
y.x = x;
Z z = Instantiate(_zPrefab);
z.Init(x, y);
Dependency Injection in Unity
Composition Root
House Door Door Nap
Composition Root Example
Dependency Injection done wrong
public class DoorNap {
public DoorNap(Color color) {…}
}
public class Door {
public Door(Color color, Color doorNapColor) {
…
_doorNap = new DoorNap(doorNapColor);
}
}
Dependency Injection done wrong
public class House {
public House(Color wallsColor,
Color doorColor, Color doorNapColor) {
…
_door = new Door(doorColor, doorNapColor);
}
}
Dependency Injection done right
public class DoorNap {
public DoorNap(Color color) {…}
}
public class Door {
public Door(Color color, DoorNap doorNap) {
…
_doorNap = doorNap;
}
}
Dependency Injection done right
public class House {
public House(Color wallsColor, Door door) {
…
_door = door;
}
}
Dependency Injection done right
public class HouseFactory {
public House CreateHouse() {
var doorNap = new DoorNap(Color.yellow);
var door = new Door(Color.brown, doorNap);
var house = new House(Color.white, door);
return house;
}
}
Composition Root
public class HouseFactory {
public House CreateHouse() {
var doorNap = new DoorNap(Color.yellow);
var door = new Door(Color.brown, doorNap);
var house = new House(Color.white, door);
return house;
}
}
Composition Root
in Unity - Script
Composition Root
in Unity - Script
var frisbeeThrower
= new GameObject("FrisbeeThrower")
.AddComponent<FrisbeeThrower>()
.Init(_frisbeePrefab, _hand, _placeForFrisbee,
_throwHandAnimator, _head);
Composition
Root in Unity
- Scene
Composition
Root in Unity
- Scene
No support for
C# Interfaces
Initialization order matters!
Desired Architecture
Desired Architecture
Reusability via Decoupling
Reusability via Decoupling
Reusability via Decoupling
• Rely on interface, not implementation
How to decouple code?
public interface IXHandler {
void DoSomething();
}
class X {
public X(IXHandler handler) {…}
}
• Rely on interface, not implementation
How to decouple code?
class Y : IXHandler {
public void DoSomething() {…}
}
class Z : IXHandler {
public void DoSomething() {…}
}
• Use delegates
How to decouple code?
class X {
public X(Action doSomething) {…}
…
}
void DoSomething() {…}
var x = new X(DoSomething);
• Use events
How to decouple code?
class X {
public event Action OnX;
}
void DoSomething() {…}
var x = new X();
x.OnX += DoSomething;
• Use UnityEvent
How to decouple code?
class X {
public UnityEvent OnX;
}
void DoSomething() {…}
var x = new X();
x.OnX.AddListener(DoSomething);
• Use UnityEvent
How to decouple code?
• Supports methods, properties, events
• Best performance
• Supported by DI Containers
• Supported by Moq frameworks
• Unsupported in Unity Inspector
Using C# interfaces is preferred
IOC in
Components instead of Inheritance
How about Components
instead of Interfaces?
Component + UnityEvent
instead of Interface
public class XHandler : MonoBehaviour {
public UnityEvent OnDoSomething;
public void DoSomething() {
OnDoSomething.Invoke();
};
}
public XHandler Handler;
Handler.DoSomething();
Component + UnityEvent
instead of Interface
public class XHandler : MonoBehaviour {
public UnityEvent OnDoSomething;
public void DoSomething() {
OnDoSomething.Invoke();
};
}
[SerializeField] XHandler _handler;
_handler.DoSomething();
Component + UnityEvent
instead of Interface
Component + UnityEvent
instead of Interface
Component + UnityEvent
instead of Interface
• Supports methods, properties, events
• Supported by some DI Containers
• Supported by Moq frameworks
• Supported in Unity Inspector
• Lower performance due to UnityEvent
Conclusion
• Singletons and Global State cause problems
• Dependency Injection is better
• Interfaces, Delegates, Events,
Component + UnityEvent are the ways to
decouple your module from rest of code
Questions?

More Related Content

Similar to Анатолій Ландишев - “Незв’язний код у Unity” GameCC 2017

Rapid prototyping with ScriptableObjects
Rapid prototyping with ScriptableObjectsRapid prototyping with ScriptableObjects
Rapid prototyping with ScriptableObjects
Giorgio Pomettini
 
The Challenge of Bringing FEZ to PlayStation Platforms
The Challenge of Bringing FEZ to PlayStation PlatformsThe Challenge of Bringing FEZ to PlayStation Platforms
The Challenge of Bringing FEZ to PlayStation Platforms
Miguel Angel Horna
 
What’s new in C# 6
What’s new in C# 6What’s new in C# 6
What’s new in C# 6
Fiyaz Hasan
 
Nikita Popov "What’s new in PHP 8.0?"
Nikita Popov "What’s new in PHP 8.0?"Nikita Popov "What’s new in PHP 8.0?"
Nikita Popov "What’s new in PHP 8.0?"
Fwdays
 
What's new in PHP 8.0?
What's new in PHP 8.0?What's new in PHP 8.0?
What's new in PHP 8.0?
Nikita Popov
 
IntroToEngineDevelopment.pdf
IntroToEngineDevelopment.pdfIntroToEngineDevelopment.pdf
IntroToEngineDevelopment.pdf
zakest1
 
Game age ppt
Game age pptGame age ppt
Game age ppt
Ahmed Yousef
 
Secret unit testing tools no one ever told you about
Secret unit testing tools no one ever told you aboutSecret unit testing tools no one ever told you about
Secret unit testing tools no one ever told you about
Dror Helper
 
Dynamic C#
Dynamic C# Dynamic C#
Dynamic C#
Antya Dev
 
Dlr
DlrDlr
Matteo Vaccari - TDD per Android | Codemotion Milan 2015
Matteo Vaccari - TDD per Android | Codemotion Milan 2015Matteo Vaccari - TDD per Android | Codemotion Milan 2015
Matteo Vaccari - TDD per Android | Codemotion Milan 2015
Codemotion
 
Introduction to-java
Introduction to-javaIntroduction to-java
Intro to object oriented programming
Intro to object oriented programmingIntro to object oriented programming
Intro to object oriented programming
David Giard
 
TDD and mobile development: some forgotten techniques, illustrated with Android
TDD and mobile development: some forgotten techniques, illustrated with AndroidTDD and mobile development: some forgotten techniques, illustrated with Android
TDD and mobile development: some forgotten techniques, illustrated with Android
Codemotion
 
Object-oriented Basics
Object-oriented BasicsObject-oriented Basics
Object-oriented Basics
Jamie (Taka) Wang
 
All a flutter about Flutter.io
All a flutter about Flutter.ioAll a flutter about Flutter.io
All a flutter about Flutter.io
Steven Cooper
 
A la découverte de TypeScript
A la découverte de TypeScriptA la découverte de TypeScript
A la découverte de TypeScript
Denis Voituron
 
Csise15 codehunt
Csise15 codehuntCsise15 codehunt
Csise15 codehunt
Tao Xie
 
Using Reflections and Automatic Code Generation
Using Reflections and Automatic Code GenerationUsing Reflections and Automatic Code Generation
Using Reflections and Automatic Code Generation
Ivan Dolgushin
 
Tdd in unity
Tdd in unityTdd in unity
Tdd in unity
Eric Smith
 

Similar to Анатолій Ландишев - “Незв’язний код у Unity” GameCC 2017 (20)

Rapid prototyping with ScriptableObjects
Rapid prototyping with ScriptableObjectsRapid prototyping with ScriptableObjects
Rapid prototyping with ScriptableObjects
 
The Challenge of Bringing FEZ to PlayStation Platforms
The Challenge of Bringing FEZ to PlayStation PlatformsThe Challenge of Bringing FEZ to PlayStation Platforms
The Challenge of Bringing FEZ to PlayStation Platforms
 
What’s new in C# 6
What’s new in C# 6What’s new in C# 6
What’s new in C# 6
 
Nikita Popov "What’s new in PHP 8.0?"
Nikita Popov "What’s new in PHP 8.0?"Nikita Popov "What’s new in PHP 8.0?"
Nikita Popov "What’s new in PHP 8.0?"
 
What's new in PHP 8.0?
What's new in PHP 8.0?What's new in PHP 8.0?
What's new in PHP 8.0?
 
IntroToEngineDevelopment.pdf
IntroToEngineDevelopment.pdfIntroToEngineDevelopment.pdf
IntroToEngineDevelopment.pdf
 
Game age ppt
Game age pptGame age ppt
Game age ppt
 
Secret unit testing tools no one ever told you about
Secret unit testing tools no one ever told you aboutSecret unit testing tools no one ever told you about
Secret unit testing tools no one ever told you about
 
Dynamic C#
Dynamic C# Dynamic C#
Dynamic C#
 
Dlr
DlrDlr
Dlr
 
Matteo Vaccari - TDD per Android | Codemotion Milan 2015
Matteo Vaccari - TDD per Android | Codemotion Milan 2015Matteo Vaccari - TDD per Android | Codemotion Milan 2015
Matteo Vaccari - TDD per Android | Codemotion Milan 2015
 
Introduction to-java
Introduction to-javaIntroduction to-java
Introduction to-java
 
Intro to object oriented programming
Intro to object oriented programmingIntro to object oriented programming
Intro to object oriented programming
 
TDD and mobile development: some forgotten techniques, illustrated with Android
TDD and mobile development: some forgotten techniques, illustrated with AndroidTDD and mobile development: some forgotten techniques, illustrated with Android
TDD and mobile development: some forgotten techniques, illustrated with Android
 
Object-oriented Basics
Object-oriented BasicsObject-oriented Basics
Object-oriented Basics
 
All a flutter about Flutter.io
All a flutter about Flutter.ioAll a flutter about Flutter.io
All a flutter about Flutter.io
 
A la découverte de TypeScript
A la découverte de TypeScriptA la découverte de TypeScript
A la découverte de TypeScript
 
Csise15 codehunt
Csise15 codehuntCsise15 codehunt
Csise15 codehunt
 
Using Reflections and Automatic Code Generation
Using Reflections and Automatic Code GenerationUsing Reflections and Automatic Code Generation
Using Reflections and Automatic Code Generation
 
Tdd in unity
Tdd in unityTdd in unity
Tdd in unity
 

More from Lviv Startup Club

Maksym Vyshnivetskyi: PMO KPIs (UA) (#12)
Maksym Vyshnivetskyi: PMO KPIs (UA) (#12)Maksym Vyshnivetskyi: PMO KPIs (UA) (#12)
Maksym Vyshnivetskyi: PMO KPIs (UA) (#12)
Lviv Startup Club
 
Artem Bykovets: Чому люди не стають раптово кросс-функціональними, хоча в нас...
Artem Bykovets: Чому люди не стають раптово кросс-функціональними, хоча в нас...Artem Bykovets: Чому люди не стають раптово кросс-функціональними, хоча в нас...
Artem Bykovets: Чому люди не стають раптово кросс-функціональними, хоча в нас...
Lviv Startup Club
 
Evgen Osmak: Methods of key project parameters estimation: from the shaman-in...
Evgen Osmak: Methods of key project parameters estimation: from the shaman-in...Evgen Osmak: Methods of key project parameters estimation: from the shaman-in...
Evgen Osmak: Methods of key project parameters estimation: from the shaman-in...
Lviv Startup Club
 
Helen Lubchak: Тренди в управлінні проєктами та miltech (UA)
Helen Lubchak: Тренди в управлінні проєктами та miltech (UA)Helen Lubchak: Тренди в управлінні проєктами та miltech (UA)
Helen Lubchak: Тренди в управлінні проєктами та miltech (UA)
Lviv Startup Club
 
Maksym Vyshnivetskyi: PMO Quality Management (UA)
Maksym Vyshnivetskyi: PMO Quality Management (UA)Maksym Vyshnivetskyi: PMO Quality Management (UA)
Maksym Vyshnivetskyi: PMO Quality Management (UA)
Lviv Startup Club
 
Anatolii Vintsyk: Комунікації в проєкті під час війни (UA)
Anatolii Vintsyk: Комунікації в проєкті під час війни (UA)Anatolii Vintsyk: Комунікації в проєкті під час війни (UA)
Anatolii Vintsyk: Комунікації в проєкті під час війни (UA)
Lviv Startup Club
 
Natalia Renska & Roman Astafiev: Нарциси і психопати в організаціях. Як це вп...
Natalia Renska & Roman Astafiev: Нарциси і психопати в організаціях. Як це вп...Natalia Renska & Roman Astafiev: Нарциси і психопати в організаціях. Як це вп...
Natalia Renska & Roman Astafiev: Нарциси і психопати в організаціях. Як це вп...
Lviv Startup Club
 
Diana Natkhir: Інструменти Change management для роботи з клієнтами в продукт...
Diana Natkhir: Інструменти Change management для роботи з клієнтами в продукт...Diana Natkhir: Інструменти Change management для роботи з клієнтами в продукт...
Diana Natkhir: Інструменти Change management для роботи з клієнтами в продукт...
Lviv Startup Club
 
Khristina Pototska: Steering the Ship: Product Management in Startups vs. Glo...
Khristina Pototska: Steering the Ship: Product Management in Startups vs. Glo...Khristina Pototska: Steering the Ship: Product Management in Startups vs. Glo...
Khristina Pototska: Steering the Ship: Product Management in Startups vs. Glo...
Lviv Startup Club
 
Oleksandr Buratynskyi: Як Agile Coach мікроменеджером став 🙃 (UA)
Oleksandr Buratynskyi: Як Agile Coach мікроменеджером став 🙃 (UA)Oleksandr Buratynskyi: Як Agile Coach мікроменеджером став 🙃 (UA)
Oleksandr Buratynskyi: Як Agile Coach мікроменеджером став 🙃 (UA)
Lviv Startup Club
 
Igor Protsenko: Difference between outsourcing and product companies for prod...
Igor Protsenko: Difference between outsourcing and product companies for prod...Igor Protsenko: Difference between outsourcing and product companies for prod...
Igor Protsenko: Difference between outsourcing and product companies for prod...
Lviv Startup Club
 
Kseniya Leshchenko: Shared development support service model as the way to ma...
Kseniya Leshchenko: Shared development support service model as the way to ma...Kseniya Leshchenko: Shared development support service model as the way to ma...
Kseniya Leshchenko: Shared development support service model as the way to ma...
Lviv Startup Club
 
Valeriy Kozlov: Taming the Startup Chaos: GTD for Founders & Small Teams (UA)
Valeriy Kozlov: Taming the Startup Chaos: GTD for Founders & Small Teams (UA)Valeriy Kozlov: Taming the Startup Chaos: GTD for Founders & Small Teams (UA)
Valeriy Kozlov: Taming the Startup Chaos: GTD for Founders & Small Teams (UA)
Lviv Startup Club
 
Anna Kompanets: Проблеми впровадження проєктів, про які б ви ніколи не подума...
Anna Kompanets: Проблеми впровадження проєктів, про які б ви ніколи не подума...Anna Kompanets: Проблеми впровадження проєктів, про які б ви ніколи не подума...
Anna Kompanets: Проблеми впровадження проєктів, про які б ви ніколи не подума...
Lviv Startup Club
 
Viktoriia Honcharova: PMI: нова стратегія розвитку управління проєктами (UA)
Viktoriia Honcharova: PMI: нова стратегія розвитку управління проєктами (UA)Viktoriia Honcharova: PMI: нова стратегія розвитку управління проєктами (UA)
Viktoriia Honcharova: PMI: нова стратегія розвитку управління проєктами (UA)
Lviv Startup Club
 
Andrii Mandrika: Як системно допомагати ЗСУ, використовуючи продуктовий підхі...
Andrii Mandrika: Як системно допомагати ЗСУ, використовуючи продуктовий підхі...Andrii Mandrika: Як системно допомагати ЗСУ, використовуючи продуктовий підхі...
Andrii Mandrika: Як системно допомагати ЗСУ, використовуючи продуктовий підхі...
Lviv Startup Club
 
Michael Vidyakin: From Vision to Victory: Mastering the Project-Strategy Conn...
Michael Vidyakin: From Vision to Victory: Mastering the Project-Strategy Conn...Michael Vidyakin: From Vision to Victory: Mastering the Project-Strategy Conn...
Michael Vidyakin: From Vision to Victory: Mastering the Project-Strategy Conn...
Lviv Startup Club
 
Kateryna Kubasova: Абстрактне Оксфордське лідерство конкретному українському ...
Kateryna Kubasova: Абстрактне Оксфордське лідерство конкретному українському ...Kateryna Kubasova: Абстрактне Оксфордське лідерство конкретному українському ...
Kateryna Kubasova: Абстрактне Оксфордське лідерство конкретному українському ...
Lviv Startup Club
 
Andrii Salii: Навіщо публічному сектору NPS: будуємо довіру через відкритість...
Andrii Salii: Навіщо публічному сектору NPS: будуємо довіру через відкритість...Andrii Salii: Навіщо публічному сектору NPS: будуємо довіру через відкритість...
Andrii Salii: Навіщо публічному сектору NPS: будуємо довіру через відкритість...
Lviv Startup Club
 
Anton Hlazkov: Впровадження змін – це процес чи проєкт? Чому важливо розуміти...
Anton Hlazkov: Впровадження змін – це процес чи проєкт? Чому важливо розуміти...Anton Hlazkov: Впровадження змін – це процес чи проєкт? Чому важливо розуміти...
Anton Hlazkov: Впровадження змін – це процес чи проєкт? Чому важливо розуміти...
Lviv Startup Club
 

More from Lviv Startup Club (20)

Maksym Vyshnivetskyi: PMO KPIs (UA) (#12)
Maksym Vyshnivetskyi: PMO KPIs (UA) (#12)Maksym Vyshnivetskyi: PMO KPIs (UA) (#12)
Maksym Vyshnivetskyi: PMO KPIs (UA) (#12)
 
Artem Bykovets: Чому люди не стають раптово кросс-функціональними, хоча в нас...
Artem Bykovets: Чому люди не стають раптово кросс-функціональними, хоча в нас...Artem Bykovets: Чому люди не стають раптово кросс-функціональними, хоча в нас...
Artem Bykovets: Чому люди не стають раптово кросс-функціональними, хоча в нас...
 
Evgen Osmak: Methods of key project parameters estimation: from the shaman-in...
Evgen Osmak: Methods of key project parameters estimation: from the shaman-in...Evgen Osmak: Methods of key project parameters estimation: from the shaman-in...
Evgen Osmak: Methods of key project parameters estimation: from the shaman-in...
 
Helen Lubchak: Тренди в управлінні проєктами та miltech (UA)
Helen Lubchak: Тренди в управлінні проєктами та miltech (UA)Helen Lubchak: Тренди в управлінні проєктами та miltech (UA)
Helen Lubchak: Тренди в управлінні проєктами та miltech (UA)
 
Maksym Vyshnivetskyi: PMO Quality Management (UA)
Maksym Vyshnivetskyi: PMO Quality Management (UA)Maksym Vyshnivetskyi: PMO Quality Management (UA)
Maksym Vyshnivetskyi: PMO Quality Management (UA)
 
Anatolii Vintsyk: Комунікації в проєкті під час війни (UA)
Anatolii Vintsyk: Комунікації в проєкті під час війни (UA)Anatolii Vintsyk: Комунікації в проєкті під час війни (UA)
Anatolii Vintsyk: Комунікації в проєкті під час війни (UA)
 
Natalia Renska & Roman Astafiev: Нарциси і психопати в організаціях. Як це вп...
Natalia Renska & Roman Astafiev: Нарциси і психопати в організаціях. Як це вп...Natalia Renska & Roman Astafiev: Нарциси і психопати в організаціях. Як це вп...
Natalia Renska & Roman Astafiev: Нарциси і психопати в організаціях. Як це вп...
 
Diana Natkhir: Інструменти Change management для роботи з клієнтами в продукт...
Diana Natkhir: Інструменти Change management для роботи з клієнтами в продукт...Diana Natkhir: Інструменти Change management для роботи з клієнтами в продукт...
Diana Natkhir: Інструменти Change management для роботи з клієнтами в продукт...
 
Khristina Pototska: Steering the Ship: Product Management in Startups vs. Glo...
Khristina Pototska: Steering the Ship: Product Management in Startups vs. Glo...Khristina Pototska: Steering the Ship: Product Management in Startups vs. Glo...
Khristina Pototska: Steering the Ship: Product Management in Startups vs. Glo...
 
Oleksandr Buratynskyi: Як Agile Coach мікроменеджером став 🙃 (UA)
Oleksandr Buratynskyi: Як Agile Coach мікроменеджером став 🙃 (UA)Oleksandr Buratynskyi: Як Agile Coach мікроменеджером став 🙃 (UA)
Oleksandr Buratynskyi: Як Agile Coach мікроменеджером став 🙃 (UA)
 
Igor Protsenko: Difference between outsourcing and product companies for prod...
Igor Protsenko: Difference between outsourcing and product companies for prod...Igor Protsenko: Difference between outsourcing and product companies for prod...
Igor Protsenko: Difference between outsourcing and product companies for prod...
 
Kseniya Leshchenko: Shared development support service model as the way to ma...
Kseniya Leshchenko: Shared development support service model as the way to ma...Kseniya Leshchenko: Shared development support service model as the way to ma...
Kseniya Leshchenko: Shared development support service model as the way to ma...
 
Valeriy Kozlov: Taming the Startup Chaos: GTD for Founders & Small Teams (UA)
Valeriy Kozlov: Taming the Startup Chaos: GTD for Founders & Small Teams (UA)Valeriy Kozlov: Taming the Startup Chaos: GTD for Founders & Small Teams (UA)
Valeriy Kozlov: Taming the Startup Chaos: GTD for Founders & Small Teams (UA)
 
Anna Kompanets: Проблеми впровадження проєктів, про які б ви ніколи не подума...
Anna Kompanets: Проблеми впровадження проєктів, про які б ви ніколи не подума...Anna Kompanets: Проблеми впровадження проєктів, про які б ви ніколи не подума...
Anna Kompanets: Проблеми впровадження проєктів, про які б ви ніколи не подума...
 
Viktoriia Honcharova: PMI: нова стратегія розвитку управління проєктами (UA)
Viktoriia Honcharova: PMI: нова стратегія розвитку управління проєктами (UA)Viktoriia Honcharova: PMI: нова стратегія розвитку управління проєктами (UA)
Viktoriia Honcharova: PMI: нова стратегія розвитку управління проєктами (UA)
 
Andrii Mandrika: Як системно допомагати ЗСУ, використовуючи продуктовий підхі...
Andrii Mandrika: Як системно допомагати ЗСУ, використовуючи продуктовий підхі...Andrii Mandrika: Як системно допомагати ЗСУ, використовуючи продуктовий підхі...
Andrii Mandrika: Як системно допомагати ЗСУ, використовуючи продуктовий підхі...
 
Michael Vidyakin: From Vision to Victory: Mastering the Project-Strategy Conn...
Michael Vidyakin: From Vision to Victory: Mastering the Project-Strategy Conn...Michael Vidyakin: From Vision to Victory: Mastering the Project-Strategy Conn...
Michael Vidyakin: From Vision to Victory: Mastering the Project-Strategy Conn...
 
Kateryna Kubasova: Абстрактне Оксфордське лідерство конкретному українському ...
Kateryna Kubasova: Абстрактне Оксфордське лідерство конкретному українському ...Kateryna Kubasova: Абстрактне Оксфордське лідерство конкретному українському ...
Kateryna Kubasova: Абстрактне Оксфордське лідерство конкретному українському ...
 
Andrii Salii: Навіщо публічному сектору NPS: будуємо довіру через відкритість...
Andrii Salii: Навіщо публічному сектору NPS: будуємо довіру через відкритість...Andrii Salii: Навіщо публічному сектору NPS: будуємо довіру через відкритість...
Andrii Salii: Навіщо публічному сектору NPS: будуємо довіру через відкритість...
 
Anton Hlazkov: Впровадження змін – це процес чи проєкт? Чому важливо розуміти...
Anton Hlazkov: Впровадження змін – це процес чи проєкт? Чому важливо розуміти...Anton Hlazkov: Впровадження змін – це процес чи проєкт? Чому важливо розуміти...
Anton Hlazkov: Впровадження змін – це процес чи проєкт? Чому важливо розуміти...
 

Recently uploaded

Chapter wise All Notes of First year Basic Civil Engineering.pptx
Chapter wise All Notes of First year Basic Civil Engineering.pptxChapter wise All Notes of First year Basic Civil Engineering.pptx
Chapter wise All Notes of First year Basic Civil Engineering.pptx
Denish Jangid
 
How to Build a Module in Odoo 17 Using the Scaffold Method
How to Build a Module in Odoo 17 Using the Scaffold MethodHow to Build a Module in Odoo 17 Using the Scaffold Method
How to Build a Module in Odoo 17 Using the Scaffold Method
Celine George
 
RHEOLOGY Physical pharmaceutics-II notes for B.pharm 4th sem students
RHEOLOGY Physical pharmaceutics-II notes for B.pharm 4th sem studentsRHEOLOGY Physical pharmaceutics-II notes for B.pharm 4th sem students
RHEOLOGY Physical pharmaceutics-II notes for B.pharm 4th sem students
Himanshu Rai
 
Wound healing PPT
Wound healing PPTWound healing PPT
Wound healing PPT
Jyoti Chand
 
PIMS Job Advertisement 2024.pdf Islamabad
PIMS Job Advertisement 2024.pdf IslamabadPIMS Job Advertisement 2024.pdf Islamabad
PIMS Job Advertisement 2024.pdf Islamabad
AyyanKhan40
 
BBR 2024 Summer Sessions Interview Training
BBR  2024 Summer Sessions Interview TrainingBBR  2024 Summer Sessions Interview Training
BBR 2024 Summer Sessions Interview Training
Katrina Pritchard
 
Pollock and Snow "DEIA in the Scholarly Landscape, Session One: Setting Expec...
Pollock and Snow "DEIA in the Scholarly Landscape, Session One: Setting Expec...Pollock and Snow "DEIA in the Scholarly Landscape, Session One: Setting Expec...
Pollock and Snow "DEIA in the Scholarly Landscape, Session One: Setting Expec...
National Information Standards Organization (NISO)
 
How to Make a Field Mandatory in Odoo 17
How to Make a Field Mandatory in Odoo 17How to Make a Field Mandatory in Odoo 17
How to Make a Field Mandatory in Odoo 17
Celine George
 
How to Add Chatter in the odoo 17 ERP Module
How to Add Chatter in the odoo 17 ERP ModuleHow to Add Chatter in the odoo 17 ERP Module
How to Add Chatter in the odoo 17 ERP Module
Celine George
 
C1 Rubenstein AP HuG xxxxxxxxxxxxxx.pptx
C1 Rubenstein AP HuG xxxxxxxxxxxxxx.pptxC1 Rubenstein AP HuG xxxxxxxxxxxxxx.pptx
C1 Rubenstein AP HuG xxxxxxxxxxxxxx.pptx
mulvey2
 
What is Digital Literacy? A guest blog from Andy McLaughlin, University of Ab...
What is Digital Literacy? A guest blog from Andy McLaughlin, University of Ab...What is Digital Literacy? A guest blog from Andy McLaughlin, University of Ab...
What is Digital Literacy? A guest blog from Andy McLaughlin, University of Ab...
GeorgeMilliken2
 
A Independência da América Espanhola LAPBOOK.pdf
A Independência da América Espanhola LAPBOOK.pdfA Independência da América Espanhola LAPBOOK.pdf
A Independência da América Espanhola LAPBOOK.pdf
Jean Carlos Nunes Paixão
 
NEWSPAPERS - QUESTION 1 - REVISION POWERPOINT.pptx
NEWSPAPERS - QUESTION 1 - REVISION POWERPOINT.pptxNEWSPAPERS - QUESTION 1 - REVISION POWERPOINT.pptx
NEWSPAPERS - QUESTION 1 - REVISION POWERPOINT.pptx
iammrhaywood
 
Digital Artefact 1 - Tiny Home Environmental Design
Digital Artefact 1 - Tiny Home Environmental DesignDigital Artefact 1 - Tiny Home Environmental Design
Digital Artefact 1 - Tiny Home Environmental Design
amberjdewit93
 
ANATOMY AND BIOMECHANICS OF HIP JOINT.pdf
ANATOMY AND BIOMECHANICS OF HIP JOINT.pdfANATOMY AND BIOMECHANICS OF HIP JOINT.pdf
ANATOMY AND BIOMECHANICS OF HIP JOINT.pdf
Priyankaranawat4
 
বাংলাদেশ অর্থনৈতিক সমীক্ষা (Economic Review) ২০২৪ UJS App.pdf
বাংলাদেশ অর্থনৈতিক সমীক্ষা (Economic Review) ২০২৪ UJS App.pdfবাংলাদেশ অর্থনৈতিক সমীক্ষা (Economic Review) ২০২৪ UJS App.pdf
বাংলাদেশ অর্থনৈতিক সমীক্ষা (Economic Review) ২০২৪ UJS App.pdf
eBook.com.bd (প্রয়োজনীয় বাংলা বই)
 
Hindi varnamala | hindi alphabet PPT.pdf
Hindi varnamala | hindi alphabet PPT.pdfHindi varnamala | hindi alphabet PPT.pdf
Hindi varnamala | hindi alphabet PPT.pdf
Dr. Mulla Adam Ali
 
Film vocab for eal 3 students: Australia the movie
Film vocab for eal 3 students: Australia the movieFilm vocab for eal 3 students: Australia the movie
Film vocab for eal 3 students: Australia the movie
Nicholas Montgomery
 
Reimagining Your Library Space: How to Increase the Vibes in Your Library No ...
Reimagining Your Library Space: How to Increase the Vibes in Your Library No ...Reimagining Your Library Space: How to Increase the Vibes in Your Library No ...
Reimagining Your Library Space: How to Increase the Vibes in Your Library No ...
Diana Rendina
 
Leveraging Generative AI to Drive Nonprofit Innovation
Leveraging Generative AI to Drive Nonprofit InnovationLeveraging Generative AI to Drive Nonprofit Innovation
Leveraging Generative AI to Drive Nonprofit Innovation
TechSoup
 

Recently uploaded (20)

Chapter wise All Notes of First year Basic Civil Engineering.pptx
Chapter wise All Notes of First year Basic Civil Engineering.pptxChapter wise All Notes of First year Basic Civil Engineering.pptx
Chapter wise All Notes of First year Basic Civil Engineering.pptx
 
How to Build a Module in Odoo 17 Using the Scaffold Method
How to Build a Module in Odoo 17 Using the Scaffold MethodHow to Build a Module in Odoo 17 Using the Scaffold Method
How to Build a Module in Odoo 17 Using the Scaffold Method
 
RHEOLOGY Physical pharmaceutics-II notes for B.pharm 4th sem students
RHEOLOGY Physical pharmaceutics-II notes for B.pharm 4th sem studentsRHEOLOGY Physical pharmaceutics-II notes for B.pharm 4th sem students
RHEOLOGY Physical pharmaceutics-II notes for B.pharm 4th sem students
 
Wound healing PPT
Wound healing PPTWound healing PPT
Wound healing PPT
 
PIMS Job Advertisement 2024.pdf Islamabad
PIMS Job Advertisement 2024.pdf IslamabadPIMS Job Advertisement 2024.pdf Islamabad
PIMS Job Advertisement 2024.pdf Islamabad
 
BBR 2024 Summer Sessions Interview Training
BBR  2024 Summer Sessions Interview TrainingBBR  2024 Summer Sessions Interview Training
BBR 2024 Summer Sessions Interview Training
 
Pollock and Snow "DEIA in the Scholarly Landscape, Session One: Setting Expec...
Pollock and Snow "DEIA in the Scholarly Landscape, Session One: Setting Expec...Pollock and Snow "DEIA in the Scholarly Landscape, Session One: Setting Expec...
Pollock and Snow "DEIA in the Scholarly Landscape, Session One: Setting Expec...
 
How to Make a Field Mandatory in Odoo 17
How to Make a Field Mandatory in Odoo 17How to Make a Field Mandatory in Odoo 17
How to Make a Field Mandatory in Odoo 17
 
How to Add Chatter in the odoo 17 ERP Module
How to Add Chatter in the odoo 17 ERP ModuleHow to Add Chatter in the odoo 17 ERP Module
How to Add Chatter in the odoo 17 ERP Module
 
C1 Rubenstein AP HuG xxxxxxxxxxxxxx.pptx
C1 Rubenstein AP HuG xxxxxxxxxxxxxx.pptxC1 Rubenstein AP HuG xxxxxxxxxxxxxx.pptx
C1 Rubenstein AP HuG xxxxxxxxxxxxxx.pptx
 
What is Digital Literacy? A guest blog from Andy McLaughlin, University of Ab...
What is Digital Literacy? A guest blog from Andy McLaughlin, University of Ab...What is Digital Literacy? A guest blog from Andy McLaughlin, University of Ab...
What is Digital Literacy? A guest blog from Andy McLaughlin, University of Ab...
 
A Independência da América Espanhola LAPBOOK.pdf
A Independência da América Espanhola LAPBOOK.pdfA Independência da América Espanhola LAPBOOK.pdf
A Independência da América Espanhola LAPBOOK.pdf
 
NEWSPAPERS - QUESTION 1 - REVISION POWERPOINT.pptx
NEWSPAPERS - QUESTION 1 - REVISION POWERPOINT.pptxNEWSPAPERS - QUESTION 1 - REVISION POWERPOINT.pptx
NEWSPAPERS - QUESTION 1 - REVISION POWERPOINT.pptx
 
Digital Artefact 1 - Tiny Home Environmental Design
Digital Artefact 1 - Tiny Home Environmental DesignDigital Artefact 1 - Tiny Home Environmental Design
Digital Artefact 1 - Tiny Home Environmental Design
 
ANATOMY AND BIOMECHANICS OF HIP JOINT.pdf
ANATOMY AND BIOMECHANICS OF HIP JOINT.pdfANATOMY AND BIOMECHANICS OF HIP JOINT.pdf
ANATOMY AND BIOMECHANICS OF HIP JOINT.pdf
 
বাংলাদেশ অর্থনৈতিক সমীক্ষা (Economic Review) ২০২৪ UJS App.pdf
বাংলাদেশ অর্থনৈতিক সমীক্ষা (Economic Review) ২০২৪ UJS App.pdfবাংলাদেশ অর্থনৈতিক সমীক্ষা (Economic Review) ২০২৪ UJS App.pdf
বাংলাদেশ অর্থনৈতিক সমীক্ষা (Economic Review) ২০২৪ UJS App.pdf
 
Hindi varnamala | hindi alphabet PPT.pdf
Hindi varnamala | hindi alphabet PPT.pdfHindi varnamala | hindi alphabet PPT.pdf
Hindi varnamala | hindi alphabet PPT.pdf
 
Film vocab for eal 3 students: Australia the movie
Film vocab for eal 3 students: Australia the movieFilm vocab for eal 3 students: Australia the movie
Film vocab for eal 3 students: Australia the movie
 
Reimagining Your Library Space: How to Increase the Vibes in Your Library No ...
Reimagining Your Library Space: How to Increase the Vibes in Your Library No ...Reimagining Your Library Space: How to Increase the Vibes in Your Library No ...
Reimagining Your Library Space: How to Increase the Vibes in Your Library No ...
 
Leveraging Generative AI to Drive Nonprofit Innovation
Leveraging Generative AI to Drive Nonprofit InnovationLeveraging Generative AI to Drive Nonprofit Innovation
Leveraging Generative AI to Drive Nonprofit Innovation
 

Анатолій Ландишев - “Незв’язний код у Unity” GameCC 2017