YeaHub Tech
412 subscribers
343 photos
15 videos
2 files
450 links
Новые технологии, советы и обучающие материалы

YeaHub — это платформа для IT-специалистов, объединяющая обучение, карьерный рост, развитие и сообщество единомышленников.

Платформа: https://yeahub.ru

Для связи: @ruslan_kuyanets
Download Telegram
#Angular

🔖RxJS + Angular Signals: Идеальная команда для современных приложений

Долгое время RxJS был главным инструментом реактивности в Angular, но с появлением Signals всё изменилось. Теперь у нас есть мощная синергия, которая решает старые проблемы!


🔸Главное правило: Никаких Observable в шаблонах!

До свиданья, async pipe! Теперь мы используем toSignal() для преобразования потоков в сигналы:

readonly copied = toSignal(
fromEvent(button, 'click').pipe(
exhaustMap(() =>
timer(2000).pipe(
map(() => false),
startWith(true)
)
)
),
{ initialValue: false }
);



🔸Зачем это нужно?

Signals идеальны для управления состоянием — они всегда знают своё текущее значение и отлично интегрируются с системой обнаружения изменений Angular.

RxJS остается незаменимым для событийно-управляемой логики — обработки кликов, навигации, API браузера.


🔸Крутые возможности:

- Привязка к хост-элементу: '[class.active]': 'isActive()'
- Реактивные входы: toObservable(this.duration)
- Простые выходы: outputFromObservable(stream$)

Теперь мы получили лучшее из двух миров: стабильность сигналов + мощь RxJS операторов!


📎 Статья

🎙 Новости

📝 База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
#binarysearch

🔖 Бинарный поиск: как найти иголку в стоге сена за 3 шага

Представьте: вы ищете номер телефона в огромном справочнике на 1000 страниц. Будете листать с первой страницы?

Есть способ лучше! Откройте справочник посередине. Если нужная буква идет после той, что видите — выбросьте левую половину. Если раньше — правую. Повторите с оставшейся частью.

Поздравляю, вы только что изучили бинарный поиск!


🔸Как это работает?
Ищем число 89 в отсортированном массиве:
[12, 25, 38, 47, 56, 89, 97, 108, 234]


Шаг 1: Средний элемент = 56. 56 < 89 → отбрасываем левую половину
Шаг 2: Средний элемент = 97. 97 > 89 → отбрасываем правую половину
Шаг 3: Средний элемент = 89. Найдено! ✅


🔸Эффективность впечатляет:
- Линейный поиск: до 1000 шагов для 1000 элементов
- Бинарный поиск: максимум 10 шагов!

Секрет в том, что каждый шаг вдвое сокращает область поиска.


🔸Важное условие:
Массив обязательно должен быть отсортирован! Иначе алгоритм не работает.


🔸Где применяется:
- Поиск в базах данных
- Автодополнение в поисковиках
- Системы рекомендаций
- Игры (угадайте число!)



📎 Статья

🎙 Новости

📝 База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
#C++

🔖 C++ вложенные If-Else: от хаоса к порядку

Знакомая картина? Код превратился в лестницу из условий, и вы уже потерялись на третьем уровне вложенности?

if (user.isActive()) {
if (user.hasPermission()) {
if (data.isValid()) {
if (connection.isAlive()) {
// Наконец-то делаем что-то полезное!
}
}
}
}


❌Антипаттерн "Стрелка"

Это классический код-спагетти! Каждый новый уровень делает код менее читаемым и более подверженным ошибкам.


✅ Решения:

1. Ранний return:
if (!user.isActive()) return false;
if (!user.hasPermission()) return false;
if (!data.isValid()) return false;
// Чистый код без вложенности!


2. Разбивка на функции:
bool validateUser(const User& user) {
return user.isActive() && user.hasPermission();
}

bool processRequest() {
if (!validateUser(user)) return false;
// Логика стала понятнее!
}


3. Switch вместо if-else цепочек:
switch (userRole) {
case ADMIN: return processAdminRequest();
case USER: return processUserRequest();
default: return handleUnknownRole();
}


Практические применения:

- Валидация данных - проверка форм по шагам
- Игровая логика - разветвленные сценарии
- Обработка ошибок - каскадные проверки


Золотое правило:
Если вложенность больше 3-х уровней — пора рефакторить! Ваш код должен читаться как книга, а не как ребус.


📎 Статья

🎙 Новости

📝 База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
#Linux

🔖 Linux Mint 22.2: стабильность без экспериментов

Вышел новый релиз любимого многими дистрибутива! И знаете что? Никаких радикальных изменений интерфейса — только стабильность и комфорт.


✔️ Что нового:

▫️Биометрия стала проще
Новое приложение Fingwit — сканируй отпечаток и входи без пароля! Работает для входа в систему, разблокировки экрана и sudo-команд.

▫️Свежий дизайн
- Темы с легкой синевой вместо серого
- Эффект размытия на экране входа
- Акцентные цвета автоматически подстраиваются под тему

▫️Улучшенные приложения
- Sticky (заметки) теперь работает на Wayland
- Hypnotix (IPTV) получил "театральный" режим просмотра
- Warpinator теперь доступен на iOS


📎 Под капотом:

- Ядро 6.14 — поддержка Wi-Fi 7, новых процессоров и GPU
- LTS до 2029 года — установил и забыл на 4 года!
- Но для старых ПК лучше оставить ядро 6.8


Философия Mint:

Пока GNOME экспериментирует с минимализмом, Mint остается классическим:
- Привычная панель задач
- Понятное меню
- Никаких сюрпризов в интерфейсе


📎 Статья

🎙 Новости

📝 База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
#ChatGPT

🔖ChatGPT теперь подключается к внешним сервисам!

OpenAI сделала революционный шаг — ChatGPT научился работать с внешними MCP-серверами. Это больше не просто чат-бот!


🔸Что это означает?

До: ChatGPT генерировал только текст
Сейчас: Выполняет действия в ваших приложениях!


🔸Реальные возможности:

Работа с корпоративными системами — ChatGPT может обращаться к вашей CRM, базам данных, внутренним инструментам

Автоматизация процессов — создание задач в Jira, отправка писем, обновление документов

Персонализированные AI-агенты — настройка под специфику вашей компании


🔸Как активировать:

1. Подписка Pro/Plus
2. Developer mode в настройках
3. Раздел *Connectors* → включить MCP


🔸Главное изменение:

ChatGPT превращается из генератора текста в рабочую платформу. Теперь он может:
- Читать ваши документы
- Обновлять данные в реальном времени
- Интегрироваться с любыми сервисами
- Выполнять сложные бизнес-процессы


🎙 Новости

📝 База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
#Webdevelopment

🔖 12 инструментов, которые изменят вашу разработку

Топ-инструменты для разработчиков, которые реально экономят время и упрощают жизнь


🔥 Мои фавориты:

🔹RunJS — JS-песочница с мгновенным выводом
Пишешь код → сразу видишь результат. Поддержка NPM, TypeScript, ИИ-помощник!

🔹LocalCan — делитесь localhost с командой
Покажите проект коллегам одной ссылкой. Тестируйте веб-хуки на лету!

🔹VisBug — дизайн прямо в браузере
WYSIWYG-редактор для отладки CSS. Направляющие, выравнивание, live-правки!

🔹JSON Crack — визуализация JSON
Превращает JSON в понятные диаграммы. Интерактивное редактирование!


🔸Для оптимизации:

- CompressX — сжатие до 90% без потери качества
- Antimetal — экономия на AWS автопилотом
- Lightspeed — анализ производительности сайтов


🔸Для продуктивности:

- DevToys — "швейцарский нож" разработчика (кодировщики, форматеры, генераторы)
- TiinyHost — быстрый хостинг статики
- File.Rocks — безопасный обмен файлами


🔸Документация:

- Docz — красивая документация на MDX
- ScreenshotOne — скриншоты сайтов через API


Вывод:
Правильные инструменты = больше времени на код, меньше на рутину

Сохраняйте пост — пригодится!



📎 Статья

🎙 Новости

📝 База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
#Vibecoding

🔖 Вайб-кодинг глазами разработчика с 20-летним стажем

Опытный разработчик провел эксперимент: за 4 часа создал полноценное веб-приложение с интеграцией Bitrix24, не написав ни строчки кода вручную — только через диалог с ИИ.

В статье он честно рассказывает о граблях, на которые наступил, сравнивает GPT-4.1, Claude Sonnet 3.7 и Grok на реальных задачах, объясняет когда нужна экспертиза разработчика, а когда справится и новичок, и делится опасениями о влиянии вайб-кодинга на профессиональные навыки программистов ⬇️


📎 Статья

🎙 Новости

📝 База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#BigO

🔖 Big O: почему ваш код тормозит в продакшене

Код работает мгновенно на тестах, но ползёт как черепаха на реальных данных? Дело в Big O — нотации, которая предсказывает поведение алгоритма при росте нагрузки. O(1) работает всегда быстро, O(n) растёт линейно, а O(n²) превращается в кошмар на больших объёмах.

В отличие от замеров времени, Big O показывает закономерности роста сложности. Понимание четырёх основных категорий — константной, логарифмической, линейной и квадратичной — помогает писать код, который выдержит любую нагрузку.

Разберём на примерах: как превратить O(n²) в O(1), почему indexOf в цикле убивает производительность, и как бинарный поиск находит число среди миллиарда за 31 попытку. Готовы понять, что творится под капотом?⬇️


📎 Статья

🎙 Новости

📝 База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
#github

🔖lightweight-charts: мощные финансовые графики для веба

Библиотека от TradingView для создания интерактивных финансовых графиков в веб-приложениях. Одна из самых маленьких и быстрых HTML5 финансовых библиотек.


🔸Что умеет:

- Свечные графики — классические японские свечи
- Линейные и площадные графики — для трендов
- Гистограммы — анализ объемов и метрик
- Кастомные плагины — расширяемая функциональность


🔸Преимущества:

✅Высокая производительность — размер близок к статическим изображениям
✅Без зависимостей — standalone версия "из коробки"
✅HTML5 Canvas — нативная отрисовка без DOM
✅Простое API — 3 строки кода для первого графика
✅Интерактивность — замена статических изображений


🔸Установка:
npm install lightweight-charts

Или через CDN: unpkg.com


🔸Идеально для:
- Финансовых приложений и дашбордов
- Замены статических графиков интерактивными
- Страниц с множественными диаграммами
- Высоконагруженных приложений


📎 Ссылка

🎙 Новости

📝 База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#GraphSAGE

🔖GraphSAGE: как масштабировать графовые нейросети до миллиардов связей

Знали ли вы, что рекомендации в UberEats и Pinterest работают на графовых нейросетях с миллиардами узлов? Разбираем GraphSAGE — архитектуру, которая решает проблему масштабирования GNN.


🔹Масштабы впечатляют:

- Pinterest (PinSAGE): 3 млрд узлов, 18 млрд связей
- UberEats: 600K ресторанов, 66 млн пользователей


🔹 Главная проблема GNN:

Обычные графовые сети не могут работать с большими данными — нужно обрабатывать ВСЕ соседние узлы, что становится катастрофически медленно.


🔹 Решение GraphSAGE:

1. Выборка соседей
- Берем только фиксированное количество случайных соседей
- Создаем мини-батчи из подграфов
- Избегаем "популярных" узлов-хабов

2. Быстрая агрегация
- Агрегатор средних значений (самый простой)
- LSTM-агрегатор (лучшая точность)
- Max-pooling агрегатор


🔹 Результаты теста:

На датасете PubMed (20K узлов):
- GCN: 78.4% точность за 52.6 сек
- GAT: 77.1% точность за 18 мин
- GraphSAGE: 77.2% точность за 12.4 сек

GraphSAGE в 88 раз быстрее GAT при почти той же точности!


🔹Компромисс:

- ❌ Теряем информацию из-за обрезки графа
- ✅ Можем обрабатывать графы любого размера
- ✅ Масштабируемость важнее идеальной точности


🔹Применение:

- Рекомендательные системы
- Социальные сети
- Анализ знаний
- Биоинформатика


GraphSAGE доказывает: иногда "достаточно хорошо, но быстро" лучше чем "идеально, но медленно".


📎 Статья

🎙 Новости

📝 База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
#VectorDatabase

🔖Векторные базы данных: как LLM понимает мир

Знаете, как ChatGPT сочиняет сказки про единорогов за секунды? Секрет в векторных базах данных — технологии, которая превращает слова в числа и находит смысл в хаосе данных.


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

1. Эмбеддинг
Слова → векторы (списки чисел)
"единорог" = [0.2, -0.8, 1.3, ...]

2. Кодирование
Векторы проходят через нейросеть (линейное преобразование + ReLU)

3. Объединение
Усреднение по столбцам → один вектор предложения

4. Индексирование
Сжатие размерности для быстрого поиска

5. Поиск по сходству
Скалярное произведение находит "похожие" векторы


🔸Проблема масштаба:
- Миллиарды предложений в базе
- Тысячи измерений в каждом векторе
- Десятки тысяч токенов

Решение: Векторные БД хранят готовые эмбеддинги вместо их генерации на лету.


🔸Применение:
- RAG-системы (поиск + генерация)
- Рекомендательные системы
- Семантический поиск
- Чат-боты и ассистенты


🔸Алгоритмы поиска:
- Линейное сканирование — точно, но медленно
- HNSW — приблизительно, но быстро для миллиардов векторов


✔️Итог:
Векторные БД превращают "понимание" ИИ в математическую задачу. Похожие концепции получают близкие векторы в многомерном пространстве.


📎 Статья

🎙 Новости

📝 База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
#CSS

🔖CSS-магия: создаем супергеройский комикс-макет

Забудьте про скучные прямоугольные макеты! Показываю, как CSS Grid + clip-path превращают обычную страницу в панели комикса Marvel.

🔸Что получаем:
- Нестандартные формы панелей (треугольники, многоугольники, эллипсы)
- Перекрывающиеся слои с реалистичной глубиной
- Кастомные "рамки" вокруг изображений
- Адаптивная сетка с поворотом всего макета


🔸Технический состав:

CSS Grid Foundation:
.panels {
display: grid;
grid-template-columns: 3fr repeat(4, 1fr) 2fr;
transform: rotate(-20deg) translateY(100px);
}


Clip-path Magic:
.panel-3 {
clip-path: polygon(0 18%, 20% 20%,
78% 71%, 63% 100%, 5% 80%);
}



🔸Секреты реализации:

1. Границы панелей
Обычные CSS-границы не работают с clip-path, поэтому:
- Белый фон для контейнера
- Уменьшенное изображение внутри (scale 0.95)
- Тот же clip-path для изображения

2. Инструменты разработки
Firefox Shape Path Editor — интерактивное создание polygons прямо в браузере!

3. Совместимость
IE11 не поддерживает clip-path, но современные браузеры работают отлично.


🔸Вдохновение из реальных комиксов:
- Marvel's Generations: Phoenix & Jean Grey
- Detective Comics 876
- Flash Comics series


🔸Возможности безграничны:
- Макеты журналов
- Креативные портфолио
- Интерактивные лендинги
- Игровые интерфейсы

Кто сказал, что веб должен быть прямоугольным?


📎 Статья

🎙 Новости

📝 База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
#webdevelopment

🔖 Высокотехнологичные ресурсы для веб-разработчиков

Веб-разработка не стоит на месте. Собрал подборку малоизвестных, но мощных инструментов, которые поднимут ваши проекты на новый уровень.


🔹UI/UX & Design

Chakra UI — React-библиотека с готовыми компонентами
Тематическое оформление + доступность из коробки

Framer — интерактивные прототипы с реальным кодом
Мост между дизайном и разработкой

Midjourney — AI для генерации визуальных концепций
Уникальные дизайн-решения по текстовому описанию


🔹Фуллстек & Backend

RedwoodJS — React + Prisma в одном фреймворке
Единая экосистема для фронта и бэка + GraphQL API

Deno Deploy — безопасное развертывание TypeScript
Альтернатива AWS Lambda с фокусом на безопасность


🔹Технологии

Alchemy — инструменты для Web3 и dApps
Полный стек для блокчейн-разработки

Three.js — 3D-графика в браузере через WebGL
VR/AR и интерактивные 3D-конфигураторы


🔹Совет от автора:

- Начинайте с малого — выберите 1-2 инструмента
- Присоединяйтесь к сообществам
- Вносите вклад в open source проекты


📎 Статья

🎙 Новости

📝 База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
#golang

🔖Паттерн «Стратегия» в Go: от хаоса к порядку

Надоели бесконечные if-else и switch в коде? Паттерн «Стратегия» превращает спагетти-код в элегантную архитектуру с взаимозаменяемыми алгоритмами.


Когда использовать:


Было:
switch operation {
case "add": return a + b
case "subtract": return a - b
case "multiply": return a * b
// ... еще 20 кейсов
}


Стало:
calculator.SetStrategy(AddStrategy{})
result := calculator.Calculate(10, 5)



©️Три простых шага:

1. Интерфейс стратегии — общий контракт для алгоритмов
2. Конкретные реализации — каждый алгоритм в отдельном классе
3. Контекст — управляет выбором и выполнением стратегий


©️Реальные применения:

- Платежи: PayPal, карта, крипта — одним переключением
- Сортировка: быстрая, пузырьковая, слиянием — по размеру данных
- Сжатие: ZIP, RAR, GZIP — динамический выбор
- ML алгоритмы: линейная регрессия vs случайный лес


©️Преимущества:

✅ Принцип открытости/закрытости — новые стратегии без изменения кода
✅ Тестируемость — каждый алгоритм изолированно
✅ Читаемость — прощай, огромные switch'и
✅ Масштабируемость — добавляй стратегии на лету


©️Вместо цирка из условий:

Паттерн «Стратегия» использует отношение has-a (композиция), делая код гибким и расширяемым. Каждая стратегия — самостоятельная единица, которую можно тестировать и переиспользовать.


📎 Статья

🎙 Новости

📝 База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
#sysadmin

🔖Цифровая энтропия: почему сервер с аптаймом в 1000 дней — это бомба замедленного действия

Сисадмин со стажем рассказал историю про сервер «Феникс» с аптаймом 986 дней. Гордость команды. Пример для новичков. После планового выключения-включения не взлетел — RAID-контроллер решил, что с него хватит. Тогда автор осознал: цифровой мир подчиняется тем же законам распада, что и физический.

В теории код и данные вечны. На практике любая система деградирует. Это цифровая энтропия — медленный скат в беспорядок. Долгий аптайм не показатель стабильности, а тикающая бомба. Система годами не проверяла собственные процедуры запуска.


Примеры из жизни: vSphere-хост после перезагрузки не нашел загрузочный USB — он был поврежден. SAN с аптаймом 1400 дней никто не трогал, боясь массового отказа дисков. Сервер выключили заменить диск в RAID — при включении умер еще один. Debian с аптаймом 1300+ дней — репозитории для этой версии уже не существуют.

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

Призраки в системе: утечки памяти в Apache/PHP/PostgreSQL, зомби-процессы исчерпывают PID, протухший DNS-кэш на всех уровнях, разросшиеся логи съедают диск. Долгий аптайм усугубляет все это.

Решение — смена философии. От «серверов-питомцев» (их лечат) к «серверам-стаду» (их заменяют). Неизменяемая инфраструктура: золотой образ, регулярная замена серверов, никаких ручных правок. Проблема долгого аптайма исчезает, утечки сбрасываются, дрейф конфигурации невозможен.

Главное правило: если боитесь перезагружать сервер — вы уже потеряли над ним контроль.


📎 Статья

🎙 Новости

📝 База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
#webdev

🔖 Что если не отправлять HTML вообще?

Знаете, что делает большинство фреймворков? Они генерируют HTML на сервере, отправляют его вам, а потом начинают танцы с бубном под названием "гидратация". Тяжело, медленно, дорого.

А разработчик Neo.mjs подумал: "А что если вообще не отправлять HTML?"

И сделал приложение, которое стартует с пустым body. Звучит дико?


🔸Вот как это происходит:

Браузер получает крошечные JS-генераторы, кэширует их один раз, и всё. Дальше с сервера летит только лёгкий JSON с данными — никакого HTML-мусора. Генераторы строят интерфейс на лету, и навигация работает так быстро, что кажется, будто страницы уже загружены.

Внутри этого приложения живёт редактор Monaco — 3 мегабайта кода из VSCode. Обычно такой монстр хоронит любые метрики производительности. Но здесь он летает. Более того — вы пишете код прямо в нём, импортируете модули, и они вживую встраиваются в приложение. Без перезагрузки. Магия? Нет, SharedWorker.


🔸Самое безумное:

Вы можете открыть компонент и буквально вытащить его в другое окно браузера. Не создать копию. Не открыть iframe. А переместить тот же самый JS-объект! Открыли три окна? Они все синхронизированы, делят состояние, работают как один организм.

И вот кульминация: production-версия приложения (минифицированная, оптимизированная) и development-код из редактора работают одновременно в одном SharedWorker, не конфликтуя. До недавнего времени это было технически невозможно.


🔸Почему это важно?

Потому что main thread свободен. Пока другие фреймворки душат браузер вычислениями, Neo.mjs спокойно выдаёт 60 FPS, потому что вся тяжёлая работа в воркере. Плюс экономия трафика — для корпораций с тысячами пользователей это реальные деньги.

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

Код открыт, MIT-лицензия. И да, там спрятан секретный режим "cube layout". Просто потому что можно 😎

Демо | GitHub


📎 Статья

🎙 Новости

📝 База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
#Cloudflare

🔖Cloudflare запустила свой стейблкоин для AI-агентов

Cloudflare представила Net Dollar — криптовалюту, привязанную к доллару 1:1. Но это не очередной стейблкоин для трейдеров, а инфраструктура для "экономики агентов".


🔸Зачем это нужно?
Идея в том, что AI-агенты смогут совершать платежи автоматически: покупать билеты, когда цена упала, оплачивать API-запросы или заказывать продукты. Всё это — без участия человека и мгновенно.

Cloudflare считает, что традиционные банковские переводы слишком медленные для такого сценария. Net Dollar обещает:
• Платежи из любой точки мира
• Мгновенные микротранзакции
• Новую модель монетизации для разработчиков


🔸Что говорит CEO:
"Десятилетиями интернет жил на рекламе и банковских переводах. Следующая эра — это оплата по факту использования и микротранзакции", — Мэтью Принс.

🔸Скептически:
Вопрос в том, нужен ли для этого ещё один стейблкоин, или это решение в поисках проблемы. Пока что AI-агенты с кошельками звучат как концепция из далёкого будущего.


🔸Бонус: на прошлой неделе Cloudflare также анонсировала свой email-сервис — Cloudflare Email Service, который объединит отправку и маршрутизацию писем в одном интерфейсе.


📎 Статья

🎙 Новости

📝 База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#GitHub

🔖Рабочий процесс на GitHub: как работать профессионально

Работа в команде требует чёткой организации. Разбираем ключевые этапы GitHub workflow — от создания issue до слияния кода.

🔸1. Issues — начало всего

Формулируем задачи по шаблону:
[FIX]: Fix auth flow
[STYLE]: Improve login page styling
[FEATURE]: Implement admin dashboard


Крупные задачи разбиваем на подзадачи с префиксом [SUB-FEAT].

🔸2. Ветки

Создаём ветку отдельно от main, чтобы ошибки не попали в продакшн. GitHub позволяет привязать issue к ветке — после мержа проблема закроется автоматически.

Формат именования:
<type>/<issue-number>/<short-description>
fix/92/fix_auth_flow
feature/15/implement_dashboard


🔸3. Коммиты

Правила хорошего коммита:
• Коммитим часто, не ждём завершения всей фичи
• Пишем понятные сообщения до 50 символов
• Используем настоящее время и повелительное наклонение

Примеры:
feat: implement dashboard header
fix: fix data fetching
refactor: improve API readability


Для монорепозиториев добавляем scope:
feat(front): implement dashboard header
feat(back): implement dashboard APIs


🔸4. Pull Request

После пуша создаём PR. Название должно отражать ветку без номера issue:
feature/implement-dashboard
style/improve-login-page-styling


Добавляем описание, связываем с issue, назначаем ревьюверов, ставим метки (bug, feature, enhancement).

🔸5. Code Review

Рекомендуется минимум 2 ревьювера на каждый PR. Это помогает найти больше проблем и делиться знаниями внутри команды.

🔸6. Merge

После аппрува мержим PR — связанная issue закроется автоматически. Не забываем удалить ветку, чтобы держать репо в чистоте.

✔️ Итого:
Issue → Branch → Commits → PR → Review → Merge

Полезные типы:
feat, style, fix, enhance, refactor, docs

Scope'ы для монорепо:
front, back, api, db, docs, test, chore

Лайфхак: используйте Git-хук pre-commit для автоматической проверки формата коммитов.

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


📎 Статья

🎙 Новости

📝 База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
This media is not supported in your browser
VIEW IN TELEGRAM
#Video

🔖Улучшение воспроизведения видео с помощью ExoPlayer

Команда Reddit поделилась практическими советами по оптимизации видео на Android, подкреплёнными реальными production-данными. Разбираем ключевые находки.


🔸Доставка контента: MP4 vs DASH

75% видео на Reddit длятся менее 45 секунд. Команда провела эксперимент: для коротких роликов заменили адаптивный DASH на обычный MP4.

Результаты для видео < 45 сек:
• Ошибки воспроизведения: -5,5%
• Выход до старта видео: -2,5%
• Общие просмотры: +1,7%

Вывод: для короткого контента адаптивные протоколы избыточны — MP4 быстрее и надёжнее.


🔸Кэширование: подводные камни

Проблемы SimpleCache:
• ExternalDir недоступен везде (например, на OPPO) — лучше использовать internalDir
• Может удалять другие файлы — нужна отдельная папка
• Бьёт по диску в конструкторе — создавайте в фоновом потоке
• URL как ключ — если у вас разные сигнатуры, нужна своя фабрика ключей


🔸Предзагрузка контента

Протестировали варианты: следующее видео, два параллельно, только MP4. Лучше всего сработала предзагрузка только следующего видео:

• Загрузка < 500ms: +1,9%
• Загрузка > 1000ms: -0,872%

Попытка учитывать пропускную способность (2-20 Мбит/с) провалилась — метрики ухудшились.


🔸LoadControl: настройка буферизации

По умолчанию значения буфера в ExoPlayer слишком большие для коротких видео. Reddit снизил:
• bufferForPlaybackAfterRebufferMs: 1000ms
• minBuffer и maxBuffer: 20000ms

Результаты:
• Загрузка < 250ms: +2,7%
• Загрузка < 500ms: +4,4%
• Загрузка > 1000ms: -11,9%
• Ребуферинг: -4,8%
• Общие просмотры: +1,5%

Самый впечатляющий эксперимент!


🔸BandwidthMeter и адаптивный битрейт

Проблема: предзагрузка через DownloadManager не учитывалась в общей пропускной способности. После фикса:

• Разрешение видео: +1,4%
• Просмотры в цепочке: +0,5%
• Смена битрейта: -0,5%
• Загрузка > 1000ms: +0,3% (компромисс)


🔸Декодеры

Ошибка 4001 (декодер недоступен) — частая проблема. Решения:
• Включить fallback на программный декодер
• Запрашивать audio focus явно
• Рассмотреть пул плееров или один экземпляр

Fallback снизил ошибки на 0,9%.


🔸Рендеринг: SurfaceView vs TextureView

SurfaceView эффективнее (рендерит на GPU напрямую), но до Android N были проблемы с анимациями.

В Compose постоянное re-inflation занимало до 30ms. Решение — собственный ViewPool:

• Загрузка < 250ms: +1,7%
• Просмотренные минуты: +1,4%
• P50 создания: улучшено в 30 раз (1ms)


🔸Ключевой вывод

Всё упирается в аналитику и A/B-тесты. Обязательные метрики:
• Время до первого кадра
• Ребуферинг
• Старт/стоп воспроизведения
• Ошибки

ExoPlayer предоставляет AnalyticsListener для трекинга.


📎 Статья

🎙 Новости

📝 База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Forwarded from YeaHub
🚀 Прокачиваем подготовку к собеседованиям на максимум!

Если ты ещё не заглядывал(а) в 👍 «Авось Прорвёмся» — самое время.
Это проект Ани для самостоятельной подготовки, где есть:
- 1000+ записей реальных собеседований с разбором задач и вопросов;
- контакты рекрутеров;
- гайды по резюме, трудоустройству и стратегиям поиска работы.
- задачи и вопросы с собеседований

Мы в YeaHub продолжаем добавлять собеседования из этих чатов — теперь их можно проходить в тренажёре, тренируя ответы на реальные вопросы работодателей.

🎧 Сначала слушай, как проходят настоящие собесы,
💡 потом — разбирай и практикуй те же кейсы в тренажёре.


Направления: iOS, Android, Frontend, Python, Go, Java, C#, QA, Analytics.

👉 Обучайтесь, общайтесь, растите вместе с YeaHub и Авось Прорвемся
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3🔥3🤝3