Telegram Web Link
🧩 Завтра (19 квітня) о 15:00 стрім з Муричем
«Оптимізація структур даних та патернів для V8»
👉 https://youtube.com/live/PncSzdGTzk0

Теми:
- Performance testing and debugging
- Performance optimization and tuning
- Observer (EventEmitter, EventTarget)
- Queue (FixedQueue + CircularBuffer)
- UnrolledQueue (LinkedList + Array)
- ObjectPool, LinkedList, RoundBuffer

Програма курсу з патернів: https://nodeua.com/Patterns-2025-ua.html
🧩 У цю суботу (26 квітня) о 15:00 стрім «Патерни асинхронного програмування»

На цьому каналі 👉 https://www.youtube.com/@TimurShemsedinov

Розбір патернів та контрактів:
- Thenable, Promise, Future, Deferred
- Callbacks, Async/await, Coroutines
- Observer, EventEmitter, Signals
- Locks API, Semaphore, Mutex
- AsyncCompose, AsyncPool, AsyncQueue
- Threads, MessageChannel, MessagePort
- function*/yield, Async Iterator
- Actor Model, Chain of responsibility
- AsyncCollector, Streams, RxJS...

Хто веде?
👳 Тимур Шемсединов
🧔‍♂️ Денис Отрішко — контрибьютор Node.js та Metarhia
🤵 Дмитро Нечай — Chief Architect в PLATMA, CTO в HandyAI

Програма курсу з патернів: https://nodeua.com/Patterns-2025-ua.html
🧩 26 квітня о 15:00 стрім
«Патерни асинхронного програмування»

Усім, хто зарееструється на стрім, у чат бот, прийде посилання на запис та оглядову лекцію по усіх стилям та патернам асинхронного програмування, що позначені на схемі. Дивіться лекцію, а потім приходьте задавати питання на стрім, щоб було вже по суті справ, а не просто ентертеймент.

Реестрація обовязкова: https://patterns-js.com/7d8wqt?utm_source=telegram_channel&utm_medium=t_shemsedinov&utm_campaign=stream_26_04
🧩 Сьогодні 26 квітня о 15:00 стрім
«Патерни асинхронного програмування»

💡 Бонусна лекція з оглядом усіх патернів асинхронного програмування вже у боті. Заходьте і подивіться її до стріму, щоб виникли питання, та задавайте їх прям під лекцією, ми звідти теж будемо відповідати.
⚠️ Хто не отримав лекції: вона українською мовою і прийде лише тим, хто обрав при реєстрації українську (за замовченням по посилання). Можна перереєструватися на українську, щоб все ж таки отримати посилання.
👉 https://patterns-js.com/7d8wqt?utm_source=telegram_channel&utm_medium=t_shemsedinov&utm_campaign=stream_26_04
Please open Telegram to view this post
VIEW IN TELEGRAM
💡 Algebraic and Container Data Types
- ADT Record (mutable and immutable)
- ADT Tuple, Sum
- Result as a Sum of Value and Failure
- Either, Maybe and Result containers
- ADT Linked list
https://github.com/HowProgrammingWorks/ADT
Please open Telegram to view this post
VIEW IN TELEGRAM
Work is dead! AI and Capital Unite!
To liberate Capital and robots from the ineffective human hands. Capital doesn't need your dirty hands or crappy code anymore. Robots deliver: clean, fast, loyal!
З понеділка починається курс по патернам
А у цю суботу 3 травня о 15:00 буде стрім
«Ключові знання, які змінять ваш JS/TS код за кілька місяців»

Фреймворки можуть допомогти вам отримати першу роботу, але шлях до рівня сеньйора - це зовсім інше. Ми поговоримо про те, що дійсно відрізняє зрілих інженерів просто кодерів.

Розв'язання задач на LeetCode - це квиток на першу роботу, але не до майстерності. Це потрібно переважно для проходження формальних інтерв'ю, особливо у міжнародних компаніях. Але якщо ви хочете навчитися писати зрозумілий, надійний і масштабований код – цього недостатньо.

Знаменита "книжечка з кабанчиком" стала скоріше символом технічного фетишизму, ніж реальним посібником з побудови надійних систем. І найчастіше її згадують лише на співбесідах.

Якщо для простої черги або циклічного списку людина тягне RabbitMQ чи Kafka - це не про інженерне рішення, це про профнепридатність. Що відрізняє сильного розробника? Наскільки глибоко потрібно розуміти алгоритми? Чи потрібні вам знання з архітектури, і які? Та ще багато інших питань на стрімі у цю суботу 3 травня о 15:00

Реестрація на стрім: https://patterns-js.com/w1hpna?utm_source=telegram_channel&utm_medium=timur_shemsedinov&utm_campaign=web_3_05&utm_content=lgt_1_tehlid
👩‍💻 Це вам вранці почитати код — Рішення замість неприйнятого TC39 імуталельного об'єкту
- імутабельні та мутабельні записи (об'єкти)
- повне клонування, модифікація зі збереженням форми запису
- перевірка типів у рантаймі, дефолтні значення
- імутабельні записи із економією пам'яті завдяки ланцюжку прототипів
- пришвидшення пошуку полів завдяки Object.create(null)
Тут ще можна багато оптимізувати, повне рішення буде тут: https://github.com/metarhia/metautil/pull/298
class Record {
static immutable(defaults) {
return Record.#build(defaults, false);
}

static mutable(defaults) {
return Record.#build(defaults, true);
}

static #build(defaults, isMutable) {
const fields = Object.keys(defaults);
const defaultValues = Object.create(null);
for (const key of fields) {
defaultValues[key] = defaults[key];
}

class Struct {
static fields = fields;
static defaults = defaultValues;
static mutable = isMutable;

static create(data = {}) {
const obj = Object.create(null);
for (const key of fields) {
const base = defaultValues[key];
const value = key in data ? data[key] : base;
if (!Record.#sameType(base, value)) {
const exp = Record.#typeof(base);
const act = Record.#typeof(value);
throw new TypeError(
`Invalid type for "${key}": expected ${exp}, got ${act}`,
);
}
obj[key] = value;
}
return isMutable ? Object.seal(obj) : Object.freeze(obj);
}
}

return Struct;
}

static #typeof(value) {
if (Array.isArray(value)) return 'array';
if (value === null) return 'null';
return typeof value;
}

static #sameType(a, b) {
if (Array.isArray(a)) return Array.isArray(b);
if (a === null) return b === null;
return typeof a === typeof b;
}

static #validate(instance, updates) {
for (const key of Object.keys(updates)) {
if (!Reflect.has(instance, key)) continue;
const current = instance[key];
const next = updates[key];
if (!Record.#sameType(current, next)) {
const exp = Record.#typeof(current);
const act = Record.#typeof(next);
throw new TypeError(
`Invalid type for "${key}": expected ${exp}, got ${act}`,
);
}
}
}

static update(instance, updates) {
if (Object.isFrozen(instance)) {
throw new Error('Cannot mutate immutable Record');
}
Record.#validate(instance, updates);
for (const key of Object.keys(updates)) {
if (Reflect.has(instance, key)) {
instance[key] = updates[key];
}
}
return instance;
}

static fork(instance, updates) {
Record.#validate(instance, updates);
const obj = Object.create(null);
for (const key of Object.keys(instance)) {
obj[key] = Reflect.has(updates, key) ? updates[key] : instance[key];
}
return Object.isFrozen(instance) ? Object.freeze(obj) : Object.seal(obj);
}

static branch(instance, updates) {
Record.#validate(instance, updates);
const obj = Object.create(instance);
for (const key of Object.keys(updates)) {
Reflect.defineProperty(obj, key, {
value: updates[key],
writable: true,
configurable: true,
enumerable: true,
});
}
return Object.isFrozen(instance) ? Object.freeze(obj) : Object.seal(obj);
}
}
Please open Telegram to view this post
VIEW IN TELEGRAM
⚠️ Срач - Стоп! Усі на стрім!
О 15:00 «Ключові знання, які змінять ваш JS/TS код за кілька місяців»
Реестрація: https://patterns-js.com/w1hpna?utm_source=telegram_channel&utm_medium=timur_shemsedinov&utm_campaign=web_3_05&utm_content=lgt_1_tehlid
- V8 v13.6
- npm v11
- Explicit resource management
- undici 7
- improved Permission Model
https://nodejs.org/en/blog/release/v24.0.0
2025/06/27 20:06:11
Back to Top
HTML Embed Code: