Автоматизация кросс-постинга: боремся с трудностями API Facebook | 2026-05-23T14:28:22

Доделал в лучшем виде кросс-постинг из фейсбука на два моих сайта-блога [на которые почти никто не заходит] — beinginamerica точка com и raufaliev точка com. При публикации нового поста в фейсбуке по расписанию стартует механизм перевода поста на английский, разбор приложенных картинок, генерация описаний к ним, создание заголовка на основе текста поста и описания картинок, создание тегов на их же основе, запись поста в turso db — это облачная база, бесплатная до определенных лимитов, создание эмбеддингов через openai, запись в qdrant cloud — это тоже облачная база, но уже векторная, ну и загрузка изображений в wordpress по API, и публикация поста на английском и на русском по API.

Все бы хорошо, но из всех API самый дурацкий — у фейсбука. Во-первых, для страниц как у меня, переведенных в New Experience, нет возможности использовать почти все из этого API. Точнее, есть, но нужно долго доказывать фейсбуку, что это реально надо, показывая документы на стартап, демонстрируя приложение и т.д. Очевидно, им не хочется иметь дело с чем-то уносящим контент из их системы во вне. Кроме этого, токен, который дает доступ к последним сообщениям, относительно короткоживущий (возможно, несколько недель), и получать его заново нужно через браузер только. То есть, любая автоматика требует регулярного внимания, иначе она ломается.

Если протупил и вовремя не выгрузил последние посты через этот Facebook Graph API, они просто исчезают из списка последних и все, больше по API к ним не обратиться. Единственный способ — запросить выгрузку архива у фейсбука. Эта выгрузка тоже довольно дурацкая — там нужно много трансформаций делать и убирать лишнее. Например, в файле с постами, который я обрабатываю, там почему-то хранятся ссылки, которые я отправлял в комментариях без сопроводительного текста. А комментарии там идут в отдельном файле!

Чтобы назначить теги, пришлось решить отдельный челендж. Вот есть около 10000 постов за все время. Это большой кусок, и по нему теги построить нельзя, потому что он в контекстное окно LLM не помещается. А надо. Поэтому я делал так: скрипт берет случайные посты из 10000 в таком объеме, чтобы их суммарный размер был чуть меньше указанного лимита в токенах, и в конец этого блока добавляется промпт «сгенери мне наиболее частые теги, 30 штук» (промпт привожу упрощенно). В итоге я запустил это 10 раз и получил 10 наборов тегов по 30 штук, сгенерированных для разных срезов базы. Получилось 300 тегов, из которых конечно есть полные дубликаты, а есть синонимы и близкие по смыслу. Это все скармливается LLM, и получаем список тегов и иерархию тегов. Теперь у нас есть ограниченный набор тегов, которые максимально отражают 10000 постов. Так получилось, что за почти 20 лет на фейсбуке у меня расклад такой:

Тег Постов

==================================================

#Russia 3412

#Thoughts 3146

#Tech 3105

#Culture 2765

#Hobbies 2726

#AI 1603

#Science 1367

#Software 1358

#Travel 1298

#Learning 1138

#Society 1050

#Nature 958

#Education 915

#Business 902

#Art 894

#Programming 889

#Humor 840

#History 807

#Gadgets 750

#Moscow 713

#USA 614

#Cinema 567

#Webdev 493

#Music 476

#Sports 473

#Mindset 443

#Auto 400

#Books 386

ну и так далее. Этот список включает как теги из ограниченного списка, так и теги, которые LLM поставила материалу просто потому, что не нашла в ограниченном ничего подходящего.

Теги из ограниченного списка стали категориями на сайте. Остальные теги + эти стали просто тегами wordpress.

Поиск по картинкам. У меня было две идеи как его сделать. Первая — OpenCLIP. Это довольно просто, но требует хостинга модели где-нибудь. На своей машине легко, но каждый раз ее запускать неудобно, плюс я планировал переносить мигратор на дешевый сервер в амазон. В облачных моделях тоже нормально считать, но хоть немного за это надо платить, а это еще одна dependency. Но главное — что и без этого неплохо работает. Я с помощью OpenAI , который и так используется для перевода на английский, генерю описания к картинкам, и дальше по этим описаниям делаю embeddings с помощью large модели. Пока что все тесты на поиск проходят на ура. Особенно, когда на картинке есть текст, и большой вопрос разобрал бы ли его OpenCLIP.

В итоге:

1) вордпресс raufaliev точка com — бесплатный

2) вордпресс beinginamerica точка com — бесплатный

3) turso db где хранятся все посты — бесплатный

4) qdrant cloud где хранятся эмбеддинги — бесплатный

5) openai для перевода и описания картинок — не бесплатный, но недорогой (обработка постов за год потребовала 30 баксов).

Прикладываю два скриншота — как работает поиск по изображениям, и по текстам, а также дашборд мигратора.

Четыре чайника и умное кольцо: неожиданные подарки от роботов | 2026-05-22T19:21:14

Заказал чайник Breville. Сто баксов стоит. Да, можно было купить похожий за 30, но у меня все Breville, плюс чайник покупается на несколько лет. Прихожу домой — у двери стоит коробка мне по пояс. Удивило не сильно, потому что Amazon любит класть какую-то мелочь в дальний угол огромной коробки, им так проще. Но сомнения усилились после того, как я ее не поднял одной рукой. Заношу домой — а там четыре чайника.

Открываю Амазон, смотрю заказ — все правильно, один. Может, они за 100 баксов продают 4-pack? Нет, в описании один чайник. Жму на саппорт, отвечает робот. Выбираю пункт «привезли extra items». Робот говорит «наш фолт, оставьте себе». Ну ок, теперь у меня четыре чайника. Семья большая, по чайнику каждому.

У Нади есть умное кольцо Oura 4. Что-то часто приходится заряжать, говорит. Раньше подольше работало, говорит. Связываюсь с саппортом. Отвечает робот. Я открываю своего робота и прошу сформулировать хорошее письмо в саппорт. Их робот проникся, говорит, сейчас подключусь к вашему кольцу и все пойму. Подключился, понял. Говорит, ждите новое кольцо. Сегодня приехал невзрачный конвертик с кольцом внутри. Если бы не FedEx его душно было со спамом выбросить.

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

Ну раз так, попросил робота сделать иллюстрацию к посту.

Лисы и кролики: неожиданные зрители YouTube | 2026-05-12T13:26:59

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

Автоматизация документации больших данных: от анализа к действию | 2026-05-06T22:28:27

Интересно, а существует такой агент, который получает на вход таблицу (эксель), по размерам значительно превосходящую контекстное окно, и начинает ее документировать по сути. Вот есть несколько вкладок. Вот есть на вкладке 5 табличка в миллион строк и пять столбцов. Столбцы такие-то. Берем случайные данные из таблички, так, там вроде числа, а там — фамилии. Делаем предположение, что числа там везде — пишем код, который проверяет это предположение и заодно вычисляет мин/макс и набор уникальных значений. Так, значений немного, всего пять. Запишем. Проверяем теперь фамилии. Да, это просто строки, новый сэмплинг показал, что там фамилии правда. Тут формула. Смотрим куда она указывает. И т.д. А вот эта колонка — неясного назначения. Смотрим на данные — это какие-то числа от 0 до 1. Померяем среднее и разброс. Спросим у пользователя — может, даст какие комменты. Дал. Окалось это выданный kpi этого юзера из внешней системы. Запишем. И так далее. Получается документация. Дальше, когда есть документация, можно просить сделать какие-то операции со всем этим, поскольку LLM уже понимает плюс-минус назначение данных, и их связь, и может строить какие-то гипотезы на выявление outliers и их проверять.

Зачем вашему проекту надсмотрщик за качеством данных? | 2026-05-06T16:07:42

Почти в каждом проекте разработки есть выделенная команда автоматизации функционального тестирования, однако на удивление редко встречается аналогичный акцент на Data Quality. Неважно, идут ли данные из внешних интеграций, от пользователей или генерируются самой системой, часто они остаются без должного контроля просто потому, что почему-то никто не считает это важным, а потом борятся с последствиями — они накапливаются как снежный ком. Чем дольше длятся такие проблемы, тем труднее их устранить, что в итоге приводит к ситуации, когда народ просто смиряется с «непоправимым» состоянием базы. Уж насколько лучше выявлять эти проблемы в момент их возникновения, пока технический долг не стал непреодолимым, чем потом решать, как сделать так, чтобы из-за них ничего не падало;

По сути, надо внедрять постоянного «надсмотрщика» над базами данных всех типов, использующихся системой (реляционных, NoSQL, поисковых индексов или графовых БД) — по сути, это слой проверки качества данных поверх процессов. Конечно, должны быть четкие правила — что именно проверять и какими флагами отмечать конкретные аномалии.

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

Тут кстати еще переходит все в область детектирования аномалий (outlier detection). Машинное обучение и LLM для выявления тонких «плохих» паттернов, которые традиционные системы на основе правил могут пропустить.

Что вы об этом думаете? Внедрены ли подобные механизмы в ваши процессы?

Разочарование в «Project Hail Mary» | 2026-05-04T16:40:03

Сходили вчера на Project Hail Mary. Честно говоря, совсем не понравилось ни мне, ни Наде. Может, мы просто выросли из возраста, кому такие кино нравятся. Комикс-стайл. Сам инопланетянин, на мой взгляд, появился из экономии. Мне кажется, уровень начала 2000-х годов — тогда можно было бы сделать вот точно тоже самое. Тот же фильм Прибытие вспомните, где пыталить сделать что-то придумать необычное. Ну правда, это каменое уродство стоило 200М? Весь сюжет полон условностей и банальностей. За минуту они сделали так, что человек и инопланетянин начали прекрасно друг друга понимать с помощью какой-то программы, которую учитель естествознания создал за день. Мол, пусть астронавт и кусок камня сразу начинают болтать как приятели.. 5 километров железной цепи толщиной в указательный палец это где-то 10 тонн металла … это у них на корабле было столько?

Режиссеры стали успешными на поприще мультфильмов Лего-фильм и Осадки в виде фрикаделек, парой комедийных сериалов и Мачо и ботан. Я ожидал фильма в духе Интерстеллара или Марсианина, умного взрослого sci-fi, который не боится научных деталей, а получил детскую сказку с некрасивым инопланетянином.

Погуглил, оказалось, что прям до фига народу в восторге от этого, и кассу собирает.. Вероятно, люди соскучились по такому среди постиронии, сатиры, повесточек разных, Лантимоса и «Битвы за битвой». В детстве все смотрели «Полет навигатора» и «Короткое замыкание», ну вот взрослые ностальгируют по простому добру. Возможно, что это просто такой семейный фильм, для просмотра с детьми. Тогда может и норм.

ну ок, возвращаемся к просмотру второго сезона Succession. Он значительно лучше.

Разбор полетов: что скрыто внутри очистителя воздуха | 2026-05-03T15:00:42

Сломался очиститель воздуха, купил такой же б/у с новым картриджем по цене стоимость сменного картриджа+40 долл. Старый полностью разобрал, заодно извлек компоненты, которые можно переиспользовать, и понял, как оно работает. Прям как в школе 🙂

В общем, внутри:

— контроллер на ESP32-WROOM-32D. Но на плате сгорела часть, отвечающая за напряжения, поэтому в помойку.

— газовый (CO) сенсор MQ-7 (к сожалению, впаянный в плату, но можно выпаять). Правда, для корректной работы нужен цикл нагрева. Сначала 5В (60 сек) для очистки сенсора, затем 1.5В (90 сек) для измерения. Но тоже можно использовать где-нибудь.

— Plantower PMS9103M — высокоточный лазерный датчик концентрации взвешенных частиц в воздухе (PM1.0, PM2.5, PM10). Можно подключить к Arduino, есть специифкация.

— микроволновый датчик движения (радар), модель RCWL-0516. Можно подключить к Arduino, очень простой по интерфейсу. Видит на 5-7 метров вокруг себя 360 градусов.

— 200W мотор Snowfan YY225H310B. Подключить тоже довольно просто, только там напряжение 310V DC плюс 15V управляющее оборотами. Но зато больше ничего нет.

— датчик Холла (магнит)

Самое ценное — мотор. На eBay он стоит 100 долл. Правда, надо бы и его проверить сначала, не сгорел ли он.

Преобразование чата в семантический поиск вопрос-ответ | 2026-04-30T04:05:37

За вечер сделал простую утилитку, которая вытаскивает чат Natural Language Processing за полтора года — там 65 тысяч сообщений, и переводит его в пары вопрос-ответ, по которым есть семантический поиск. При клике на результат поиска (слева) открывается диалог в чате. Подсвечиваются те сообщения, которые являются ответами на вопрос. Ну и сверху подсвечивается вопрос а оригинальной формулировке.

Как работает: система предполагает, что люди в основном делают reply to на сообщения, находящиеся относительно близко в прошлом. Если на одно сообщение делается несколько reply-to, то наверняка оно полезное, и зацепило в чате других. Система берет сообщения, начиная с того, на которое многие отвечали, и заканчивая последним в цепочке reply-to — и среди таких берет те, которые имеют минимум 3 reply-to к оригинальному вопросу. То есть, по сути, она вырезает из чата кусок, начинающийся популярным вопросом так, что после нижнего отреза скорее всего уже идет нерелевантное. Такие блоки могут накладываться друг на друга — например, если кто-то спросил, пока другие отвечали на что-то еще.

То есть, если пользователь А спросил какая погода, и ему ответили «хорошая», «плохая», «дождь», и еще было пять сообщений без reply-to, а потом кто-то ответил на «дождь» вопросом «почему дождь», и на этот вопрос ответили еще пятеро, то в систему попадет первый вопрос про погоду — кусок будет заканчиваться 13 сообщениями.

Дальше эти куски суммаризуются в вопрос-ответ.

Получается прикольно.

П. С. На скриншоте поисковый запрос не имеет отношения к результату поиска, потому что я сдуру сделал скриншот, когда запрос ещё поменял, а отправить ещё не нажал

Иллюзия скрытой линии | 2026-04-29T17:56:08

Пытаюсь понять, это у меня одного так глаза работают или нет 🙂 если смотреть на любое место, кроме слова «Омурбекова», то боковым зрением четко выделяется линия, показанная на втором скриншоте красным цветом (но конечно, она белая). Как только возвращаешь глаза на нее, линии нет. То есть, она видна только боковым зрением. Делитесь, как у вас 🙂