Дима
Может yield течет просто
Не, не засекал, в принципе это несложно замерять. А при чём тут утечка? Памяти достаточно, там по времени кто-то не успевает
Дима
Просто там специфичное место модуля, в котором производятся невероятно крупные вычисления, и для снижения нагрузки вызовы функций часто откладываются на следующий tick event loop'а
Ві
просто если будешь бенчмарк делать надо почекать что б не текло, иначе гц будет влиять
Дима
Ну это можно засекать
Дима
Я кстати периодически делаю разные бенчи)
Дима
https://jsperf.com/instanceof-vs-property-lookup-es6
Дима
Если стереть -es6 то можно увидеть оригинальный тест, в котором результаты кейсов различаются в десятки раз, причём в неправильную сторону 🌚
Anton
можно ли как-то в консоли через nodejs закрепить строку, чтобы она всегда была сверху, даже при. скроллинге? вот как сейчас сверху сообщение закреплено, но чтобы это в cli было
Алексей
У меня например есть модуль, в котором в одном месте всё ломается нафиг если заменить колбэки/промисы на транспилирование async / await
Возможно я в прошлый раз не достаточно ясно выразился, но если ваш код ломается в зависимости от быстродействия одной части, то у вас проблемы, сколько бы промисов с коллбеками туда не запихивать. Рано или поздно код будет запущен на слишком медленном или слишком быстром компьютере и все ваши костыли закономерно сломаются.
Дима
В прошлый раз была другая часть кода ;)
Алексей
Точнее я даже так скажу — была ссылка на совершенно иной код с совершенно иной проблемой)
В любом случае, если запрос А должен выполняться строго до запроса Б, то нужно явно в коде это проверять.
Дима
Сказать очень легко)
Дима
А вот сделать — уже не очень
Дима
Навтыкать флагов пока что недостаточно
Дима
Проблема в том, что частей кода, из-за взаимной комбинации которых может быть баг не много, а очень много
Дима
Потому что из-за асинхронных запросов процесс выполнения дробится по функциям и частей становится даже ещё больше, чем есть сейчас
Дима
А так же, вероятно, может играть роль взаимное расположение различных частей во времени
Дима
И вот тут уже флаги вообще не помогут
Алексей
Не должно влиять
Дима
Телепатия?
Алексей
Если влияет, то это ошибка
Дима
Лол
Алексей
Точнее плохой код
Дима
Спасибо, кэп
Дима
Что если я скажу, что криптографический алгоритм сам по себе завязан на точное значение timestamp и поэтому "не должно влиять" — это ошибка?
Дима
"Тогда надо передавать везде правильный tmestamp" — можно не писать, я это и так понимаю
Алексей
Если действие А должно выполняться после действия Б, то нужно не полагаться на время выполнения А и Б, а нужно синхронизировать эти вещи
Дима
А если оно не должно выполняться после Б?
Алексей
Значит вводить коррективы в timestamp
Дима
Если именно что в примерно тот же timestamp?
Дима
Значит вводить коррективы в timestamp
А если баг связан в том числе с корректировкой timestamp?
Дима
Суши вёсла, да
Дима
А я как то умудряюсь жить с этим и даже фиксить эти баги)
Дима
То есть что тот фрагмент, что этот — это тонна легаси жуткого качества, который я умудряюсь как-то привести в пристойный и понятный вид
Дима
Потому что переписать с нуля практически нереально из-за крайне специфичных знаний по криптографии, заложенных в базу
Дима
То есть я работаю с чёрным ящиком душераздирающего качества и стараюсь производить тождественные преобразования так, чтобы с этим можно было работать
Алексей
А если оно не должно выполняться после Б?
Для двух действий возможны три ситуации: А должно выполняться после Б, Б должно выполняться после А, порядок выполнения А и Б не важен.
Дима
Я уже говорил
Дима
Криптография завязана на timestamp
Дима
Фрагменты кода могут реально не обязательно идти друг за другом (более того, подозреваю, что в этом и есть проблема), а получать ключ примерно в одно и то же время
Алексей
Это какая-то очень спецефическая криптография
Дима
Более чем
Дима
Если того, что я выше описал ещё не достаточно, то добавлю, что там AES IGE юзается 😂
Алексей
Разные ключи или одинаковые?
Дима
Вероятно, разные
Алексей
Могу посоветовать лишь написать код так, чтобы ключи всегда получались синхронно в один и тот же тик времени.
Дима
Я уже героически снизил число уровней вложенности с 7 до трёх 🌚 В общем, примерно этим и занимаюсь)
Алексей
Криптография там хоть синхронная?
Дима
))
Дима
Не совсем
Алексей
Наркоманы видимо какие-то код писали.
Дима
😄
Дима
Да))
Дима
Сейчас там всё более-менее устаканилось и я могу об этом хотяб шутить
Дима
До этого хотелось в окно выйти
Дима
Периодически
Алексей
Это я надеюсь работа, а не хобби?
Дима
🌚
Дима
По работе у меня проще всё 😄
Дима
Просто глубина проблем открывалась по мере погружения
Дима
Как в опыте с лягушкой в кипятке
Алексей
Тогда вообще зачем этим заниматься?
Дима
Почти всё время проблема выглядит действительно как "сейчас я воткну там один флаг и всё заработает")
Дима
Потом с проблемой на один уровень глубже та же история. Ну вроде и правда, ща через день починю всё. Потом ещё раз. Потом вжух — и у тебя уже комплес репозиториев с тысячами строчек кода 😄
Дима
Ну и признаться, за исключением наркомании, это реально интересно)) Например этот код — один из немногих, который реально стоит переписывать на asm.js/wasm прям сейчас. Рассчёты в воркерах и т.д.
Дима
Где сейчас такое найти)
Алексей
Тогда нужно ковырять C++ реализации, не уверен, что можно JS скопировать в нормальный wasm.
Алексей
Мне как-то доводилось ковырять протокол WhatsApp. Там они тоже использовали довольно экзотические решения.
Дима
Тогда нужно ковырять C++ реализации, не уверен, что можно JS скопировать в нормальный wasm.
Да, естественно я это не с js хотел компилировать. Хотя попытался пописать что-то на asm.js. Минут 20. Реализация на C++ — это соответствующий подмодуль OpenSSL) Пока я не оч готов транскомпилировать OpenSSL в js 😄
Алексей
Видимо создатели мессенджеров кайфуют от запихивания экзотических и сомнительных криптографических и не только решений.
Алексей
С JS в asm.js/wasm компилировать вообще не имеет смысла. Если только не замутить хитрую штуку с выводом типов.
Дима
Ну это то понятно
Anonymous
Заказчик просит расписать задачу по пунктам и времени. Есть какие-нибудь ресурсы для этого?
Дима
С JS в asm.js/wasm компилировать вообще не имеет смысла. Если только не замутить хитрую штуку с выводом типов.
Просто там из-за быстродействия в big integer пришлось перебирать либы, пока не дошёл до варианта, уже почти напоминающего asmjs 😄 https://github.com/zerobias/telegram-mtproto/blob/master/src/vendor/leemon.js
Anonymous
А что-нибудь типо трелло, чтобы моно было ему показать с комментариями, скринами и прочим
Дима
Ну да)