Интересное что-то
517 subscribers
2.72K photos
253 videos
139 files
4.52K links
Материалы и мысли, понадерганные отовсюду
Блог: https://t.iss.one/asisakov_channel
Чат: https://t.iss.one/youknowds_chat
Download Telegram
Forwarded from Женя Янченко
«Твой API вообще не RESTful»

Такую претензию один разработчик озвучил аналитику. Причиной возмущения были следующие решения:
🟣 использование POST вместо GET для получения данных
🟣 использование глагола в URL, типа /approve

Ирония ситуации была в том, что в проекте оба эти «нарушения» RESTful подхода уже не раз встречались, а разработчик и аналитик оба только недавно пришли в команду.

Давайте разберемся, насколько претензии были правомерны.

🤓 Вообще REST создавался не для сложных бизнес-систем с кучей операций, а как архитектурный стиль (то есть набор правил) для гипермедийных систем типа Википедии.

Когда мы пытаемся уложить логику бизнес-операций и взаимодействия микросервисов в чистый REST, то неизбежно сталкиваемся со сложностями.
Даже простой /login уже не RESTful 🤷‍♀️

Классический RESTful возможен там, где мы имеем дело с набором статичных ресурсов, которым достаточно CRUD-операций. Например, хранилище файлов S3 или MVP сервиса стриминга музыки.

🤔 Может, если у нас бизнес-процессы, то нам отказаться от REST и делать эндпойнты с действиями?
/update
/approve


Такой подход называется RPC over REST. Он выглядит как REST, но отталкивается не от ресурсов, а от действий (процедур). При этом методы http (GET/PUT/DELETE) могут не использоваться, всё может реализовываться через POST.

Среди публичных API не встречала этот подход в чистом виде, но эндпойнтов с действиями много например в Ozon Seller API:
POST /v2/products/delete
POST /v1/product/archive
POST /v1/product/unarchive


Так, а если мне список документов нужно получить, то это POST /getDocuments ? Как-то непривычно. Удобно же со старым добрым :
GET /documents
GET /document/{id}


А если мне нужно сделать поиск (фильтрацию) документов по куче полей? Все их в url GET класть кажется плохой идеей.
Ответы GET запросов могут кэшироваться на промежуточных узлах, а зачем такой специфический запрос кэшировать? Да и ограничение на длину запроса может сработать.

Поэтому делают POST /documents/search
Это удобно и часто используется.

Так что с первой претензией разобрались, снимается 😊

Вернемся к глаголам.

🤔 Теоретически часть действий можно завернуть в статусы документа и вместо POST /document/{id}/approve делать:

PATCH /document/{id}
{
"status": "APPROVED"
}


Но не для всех операций сработает. Да и читаемость может сильно пострадать.

Есть гибридный подход, который работает с ресурсами и методами HTTP, но может иметь действия в URL и использовать POST для сложных запросов чтения.

Такой подход называют Pragmatic REST. Его главная цель — понятность и удобство. Pragmatic REST берет всё лучшее из REST, но позволяет отступить от строгих правил, если это необходимо для ясности и удобства ☺️

Скорее всего на вашем проекте используется именно он, даже если сам термин не применяется.

Разработчик с аналитиком в итоге пришли к консенсусу по этой задаче, заменив один из POST-ов на GET, а остальное оставив в первоначальном виде. Но это был не последний их спор.

Кстати, есть еще холиварный вопрос: по классике REST-подхода метод PUT используется для полного обновления ресурса, а PATCH для частичного. Но на многих проектах я встречала PUT для частичного обновления нескольких полей, и всем было ок. Голосуйте в опросе ниже, на чьей вы стороне 😃

Были ли у вас ситуации с дискуссиями вокруг разрабатываемого API?
Please open Telegram to view this post
VIEW IN TELEGRAM
​​Эволюция архитектуры баз данных

"Система управления базами данных — крайне сложный программный продукт, и рассказ о его архитектуре потянет на целый увесистый том. А поскольку заголовок обещает нам не просто «архитектуру», а даже «эволюцию архитектуры», сегодня остановимся на одном из компонентов, ключевом с точки зрения производительности, — системе хранения данных. А заодно посмотрим, каково место самых современных систем на рынке и почему оно такое."

Читать статью
Forwarded from РИСЕРЧОШНАЯ
4️⃣5️⃣6️⃣

Как WB сделал «Поиск по фото»

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

С точки зрения юзера схема супер простая: Заскринил — загрузил — выделил нужный объект — выбрал нужный товар. Кстати прикольно, что у нас есть OCR по объектам, я такого в других местах не встречал. Можно по одному фото сразу несколько вещей найти.

Под капотом там не просто CLIP, сначала YOLO вырезает объект, OCR снимает артикулы/текст, потом SigLIP-эмбеддинги улетают в векторный поиск Qdrant (HNSW). Товары лежат уже в эмбеддингах заранее.

Самое интересное — мультимодальная логика: поиск живёт не только в изображении. Фото обогащают тегами, которые заранее сгенерированы LLM офлайн по описаниям и визуальным признакам.

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

➡️ Почитать можно тут


Ставьте 🔥 огонек если пользуетесь поиском по фото

MADE IN
@researchoshnaya
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Artyom Zemlyak
Привет!
Хотел бы поделиться проектом:
https://github.com/ArtyomZemlyak/tg-note

Если кратко:
- агент автоматически обновляет базу знаний по сообщениям от пользователя
- агент по умолчанию это qwen code cli
- интерфейс это бот в телеге
- как базу знаний можно использовать репу GitHub

Идея: закидывать посты из разных каналов репостами в бота, а он уже будет все раскидывать по базе знаний.

Может кому-то будет интересно.
Forwarded from Data Secrets
О, новый релиз от Андрея Карпаты

Это один из самых безумных репозиториев, которые я когда-либо писал


Сразу ссылка: github.com/karpathy/nanochat

nanochat – это что-то типа продолжения легендарного nanoGPT. Но если nanoGPT – это, по сути, только предобучение, то здесь у нас полностью готовый конвейер для обучения и инференса целого мини-клона ChatGPT.

В лучших традициях кода Карпаты – совсем немного строк (всего 8к) и минимальное количество зависимостей. Вы просто открываете проект на любом облачном GPU-сервере, запускаете один скрипт, и уже через 4 часа можете общаться с LLM-кой в собственном ChatGPT.

В пересчете на аренду GPU это будет стоить примерно 100 долларов. Если готовы потратить больше, то можно масштабировать и получать лучшие результаты.

Моя цель – собрать весь «сильный базовый» стек в один связный, минималистичный, читаемый и максимально форкаемый репозиторий. nanochat станет итоговым проектом LLM101n <мы об этом курсе писали тут>. Думаю, у него также есть потенциал стать исследовательским инструментом или бенчмарком, подобным ранее существовавшему nanoGPT.


Технические детали о том, что просходит внутри проекта, можно почитать здесь.

Огонь же?
Forwarded from Maxim.ML - канал
🔍 Что скрывается под капотом Perplexity?

Когда AI отказывается выполнить задачу, ссылаясь на "лимиты ресурсов", возникает вопрос: а что это за лимиты? Со мной случился как раз такой кейс.

Я решил выяснить, что происходит внутри Perplexity, когда он выполняет код. Попросил AI проанализировать собственные логи и окружение. И он буквально сам рассказал: "Я работаю в Docker-контейнере на Linux 6.1, у меня 2 CPU и 1GB RAM..." и далее выдал полную базу, вплоть до локации своего сервера (кстати, США, штат Орегон)

Perplexity использует E2B Sandbox - специализированную платформу для AI-агентов. Каждый ваш запрос с кодом запускается в контейнере.

🔵 Архитектура: FastAPI WebSocket Jupyter Kernel
🔵 Оптимизация: uvloop + orjson + httptools

Это объясняет, почему AI иногда "отказывается" - не из-за технических лимитов, а из-за бизнес-логики системы. Ведь критически важно быстро отдавать пользователю результат - это основной приоритет таких решений

GitHub Copilot, Replit, CodeSandbox - все используют похожие решения

Зная архитектуру подобных решений, можно:
🔜 Правильно использовать контекст
🔜 Оптимизировать запросы под систему (и манипулировать системой)
🔜 Понимать реальные ограничения и бизнес-логику

Понимание внутреннего устройства AI-систем становится критически важным навыком. Это не просто любопытство - это практический инструмент для более эффективной работы

📖 Полное исследование на Habr
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Руковожоп
Хочу уволить всех к херам 🔪

Сегодня обсуждаем вместе вопрос из анонимного инбокса Руковожопа

«Я пришла в новый проект выстраивать маркетинг.
Там уже есть команда, которая и по результатам, и по моему мнению работает плохо.
На первой же планёрке захотелось уволить всех к хренам,
но так нельзя — тогда вообще некому будет работать.
Как сберечь нервные клетки и при этом выстроить маркетинг здорового человека?»

У меня такое было: приходишь в новую команду и от бардака кровь из глаз, а люди в этом живут как в уютном доме 🤨

Но увольнять всех — реально нельзя, ни стратегически, ни этически.

Что делать:

🔴Не ставим диагнозы

Сначала смотрим, почему они работают плохо.
Иногда там не «ленивые дураки», а просто отсутствие системности и много руководителей, которые всё пускали на самотёк

🔴Ищем союзника

В идеале сильного — наш +1 или негласный лидер команды.
Тот человек, который хочет лучше.
С ним начинаем тянуть команду вверх, и постепенно к нему подтянутся остальные

🔴 Новым правилам — 👍,но не ломаем старые в ноль

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

🔴Шлюпки нет, используем дверь

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

🔴Крепко держимся друг за друга

Частая ошибка: видишь, что команда работает как из жопы и в болоте дна не разглядеть — отделяешься от всех максимально. Ни то обида, ни то злость 🔫

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

📌Сначала понять, потом структурировать и поддержать,
и только потом менять.

Любой другой порядок превратит из строителя в Руковожопа с бензопилой

Жду ваши мысли по теме и напоминаю, что вопрос можно задать тут, вы только пишите, это вопрос в зал или чисто 1+1 пощебечем?😘
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Agentic World
Привет! И еще один перевод феноменальной статьи, на этот раз про особенности архитектур открытых LLM. Картиночки у автора (с прекрасной фамилией Рашка) просто огненные. Максимально рекомендую полистать хотя бы просто для общего развития.

Там будет DeepSeek V3/R1, OLMo 2, Gemma 3, Mistral Small 3.1, Llama 4, Qwen3, SmolLM3, Kimi K2, GPT-OSS, Grok 2.5, GLM-4.5, Qwen3-Next.

https://habr.com/ru/articles/958880/
Forwarded from ML Baldini • Nikita Boyandin (Nikita Boyandin)
МЛ алгосы: вторая часть или mlleetcode ultrahard💃

В этом посте я собрал весь код по статье Attention is All You Need, и также накинул картиночек с формулами для большего понимания. Надеюсь, вам понравится💗
Please open Telegram to view this post
VIEW IN TELEGRAM