Что делать – Telegram
Что делать
97 subscribers
209 photos
3 videos
4 files
130 links
Не смешно
Download Telegram
Что делать
Вот у меня сущность приложения (indigo.App) довольно тупая, и принимает роутер только когда жмакают app.Serve(). Поэтому, на сколько портов индигу не вешай, роутер будет один и тот же использоваться. Из-за этого и появился virtual.Router, который берёт запрос…
За хотдоги спасибо, но у меня тут забавная ситуация. Я начал тыкать напрямую net.ListenTCP, чтобы иметь не-виртуальный метод SetDeadline() на листенере. Нюанс в том, что конструктор принимает *net.TCPAddr, который сначала надо ещё получить. Получаешь через net.ResolveTCPAddr(). А в него нельзя засунуть 0.0.0.0 - заглушка, которая слушает на всех интерфейсах - в отличии от net.Listen. Там, почему-то, всё работает нормально. И я всё никак вдуплить не могу, где именно здесь происходит эта магия
А, нет, я дегенерат. Я блять адрес передавал в ListenTCP() вместо network. А должен был литерал "tcp". Ну теперь-то ебать работает
На каждую операцию чтения либо записи в сокет, я указываю дедлайн - таймаут, после которого операция зафейлится. При чтении я, например, таким образом могу отсекать idle подключения. Там нужно указывать абсолютное значение: ну, то есть, вот это вот time.Now().Add(90*time.Second). И я заметил, что это как-то... Дороговато! 50нс, если быть точным. Дорого, потому что я обычно в 500-600нс суммарно укладываюсь, вместе с парсингом, обработкой и формированием ответа

Не то, чтобы это особо интересно было, просто довольно занятный кейс. Я это дело оптимизировал посредством atomic.Int64, в который кладу раз в 500мс текущее время из отдельной горутины. 55нс превратились в 5.6нс. Нраица!
🔥2👏1
Forwarded from ⚠️Invalid Handle (kᴄ (ᴄarbonated))
this is REAL Unicode emoji proposal done by REAL people
3 лучших контрибьютора в индиго
💯7
Да это же литералли ми
https://zero.sci-hub.se/5268/7dda7cee52d7eb3ec606a82d0f1b9a61/giertsen1988.pdf

Забавная ситуация с мгновенной декомпрессией 9 атмосфер. А вот фото человека, в следствии поместившегося в зазор 12.7см, уже не такое забавное
🔥11
Что делать
https://zero.sci-hub.se/5268/7dda7cee52d7eb3ec606a82d0f1b9a61/giertsen1988.pdf Забавная ситуация с мгновенной декомпрессией 9 атмосфер. А вот фото человека, в следствии поместившегося в зазор 12.7см, уже не такое забавное
У двоих, которые спали в соседней камере, в мгновение вскипела кровь и мозги. Интересно, можно ли это записать в тихую смерть во сне?
🔥3
Вот, кстати, один из двух человек, которые стояли снаружи. Второго фотографировать не стали, помер ведь
🌚2
Pentium 1993 года, 3.1млн транзисторов. Над непосредственно кремнием 3 слоя проводок и соединений
👍2🤔1
concurrency-primer.pdf
1.3 MB
What every systems programmer should know about concurrency
👍2🔥1
Нашёл тут интересный пост про RSA. Сам нихуя не понял, но выглядит интересно. Автор - @ruheight

Первого марта Клаус Шнорр (ему мы обязаны цифровыми подписями) наделал шороху, загрузив препринт "Быстрая факторизация чисел алгоритмами SVP". В первой версии статьи есть приписка "это уничтожае криптосистему RSA". Именно "уничтожае", и я полагаю, что фраза "this destroyes RSA" станет мемом. Мне всегда нравился фильм "Sneakers", но так как RSA (пока) ничего не угрожает, то поговорим о факторизации и линейной алгебре.

Уже триста лет назад Ферма обратил внимание на то, что если представить составное число в виде разности квадратов, то его можно разложить на множители. n = a^2 - b^2 = (a + b) * (a - b). Например, 8051 = 8100 - 49 = 90^2 - 7^2 = (90 + 7) * (90 - 7) = 97 * 83. Поэтому числа p и q в модуле RSA не должны быть близко друг к другу. Для произведения двух простых 1024-битных чисел, разность которых 2^514, алгоритм Ферма находит множители за три шага. И это далеко не единственный способ закосячить RSA.

Затем, всего-то через пару сотен лет, Крайчик предложил новое условие u^2 ≡ v^2 (mod n), и u ≢ ±v (mod n). Дальше примеры из отличной статьи Померанца "A tale of thow sieves" http://www.ams.org/notices/199612/pomerance.pdf Для числа 2041 начинаем с √n и считаем q(x) = x^2 - n, если x = 46, 47, 48, ..., то q(x) = 75, 168, 263, ... Пока никакими квадратами и не пахнет.

Но если перемножить 46 * 47 * 49 * 51 и 75 * 168 * 360 * 560, то их квадраты (по модулю 2041) равны. 311^2 (mod 2041) = 1416^2 (mod 2041) = 794, и 311 != 1416, условие Крайчика соблюдено. Находим множитель, GCD(1416 - 311, 2041) = 13, и 2041 = 13 * 157. Осталось понять что на что умножать.

У квадрата любого числа показатели степеней простых множителей четные. (a * b * c ...)^2 = a^2 * b ^2 * c^2 ... 10 = 2^1 * 5^1. 10^2 = 2^1 * 2^1 * 5^1 * 5^1 = 2^2 * 5^2. Это сложный способ сказать, что десять в квадрате, то же, что и дважды два, дважды умноженное на пять. Слово "дважды" появляется перед каждым умножением.

Некоторые из чисел (x^2 - n) состоят только из небольших множителей. 75 = 3 * 5^2, 360 = 2^3 * 3^2 * 5, если число не содержит множителей больших, чем B, то такие числа называют B-гладкими. В числах 75, 168, 360 и 560 нет множителей больше 7, они гладкие. Погладьте их.

Можно записать степени в виде вектора 75 = 2^0 * 3^1 * 5^2 * 7^0. v(75) = (0, 1, 2, 0), v(168) = (3, 1, 0, 1). Так как нас интересует только четность, то степени можно записать по модулю 2: v(75) = (0, 1, 0, 0) mod 2; v(168) = (1, 1, 0, 1) mod 2, так как числа у нас B-гладкие, и операции по модулю два, то получившаяся хрень - векторное пространство размерности B над полем F_2.

(Я отчетливо слвшу, как некоторые из вас горестно вздыхают на словах "векторное пространство", но в том, чтобы записать единички и нолики через запятую, ничего сложного нет)

Для того, чтобы найти нужные числа, нужно подобрать вектора, которые в сумме (по модулю два) дают (0, 0, 0, 0). Если записать вектора (0,1,0,0),(1,1,0,1),(1,0,1,0),(0,0,1,1) один под другим и сложить столбцы, то получится нулевой вектор. В QS и GNFS, есть еще много тонкостей и хитростей, но речь не о них.

В этом месте Шнорр пришел к логичному выводу, что если что-то выглядит как вектор, то можно попробовать применить алгоритмы относящиееся к векторам. А именно CVP и SVP (поиск ближайшего и кратчайшего вектора в решетке), чтобы ускорить процесс поиска. А точнее приблизительных решений, потому что обе сучки в NP-hard (факторизация NP-intermediate). Потому их, кстати, и используют в пост-квантовой криптографии.

Умные дядьки, которые занимаются решетками порылись в статье Шнорра, и из неё отнюдь не очевидно, что таким способом вобще можно что-то найти. Так же там есть ошибка в оценке сложности, то есть даже, если таким способом можно что-то найти, то совсем не факт, что быстрее, чем уже существующие методы. Речь идёт о решетках ебанистических размерностей. https://github.com/lducas/SchnorrGate
Так что ваши p и q спрятанные в "зеленных замочках" сайтов, роботах-пылесосах и мобильниках могут спать спокойно.
👍2😁1
Бензофурран Нейроцикл
http://www.stargrave.org/Harmful.html
чому клоунов наставили.
🍌2🌭1🗿1
Немного контента о том, что происходит до того как выполнится ваш код в main. Рассматриваются как бинарники и запуск с линукса, так и embedded системы (аля esp32)

- How Programs Get Run
- How Programs Get Run: ELF Binaries
- Linux x86 Program Start Up or – How the heck do we get to main()?


- A General Overview of What Happens Before main() (тут целая серия статей)
- From Zero to main(): Bare metal C
🥰2🤩1
https://medium.com/@tomysshadow/fixing-the-loading-in-myst-iv-revelation-86e2814afbf8 (+ part 2)

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

Уровень, к которому я стремлюсь
1
https://github.com/NationalSecurityAgency/ghidra

База для reverse engineering'а. Порох входа весьма низок - закиньте какой-то бинарник и поизучайте его наполнение.

Рекомендую взять бираник из первой зачади по RE на https://hack.ainfosec.com/

- Editing an Executable Binary File with Ghidra
- CheatSheet (Command+Shift+G - изменить инструкцию)
🥰1