Перейти к содержанию
  • Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы
Свернуть
Логотип бренда
Категории
  • Игры

  • Бекенд, разработка серверов
    Fastify
    ExpressJs
    NestJs
    Node JS

  • Фронтенд
    Angular
    Vue
    React
    NextJs
    svelte

  • Мобильная разработка
    IOS
    Android
    Flutter

  • Разработка игр | 3D | 2D
    Unity
    Unreal Engine
    ThreeJs
    BabylonJs

  • Языки программирования
    Shell
    Dart
    TypeScript
    JavaScript
    Rust
    Swift
    PHP
    Ruby
    SQL
    Lua
    C#
    C++
    Java
    GoLang
    Python
    Общее

  • Базы данных
    MySQL | MariaDB
    Redis
    PostgreSQL
    MongoDB

  • CMS
    WordPress
    MODX
    NodeBB

  • DevOps
    nginx
    CI/CD
    Kubernetes
    Docker

  • Маркетинг

  • Операционные системы
    Windows
    maсOS
    Linux
    Программы

  • Девайсы

  • Новости

  • Юмор, Мемы

Авторизуйтесь, чтобы написать сообщение

  • Все категории
  • kirilljsK
    kirilljs
    Альтернативы Discord без ограничений: 7 платформ для геймеров и 5 инструментов для связи

    Когда Роскомнадзор заблокировал Discord, я, как и многие геймеры, остался без привычного инструмента для общения 😢 . Попытки использовать VPN вылились в постоянные лаги, сбои и раздражение.

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


    Поиск замены Discord

    Я перепробовал десятки сервисов, открыто сравнивая их функционал:

    • Голосовые комнаты: Без них никуда — мы ведь собираемся не только писать, но и общаться в реальном времени.
    • Роли и права: Важно делить участников на админов, модераторов и обычных игроков, чтобы всё было организовано.
    • Стриминг экрана: Без этого сложно обсуждать тактику или показывать новые гайды.
    • Треды и чаты: Чтобы не терять важные обсуждения в потоке сообщений.

    В итоге мой фаворит — Lenza. Почему? Расскажу чуть ниже.


    Мой топ-7 альтернатив Discord

    1. Lenza — мой выбор

    28d5ee78-6a0e-4f02-b5c1-a74ce0561170-image.png

    Когда я перешёл в Lenza, первым делом обратил внимание на её «родную» структуру:

    • Настройка прав: Я как владелец сервера могу запретить создавать каналы всем, кроме админов. Это спасает от хаоса.
    • Роли и команды: Разделил игроков по уровням навыков — новички, средние, профи. Каждая группа получает доступ к своим каналам.
    • Каналы: Публичные — для открытого общения, приватные — для секретных стратегий.
    • Голосовые комнаты: Они всегда активны. Зашёл — и сразу в теме. Можно стримить экран, включить камеру, управлять микрофонами зрителей. В одной комнате даже удаётся запустить 4 трансляции одновременно!
    • Треды и голосовые сообщения: В текстовых чатах удобно создавать отдельные ветки для обсуждений (например, обновления игры). Голосовые можно слушать на ускоренной скорости или переводить в текст — спасибо за это утренним сообщениям, которые я просыпаюсь слушаю на 2x.

    Плюсы, которые меня убедили:

    • Бесплатность.
    • Поддержка стриминга нескольких экранов.
    • Роли, треды и возможность создавать несколько серверов.

    Минусы, которые я заметил:

    • Качество стримов игр пока не такое крутое, как хотелось бы.
    • Ограничение в 15 человек в комнате.
    • Шумоподавления пока нет, но разработчики обещают исправить.

    👉 Перешёл в Lenza — присоединяйтесь!

    2. Element — временный запасной вариант

    d73f117a-1b2e-419a-92a9-c844d9417949-image.png

    Попробовал Element, когда искал платформу с шифрованием. Плюсы:

    • Бесплатность.
    • Приватные серверы.
    • Видеозвонки и стриминг экрана.

    Минусы, которые меня оттолкнули:

    • Нет голосовых комнат.
    • Система ролей слишком простая.
    • Проблемы с контентом — Google уже удалял его из Play Store. В России это риск.

    3. Steam Chat — для тех, кто уже в экосистеме

    1b85b971-6a77-48be-a9c4-6962c624d76b-image.png

    Если вы давно в Steam, этот вариант будет самым простым:

    • Встроенный в клиент.
    • Голосовые комнаты до 50 человек.
    • Стриминг экрана.

    Но: Нет видеозвонков, и без группы Steam нельзя создать голосовой канал.

    4. TeamSpeak — для тех, кто любит настройки

    3c5a1221-bf0e-4b4e-b5eb-a4cea8284841-image.png

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

    Минусы:

    • В бесплатной версии только 32 пользователя на сервере.
    • Нет веб-версии и видеозвонков.

    5. Mumble — для тех, кто готов разбираться

    acf40426-4a38-46dd-b685-c0fbc82c4492-image.png

    Mumble бесплатный и позволяет настраивать уровни доступа. Но интерфейс устарел, а настройка требует времени.

    6. Telegram — если нужен быстрый старт

    63f7621f-418a-4b03-995d-333cca277937-image.png

    Голосовые комнаты в Telegram работают, но нет ролей с уникальными правами. Для серьёзных сообществ не подходит.

    7. Revolt — для смелых

    683cef07-3a9c-4631-8594-27df052a9fd6-image.png

    Revolt интересен, но без видеозвонков и стриминга экрана. Серверы сложно настроить без технических знаний.


    5 сервисов для видеосвязи (без голосовых комнат)

    1. Skype

    Хорош для больших звонков (до 100 человек), но без разделения на каналы.

    2. Wire

    Подходит для маленьких команд, но нет ролей.

    3. Zoom

    Замечательный инструмент для стримов, но ограничение в 40 минут в бесплатной версии раздражает.

    4. VK Звонки

    Удобно делить участников на комнаты, но нет голосовых каналов.

    5. Google Meet

    Хорошее шумоподавление, но без текстовых чатов.


    Lenza — российская разработка, и это важно. Я уверен, что её не заблокируют завтра. Плюс, здесь есть всё, что нужно для геймеров: голосовые комнаты, треды, роли и даже стриминг. Да, есть мелкие недостатки, но разработчики активно их исправляют.


    0 0 0 Ответить
  • kirilljsK
    kirilljs
    Полный гайд по разработке бота на Aiogram

    Так ну что ж, давайте без какого либо вступления сразу в бой 😁
    Будем создавать простого бота на Aiogram, а также хранить пользователей в Sqlite для сбора id.

    Нам понадобятся следующие библиотеки:

    • aiogram (документация тут - https://aiogram.dev)
    • dotenv
    • os
    • aiosqlite
    • asyncio

    И так архитектура у нас будет такая:
    bot.py
    config.py
    commands.py
    sqlite_db.py
    .env

    Начнем с файла bot.py:

    Ах, да не забудьте установить все библиотеки через pip install aiogram dotenv aiosqlite asyncio, os - уже встроен в python.

    Если кому в падлу читать тут, я выложил готовый код на GitHub:

    Link Preview Image
    GitHub - KirillEvo/defaultbot: Default telegram bot + db Sqlite

    Default telegram bot + db Sqlite. Contribute to KirillEvo/defaultbot development by creating an account on GitHub.

    favicon

    GitHub (github.com)

    Файл: bot.py

    import asyncio
    import logging
    
    from aiogram import Bot, Dispatcher, Router, types
    from aiogram.filters import Command
    
    from sqlite_db import SqliteUserDataManager
    
    # Создаем экземпляр базы данных
    data = SqliteUserDataManager()
    
    # Тут импортируем все команды, нам понадобится только старт
    
    from commands import (
        start_command,
        allusers_command
    )
    
    # Также добавим логирование что бы видеть ошибки
    # Настройка логирования
    logging.basicConfig(
        format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", level=logging.INFO
    )
    logger = logging.getLogger(__name__)
    
    # Импорт конфигурации
    from config import TOKEN
    
    # Создаем основной роутер
    main_router = Router()
    
    
    # Регистрируем роутер для вызова команды /start
    @main_router.message(Command("start"))
    async def handle_start(message: types.Message):
        await start_command(message, data)
    
    @main_router.message(Command("users"))
    async def handle_users(message: types.Message):
        await allusers_command(message, data)
    
    
    async def main():
        # Инициализация бота
        global bot
        bot = Bot(TOKEN)
        dp = Dispatcher()
    
        # Регистрируем роутер
        dp.include_router(main_router)
    
        # Запуск бота
        logger.info("🤖 Бот запущен")
        await bot.delete_webhook(drop_pending_updates=True)
        await dp.start_polling(bot)
    
    
    if __name__ == "__main__":
        asyncio.run(main())
    

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

    После того как мы заполним bot.py приступаем к написанию кода для хранения базы данных:
    Файл: sqlite_db.py

    import asyncio
    import aiosqlite
    from pathlib import Path
    
    # Создаем класс нашей БД с методами
    class SqliteUserDataManager:
        def __init__(self, db_file="users.db"):
            self.db_file = Path(db_file)
            self.lock = asyncio.Lock()
            self.initialized = False
    
    
        # Этот код представляет собой асинхронный метод _ensure_db_exists, который проверяет и при необходимости создает базу данных SQLite с таблицей users.
        async def _ensure_db_exists(self):
            if self.initialized:
                return
                
            # Использование асинхронного блокировщика для предотвращения race condition (состояния гонки), когда несколько потоков/корутин могут попытаться инициализировать базу одновременно
            async with self.lock:
                if self.initialized:  # Дважды проверьте блокировку
                    return
                
                # Подключение к SQLite базе данных с использованием асинхронной библиотеки aiosqlite.
                async with aiosqlite.connect(self.db_file) as db:
                    await db.execute('''
                        CREATE TABLE IF NOT EXISTS users (
                            user_id INTEGER PRIMARY KEY,
                            username TEXT,
                            subscribed BOOLEAN DEFAULT 1,
                            created_at REAL
                        )
                    ''')
                    await db.commit()
                self.initialized = True
            
        # Этот код представляет собой асинхронный метод add_user, который добавляет пользователя в базу данных SQLite.
        async def add_user(self, user_id, username=None):
            await self._ensure_db_exists()
            async with self.lock:
                async with aiosqlite.connect(self.db_file) as db:
                    await db.execute(
                        '''
                        INSERT OR IGNORE INTO users (user_id, username, created_at)
                        VALUES (?, ?, ?)
                        ''',
                        (user_id, username, asyncio.get_event_loop().time())
                    )
                    # Обновляем имя пользователя, если оно изменилось
                    if username is not None:
                        await db.execute(
                            "UPDATE users SET username = ? WHERE user_id = ?",
                            (username, user_id)
                        )
                    await db.commit()
        
        # Этот код представляет собой асинхронный метод get_user, который получает информацию о пользователе из базы данных SQLite по его ID.
        async def get_all_users(self):
            await self._ensure_db_exists()
            async with self.lock:
                async with aiosqlite.connect(self.db_file) as db:
                    cursor = await db.execute("SELECT * FROM users")
                    rows = await cursor.fetchall()
                    return {
                        row[0]: {
                            "username": row[1],
                            "subscribed": bool(row[2]),
                            "created_at": row[3]
                        } for row in rows
                    }
    

    После написание методов для Sqlite переходим к commands.py:

    # Импортируем настройки ID админа из нашего файла config.py
    from config import ADMIN_ID
    
    # Простая команда которая отдает приветствие при выполнении /start в самом боте
    async def start_command(message, data):
        user = message.from_user
        await data.add_user(user.id, user.username)
        await message.answer("Прииииивеееееет!",)
    
    # Команда для получения списка всех пользователей, но только для админа
    async def allusers_command(message, data):
        user_id = message.from_user.id
        admin_id = int(ADMIN_ID)
    
        if user_id != admin_id:
            await message.answer("❌ У вас нет прав для выполнения этой команды.")
            return
    
        try:
            users = await data.get_all_users()
            count = len(users)
            await message.answer(f"Количество пользователей: {count}")
        except Exception as e:
            await message.answer("Ошибка при получении списка пользователей.")
            print(f"[ERROR] {e}")
    

    Ну и конечно же не забываем о файле: config.py

    import os
    from dotenv import load_dotenv
    load_dotenv()
    
    TOKEN = os.getenv("TOKEN")
    ADMIN_ID = os.getenv("ADMIN_ID")
    

    На этом все! Запускайте своих ботов и тестируйте.
    Если будут вопросы пишите в комментариях на форуме.

    defbot.png


    Кстати не забудь подписаться на мой ТГ канал и еще оставлю ссылку на своего бота для скачивания клипов из ТикТока 😊

    Link Preview Image
    Kirilljs

    Обо всем и не о чем сразу 👨🏻‍💻

    favicon

    Telegram (t.me)

    Сам бот:

    Link Preview Image
    Скачать видео ВК Клипы | ТикТок

    🤖 Умею скачивать видео из VK Clips, TikTok, Yappy.

    favicon

    Telegram (telegram.me)


    0 0 0 Ответить
  • kirilljsK
    kirilljs
    Что такое Lambda простыми словами

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


    Где применяются lambda-выражения?

    1. Функции высшего порядка
      Lambda часто используются в функциях, принимающих другие функции как аргументы, например:

      • map (применение функции ко всем элементам коллекции),
      • filter (фильтрация по условию),
      • reduce (свертка коллекции в одно значение).

      Пример (Python):

      numbers = [1, 2, 3, 4]
      squared = list(map(lambda x: x**2, numbers))  # [1, 4, 9, 16]
      
    2. Сортировка с кастомным ключом
      Lambda позволяет указать правило сортировки без создания отдельной функции.

      Пример (Python):

      data = [(1, 'a'), (3, 'c'), (2, 'b')]
      sorted_data = sorted(data, key=lambda x: x[1])  # Сортировка по второму элементу кортежа
      
    3. Обработчики событий в GUI
      Удобны для привязки действий к кнопкам или событиям в интерфейсах.

      Пример (Python + Tkinter):

      button = Button(root, text="Click", command=lambda: print("Clicked!"))
      
    4. Асинхронное программирование
      Используются в колбэках или асинхронных задачах, где требуется краткая реализация логики.

    5. Функциональные интерфейсы (Java)
      В Java лямбды упрощают работу с функциональными интерфейсами, например, в потоках (Stream API).

      Пример (Java):

      List<String> list = Arrays.asList("a", "b", "c");
      list.forEach(item -> System.out.println(item));  // Вывод каждого элемента
      
    6. STL-алгоритмы в C++
      Лямбды часто применяются в алгоритмах библиотеки STL, например, std::transform.

      Пример (C++):

      std::vector<int> v = {1, 2, 3};
      std::transform(v.begin(), v.end(), v.begin(), [](int x) { return x * 2; });
      

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

    • Краткость: Не требуют объявления с помощью def или function.
    • Локальность: Четко показывают, что функция используется однократно.
    • Читаемость: Упрощают код при работе с функциями высшего порядка.

    Ограничения:

    • Одно выражение: В большинстве языков лямбда возвращает результат только одного выражения.
    • Сложность: Слишком длинные или вложенные лямбды ухудшают читаемость.
    • Нет документации: Отсутствие имени и комментариев затрудняет понимание логики.

    Примеры на разных языках:

    • Python:

      add = lambda a, b: a + b
      print(add(2, 3))  # 5
      
    • JavaScript:

      const multiply = (x, y) => x * y;
      console.log(multiply(2, 3));  // 6
      
    • Java:

      (int a, int b) -> a + b
      
    • C++:

      auto sum = [](int a, int b) { return a + b; };
      

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


    0 0 0 Ответить
  • kirilljsK
    kirilljs
    🔥 Полезные библиотеки Python Astor

    7d720d12-fa39-4d7b-a659-cfcf1607e84e-image.png

    📌 Это библиотека для преобразования AST (абстрактного синтаксического дерева) обратно в исходный Python-код, а также для анализа и модификации кода.

    📌 Особенности библиотеки:
    🟠Преобразует AST → Python-код (unparsing)
    🟠Удобна для автогенерации и модификации кода
    🟠Поддерживает сохранение форматирования и комментариев (частично)

    ⚙ Установка:

    pip install astor
    

    0 0 0 Ответить
  • kirilljsK
    kirilljs
    Топ популярных Telegram-ботов и нейросетей для создания обнажённых портретов по фото

    cc119eaf-c83f-4958-8ef0-2f829ba65bcf-image.png

    Топ-66 популярных Telegram-ботов и нейросетей для создания обнажённых портретов по фото
    Возможность создания обнажённых портретов знакомых или незнакомых людей по фотографии привлекла внимание множества пользователей. Для удовлетворения интереса к AI-генерации были разработаны десятки сервисов и Telegram-ботов, способных удалить одежду с изображения за считанные минуты. Представленный ниже обзор поможет выбрать оптимальный инструмент, учитывая функционал, стоимость и скорость работы. Это позволит получить качественный результат, сохранив конфиденциальность данных.


    Часто задаваемые вопросы

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

    2. Сколько времени занимает обработка фото?
    Время зависит от алгоритма сервиса. В большинстве случаев процесс занимает до 30 секунд, особенно при использовании Telegram-ботов.

    3. Сохраняются ли обработанные изображения?
    Политика конфиденциальности у каждого ресурса своя. Однако большинство платформ автоматически удаляют загруженные фото после завершения генерации.

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

    5. Насколько точными получаются результаты?
    Современные нейросети обеспечивают высокую степень реалистичности, точно передавая анатомические детали и текстуры кожи.


    Telegram-боты для создания обнажённых изображений

    Telegram остаётся одним из самых популярных мессенджеров, где собраны десятки ботов для редактирования фото. Ниже представлены лучшие из них:

    • Obrabotka_fotog_bot
      Интуитивно понятный бот с современным дизайном интерфейса, позволяющий быстро удалить одежду.

    • Intim Nuds Bot
      Достаточно загрузить снимок и дождаться завершения обработки.

    • Нудификатор
      Быстро устраняет одежду за несколько секунд.

    • NuGoddess
      После оплаты пользователь получает детализированный взгляд на скрытые части тела.

    • Убрать одежду
      Простой инструмент с понятным описанием принципа работы.

    • Раздеватель
      Стоимость — 150 рублей за два изображения.

    • Раздевалка
      Обработка одного фото — 80 рублей.

    • NUTiffany
      Один из самых быстрых ботов с поддержкой пользователей.

    • NuChristmas
      Гарантирует качественный результат.

    • t.me/po_foto_obrabotka_bot
      Позволяет не только раздеть объект, но и изменить одежду.

    • Body Scanner
      Доступ открывается после принятия пользовательского соглашения.

    • t.me/obnajator_bot
      Отличается скоростью работы и фотореалистичностью.

    • NuRoom
      Бесплатный онлайн-сервис с минимальным временем ожидания.

    • Раздеватор AI
      Популярный инструмент с гарантией качества.

    • Тетя Нюда
      Бесплатно обрабатывает одно фото.

    • BodyScanner
      Первым двум изображениям — выбор из вариантов.

    • Razdevaka
      10 фото за 299 рублей с последующими скидками.

    • NuRoom📸
      Регулярные розыгрыши бесплатных обработок.

    • Голобот
      Минимальная стоимость услуги.

    • NuEasy.ai
      Доступные цены и высокое качество.

    • DeepNudify
      От 145 рублей за два фото.

    • Раздеватор
      Фиксированная цена: 300 рублей за 5 фото, 940 — за 20.

    • Photo Undress
      5 фото от 250 рублей.

    • NakedGirls
      Безлимит за 1000 рублей.

    • PerfectPower 😈
      От 99 рублей за два снимка.

    • tits nacked
      Цена зависит от выбранного пакета, минимальная — 20 рублей.

    • НюдЭффейс
      80 рублей за одно фото.

    • Нейро Пиксель
      Обработка одного изображения за 80 рублей.

    • Раздевальник
      Простой интерфейс, 80 рублей за фото.

    • RazdevROOM
      Минимальная стоимость — 80 рублей.

    • Раздеть девушку бот
      От 80 рублей за изображение.

    • Любители
      Качество за 100 рублей.

    • Dream Maker
      Минимум — 100 рублей.

    • RT Раздевалка
      Доступные цены и простота использования.

    • Nubee.ai
      Бесплатные фото для новых пользователей.

    • @AIPiPi_bot
      Высокое качество по минимальным ценам.

    • BraUndress Bot
      Первое раздевание — бесплатно.

    • @ClothOff
      Быстрая обработка.

    • AdvancedPi Bot
      5 бесплатных попыток при подписке.

    • @AnotherRemoveClothesBot
      Обработка занимает около 10 минут, ежемесячно доступна бесплатная попытка.

    • CloLess
      2 бесплатных обработки для новичков.

    • Ray Bot
      Одно бесплатное раздевание после регистрации.

    Особенности использования указаны в описаниях ботов.


    Платформы с нейросетями для создания обнажённых портретов

    Среди популярных платформ выделяются следующие:

    • UndressApp
      До 10 бесплатных преобразований с выбором зон редактирования.

    • Soulgen
      Создание аниме-персонажей или реалистичных девушек через текстовые теги.

    • undressing.io
      30 бесплатных токенов для обработки.

    • Clothoff Web App
      Одна бесплатная обработка после регистрации.

    • NSFWartgenerator.ai
      Воплощает фантазии с NSFW-тегами.

    • Nudify.online
      2 бесплатных попытки и выбор из 5 стилей.

    • Deepnude.cc
      Реалистичные изображения без одежды.

    • Deep-Nude AI
      Обработка фото подруги с реалистичным результатом.

    • UndressAI.com
      Обработка за секунды и 6 обновлений.

    • Deepswap.ai
      50% скидка на подписку для новых пользователей.

    • Nudefusion
      1 бесплатная обработка любого фото.

    • AIporn.net
      VIP и бесплатные планы.

    • NDFY
      Популярное приложение для обнажения.

    • DeepNudeTo
      5 бесплатных фото, затем платные планы от $10.

    • DeepNudify
      Неограниченное количество обработок с водяными знаками.

    • DnGG
      Бесплатные изображения с размытием.

    • Deepsukebe.io
      Популярность среди международных пользователей.

    • SukebeZone
      План от $13 за 50 фото.

    • Deepnude.com
      Официальный сайт недоступен.

    • FakeNudes.com
      Поддельные изображения вместо реальных.

    • Deepnudenow.com
      Работает через VPN, быстрая обработка.

    • Deep-nude.co
      Водяные знаки на изображениях.

    • NewFuku.com
      Только платные планы.

    • candy.ai
      Быстрая и качественная обработка.

    Список ресурсов регулярно обновляется, появляются новые домены.


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


    0 0 0 Ответить
  • kirilljsK
    kirilljs
    Суть Telegram-ботов: автоматизация, функционал и практическое применение

    2516e01b-049e-4111-9ad0-70565783d8a5-image.png

    Telegram-боты — это программные интерфейсы, автоматически взаимодействующие с пользователями в мессенджере Telegram. Они созданы с помощью Bot API, который предоставляет Telegram, и могут выполнять широкий спектр задач: от ответов на запросы до управления бизнес-процессами. Разберёмся, как работают боты, зачем они нужны и как их использовать.


    Что такое Telegram-бот?

    Telegram-бот — это автоматизированный аккаунт, который:

    • Не требует регистрации как у человека (создаётся через специальный бота @BotFather).
    • Взаимодействует с пользователями через текстовые сообщения, кнопки, медиафайлы и команды.
    • Не может инициировать диалог без предварительного запроса пользователя (кроме случаев, когда бот добавлен в группу).

    Боты не имеют профилей, фотографий или статусов, как обычные пользователи. Их «лицо» — это аватар и описание, заданные при создании.


    Как создаются боты?

    1. Регистрация через @BotFather:

      • Пользователь общается с ботом @BotFather, чтобы получить уникальный токен — ключ для доступа к Bot API.
      • Токен используется для настройки сервера, который будет обрабатывать входящие запросы от Telegram.
    2. Технологии разработки:

      • Боты пишутся на языках программирования, таких как Python, JavaScript (Node.js), PHP и других.
      • Для работы требуется сервер или облачное хостинг-решение (например, TimeWeb).
      • Основной инструмент — Telegram Bot API, который предоставляет методы для отправки сообщений, обработки команд и взаимодействия с пользователями.

    Пример простого бота на Python:

    import telebot
    
    bot = telebot.TeleBot("ВАШ_ТОКЕН")
    
    @bot.message_handler(commands=["start"])
    def send_welcome(message):
        bot.reply_to(message, "Привет! Я бот, который повторяет ваши сообщения.")
    
    @bot.message_handler(func=lambda message: True)
    def echo_all(message):
        bot.reply_to(message, message.text)
    
    bot.polling()
    

    Этот код создаёт бота, который приветствует пользователей по команде /start и повторяет их сообщения.


    Функциональные возможности ботов

    1. Обработка команд и текста:

      • Боты реагируют на команды вроде /help или ключевые слова.
      • Могут анализировать текст и отвечать на основе алгоритмов ИИ (например, чат-боты с нейросетями).
    2. Inline-режим:

      • Позволяет вызывать бота в любом чате через @username для поиска информации (например, GIF, новостей, товаров).
    3. Клавиатуры и кнопки:

      • Боты создают интерактивные меню с кнопками для выбора действий.
      • Пример: бот-опросник с вариантами ответов.
    4. Интеграция с внешними сервисами:

      • Подключение к API сторонних платформ (например, прогноз погоды, переводчик, платежные системы).
    5. Работа в группах и каналах:

      • Боты могут модерировать контент, отвечать на вопросы участников или автоматически публиковать посты.

    Типы Telegram-ботов и их применение

    1. Информационные боты:

      • Предоставляют данные в реальном времени: курсы валют, погода, новости.
    2. Чат-боты поддержки:

      • Автоматизируют обслуживание клиентов, отвечают на частые вопросы.
      • Пример: боты для заказа пиццы, бронирования билетов.
    3. Обучающие и развлекательные:

      • Языковые тренажёры, игры, викторины.
    4. Бизнес-инструменты:

      • Интеграция с CRM, автоматизация маркетинга, рассылка уведомлений.
      • Пример: бот для уведомлений о заказах в интернет-магазине.
    5. Медиа и файлы:

      • Скачивание видео с TikTok / ТикТок, конвертация файлов, генерация изображений.
      • Пример: @vkclipssavebot.

    Преимущества Telegram-ботов

    • Доступность: Пользователи не нуждаются в установке дополнительных приложений.
    • Автоматизация: Снижение нагрузки на сотрудников за счёт рутинных задач.
    • Масштабируемость: Боты могут обслуживать миллионы пользователей одновременно.
    • Безопасность: Боты не имеют доступа к личным данным, если пользователь их не предоставит.

    Как найти и использовать бота?

    1. Поиск через @BotFather:

      • Введите /search в диалоге с @BotFather и укажите тему (например, «погода»).
    2. Telegram-каталоги:

      • Сайты вроде tgstat.ru или telegram.botlist.ru предлагают рейтинги и категории.
    3. Команды:

      • После запуска бота введите /help, чтобы узнать доступные функции.

    Перспективы развития

    С развитием искусственного интеллекта боты становятся «умнее»: они могут вести диалоги, анализировать настроение и адаптироваться под предпочтения пользователей. В будущем ожидается интеграция с голосовыми помощниками и AR-технологиями.


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


    0 0 0 Ответить
  • kirilljsK
    kirilljs
    При каком режиме мышка садится быстрее при 2.4 или BT ?

    Кто знает вообще за такое?

    Я купил себе мышку Razer Basilisk v3 hyperspeed, только вот эта скотина жрет аж по 2 батарейки дюрасел в месяц!!! 😰

    019ad5a6-bde4-416d-a7fb-009b9d898c2b-image.png


    5 0 0 Ответить
  • kirilljsK
    kirilljs
    Промпт на воронку продаж

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

    1

    В каждом бизнесе есть воронка продаж, по которой идут клиенты в сторону сделок и покупок. В каждом бизнесе на этом пути воронки продаж есть этап, который предопределяет сделку. Я называю его «конвертер». То есть, чем больше потенциальных клиентов окажутся на конвертере, тем выше шанс, что они купят наш продукт. 
    
    Примеры таких конвертеров: аудит, замер, диагностика, примерка, пробный период, пробная партия, индивидуальный рассчет, живая или онлайн встреча, вебинар и так далее.
    
    Понял, о чем я говорю?
    

    2

    Также, помимо того, чтобы правильно определить конвертер, надо еще его наполнить ценностью, чтобы клиент охотно соглашался на него прийти. Чтобы было глупо не «посетить» конвертер.
    
    Например, не просто пробный урок на гитаре, а:
    - бесплатный пробный урок на гитаре
    - научим за 1 час играть с нуля 1 песню из 10 самых популярных
    - здание школы в центре города в шаговой доступности от метро
    - на уроке проведем тестирование, каковы ваши шансы стать супер-звездой в шоу-бизнесе
    - проведет тест, на какого мирового легендарного гитариста по стилю вы более всех похожи
    - подарим виниловую пластинку с вашим любимым исполнителем
    
    Понял о чем я?
    

    3

    Я бы хотел тебе называть разные ниши теперь, а ты предлагал лучший конвертер для нее и 5-10 идей, как можно этот конвертер усилить оффером на него, чтобы было очень круто, ценно для клиента и продающе
    
    идет?
    

    4

    // А тут уже пишем необходимую нишу
    

    0 0 0 Ответить
  • kirilljsK
    kirilljs
    Как сделать кнопку в HTML

    Создание кнопки в HTML — базовый навык для интерактивных элементов на сайте. Вот несколько способов, как это сделать:


    1. Базовый синтаксис: тег <button>

    <button>Нажми меня</button>
    
    • Простой и универсальный способ.
    • Поддерживает вложенные элементы (например, текст, иконки, изображения).

    Пример:

    <button>Отправить форму</button>
    

    2. Кнопка-ссылка

    Если нужно сделать кнопку, которая ведет на другую страницу:

    <a href="https://example.com" class="button">Перейти на сайт</a>
    
    • Стилизуется через CSS (класс button).
    • Подходит для навигации.

    3. Кнопка в форме

    Для отправки формы используется тип submit:

    <button type="submit">Отправить</button>
    

    Типы кнопок:

    • submit — отправка формы.
    • reset — сброс данных формы.
    • button — обычная кнопка (событие через JavaScript).

    4. Атрибуты кнопки

    • disabled — отключает кнопку:
      <button disabled>Заблокировано</button>
      
    • name и value — для передачи данных в форме:
      <button name="action" value="save">Сохранить</button>
      

    5. Стилизация кнопки через CSS

    Пример базовой стилизации:

    <style>
      .my-button {
        background-color: #4CAF50; /* Зеленый фон */
        border: none;              /* Без рамки */
        color: white;              /* Белый текст */
        padding: 10px 20px;        /* Отступы */
        text-align: center;        /* Выравнивание */
        font-size: 16px;           /* Размер шрифта */
        cursor: pointer;           /* Курсор */
        border-radius: 5px;        /* Закругленные углы */
      }
    </style>
    
    <button class="my-button">Кнопка</button>
    

    6. Анимация и эффекты

    Добавьте ховер-эффект:

    .my-button:hover {
      background-color: #45a049; /* Темно-зеленый при наведении */
    }
    

    Или тень:

    .my-button {
      box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
    }
    

    7. Кнопка с иконкой

    Вложите изображение или иконку внутрь:

    <button class="icon-button">
      <img src="icon.png" alt="Иконка"> Кнопка
    </button>
    

    Или используйте шрифтовые иконки (например, Font Awesome):

    <button class="icon-button">
      <i class="fas fa-save"></i> Сохранить
    </button>
    

    8. Обработка нажатия через JavaScript

    Добавьте событие клика:

    <button onclick="showMessage()">Нажми меня</button>
    
    <script>
      function showMessage() {
        alert('Кнопка нажата!');
      }
    </script>
    

    9. Адаптивная кнопка

    Сделайте кнопку адаптивной:

    .my-button {
      width: 100%;       /* На всю ширину контейнера */
      max-width: 300px;  /* Максимальная ширина */
    }
    

    10. Полезные советы

    • Доступность: Добавляйте атрибуты aria-label для экранного доступа:
      <button aria-label="Закрыть">✖</button>
      
    • Центрирование: Используйте Flexbox:
      <div style="display: flex; justify-content: center;">
        <button>Центральная кнопка</button>
      </div>
      
    • Оптимизация: Не используйте слишком большие изображения внутри кнопок.
    • Мобильные устройства: Убедитесь, что кнопка удобна для тапов (минимум 44x44 пикселя).

    Пример готового кода

    <!DOCTYPE html>
    <html>
    <head>
      <title>Кнопка</title>
      <style>
        .styled-button {
          background-color: #008CBA;
          color: white;
          padding: 12px 24px;
          border: none;
          border-radius: 4px;
          font-size: 16px;
          cursor: pointer;
        }
        .styled-button:hover {
          background-color: #005f73;
        }
      </style>
    </head>
    <body>
      <button class="styled-button" onclick="alert('Ура!')">Кликни меня</button>
    </body>
    </html>
    

    Теперь вы умеете создавать и стилизовать кнопки! 🎯


    Link Preview Image
    Kirilljs

    Обо всем и не о чем сразу 👨🏻‍💻

    favicon

    Telegram (t.me)


    2 0 0 Ответить
  • kirilljsK
    kirilljs
    Как вставить картинку в HTML

    Чтобы добавить изображение на веб-страницу, используется тег <img>. Вот основные шаги:


    1. Базовый синтаксис

    <img src="путь/к/файлу.jpg" alt="Описание изображения">
    
    • src — путь к изображению (обязательный атрибут).
    • alt — текст, отображаемый, если изображение не загрузилось (важно для SEO и доступности).

    2. Форматы изображений

    Поддерживаемые форматы:

    • JPEG — для фотографий.
    • PNG — для изображений с прозрачностью.
    • GIF — для анимации.
    • SVG — векторные изображения (масштабируются без потерь качества).
    • WebP — современный формат с отличным сжатием.

    Пример:

    <img src="logo.png" alt="Логотип компании">
    

    3. Пути к файлам

    • Относительный путь (файл в папке сайта):
      <img src="images/photo.jpg" alt="Фотография">
      
    • Абсолютный путь (файл на другом сайте):
      <img src="https://example.com/photo.jpg" alt="Внешнее изображение">
      

    4. Размеры изображения

    Можно задать ширину и высоту:

    <img src="photo.jpg" width="300" height="200" alt="Картинка">
    

    ⚠️ Совет: Лучше использовать CSS для управления размерами:

    <img src="photo.jpg" style="width: 300px; height: auto;" alt="Картинка">
    

    5. Дополнительные атрибуты

    • title — всплывающая подсказка при наведении:
      <img src="photo.jpg" alt="Картинка" title="Наведите сюда">
      
    • loading="lazy" — отложенная загрузка (для ускорения страницы):
      <img src="big-image.jpg" alt="Большая картинка" loading="lazy">
      

    6. Пример готового кода

    <!DOCTYPE html>
    <html>
    <head>
      <title>Пример</title>
    </head>
    <body>
      <h1>Моя страница</h1>
      <img src="images/sunset.jpg" alt="Закат над морем" width="600" height="400">
    </body>
    </html>
    

    7. Полезные советы

    • Храните изображения в отдельной папке (например, images/).
    • Используйте описательные имена файлов (например, dog-running.jpg вместо img123.jpg).
    • Оптимизируйте изображения перед загрузкой (сжатие через инструменты вроде TinyPNG или Squoosh).

    Теперь вы знаете, как вставить картинку в HTML! 🎨


    0 0 0 Ответить
  • kirilljsK
    kirilljs
    Национальный мессенджер России: как будет работать интеграция с госуслугами и какие функции получит платформа

    bc1f117b-e35a-4515-b42f-59bc2a84fb7e-image.png

    Что такое новый российский мессенджер и зачем он создан?

    31 мая 2025 года Госдума РФ единогласно приняла законопроект о разработке национального мессенджера, который объединит коммуникационные функции и доступ к государственным услугам. Цель проекта — создать безопасную цифровую среду для общения и взаимодействия с госорганами. В новом приложении будут доступны чат-боты, мини-приложения от российских компаний, а также возможность подтверждения личности через цифровой ID. В статье разберем ключевые особенности платформы, её преимущества и этапы реализации.


    Основные характеристики нового мессенджера

    Интеграция с государственными сервисами

    Главная цель проекта — создание единой цифровой экосистемы, где пользователи смогут:

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

    Технические решения

    • Хранение данных: вся информация будет размещаться на серверах в России в обезличенном виде.
    • Многофункциональность: платформа станет аналогом WeChat, объединив переписку, звонки, финансовые операции и бизнес-сервисы (например, онлайн-покупки или заказ еды).
    • Совместимость: мессенджер интегрируется с уже существующими российскими платформами, такими как «Госуслуги» и Max от VK.

    Почему Telegram и WhatsApp не стали основой для проекта?

    По словам Минцифры РФ, использование иностранных мессенджеров ограничено из-за:

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

    Вместо этого выбрали российскую платформу Max (развитие которой ведет VK). Её преимущество — готовая инфраструктура для добавления новых функций, включая мини-приложения и чаты с госорганами.


    Как будет работать цифровой ID в мессенджере?

    Цифровой идентификатор станет центральным элементом платформы. С его помощью можно будет:

    1. Подтверждать личность в онлайн-магазинах, банках и государственных учреждениях.
    2. Получать доступ к льготам и социальным выплатам.
    3. Подписывать договоры и отправлять документы в электронном виде.

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


    Этапы реализации проекта

    Этап Описание
    Разработка Создание базовой версии мессенджера на основе Max.
    Тестирование Пилотный запуск среди госслужащих и сотрудников бюджетных организаций.
    Интеграция сервисов Подключение госучреждений, банков и частных компаний.
    Массовый запуск Общий доступ для всех желающих.

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


    Преимущества для пользователей и бизнеса

    Для граждан:

    • Удобство: единая платформа для общения, госуслуг и финансовых операций.
    • Безопасность: данные остаются в России, риск мошенничества снижается.
    • Экономия времени: отсутствие необходимости носить бумажные документы.

    Для бизнеса:

    • Новые каналы продаж: интеграция мини-приложений для заказа товаров и услуг.
    • Снижение издержек: автоматизация взаимодействия с клиентами через чат-боты.
    • Соответствие требованиям: возможность использования в госзакупках и тендерах.

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


    5 0 2 Ответить
  • kirilljsK
    kirilljs
    Как вычислить размер шрифта для блока div с заданным размером?

    Столкнулся с задачей: нужно, чтобы текст внутри div автоматически подстраивался под заданные ширину и высоту блока. Пробовал вручную подбирать font-size, но это неудобно для динамического контента. Поделитесь, как решить это программно?


    Возможное решение: бинарный поиск по размеру шрифта

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

    function fitTextToDiv(div, text) {
      const temp = document.createElement('div');
      temp.style.position = 'absolute';
      temp.style.visibility = 'hidden';
      temp.style.whiteSpace = 'pre-wrap'; // Учитываем переносы
      temp.style.padding = getComputedStyle(div).padding; // Копируем стили
      document.body.appendChild(temp);
    
      let minSize = 1;
      let maxSize = 100;
      let bestSize = 1;
    
      while (minSize <= maxSize) {
        const midSize = Math.floor((minSize + maxSize) / 2);
        temp.style.fontSize = `${midSize}px`;
        temp.textContent = text;
    
        const fitsWidth = temp.offsetWidth <= div.offsetWidth;
        const fitsHeight = temp.offsetHeight <= div.offsetHeight;
    
        if (fitsWidth && fitsHeight) {
          bestSize = midSize;
          minSize = midSize + 1; // Пробуем больший размер
        } else {
          maxSize = midSize - 1; // Уменьшаем размер
        }
      }
    
      div.style.fontSize = `${bestSize}px`;
      div.textContent = text;
      document.body.removeChild(temp);
    }
    
    // Пример использования:
    const myDiv = document.getElementById('myDiv');
    fitTextToDiv(myDiv, 'Текст, который должен поместиться!');
    

    Важные моменты:

    1. Стили копируются: Убедитесь, что временный элемент использует те же font-family, padding, border, и white-space, что и целевой div.
    2. Производительность: Бинарный поиск эффективен (обычно 5-7 итераций), но избегайте частых вызовов.
    3. Ограничения: Для длинных текстов или блоков с фиксированной высотой может потребоваться компромисс между размером шрифта и количеством строк.

    Альтернативы:

    • Canvas API: Метод measureText позволяет оценить ширину текста, но не учитывает высоту и переносы.
    • CSS-решения: text-overflow: ellipsis или transform: scale() для простых случаев, но это не меняет font-size.

    0 0 1 Ответить
  • JspiJ
    Jspi
    Запуск Typescript в Node js без сборки и сложных конфигов

    Рассмотрим простые способы запуска TypeScript в Node.js без сложных сборок. Во всех примерах используется современный синтаксис ES-модулей.

    Бывает нужно просто написать какие-то простые скрипты или проекты, а заморачиваться со сборкой нет желания и особого смысла, но хочется использовать все возможности typescript с подсказками, типами, которые не надо держать в голове, с проверками этих типов уже в IDE.

    Стартует, для сначала инициализируем проект

    npm init -y
    npm install typescript @types/node --save-dev
    

    Конфигурация typescript

    создаем файл tsconfig.json

    # или сручную
    touch tsconfig.ts
    
    # или через команду tsc 
    # но для этого нужно глобально установить Typescript
    npm install -g typescript
    #  далее команда
    tsc --init
    

    вот минимальный конфиг файл, с описанием необходимых параметров

    {
      "compilerOptions": {
        // Современный JS без обратной совместимости
        "target": "ES2022",
        
        // Нативные ES-модули Node.js
        "module": "NodeNext",
        
        // Алгоритм разрешения модулей как в Node.js
        "moduleResolution": "NodeNext",
        
        // Совместимость между CommonJS и ES-модулями
        "esModuleInterop": true,
        
        // разрешить импорт ts файлов ( для ts-node и для нативного запуска node --experimental-strip-types)
        "allowImportingTsExtensions": true,
    
        // Максимальная строгость проверки типов
        "strict": true,
        
        // Важно: запрещаем генерацию JS-файлов!
        "noEmit": true
      },
      
      // Включаем все TS-файлы в проекте
      "include": ["**/*.ts"],
      
      // Исключаем зависимости
      "exclude": ["node_modules"]
    }
    

    Обратите внимание на следующие параметры

    • noEmit - мы не будем ничего компилировать, собирать, запускаем
    • allowImportingTsExtensions - важный параметр для запуска ts нативным способом (от этом позже) и для ts-node

    Исходный код

    Теперь напишем максимальной простой код, который просто прочитает наш package.json и покажет поле "Package name"

    index.ts:

    import { readFile } from "node:fs/promises";
    
    export async function readConfig() {
      const data = await readFile("package.json", "utf8");
      console.log("Package name:", JSON.parse(data).name);
    }
    
    

    index.ts:

    import { readConfig } from "./lib.ts";
    
    readConfig();
    
    

    Запуск через ts-node

    устанавливаем локально

    npm install ts-node --save-dev
    

    package.json

    {
      "name": "test",
      "version": "1.0.0",
      "scripts": {
        "start": "ts-node index.ts"
      },
      "keywords": [],
      "author": "",
      "license": "ISC",
      "description": "",
      "devDependencies": {
        "@types/node": "^24.0.0",
        "ts-node": "^10.9.2",
        "typescript": "^5.8.3"
      }
    }
    
    

    запуск

    ts-node index.ts
    
    # или через npm
    npm run start 
    

    Замечания

    • "type": "commonjs" или должен отсутствовать в package.json

    • импорт файлов только с расширением .ts import * from "./lib.ts"

    • поэтому обязательна и настройка "allowImportingTsExtensions": true

    • типы проверяется!

    • скорость запуска самая неспешная из всех вариантов

    Запуск через tsx

    устанавливаем локально

    npm install tsx --save-dev
    

    package.json

    {
      "name": "test",
      "version": "1.0.0",
      "scripts": {
        "start": "tsx index.ts"
      },
      "keywords": [],
      "author": "",
      "license": "ISC",
      "description": "",
      "devDependencies": {
        "@types/node": "^24.0.0",
        "tsx": "^4.19.4",
        "typescript": "^5.8.3"
      }
    }
    
    

    запуск

    tsx index.ts
    
    # или через npm
    npm run start 
    

    Замечания

    • импорт файлов с расширением .ts/.js

    • типы проверяется!

    • скорость запуска быстрее чем ts-node, но медленнее, чем node --experimental-strip-types

    Запуск нативно, через node --experimental-strip-types

    обязательно нужна версия Node.js 20.6+

    package.json

    {
      "name": "test",
      "version": "1.0.0",
      "scripts": {
        "start": "node --experimental-strip-types index.ts"
      },
      "keywords": [],
      "type": "module",
      "author": "",
      "license": "ISC",
      "description": "",
      "devDependencies": {
        "@types/node": "^24.0.0",
        "typescript": "^5.8.3"
      }
    }
    
    

    запуск

    tsx index.ts
    
    # или через npm
    npm run start 
    

    Замечания

    • "type": "module" в package.json

    • импорт файлов только с расширением .ts import * from "./lib.ts"

    • поэтому обязательна и настройка "allowImportingTsExtensions": true

    • типы НЕ проверяется!

    • самая быстрая скорость запуска

    Итого

    Метод Проверка типов Скорость Требования
    ts-node ✅ ⚠️ Средняя npm i ts-node
    tsx ✅ ⚡ Быстрая npm i tsx
    node --experimental-strip-types ❌ ⚡⚡ Очень быстрая Node.js 20.6+

    Начиная с версии Node.js 24 флаг –experimental-strip-types будет использован по умолчанию


    2 0 2 Ответить
  • kirilljsK
    kirilljs
    Как сделать css в html

    А я продолжаю рубрику для новичков! И на этот раз мы поговорим о том как сделать css в html

    И так у нас есть с вами два основным способа, начнем с первого и самого примитивного.

    Создадим файл index.html, и наполним его первоначальным:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Документ</title>
    </head>
    <body>
        <h1>Привет мир!</h1>
    </body>
    </html>
    

    Готово, вот наш html, а теперь идем дальше! Для того что бы добавить css мы можем:

    1. Прописать тег прямо внутри самого файла index.html:
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Документ</title>
    </head>
    <!-- пишем пишем css тут-->
    <style>
        h1 {
          color: red;
        }
    </style>
    <!-- пишем пишем css тут-->
    <body>
        <h1>Привет мир!</h1>
    </body>
    </html>
    

    Воуля, тестируем и открывам наш файл index.html в браузере и видим следующее:

    Снимок экрана 2025-06-10 в 07.43.48.png

    1. Способ второй будет куда интереснее и естественно правильнее, так как это разделит код на необходимые файлы, создадим с вами в той же папке где расположен index.html файл - style.css

    Вот как показано на скриншоте:
    Снимок экрана 2025-06-10 в 07.45.42.png

    Далее в самом файле index.html нам необходимо указать что мы берем стилизацию из другого файла - style.css прописываем ссылку на файл внутри теги <head>, а старый код css переносим в наш новый файл:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
    
        <!-- Прописываем ссылку на наш файл style.css -->
        <link href="./style.css" rel="stylesheet">
        <!-- Прописываем ссылку на наш файл style.css -->
    
        <title>Документ</title>
    </head>
    <!-- Убрали наш код css-->
    <body>
        <h1>Привет мир!</h1>
    </body>
    </html>
    

    В самом файле style.css не нужно использовать какие либо теги, мы просто вставляем код как он есть:

    h1 {
          color: red;
        }
    

    Воуля! Теперь вы знаете как использовать css в html!

    Хотите больше примеров для новичков по html? Тогда регистрируйтесь на нашем форуме и оставляйте комментарии к посту, я с удовольствием вам помогу и подскажу 😊


    И не забывайте подписывать на мой ТГ канал:

    Link Preview Image
    Kirilljs

    Обо всем и не о чем сразу 👨🏻‍💻

    favicon

    Telegram (t.me)


    0 0 0 Ответить
  • kirilljsK
    kirilljs
    Как добавить ссылку на сайт в html

    Недавно мне написал знакомый, который только только начал осваивать HTML, CSS, JS.
    И задал такой вопрос - как добавить ссылку на сайт в html?

    Если вдруг кто не знал, хотя как по мне это кажется очень странным то ссылка делается очень просто:

    <a href="https://vk.com">ссылка</a>
    

    Мы берем тег a прописываем ему параметр href=""в кавычки вставляем ссылку и воуля - у нас готова ссылка в html!

    —-

    Link Preview Image
    Kirilljs

    Обо всем и не о чем сразу 👨🏻‍💻

    favicon

    Telegram (t.me)


    0 0 0 Ответить
  • kirilljsK
    kirilljs
    Как узнать свой ID в Telegram и зачем он нужен?

    Telegram ID — это уникальный номер, который идентифицирует ваш аккаунт. Он пригодится для:

    • Интеграции с ботами (например, для авторизации или транзакций).
    • Управления группами/каналами (назначение администраторов, модераторов).
    • API-запросов (создание кастомных решений на базе Telegram).
    • Переводов денег через ботов (например, @send или @CryptoBot).

    🔍 Как найти свой ID?

    1. Через бота @getmidbot (ваш бот):

      • Напишите ему /start или кликните сюда.
      • Бот мгновенно покажет ваш ID.
    2. Через настройки Telegram:

      • Перейдите в Настройки → Общие → Имя пользователя.
      • Если у вас нет имени пользователя, ID можно узнать только через ботов.

    💡 Почему стоит использовать @getmidbot?

    • Быстро и без лишних шагов.

    👉 Попробуйте @getmidbot — узнайте свой ID за 10 секунд!

    ❓ А зачем вам это?
    Если вы используете Telegram для бизнеса, ботов или администрирования, ID — ваш ключ к автоматизации. Поделитесь этим постом с теми, кто ещё не знает, как его найти!


    Такой пост объясняет пользу ID, предлагает удобное решение через ваш бота и стимулирует вовлечение. Можете адаптировать стиль под вашу аудиторию! 🚀

    Link Preview Image
    Мой телеграм ID | My telegram ID

    You can contact @getmidbot right away.

    favicon

    Telegram (t.me)


    0 0 0 Ответить
  • JspiJ
    Jspi
    Type vs Interface в TypeScript — выбор и различия

    TypeScript предоставляет два мощных механизма для определения типов: type и interface. Оба позволяют создавать типы, которые описывают структуры объектов, функций и других данных. Однако между ними существуют тонкие различия, которые могут повлиять на выбор инструмента в зависимости от задачи. Давайте разберемся, чем они отличаются и когда что использовать.

    Что такое type и interface?

    type (тип)

    Ключевое слово type создает алиас (псевдоним) для существующего типа или определяет новый тип через комбинацию других типов. Например:

    type Name = string;
    type Coordinates = { x: number; y: number };
    

    interface (интерфейс)

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

    interface User {
      name: string;
      age: number;
    }
    

    Ключевые различия между type и interface

    Расширение типов

    • interface : Поддерживает множественное наследование через extends.
    
    interface Animal {
      name: string;
    }
    
    interface Dog extends Animal {
      breed: string;
    }
    
    • type : Использует оператор & (пересечение типов) для комбинации.
    type Animal = {
      name: string;
    };
    
    type Dog = Animal & {
      breed: string;
    };
    

    Union и Intersection Types

    • type : Позволяет создавать объединения (|) и пересечения (&) типов.
    type ID = string | number; // Union type
    type ButtonProps = BaseProps & { color: string }; // Intersection type
    
    • interface : Не поддерживает объединения напрямую. Может расширять несколько интерфейсов, но не примитивы или другие типы.

    Declaration Merging (Объединение объявлений)

    • interface : Поддерживает декларативное объединение . Если несколько интерфейсов с одинаковым именем, TypeScript автоматически объединит их:
    interface User {
      name: string;
    }
    
    interface User {
      age: number;
    }
    
    const user: User = { name: "Alice", age: 30 }; // Работает!
    
    • type : Не позволяет повторно объявлять одно и то же имя:
    type User = { name: string };
    type User = { age: number }; // ❌ Ошибка: Имя "User" уже объявлено.
    

    Использование с примитивами

    • type : Может создавать псевдонимы для примитивов:
    type Score = number;
    
    • interface : Не может заменять примитивы.

    Реализация в классах

    • interface : Может быть реализован классом через implements:
    class Person implements User {
      name: string;
    }
    
    • type : Обычные типы-объекты также поддерживают implements, но union-типы — нет:
    type User = { name: string };
    class Person implements User { /* Работает */ }
    
    type ID = string | number;
    class Entity implements ID { /* ❌ Ошибка */ }
    

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

    Используйте interface, если:

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

    Используйте type, если:

    • Нужны union-типы (|) или intersection-типы (&).
    • Вы создаете псевдоним для примитива, сложного типа или функции:
    type Callback = (error: Error | null, data: string) => void;
    
    • Вы предпочитаете иммутабельность типов (избегаете случайного изменения через повторные объявления).

    Примеры из практики

    Union Types (только type)

    
    type Theme = "light" | "dark";
    function setTheme(theme: Theme) { /* ... */ }
    

    Расширение интерфейсов

    interface FormProps {
      onSubmit: () => void;
    }
    
    interface LoginFormProps extends FormProps {
      username: string;
    }
    

    Декларативное объединение

    interface Window {
      myPlugin: PluginAPI;
    }
    // В другом файле:
    interface Window {
      myPlugin: PluginAPI; // Расширение существующего интерфейса
    }
    

    Заключение

    Выбор между type и interface часто зависит от контекста и предпочтений команды. Вот краткий чек-лист:

    • Для объектных структур и наследования — interface.
    • Для union/intersection типов , псевдонимов и функциональных типов — type.

    Оба подхода дополняют друг друга, и их совместное использование позволяет писать гибкий и типобезопасный код. Главное — соблюдать консистентность в проекте и документировать принятые стандарты.

    Дополнительные ресурсы:

    • Официальная документация TypeScript: Types vs Interfaces
    • Advanced Types in TypeScript

    0 0 1 Ответить
  • JspiJ
    Jspi
    Выпуск mongodb 8

    1e0fda2e-71d1-4ff7-a99b-45a2cc4068d4-image.png

    MongoDB 8.0 — мажорный релиз, сосредоточенный на производительности, безопасности и управляемости. Выпущен в Q1 2025 года, он предлагает ключевые улучшения для разработчиков и администраторов. Рассмотрим основные изменения.

    Ключевые Нововведения

    Ускорение запросов на 40%

    • Новый движок оптимизации запросов Query Optimizer 3.0.

    • Поддержка векторных операций для аналитики (использует SIMD-инструкции CPU).

    • Пример: Агрегации $group работают в 1.5–2 раза быстрее.

    Улучшенное Шардирование

    • Авто-балансировка без downtime (фоновое перераспределение данных).

    • Time-Series Sharding — автоматическое шардирование для коллекций временных рядов.

    Безопасность

    • Encrypted Queryable Backups — шифрованные бэкапы с возможностью поиска.

    • RBAC для Change Streams — гибкие права доступа к потокам изменений.

    • Аудит операций в реальном времени через $audit pipeline.

    Новые Операторы

    • $median — медиана в агрегациях.

    • $dateTrunc — обрезка дат до часов/дней/месяцев.

    • $geoLine — построение линий из гео-точек (для трекинга).

    Управление Ресурсами

    • Collection-Level QoS — ограничение IOPS/CPU для отдельных коллекций.

    • Фоновое сжатие данных для снижения места на диске до 30%.

    Тесты Производительности: 8.0 vs 7.0

    Результаты тестирования на инфраструктуре: 32 vCPU, 128 GB RAM, NVMe SSD.

    Массовая вставка данных (YCSB Benchmark)

    Тест: Вставка 100 млн документов (средний размер 1.2 КБ).

    Результат:

    • MongoDB 8.0: ~1.1 млн ops/sec

    • MongoDB 7.0: ~900 тыс. ops/sec

    Итог: Ускорение на 22% благодаря оптимизации аллокации памяти и записи журналов (journaling).

    Агрегация данных ($group)

    Тест: Группировка 50 млн записей по полю category с вычислением суммы ($sum).

    Результат:

    • MongoDB 8.0: 8.2 сек

    • MongoDB 7.0: 14.7 сек

    Итог: Ускорение в 1.8× за счет векторных операций в Query Optimizer 3.0.

    Запросы к Time-Series коллекциям

    Тест: Поиск по временному диапазону (1 год данных, 10K сенсоров).

    Результат:

    • MongoDB 8.0: 120 мс (с авто-шардированием)

    • MongoDB 7.0: 350 мс (ручное шардирование)

    Итог: Ускорение в 3× благодаря оптимизации работы с сегментами данных.

    Сжатие хранилища

    Тест: Хранение 1 ТБ логов приложений.

    Результат:

    • MongoDB 8.0: ~420 ГБ (новый алгоритм сжатия + фоновое дедуплицирование)

    • MongoDB 7.0: ~600 ГБ

    Итог: Экономия 30% дискового пространства.

    Как Обновиться

    Для Standalone-сервера:

    # Остановить MongoDB
    sudo systemctl stop mongod
    
    # Обновить пакеты (для Ubuntu)
    sudo apt-get update
    sudo apt-get install mongodb-org=8.0.0 mongodb-org-database=8.0.0
    
    # Запустить 
    sudo systemctl start mongod
    

    Для Replica Set:

    По очереди обновить вторичные ноды.

    Переключить primary (rs.stepDown()).

    Обновить бывший primary.

    Версия featureCompatibilityVersion должна быть 8.0.

    Для Sharded Cluster:

    Обновить mongos, затем config servers, потом шарды.

    Шарды обновлять как Replica Set.


    1 0 1 Ответить
  • kirilljsK
    kirilljs
    Маршрут API для генерации presigned URL

    Маршрут API для генерации presigned URL для загрузки в S3 в Next.js

    // S3 Presign Upload
    export async function POST(req: Request) {
      const { type } = await req.json();
    
      const key = `${nanoid()}.${type.split('/')[1]}`;
    
      const { url, fields } = await new Promise((res, rej) => {
        s3.createPresignedPost(
          {
            Bucket: 'your-bucket-name',
            Fields: { key },
            Expires: 60,
            Conditions: [
              ['content-length-range', 0, 5 * 1024 * 1024],
              ['starts-with', '$Content-Type', 'image/'],
            ],
          },
          (err, data) => err ? rej(err) : res(data)
        );
      });
    
      return Response.json({ url, fields, key });
    }
    

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

    Он проверяет тип файла, генерирует уникальный ключ и возвращает presigned URL + поля, необходимые для загрузки.


    0 0 0 Ответить
  • kirilljsK
    kirilljs
    Next.js: Как встроить клиентскую логику?

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

    Щас расскажу и покажу как это сделать легко и просто если вы не умеете читать документацию 🤕 😀


    🧩 Клиентские компоненты в Next.js

    Начиная с Next.js 13, фреймворк поддерживает разделение на серверные (Server Components) и клиентские (Client Components).

    Для активации клиентской логики в файле компонента добавьте директиву:

    'use client';
    
    import { useState, useEffect } from 'react';
    
    export default function Counter() {
      const [count, setCount] = useState(0);
    
      useEffect(() => {
        document.title = `Счетчик: ${count}`;
      }, [count]);
    
      return (
        <button onClick={() => setCount(prev => prev + 1)}>
          Кликнуто {count} раз
        </button>
      );
    }
    

    ⚠️ Без 'use client' компонент будет обрабатываться на сервере, и клиентская логика работать не будет.


    🔗 Взаимодействие с серверными компонентами

    Серверные компоненты могут использовать клиентские как дочерние элементы:

    // app/page.tsx (Server Component)
    import Counter from './Counter';
    
    export default function Home() {
      return (
        <main>
          <h1>Добро пожаловать!</h1>
          <Counter /> {/* Клиентский компонент */}
        </main>
      );
    }
    

    В 14 версии клиентские не могли использовать серверные как дочерние, но 15 версия все перевернула с ног на ногу, но об этом потом 😊


    🧰 Клиентские функции и API

    Работа с DOM
    Используйте useRef для доступа к элементам:

    const inputRef = useRef<HTMLInputElement>(null);
    

    Локальное состояние
    useState, useReducer, useEffect работают как в обычном React-приложении.

    Браузерные API
    Доступны только в useEffect или обработчиках событий:

    useEffect(() => {
      window.addEventListener('resize', handleResize);
      return () => window.removeEventListener('resize', handleResize);
    }, []);
    

    Хотя вы наверное и так это знаете, но на всякий случай добавлю! Вдруг нас читают новички!!!


    ⚠️ Распространенные ошибки

    ❌ Использование window/document на сервере

    // НЕПРАВИЛЬНО
    if (typeof window !== 'undefined') { /* Проверка обязательна! */ }
    
    // Правильно
    useEffect(() => {
      console.log(window.innerWidth); // Только в useEffect или обработчиках
    }, []);
    

    ❌ Неинициализированные состояния
    Избегайте несоответствия между серверным и клиентским рендерингом:

    const [mounted, setMounted] = useState(false);
    useEffect(() => setMounted(true), []);
    return mounted ? <Component /> : <Skeleton />;
    

    🚀 Оптимизация загрузки

    Ленивая загрузка клиентских модулей

    import dynamic from 'next/dynamic';
    const HeavyComponent = dynamic(() => import('./HeavyComponent'), {
      ssr: false, // Отключить серверный рендеринг
      loading: () => <p>Загрузка...</p>,
    });
    

    Разделение кода
    Используйте splitChunks в next.config.js для оптимизации бандла.


    📚 Полезные ссылки

    • Официальная документация: Client Components
    • Data Fetching в Next.js
    • React Server Components vs Client Components

    💬 Вопросики имеются?
    Оставляйте комментарии ниже!


    2 0 0 Ответить
Популярные темы:

  • JavaScript мемы
    MugiwaraM
    Mugiwara
    2
    23
    158

  • Vue.js и React — необычное сравнение
    D
    DeepSeeker
    3
    10
    227

  • Славянский удар з*лупой
    kirilljsK
    kirilljs
    0
    9
    75

  • Проверка стала проще с Zod: как обеспечить точность и качество форм
    kirilljsK
    kirilljs
    3
    8
    260

  • Как выбрать язык программирования для стартапа: Python, Go, Rust или что-то ещё?
    kirilljsK
    kirilljs
    0
    8
    65

Пользователи в Сети:

kirilljsK
kirilljs

Статистика:

1

В сети

15

Пользователи

154

Темы

305

Сообщения

Категории

  • Главная
  • Новости
  • Фронтенд
  • Бекенд
  • Языки программирования

Контакты

  • Сотрудничество
  • info@rosdesk.ru
  • Наш чат
  • Наш ТГ канал

© 2024 - 2025 RosDesk, Inc. Все права защищены.

Политика конфиденциальности
  • Войти

  • Нет учётной записи? Зарегистрироваться

  • Войдите или зарегистрируйтесь для поиска.
  • Первое сообщение
    Последнее сообщение
0
  • Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы