Python Pipes

Я всегда хотел иметь способ создавать конвейеры обработки данных в Python, используя пайпы, что-то вроде range(10) | F(is_odd) | P(lambda x: x * 2), вместо функций, генераторов, map’ов и циклов. Так что я попробовал… Идея довольно простая: давайте создадим класс с реализованными операторами | и ||, то есть пайпами. def __or__(self, other): other.source = self return other def __ror__(self, other): self.source = ( iter(other) if not isinstance(other, (str, bytes)) and hasattr(other, "__iter__") else other ) return self Сложность заключалась в реализации метода __next__, так как я хотел, чтобы это была ленивое вычисление. После нескольких попыток и ошибок я пришёл к довольно простому подходу: обёрточный класс, реализующий пайп, вызывает next у своего источника, добавленного через | или ||, применяет трансформацию и затем возвращает результат этой трансформации. ...

29 ноября 2024 г. · 3 минуты · Anton Golubtsov

Демо экспериментальной силы: Визуализация частотного и байесовского подходов

Простая визуализация различий между частотным и байесовским подходами к определению статистической мощности, показывающая, как размер эффекта, шум (стандартное отклонение) и объем выборки влияют на результаты.

31 октября 2024 г. · 1 минута · Anton Golubtsov

Рекомендательная система на основе HNSW и экспоненциальных скользящих средних

Введение Я читал оригинальную статью о “Hierarchical Navigable Small Worlds (HNSW)” https://arxiv.org/abs/1603.09320, которая оказалась гораздо легче для понимания, чем все те видео на YouTube, которые я пытался посмотреть, и статьи, которые читал. HNSW — это вероятностная структура данных для поиска соседей в многомерном пространстве. Одно из практических применений HNSW — это поиск семантически близких объектов. Прочтение этой статьи и некоторые другие активности заставили меня задуматься, смогу ли я быстро реализовать рекомендательную систему, которая объединяет три вещи: HNSW, скользящие средние и случайность. ...

11 октября 2024 г. · 7 минут · Anton Golubtsov

Скользящие средние

Меня заинтересовало использование усреднённых векторных эмбеддингов для целей рекомендаций, и затем я задумался, а не попробовать ли вместо усреднения использовать другие метрики, такие как медиана или верхние процентили, чтобы сфокусироваться на более частых сценариях и уменьшить влияние выбросов. А затем возник вопрос: если представить, что вы хотите использовать это в продакшене, как можно вычислить усреднённые эмбеддинги для миллионов пользователей с мгновенными обновлениями и без пакетной обработки данных оффлайн? Поэтому я написал несколько тестов для следующих случаев: ...

9 октября 2024 г. · 3 минуты · Anton Golubtsov

Алгоритмы шардинга (разделения) данных

Я раньше работал рядом с невероятно умными людьми, которые ежедневно занимались такими вещами, как шардинг данных. У них я многому научился по этой теме. Позже я перешёл на другую роль, где эти знания не требовались, и со временем они забылись. Здесь я пытаюсь восстановить для себя эти давно забытые знания. Введение Шардинг — это процесс назначения элемента конкретному шарду (разделу) — меньшему фрагменту данных из большой базы данных или другого сервиса. Основная идея заключается в том, что мы можем распределить данные или сервис по нескольким местоположениям, обрабатывать большие объёмы данных, справляться с большим количеством запросов, а с репликацией мы можем масштабироваться ещё больше и повысить отказоустойчивость системы. Однако нам нужно иметь чёткие правила, как назначать разделы (шарды), чтобы корректно перенаправлять запросы в нужное место. ...

30 сентября 2024 г. · 5 минут · Anton Golubtsov

Вопрос на собеседовании: библиотека парсинга логов

Один из вопросов, которые я часто задаю на собеседованиях, - это разработка библиотеки обработки логов: Вам нужно написать библиотеку для обработки логов в следующем формате: метка_времени<TAB>сообщение Библиотека будет передана другой команде для дальнейшей поддержки и улучшений, поэтому поддерживаемость и расширяемость являются самыми важными требованиями. Библиотека должна поддерживать следующие операции “из коробки”: фильтрация подсчет гистограммы Первоначальная версия также включала некоторые языковые и фоновые особенности, которые я никогда не включаю в свою оценку, потому что считаю, что они ставят кандидата в положение, когда ему нужно угадать мои ожидания. ...

29 сентября 2024 г. · 4 минуты · Anton Golubtsov

Вопрос на собеседовании: Оптимизация затрат на чтение с диска

Один из вопросов, который я действительно люблю задавать во время кодовых собеседований, звучит так: Дан непрерывный поток слов, словарь на диске и стоимость чтения с диска, создайте потоковый процессор, который возвращает true, когда слово существует в словаре, при этом минимизируя затраты на чтение с диска. Пример: Словарь: {Собака, Кошка, Птица, Лев, ...} Входные данные: [Собака, Кошка, Агхд, ...] Выходные данные: [True, True, False, ...] Выходные данные true, true, false, потому что “собака” и “кошка” существуют в словаре слов, а “Агхд” не считается словом. ...

24 сентября 2024 г. · 3 минуты · Anton Golubtsov

Написание пользовательских историй и требований

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

18 сентября 2024 г. · 4 минуты · Anton Golubtsov

Политики вытеснения кэша: LRU vs Random vs p2c

Каждое интервью я провожу для старших инженеров-программистов в Amazon. В этих интервью я задаю более-менее одни и те же вопросы. Один из них предполагает добавление логики кэширования для улучшения результатов. Я заметил, что кандидаты часто совершают две ошибки, которые мешают им выделиться как профессионалам: Они не знают или не обсуждают условия, при которых кэш работает наилучшим образом. В частности, как распределение частоты запросов влияет на производительность кэша. Они не знают стандартную библиотеку выбранного ими языка программирования. В этой статье мы попытаемся разобраться с этими проблемами. ...

15 сентября 2024 г. · 7 минут · Anton Golubtsov

Стройная разработка, клиенты и как это связано с культурой письма в Amazon

Amazon известен своей культурой письма, с которой я познакомился позже в своей карьере. Чем больше я писал, тем легче было применять подобный подход к другим аспектам разработки программного обеспечения. Введение Когда я пришел в Amazon, я перешел из компании с совершенно другой культурой, особенно в плане письма и процессов разработки. Изначально мое отношение к ориентированной на письмо культуре Amazon было скептическим. Однако на протяжении следующих семи лет я постепенно принял и совершенствовал стиль письма Amazon. ...

5 марта 2024 г. · 3 минуты · Anton Golubtsov