🎟 Внимание! Добавил новый таер: Node + Async
Вместе должно быть дешевле ) Можно до него апгрейднуться
https://www.patreon.com/tshemsedinov
Вместе должно быть дешевле ) Можно до него апгрейднуться
https://www.patreon.com/tshemsedinov
Patreon
Get more from Timur Shemsedinov on Patreon
creating Бесплатные лекции по программированию и платные консуль
👍11🔥2
Кто сомневался в полезности ассинхронной коллекции, вот тут сравнение комплексного примера
Collector
vs Promise.allSettled
— https://github.com/metarhia/metautil👍8🤯6🔥5💩2
Вот новый пример. Тут таймаут через Promise.race, а сбор данных через Promise.allSettled. Асинхронная коллекция похожа на Map, но с контрактом Thenable, позволяющим использовать ее с await. Collector скрывает сложность асинхронного программирования за абстракцией высокого уровня и приводит к ясному и надежному коду предметной области. https://github.com/metarhia/metautil
❤12👍6🔥3
🎫 Внимание! 28 декабря последний день записи на курсы Node.js 2024 и на Async 2024 по текущим ценам.
Сейчас Async: $100, Node.js: $200 + локальные налоги. А вместе $250 + налоги.
С 29 декабря будет Async: $125, Node.js: $250 + локальные налоги. А вместе $350 + налоги.
https://www.patreon.com/tshemsedinov
Сейчас Async: $100, Node.js: $200 + локальные налоги. А вместе $250 + налоги.
С 29 декабря будет Async: $125, Node.js: $250 + локальные налоги. А вместе $350 + налоги.
https://www.patreon.com/tshemsedinov
Patreon
Get more from Timur Shemsedinov on Patreon
creating Бесплатные лекции по программированию и платные консуль
👍5🔥2
⚡️ Новая серия с асинхронной коллекций
- Теперь поддерживаетя отмена асинхронных операций через
- Вместо
- И
Основная идея: спрятать сложность асинхронного программирования в абстракцию, имеющую простой контракт, чтобы эта сложность не смешивалась со сложностью прикладного кода.
Можно сравнить код с коллектором и без него:
И теперь без него:
Исходники тут: https://github.com/metarhia/metautil
Collector
:- Теперь поддерживаетя отмена асинхронных операций через
AbortController
- Вместо
setTimeout
теперь AbortSignal.timeout
- И
AbortSignal.any
для объединения двух сигналовОсновная идея: спрятать сложность асинхронного программирования в абстракцию, имеющую простой контракт, чтобы эта сложность не смешивалась со сложностью прикладного кода.
Можно сравнить код с коллектором и без него:
const dc = collect(['key1', 'key2', 'key3', 'key4'], { timeout: 1000 });
const opt = { signal: dc.signal };
dc.take('key1', fs.readFile, 'README.md', opt);
dc.wait('key2', fs.promises.readFile, 'README.md', opt);
const url = 'http://worldtimeapi.org/api/timezone/Europe';
dc.wait('key3', (await fetch(url, opt)).json());
setTimeout(() => dc.set('key4', 'value4'), 50);
try {
const result = await dc;
console.log(result);
} catch (err) {
console.log(err);
}
И теперь без него:
const controller = new AbortController();
const opt = { signal: controller.signal };
const timeout = new Promise((resolve, reject) => {
setTimeout(() => {
controller.abort();
reject(new Error('Timed out'));
}, 1000);
});
const promise1 = new Promise((resolve, reject) => {
fs.readFile('README.md', opt, (err, data) => {
if (err) return void reject(err);
resolve(data);
});
});
const promise2 = fs.promises.readFile('README.md', opt);
const url = 'http://worldtimeapi.org/api/timezone/Europe';
const promise3 = (await fetch(url)).json();
const promise4 = new Promise((resolve) => {
const timer = setTimeout(() => {
resolve('value4');
}, 50);
controller.signal.addEventListener('abort', () => {
clearTimeout(timer);
});
});
const data = Promise.allSettled([promise1, promise2, promise3, promise4]);
try {
const keys = await Promise.race([data, timeout]);
const [key1, key2, key3, key4] = keys.map(({ value }) => value);
const result = { key1, key2, key3, key4 };
console.log(result);
} catch (err) {
console.log(err);
}
Исходники тут: https://github.com/metarhia/metautil
GitHub
GitHub - metarhia/metautil: Metarhia utilities 🧰
Metarhia utilities 🧰. Contribute to metarhia/metautil development by creating an account on GitHub.
🔥10👍3🤯2
Карта абстракций асинхронного программирования в JavaScript и Node.js
https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Async-2024.md
https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Async-2024.md
👍26🔥5❤4
Forwarded from Metarhia/NodeUA - Node.js Ukraine Community
🌕 Опыт: нарабатывается самостоятельно и передается благодаря встроенному в процесс работы обобщению практики в виде докладов, статей, семинаров, митопов, проводимых регулярно в коллективе инженеров.
🌖 Экспертиза: достигается благодаря постоянному самостоятельному обучению, освоению новых технологий и знаний, исследовательской сущности инженерных практик, чтению исходных кодов коллег и тех библиотек и платформы, на которой пишете.
🌗 Доверие: между инженерами и между техническими специалистами и бизнесом, всей командой проекта, достигается благодаря глубокому пониманию сфер экспертизы друг друга, нужно вникать в специфику коллег даже при разделении труда.
🌘 Учёт всех интересов: заказчика, пользователя, клиента в целом и доверие к заказчику достигается благодаря заинтересованному наблюдению за их работой и искреннему желанию помочь им при помощи автоматизации процессов и высвобождению их времени, которое они смогут потратить лучше на свою профессиональную деятельность, чем на рутину, благодаря вашей работе.
🌑 Недопустимость безразличия: к мелочам, к деталям, и тонкое чувствование нюансов, достигается благодаря пониманию того, что мелочи могут быть определяющими, и любой самый лучший софт может быть не принят из-за самой малой детали.
🌒 Доброжелательное отношение к слабым местам других нарабатывается благодаря наставничеству. Когда помогаешь младшим коллегам становиться инженерами, то относишься к ним лучше, ты ведь передаешь им часть себя и ответственен в известной мере за то, какими они будут, а потом это распространяется и на остальных коллег.
🌓 Критическое отношение к своим слабым местам достигается благодаря практике взгляда на себя со стороны, отсоединения от результатов труда. Сначала можно брать свои старые проекты, к ним проще относиться критически, а потом вы сможете делать это и с кодом, написанным вчера.
🌔 Нет разделения между теорией и практикой, между работой и жизнью, между обучением и продакшен-реди проектами, между гуманитариям и инженерами, между новичком и экспертом, оставьте любой бреин-сплит и будьте целостными, без черного и белого, все имеет постепенные переходы и может причудливо сочетаться, реальность тотальна.
🌖 Экспертиза: достигается благодаря постоянному самостоятельному обучению, освоению новых технологий и знаний, исследовательской сущности инженерных практик, чтению исходных кодов коллег и тех библиотек и платформы, на которой пишете.
🌗 Доверие: между инженерами и между техническими специалистами и бизнесом, всей командой проекта, достигается благодаря глубокому пониманию сфер экспертизы друг друга, нужно вникать в специфику коллег даже при разделении труда.
🌘 Учёт всех интересов: заказчика, пользователя, клиента в целом и доверие к заказчику достигается благодаря заинтересованному наблюдению за их работой и искреннему желанию помочь им при помощи автоматизации процессов и высвобождению их времени, которое они смогут потратить лучше на свою профессиональную деятельность, чем на рутину, благодаря вашей работе.
🌑 Недопустимость безразличия: к мелочам, к деталям, и тонкое чувствование нюансов, достигается благодаря пониманию того, что мелочи могут быть определяющими, и любой самый лучший софт может быть не принят из-за самой малой детали.
🌒 Доброжелательное отношение к слабым местам других нарабатывается благодаря наставничеству. Когда помогаешь младшим коллегам становиться инженерами, то относишься к ним лучше, ты ведь передаешь им часть себя и ответственен в известной мере за то, какими они будут, а потом это распространяется и на остальных коллег.
🌓 Критическое отношение к своим слабым местам достигается благодаря практике взгляда на себя со стороны, отсоединения от результатов труда. Сначала можно брать свои старые проекты, к ним проще относиться критически, а потом вы сможете делать это и с кодом, написанным вчера.
🌔 Нет разделения между теорией и практикой, между работой и жизнью, между обучением и продакшен-реди проектами, между гуманитариям и инженерами, между новичком и экспертом, оставьте любой бреин-сплит и будьте целостными, без черного и белого, все имеет постепенные переходы и может причудливо сочетаться, реальность тотальна.
❤22👍14🔥5
Forwarded from Metarhia/NodeUA - Node.js Ukraine Community
Чем я доволен в себе - ставим галочку, чем недоволен - пропускаем. Если непонятно - читаем пост - https://t.me/metarhia/1550
Anonymous Poll
36%
🌕 Широта опыта
23%
🌖 Глубина экспертизы
38%
🌗 Доверие к коллегам
29%
🌘 Контакт с заказчиком
49%
🌑 Внимание к мелочам
63%
🌒 Доброжелательность
72%
🌓 Самокритика
31%
🌔 Цельность
🎫 Напоминаю, что сегодня (28 декабря) последний день записи на курс Async 2024 по текущим ценам $100 + налоги, как и на курс Node.js 2024 ($200 + налоги) и есть вариант на два вместе $250 + налоги. Если выбираете при платеже Афганистан, то налоги не снимаются, для некоторых стран это до -25%. https://www.patreon.com/tshemsedinov
👍5🔥3❤2
Для того, чтобы писать прикладной код хватит первого столбика, второй полезен, как дополнительные знания, а для бекенда на ноде он обязателен, третий столбик содержит системные вещи, которые нужны для разработки инструментов, платформ и библиотек, четвертый столбик - дополнительные абстракции, которые вы можете добавить по выбору к своим знаниям, особенно, если работаете в специфических проектах, где много функционального и реактивного программирования, пятый столбик - вещи, которые морально устарели и могут рассматриваться как интересный антиквариат
👍41🔥13❤6
Кто чувствует, что js нужно подтянуть - сделал очень простой открытый курс https://youtu.be/HetL0ETbN6Y
YouTube
💫 JavaScript 2024 — 2025 для начинающих 🧑💻
00:00:00 Введение
00:13:19 Идентификаторы: переменные и константы
00:37:05 Запись значений и типы данных
00:45:28 Функции и блоки, область видимости, контексты
01:05:48 Условия и ветвление
01:17:46 Циклы: for, for..of и for..in
01:33:40 Циклы: while и do..while…
00:13:19 Идентификаторы: переменные и константы
00:37:05 Запись значений и типы данных
00:45:28 Функции и блоки, область видимости, контексты
01:05:48 Условия и ветвление
01:17:46 Циклы: for, for..of и for..in
01:33:40 Циклы: while и do..while…
🔥40👍9❤2🎉2
💫 JavaScript 2024 українською для початківців 🧑💻 Майже 8 годин 💫 https://youtu.be/FlXsGI7rzWE
YouTube
💫 JavaScript 2024 — 2025 українською для початківців 🧑💻
00:00:00 Ідентифікатори, змінні та константи
01:01:29 Літарали, значення та типи даних
01:21:03 Функції, блоки та область видимості змінних
01:54:12 Умови та розгалудження, оператор if
02:11:43 Цикли for, for..of, for..in
02:31:23 Цикли while, do..while
02:47:03…
01:01:29 Літарали, значення та типи даних
01:21:03 Функції, блоки та область видимості змінних
01:54:12 Умови та розгалудження, оператор if
02:11:43 Цикли for, for..of, for..in
02:31:23 Цикли while, do..while
02:47:03…
👍16❤9🔥3💩3🤣3🎉1
Forwarded from HowProgrammingWorks - JavaScript and Node.js Programming
💫
Self Assessment v 1.0
может использоваться, как автоматизированный инструмент для учета, треккинга и анализа микроскилов инженера, для личного удобства и для добавления в cv или профиль в github, linkedin и т.д. После заполнения система генерирует кнопку в html и md со ссылкой на вашу копию репозитория. Инструмент ускоряет проведение собеседований и сертификации как для претендента, так и для интервьюера: можно проверять только часть ключевых знаний, а не весь их объем, а после этого подписать коммит с результатами личным GPG ключем. Если периодически проходить оценивание, или делать это до начала обучения и после него, и хранить ветки или теги с результатами инвенторизации микроскилов по состоянию на определенный момент времени, то очень удобно сравнивать прогресс, который вы сделали за период обучения, чтения книги, работы на проекте и т.д. Сейчас оценивание имеет более 700 микроскилов и будет постоянно расширяться по всем направлениям, языкам и технологиям (например Proxy, Promise, Future, SRP, DI, Boxing, Cohesion, Tail call recursion...) с автоматическим сревнением их с ролями (например Node.js API developer, Node.js gamedev, Frontend react...) робот генерирует отчет через Github Actions CI с рекомендациями, что нужно подтянуть. Скоро появятся новые роли и области знаний, после чего Вы сможете обновить свой репозиторий из исходного для получения нового отчета. https://github.com/HowProgrammingWorks/SelfAssessmentGitHub
GitHub - HowProgrammingWorks/SelfAssessment: Software engineering self assessment
Software engineering self assessment. Contribute to HowProgrammingWorks/SelfAssessment development by creating an account on GitHub.
👍15🔥6❤4
Обновлена программа курса по асинхронному программированию https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Async-2024.md
🔥25❤5👍5
Forwarded from Metarhia/NodeUA - Node.js Ukraine Community
🔁 Первые 3 задания из курса по асинхронному программированию
1. Task: rewrite function to return result into sync callback:
👉 Программа курсу: https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Async-2024.md
1. Task: rewrite function to return result into sync callback:
// Change signature to: (items, callback(result))2. Task: return an error for items with negative price. Hint: use callback-last-error-first contract:
const total = (items) => {
let result = 0;
for (const item of items) {
result += item.price;
}
return result;
};
const electronics = [
{ name: 'Laptop', price: 1500 },
{ name: 'Keyboard', price: 100 },
{ name: 'HDMI cable', price: 10 },
];
// Use new signature total(electronics, (money) => ...)
const money = total(electronics);
console.log({ money });
const total = (items, callback) => {3. Task: rewrite total function to be async with JavaScript timers. Use setInterval and clearInterval to check next item each 1 second. Calculations will be executed asynchronously because of timers. Run total twice (as in example below) but in parallel. Print debug output for each calculation step (each second).
let result = 0;
for (const item of items) {
result += item.price;
}
callback(result);
};
const electronics = [
{ name: 'Laptop', price: -1500 },
{ name: 'Keyboard', price: 100 },
{ name: 'HDMI cable', price: 10 },
];
total(electronics, (money) => {
console.log({ money });
});
// Hint: example output:
// { item: { name: 'Laptop', price: 1500 } }
// { item: { name: 'Laptop', price: 1500 } }
// { item: { name: 'Keyboard', price: 100 } }
// { item: { name: 'Keyboard', price: 100 } }
// { item: { name: 'HDMI cable', price: 10 } }
// { item: { name: 'HDMI cable', price: 10 } }
// { money: 1610 }
// { money: 1610 }
const total = (items, callback) => {
let result = 0;
for (const item of items) {
console.log({ item });
if (item.price < 0) {
callback(new Error('Negative price is not allowed'));
return;
}
result += item.price;
}
callback(null, result);
};
const electronics = [
{ name: 'Laptop', price: 1500 },
{ name: 'Keyboard', price: 100 },
{ name: 'HDMI cable', price: 10 },
];
total(electronics, (error, money) => {
if (error) console.error({ error });
else console.log({ money });
});
total(electronics, (error, money) => {
if (error) console.error({ error });
else console.log({ money });
});
👉 Программа курсу: https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Async-2024.md
🔥22👍16❤10🤯2