Бессонный кодер
5.17K subscribers
262 photos
47 videos
4 files
101 links
Канал разработчика и поисковика ДПСО LizaAlert

Связь: @sleeplessfeedbackbot или Direct канала (они бесплатные)
По рекламе: @dpp_ads
Купить рекламу: https://telega.in/c/sleeplesscode
Download Telegram
Вот и закончилась наша небольшая история длинной в 3,5 месяца. История, которая началась с длинного плана и сцены потери любимого заканчивается сейчас. Надеюсь, вам понравилось, и вы открыли для себя много нового. Мне — очень.

За это время почти каждая сцена прошла под нашим зорким глазом, каждый взгляд, каждая нотка «All Gone» была разобрана, да, рубрика про геймдев и сторителлинг в The Last of Us закончилась. Печально? Есть такое.

Но каждый финал — это шаг в новую историю.

Рубрика не останавливается, ведь нас ждут другие сцены, другие герои, другая история, но созданная с помощью таких же приёмов монтажа, сценарных подходов и таких же планов.

А какой именно мир будет следующим, решите именно вы! Пишите в комментариях игры, а может и отдельные сцены разбор которых хотите прочитать, а я уже совсем скоро запущу опрос, который и решит, какая игра будет следующей. Это будет наша рубрика. Наши эмоции. Наш монтажный стол.
Потому что, если одна история окончена — это не значит, что всё прошло.

Это значит, что где-то уже начинается следующая.
❤‍🔥203
Как переписать большой JS-проект на TypeScript и не попасть в дурку?
(никак)
Именно этим вопросом мы задались, когда наконец взялись за задачу, которая висела над нами годами: перенос Имперского Стражника на TypeScript.

Что это нам дало?

🔹 Во-первых — стабильность.
Прощай, магическое “а почему тут строка вместо числа?”, “а почему undefined превратился в пустой массив?”, “а почему всё вообще сломалось?”.
С TypeScript багов после обновлений стало меньше, и появилось то самое чувство уверенности в коде, которого так не хватает в JS.

🔹 Во-вторых — контроль и понимание.
Строгая типизация дала бонусы статического анализа, позволила чётче выстроить архитектуру и выявить уникальные случаи, которые раньше были размазаны по коду.
Мы смогли ввести интерфейсы, сделать код легче и... приятнее.

🔹 В-третьих — головоломки для ума.
В условиях многомодального микросервиса возникали кейсы, в которых даже GPT говорила: "Я не знаю как это сделать"
Но в итоге — всё реализовано. Всего один as unknown каст на весь проект. Почти честно!

🔹 В-четвёртых — побочные апгрейды.
Работа с типами докатилась и до других проектов: появились дженерики в rgcache, улучшены сцены в regraf, типизировано то, на что раньше не хватало мотивации.

📍 Где мы сейчас?
Мы прошли отметку в 50% TypeScript-кода в репозитории.
Пишем утилиты, абстрактные классы, бойлерплейты на все случаи жизни.
Но, пожалуй, главное счастье — утилита для маппинга телеграм-ошибок в enum, которая избавила нас от игры “угадай строку в description” и свела обработку ошибок к одной equals-проверке.

🧩 Что дальше?
Завершить миграцию, привести REST API в порядок (пока там лес, JS и безысходность) и, наконец, поставить в YouTrack статус - готово.
🔥164👨‍💻1
😮 А пока идёт голосование — немного инсайдов из кухни Стражника!
Мы активно дорабатываем систему статистики и мониторинга, чтобы не просто чувствовать как живёт проект, но видеть это буквально на графиках.

Что умеем сейчас:
— отслеживать, когда и какие команды наиболее популярны
— понимать, насколько активен Лолофд (и не только, ведь стражник стал использоваться уже много где)
— реагировать заранее на сбои (или их попытки начаться) благодаря алертам
— и просто... залипать в красивые столбики и линии. У меня они теперь вместо скринсейвера

🔧 Появились и алерты — чтобы заранее ловить проблемы и не молиться, когда уже всё упало. Теперь мы получаем сигналы раньше и можем исправить до того, как станет больно.

📊 И да, вы тоже можете залипнуть в метрики (без алертов, но всё же) вот тут:
https://gf.redguy.ru/public-dashboards/e0e799d208844820bd772fdee8b136ca?orgId=1&refresh=5s
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
26🔥3❤‍🔥2
А пока голосов в опросе всё ещё не хватает… давайте вспомним про нейронку, которую мы обучаем для Стражника.

Я уже не раз о ней рассказывал, показывал графики, а некоторые из вас даже видели её в действии в официальных чатах.
Но ведь хочется не просто смотреть. Хочется ПОТЫКАТЬ!

Сейчас мы тестируем обновлённое ядро, которое позволяет системе:
— запускать несколько инстансов бота одновременно
— роутить трафик между ними
— и, что важно, делать это без потери сообщений или производительности.

В качестве теста мы открыли публичный инстанс, через который можно проверить статус файла в системе или попросить нейронку проверить его, если раньше она его не встречала (пока только стикеры, но в скором времени будет больше форматов).

🔍 Потыкать руками можно здесь: @ImMediaGuardBot
🔥17🤗3🙉1😘1
😋 Миграции идут, а это значит — можно посмотреть что-нибудь! Что я уже и успел, в этот раз у нас в рубрике: "甘々と稲妻" — в русской локализации «Дуэт и вспышка молнии» (звучит как спецпредложение из Ростикса).

Здесь не будет эпичных сражений, блекджека, кошкодевочек или всего того что вы привыкли видеть в больших тайтлах.Зато будет теплая история об отцовстве, дружбе и еде.

Главные герои — школьный учитель и его маленькая дочь Цумуги, пережившие смерть жены/матери. На протяжении 12 серий они учатся жить заново — в том числе через приготовление еды.

Каждое блюдо — это не просто рецепт, а повод вспомнить, почувствовать и сблизиться. От простых яичниц до сложных традиционных обедов, напоминающих о тех временах, когда мама была жива.

И да — еда там показана просто великолепно. Всё объясняется пошагово, и у меня теперь есть личная цель: повторить хотя бы одно блюдо в реальной жизни.

Мне — зашло сильно, надеюсь, вам тоже понравится.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰287🔥5❤‍🔥2🏆2👏1
Бессонный кодер
Выбираем игру для рубрики
Голосование пока всё-ещё идёт (можете звать друзей и/или подписчиков чтобы ускорить решение), а это значит что мы можем опять поговорить о всяком! А о чём я люблю рассказывать? Конечно, о Стражнике и фейлах 😃

Как многие знают, у меня есть чатик который прикреплён к каналу и в котором я порой публикую мемчики или дополнительные материалы (не такие как в этом чате конечно :D)
И вот, вчера мы решили провести эксперимент, вместе с чатиком смотрели аниме "Форма Голоса", а вместе с нами его смотрела нейронная сеть которую мы тренируем и используем в стражнике.

И что получилось? Ну, как минимум я прослезился с сюжета 😢
А если к техническим деталям, то аниме длится 2 часа 10 минут, за это время было 7803 ключевых кадра, на 403 ключевых кадра нейронка дала пометку о наличии NSFW, 13 кадров действительно содержали NSFW, погрешность модели составила 4,99% ложных срабатываний (причём чаще всего на ножки).

А если хотите не пропустить очередной холивар на тему дистрибутива линукса, языка или вот таких интерактивов, добро пожаловать в наш чатик :3
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19❤‍🔥43👏1👻1
Кстати, я упомянул фейлы, но не пояснил о них, давайте я расскажу интересную притчу об одном небольшом косяке который выдал неожиданные проблемы 😄

У нас в Стражнике сейчас потихоньку идёт полный перенос всей логики отправки сообщений в единую очередь, чтобы не было случаев когда одна команда выжрала весь рейтлимит и очередь ловит 429 на попытку отправить в нормальных пределах. Чтобы отправить задачу в очередь у нас используется несколько конструкций

Отправка через контекст:
await ctx.sendMessage("command:admins", ctx.chat.id, await ctx.lang.t('commands.general.disabled'), {
reply_parameters: {
message_id: ctx.message.message_id,
allow_sending_without_reply: true
}
});


Ответ через контекст (для случаев когда мы отвечаем на что-то в тот же чат и тот же тред):
await ctx.replyQueued(await ctx.lang.t('commands.general.disabled'), {
reply_parameters: {
message_id: ctx.message.message_id,
allow_sending_without_reply: true
}
});


Отправка вне контекста (ей к примеру пользуется отправка сообщений через API, когда у нас нет контекста обновления от ТГ):
await Queues.getInstance().sendMessage("main", "command:admins", await Language.getFallback().t('commands.general.disabled'), {
reply_parameters: {
message_id: ctx.message.message_id,
allow_sending_without_reply: true
}
});


А как под каптом работает этот метод?
let job = await this._sendQueue.add(name, {id, text, extra, target}, {priority});
job = await job.waitUntilFinished(this._sendQueueListener);
return job.returnvalue;


Увидели проблему? Если нет, то не бойтесь, я тоже её не замечал пока она не воспроизвелась. await - корень нашего зла. Когда куча воркеров и ещё большая куча потоков внутри них начинают отправлять сообщения одновременно, согласно рейтлимитам очередь начинает троллить отправку, А НАШИ ПОТОКИ ЖДУТ ОТВЕТ ТЕЛЕГИ. В итоге у нас получается боттлнек когда из-за количества отправляемых сообщений, мы теряем в скорости обработке входящих. И это кстати случилось, но к счастью и удивлению - ночью.
Подкрепил в пост графики которые позволили нам обнаружить этот косяк. Вот так вот, порой ошибок от сервиса нет, но если глянуть график - понимаешь что ошибка есть, и это ты 😢
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔19💋42🫡2❤‍🔥1🔥1