Эссе о разработке игр, мышлении и книгах

Симуляция общественного мнения в игре

Демонстрация технического прототипа манипуляции общественным мнением и рассказ как он работает.

Продолжаю участвовать в школе World Builders. За последний месяц набросал технический прототип механик манипуляции общественным мнением.

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

Всё интересное можно найти в заглавном видео, ниже текстом пройдусь по основным моментам.

Далее

Чистим результаты опроса игроков в стратегии

Опрос был нацелен на любителей стратегических игр, удалось попасть достаточно точно.

Опрос был нацелен на любителей стратегических игр, удалось попасть достаточно точно.

Недавно просил вас пройти опрос о стратегических играх.

Спасибо всем, кто уделил этому время. Пора делиться результатами.

Было заполнено 363 анкеты. После нормализации и очистки данных осталось 304.

Будет два поста:

  • Этот — о методике сбора и обработки данных, их очистке. Будут пошарены очищенные данные.
  • Следующий — об анализе результатов.

Далее

Блог переехал на новый движок

Документальная журналистика: процесс перевозки контента на новый движок (c) ChatGPT

Документальная журналистика: процесс перевозки контента на новый движок (c) ChatGPT

Зима не успела закончиться, а я уже выполнил один из планов на год :-D

Причём не только перевёл блог на новый движок, но и сам этот движок написал и заопенсорсил: https://github.com/Tiendil/brigid

Что будет интересным для вас.

На индексной странице появился крутой фильтр постов по тегам. Вдохновлённый feeds.fun. Попробуйте поиграть с ним. Пока он доступен только для больших экранов — на мобилках не увидите — поправлю в будущем.

Посты должны стать читаемее, сайт — удобнее, красивее, быстрее.

Никаких cookies и корпоративных трекеров. Как трекер пока использую облачный plausible.io позже подниму свой инстанс.

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

Исходники постов также открыты и лежат в отдельном репозитории: https://github.com/Tiendil/tiendil-org-content

Далее

Feeds Fun — читалка новостей с тегами и ChatGPT

Выглядит неприглядно, но это временно.

Выглядит неприглядно, но это временно.

Задержался с постом, а между тем читалка уже работает и экономит мне 4-8 часов в неделю.

Для нетерпеливых и ленивых:

  • Репозиторий: github.com/tiendil/feeds.fun
  • Сайт: feeds.fun — заходите, подписывайтесь на подготовленные коллекции новостей, экспериментируйте.

Суть:

  • Читалка автоматически определяет теги для каждой новости. Тут очень кстати пришлась ChatGPT.
  • Вы создаёте правила в духе elon-musk & twitter => score -100500, procedural-content-generation & hentai => score +13.
  • В интерфейсе сортируете новости по интересности и читаете только самые-самые именно для вас.

Если есть просьбы по фичам — создавайте issue, постараюсь воплощать. Хочется, чтобы штука пошла в народ.

Далее

Pydicates: предикаты для Python

Опубликовал небольшую библиотеку для работы с предикатами в Python: github, pypi. Как всегда, под BSD-3.

Позволяет конструировать функции для отложенных вычислений. Например, описывать такие условия: (OwnedBy('alex') | OwnedBy('alice')) & HasTag('game-design').

Делал для себя, так как уже несколько раз в пет-проектах писал костыли для этого дела. Решил сделать один раз правильно и больше не тратить на это время.

Минимальный пример:

from pydicates import Predicate, common


def HasTag(tag):
    return Predicate('has_tag', tag)


def has_tag(context, tag, document):
    return tag in document['tags']


common.register('has_tag', has_tag)

document = {'tags': ('a', 'b', 'c', 'd')}

assert common(HasTag('a') & HasTag('c'), document)
assert not common(HasTag('a') & HasTag('e'), document)
assert common(HasTag('a') & ~HasTag('e'), document)
assert common(HasTag('a') & (HasTag('e') | HasTag('d')), document)

Больше примеров можно найти в репозитории ./examples

API описано чуть подробнее в ./examples/documents_check.py

Больше примеров можно найти в тестах.