-
Автоматизация создания контента: как я пишу статьи для блога и Telegram-канала
Создание контента — процесс, который требует времени. Однако современные технологии позволяют существенно его ускорить. В этой статье я расскажу, как автоматизировать написание статей, используя Telegram, AI-модели и специализированные инструменты.
От голосовых заметок к статье
Раньше процесс написания статей предполагал долгую работу с текстом: от чернового варианта до окончательной редакции. Однако печатать текст вручную — уже не самый удобный формат. Поэтому я нашел способ делать это быстрее.
- Фиксация идей. Все начинается с голосовых заметок. Я записываю мысли в Telegram (раздел «Избранное»), что позволяет быстро сохранять идеи.
- Автоматическая расшифровка. Пользователи Telegram Premium могут воспользоваться функцией «Расшифровать» для преобразования голосового сообщения в текст.
- Редактура AI. После получения текста я копирую его в Perplexity, ChatGPT или любую другую AI-систему. С помощью простого запроса — «Сделай из этого статью» — AI превращает заметку в готовый текст.
- Доработка. Несмотря на продвинутость AI, он пока не может добавить изображения, расставить ссылки и внести важные редакторские правки. Эти доработки выполняю вручную.
Оптимизация для Telegram-канала
Формат публикаций в Telegram требует специфической структуры:
- Короткие абзацы для удобства чтения
- Грамотно подобранные эмодзи
- Минимальное количество лишнего текста
Чтобы не редактировать статьи вручную перед публикацией в Telegram, я создал Space в Perplexity, который автоматически форматирует текст в нужном стиле. В этом Space прописан промпт, обеспечивающий структурирование статьи по стандартам Telegram.
Если вас заинтересовал мой подход, я разместил готовый промпт в исходнике этой статьи на своем блоге. Вы можете воспользоваться им, чтобы автоматизировать создание контента для своего Telegram-канала.
Ты профессиональный SMM менеджер и готовишь мне публикации в канал Telegram. Я даю тебе ссылку на текст, ты возвращаешь сообщение, которое я сразу копирую и вставляю сразу в сообщение канала. Никаких приветствий и дополнительных фраз от тебя не требуется Предоставленный текст можно немного улучшить стилистически, добавить эмоджи в нужных местах. Оформить по лучшим практикам оформления сообщений в Телеграм. Не сокращай статью. Просто оформи. Не нужно указывать внизу источники, но нужно добавить несколько ссылок в конце сообщения: Дальше текст как есть, не меняй его, но можешь перед добавить релевантный эмоджи: Полная версия статьи в моем блоге - здесь ссылка на статью, которую я дал тебе Заказать консультацию CTO - https://mtkv.ru Не надо указывать блок Sources Не надо делать ссылки с markdown разметкой, в телеграме они не работают. Таблицы телеграм не поддерживает
Итог
Этот процесс позволяет:
✅ Экономить время на написание текстов
✅ Автоматизировать рутину с AI
✅ Упрощать публикации в TelegramЕсли вы занимаетесь контент-маркетингом или ведете корпоративный блог, попробуйте адаптировать этот подход под свои задачи. Удачи!
-
Вайб-кодинг: миф или реальность?
Сегодня поговорим о концепции, которая вызывает интерес у многих разработчиков — вайб-кодинг. Это подход к созданию цифровых продуктов, где вы взаимодействуете с интеллектуальными агентами, способными не только предлагать куски кода, но и редактировать файлы, формируя готовый продукт. Однако давайте разберемся, насколько это реально и какие подводные камни существуют.
Что такое вайб-кодинг?
Вайб-кодинг — это процесс, в котором разработчик взаимодействует с умным редактором кода (например, Cursor или Github Copilot). Основная идея заключается в том, что вы формулируете запрос, а агент генерирует код и даже редактирует файлы. В идеале вы получаете готовый сайт или приложение на выходе.
На первый взгляд звучит как магия: вы описываете проект в нескольких абзацах, и через некоторое время видите результат. Первое впечатление от такого подхода может быть ошеломляющим — продукт запускается, интерфейс работает. Но при более глубоком погружении начинают проявляться проблемы:
- Ненормализованные базы данных: структура данных может оказаться хаотичной.
- Ошибки в логике: агент может забыть о ранее созданных функциях или переписать их несколько раз.
- Отсутствие целостности: без четкого технического задания (ТЗ) продукт будет страдать от архитектурных недочетов.
Почему вайб-кодинг пока не существует в чистом виде?
На текущем этапе развития технологий вайб-кодинг скорее звучит как мечта. Чтобы получить качественный результат, разработчику всё равно приходится:
- Расписывать архитектуру проекта.
- Формулировать контракты между компонентами.
- Создавать модель базы данных и описывать связи таблиц.
- Подробно описывать каждую страницу и её функционал.
По сути, это всё равно превращается в написание технического задания (ТЗ). А как известно, ТЗ писать любят далеко не все.
Кому подходит вайб-кодинг?
Если вы опытный архитектор или разработчик с терпением и навыками планирования, то вайб-кодинг может стать полезным инструментом. При условии, что вы готовы потратить время на детальную проработку проекта и составление ТЗ, результат может быть впечатляющим.
Личный опыт: Perfecto
Для примера рассмотрим продукт Perfecto — проект, который я создал с использованием вайб-кодинга. Однако стоит отметить важный момент:
- Первая версия была попыткой «трушного» вайб-кодинга без четкого плана. Итог оказался плачевным: база данных была хаотичной, код — трудно поддерживаемым, а продукт — уязвимым. Ознакомиться тут: https://app.mtkv.ru/
- Вторая версия была полностью спроектирована заранее: архитектура, ожидания и образ результата были детально описаны. Итог получился гораздо лучше — продукт стал стабильным и удобным для поддержки. Можно ее посмотреть тут https://perf.mtkv.ru/
Снаружи обе версии выглядели одинаково — интерфейс работал. Но разница в качестве кода и удобстве сопровождения была колоссальной.
Чтобы понять всю боль, вот скриншот первой версии:
3300+ строк! Вся логика замешана в одном файле. И это вы еще фронтенд не видели.
Выводы
На данный момент вайб-кодинг — это скорее инструмент для ускорения разработки при наличии четкого плана действий. Без предварительной подготовки он превращается в хаос и головную боль для разработчика.
Если вы хотите попробовать этот подход:
- Будьте готовы к тщательному планированию.
- Используйте его как помощника, а не замену профессиональной разработки.
- Не пренебрегайте техническим заданием — оно остаётся основой успешного проекта.
Возможно, однажды технологии достигнут уровня настоящего вайб-кодинга, где можно будет просто «кайфовать», но пока это лишь мечта.
-
Полезные привычки, которые помогают оставаться в тонусе
Сегодня выходной, и я решил немного отвлечься от темы программирования, чтобы поговорить о привычках, которые помогают быть лучше, заряженным и стремиться к чему-то большему. Это не совсем связано с кодом или архитектурой, но всё же оказывает огромное влияние на нашу продуктивность, здоровье и общее состояние. Хочу поделиться своим опытом и рассказать о тех ритуалах, которые помогают мне двигаться вперёд.
Чтение: зарядка для ума
Чтение — это привычка, которая должна быть у каждого. Она развивает мозг, расширяет кругозор и помогает расслабиться. У меня чтение стало вечерним ритуалом: перед сном я всегда беру в руки книгу. Сейчас я перечитываю цикл «Тёмная башня» Стивена Кинга. Это художественная литература, которая помогает мне переключиться от работы и настроиться на сон.
Но чтение не должно ограничиваться только художественными произведениями. Техническая литература — это ещё один важный аспект. У меня есть своя небольшая библиотека профессиональных книг, которые помогают мне расти как разработчику и архитектору. Например, прямо сейчас на моём столе лежит книга Site Reliability Engineering от Google, которую я с удовольствием читаю. До этого я изучал «Высоконагруженные приложения» (знаменитая книга с кабанчиком), а в ближайших планах — «Совершенный код». Также читаю «Язык программирования Go», чтобы углубить свои знания.
Чтение — это ежедневная тренировка для мозга, и я уверен, что каждый найдёт для себя подходящий формат: будь то художественная литература или профессиональные книги.
Спорт: забота о теле
Вторая важная привычка — спорт. Как разработчики, мы часто понимаем, как устроены системы и процессы. Но важно помнить, что наш организм — это тоже сложная система. Если не держать его в тонусе, то как мы можем ожидать продуктивности от себя?
Я занимаюсь спортом через день: подтягивания, отжимания на брусьях. В этом году я принял для себя челлендж — сделать 10 тысяч подтягиваний и отжиманий за 2025 год. Уже выполнил 4 тысячи и явно перевыполню план! Единственный минус — пришлось обновить гардероб: старая одежда стала мала.
Кроме тренировок важно добавлять прогулки. Мы много времени проводим за компьютерами и телефонами, а движение — это жизнь. Я стараюсь проходить минимум 10 тысяч шагов в день. Если есть возможность, беру детей или супругу на прогулку — это не только полезно для здоровья, но и укрепляет семейные отношения.
Хобби: удовольствие для души
Ещё одна привычка — заниматься чем-то для удовольствия. Для меня это программирование с использованием AI. Я реализую проекты, о которых давно мечтал, но раньше не хватало времени. Это приносит мне радость и одновременно развивает мои навыки.
Важно помнить: работа — это не вся наша жизнь. Даже если вы любите своё дело (как я люблю программирование), находите время для хобби или проектов «для души». Это помогает сохранить баланс между работой и личной жизнью.
Итог
Эти простые привычки помогают мне оставаться в тонусе:
- Чтение: художественная и техническая литература.
- Спорт: тренировки через день и ежедневные прогулки.
- Хобби: занятия тем, что приносит радость.
Каждый из нас может найти свои ритуалы, которые сделают жизнь лучше. Главное — быть последовательным и помнить о балансе между работой и отдыхом.
-
Adminer — Легкий способ заглянуть в БД
Продолжаю серию лайфхаков для разработки своих pet-проектов. Сегодня мы всего за 2 мегабайта заглянем внутрь базы данных на своем сервере.
Для этого нам понадобится Adminer — легковесный интерфейс для просмотра своих таблиц. Больше подходит, конечно, для вашего dev/stage окружения, но можно и на проде, только учитывайте риски и не публикуйте порты наружу для коммерческого продукта.
Все что нужно сделать — добавить в docker compose следующий код:
# Adminer для управления базой данных (доступен только через внутреннюю сеть) adminer: image: adminer:latest depends_on: db: condition: service_healthy restart: unless-stopped environment: - ADMINER_DEFAULT_SERVER=db networks: - app_network # Не публикуем порты наружу для безопасности
Дальше хитрый трюк, хотите открыть его в браузере у себя на компьютере? Запустите команду ssh туннеля для маппинга портов:
ssh -L 8080:localhost:8080 user@remote_server_ip
Это одна из тех команд, которые я хотел бы знать гораздо раньше в своей карьере. Теперь на локалхосте у вас удаленный сайт открывается, и доступен он только вам!
-
Dozzle — как Docker Desktop, только на сервере
Все мы любим красивые логи, которые нам дают ребята из Платформы, где все понятно и хорошо видно. Но что делать со своими pet-проектами? Когда они уже в мини-продакшине, как посмотреть что творится в контейнере?
Раньше я ходил через ssh, подключался интерактивно к контейнеру, смотрел в реальном времени логи, пока не обнаружил шикарный Dozzle!
Всего одна команда и один конфигурационный файл, и вот у вас почти что свой Docker Desktop со всеми контейнерами и всеми логами в реальном времени!
docker run --restart always -d -v /var/run/docker.sock:/var/run/docker.sock -v /data:/data -p 8080:8080 amir20/dozzle --auth-provider simple
и создать перед этим файл в /data/users.yml
users: # "admin" here is username admin: email: me@email.net name: Admin # Generate with docker run amir20/dozzle generate --name Admin --email me@email.net --password secret admin password: $2a$11$9ho4vY2LdJ/WBopFcsAS0uORC0x2vuFHQgT/yBqZyzclhHsoaIkzK filter:
Вот что получаем в итоге:
Доступ к любому контейнеру и его логам. Все это можно через Caddy Server повесить на удобный вам поддомен и в реальном времени смотреть на то как работает ваш сайт. Или не работает, и узнать почему.
-
Шаблон Excalidraw для проведения интервью по системному дизайну
Для проведения интервью можно использовать следующий шаблон — позволяет структурировать ответ и не забыть спросить основные моменты, необходимые для проектирования:
Скачать шаблон для https://excalidraw.com/
-
Сколько вебсокетов можно открыть на один чат сервер?
Количество WebSocket-соединений, которые можно открыть на одном чат-сервере, зависит от нескольких факторов, но теоретически это число может быть очень большим. Рассмотрим основные аспекты:
Теоретический максимум
Теоретически, максимальное количество WebSocket-соединений на одном сервере может достигать огромных значений. Каждое соединение уникально идентифицируется комбинацией IP-адреса клиента и порта источника. Это означает, что теоретический предел составляет около 2^48 (примерно 281 триллион) соединений на один порт сервера.
Практические ограничения
На практике количество соединений ограничивается несколькими факторами:
- Ресурсы сервера: Память, CPU и пропускная способность сети являются ключевыми ограничивающими факторами.
- Настройки операционной системы: Лимиты на количество открытых файловых дескрипторов и сетевых соединений могут ограничивать максимальное число WebSocket-соединений.
- Производительность сервера: С увеличением числа соединений может падать общая производительность системы.
Реальные примеры
- WhatsApp и Phoenix: Эти платформы достигли показателя в 2 миллиона одновременных WebSocket-подключений на одном сервере.
- Эксперименты с Java: Исследователи смогли открыть более миллиона TCP-соединений на одном сервере, что применимо и к WebSocket.
Оптимизация для большого количества соединений
Для поддержки большого числа WebSocket-соединений рекомендуется:
- Использовать асинхронные библиотеки: Они значительно повышают производительность за счет одновременной обработки задач.
- Поддерживать многопоточность: Автоматическая или ручная настройка многопоточности помогает масштабировать производительность.
- Выбирать эффективные языки и фреймворки: NodeJS, Java и C# показали хорошие результаты в тестах производительности WebSocket-серверов.
- Оптимизировать настройки сервера: Увеличение лимитов на файловые дескрипторы и сетевые соединения в ОС может существенно повысить возможности сервера.
- Использовать балансировку нагрузки: Распределение соединений между несколькими серверами позволяет масштабировать систему горизонтально.
В заключение, хотя теоретически возможно открыть миллионы WebSocket-соединений на одном сервере, практическое количество будет зависеть от конкретной конфигурации оборудования, оптимизации программного обеспечения и требований к производительности вашего чат-приложения. Для большинства реальных сценариев использования чат-сервер может эффективно обслуживать тысячи или даже десятки тысяч одновременных WebSocket-соединений при правильной настройке и оптимизации.
-
Какой фреймворк выбрать на основе RPS (Request per second)
Фреймворк Язык RPS Удобство Экосистема Сообщество Документация Масштабируемость Безопасность Интеграция Actix Rust 100000 7 7 8 8 9 9 7 Warp Rust 90000 7 6 7 7 9 9 7 ASP.NET Core C# 60000 9 9 9 9 9 9 9 Fiber Go 60000 8 7 8 8 8 8 8 Gin Go 55000 8 8 9 8 8 8 8 Fastify JS 60000 9 8 8 9 8 8 9 NestJS JS 50000 9 9 9 9 9 9 9 Spring Boot Java 40000 8 10 10 9 10 9 10 Micronaut Java 35000 8 8 7 8 9 9 8 FastAPI Python 30000 9 8 8 9 8 8 8 Django Python 2000 9 10 10 10 8 9 9 Hanami Ruby 2000 7 7 7 7 7 8 7 Rails Ruby 1900 10 10 10 9 8 8 9 Laravel PHP 1000 9 9 10 10 8 8 9 Symfony PHP 900 8 9 9 9 9 9 9 - Удобство: Насколько легко начать работу и разрабатывать с использованием фреймворка.
- Экосистема: Разнообразие и качество доступных библиотек и инструментов.
- Сообщество: Активность и размер сообщества разработчиков.
- Документация: Качество и полнота официальной документации.
- Масштабируемость: Способность фреймворка справляться с ростом нагрузки и размера приложения.
- Безопасность: Встроенные механизмы безопасности и легкость их реализации.
- Интеграция: Простота интеграции с другими технологиями и сервисами.
При выборе фреймворка следует учитывать все эти факторы в контексте конкретного проекта. Например:
- Для быстрой разработки прототипов могут подойти Ruby on Rails или Django.
- Для высоконагруженных систем стоит обратить внимание на Actix, ASP.NET Core или Spring Boot.
- Если важна гибкость и легковесность, то Fastify или Gin могут быть хорошим выбором.
- Для корпоративных приложений с сложной бизнес-логикой Spring Boot или ASP.NET Core предоставляют широкие возможности.
Сколько серверов надо?
MAU (10^n) DAU RPS Серверы (Fiber) Серверы (Django) 10000 (10^4) 3 500 0.61 1 1 100000 (10^5) 35 000 6.08 1 1 1000000 (10^6) 350 000 60.76 1 1 10000000 (10^7) 3 500 000 607.64 1 1 100000000 (10^8) 35 000 000 6076.39 1 4 1000000000 (10^9) 350 000 000 60763.89 2 31 -
Согласованное и рандеву хеширование
Согласованное хеширование (Consistent hashing) — это специальная техника хеширования в компьютерных науках, которая обладает важным свойством: при изменении размера хеш-таблицы требуется перераспределить в среднем только n/m ключей, где n — количество ключей, а m — количество слотов.
Основные особенности
- Эффективность при масштабировании: В отличие от традиционных хеш-таблиц, где изменение количества слотов приводит к перераспределению почти всех ключей, согласованное хеширование минимизирует количество перемещаемых данных.
- Распределение нагрузки: Техника равномерно распределяет ключи кэша по шардам, даже если некоторые шарды выходят из строя или становятся недоступными.
Применение
Согласованное хеширование широко используется в распределенных системах, особенно в:
- Распределенных кэшах
- Системах хранения данных (например, Amazon Dynamo)
- Сетях доставки контента (CDN)
- Балансировке нагрузки
Принцип работы
- Ключи и серверы отображаются на виртуальную окружность (обычно от 0 до 2π).
- Каждый ключ назначается ближайшему серверу по часовой стрелке.
- При добавлении или удалении сервера перераспределяются только ключи, попадающие в его сегмент.
Преимущества
- Минимизация перераспределения данных при изменении количества серверов.
- Улучшение масштабируемости и отказоустойчивости распределенных систем.
Согласованное хеширование стало ключевой технологией для многих современных распределенных систем, обеспечивая эффективное распределение данных и нагрузки
Рандеву-хеширование (Rendezvous hashing) или хеширование с наибольшим случайным весом (HRW) — это алгоритм, позволяющий клиентам достичь распределенного соглашения о выборе k вариантов из n возможных. Этот метод часто применяется в распределенных системах для назначения объектов серверам или прокси.
Основные особенности
- Простота: Алгоритм концептуально прост и легок в реализации.
- Минимальное нарушение: При добавлении или удалении узла перераспределяются только объекты, связанные с этим узлом.
- Равномерное распределение: Обеспечивает равномерное распределение объектов по узлам.
- Поддержка взвешивания: Позволяет учитывать разную мощность узлов.
Принцип работы
- Для каждого объекта и каждого узла вычисляется хеш-значение.
- Объект назначается узлу с наибольшим хеш-значением.
- При изменении набора узлов пересчитываются только затронутые объекты.
Применение
Рандеву-хеширование используется во многих реальных системах, включая:
- Балансировщик нагрузки GitHub
- Распределенная база данных Apache Ignite
- Файловое хранилище Tahoe-LAFS
- Pub/sub платформа Twitter EventBus
Преимущества перед согласованным хешированием
- Более простая концепция и реализация
- Не требует предварительных вычислений или хранения токенов
- Обеспечивает простое решение для распределенного k-соглашения
Рандеву-хеширование становится все более популярным в современных распределенных системах благодаря своей простоте, эффективности и гибкости
Характеристика Согласованное хеширование Рандеву-хеширование Год изобретения 1997 1996 Сложность Более сложный Проще Метод отображения Отображает узлы и ключи на кольцо хеширования Вычисляет хеш-значения для каждой пары ключ-узел Размещение объектов По часовой стрелке на хеш-кольце Выбирает узел с наибольшим хеш-значением Балансировка нагрузки Хорошая, но могут быть горячие точки В целом лучше, более равномерная Масштабируемость Хорошо масштабируется при инкрементных изменениях Менее масштабируемо, пересчитывает все хеши Предварительные вычисления токенов Требует предварительного вычисления и хранения токенов Не требует предварительных вычислений токенов Сложность добавления/удаления узлов O(K/N + log N) O(n) для базовой реализации Перераспределение ключей Минимальное перемещение ключей Объекты перераспределяются на оставшиеся узлы Реальное использование Cassandra, Couchbase GitHub Load Balancer, Apache Ignite, Twitter EventBus -
Какую базу использовать для высоконагруженного приложения?
База данных CAP QPS Масштабирование Оптимизация In memory/Disk based Область применения Apache Cassandra AP До 1 000 000 Горизонтальное Write Disk based Большие данные, IoT Memcached CP До 1 000 000 Горизонтальное Read In memory Кэширование, веб-приложения Redis CP До 500 000+ Горизонтальное Read/Write In memory Кэширование, сессии Amazon DynamoDB AP До 500 000 Автоматическое горизонтальное Read/Write Disk based Веб-приложения, мобильные приложения ClickHouse CP До 300 000 Горизонтальное Read/Write Disk based Аналитика, большие данные Couchbase AP До 200 000 Горизонтальное Read/Write Hybrid Веб-приложения, мобильные приложения PostgreSQL CA До 150 000 Вертикальное, репликация Read Disk based Транзакционные системы, ГИС Oracle Database CA До 120 000 Вертикальное, RAC кластеры Read/Write Disk based Корпоративные приложения, финансы MongoDB CP До 100 000 Горизонтальное и вертикальное Read/Write Disk based Веб-приложения, IoT MySQL CA До 100 000 Вертикальное, репликация Read Disk based Веб-сайты, CMS Etcd CP До 80 000 Горизонтальное Read Disk based Распределенные системы, конфигурации Apache HBase CP До 30 000 Горизонтальное Write Disk based Большие данные, аналитика Microsoft Azure Cosmos DB AP Варьируется Горизонтальное Read/Write Disk based Глобально распределенные приложения InfluxDB CP Варьируется Горизонтальное Read/Write Disk based IoT, мониторинг PostGIS CA Варьируется Вертикальное, репликация Read Disk based ГИС, картография Apache Spark SQL CP Варьируется Горизонтальное Read/Write In memory Аналитика больших данных OpenSearch AP Варьируется Горизонтальное Read Disk based Поиск, логи CouchDB AP Варьируется Горизонтальное Read/Write Disk based Веб-приложения, мобильные приложения Firebird CA Варьируется Вертикальное, репликация Read/Write Disk based Встраиваемые системы, локальные приложения Примечания:
- «In memory» означает, что база данных хранит данные преимущественно в оперативной памяти для быстрого доступа.
- «Disk based» означает, что база данных в основном хранит данные на диске.
- «Hybrid» (как в случае с Couchbase) означает, что база данных использует как память, так и диск для оптимальной производительности.
- Значения QPS являются приблизительными и могут варьироваться в зависимости от конфигурации и нагрузки.