diff --git a/en/news/2020-02-11_teaching-programming-2019.md b/en/news/2020-02-11_teaching-programming-2019.md
index 1c5703d..85d185d 100644
--- a/en/news/2020-02-11_teaching-programming-2019.md
+++ b/en/news/2020-02-11_teaching-programming-2019.md
@@ -176,7 +176,7 @@ Let's look closer:
1. The function accepts `world` (dictionary) that is used by functions to communicate with each other. `world` consists of three regions (dictionary keys):
* `state` contains variable data used for communication;
* `settings` contain constants to configure functions;
- * `events` contain publishers to be able to subscribe functions to events.
+ * `events` contain [publishers][pub-sub] to be able to subscribe functions to events.
1. An instance of this constructor function is created with `new` operator while parsing `последовательность` module. Practically, everything outside of `run` method is considered to be part of the constructor body. In our case, we create `spheres hidden` variable to count hidden spheres.
1. `run` method is executed each time an event is reported.
1. Since `check for ending` reaction is executed each time a user hides a pair of spheres, we increase `spheres hidden` counter by `2`.
@@ -295,3 +295,4 @@ I'll share answers to these and other questions next year ;)
[screenshot-group]: ../../images/2020-02-11_teaching-to-program-2019_group.jpg
[isomorphic-git]: https://isomorphic-git.org/
[swiftui]: https://www.hackingwithswift.com/quick-start/swiftui/what-is-swiftui
+[pub-sub]: https://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern
diff --git a/en/news/teaching-to-program-2019.html b/en/news/teaching-to-program-2019.html
index 6266bec..f58acd3 100644
--- a/en/news/teaching-to-program-2019.html
+++ b/en/news/teaching-to-program-2019.html
@@ -237,7 +237,7 @@ The class had almost an empty последовательность
world
(dictionary) that is used by functions to communicate with each other. world
consists of three regions (dictionary keys):state
contains variable data used for communication;settings
contain constants to configure functions;events
contain publishers to be able to subscribe functions to events.events
contain publishers to be able to subscribe functions to events.new
operator while parsing последовательность
module. Practically, everything outside of run
method is considered to be part of the constructor body. In our case, we create spheres hidden
variable to count hidden spheres.run
method is executed each time an event is reported.check for ending
reaction is executed each time a user hides a pair of spheres, we increase spheres hidden
counter by 2
.мир
(словарь), используемый для общения функций друг с другом. мир
состоит из трёх областей (ключей словаря):состояние
содержит переменные значения для обмена данными;настройки
содержат константные значения для настройки функций;события
содержат издателей для организации возможности подписать функции на события.события
содержат издателей для организации возможности подписать функции на события.new
при разборе модуля последовательность
. Фактически всё, что не входит в метод исполнить
, является телом конструктора. В частности, здесь мы создаём переменную скрыто сфер
для учёта количества скрытых сфер.исполнить
вызывается на каждое уведомление о событии.проверить окончание
вызывают на событие сокрытия пары сфер, то счётчик скрыто сфер
увеличиваем на 2
.