На что вы всегда найдете время?
Anonymous Poll
31%
Написать хороший код
69%
Бесконечно искать ошибку в плохом
Скоро в метархии будет новый Emitter оптимизированый для V8, на него переедут протокод metacom, сервер приложений impress, и т.д. но вообще его полезно даже просто почитать: https://github.com/metarhia/metautil/blob/ee/lib/events.js
const ee = new Emitter();
ee.on('eventA', (data) => {
console.log({ data });
// Prints: { data: 'value' }
});
ee.emit('eventA', 'value');
const ee = new Emitter();
setTimeout(() => {
ee.emit('eventA', 'value');
}, 100);
const result = await ee.toPromise('eventA');
const ee = new Emitter();
passReferenceSomewhere(ee);
const iterable = ee.toAsyncIterable('eventB');
for await (const eventData of iterable) {
console.log({ eventData });
}
GitHub
metautil/lib/events.js at ee · metarhia/metautil
Metarhia utilities 🧰. Contribute to metarhia/metautil development by creating an account on GitHub.
🧩 Практический мастер-класс Паттерны в JavaScript и TypeScript
⏰ Начало: в эту субботу 2025-03-22 в 15:00 (Киевское время)
👳 Тимур Шемсединов
🥷 Илья Климов
🧔♂️ Дмитрий Нечай
Изучение Патернов помогает:
✅ Писать более понятный код, который просто читать
✅ Эффективно оптимизировать JavaScript и TypeScript
✅ Быстрее и качественнее решать задачи
✅ Проектировать системы, которые просто изменять
🤖 Регистрация через Телеграмм-бот: https://patterns-js.com/0jiuic?traffic_mark=krzdaj
⏰ Начало: в эту субботу 2025-03-22 в 15:00 (Киевское время)
👳 Тимур Шемсединов
🥷 Илья Климов
🧔♂️ Дмитрий Нечай
Изучение Патернов помогает:
✅ Писать более понятный код, который просто читать
✅ Эффективно оптимизировать JavaScript и TypeScript
✅ Быстрее и качественнее решать задачи
✅ Проектировать системы, которые просто изменять
🤖 Регистрация через Телеграмм-бот: https://patterns-js.com/0jiuic?traffic_mark=krzdaj
HowProgrammingWorks - JavaScript and Node.js Programming
🧩 Практический мастер-класс Паттерны в JavaScript и TypeScript ⏰ Начало: в эту субботу 2025-03-22 в 15:00 (Киевское время) 👳 Тимур Шемсединов 🥷 Илья Климов 🧔♂️ Дмитрий Нечай Изучение Патернов помогает: ✅ Писать более понятный код, который просто читать…
У кого не выходит выбрать язык на лендинге курса, можете сделать это в консоли, при помощи паттернов, самое базовое решение тут, но вы не останавливайтесь:
class Maybe {
constructor(value) {
this.value = value;
}
static of(value) {
return new Maybe(value);
}
map(fn) {
return this.value ? Maybe.of(fn(this.value)) : this;
}
getValue(defaultValue) {
return this.value || defaultValue;
}
}
class SelectCommand {
constructor(selector, value) {
this.selector = selector;
this.value = value;
}
execute() {
return Maybe.of(document.querySelector(this.selector))
.map(el => (el.value = this.value, el))
.map(el => el.dispatchEvent(new Event('change', { bubbles: true })))
.getValue(null);
}
}
const lang = 'RU'; // or UKR
new SelectCommand('.form-select-arrow', lang).execute();
Please open Telegram to view this post
VIEW IN TELEGRAM
🧩 Запись стрима с регистрацией на мастер класс
https://youtube.com/live/kw3UBUOAh0I
Бесплатный мастер-класс "Паттерны в JavaScript и TypeScript"
⏰ Начало: в эту субботу 22 марта в 15:00 (Киевское время)
Участники:
👳 Тимур Шемсединов
🥷 Илья Климов
🧔♂️ Дмитрий Нечай
Регистрация через Телеграмм-бот: https://patterns-js.com/tpk6nh?traffic_mark=7k8x47&utm_source=organic&utm_medium=telegram2metarhia&utm_campaign=web
https://youtube.com/live/kw3UBUOAh0I
Бесплатный мастер-класс "Паттерны в JavaScript и TypeScript"
⏰ Начало: в эту субботу 22 марта в 15:00 (Киевское время)
Участники:
👳 Тимур Шемсединов
🥷 Илья Климов
🧔♂️ Дмитрий Нечай
Регистрация через Телеграмм-бот: https://patterns-js.com/tpk6nh?traffic_mark=7k8x47&utm_source=organic&utm_medium=telegram2metarhia&utm_campaign=web
YouTube
🧩 Patterns 2025: отзывы выпускников и ответы на вопросы по курсу: Шемсединов Тимур
👉 Программа курса: https://nodeua.com/Patterns-2025.html
👉 Следующий стрим: https://youtube.com/live/tpY01TLctAs
Приходите на бесплатный мастер-класс "Паттерны в JavaScript и TypeScript"
⏰ Начало: в эту субботу 22 марта в 15:00 (Киевское время)
Участники:…
👉 Следующий стрим: https://youtube.com/live/tpY01TLctAs
Приходите на бесплатный мастер-класс "Паттерны в JavaScript и TypeScript"
⏰ Начало: в эту субботу 22 марта в 15:00 (Киевское время)
Участники:…
Мастер-класс "Паттерны в JavaScript и TypeScript"
⏰ Начало: сегодня, 22 марта в 15:00 (Киевское время)
👳 Тимур Шемсединов
🥷 Илья Климов
🧔♂️ Дмитрий Нечай
Регистрация через Телеграмм-бот: https://patterns-js.com/tpk6nh?traffic_mark=7k8x47&utm_source=organic&utm_medium=telegram2metarhia&utm_campaign=web
⏰ Начало: сегодня, 22 марта в 15:00 (Киевское время)
👳 Тимур Шемсединов
🥷 Илья Климов
🧔♂️ Дмитрий Нечай
Регистрация через Телеграмм-бот: https://patterns-js.com/tpk6nh?traffic_mark=7k8x47&utm_source=organic&utm_medium=telegram2metarhia&utm_campaign=web
💡 Обновлен индекс открытого каталога паттернов
- теперь там есть описание 1-2 строки, которые напомнит вам суть паттерна
- добавлены паттерны не из GoF, но распространены в JavaScript и TypeScript
- появилось больше ссылок на примеры
https://github.com/tshemsedinov/Patterns-JavaScript/tree/ru
- теперь там есть описание 1-2 строки, которые напомнит вам суть паттерна
- добавлены паттерны не из GoF, но распространены в JavaScript и TypeScript
- появилось больше ссылок на примеры
https://github.com/tshemsedinov/Patterns-JavaScript/tree/ru
GitHub
GitHub - tshemsedinov/Patterns-JavaScript at ru
Patterns for JavaScript, Node.js, and TypeScript. Contribute to tshemsedinov/Patterns-JavaScript development by creating an account on GitHub.
🧩 This and much more will be covered in Patterns 2025 course
const getTomorrowDate = () => {
const timeout = 86400000;
return new Promise((resolve) => {
setTimeout(() => resolve(new Date()), timeout)
});
};
// ⚡️ Electricity over IP, as defined in RFC 3251: https://datatracker.ietf.org/doc/html/rfc3251
const socket = new WebSocket('wss://lamp.local:3251');
socket.onopen = () => {
socket.send(JSON.stringify({ voltage: 230, frequency: 50 }));
};
socket.onmessage = (e) => {
const { voltage, frequency } = JSON.parse(e.data);
console.log(`⚡️ Transferred: ${voltage}V @ ${frequency}Hz`);
};
const Coin = (v) => ({ map: (f) => Coin(f(v)) });
const flip = () => crypto.getRandomValues(new Uint8Array(1))[0];
Coin(flip()).map((r) => (r & 1 ? '🪙' : '💩')).map(console.log);
const findMeaningOfLife = () => {
const offset = 0;
const delay = Infinity;
return new Promise((resolve) => {
setTimeout(() => resolve(42 + offset), delay);
});
};
['🥚', '🥚', '🐓', '🥚', '🥚', '🥚'].toSorted()
class Coming {
constructor() {
return new Promise((resolve) =>
setTimeout(() => {
resolve(this);
}, DAY_OF_JUDGMENT - Date.now())
);
}
}
const secondComing = await new Coming();
((<F extends () => void>(Function: F = {} as F) => Function())());
class Future {
constructor() {
const { name: key } = this.constructor;
const value = void [].length;
throw new Error(`${key} is ${value}`);
}
}
new Future();
🧩 Завтра, 5 апреля, 15:00 — 18:00 будет стрим, на котором мы разберем патерны:
∙ Actor — Инкапсулирует состояние и поведение, взаимодействуя асинхронно через передачу и последовательную обработку сообщений в очереди. Обеспечивает потокобезопасность и асинхронную безопасность при параллельном выполнении путём изоляции состояния актора.
∙ Reactor (event-loop) — Обрабатывает параллельные события синхронно, помещая их в очередь и направляя зарегистрированным обработчикам. Реализует событийно-ориентированную асинхронную обработку поверх синхронного цикла событий. Часто применяется в системах с интенсивным I/O, упрощая управление конкурентными событиями.
∙ Proactor — Цикл событий, в котором операции начинаются пользовательским кодом, но завершаются внешним агентом (например, I/O подсистемой), который запускает обработчик завершения по завершении операции (возвращая данные в callback).
∙ И будет презентация курса Patterns 2025
👉 Сохраните себе ссылку на каталог паттернов с примерами кода: https://github.com/tshemsedinov/Patterns-JavaScript/tree/ru
👉 Подпишитесь на канал, чтобы не пропустить этот и следующие стримы: https://www.youtube.com/@TimurShemsedinov
∙ Готовлю также стрим по доступу к данным с обсуждением паттернов: Active Record, DAO, DTO, DAL, Repository, ORM, Query Builder, Transaction Script, Template Method
∙ Actor — Инкапсулирует состояние и поведение, взаимодействуя асинхронно через передачу и последовательную обработку сообщений в очереди. Обеспечивает потокобезопасность и асинхронную безопасность при параллельном выполнении путём изоляции состояния актора.
∙ Reactor (event-loop) — Обрабатывает параллельные события синхронно, помещая их в очередь и направляя зарегистрированным обработчикам. Реализует событийно-ориентированную асинхронную обработку поверх синхронного цикла событий. Часто применяется в системах с интенсивным I/O, упрощая управление конкурентными событиями.
∙ Proactor — Цикл событий, в котором операции начинаются пользовательским кодом, но завершаются внешним агентом (например, I/O подсистемой), который запускает обработчик завершения по завершении операции (возвращая данные в callback).
∙ И будет презентация курса Patterns 2025
👉 Сохраните себе ссылку на каталог паттернов с примерами кода: https://github.com/tshemsedinov/Patterns-JavaScript/tree/ru
👉 Подпишитесь на канал, чтобы не пропустить этот и следующие стримы: https://www.youtube.com/@TimurShemsedinov
∙ Готовлю также стрим по доступу к данным с обсуждением паттернов: Active Record, DAO, DTO, DAL, Repository, ORM, Query Builder, Transaction Script, Template Method
Как изолировать стейт при помощи паттерна Actor и как написать Event loop при помощи Reactor и Proactor
https://youtube.com/live/tpY01TLctAs
https://youtube.com/live/tpY01TLctAs
YouTube
🧩 Паттерны Actor, Reactor, Proactor для JavaScript и TypeScript: Шемсединов Тимур, Дмитрий Нечай
👉 Программа курса: https://nodeua.com/Patterns-2025.html
👉 Actor: https://github.com/HowProgrammingWorks/Actor
👉 Reactor: https://github.com/HowProgrammingWorks/Reactor
👉 Proactor: https://github.com/HowProgrammingWorks/Proactor
👉 Каталог паттернов: …
👉 Actor: https://github.com/HowProgrammingWorks/Actor
👉 Reactor: https://github.com/HowProgrammingWorks/Reactor
👉 Proactor: https://github.com/HowProgrammingWorks/Proactor
👉 Каталог паттернов: …
В Node.js для очередей используется FixedQueue на базе CircularBuffer. Он оптимизирован для V8, на базе списка массивов фиксированной длины по 2048 элементов. Это гораздо лучше, чем просто push/shift на массиве, когда массив постоянно меняет длину и память перераспределяется. Но все же очень неоптимально, потому, что нам для очереди нужно добавлять только в голову списка, а брать только с хвоста, не нужно по кругу бегать в буфере. Они неправильно выбрали структуру данных, тут не нужно было циркулярный буффер реализовывать, тут нужно использовать Unrolled List, эффективнее и проще. В текущей реализации, много лишнего кода, когнитивная нагрузка выше, там битовая маска используется, и вконце буфера один элемент всегда undefined, вот этот лишний undefined - как раз не страшно, но циркулярная машинерия медленнее.
Тут есть 4 варианта кода, чтобы разобраться в вопросе: 1 - наивная очередь, 2 - очередь на списках, 3 - очередь на циркулярном буффере, 4 - очередь на развернутом списке. Для курса по паттернам я сделаю лекцию где мы подробне это разберем и составим сравнительную таблицу, для разных реализаций, где что оптимально использовать - https://github.com/HowProgrammingWorks/Queue/tree/main/JavaScript
Тут есть 4 варианта кода, чтобы разобраться в вопросе: 1 - наивная очередь, 2 - очередь на списках, 3 - очередь на циркулярном буффере, 4 - очередь на развернутом списке. Для курса по паттернам я сделаю лекцию где мы подробне это разберем и составим сравнительную таблицу, для разных реализаций, где что оптимально использовать - https://github.com/HowProgrammingWorks/Queue/tree/main/JavaScript
🧩 В субботу (12 апреля) в 15:00 cтрим Data access patterns
На этом канале 👉 https://www.youtube.com/@TimurShemsedinov
Разбор паттернов и подходов:
- Repository и Active Record
- Query Builder и Object-Relational Mapping (ORM)
- Value Object и Null Object
- Data transfer object (DTO)
- Data access object (DAO) и Data Access Layer (DAL)
- Patterns: SAGA, Transaction Script и др.
Для кого эфир?
- Начинающие разработчики
- Опытные инженеры
- Тех-лиды, тим-лиды
- Самоучки без CS-образования
Кто ведет?
👳 Тимур Шемсединов - в представлении не нуждается
🧔♂️ Николай Белочуб - 10+ лет в Продуктовой Разработке, Senior SWE, OSS Contributor
🤵 Дмитрий Нечай - Chief Architect в PLATMA, CTO в HandyAI
Программа курса по паттернам: https://nodeua.com/Patterns-2025.html
На этом канале 👉 https://www.youtube.com/@TimurShemsedinov
Разбор паттернов и подходов:
- Repository и Active Record
- Query Builder и Object-Relational Mapping (ORM)
- Value Object и Null Object
- Data transfer object (DTO)
- Data access object (DAO) и Data Access Layer (DAL)
- Patterns: SAGA, Transaction Script и др.
Для кого эфир?
- Начинающие разработчики
- Опытные инженеры
- Тех-лиды, тим-лиды
- Самоучки без CS-образования
Кто ведет?
👳 Тимур Шемсединов - в представлении не нуждается
🧔♂️ Николай Белочуб - 10+ лет в Продуктовой Разработке, Senior SWE, OSS Contributor
🤵 Дмитрий Нечай - Chief Architect в PLATMA, CTO в HandyAI
Программа курса по паттернам: https://nodeua.com/Patterns-2025.html
🧩 Завтра (12 апреля) в 15:00 cтрим Data access patterns
https://www.youtube.com/watch?v=diH1VfV_38o
👳 Тимур Шемсединов - в представлении не нуждается
🧔♂️ Николай Белочуб - 10+ лет в Продуктовой Разработке, Senior SWE, OSS Contributor
🤵 Дмитрий Нечай - Chief Architect в PLATMA, CTO в HandyAI
https://www.youtube.com/watch?v=diH1VfV_38o
👳 Тимур Шемсединов - в представлении не нуждается
🧔♂️ Николай Белочуб - 10+ лет в Продуктовой Разработке, Senior SWE, OSS Contributor
🤵 Дмитрий Нечай - Chief Architect в PLATMA, CTO в HandyAI
YouTube
🧩 Доступ к данным в JavaScript TypeScript: Repository, Active Record, DTO, ORM, Query Builder, SAGA
👉 Программа курса: https://nodeua.com/Patterns-2025.html
👳 Тимур Шемсединов - в представлении не нуждается
🧔♂️ Николай Белочуб - 10+ лет в Продуктовой Разработке, Senior SWE, OSS Contributor
🤵 Дмитрий Нечай - Chief Architect в PLATMA, CTO в HandyAI
…
👳 Тимур Шемсединов - в представлении не нуждается
🧔♂️ Николай Белочуб - 10+ лет в Продуктовой Разработке, Senior SWE, OSS Contributor
🤵 Дмитрий Нечай - Chief Architect в PLATMA, CTO в HandyAI
…
🧩 Программа курса уже на сайте, кто там спрашивал, вот: https://nodeua.com/Patterns-2025.html
Авторы, приглашенные эксперты и менторы: 👳♀️ Тимур Шемсединов 🥷 Илья Климов 🤵🏼♂️ Дмитрий Нечай 👨💻 Денис Отришко 👨 Тимур Севимли 🧔 Николай Белочуб
📅 1 мая: старт курса
👉 Каталог паттернов: https://github.com/tshemsedinov/Patterns-JavaScript
👉 Плейлист стримов с экспертами: https://www.youtube.com/playlist?list=PLHhi8ymDMrQYkcxj1eb-Se6Ojd0PRJfFO
Авторы, приглашенные эксперты и менторы: 👳♀️ Тимур Шемсединов 🥷 Илья Климов 🤵🏼♂️ Дмитрий Нечай 👨💻 Денис Отришко 👨 Тимур Севимли 🧔 Николай Белочуб
📅 1 мая: старт курса
👉 Каталог паттернов: https://github.com/tshemsedinov/Patterns-JavaScript
👉 Плейлист стримов с экспертами: https://www.youtube.com/playlist?list=PLHhi8ymDMrQYkcxj1eb-Se6Ojd0PRJfFO