backendportal | Unsorted

Telegram-канал backendportal - Backend Portal | Программирование

15708

Присоединяйтесь к нашему каналу и погрузитесь в мир Backend-разработки Связь: @devmangx РКН: https://clck.ru/3FobxK

Subscribe to a channel

Backend Portal | Программирование

Самые умные люди в интернете в последнее время буквально начали выкладывать свои знания в open source.

Эти 11 GitHub-репозиториев могут сэкономить тебе годы проб и ошибок.

Сохрани себе и изучай постепенно.

1. PilotDeck (OpenBMB)

Open-source фреймворк для AI-агентов. Позволяет развернуть автономного агента за считанные минуты.

GitHub: https://github.com/OpenBMB/PilotDeck

2. andrej-karpathy-skills

Один файл CLAUDE.md с набором правил и практик для AI-программирования.

GitHub: https://github.com/multica-ai/andrej-karpathy-skills

3. MemPalace

Система долговременной памяти для AI-агентов с сильными результатами на LongMemEval.

GitHub: https://github.com/MemPalace/mempalace

4. OpenClaw

Персональный AI-ассистент с открытым исходным кодом.

GitHub: https://github.com/openclaw/openclaw

5. autoresearch

Фреймворк для автоматизации исследований.

GitHub: https://github.com/karpathy/autoresearch

6. awesome-claude-code

Подборка гайдов, практик и рабочих процессов для Claude Code.

GitHub: https://github.com/hesreallyhim/awesome-claude-code

7. agent-skills

Набор production-ready навыков для AI-агентов.

GitHub: https://github.com/addyosmani/agent-skills

8. AI Agents for Beginners

Бесплатный курс из 12 уроков по AI-агентам.

GitHub: https://github.com/microsoft/ai-agents-for-beginners

9. awesome-llm-apps

Одна из крупнейших коллекций готовых LLM-приложений с исходным кодом.

GitHub: https://github.com/Shubhamsaboo/awesome-llm-apps

10. hermes-agent

AI-агент с акцентом на самообучение и развитие поведения.

GitHub: https://github.com/NousResearch/hermes-agent

11. Qlib

Платформа для количественного анализа и алгоритмической торговли.

GitHub: https://github.com/microsoft/qlib

Информационная асимметрия стоит дорого.

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

👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

Наткнулся на полезный open-source Email SDK

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

Идея простая: если в будущем решишь перейти с одного провайдера на другой, не придётся переписывать большую часть кода, связанного с отправкой почты.

Подходит для:

* SaaS-продуктов;
* веб-приложений;
* AI-автоматизаций;
* AI-инструментов, которые используют email-уведомления, рассылки или почтовые workflow.

Исходники:
github.com/opencoredev/email-sdk

👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

Папка /internal в Go — одна из самых неправильно понятых вещей в структуре проекта.
Многие используют её один раз на верхнем уровне, просто чтобы спрятать код от внешнего мира.
Но мало кто знает главное.

internal можно вкладывать в internal.
И это меняет всю идею.

Каждый такой уровень создаёт отдельную границу. Один пакет физически не может залезть во внутренности другого, если он не находится в той же области видимости.

Так ты собираешь модульный монолит не из “папок с кодом”, а из жёстко изолированных блоков, где каждый живёт в своём контуре.

👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

Я видел, как инженеры с 10-летним опытом проваливали собеседования по System Design на Senior-позиции.

И ошибка почти всегда одна и та же.

«Наша архитектура данных — это React + Node.js + MongoDB»

«Мы используем микросервисную архитектуру с событийным взаимодействием между сервисами, REST API и документо-ориентированной базой данных для обеспечения масштабируемости и гибкости»

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

Более правильный подход на архитектурном интервью:

1. Начните с ключевых принципов.

Например: «Наша система построена на event-driven подходе, чтобы сервисы оставались слабо связанными друг с другом».

2. Объясните компромиссы.

Например: «Мы выбрали eventual consistency вместо строгой консистентности, чтобы обеспечить высокую доступность системы».

3. Только после этого переходите к инструментам, если это необходимо.

Например: «Для реализации этого подхода мы используем Kafka».

Архитектура — это стратегия: что, зачем и когда.

Инструменты — это тактика: как именно это реализовано.

Архитектура — стратегический уровень. Инструменты — тактический.

Хорошая архитектура переживает смену инструментов.

👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

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

Вот в чём разница:
Write-Through Cache → приоритет консистентности данных
Write-Behind Cache → приоритет производительности, допускается временная неконсистентность и риск потери данных
Write-Through — кэш и база данных обновляются одновременно при каждой записи.
(Представьте доску, которая в реальном времени синхронизируется с общим документом.)
Write-Behind — данные сначала записываются в кэш, а затем позже сбрасываются в базу данных.
(Представьте, что вы делаете заметки на доске, а в общий документ переносите их только в конце дня.)

Практическое правило:
Если устаревшие данные недопустимы → используйте Write-Through.
Если критична скорость записи → используйте Write-Behind.

👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

Если вы программируете на Windows, стоит обратить внимание на Windows Developer Config от Microsoft.

Инструмент позволяет подготовить машину для разработки одной командой.

Что умеет:

✓ Настраивает WSL и Ubuntu
✓ Устанавливает Windows Terminal
✓ Ставит Node.js, Python, Rust, Go, Java, .NET, PHP и другие инструменты
✓ Автоматизирует настройку рабочего окружения

Проект полностью открытый и доступен на GitHub.

👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

Один вопрос по Kubernetes, который мне попадается снова и снова на собеседованиях:

Что происходит с запросом на пути от интернета до Pod'а?

Обычно ответ выглядит так:
User → ALB → Ingress → Service → Pod
И вроде всё правильно.

Но самое интересное начинается после этого.
Следом обычно спрашивают:
• Кто выбирает Pod, который получит запрос?
• Чем на самом деле занимается kube-proxy?
• Как работают iptables и IPVS?
• Зачем нужен CNI-плагин?
• Что будет с трафиком, если kube-proxy упадёт?

Для меня одним из самых полезных инсайтов было вот что:
Service в Kubernetes сам по себе не балансирует трафик.
kube-proxy создаёт правила iptables/IPVS на нодах, и именно они направляют запросы в живые Pod'ы.

Ещё интереснее становится, когда речь заходит об отказах.
Если kube-proxy упадёт, трафик обычно не перестаёт ходить мгновенно. Существующие правила уже находятся в ядре Linux и продолжают работать.

Ломается другое: Kubernetes больше не может обновлять эти правила, когда появляются новые Pod'ы, удаляются старые или меняются Service.

Смешно, но именно такие базовые вопросы чаще всего вскрывают самые глубокие пробелы в понимании Кюбернетеса.

👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

В 1991 году финский студент просто хотел разобраться, как устроены операционные системы.
Он начал изучать MINIX, небольшой Unix-подобный проект, который профессор Эндрю Таненбаум создал для обучения. Ничего масштабного, просто учебная ОС.

В какой-то момент студент написал в интернете:

«Я делаю (бесплатную) операционную систему. Просто как хобби, она не будет такой большой и профессиональной, как GNU...»

Этим студентом был Линус Торвальдс.
А его хобби со временем превратилось в Linux.

https://os.ecci.ucr.ac.cr/slides/Andrew-S.-Tanenbaum-OperatingSystems-Design-and-Implementation.pdf

👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

Хотите понять, как подключить LLM к реальным рабочим процессам, а не просто гонять промпты в чате?
В этом курсе Ania Kubów показывает, как собрать и задеплоить AI-агента для Slack с нуля.

По ходу курса вы:
• Поднимете Slack-бота на базе GPT-4.
• Настроите Node.js, Express и Slack Bolt.
• Подключите PostgreSQL для хранения данных.
• Развернёте проект через Render.
• Научите агента искать и привлекать новых участников сообщества.
Получается не очередной демо-чатбот, а полноценный агент, встроенный в рабочий процесс команды.

Курс: Build Your Own AI Agent with Node.js and Slack

👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

В 2006 году один разработчик из Мумбаи начал писать менеджер электронных книг для себя.

Спустя почти 20 лет его проектом пользуются около 3 миллионов человек из 236 стран каждые два месяца.

Его зовут Ковид Гоял. Проект называется Calibre. И да, он до сих пор остаётся главным разработчиком. Последний релиз вышел всего неделю назад.

Calibre бесплатный, open-source и распространяется под GPL-3.0. Работает на Windows, macOS и Linux.

Что умеет:

• читает почти любой формат электронных книг: EPUB, MOBI, AZW, AZW3, KFX, PDF, CBR, CBZ, DOCX, TXT и другие;
• конвертирует книги между форматами в пару кликов;
• редактирует метаданные, обложки и теги;
• управляет библиотеками на тысячи книг;
• отправляет книги напрямую на Kindle, Kobo, Tolino, телефон или планшет;
• умеет поднимать локальный сервер, чтобы читать свою библиотеку через браузер.

Сейчас у проекта почти 25 тысяч звёзд на GitHub и около 2.9 миллиона активных установок за последние 60 дней.

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

Настоящая цифровая библиотека выглядит именно так: книги принадлежат тебе, а не экосистеме устройства.

https://github.com/janeczku/calibre-web

👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

Лето начинается: водные развлечения, гриль на острове и новые маршруты в бутик-отеле «Заонежье»

Для гостей бутик-отеля «Заонежье» к новому сезону подготовлены лесные трассы для первых заездов на новых квадроциклах — они позволяют исследовать дикие уголки карельской тайги и скалистые берега озер. Велопрогулки по дорогам Заонежья стали еще комфортнее благодаря электробайкам, которые этой весной пополнили велопарк отеля.

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

Ресторан «Руна» представляет летнюю серию гриль-сетов, которые можно приготовить самостоятельно на одном из необитаемых островов или устроить барбекю на лужайке у дома. В меню — овощные и рыбные сеты, а также мясное ассорти.

Бутик-отель «Заонежье» приглашает к активному отдыху среди озер и северной природы Карелии.

Читать полностью…

Backend Portal | Программирование

Tail Call Optimization (TCO) — это оптимизация, которая позволяет не создавать новый стековый кадр (stack frame) для вызова функции, если вызывающая функция просто возвращает результат этой функции.
Чаще всего это встречается при хвостовой рекурсии (tail recursion).
Допустим, у вас есть рекурсивная функция:

const recur = (args) => {
doSomething(args);
return recur();
}


Представим, что программа начинает работу с первого вызова recur(). Назовём его Call 1.
Внутри Call 1 происходит ещё один вызов recur(). Назовём его Call 2.
При любом вызове функции компилятор или интерпретатор создаёт стековый кадр для хранения данных текущего вызова.

Стековый кадр нужен для того, чтобы сохранить состояние Call 1 на случай, если после возврата из Call 2 ему ещё понадобится выполнить какую-то работу.
Но каждый новый стековый кадр занимает память и увеличивает размер стека.

Если все рекурсивные вызовы имеют вид:
return recur();

то после завершения Call 2 у Call 1 больше нет никакой работы. Он просто сразу возвращает полученный результат.

Получается, что хранить данные Call 1 в отдельном стековом кадре бессмысленно.
Современные компиляторы могут воспользоваться этим. Вместо создания нового стекового кадра они переиспользуют текущий и заменяют данные Call 1 данными Call 2.

В результате новые кадры стека не создаются, а потребление памяти остаётся постоянным:
O(1)

вместо обычного:
O(n)

для рекурсии.

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

👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

Разработчик пишет такой код для обработки 1000 пользовательских записей:

const users = await db.getAll();

await Promise.all(
users.map(user => sendEmail(user))
);

console.log('Done');


С 10 пользователями в среде разработки всё работает нормально.

Что произойдёт в продакшене с 1000 пользователями?

A) Всё отработает идеально
Promise.all сам управляет конкурентностью

B) Сработает rate limit почтового сервиса
сотни писем тихо не отправятся

C) Серверу не хватит памяти
1000 одновременно запущенных промисов уронят Node.js

D) И B, и C
проблемы с rate limit и памятью
в зависимости от ограничений почтового сервиса

Какой вариант правильный и как это исправить?

Promise.all() не ограничивает конкурентность.
Node попытается отправить все 1000 писем одновременно.

В зависимости от инфраструктуры вы получите:
• rate limit от почтового провайдера
• таймауты и ретраи
• резкий рост потребления памяти
• падение производительности процесса

Поэтому правильный ответ обычно не B и не C.
Правильный ответ: D.

Promise.all() не является очередью задач.
Для больших объёмов используют ограничение конкурентности:

const limit = pLimit(10);

await Promise.all(
users.map(user =>
limit(() => sendEmail(user))
)
);


👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

📎 Смотрите записи докладов с Backend Talks от Яндекс 360

На конференции обсуждали решение прикладных архитектурных задач и разбирали реальные инженерные кейсы. Будет полезно и интересно вне зависимости от стека.

Направленный ациклический граф в PostgreSQL: как мы научили реляционную базу хранить оргструктуру на 500 000 пользователей. Малик Минубаев, разработчик в B2B-платформе, рассказал, почему стандартные паттерны хранения иерархий не работают для ориентированного ациклического графа. А также сравнил несколько вариантов Closure Table с бенчмарками на реальной нагрузке


Как Яндекс Диск выдерживает сотни гигабит входящего трафика: устройство балансировки загрузок. Илья Абрамов, разработчик в Диске, разобрал, почему нам не подошёл подход «как у всех», и показал эволюцию алгоритма балансировки загрузок: от наивного Round-Robin до разработки собственного алгоритма


Как формировать технологический стек и не погибнуть в священных войнах: от хаоса к процессам и техрадару. Дмитрий Сафонов, руководитель команды разработки платформы микросервисов, рассказал, как строить стек для промышленной разработки и разрешать споры о технологиях. А также поделился опытом внедрения Техрадара в Яндекс 360


Зачем и как бэкендеру расти в карьере в 2026 году. Дмитрий Соломонов, руководитель группы B2B-разработки бэкенда Диска, рассказал, как развивать команду с помощью индивидуальных планов и выбора узкой специализации для разных уровней разработчиков. И поделился, как связать получение знаний с реальными задачами


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


🎤 Плейлист доступен на YouTube и в VK Видео

Читать полностью…

Backend Portal | Программирование

Лучший способ понять, как серверы работают на самом деле, — написать пару серверов с нуля.

Автор подготовил серию упражнений, которые помогут вкатиться в socket programming на C, Python и Go:

Написать TCP-клиент для telemetry server
https://labs.iximiuz.com/challenges/write-tcp-client-for-telemetry-server
Написать TCP-клиент для chat server
https://labs.iximiuz.com/challenges/write-tcp-client-for-chat-server
Написать TCP echo server с нуля
https://labs.iximiuz.com/challenges/write-tcp-echo-server
Сделать один echo server, который работает и с TCP, и с Unix sockets
https://labs.iximiuz.com/challenges/write-stream-echo-server


👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

Одна из самых детальных шпаргалок для Backend-разработчика на русском языке. Внутри: от базового устройства интернета и ПК, до работы с базами данным, разработки API и тестирования продуктов.

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

👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

Многие разработчики путают эти 3 HTTP-метода:

PUT
PATCH
POST

Самый простой способ запомнить:

POST → создать новый ресурс
POST /users
Создаёт нового пользователя.

PUT → полностью заменить ресурс
PUT /users/123
Если отправить только имя, остальные поля могут быть перезаписаны, потому что PUT подразумевает замену всего объекта целиком.

PATCH → обновить только изменённые поля
PATCH /users/123
Отправляешь только:
{ "email": "[new@example.com }

Обновится только email.

Короткое правило:

POST = создание
PUT = полная замена
PATCH = частичное обновление

Мнемоника:

POST → отправить новый объект
PUT → поставить новую версию вместо старой
PATCH → наложить патч на существующий объект

Правильный выбор HTTP-метода делает API более предсказуемым, REST-совместимым и проще в поддержке.


👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

Хочешь разобраться в распределённых системах с нуля?

Начни с этих 10 тем:

Distributed Systems Reading List
https://github.com/theanalyst/awesome-distributed-systems
System Design Primer
https://github.com/donnemartin/system-design-primer
MIT 6.824 (Distributed Systems)
https://github.com/chaozh/MIT-6.824
System Design 101
https://github.com/ByteByteGoHq/system-design-101
Awesome Scalability
https://github.com/binhnguyennus/awesome-scalability
Raft Consensus Visualization https://github.com/ongardie/raftscope
Apache Kafka https://github.com/apache/kafka
Apache Cassandrahttps://github.com/apache/cassandra
etcd github.com/etcd-io/etcd

👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

Твой запрос к JSONB — не медленный. Ты просто используешь не тот индекс.

Допустим, ты хранишь события вот так:

{
"user_id": "123",
"status": "completed",
"source": "mobile"
}


И фильтруешь их примерно так:

SELECT * FROM events WHERE payload @> '{"status":"completed"}';


Ты повесил B-Tree индекс на всю колонку payload.

Это не сработает.

PostgreSQL не умеет эффективно оптимизировать глубокие запросы к JSONB через B-Tree.
В итоге он каждый раз делает полный скан таблицы.

Чтобы это починить — нужен GIN-индекс (Generalized Inverted Index).

PostgreSQL создаёт инвертированный индекс:

🔸Разбивает каждый JSONB-объект на ключи и значения,
🔸Мапит их на ID строк,
🔸И вместо полного скана сразу прыгает к нужным совпадениям.

Если не делаешь запросы на вхождение (@>), добавь опцию jsonb_path_ops — индексы будут компактнее и быстрее.

Быстрее. Меньше. Чище.

👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

Salesforce внедрила 20 000 корпоративных AI-агентов.

Главный вывод оказался неожиданным:

Для классического ПО 90% работы происходит до релиза.

Для AI-агентов всё наоборот — 90% работы начинается после запуска.

В интервью с Джоном Кучерой, CPO Agentforce, обсудили, что отличает агентов, которые приносят реальную пользу бизнесу, от тех, что так и остаются красивым демо.

Одна из ключевых мыслей:

Команды, которые считают запуск финишной чертой, застревают на стадии пилота.

Команды, которые воспринимают запуск как стартовую точку, масштабируют решения дальше.

В материале разбирают:

→ Почему большинство корпоративных агентов терпят неудачу
→ Что нужно подготовить до запуска: scope, KPI и guardrails
→ Как выглядит feedback loop, без которого невозможно масштабирование
→ Три анти-паттерна, выявленных на основе 20 000 внедрений
→ Куда движется архитектура агентных систем

👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

Foundations of Computer Science от Alfred Aho и Jeffrey Ullman доступна бесплатно онлайн.
Классический учебник по информатике, который охватывает:

• конечные автоматы
• формальные языки
• теорию вычислений
• основы алгоритмов и вычислительных моделей

Хорошая отправная точка для тех, кто хочет разобраться в фундаментальных концепциях Computer Science, лежащих в основе компиляторов, языков программирования и теории вычислений.

Книга:
http://infolab.stanford.edu/~ullman/focs.html

#computerscience #book #theory #cs

👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

Если делаешь приложение или API, где важна скорость ответа, Redis может сильно разгрузить бэкенд.

Вместо того чтобы каждый запрос снова лез в базу данных, часто запрашиваемые данные кладутся в память. Следующие запросы получают их сразу из кэша, без лишних обращений к БД.
Маниш разобрал, как работает in-memory кэширование в Redis, как его настроить и как внедрить на реальном примере.

Полезный материал для тех, кто хочет уменьшить задержки, снизить нагрузку на базу и ускорить API.
https://freecodecamp.org/news/how-in-memory-caching-works-in-redis/

👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

Митап для Java-разработчиков — 18 июня, Екатеринбург

В программе 2 доклада от бэкендеров Яндекс Вертикалей про неочевидные продакшн-баги в Java и Spring, переход на Temporal:

🟥 NullPointerException на инициализированном final-поле. Как такое вообще возможно? Расскажет Михаил Черноскутов из Яндекс Путешествий

🟥Переезд со scheduler-сервисов на Temporal. Зачем он понадобился и какие были подводные камни, ответит Герман Михайлов из Яндекс Недвижимости

После выступлений участников ждёт «Громкий вопрос» — интеллектуальная игра по мотивам одноимённого шоу. А также нетворкинг с коллегами и единомышленниками.

🗓18 июня (четверг), 18:00 — 22:00
📍 Ельцин Центр, Екатеринбург

Подробности и регистрация

Читать полностью…

Backend Portal | Программирование

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

Понимание этой идеи полностью изменило то, как я читаю и пишу код, и автор постарался объяснить её так, чтобы это стало понятно и вам.

Если вы до сих пор не разобрались, что такое memory wall, то упускаете один из самых сильных моментов «озарения» во всей компьютерной науке.

Автору потребовалось больше 20 дней глубокого ресёрча и много работы, чтобы изложить это максимально просто.
Вот статья: https://abhisheklearn12.github.io/blogs/memory.html

👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

API Design Complete Roadmap
|
| | |-- Fundamentals
| |-- Introduction to APIs
| | |-- What is an API
| | |-- API architecture basics
| | |-- Client-server communication
| |-- Types of APIs
| | |-- REST APIs
| | |-- GraphQL APIs
| | |-- SOAP APIs
| | |-- gRPC APIs
| |-- HTTP Fundamentals
| | |-- Requests and responses
| | |-- HTTP methods
| | |-- Status codes

| | |-- REST API Design
| |-- Resource-Based Design
| | |-- Nouns over verbs
| | |-- Resource naming conventions
| |-- CRUD Operations
| | |-- GET
| | |-- POST
| | |-- PUT/PATCH
| | |-- DELETE
| |-- URI Design
| | |-- Clean URLs
| | |-- Nested resources

| | |-- Request & Response Design
| |-- JSON Best Practices
| | |-- Consistent structures
| | |-- Error responses
| |-- Data Validation
| | |-- Input validation
| | |-- Output formatting
| |-- Pagination
| | |-- Offset pagination
| | |-- Cursor pagination

| | |-- Authentication & Authorization
| |-- API Keys
| |-- JWT Authentication
| |-- OAuth 2.0
| |-- Role-Based Access Control (RBAC)
| |-- Permission Management

| | |-- API Security
| |-- HTTPS
| |-- Rate Limiting
| |-- CORS
| |-- Input Sanitization
| |-- Preventing API Abuse
| |-- Secure Secret Management

| | |-- API Documentation
| |-- OpenAPI Specification
| |-- Swagger UI
| |-- API Reference Docs
| |-- Request Examples
| |-- SDK Documentation

| | |-- API Versioning
| |-- URL Versioning
| |-- Header Versioning
| |-- Semantic Versioning
| |-- Backward Compatibility

| | |-- Performance Optimization
| |-- Caching Strategies
| | |-- Browser caching
| | |-- Server-side caching
| |-- Compression
| |-- Query Optimization
| |-- Response Time Monitoring

| | |-- Advanced API Patterns
| |-- GraphQL Fundamentals
| |-- gRPC Services
| |-- WebSockets
| |-- Event-Driven APIs
| |-- API Gateway Pattern
| |-- Microservices Communication

| | |-- Testing APIs
| |-- Unit Testing
| |-- Integration Testing
| |-- End-to-End Testing
| |-- Postman Testing
| |-- Automated API Testing

| | |-- Monitoring & Observability
| |-- Logging
| |-- Metrics Collection
| |-- Distributed Tracing
| |-- Error Tracking
| |-- API Analytics

| | |-- Deployment & Scalability
| |-- Docker for APIs
| |-- Kubernetes Basics
| |-- Load Balancing
| |-- Horizontal Scaling
| |-- CI/CD for APIs

| | |-- Real World Projects
| |-- Design a RESTful Blog API
| |-- Build an E-commerce API
| |-- Create a Chat Application API
| |-- Develop a Payment Gateway API
| |-- Build a URL Shortener API
| |-- Design a Social Media API

| | |-- Interview Preparation
| |-- REST API Interview Questions
| |-- Authentication Scenarios
| |-- API Security Challenges
| |-- System Design for APIs
| |-- Performance Optimization Questions

| | |-- Community and Growth
| |-- Build Public API Projects
| |-- Publish APIs on GitHub
| |-- Write API Design Articles
| |-- Contribute to Open Source
| |-- Stay Updated with API Standards

👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

Open NotebookLM — бесплатная open-source альтернатива NotebookLM.
Генерирует подкасты и позволяет общаться со своими документами через чат.

https://github.com/lfnovo/open-notebook

👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

🚀 Курс “Простой ООП до PRO” на Python!

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

Классы, объекты, наследование, инкапсуляция, полиморфизм, композиция и паттерны встречаются почти во всех языках: Python, Java, C++, C#, JavaScript и других.

Что внутри:
• классы и объекты;
__init__, методы, self, атрибуты;
• наследование, super() и MRO;
• полиморфизм, duck typing и абстрактные классы;
• инкапсуляция, @property, геттеры и сеттеры;
• композиция и агрегация;
• магические методы и перегрузка операторов;
• итераторы, генераторы, модули и пакеты;
• паттерны проектирования;
• финальный проект — RPG-игра.

🎓 12 разделов, 52 урока, практика, поддержка 24/7 и доступ навсегда.

Забрать курс со скидкой 40%:
🔗 https://sudoteach.com/course/oop

Читать полностью…

Backend Portal | Программирование

Один учёный из Дании решил автоматизировать отклики на вакансии через Claude Code. А потом выложил весь проект в open source.

Его зовут Mads Lorentzen. Он PhD-геофизик, а не основатель стартапа. Сделал инструмент для себя и опубликовал его под лицензией MIT.

Как это работает:

Шаг 1
Агент читает вакансию и оценивает, насколько кандидат ей соответствует.
Шаг 2
Создаёт адаптированное CV в LaTeX, оставляя только релевантный опыт.
Шаг 3
Пишет сопроводительное письмо под конкретную позицию.
Шаг 4
Второй AI-агент проводит ревью результата, находит слабые места, после чего первый агент вносит правки.
Шаг 5


Система собирает CV и cover letter в готовые PDF-файлы. Самое интересное не в автоматизации, а в устройстве проекта.

Вся логика хранится в обычных markdown-файлах:
• профиль кандидата
• правила написания текстов
• шаблоны CV
• заметки для подготовки к интервью
• инструкции для агентов

Никакой магии. Всё можно открыть, прочитать и изменить под себя.
Поиск вакансий из коробки заточен под датские job boards, но сам workflow подходит для любой страны.
На момент публикации:
• 489 звёзд
• 270 форков

Такое соотношение форков к звёздам обычно говорит о том, что люди не просто сохраняют репозиторий в закладки, а реально запускают и адаптируют его под себя.

https://github.com/MadsLorentzen/ai-job-search

👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

Если заглянуть в новый пакет uuid для Go, можно заметить странную деталь: пакетный mutex v7mu.
На первый взгляд это выглядит подозрительно. UUID обычно считаются полностью статeless, так зачем генератору UUID нужен mutex?

Причина связана с UUIDv7.
Команда Go хотела, чтобы функция NewV7() всегда генерировала UUID, которые сортируются в порядке создания (если системные часы не откатились назад).

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

Внутри пакета для этого хранятся пакетные переменные:

v7lastSecs
v7lastTimestamp

Они содержат информацию о последнем сгенерированном UUIDv7.

Поскольку NewV7() может одновременно вызываться из нескольких горутин, доступ к этим данным защищён mutex'ом:
var v7mu sync.Mutex


Алгоритм выглядит примерно так:

Захватить v7mu
Проверить текущий timestamp
Сравнить его с предыдущим
При необходимости увеличить внутренний счётчик
Сохранить новое состояние
Сгенерировать UUID
Освободить mutex

В результате каждый новый UUIDv7 гарантированно будет больше предыдущего и корректно отсортируется по времени создания.

Получается интересный компромисс: чтобы обеспечить монотонный порядок UUIDv7, разработчикам пришлось пожертвовать полной статeless-природой генератора и добавить небольшое глобальное состояние, защищённое мьютексом.

👉 @BackendPortal

Читать полностью…

Backend Portal | Программирование

Начал писать Git с нуля на Go как учебный проект.
И это оказался один из тех проектов, которые заставляют по-настоящему понять, как работает инструмент, которым пользуешься каждый день.

Пока реализовал несколько базовых вещей.

Сначала пришлось разобраться с os.Args и обработкой команд через switch.
Потом написал git init, который создаёт структуру каталогов .git.
Неожиданно больше всего времени ушло на нормальную обработку ошибок. Очень быстро начинаешь понимать, почему в Go везде встречается if err != nil.

Дальше перешёл к hash-object, и тут стало интересно.
До этого я пользовался Git много лет, но никогда не задумывался, что обычный файл внутри превращается в blob, хешируется через SHA-1, сжимается через zlib и сохраняется в объектное хранилище.

Многие знают Git как набор команд.

Гораздо меньше людей знают, что внутри это по сути очень элегантная база данных объектов.
И чем глубже разбираешься в устройстве Git, тем больше начинаешь уважать его архитектуру.
Заодно понял, что писать такие проекты на Go довольно приятно.

👉 @BackendPortal

Читать полностью…
Subscribe to a channel