
- Главная
- Каталог
- Интернет технологии
- cherkashin.dev
cherkashin.dev
Александр Черкашин. Бойскаут, Борец с перфекционизмом. Для связи 👉 Фулстек разработчик в decisions.com. Работаю со стеком TypeScript, React, C# Пишу о программировании и не только.
Статистика канала
"You signed in with another tab or window. Reload to refresh your session."Думаю, а как гитхаб понял, что я залогинился в другой вкладке? Пошел смотреть в дев тулзах — соединения по вебсокетам не нашел. Пошел гуглить, узнал, что существует
BroadcastChannel, с помощью которого можно реализовать взаимодействие между вкладками. Не знаю, он ли используется на гитхабе, но фича интересная.
Накидал демку — нужно открыть несколько вкладок и просто нажать "+1", значение обновится во всех вкладках, при этом будет указано, в какой именно вкладке произошло изменение.
Использовать очень просто, создаёшь канал с именем, а дальше из одной вкладки можно отправлять сообщения, а в другой — слушать их и как-то на это реагировать.
const channel = new BroadcastChannel('broadcast-demo');
button.addEventListener('click', () => {
channel.postMessage({
type: 'session:changed'
});
});
channel.onmessage = (event) => {
if (event.data.type === 'session:changed') {
console.log('Получили сообщение из другой вкладки');
}
};{}
👍 — было полезно
👀 — уже знали про BroadcastChannel
#browser #javascript
filters:
and:
- file.ext == "md"
- file.path.startsWith("2.Areas/A.Блог/Посты")
views:
- type: table
name: In Progress
filters:
or:
- file.path.startsWith("2.Areas/A.Блог/Посты/2.InProgress")
- status.contains("➡️ In Progress")
order:
- file.name
- status
- tags
{}
Именно это и содержится в файлах с расширением .base.
🧩 В Notion и Obsidian, есть одно принципиальное различие, при настройке баз данных.
В Notion мы создаём отдельную базу данных, которая хранит записи определённого типа, а затем с помощью фильтров можем показывать только часть этих записей.
Например, если мы строим трекер задач в Notion, у нас будет две базы:
- Задачи
- Проекты
- А на странице проекта мы можем добавить представление, где отображаются только задачи этого проекта.
В Obsidian всё иначе.
У нас есть одна «главная база данных» — все наши заметки. Каждая запись — это обычная текстовая заметка. У заметок нет как такового типа.
Поэтому, чтобы отличить задачи от проектов, мы будем фильтровать их либо по пути заметки, либо по тегу.
Я бы сказал, что это всё же преимущество Notion — там можно гибко совмещать содержимое разных баз в одном представлении. Например, легко создать представление «Заметки, созданные на прошлой неделе».
⚙️ Что умеет?
- Поддерживается 4 типа представлений:
- таблица
- список
- карточки
- карта (если установить дополнительный плагин)
- Поддерживает inline-базы данных — почти как в Notion
- Работают формулы и фильтры
❌ Недостатки
- Нет представления канбан-доски. Это, пожалуй, самое печальное. Надеюсь, со временем добавят.
- Не получится нормально использовать создание новой заметки прямо из базы через кнопку “+ New”, потому что:
- все заметки создаются в дефолтной папке — из-за этого не срабатывает шаблон
- в созданной заметке появляются только те поля, которые сконфигурированы в базе; поля из шаблона не подтягиваются
Подробнее, можно посмотреть тут:
• Умные таблицы в Obsidian. Плагины Bases и DataView. Пошаговая инструкция.
• Умные таблицы в Obsidian. Дополнения к первой части. Вставка в тело страницы. Настройка и синтаксис.
#obsidian1. The movie was good. 2. The movie was bad. 3. The movide was awesome.Кодировка на первой картинке. Формально задача решена, но есть проблема: такие векторы ничего не говорят о смысле слов. Для модели слова «кот» и «собака» так же не похожи друг на друга, как «кот» и «кирпич». Плюс векторы получаются «разреженными» — огромными и почти полностью заполненными нулями. Ну и, конечно, это потребует большого количества ресурсов для обработки. 👉 Следующий шаг — мешок слов и N-граммы. Мы начинаем учитывать не отдельные слова, а их последовательности. Кодировка на второй картинке. Но N-граммы смотрят только на ограниченное число слов и строго по порядку. Поэтому они не улавливают более глубокие смысловые связи. В реальности таких возможных N-грамм — тысячи, и большая часть значений всегда равна 0. То есть, проблема разреженных векторов полностью не уходит. Чтобы модель работала лучше, ей нужно понимать семантику и контекст. Здесь и появляются 🔡 word embeddings. Эмбеддинг — это плотный числовой вектор фиксированной размерности, почти без нулей. Идея в том, что похожие по смыслу слова имеют похожие векторы, а направление в векторном пространстве несёт смысл. В статье это объясняется на наглядном примере с животными. - Сначала берётся одно измерение — размер. Животные с похожими габаритами находятся рядом. - Затем добавляется второе измерение — хищность. В таком пространстве 🦁 «лев» и 🐯 «тигр» оказываются близко (крупные и опасные), 🐄 «корова» — отдельно (крупная, но безопасная), а 🐹 «хомяк» — совсем в другой области. Когда слова представлены такими векторами, с ними можно выполнять математические операции:
V(Madrid) + V(Germany) − V(Spain) ≈ V(Berlin)если мы возьмём слово «Мадрид», добавим «Германия» и вычтем «Испания», ближайшим полученным словом будет «Берлин». Это работает, потому что Мадрид — столица Испании. Когда мы убираем атрибуты, связанные с Испанией, и добавляем атрибуты, связанные с Германией, результирующий вектор тесно совпадает с Берлином, столицей Германии. Сами эмбеддинги генерируются с помощью специально обученных моделей. Ну а про сам подход генерации лучше почитать непосредственно в стать. А на гифке можете посмотреть, как с помощью метода главных компонент визуализировать эмбеддинги. 👍 — если работал с эмбеддингами ❤️ — если интересно, но пока не довелось 👀 — если не твоя тема #ai #fridayreading
Если вы сталкивались с бесконечными перерисовками в React или чинили баг в проде глубокой ночью — то эта подборка для вас. 📂 Забирайте папку с подборкой каналов. P.S. Я беру подборки крайне редко, но они помогают продвижению канала — за счёт этого сюда приходит новая аудитория, а у меня появляется больше мотивации продолжать писать технические разборы и делиться тем, что реально применяю в работе. 🙏 А вы как обычно находите новые каналы? 👍 — через подборки 🔥 — по рекомендациям 🤷♂️ — почти не подписываюсь, читаю точечно◻️ JS, TS, React, Next, Node – с разбором задачек, собесов, архитектуры и почему определенное решение потом аукнется в проде◻️ Авторские блоги людей с опытом, которые уже наломали дров, пережили рефакторинг рефакторинга и могут спокойно объяснить что и как◻️ Fullstack-мысли: от фронта до базы, от API до тёмной темы в админке◻️ Пишут ребята с 5+ лет боевого опыта – делятся тем, о чём не расскажут на курсах◻️ Мемы, кейсы, паттерны и фронт с человеческим лицом
background-image, а это значит, что если нужно изменить цвет иконки по ховеру — придётся подгружать новую иконку (спрайты тоже не можем использовать).
Выглядит это примерно вот так:
.icon {
background-image: url(./icon.svg);
&:hover,
&:focus-visible {
background-image: url(./icon-hover.svg);
}
&--active {
background-image: url(./icon-active.svg);
}
}
{}
🫠 В 2026 году подход, конечно, mask-image.
По сути, мы просто указываем цвет фона, а в качестве маски выступает иконка. В итоге получается, что мы её просто перекрашиваем:
.icon {
mask-image: url(./icon.svg);
background-color: var(--icon-color);
&:hover,
&:focus-visible {
background-color: var(--icon-color-hover);
}
&--active {
background-color: var(--icon-color-active);
}
}
{}
В итоге, чтобы поменять цвет иконки, достаточно изменить background-color. А если иконка используется в кнопке, можно воспользоваться currentColor — ровно так же, как и для SVG.
Может, выглядит так себе (хотя вроде норм, да и выбора у нас всё равно нет), зато у подхода есть ряд преимуществ:
- из коробки работает асинхронная загрузка — не будет проблемы с раздутым бандлом;
- HTML-разметка не раздувается из-за инлайна SVG;
- частично решает проблему зоопарка иконок, так как не нужно хранить иконку для каждого цвета.
Ещё по теме:
1️⃣ Если у вас иконки инлайнятся и раздувают бандлы, советую посмотреть доклад
SVG в React: как автоматизировать процесс добавления новых иконок с прошлого «Я 💛 Фронтенд».
Там рассказано, как решили проблему жирного бандла в Centra — с помощью динамического импорта иконок.
2️⃣ А если вам интересно как с зоопарком иконок боролись в VK — посмотрите доклад Зоопарк иконок: упрощаем работу с иконками для дизайна и разработки. Оказывается дизайнеров тоже можно научить пользоваться гитом и сбросить всю ответственность за иконки на них 😅.
Давайте сверимся по иконкам:
- 👍 — не знал про mask-image;
- ❤️ — использую библиотечные иконки и нет проблем
- 🔥 — просто инлайню SVG
#frontend #cssОтзывы канала
Каталог Телеграм-каналов для нативных размещений
cherkashin.dev — это Telegam канал в категории «Интернет технологии», который предлагает эффективные форматы для размещения рекламных постов в Телеграмме. Количество подписчиков канала в 2.1K и качественный контент помогают брендам привлекать внимание аудитории и увеличивать охват. Рейтинг канала составляет 6.1, количество отзывов – 0, со средней оценкой 0.0.
Вы можете запустить рекламную кампанию через сервис Telega.in, выбрав удобный формат размещения. Платформа обеспечивает прозрачные условия сотрудничества и предоставляет детальную аналитику. Стоимость размещения составляет 3496.5 ₽, а за 0 выполненных заявок канал зарекомендовал себя как надежный партнер для рекламы в TG. Размещайте интеграции уже сегодня и привлекайте новых клиентов вместе с Telega.in!
Вы снова сможете добавить каналы в корзину из каталога
Комментарий