Metarhia/NodeUA - Node.js Ukraine Community
3.9K subscribers
281 photos
9 videos
3 files
746 links
Node.js Community Channel 👉 Node.js Group: https://t.me/nodeua 👉 JavaScript, TypeScript channel: https://t.me/HowProgrammingWorks 👉 Group: https://t.me/MetarhiaHPW
Download Telegram
В четверг 20 марта в 19:00 будет созвон сообщества Метархия, с выпускниками предыдущих наборов по паттернам, ноде и асинхронному программированию. Мы будем стримить его. Можно задать вопросы заранее и мы на них ответим. https://forms.gle/dDZTfR4P6AJFyHfB7
Please open Telegram to view this post
VIEW IN TELEGRAM
Готовимся к мастер-классу с Мурычем и Тимурычем по паттернам заваривания чая для JavaScript
👉 https://youtube.com/@TimurShemsedinov
👉 https://youtube.com/@AsForJS
У Китаї осудили Банду Чотирьох за те, що вони змушували JavaScript розробників писати патерни як у Java і знищували особливу культуру, що склалася у Web
Мастер-класс "Паттерны в JavaScript и TypeScript"

Начало: сегодня, 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/ua
Please open Telegram to view this post
VIEW IN TELEGRAM
🧩 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/ua
👉 Підпишіться на канал, щоб не пропустити цей та наступні стріми: https://www.youtube.com/@TimurShemsedinov
∙ Готую також стрім про доступ до даних з обговоренням патернів: Active Record, DAO, DTO, DAL, Repository, ORM, Query Builder, Transaction Script, Template Method
В 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
🧩 В субботу (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-ua.html