Warning: Undefined array key 0 in /var/www/tgoop/function.php on line 65

Warning: Trying to access array offset on value of type null in /var/www/tgoop/function.php on line 65
492 - Telegram Web
Telegram Web
В декабре канал превратился в мой инстаграм. Немножко осталось.

В этот раз фотки из Альп. Катался на сноуборде. Сейчас в Мюнхене уже. Зовите сегодня-завтра на пивас, если вы вдруг здесь
🍾9👍1
С нг! Этот год был бодрее предыдущего, как по мне. Следующий будет еще лучше. Я спать. До встречи в 2024
👍96😭3
Ща подрублю тестовый стрим в телеге мин на 30. Хочу потестить качество, картинку, звук. Может че-нить обсудим заодно. Залетайте.

Чат трансляции можем организовать прям под этим сообщением.
Подрубаю стрим на часок. Буду пилить AI ассистента для геймеров на ChatGPT. Залетайте.

Чат трансляции под этим сообщением.
ChatGPT Builder

Как заточить ChatGPT под свои нужды? Этот вопрос возник на вчерашнем стриме, когда я начал пилить себе AI ассистента для игр.

Оказалось, что в разделе Explore -> ChatGPT Bulder появилась возможность создавать кастомные версии GPT. Процесс устроен как диалог, где вас спрашивают: “должен ли бот задавать уточняющие вопросы или угадывать контекст?”, “должен ли он общаться на русском или английском?“ и тд. На выходе создается набор инструкций, который, по всей видимости, просто подается в каждом промпте.

Прелесть подхода в том, что это не файнтюнинг, вам не нужно собирать датасет и ждать пока модель обучится. Достаточно бодрый инструмент для первого подхода к кастомизации ChatGPT под свои задачи — лойс.
👍11🔥1
Мои вкусы очень специфичны

Сегодня смотрел стрим, где чувак писал игру на 1С. Это настолько плохо, что даже хорошо.

Пришла мысль написать и обучить нейросеть для распознавания фотографий рукописных цифр на чистом SQL.

Делать я этого конечно же не буду. Хотя кто его знает, как жизнь повернется
😁9🥴1
Че го вечерний стрим на часок? Катаю в дотку, режим чемпионов — абилити драфт.

Чат трансляции под этим сообщением
👍4
Сегодня опять будет стримчанский. Буду смотреть ютуб о том, как делать ютуб. Анализировать конкурентов и ниши. После этого мб поиграем или покодим.

Чат трансляции под этим сообщением.
5
Дмитрий Савостьянов Вещает
ChatGPT Builder Как заточить ChatGPT под свои нужды? Этот вопрос возник на вчерашнем стриме, когда я начал пилить себе AI ассистента для игр. Оказалось, что в разделе Explore -> ChatGPT Bulder появилась возможность создавать кастомные версии GPT. Процесс…
GPT Store

Недавно я рассказывал, как заточить ChatGPT под свои задачи с помощью Builder. Теперь во вкладке Explore GPTs появился доступ к кастомизациям других пользователей.

Research Assistant, Code GPT, Math Tutor, Logo Creator и еще тысячи различных ассистентов. Даже есть Персональный Астролог для знатоков ретроградного Меркурия!

Лично я вчера весь вечер переписывался с GPT заточенным под написание сценариев на YouTube.
👍102
GPT намекает, что пора отдохнуть.
🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
"Сейчас как обучим нейросетку генерировать анимации, будет классно!" — говорили они.
😁5🎉4
Как реализован dict в интерпретаторе Python

Словарь (ассоциативный массив / хэш-таблица / dict) — это такая замечательная структура данных в Python, которая поддерживает обращение, вставку и удаление в среднем за константное время O(1).

Возьмем в качестве примера словарь, который отображает реальное имя человека в его игровой никнейм.

nickname = {
"Gena": "Машина",
"Ivan": 12,
"Vazgen": "Gorniy Orel 228"
}


Визуально очень похоже на JSON. Ключами выступают "Gena", "Ivan", значениями "Машина", 12 и тд. Причем последние могут быть чем угодно: объектами, числами, строками, списками, словарями.

Ключи же должны быть хэшируемыми типами данных — такими, у которых определен метод __hash__. Обычно эти объекты являются неизменяемыми. Т.е. tuple может выступать в качестве ключа, а list — нет. Хотя в пользовательских классах можно наворотить все что угодно.

Что происходит на уровне интерпретатора CPython при добавлении нового ключа? Например, мы выполнили строчку nickname["Dima"] = "Арчибальд Шпицен-Дроссель".

На уровне C есть просто два массива фиксированной длины: dk_indices — хранит индексы и dk_entries — хранит пары ключ-значение, плюс несколько вспомогательных полей с размером самого словаря, типами данных и тд.

При вставке для объекта "Dima" вызывается функция PyObject_Hash, которая залезает в PyTypeObject — структуру с основными свойствами объекта (в Python все есть объект) и находит там хэш-функцию unicode_hash (строки из примера под капотом unicode). Применяя ее к "Dima", получает некоторое большое по модулю число. Кстати, сложность хэширования O(k), но мы предполагаем, что длина ключей в среднем сильно меньше размера словаря k << n.

Чтобы найти слот для hash("Dima") в dk_indices, берется остаток от деления на длину dk_indices. Если соответствующая ячейка в массиве пуста, то в dk_entries добавляется пара ("Dima", "Арчибальд Шпицен-Дроссель"). Если же ячейка занята, это означает что произошла коллизия. В простейшем случае можно было бы хранить в dk_entries не просто ключ-значение, а связный список из ключей и значений. Тогда при коллизиях мы бы просто делали append в конец списка.

Но в CPython используется алгоритм сдвига с пертурбацией. В случае коллизии он вычисляет новый индекс по формуле
    perturb >>= PERTURB_SHIFT;
j = (5*j) + 1 + perturb;
use j % 2**i as the next table index;

И повторяет процедуру до тех пор, пока не найдет свободную ячейку.

Такие дела. Все вышеперечисленное не претендует на истину в последней инстанции. Там еще есть PyDictKeyEntry vs PyDictUnicodeEntry, 6000 строк реализации dictobject.c и куча прочих нюансов. Но основная идея такая, если я нигде не наврал. А если наврал, пишите замечания в комментариях!
🔥7🤓3
2025/07/08 21:02:32
Back to Top
HTML Embed Code: