Грязные данные в CRM — это всегда дубли, ошибки в рассылках и «кривая» аналитика. В статье рассказываю, как я реализовал API для автоматической нормализации телефонов, email и имен на FastAPI, и почему простая проверка регулярками не заменяет систему оценки качества данных (QC).
Попробовать Demo APIПривет, Хабр!
Меня зовут Артём, я фаундер Leadl.ai. Мы строим AI-агента для поиска b2b-клиентов, и одна из его ключевых задач это мониторинг чатов и различных источников.
Звучит просто, пока не сталкиваешься с масштабом.
У нас в пуле 20000+ чатов в 15 источниках. Суммарно около 1000 000 000 сообщений в сутки. Из них реально полезных (запросы на услуги, поиск подрядчиков, вакансии) от силы 3-5%. Остальное: флуд, криптоспам, «доброе утро», мемы и бесконечные стикеры.
Задача: вытащить эти 3-5% качественных сообщений. Первой мыслью было отдать всё на откуп большой LLM типа GPT-4o. Посчитали. Среднее сообщение 50 токенов. 100 000 сообщений 50 токенов/сообщение ($10 / 1M токенов) = $50 в день только на input. Добавьте сюда output и prompt — и счёт легко перевалит за $100-150/день или $3000-4500/месяц. Для стартапа это путь в никуда.
Нам нужен был pipeline, который бы отсеивал мусор на ранних этапах, чтобы до дорогого LLM-скоринга доходило не более 5-10% от всего потока. Вот как мы его построили, через какие грабли прошли и что из этого вышло.
Читать далееКак меняется JavaScript?
JavaScript уникален тем, что работает во всех браузерах. У него нет какого-то одного «владельца», поэтому нельзя внести изолированное изменение и ждать, что оно будет применено везде. Эволюция происходит через TC39 — Технический комитет, отвечающий за ECMAScript.
Предложения должны пройти последовательность этапов развития:
• Этап 0: идея.
• Этап 1: принято пространство задач.
• Этап 2: выбрана архитектура драфта, но работа продолжится.
• Этап 2.7: предложение одобрено в принципе; ожидает тестирования и обратной связи.
• Этап 3: реализация и обратная связь.
• Этап 4: предложение стандартизовано.
В 2018 году, когда я впервые изучал Temporal, он находился на Этапе 1. Комитет TC39 был убеждён, что проблема реальна. Это было радикальное предложение по добавлению в JavaScript новой библиотеки дат и времени. Она должна была:
• Стать заменой Date.
• Добавить новые типы DateTime (вместо единого API).
• Стать неизменяемой.
• Добавить поддержку часовых поясов и календаря.
Но как мы к этому пришли? Почему Date вызывает столько проблем? Чтобы ответить на эти вопросы, нужно вернуться назад.
Читать далееИнтеграционные тесты любят все на словах, пока не доходит до окружения, зависимостей и плясок с подготовкой стенда. В статье разберем более практичный подход: как писать изолированные интеграционные тесты с Testcontainers, не превращая их в хрупкую конструкцию из моков и костылей. На примере PostgreSQL и .NET посмотрим, как собрать тестовую среду, которая ведет себя достаточно близко к реальности, но при этом остается воспроизводимой и управляемой. Тема не новая, а боль до сих пор вполне живая — так что давайте разбираться.
Разобрать подходApple неожиданно выкатилa MacBook Neo — ноутбук всего за шесть сотен долларов. Само по себе устройство не выглядит чем-то экзотическим: компактный корпус, фирменный чип, обычный набор возможностей. Но именно цена сразу привлекла внимание. Макбуков за такие деньги раньше просто не было, поэтому новинка быстро стала одной из самых обсуждаемых тем в индустрии. Последствия для рынка могут быть весьма неожиданными. Попробуем разобраться, почему эта модель вызвала столько внимания и что она способна изменить.
Читать далееПривет, Хабр!
Меня зовут Антон Леонтьев, я старший разработчик в команде ядра редакторов МойОфис. Мы создаём офисные приложения, которыми ежедневно пользуются более 12 500 организаций, и совместное редактирование — одна из ключевых возможностей наших продуктов.
И знаете, что самое обидное в этой теме? За 35 лет исследований были опубликованы сотни научных работ. Google Docs работает с 2006 года. У Figma, Notion и Linear свои реализации. Казалось бы, задача давно решена, но стоит копнуть глубже, и становится понятно: универсального решения нет.
В Google Drive и Dropbox до сих пор всплывают баги с одновременным перемещением папок. В Notion при параллельном редактировании одного и того же абзаца можно потерять часть изменений. Даже Yjs — самая популярная CRDT-библиотека — не хранит полную историю документа в привычном для нас виде.
В этой статье разберём теорию, узнаем, какие проблемы решают Operational Transformation (OT) и Conflict-free Replicated Data Types (CRDT), на каких математических идеях они основаны, чем отличаются архитектурно и какие компромиссы неизбежно возникают в каждом подходе.
Интересно узнать, почему даже Google не смог сделать идеальное решение? Детали под катом.
Читать далееКомпании спускают миллиарды на хайповые инструменты разработки, надеясь купить «волшебную таблетку», но вместо неё получают лишь неконтролируемый хаос в процессах.
Мы взяли секундомер и устроили жёсткий тест четырём нашим производственным направлениям: мобилке на Native и Flutter, аналитике и QA. Дали командам доступ в Cursor и Claude Code, чтобы вытащить на свет реальные цифры. По итогу — разрыв между цифрами и действительностью оказался шокирующим.
Читать далееМы предлагаем новую физическую гипотезу: в иерархических системах со вложенной самореферентной рекурсией может существовать дополнительный энергетический вклад, не сводимый к обычной попарной энергии связи. Этот вклад, обозначаемый E_rec, зависит от глубины рекурсии, межуровневой когерентности и внутренней меры связности системы.
Читать далееНедавно в MWS Cloud Platform появилась поддержка Egress NAT. В статье разберём архитектуру распределённой системы трансляции адресов, почему мы выделяем порты блоками и как обеспечиваем корректную передачу обратного трафика в условиях ECMP-маршрутизации. Плюс как это всё переживает рестарты, потерю событий и рассинхронизацию и всё равно сходится к правильному состоянию.
Читать далееВ этой статье я хочу поделиться личным опытом эволюции UI-тестов в AQA-проекте. Речь пойдет о том, как из типичных простыней с assertEquals(), множественными прямыми вызовами методов страницы и деталями реализации можно прийти к более выразительному и читаемому подходу - внутреннему DSL поверх Page Object.
Автоматизация рабочих процессов была горячей темой примерно всегда. Как только появляется возможность решать какую-либо задачу более эффективным способом, сразу же возникает идея об оптимизации этого самого, казалось бы, уже совершенного способа.
Серверная виртуализация, как и zVirt в частности, не стала исключением среди других рабочих процессов. Пользователи желают решать задачи быстрее, операторы хотят уменьшать количество шагов и ручных операций, время доставки виртуальной машины потребителю — основная функция серверной виртуализации — должно уменьшаться. И снижение влияния человеческого фактора — благодатная почва для оптимизации.
Меня зовут Михаил Фучко, я архитектор SDN и технический менеджер Terraform-провайдера виртуализации zVirt. В этой серии статей я расскажу о пути, который проделала наша команда в процессе разработки собственного провайдера инфраструктуры для Terraform. Поговорим об успехах и трудностях, о том, всегда ли можно положиться на решение с открытым исходным кодом, и о том, как запущенные десять лет назад «бумеранги» возвращаются, но не тем, кто их запустил.
Это первая часть цикла статей. В ней мы определимся с объектом автоматизации, обсудим ее основные концептуальные подходы и попытаемся сформировать глобальное видение результата. Для новичков в применении Ansible и Terraform данная статья может служить еще и небольшим введением в тематику. В последующих статьях сосредоточимся на инфраструктуре провайдера, поддержке ресурсов и их жизненных циклов и т.п.
Читать далееПривет, Хабр! Меня зовут Кияшева Екатерина. В начале марта я активно занялась поиском работы после творческого отпуска и сама столкнулась с радикальным изменением рынка:
- Нет откликов: открыть резюме на пару дней больше не работает.
- Фильтрация на hh.ru, на мой взгляд, сильно забагована. Автопоиск сбрасывает часть фильтров. В рассылку попадают вообще не интересные вакансии, а интересные не попадают. В чате поддержки отвечает бот, так что сообщить девелоперу о баге невозможно.
- Статистика по вакансиям показывает резкий пик откликов с первого дня публикации. До поздних откликов рекрутеры похоже не добираются.
Все это вгоняет в уныние: рассылать резюме всем подряд не хочется, а держать руку на пульсе в таких условиях утомительно. Я написала ИИ-помощника, который сам мониторит сайт по расписанию, выбирает только интересные вакансии, анализирует компанию и вакансию, сопоставляет требования вакансии со скиллами в резюме и приносит результаты в личный чат. Таким образом, о вакансиях можно узнавать своевременно, рассматривать их с первичной аналитикой на руках.
Читать далееGit стал таким же привычным явлением, как электричество в розетке. Его можно использовать совершенно по-разному — он либо сделает вашу жизнь удобнее, либо причинит боль и доставит кучу проблем.
Привет, меня зовут Макс Мартынов и я ведущий разработчик в Атвинте. В этой статье расскажу про наш подход к Git workflow, в котором баги одной фичи не блокируют деплой другой. Существует множество подходов и наш, конечно, не единственно верный.
Читать далееКаждый год мы проводим исследования рынка труда, в том числе, конечно, сферы ИТ. И делимся результатами с Хабром — у нас в блоге можно посмотреть предыдущие, за 2023 и 2024 годы. А сегодня предлагаем читателям свежие сводки.
Мы разобрались с тенденциями рынка ИТ-вакансий, провели параллели с общей ситуацией на рынке труда в РФ, выяснили, что происходит с удалёнкой и какие навыки остаются наиболее востребованными в ИТ, как изменились зарплаты и у кого они продолжают расти, кто получает больше ожидаемого, а кому приходится пересматривать запросы.
Отдельно посмотрели на ситуацию глазами работодателей: почему кадровый голод сохраняется даже при перенасыщенности рынка, с какими трудностями сталкивается бизнес, планируют ли компании расширять команды и чего ждать от отрасли в ближайшем будущем.
Узнать подробностиУ любой большой системы есть неписаные правила. Формально они нигде не закреплены, но именно по ним в итоге и живет организация.
В прошлой статье я рассказал о своем 12-летнем опыте работы в системе ФНС и о том, как на определенном этапе столкнулся с характерной для больших госорганизаций установкой: «прикинуться дурачком и не высовываться», что бы с тебя не спросили и не поручили лишней работы.
«Не высовываться» это очень точная управленческая формула. В ней зашито все и отношение к инициативе, к ответственности, к карьерному движению и вообще к человеку внутри большой структуры. Не бери на себя лишнего. Не создавай напряжения и не будь заметнее, чем от тебя требуется.
Это вполне рабочая модель поведения, которая внутри системы действительно поощряется. Причем, как справедливо заметили в комментариях к предыдущей статье, касается это не только ФНС.
И моя проблема была не в том, что я этого не замечал. Просто довольно долго я считал, что
Читать далееМожет ли фронтальная панель сервера повлиять на его охлаждение? Такой вопрос обязательно возникает при проектировании серверов, особенно в системах с высокой плотностью размещения и повышенной температурой входного воздуха.
Чтобы проверить это на практике, мы провели стресс-тест сервера OpenYard RS201I на базе процессора Intel третьего поколения и сравнили его работу в двух сценариях ― с установленным безелем и без него.
Узнать большеСледуя традиции древних видящих, статьи КЭИ (Клуб Электронных Игр) из журнала ТМ, фактически, содержали две части. «Обучение для правой стороны» давалось в виде повести Михаила Пухова «Путь к Земле» и серии «космических программ», позволявшим вместе с героями повести совершить перелёт с Луны на Землю.
«Обучение для левой стороны» постепенно раскрывало возможности ПМК в состоянии «повышенного осознания» - во время использования «недокументированнных операций».
Находки исследователей советских ПМК были не менее впечатляющими, чем открытия шаманов древней Мексики. Поэтому, с моей точки зрения, они вполне заслуживают чести называться советскими видящими.
Настойчивые и неуклонные исследования советских видящих привели их к открытию «электронного океана». Вот цитата из того памятного номера:
Читать далееКогда у вас один‑два сервиса и несколько интеграций, внешний API легко держать под контролем. Но если их десятки и каждый хочет выставиться наружу, приходится придумывать свой велосипед.
Меня зовут Юрий Коберман, я технический продакт в Точка Банк. Мы в команде несколько раз меняли систему работы с API. Начинали с одной команды, которая писала всё вручную, и постепенно пришли к универсальному инструменту, с помощью которого сервисы могут выходить наружу самостоятельно без очереди и потери качества. Подробности — в этой статье.
Читать далееВсем привет, я Артем Герасимов, владелец продукта SimpleOne SDLC. Чуть больше года назад я пришел в компанию в момент, когда продукт только прошел стадию MVP, которую мы делали быстро, чтобы проверить гипотезу. Гипотеза подтвердилась, появились клиенты, но вместе с ними пришел беспорядок: запросы терялись между почтой и чатами, сроки срывались, процессы перестали работать.
В этой статье расскажу, как мы за год превратили стартап-проект в управляемый продукт — с конкретными решениями, ошибками и чек-листом действий, которые можно применить в любой команде разработки.
Читать далееИтак, Вы – руководитель разработки (главный инженер, архитектор и т.п.) большой системы. После здравых размышлений Вы (обосновано) выбираете для системы микросервисную архитектуру. Далее Вы (и опять обоснованно) разделяете систему на микросервисы, продумываете API, рисуете стрелочки и диаграммы и можно программировать.
Можно? Наверное, но лучше сначала рассмотреть принципы владения данными, обеспечения передачи данных потребителям, поддержки версионирования контрактов данных.
В этой статье мы рассматриваем два принципа: «Данными владеет только владелец» и «Локальность данных». Понимание принципов, понимание возможностей проектирования доступов к данным позволит Вам спроектировать устойчивые и надежные системы.
Читать далее