ar
Feedback
Бессонный кодер

Бессонный кодер

الذهاب إلى القناة على Telegram

Канал разработчика и поисковика ДПСО LizaAlert Связь: @sleeplessfeedbackbot или Direct канала (они бесплатные) По рекламе: @dpp_ads Купить рекламу: https://telega.in/c/sleeplesscode

إظهار المزيد
4 525
المشتركون
-224 ساعات
-227 أيام
-8630 أيام
جذب المشتركين
يونيو '26
يونيو '26
+35
في 0 قنوات
مايو '26
+26
في 0 قنوات
Get PRO
أبريل '26
+80
في 1 قنوات
Get PRO
مارس '26
+44
في 0 قنوات
Get PRO
فبراير '26
+97
في 6 قنوات
Get PRO
يناير '26
+229
في 4 قنوات
Get PRO
ديسمبر '25
+34
في 1 قنوات
Get PRO
نوفمبر '25
+73
في 5 قنوات
Get PRO
أكتوبر '25
+221
في 10 قنوات
Get PRO
سبتمبر '25
+174
في 15 قنوات
Get PRO
أغسطس '25
+376
في 16 قنوات
Get PRO
يوليو '25
+141
في 3 قنوات
Get PRO
يونيو '25
+113
في 5 قنوات
Get PRO
مايو '25
+75
في 2 قنوات
Get PRO
أبريل '25
+366
في 5 قنوات
Get PRO
مارس '25
+702
في 5 قنوات
Get PRO
فبراير '25
+75
في 1 قنوات
Get PRO
يناير '25
+263
في 7 قنوات
Get PRO
ديسمبر '24
+1 652
في 17 قنوات
Get PRO
نوفمبر '24
+421
في 5 قنوات
Get PRO
أكتوبر '24
+225
في 9 قنوات
Get PRO
سبتمبر '24
+210
في 8 قنوات
Get PRO
أغسطس '24
+296
في 7 قنوات
Get PRO
يوليو '24
+528
في 3 قنوات
Get PRO
يونيو '24
+169
في 2 قنوات
Get PRO
مايو '24
+260
في 0 قنوات
Get PRO
أبريل '24
+144
في 2 قنوات
Get PRO
مارس '24
+44
في 1 قنوات
Get PRO
فبراير '24
+21
في 0 قنوات
Get PRO
يناير '24
+53
في 2 قنوات
Get PRO
ديسمبر '23
+1 410
في 9 قنوات
Get PRO
نوفمبر '230
في 1 قنوات
Get PRO
أكتوبر '23
+39
في 1 قنوات
Get PRO
سبتمبر '23
+625
في 0 قنوات
التاريخ
نمو المشتركين
الإشارات
القنوات
30 يونيو+1
29 يونيو+2
28 يونيو0
27 يونيو+1
26 يونيو+1
25 يونيو+3
24 يونيو+1
23 يونيو0
22 يونيو+1
21 يونيو0
20 يونيو+2
19 يونيو+1
18 يونيو+1
17 يونيو+1
16 يونيو+2
15 يونيو0
14 يونيو0
13 يونيو0
12 يونيو0
11 يونيو0
10 يونيو+1
09 يونيو0
08 يونيو0
07 يونيو0
06 يونيو+1
05 يونيو+2
04 يونيو+2
03 يونيو+5
02 يونيو+4
01 يونيو+3
منشورات القناة

2
لا يوجد نص...
504
3
Приветики! Мне очень нравится читать ваши мысли под постами! Это реально правда, когда я пишу пост, у меня есть только моё мнение и мнение авторов статей (хотя в большинстве из них, придерживается нейтральная позиция). Так что я подумал, а давайте я поддержу в вас желание и стремление комментировать и делиться мнением) Суть такова. На эту неделю у меня уже запланированы постики (я начал использовать Rich сообщения, так что вам будет весело), смело комментируйте и делитесь мнением под ними, а в конце недели я выберу самого интересного автора и он получит от меня подарок :3 И так будем делать каждую неделю, так что думаю многие что-то смогут получить ❤️ А что за подарок? Я пишу этот пост после того как перечитал все свои посты в канале (а это очень много текста), так что хотел сделать призом ключик TLoU, но думаю приберегу это на следующий раз, а в этот раз в качестве приза у нас будет ключик PRAGMATA в полном издании + DLC. Вот как-то так)
493
4
لا يوجد نص...
906
5
Игрок тоже несёт ответственность, это важно помнить, когда мы рассматриваем влияние игр. И что самое главное, вы в комментари+6
Игрок тоже несёт ответственность, это важно помнить, когда мы рассматриваем влияние игр. И что самое главное, вы в комментариях под прошлым постом упомянули и предсказали этот пост) Давайте вспомним любое массовое событие где подросток что-либо сделал, кого винят в первую и основную очередь — игры. Но при этом СМИ и государство никогда не говорят об самом человеке и его окружении, а ведь всё начинается с ответственности самого игрока. Смысл игры создаётся не только разработчиком, но и людьми, которые играют в неё. Относительно этого феномена мне очень нравится дилемма Arc Riders. Мы привыкли что в экстакшен шутере игроки достаточно агрессивны, но в Arc Riders появился необычный феномен, где игроки намеренно перестали, и даже наоборот, стали порицать убийства, буквально превратив PVP игру в PVE. (звукорежиссёр про это рассказывал очень хорошо) У нас буквально рождается несколько типов поведения где игрок может: - помогать команде и врагам - токсичить в войсчате - отстреливать всех встречающихся - читерить - помогать игрокам - играть в PvP - играть в PvE Это одна и та же игра, но именно разность людей определяет поведение. Игрок — не зритель игрового мира. Игрок — автор видеоигровой среды.
1 558
6
Игры всегда надо рассматривать с нескольких сторон. Всегда можно уйти в две крайности: Первая — игры это зло, которое надо за
Игры всегда надо рассматривать с нескольких сторон. Всегда можно уйти в две крайности: Первая — игры это зло, которое надо запретить. Вторая — игры идеальны и ни в чём не виноваты. Как говорили великие, нет ничего абсолютно чёрного и абсолютно белого. Это было бы слишком примитивно. Проблема в том, что реальность намного сложнее. (Если, конечно, не вспоминать The Horses.) Игры могут делать совершенно разные вещи. Они могут: - Помогать - Развивать - Объединять - Давать убежище Но при этом они могут: - Вызывать зависимость (в частности, азартные) - Усиливать агрессию - Портить здоровье (особенно режим сна) Из-за этого любая дискуссия легко превращается в банальный обмен простыми характеристиками. Что, кстати, очень напоминает комментарии в интернете. Мне кажется, игры (хотя, возможно, не все — тут это уже моя субъективная точка зрения) не могут быть просто хорошими или плохими. Всё зависит от того, какие они, для кого они и что именно делают. И это даже не вопрос качества уровня Concord. Это вопрос морально-этического осмысления. Потому что одна и та же игра для одного человека может стать способом социализации и поиска друзей, а для другого — способом убежать от проблем. Именно поэтому мне кажется, что вопрос должен звучать не «хорошие игры или плохие», а «какое влияние оказывают конкретные игры и почему». Давайте продолжим рассуждать вместе. Как вы думаете, какие игры для кого и для чего существуют?
1 626
7
Потихоньку начинаем, ждём всех и изучаем новый плейлист музыки) https://www.twitch.tv/sleepless_code
1 488
8
Я живой (вроде), так что попробуем оживится ещё и в ваших глазах. Встречаемся в 22:30 (МСК) в уже знакомом нам месте. https://www.twitch.tv/sleepless_code
1 367
9
Давайте опять поговорим про очереди в Стражнике. Мы уже увидели сниппет кода, отвечающий за обработку, но как мы реализовали отправку? Вот тут всё начинает становиться сильно интереснее. Основная сложность, с которой мы столкнулись, — необходимость рефакторить весь код. Хотелось избежать редактирования вообще всех мест, где идёт отправка сообщений. Поэтому мы вспомнили очень важную вещь, которая есть в JS: почти всё можно перезаписать по своему желанию. Этим мы и воспользовались, перезаписав метод отправки сообщения и подменив логику отправки в Telegram логикой отправки в очередь. Получился вот такой прикольчик: ctx.reply = async function (text: string, options?: ExtraSendMessage): Promise<Message> { return Queues.getInstance().sendMessage("replyQueued", this.chat.id, text, options); } Тут мы перезаписали оригинальный метод ответа на сообщение своим собственным. Собственно, вуаля — половина работы отменена) Дальше задача номер два, которая стала сильно интереснее: отправка сообщений разделяется на два типа — там, где нам нужен ответ, и там, где нам наплевать на ответ. Нашей первой реализацией была идея внутри каждой операции отправки сообщения создавать листенер, который будет ждать ответа о том, что сообщение отправилось, и резолвить промис с ответом. А делать await промиса или нет — уже решение на уровне бизнес-логики. Что могло пойти не так? Да, как оказалось, много чего. У нас утекли листенеры. Их стало так много, что Node.js перестал справляться с их контролем. Встал вопрос: как сделать решение, которое не перегрузит среду, но сможет дожидаться ответа по отправке сотен сообщений и делать это асинхронно? И тут я придумал прикольное решение: создаём Map, который будет хранить ID задачи на отправку и коллбэк. private _promisedMessages = new Map<string, { resolve: (message: Message) => void, reject: (error: Error) => void }>(); В отправке мы создаём задачу и промис, записывая в мапу ID задачи и resolve этого промиса в качестве коллбэка. async sendMessage(target: TargetBot, name: string, id: number, text: string, extra: ExtraSendMessage = {}, priority = 10) { let error = new Error("Stack trace"); // получаем стектрейс до этого момента let job = await this._sendQueue.add(name, {id, text, extra, target, stack: error.stack}, {priority}); return new Promise<Message>((resolve, reject) => { this._promisedMessages.set(job.id!, {resolve, reject}); }); } И вместо сотен листенеров делаем один-единственный глобальный, который будет работать до самого завершения процесса: new QueueEvents(process.env.DEBUG ? "guard_dev_send" : "guard_send", { connection: { host: process.env.REDIS_HOST, port: Number.parseInt(process.env.REDIS_PORT ?? "6379"), }, }) .on("completed", async ({jobId, returnvalue}) => { if (this._promisedMessages.has(jobId)) { // проверяем, что это сообщение ожидается на этом воркере let {resolve, reject} = this._promisedMessages.get(jobId)!; // получаем коллбэки этого сообщения this._promisedMessages.delete(jobId); // удаляем его из мапы resolve(returnvalue); // отдаём результат промису } }); И тем самым получается, что в команде код выглядит как самый обычный вызов: if (!peer.isUserKnown()) { await ctx.reply(await ctx.lang.t("commands.general.userNotFound")); return; } А на самом деле за пару миллисекунд запрос обходит две очереди и несколько сервисов, выполняя работу чётенько и безопасненько) С первого взгляда выглядит как быстрое и логичное решение, но мы к этому шли месяц-полтора. Вот как-то так.
1 812
10
Давайте немного о коде и решениях 😄 Имперский Стражник — большая система с кучей разных источников сообщений. Сообщение может уйти из одного из 200 классов ядра или ещё большего зоопарка внешних модулей, но есть одна важная проблема: отправку сообщений надо контролировать. Надо следить за лимитами, чтобы не передалбывать Bot API зазря. Надо следить за ответами, чтобы, если мы вышли за лимит, подождать и повторно отправить запрос. Надо вообще убеждаться в доставке, синхронизировать состояние и ответы. Короче, следить надо за всем. Так что давайте я расскажу, что мы сделали, чтобы всё это работало и жило с учётом нашего стека. Начнём с учёта отправки, лимитов и структуризации. Я решил, что за отправку сообщений будет отвечать синглтон-сервис, на который все остальные сервисы будут скидывать задачи. Но как это всё соединить, учитывая необходимость быстрого масштабирования и подключения новых модулей? Тут на помощь пришёл Bull (не реклама, если что, просто делюсь либой, на которой делал решение). Давайте посмотрим, как выглядит воркер отправки: new Worker(process.env.DEBUG ? "guard_dev_send" : "guard_send", async (job) => { // тут я переключаю очередь в зависимости от режима, в котором запущен сервис, чтобы не задевать прод во время тестирования let telegram = job.data.target === "media" ? mediaBot.telegram : bot.telegram; // в данный момент бот, через который будет идти отправка, выбирается немного костыльно, но мы в работе :D try { return await telegram.sendMessage(job.data.id, job.data.text, job.data.extra); // отправляем сообщение } catch (e: any) { if (e.code === 429) { await job.moveToDelayed((Date.now() / 1000) + 30000); // словили рейтлимит, ждём 30 секунд и пробуем опять } else { e._sourceStack = job.data.stack; // подпихиваем стек до очереди в ошибку e._stack = e.stack; // стек внутри очереди e._message = e.message; // и причину return e; } } }, { connection: { host: process.env.REDIS_HOST, port: Number.parseInt(process.env.REDIS_PORT ?? "6379") }, limiter: { // режем скорость отправки max: 2, duration: 1000 }, concurrency: 1, // и ограничиваем параллельность }).on("failed", (job, err) => { Queues.logger.error({ job, err }, "Failed to send message"); // если что-то пошло не так, логируем }); Небольшой такой код, но он позволяет нам чётко контролировать очередь и лимиты. А дальше посмотрим на отправку и приём) В комментариях разрешается открыть портал в холивар))
1 198
11
Запустили новый канал про ИИ! 🚀 Наши ИИ агенты 24/7 мониторят соцсети и мировые СМИ, а команда отбирает лучшее — новости об
Запустили новый канал про ИИ! 🚀 Наши ИИ агенты 24/7 мониторят соцсети и мировые СМИ, а команда отбирает лучшее — новости об ИИ, апдейты моделей, инсайды и мемы. Подпишись и присылай свои темы и идеи форматов. Подписывайтесь на @A1ntelligence!
0
12
Свердловский депутат требует вернуть опасную детскую игру Челябинский депутат Госдумы Лантратова требует запретить видеоигры+4
Свердловский депутат требует вернуть опасную детскую игру Челябинский депутат Госдумы Лантратова требует запретить видеоигры Вражеские бирюльки. РКН запретит культовые компьютерные игры для 87 млн Депутаты Госдумы России предложили ограничить доступ к видеоиграм по «китайскому сценарию» Депутат Гусев предложил ввести самозапрет на компьютерные игры: «Для многих это уже форма зависимости» Мы уже привыкли к жёсткой стигматизации игры в СМИ как источника всего плохого и вообще чуть ли не абсолютного зла. И ведь причём это далеко не только наша и далеко не новая тенденция. Многие политики, журналисты, да и обычные люди старших поколений привыкли обсуждать игры в двух полярностях: полезное и вредное, будто это какой-то прибор. Но давайте честно — игры уже давно не просто безделушки. Это социальное, экономическое и даже политическое явление. Вещь, которая влияет на жизни миллионов людей. А когда что-то влияет на мышление, поведение и отношения — она становится предметом этики. А в ней нам надо ставить вопрос не "нравятся ли вам игры?", а "какими они нас делают?" Причём это вопрос не только про агрессию или зависимость. Это вопрос про эмпатию, социализацию, моральный выбор, ощущение ответственности, отношение к насилию, смерти, власти, труду, даже к самому себе. И мне кажется, что мы как общество до сих пор толком не дошли до этого разговора. Мы всё ещё пытаемся решить сложнейшую культурную тему лозунгами уровня: игры полезны или игры вредны Хотя всё сильно сложнее. Как думаете, наше политическое и социологическое развитие уже дошло до такого разговора — или пока нет? Давайте обсудим это в рамках рубрики об этике в играх.
2 046
13
Привет, я — Иван! 17 лет в продажах. В 37 решил — хватит. И пошел учить код. В этом возрасте нормальные мужики покупают мотоц
Привет, я — Иван! 17 лет в продажах. В 37 решил — хватит. И пошел учить код. В этом возрасте нормальные мужики покупают мотоцикл. Я купил курс по PHP. Жена в шоке) Рассказываю все публично — что пилю, что ломаю, сколько зарабатываю. Спойлер: пока ноль. Но мой мопс продолжает верить в меня. Его заяц, кстати, тоже) Интересно? Вэлкам → // ToDo: офис подождет // ToDo: уйти из офиса // STATUS: начало
0
14
Как строить карьеру в IT и не раствориться в работе. Я backend-разработчик и футбольный энтузиаст с системным подходом к спор
Как строить карьеру в IT и не раствориться в работе. Я backend-разработчик и футбольный энтузиаст с системным подходом к спорту. Играю в разных странах и с разным уровнем соперничества: от локальных матчей до турниров в Азии. В канале пишу: — о личном опыте лида в IT и реальных технических решениях 👨‍🎓 — о развитии своих проектов и о том, чему они учат 📈 — о футбольных движухах в разных странах 🏃‍♂️ — о том, как не терять форму при плотной работе 💪 — о лайфстайле зимовщика 🧘‍♀️ Без мотивационных лозунгов. Без «успешного успеха». Только практика, дисциплина и честные наблюдения. 👉 Футбольный синьор Если вам близка идея баланса между карьерой и личной жизнью и интересно заглянуть за кулисы IT, добро пожаловать на канал.
0
15
Лучший навык в работе — умение признавать свои ошибки. Ошибаются все, а вот учатся на них и выносят пользу — далеко не многие
Лучший навык в работе — умение признавать свои ошибки. Ошибаются все, а вот учатся на них и выносят пользу — далеко не многие. 3 мая вы могли заметить, что Имперский Стражник с ночи работал не очень стабильно: не отвечал на некоторые запросы, а на другие отвечал по несколько минут. Мы признаём — мы накосячили. И сильно. Давайте вместе посмотрим, что мы делали и где всё пошло не так. Уже давно у нас стояла задача на создание второй, текстовой модели для ИИ-модерации. Сейчас мы умеем проверять только визуал, но если запрещённый контент находится в тексте — мы его не видим. Тут и должна помочь текстовая модель. 27 апреля — 1 мая Мы берём в активную разработку задачу на создание и интеграцию текстовой модели. Первая итерация: для хранения угрозы используется единое поле danger с приоритизацией по опасности. На наш взгляд, это была рабочая и вполне нормальная логика. Мы дописали код и выкатили релиз в продакшен. 2 мая, 13:00 — первый звоночек Нам присылают репорт и интересное предложение. Суть: Стражник выдал ограничение за порнографию в ответ на стикер, где был лишь шуточный текст про половой акт. Предложение звучало так: «А ты не думал им отдельные категории выдать? Потому что порнография текстом и порнография картинкой — вещи немного разные». Мы задумываемся и понимаем: поинт крайне корректный. Нужно срочно исправлять ситуацию, пока массовые ограничения с такой логикой не улетели всем подряд. 2 мая, 14:15 Создаём задачу IG-132841, в рамках которой планируем рефактор: intent_media intent_text Разделяем текстовую и визуальную угрозу. 3 мая, 1:26 Выкатываемся на прод (не с первого раза). Пропускная способность крайне низкая, при этом Load Average — 23. Потеряли индексы в БД. Спустя 20 минут восстанавливаем индексы, чиним медленные запросы и продолжаем жить. 3 мая, 1:52 Отваливается Prometheus. Мы уже понимаем: вечер будет весёлый. За 7 минут дебага находим кривой запрос сбора статистики и правим его. 3 мая, 2:27 После ещё пары хотфиксов мы наконец в проде. Всё работает. Без даунтайма внедрили фичу. Красота. Тогда мы ещё не знали, что натворили. За пару минут система разгоняется до 11 ops. Что такое 11 ops? Это 11 файлов, которые скачиваются, проверяются и сохраняются каждую секунду. 3 мая, 3:01 — первый звонок армагеддона Начинаем получать от BOT API: TelegramError: 429: Too Many Requests: retry after 60 Мы подумали, что упёрлись в лимит getFile. Ну бывает. Сейчас ограничим скорость и пойдём спать. Ага. Конечно. Оказалось, мы упёрлись в лимит общего количества запросов к BOT API. Ошибки начали ловить вообще все методы бота. Через 8 минут внедряем rate limiter и заканчиваем рабочий день. 3 мая, 14:17 Замечаем странное поведение. Несмотря на лимитер, Too Many Requests становится только больше. Очень странно. Я решаю написать миксин, который будет отдавать в Prometheus статистику запросов в разрезе бота и метода. 3 мая, 14:40 Дописываю логику, собираю дашборд… и тут становится понятно то, что мы уже начинали подозревать. Лимитер. Не работает. При лимите в 20 ops… МЫ ДЕЛАЕМ 95 OPS. 3 мая, 16:36 Релизим новый лимитер, который уже нормально работает с потоками и не допускает ошибок прошлой версии. Но за время разработки у нас случился тот самый: «пик, после которого лимиты Telegram посадили нас на пику». Из-за разгона до 173 ops Telegram на минуту отрезал нам вообще все запросы. Полностью. Да, было больно. 3 мая, 17:00 Инцидент полностью разрешён. Очереди разгребены, фон ошибок снижен, всё стабилизировалось. Что можно сказать по итогу? Ну… мы очень жёстко накосячили 😅 Недостаток метрик и нормальных prod-like тестов привёл к тому, что в продакшен уехал код, который устроил харакири нашей пропускной способности. Но зато: — появились новые дашборды — алерты на рост ops — понимание, куда смотреть и чёткое осознание того, насколько опасно релизить в прод Вот как-то так :3 А у вас в проектах были подобные инциденты? Буду рад почитать истории в комментариях. Ну и да, ещё покидаю туда цитаты из рабочего чатика — там были настоящие легендарные сообщения
1 867
16
لا يوجد نص...
0
17
https://www.twitch.tv/sleepless_code Начинаем как уже обычно на твичке)
1 511
18
Сегодня в 19:00 по МСК собираемся на музыку и буковки :3
1 359
19
Настало время рассказать причину моего полного отсутствия в последнее пару недель, я переезжал) До этого не задумывался наско+2
Настало время рассказать причину моего полного отсутствия в последнее пару недель, я переезжал) До этого не задумывался насколько у меня много всякого мерса и книг, теперь я могу стримить и делать контентик почти каждый день) Какие фандомы и художников узнали? 🥰
1 765
20
Clompi: Ты. Ключ. Остальное лишнее. Никаких сборов IP, cookies, кроме одной технической локальной куки для Твоего входа на са
Clompi: Ты. Ключ. Остальное лишнее. Никаких сборов IP, cookies, кроме одной технической локальной куки для Твоего входа на сайт, никаких email, паролей, телефонов, seed фраз, лишь ключ. Полностью анонимный и зашифрованный сайт, никто не видит что Ты там делаешь, даже Я. В нём: Личное зашифрованное локальное хранилище с локальным LLM чатом, которое находится в кэше браузера, шифрование ( AES-GSM ) По мимо этого, чат, навигаторы, ассистенты, гиды, сообщество идей и т.д Я делаю обновления без громких аноснов, всё что есть и будет: Твоё. Никаких подписок, привилегий, токенов, доплат, лишь ключ разово. Ты поддержал меня и Я поддержу Тебя. Ключ навсегда 2000₽, в боте @Clompi_bot Канал: https://t.me/clompi_ai?erid=2W5zFHKRCoj Сайт: https://tglink.io/66a294b23e5ce0?erid=2W5zFHKRCoj
1 698