LOVESYUK

Description
Пишу тут о том что интересно. А интересно мне про IT, нейросети, стартапы и много ещё чего.

Обо мне: основатель двух IT компаний. Люблю писать код и обучать ML модели. Делаю мини-проекты и рассказываю о них тут.

with 💙 from @mr_vvv
Advertising
We recommend to visit
HAYZON
HAYZON
6,053,581 @hayzonn

لا اله الا الله محمد رسول الله

👤 𝐅𝐨𝐮𝐧𝐝𝐞𝐫: @Tg_Syprion
🗓 ᴀᴅᴠᴇʀᴛɪsɪɴɢ: @SEO_Fam
Мои каналы: @mazzafam

Last updated 3 weeks, 1 day ago

Architec.Ton is a ecosystem on the TON chain with non-custodial wallet, swap, apps catalog and launchpad.

Main app: @architec_ton_bot
Our Chat: @architec_ton
EU Channel: @architecton_eu
Twitter: x.com/architec_ton
Support: @architecton_support

Last updated 2 weeks, 2 days ago

Канал для поиска исполнителей для разных задач и организации мини конкурсов

Last updated 1 month ago

2 months, 3 weeks ago
4 months ago
5 months, 2 weeks ago

*? 200 тыс. шуток, вебсокеты и Gemini: История одного обновления ?*

Многие тут помнят, что в свободное время я делаю юмористическую игру для друзей PunchMe. Устроено всё так: собираетесь с друзьями в игровой комнате, каждому дают по началу шутки которую надо смешно закончить, потом все хихикают и голосуют у кого веселей вышло.

Делал первую версию чтобы играть с друзьями, но проект стал достаточно популярным и игроки уже написали порядка 200k панчлайнов.

Так вот, хочу рассказать о гигантском обновлении PunchMe

Чистый новый интерфейс

Прекрасный новый минималистичный UX/UI дизайн сделал Илья. Оживили и сверстали фронт Вова с командой на VueJs + Tailwind.

Можно играть со своими иностранными друзьями

Добавил поддержку английского в интерфейсе + есть англоязычный пакет вопросов. Работает даже озвучка.

Панчетрон ещё смешнее
AI бот, который играет с вами, теперь на голову смешнее предыдущей версии. Основной буст произошёл от перехода с gpt4 на gemini, который прекрасен на русском и, на удивление, не сдерживает себя в политкорректности. Иногда даже краснею за него.

Новый пакет: вопросы с никами
Часто с друзьями играли, когда в заходах для шуток (сетапах) были имена друзей. Очень весело. Хардкодил раньше этот режим вручную, теперь добавил эту функциональность при создании комнаты.

Всё работает быстрее на вебсокетах и асинхронно
Бек и фронт перевёл с rest-api на вебсокеты. Переписал весь код на асинхронный (flask → fastapi). Всё стало работать бодрее.

Бекэнд теперь организован
Перешёл с sqlite на mongo, который очень удобно поднимать с помощью докера. Сам бекенд и сборка фронта теперь тоже живут в своих контейнерах. Прокачал тут свой докер скилл.

Пробуйте с друзьями ?️️️️

5 months, 3 weeks ago

? Alma Mater Folder ?

Ребята-физтехи организовались и сделали папку классных телеграм каналов. В которой я тоже есть ?.
Много ребят C-уровня: фаундер Skyeng, CEO Epic Growth, VP в Osome, CPO в Яндекс.Лавке, etc.

Рекомендую заценить! Кучу интересного: много мейкеров (кто пилит свои проекты), датасаенс конечно же, истории про создание настольных игр и многое другое на что можно залипнуть.

Чек ит аут

Telegram

Физтехи

Mikhail Kozyulin invites you to add the folder “Физтехи”, which includes 48 chats.

6 months, 3 weeks ago

? Как считать экспоненту с помощью умножения и сложения ?

```

const int L = 1 << 23; // == 2^23
const float a = L / std::log(2);
const float b = L * 127;

float fastExp(float x) {
x = a * x + b;
return std::bit_cast((int)x);
}

```

Выше упрощенная версия кода, который считает приблизительное значение экспоненты, который я недавно встретил на GitHub.

Я был супер удивлен, что тут умножение + сложение + преобразование типов, и всё — экспонента подсчитана.
В моей голове экспонента всегда была нетривиальной операцией, на которую требуется много тактов. Как же так, давайте разбираться.

Целые и дробные числа хранятся в битах по-разному
Числа в формате int хранятся ожидаемым образом, например, для числа 123:
123: int = 0000000000000000000000000 1111011

Числа в формате float хранятся в виде маски битов:
s eeeeeeee mmmmmmmmmmmmmmmmmmmmmmm

s — 1 бит знака. Определяет, положительное число или отрицательное.
e — 8 битов экспоненты. Показывают степень двойки.
m — 23 бита мантиссы. Хранят дробную часть числа.

Само число = (-1)^{s} * 2^{e} * 1.{m}

Например для нашего числа 123:

123: float = 0 00000110 11101100000000000000000

e = 00000110b = 6
m = 0.1110110b = 0.921875

Проверяем: 2^{e} x 1.{m} = 2^6 x 1.921875 = 123. Сходится!

Переводить представления из int в float и обратно несложно, и процессор умеет делать это очень эффективно.

Чтобы понять суть алгоритма, вместо e^{x} будем считать 2^{x}
Считаем быстро 2^{x} если x - int
Заметим, что если мы знаем двоичное представление x, то если мы его засунем в биты экспоненты float, то задача уже решена (e = x, m = 0). Это ключевое наблюдение для понимания алгоритма!

В int представлении все биты числа x у нас хранятся в правом конце числа. Чтобы сдвинуть их в область экспоненты, мы умножим наш int x на 2^23. Тем самым просто допишем 23 нуля справа.

В этих двух идеях и есть вся суть. Как перейти от 2^{x} к e^{х} в других деталях можно разобраться самому или заглянуть в оригинальную статью.

Cчитать экспоненту в десятичной системе мы (человеки) тоже можем с помощью одного умножения (wow!)
Например, чтобы оценить exp(36) мы можем переписать

exp(36) = 10^{36 * log10(e)} = 10^{15.634} ~ 10^16

Эта неожиданная похожесть алгоритмов, получается из-за того что научная запись чисел вроде 5.34e7 очень похожа на то, как хранятся float в компьютере.

P. S. На самом деле степень двойки в экспоненте float сдвинута на 127, чтобы мы могли записывать как большие числа, так и очень маленькие. Мы учитываем этот сдвиг, добавляя b = L * 127. Я убрал его, чтобы он не отвлекал от основной идеи.

P. P. S. Для тех кто всё понял: почему умножение на 2^32 в коде происходит в float, а не в int и что происходит с мантиссой в этом случае?

@lovesyuk

7 months ago

? Задачка по битовой магии ?

```

const int L = 1 << 23; // == 2^23
const float a = L / std::log(2);
const float b = L * 127;

float fast_math_function(float x) {
x = a * x + b;
return std::bit_cast((int)x);
}

```

Выше упрощенная версия кода который считает приблизительное значение некоторой стандартной математической функции. Из действий тут только умножение + сложение + преобразование типов. А результат получается супер нетривиальный!

Вчера я потратил значительное время чтобы полностью понять как это работает эта магия. Расскажу о ней в следующем посте.

А пока два вопроса:
- Что это за функция?
- Как и почему работает этот магический код?

@lovesyuk

11 months ago

*✍️ Небольшое обновление Chess Brain Scorer из предыдущего поста ✍️
Починил подсчёт рейтинга. При решение большого числа задач рейтинг считался неправильно и улетал в небеса. Удивительно, но баг в js библиотеке glicko2, которой уже 8 лет. Чтобы пофиксить пришлось самому написать оценку волатильности рейтинга.
* Добавил комментарии к истории, чтобы можно было что-то отмечать про своё состояние.

Check it out ?

We recommend to visit
HAYZON
HAYZON
6,053,581 @hayzonn

لا اله الا الله محمد رسول الله

👤 𝐅𝐨𝐮𝐧𝐝𝐞𝐫: @Tg_Syprion
🗓 ᴀᴅᴠᴇʀᴛɪsɪɴɢ: @SEO_Fam
Мои каналы: @mazzafam

Last updated 3 weeks, 1 day ago

Architec.Ton is a ecosystem on the TON chain with non-custodial wallet, swap, apps catalog and launchpad.

Main app: @architec_ton_bot
Our Chat: @architec_ton
EU Channel: @architecton_eu
Twitter: x.com/architec_ton
Support: @architecton_support

Last updated 2 weeks, 2 days ago

Канал для поиска исполнителей для разных задач и организации мини конкурсов

Last updated 1 month ago