Маємо для вас невеличке оновлення! 🫣
Ми знаємо, що в нас зібралось багато талановитих та досвідчених розробників. Також ми знаємо, що у вас точно є чим поділитись з іншими - технології, які ви вивчаєте, складні завдання, які ви змогли вирішити, і просто професійний досвід. Тому, ми хочемо бути тим місцем, де ви зможете легко це зробити!
Як це буде відбуватись?
Ви надсилаєте свій пост до нас в @web_overflow_support і ми будемо публікувати його в канал. Звичайно, він може підлягатись невеличкому редагуванню і перевірці на актуальність. Пости будуть маркуватись хештегом #post_from, після якого буде вказано ваш нік в телеграмі.
Навіщо це нам?
Ми ніколи не приховували, що ми не є експертами в усіх технологіях світу. І не рідко ми бачимо запити від підписників, які хочуть матеріали по фреймворкам, які ми в очі не бачили. А нам хочеться, щоб цей блог приносив користь всім!
Тому давайте ділитись знаннями та розвиватись разом! 💛
Ми знаємо, що в нас зібралось багато талановитих та досвідчених розробників. Також ми знаємо, що у вас точно є чим поділитись з іншими - технології, які ви вивчаєте, складні завдання, які ви змогли вирішити, і просто професійний досвід. Тому, ми хочемо бути тим місцем, де ви зможете легко це зробити!
Як це буде відбуватись?
Ви надсилаєте свій пост до нас в @web_overflow_support і ми будемо публікувати його в канал. Звичайно, він може підлягатись невеличкому редагуванню і перевірці на актуальність. Пости будуть маркуватись хештегом #post_from, після якого буде вказано ваш нік в телеграмі.
Навіщо це нам?
Ми ніколи не приховували, що ми не є експертами в усіх технологіях світу. І не рідко ми бачимо запити від підписників, які хочуть матеріали по фреймворкам, які ми в очі не бачили. А нам хочеться, щоб цей блог приносив користь всім!
Тому давайте ділитись знаннями та розвиватись разом! 💛
🔥20👍8❤3🤯1
C# Moq + SponsorLink 🤯
#post_from @Digicat
Тут буде трохи про C# (ще те збоченство), але думаю буде цікаво для всіх. І нагадуємо, що кожен може розповісти про щось цікаве через наш канал.
Нещодавно в спільноті C# була активна дискусія щодо бібліотеки Moq. Вона дуже популярна для тестування, адже дозволяє підмінювати обʼєкти.
В один момент автор цієї бібліотеки додав всередину іншу - SponsorLink. Ця бібліотека інтегрує GitHub Sponsors у ваш проект та на build етапі сканує залежності і пропонує вам стати спонсором інших open-source проектів. Ви навіть отримаєте warning, якщо не підтримуєте жоден проект.
Інтегрування цієї бібліотеки в Moq була несподіваною. На додачу, SponsorLink використовував ваш email та тримав його хеш в хмарі, про що нікого не попереджав. Власне це і стало рушієм всіх обговорень..
👉 Читати статтю
Також тут варто згадати про faker.js, який минулого року теж наробив шуму.
👉 Дивитись відео
Тож питання щодо OSS досі не вирішені. В них сотні мільйонів скачувань, а автори підтримують їх. Тож як вирішити спонсорування цих авторів? Яку участь в цьому мають брати мільярдні компанії, які використовують цей код?
#post_from @Digicat
Тут буде трохи про C# (ще те збоченство), але думаю буде цікаво для всіх. І нагадуємо, що кожен може розповісти про щось цікаве через наш канал.
Нещодавно в спільноті C# була активна дискусія щодо бібліотеки Moq. Вона дуже популярна для тестування, адже дозволяє підмінювати обʼєкти.
В один момент автор цієї бібліотеки додав всередину іншу - SponsorLink. Ця бібліотека інтегрує GitHub Sponsors у ваш проект та на build етапі сканує залежності і пропонує вам стати спонсором інших open-source проектів. Ви навіть отримаєте warning, якщо не підтримуєте жоден проект.
Інтегрування цієї бібліотеки в Moq була несподіваною. На додачу, SponsorLink використовував ваш email та тримав його хеш в хмарі, про що нікого не попереджав. Власне це і стало рушієм всіх обговорень..
👉 Читати статтю
Також тут варто згадати про faker.js, який минулого року теж наробив шуму.
👉 Дивитись відео
Тож питання щодо OSS досі не вирішені. В них сотні мільйонів скачувань, а автори підтримують їх. Тож як вирішити спонсорування цих авторів? Яку участь в цьому мають брати мільярдні компанії, які використовують цей код?
👍6❤2
NestJS + Telegram Bot API
#post_from @Yurets7777 @urbfkfys
Багато хто чув або вже знає, що таке є той NestJS. І звісно всі знають, що таке Телеграм і Телеграм-Боти. Хтось чув, хтось пробував щось писати з допомогою Telegram Bot API або NestJS.
Даний пост про те - а як правильно запустити телеграм бота на NestJS?
Не можу сказати що це просто.
Як рекомендує NestJS, створюємо окрему директорію для нашого телеграм бота під назвою
І всі запити до нашої БД, котрі вміють робити дані сервіси, буде вміти робити наш ТГ-бот. Потрібно просто прописати необхідні методи з даних класів в сервісі телеграму.
Ну і звісно модуль, куди ж без нього 🤷
Ліба для запуску Телеграм-Бота на NestJS називається
Корисні посилання:
- NestJS
- NestJS Telegraf
- Telegram Bot API
PS. Ми тут робимо щось дійсно цікаве на даних технологіях. Скоро очікуйте Український продукт 😉
PPS. Забули показати root компонент app.module.ts
Поки все 😉
#post_from @Yurets7777 @urbfkfys
Багато хто чув або вже знає, що таке є той NestJS. І звісно всі знають, що таке Телеграм і Телеграм-Боти. Хтось чув, хтось пробував щось писати з допомогою Telegram Bot API або NestJS.
Даний пост про те - а як правильно запустити телеграм бота на NestJS?
Не можу сказати що це просто.
Як рекомендує NestJS, створюємо окрему директорію для нашого телеграм бота під назвою
telegram
. В ній, по класиці, нам потрібні: module
- telegram.module.ts
; controller
- telegram.controller.ts
; service
- telegram.service.ts
.telegram.service.ts
- це те, що відповідає за запити до нашої БД. Сюди ми підтягуємо інші сервіси, щоб ТГ-бот вмів працювати із різними сутностями в нашій БД.@Injectable()
export class TelegramService {
constructor(
private userService: UserService,
private categoryService: CategoryService,
private cityService: CityService,
) {}
}
І всі запити до нашої БД, котрі вміють робити дані сервіси, буде вміти робити наш ТГ-бот. Потрібно просто прописати необхідні методи з даних класів в сервісі телеграму.
telegram.controller.ts
- контроллер; сама назва говорить сама за себе - контролюю. Сюди ми підтягуємо наш телеграм сервіс. Прописуємо команди, прослуховувачі на екшени (кліки на кнопки) та інше.@Update()
export class TelegramController {
private readonly telegramActions: TelegramActions;
constructor(
@InjectBot() private readonly bot: Telegraf<Context>,
private readonly telegramService: TelegramService,
) {
this.bot.telegram.setMyCommands(COMMANDS);
this.telegramActions = new TelegramActions(this.telegramService);
}
@Start()
async startCommand(ctx): Promise<any> {
// do something
}
@Command(my_command)
async addLotCommand(ctx): Promise<any> {
// do something
}
@Action(String || RegEx)
async handleRejectLot(ctx): Promise<any> {
// do something
}
}
Ну і звісно модуль, куди ж без нього 🤷
telegram.module.ts
- модуль збирає в себе все що потрібно для запуску нашої app, в даному випадку бота.@Module({
imports: [
ConfigModule.forRoot({
envFilePath: '.env', // для того щоб була змога читати змінні із env
}),
TelegrafModule.forRoot({
middlewares: [session()],
token: process.env.TELEGRAM_BOT_TOKEN, //
не має сенсу в коментарях
}),
UserModule,
CategoryModule,
CityModule,
],
controllers: [],
providers: [
TelegramService,
TelegramController,
RegisterUserScene,
],
})
export class TelegramModule {}
Ліба для запуску Телеграм-Бота на NestJS називається
nestjs-telegraf
. Якщо хочете конкретики, запитуйте. Що знаємо - підкажемо 😉Корисні посилання:
- NestJS
- NestJS Telegraf
- Telegram Bot API
PS. Ми тут робимо щось дійсно цікаве на даних технологіях. Скоро очікуйте Український продукт 😉
PPS. Забули показати root компонент app.module.ts
@Module({
imports: [
ConfigModule.forRoot({
envFilePath: '.env',
}),
MongooseModule.forRoot(process.env.MONGO_CONNECTION_STRING),
UserModule,
TelegramModule,
CategoryModule,
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
Поки все 😉
👍21❤5👏3🔥1
BullMQ - продвинутий cron для NodeJS 💪
#post_from @Yurets7777 @urbfkfys
Що таке "cron"?
Cron - це утиліта для планування завдань у багатьох операційних системах, зокрема в Unix і подібних до неї, таких як Linux. Вона дозволяє користувачам створювати розклади для виконання автоматичних завдань, які будуть виконуватися регулярно або за заданим графіком. BullMQ - це бібліотека Node.js, яка реалізує швидку та надійну систему черг, побудовану на основі Redis, що допомагає у роботі багатьом сучасним мікросервісним архітектурам.
Бібліотека розроблена таким чином, щоб виконувати наступні завдання:
- встановлення черги "рівно один раз", тобто спроби зробити кожну дію рівно один раз. Кожна дія буде виконана принаймні один раз або більше, в залежності від встановлених параметрів;
- легке масштабування по горизонталі. Додайте більше "воркерів" для паралельної обробки завдань;
- послідовність;
- висока продуктивність.
А тепер простими словами!
Потрібно виконати певні дії із певною затримкою або певним інтервалом. Що перше спадає на думку?
Так, розумні хостери типу Heroku це побачать і перезапустять build. Але … наша черга чи інтервал пішов по одному місцю 🤦♀️
І тут нам на допомогу приходять такі от ліби, як BullMQ. Це прям ДУЖЕ крутий комбайн, але під капотом він юзає redis. Сюди він зберігає всі екшени, які повинні відпрацювати. Саме тому, коли код крашнеться і перезапуститься, ліба піде в rdb (redis data base) і продовжить свою роботу, а не почне спочатку, як у випадку із таймаутом.
Як то працює?
Спочатку необхідно створити чергу.
У дану чергу додаються воркери - це, скажімо так, методи (функції) котрі всередині можуть містити інші методи (функції), котрі повинні відпрацювати, коли прийшла черга роботи даного воркера.
А тепер час "подружити" наш воркер із чергою 😉
Вітаємо, ви створили cron, який 100% виконає те, що ви вказали, і стільки раз скільки потрібно 😎
Дока нижче 😉
👉 Відкрити документацію
#post_from @Yurets7777 @urbfkfys
Що таке "cron"?
Cron - це утиліта для планування завдань у багатьох операційних системах, зокрема в Unix і подібних до неї, таких як Linux. Вона дозволяє користувачам створювати розклади для виконання автоматичних завдань, які будуть виконуватися регулярно або за заданим графіком. BullMQ - це бібліотека Node.js, яка реалізує швидку та надійну систему черг, побудовану на основі Redis, що допомагає у роботі багатьом сучасним мікросервісним архітектурам.
Бібліотека розроблена таким чином, щоб виконувати наступні завдання:
- встановлення черги "рівно один раз", тобто спроби зробити кожну дію рівно один раз. Кожна дія буде виконана принаймні один раз або більше, в залежності від встановлених параметрів;
- легке масштабування по горизонталі. Додайте більше "воркерів" для паралельної обробки завдань;
- послідовність;
- висока продуктивність.
А тепер простими словами!
Потрібно виконати певні дії із певною затримкою або певним інтервалом. Що перше спадає на думку?
setTimeout
та setInterval
. Логічно 🤔, рухаємося далі. А якщо сервер крашнеться або код "посипеться"?Так, розумні хостери типу Heroku це побачать і перезапустять build. Але … наша черга чи інтервал пішов по одному місцю 🤦♀️
І тут нам на допомогу приходять такі от ліби, як BullMQ. Це прям ДУЖЕ крутий комбайн, але під капотом він юзає redis. Сюди він зберігає всі екшени, які повинні відпрацювати. Саме тому, коли код крашнеться і перезапуститься, ліба піде в rdb (redis data base) і продовжить свою роботу, а не почне спочатку, як у випадку із таймаутом.
Як то працює?
Спочатку необхідно створити чергу.
async function createQueue(queueName: string) {
try {
const queue = new Queue(queueName);
return queue;
} catch (error) {
console.log("[error]", error);
}
}
У дану чергу додаються воркери - це, скажімо так, методи (функції) котрі всередині можуть містити інші методи (функції), котрі повинні відпрацювати, коли прийшла черга роботи даного воркера.
const worker = new Worker("queueName", async (job) => {
const {
// тут все, що ви закинули у воркер в дані
} = job.data;
// тут ваш пейлоад, котрий має доступ до даних, які ви закинули у воркер
});
А тепер час "подружити" наш воркер із чергою 😉
await queue.add(
"queueName",
{ /* закидаємо нашу дату для воркера */ },
{
jobId: someJobId, // унікальний id джоби, щоб вони не задвоїлися
// інші параметри як то ріпіт чи once
}
);
Вітаємо, ви створили cron, який 100% виконає те, що ви вказали, і стільки раз скільки потрібно 😎
Дока нижче 😉
👉 Відкрити документацію
👍17🔥4❤3🤓2
Welcome!
#post_from @ihor_888 😅
Let's practice our English! So...
👉 Tell us about the music you listen to while coding.
Have a nice #english_friday 💛
#post_from @ihor_888 😅
Let's practice our English! So...
👉 Tell us about the music you listen to while coding.
Have a nice #english_friday 💛
👍9❤1🔥1😁1😱1🤣1