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

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

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

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

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

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

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

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

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

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

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

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

Далее

Два примера overengineering из FastAPI

DALL-E: Vrubel painting: "demon of overengineering in software development"

DALL-E: Vrubel painting: "demon of overengineering in software development"

Решил по-хитрому использовать contextvars в FastAPI и с первого захода налетел на странные архитектурные решения, которые, откровенно говоря, ограничивают и мешают делать красиво :-(

Далее

Ищу людей в команду

Мы хайрим (Python backend, QA automation, Android) и релоцируем (Польша, Кипр, и может быть ещё куда-то).

Делаем платформу для обработки платежей для стартапов Palta (включая Flo, в будущем). То есть много сложной работы с повышенными требованиями к качеству.

Попутно надо будет писать RFC (Requests For Comments), тесты (много), ревьювить код и, путём культурных дискуссий, передавать свои знания коллегам.

Пару месяцев как начали. Работаем удалённо. Ищем сеньоров и выше.

Технологии: AWS, Lambda, Aurora (PostgreSQL), последний поддерживаемый облаками Python.

Работать надо будет со мной в команде, со всеми плюсами и минусами этого :-DDD

Также, пока не ищем, но, надеюсь, будем: сильного фронтендера, технического-писателя-специалиста-по-dev-relations.

Ссылки с вакансиями:

https://boards.greenhouse.io/paltaltd/jobs/4467423004 https://boards.greenhouse.io/paltaltd/jobs/4383116004 https://boards.greenhouse.io/paltaltd/jobs/4459360004

Если нужны подробности, пишите в личку или в комментарии.

Если будете общаться с нашими рекрутёрами, упомяните где увидели вакансии :-)

Почему мне не нравится Rust

Во второй раз перелистал документацию Rust, прошлый заход случился лет 5 назад.

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

И похоже я понял, что меня в нём задевает.

Далее

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

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