Перейти к содержанию
  • Лента
  • Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы
Свернуть
exlends
Категории
  • ru
    Игры
    Образование
    Искусственный Интеллект
    Новости
    Бекенд, разработка серверов
    Фронтенд
    Мобильная разработка
    Языки программирования
    Разработка игр | 3D | 2D
    Базы данных
    CMS
    Системное Администрирование
    Операционные системы
    Маркетинг
    Девайсы
    Сообщество
    Юмор, Мемы

  • en
    Humor
    News
    AI
    Programming languages
    Frontend
    GameDev

  • Блоги

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

  • Все категории
  • GameFishG
    GameFish
    Лучшие моды для Garry's Mod в 2026: полная подборка

    Garry’s Mod уже много лет остаётся одной из самых модифицируемых игр, и именно благодаря аддонам она не теряет актуальность. Сообщество постоянно создаёт новые инструменты, оружие, карты и механики, которые превращают песочницу в совершенно другую игру. Если ты давно не заходил в Гарис и не знаешь, что нового появилось, или только начинаешь знакомиться с модами, этот гайд поможет разобраться в основных категориях и выбрать то, что действительно стоит установить.

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

    Моды на оружие: от классики к новым тенденциям

    Оружие — один из самых популярных видов контента в Garry’s Mod. Разработчики постоянно добавляют новые пушки, пистолеты и экзотическое снаряжение, стараясь сделать боевую механику интереснее. В 2026 году в тренде находятся аддоны с улучшенной графикой, реалистичной баллистикой и детальной кастомизацией. Это означает, что современные моды учитывают гравитацию, ветер, сопротивление воздуха и позволяют менять прицелы, глушители, магазины и другие элементы.

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

    Популярные категории оружейных модов:

    • Оружие из CS:GO — восемь отдельных паков с каждой категорией (автоматы, пистолеты, снайперские винтовки). Можешь скачать только нужные тебе пакеты вместо того, чтобы устанавливать всё подряд
    • Фантастическое оружие — Portal Gun, Gravity Gun Enhanced, Railgun, Plasma Cannon. Идеально для экспериментов с физикой и креативного геймплея
    • Оружие из других игр — Star Wars DC-15A Blaster Rifle, DOOM BFG 9000, Cyberpunk 2077 Widow Maker для любителей экзотики
    • Novelty-оружие — Nyan Gun (стреляешь котом-печенькой с радугой, отличный вариант для развлечения и ностальгии по 2007 году)

    Инструменты и манипуляторы: больше, чем просто пушки

    Далеко не все полезные аддоны — это боевое оружие. В Garry’s Mod есть целый класс инструментов, которые кардинально меняют геймплей и расширяют возможности. Одним из самых нужных является мод на оружие-уменьшитель, который позволяет менять размер моделей игрока в большую и меньшую сторону. Это не просто визуальный эффект — при изменении размера пропорционально меняются скорость передвижения, размер хитбокса, высота прыжка и множество других связанных характеристик.

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

    Практическое применение инструментов:

    • Создание масштабных сцен и необычных пропорций персонажей
    • Тестирование физики при разных параметрах игрока
    • Организация развлекательных режимов и челленджей
    • Подготовка материала для видеоконтента и скриншотов

    Визуальные моды и графические улучшения

    Графика в Garry’s Mod может выглядеть довольно скромно, особенно если сравнивать с современными играми. Однако благодаря модам можно существенно улучшить визуальное восприятие. В 2026 году популярны аддоны с PBR-текстурами (физически корректное отображение материалов) и детализированными моделями объектов. Такие моды не только делают игру красивее, но и помогают лучше погрузиться в атмосферу создаваемых сцен.

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

    Основные типы визуальных модов:

    • Текстурные паки — улучшение разрешения и деталировки стандартных текстур через Texturize PLUS и подобные
    • Карты и окружение — специализированные локации вроде SouthSide_Day и SouthSide_Night для создания специфичной атмосферы
    • Эффекты и фильтры — модули ReShade с различными пресетами для разных ситуаций и стилей
    • Реалистичные текстуры материалов — PBR-системы для металла, дерева, бетона и других поверхностей

    Контент для геймплея: персонажи, карты и режимы

    Помимо оружия и графики, огромная часть модов посвящена новому игровому контенту. Это могут быть модели персонажей из других игр и фильмов, новые карты для различных режимов, или полноценные моды, которые меняют саму механику игры. Например, JMOD позиционируется как один из лучших глобальных аддонов, превращающих Garry’s Mod в хардкорный симулятор выживания с новыми механиками и динамикой.

    Если ты заинтересован в создании собственного контента или просто хочешь разнообразить геймплей, то стоит обратить внимание на моды, которые добавляют игровые режимы и усложняют базовую механику. Сообщество постоянно экспериментирует с новыми идеями, поэтому в мастерской Steam всегда можно найти свежие подходы к привычным режимам.

    Категории контент-модов:

    • Playermodels — персонажи из разных игр и вселенных (персонажи из Hotline Miami, Battlefield, собственные разработки)
    • Карты и локации — заброшенные больницы, городские районы, уникальные построения для специфичных режимов
    • Режимы выживания — JMOD и подобные моды, которые добавляют элементы прогрессии, ресурсов и опасности
    • NPC и враги — модули для добавления противников и расширения сюжетных элементов

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

    Чем больше аддонов ты устанавливаешь, тем выше нагрузка на компьютер. Garry’s Mod очень зависима от процессора — движок Source активно нагружает CPU при обработке логики, физики и рендеринга. С выходом 64-битной версии (x64) ситуация улучшилась: стало доступно практически неограниченное количество оперативной памяти, вылеты при большом количестве аддонов случаются реже, а большие карты работают стабильнее.

    Однако это не означает, что можно устанавливать всё подряд без последствий. Важно помнить о балансе между качеством и производительностью. Если CPU перегружена на 100%, она начинает рендерить столько, сколько может, в результате чего физика и Lua-скрипты получают меньше стабильного времени. Это приводит к странным багам, нестабильному поведению пропсов и дёргающимся рагдоллам. Рекомендуется установить лимит fps_max на 144, 240 или максимум 360 кадров в секунду.

    Практические советы по оптимизации:

    • Используй x64-версию клиента для большего доступа к памяти и стабильности
    • Устанавливай команду mat_picmip 1 и mat_mipmaptextures 1 для золотого баланса качества текстур и FPS
    • Не перегружай FPS — ставь разумный лимит (144–360 кадров) чтобы избежать перегрузки CPU
    • Проверяй совместимость модов перед установкой, особенно если они касаются физики или рендеринга
    • Отключай ненужные аддоны, если замечаешь падение производительности или странные баги
    • Используй ReShade как альтернативу текстурным модам — это часто требует меньше ресурсов

    На что обратить внимание при выборе модов

    Не все моды создаются одинаково, и выбор правильных аддонов может серьёзно повлиять на твой опыт игры. Перед установкой стоит обратить внимание на несколько ключевых факторов, которые помогут избежать разочарования и конфликтов между модами. Первое — это совместимость с текущей версией игры. Garry’s Mod время от времени получает обновления, и старые моды могут перестать работать или вызывать ошибки. Второе — качество самого мода, на которое указывают оценки и комментарии игроков в мастерской Steam.

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

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

    • Проверь рейтинг и количество подписок в мастерской Steam
    • Прочитай комментарии — там часто указывают на проблемы и способы их решения
    • Убедись, что мод совместим с x64-версией, если ты её используешь
    • Посмотри на дату последнего обновления — свежие моды обычно работают надёжнее
    • Проверь список требуемых зависимостей в описании
    • Протестируй мод на небольшой карте перед использованием в больших проектах

    Что остаётся за пределами стандартного набора

    Мир модов для Garry’s Mod огромен, и в одной статье невозможно охватить всё разнообразие. Существуют узкоспециализированные аддоны для художников, создателей видео, программистов и любителей конкретных фреймворков. Есть мегамоды, которые полностью переделывают игру под определённый сценарий или вселенную. Есть инструменты для оптимизации сервера, системы прав доступа, и множество других утилит, которые работают скрытно от игрока, но делают всё лучше и удобнее.

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


    0 0 0 Ответить
  • hannadevH
    hannadev
    Атрибут rel nofollow: что это, зачем нужен и как применять в SEO

    Атрибут rel=“nofollow” — это простая инструкция в HTML, которая говорит поисковым роботам не учитывать ссылку при расчете ранжирования. Он помогает контролировать, какой ссылочный вес передается с вашего сайта на другие ресурсы. В этой статье разберем, что это такое, когда его использовать и как правильно внедрять, чтобы не навредить SEO.

    Знание nofollow полезно для вебмастеров: оно защищает от спама, сохраняет авторитет сайта и делает ссылочный профиль естественным. Вы избежите штрафов от поисковиков и сосредоточитесь на качественном трафике. Поговорим о примерах и нюансах шаг за шагом.

    Что такое атрибут rel nofollow и как он работает

    Атрибут rel=“nofollow” добавляется к тегу <a>, чтобы поисковые роботы, вроде Google или Yandex, не передавали ссылочный вес от вашей страницы к целевой. Это значит, что робот увидит ссылку, может даже проиндексировать страницу, но не будет считать ее рекомендацией или “голосом доверия”. Изначально nofollow ввели для борьбы со спамом в комментариях — чтобы сайты не становились бесплатными донорами ссылок для сомнительных ресурсов.Представьте: на вашем блоге пользователи оставляют комментарии с ссылками на казино или аптеки. Без nofollow эти ссылки “утекут” весом, разбавляя авторитет вашего сайта. С атрибутом вес остается на ваших страницах, а профиль выглядит естественно. Google подтверждает: nofollow не блокирует индексацию полностью, но исключает передачу ранжирующих факторов.Это особенно актуально для внешних ссылок, где вы не контролируете качество ресурса.

    Вот как выглядит код:

    • <a href="https://example.com" rel="nofollow">Текст ссылки</a> — робот игнорирует вес.

    Ключевые эффекты nofollow:

    • Не передает PageRank или аналогичные метрики.
    • Разрешает переход для индексации целевой страницы.
    • Сохраняет естественность профиля — поисковики любят микс dofollow и nofollow.
    Свойство Dofollow Nofollow
    Передача веса Да Нет
    Индексация Да Да (частично)
    SEO-риск Низкий при качестве Защита от спама

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

    Используйте nofollow для ссылок, которые не отражают ваше одобрение или могут навредить SEO. Например, в комментариях, форумах или пользовательском контенте — там спамеры часто оставляют ссылки на низкокачественные сайты. Это предотвратит утечку веса и санкции от Google за токсичный профиль.Еще один случай: рекламные или партнерские ссылки. Если вы размещаете баннеры или affiliate-ссылки, nofollow честно сигнализирует поисковикам о коммерческой природе. Без него алгоритмы могут расценить это как манипуляцию. А для платных публикаций теперь рекомендуют rel=“sponsored”, но nofollow все равно актуален для старых систем.Логично: вес остается для ваших страниц, трафик идет.

    Ситуации для nofollow:

    • Комментарии и отзывы пользователей.
    • Реклама, партнерки, спонсорский контент.
    • Ссылки на ненадежные или нетематические ресурсы (например, соцсети без SEO-цели).
    Тип ссылки Рекомендация Почему
    UGC (комментарии) Nofollow Защита от спама
    Платная реклама Sponsored или Nofollow Прозрачность
    Внутренняя Dofollow Передача веса нужна

    Как технически добавить rel nofollow

    Добавление rel=“nofollow” просто: в HTML-редакторе или CMS вставьте атрибут в тег <a>. В WordPress это делается через плагины вроде Yoast SEO или вручную в коде. Для всего сайта — мета-тег <meta name="robots" content="nofollow"> в <head>, но это крайняя мера, так как блокирует все ссылки страницы.Проверьте в инструментах вроде Google Search Console или браузерных инспекторах — атрибут должен отображаться корректно. В конструкторах вроде Tilda галочка “Rel nofollow” в настройках ссылки упрощает задачу. Главное — не переусердствуйте: 100% nofollow сделает профиль подозрительным, поисковики предпочитают естественность с 20-30% таких ссылок.Шаги по внедрению:

    1. Откройте HTML-код ссылки.
    2. Добавьте rel="nofollow" после href.
    3. Сохраните и проверьте валидатором.
      Нюанс: комбинируйте с noopener для безопасности от уязвимостей.
    CMS/Инструмент Как добавить
    HTML вручную rel="nofollow" в
    WordPress Плагин или редактор
    Tilda Галочка в настройках

    Альтернативы и новые атрибуты rel

    Помимо классического nofollow, появились ugc для пользовательского контента и sponsored для платных ссылок — Google рекомендует их с 2019 года для большей точности. Nofollow остается универсальным, но комбинации вроде rel="nofollow ugc" дают нюансы. Это эволюционирует: роботы лучше понимают контекст.Выбирайте по ситуации: для соцсетей nofollow + noreferrer скрывает реферер и защищает трафик. Не используйте на внутренней перелинковке — там нужен dofollow для распределения веса по сайту. Тестируйте влияние в аналитике: трафик не пострадает, SEO стабилизируется.Альтернативы nofollow:

    • ugc — для комментариев и форумов.
    • sponsored — платные ссылки.
    • noopener noreferrer — безопасность и приватность.
    Атрибут Назначение Пример
    nofollow Общий запрет веса Реклама
    ugc Пользовательский контент Комменты
    sponsored Платные Партнерки

    Зачем следить за nofollow в долгосрочной перспективе

    Правильное использование rel=“nofollow” делает ваш сайт устойчивее к изменениям алгоритмов — профиль естественный, риски минимальны. Но остаются вопросы: как балансировать с dofollow, мониторить утечки веса в Ahrefs или Serpstat? Подумайте о аудите ссылок раз в квартал.В итоге, nofollow — инструмент контроля, а не запрет. Изучите, как он сочетается с robots.txt и noindex, чтобы не блокировать полезный трафик ненароком. Дальше эксперименты покажут, что работает именно для вашего проекта.


    0 0 0 Ответить
  • kirilljsxK
    kirilljsx
    C или C++ что лучше выбрать в 2026 году: сравнение языков

    Многие разработчики сталкиваются с выбором между C и C++. Эти языки похожи, но сильно отличаются по возможностям и применению. Разберём, в чём разница, где каждый лучше работает и как выбрать подходящий.

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

    Суть языков: от C к C++

    C — это базовый язык системного программирования. Он даёт прямой доступ к памяти и железу, без лишних абстракций. На нём пишут ядра ОС, драйверы и embedded-системы. Код на C компактный и быстрый, но требует осторожности — ошибки вроде переполнения буфера легко приводят к сбоям.

    C++ расширяет C объектно-ориентированными возможностями. Добавлены классы, шаблоны, STL для контейнеров и алгоритмов. Это делает язык универсальным для сложных проектов вроде игровых движков или симуляторов. Но с ростом кода сложность тоже растёт — нужно следить за наследованием и памятью.

    Переход от C к C++ логичен: C++ совместим с C, так что библиотеки на C легко интегрируются. В 2026 году оба языка в топе TIOBE — C++ на 4 месте, C чуть ниже. Они незаменимы там, где нужна максимальная производительность.

    Вот ключевые отличия:

    • C: Простота, минимализм, ручное управление памятью. Идеален для микроконтроллеров и ОС.
    • C++: Абстракции (классы, исключения), богатая стандартная библиотека. Подходит для геймдева и высоконагруженных систем.
    • Нюанс: В C++ можно писать в стиле C, но это редко оправдано — лучше использовать современные фичи вроде smart pointers.
    Аспект C C++
    Управление памятью Ручное (malloc/free) Автоматическое (new/delete, RAII)
    Абстракции Нет Классы, шаблоны, пространства имён
    Производительность Максимальная Высокая, близкая к C
    Сложность обучения Средняя Высокая

    Где применять 😄 низкий уровень и embedded

    C доминирует в областях, где каждый байт и цикл на счету. Это ядра Linux, драйверы устройств, ПО для IoT и микроконтроллеров. В автомобильной электронике или бытовой технике C обеспечивает предсказуемость — нет сборщика мусора, который может подвиснуть.

    Представьте симулятор для биржи: миллисекунды решают. На C код летает без overhead. Или embedded в умных часах — здесь батарея не прощает лишних операций. Минус C — отсутствие защиты от ошибок, так что тестирование критично.

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

    • ОС и драйверы: Ядро Linux, Windows-драйверы — чистый C для стабильности.
    • Embedded и IoT: Микроконтроллеры Arduino, умные датчики — минимальный footprint.
    • Системные библиотеки: Многие API написаны на C, как libc или OpenGL.
    • Нюанс: В 2026 C популярен в реал-тайм системах, где Rust ещё не вытеснил его полностью.
    Область Почему C Примеры
    ОС Контроль железа Linux kernel
    IoT Низкое потребление Умные дома
    Драйверы Прямой доступ USB, GPU

    C++ для сложных систем и игр

    C++ берёт на себя высокопроизводительные приложения. Игровые движки Unreal, симуляторы, браузеры вроде Chrome — всё на C++. Шаблоны позволяют писать generic-код, STL упрощает работу с данными. Производительность близка к C, но с удобствами.

    В геймдеве C++ — стандарт: Unity (с C#), но ядро на C++. Высоконагруженный трейдинг или базы данных — здесь контроль памяти через RAII спасает от утечек. Минус — кривая обучения: современный C++ (C++20/23) требует понимания лямбд и coroutines.

    Это подводит к сценариям, где C++ выигрывает у C. Он масштабируется для больших команд и проектов.

    • Геймдев: Движки, графика — скорость + библиотеки вроде Boost.
    • Системное ПО: Браузеры, базы (MySQL частично).
    • Real-time: Симуляторы, финансовые системы.
    • Нюанс: C++ эволюционирует — modules в C++20 уменьшают время компиляции.
    Сценарий Преимущества C++ Альтернативы
    Игры Контроль GPU Rust (новые проекты)
    Базы данных Оптимизация запросов Go для серверов
    Графика OpenGL/Vulkan binding C для простоты

    Сравнение по ключевым метрикам

    C проще войти: меньше синтаксиса, фокус на алгоритмах. Но в больших проектах код разрастается, без классов трудно поддерживать. C++ решает это — наследование и полиморфизм упрощают архитектуру.

    По рейтингам 2026: C++ 4-е место в TIOBE, растёт в геймдеве. C стабилен в embedded. Производительность: оба близки, но C++ с оптимизациями иногда быстрее за счёт inline.

    Выбор зависит от задачи. Посмотрим таблицу для ясности.

    Метрика C C++ Победитель
    Скорость 10/10 9.5/10 C
    Удобство 5/10 8/10 C++
    Экосистема 6/10 9/10 C++
    Безопасность 4/10 7/10 C++
    • Для новичков: Начните с C — поймёте указатели.
    • Для команд: C++ — масштабируемость.
    • Нюанс: Оба компилируются в машинный код, без VM вроде JVM.

    Что определяет выбор в проекте

    В итоге C берёт минимализм и контроль, C++ — мощь абстракций. Подумайте о платформе: Linux — C, Windows/игры — C++. Рост Rust заметен, но C/C++ держат 20% рынка.

    Осталось учесть специфику: для стартапа скорость разработки важнее сырой мощности. Или hybrid — C для ядра, C++ для UI. В 2026 выбор шире, но основы не меняются.


    1 0 0 Ответить
  • AladdinA
    Aladdin
    Бесплатная синхронизация Obsidian через Облако Mail

    ecad405f-85f2-480c-a9b1-f8c75a85f71e-image.png

    мало кто хочет платить лишние $8 за синхронизацию Obsidian, если есть возможность решить проблему бесплатно, и такие способы есть, но не всегда они удобны.

    Лично я знаю и перепробовал несколько, но для начала я расскажу как устроен Obsidian. Да все проще некуда, это просто файлы, обычно md, поэтому импортировать данные, переносить или синхронизировать - все это отвязано от самой программы, это просто папка у вас на диске или в облаке, а значит способов синхронизировать эту папку великое множество.

    Мои требования были такими: использовать обсидиан на Телефоне и на Десктопе. Сначала я пользовался такими программами:

    • resilio sync - работакт как торрент, ставить надо на каждую машину, как задумка очень интересна

    • syncthing - аналог сервиса выше, но опенсорсный (меньше шанс, что этим вообще не воспользоваться если что-то заблокируют)

    • слышал я, что кто-то синхронизируется через github. Хм, неплохо, но мне такой вариант не очень нравился

    • плагин Remotely Save - Спасибо @kirilljsx, что подсказал мне про него. Вот тут интересно, плагин способен записывать вашу папку и синхронизировать ее с различными облачными дисками: google, nextcloud, dropbox, amazon s3, yandex disk и т д. Для
      параноиков есть шифрование, так что можно хранить и пароли и прямо в ваших .md файлах.

    Что мне понравилось, так это то, что я могу контролировать когда мне синхронизировать все, и у меня есть облачный снапшот, который не пропадет если я потеряю все девайсы, жми только кнопку синхронизации и все, но можно также настроить и планировщик (например раз в 5 минут), и это очень гибко, мне не надо держать в телефоне никакие приложения в фоне, как пример resilio sync, syncthing

    И для начала попробовал я Яндекс, и все было отлично пока я не перенес туда достаточно большое количество файлов что бы он мне выдал при синхронизации 429 Too Many Requests. Вот обсуждение проблемы на github, здесь предлагаю разные варианты но самое простое на текущий момент - это пользоваться облаком от Mail, если вам религия позволяет, и если вам хватит 8Гб для ваших заметок

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

    Obsidian кроссплатформенный поэтому все делается отдинаково на Linux, Android, MacOS, IOS, Windows.

    Устанавливаем Obsidian, заходим в настройки, далее в “Сторонние плагины”.

    Ищем плагин Remotely Save , устанавливаем. Value уже должен быть выбран в Obsidian, далее залезаете в настройки плагина, они будут уникальными для вашего текущего Value.

    Вот какие настройки нам нужны:

    • Choose a remote service - выбираем webdav

    • Server Address - https://webdav.cloud.mail.ru

    • Username - заходим в https://cloud.mail.ru/ и используем почтовый адрес нашего пользователя, подронее ниже в разделе Дополнение: Username

    • Password - неоьходимо создать пароль приложения, создаем его тут - https://account.mail.ru/user/2-step-auth/passwords

    f50d9209-781e-44ec-80d4-e97c1c246810-image.png

    • Change Remote Base Directory - дополнительно я называю папку в облаке где будут файлы для obsidian

    b38b188b-6084-407e-95e7-7a9f8b431a41-image.png

    Дополнительно скажу, что так можно синхронизировать не только файлы для obsidian, но и другие документы, базы паролей .kdb .kdbx и т д.

    Дополнение: Username

    когда заходим в Облако Mail то почта - это наш Username
    733fad9d-c5e0-42e0-b536-7cc5c97292fc-image.png


    0 0 0 Ответить
  • GameFishG
    GameFish
    Подборка лучших модов для BeamNG.drive 2026: машины, карты, прицепы

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

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

    Лучшие моды на машины

    Моды на автомобили расширяют гараж BeamNG.drive, добавляя реалистичные модели с точной физикой. Они учитывают вес, подвеску и разрушения, что делает вождение правдоподобным. Например, грузовики вроде Камаз 5490 позволяют симулировать тяжелый транспорт, а легковушки типа Volkswagen Passat b5 — городские поездки.

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

    Вот топовые моды на машины:

    • Камаз 5490 v1.0: Тяжелый грузовик с реалистичной кабиной, идеален для оффроуда и перевозок. Физика учитывает массу, разрушения кабины впечатляют.
    • Volkswagen Passat b5 v1.0: Переделка с улучшенной моделью, хорош для дрифта и краш-тестов. Подвеска мягкая, как в оригинале.
    • Ford Mondeo 2007 v1.0: Классика с детальными интерьером, подходит для ралли. Звуки мотора и деформации на высоте.
    • ИЖ 2717 v1.0: Советский фургон для ностальгии, прочный кузов выдерживает сильные удары.
    • Mazda 3 MSP v1.3: Спортивная версия с турбо, отличный выбор для гонок на время.
    Мод Тип Версия Особенности
    Камаз 5490 Грузовик 1.0 Масштабные разрушения, оффроуд
    Volkswagen Passat b5 Легковушка 1.0 Дрифт, город
    Mazda 3 MSP Спорткар 1.3 Турбо, гонки

    Важно: проверяйте обновления модов под вашу версию игры.

    Топовые карты для исследований

    Карты в BeamNG.drive меняют ландшафт: от раллийных трасс до городских сеттингов. Они добавляют новые физические объекты, препятствия и зоны для тестов. Пример — M3MotoMadness v2.0, где полно трамплинов и поворотов для экстремального вождения.

    Такие моды решают проблему повторяемости стандартных map. Они оптимизированы для производительности, с LOD-моделями для дальних объектов. Логично перейти к списку: выбирайте по типу — ралли, город или лес.

    Рекомендуемые карты:

    • M3MotoMadness v2.0 Final: Мототрек с петлями и прыжками, идеален для мото- и автогонок.
    • New England Forest Rally v1.0: Лесная трасса с rally loop, грязь и гравий тестируют сцепление.
    Карта Тип Версия Подходит для
    M3MotoMadness Мото/ралли 2.0 Прыжки, скорость
    New England Forest Rally Ралли 1.0 Оффроуд, грязь

    Фишка карт: они поддерживают multiplayer для совместных заездов.*

    Прицепы и грузовые моды

    Прицепы добавляют реализм перевозкам: от трейлеров до автобусов. Мод FP Landtravel Trailer Pack v0.9 включает несколько вариантов с физикой раскачки. Это полезно для симуляции конвоев или дальних поездок.

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

    Лучшие прицепы:

    1. Камаз 5490 Трейлер v1.0: Полный прицеп для тягача, выдерживает тяжелые грузы.
    2. FP Landtravel Trailer Pack v0.9: Набор кемперов, с анимацией и разрушениями.
    3. IYB B-Series Extended v2.22: Расширенная серия для пикапов, универсальный.
    Прицеп Совместимость Фичи
    Камаз 5490 Трейлер Грузовики Тяжелые грузы
    FP Landtravel Легковые Кемпинг, раскачка

    Нюанс: крепления проверяйте на совместимость с базовыми машинами.

    Что еще расширяет BeamNG в 2026

    В подборке не все: есть моды на спецтехнику вроде Stirling S6 или Mercedes W223, но они для продвинутых. Оригинальные карты и машины вроде Nissan GT-R R35 ждут теста в ралли. Стоит поэкспериментировать с паками, чтобы найти свой стиль.

    Физика BeamNG позволяет комбинировать моды, создавая кастомные сценарии. Новинки 2026 фокусируются на детализации и оптимизации под 0.38.x. Дальше — самостоятельный поиск по популярности и отзывам.


    0 0 0 Ответить
  • hannadevH
    hannadev
    Что такое асинхронная функция в JavaScript: простое объяснение и примеры

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

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

    Почему JavaScript нуждается в асинхронности

    JavaScript работает в однопоточном окружении: код выполняется последовательно, и если функция тратит много времени, весь скрипт ждёт. Представьте запрос к серверу — без асинхронности страница зависнет. Асинхронные функции решают это, возвращая Promise сразу, а результат — позже.

    Например, функция для загрузки данных с API: без async код остановится на fetch. С async процессор переходит к другим задачам. Это повышает отзывчивость приложений, особенно в браузере или Node.js. Логично перейти к сравнению синхронного и асинхронного кода.

    Синхронный код Асинхронный код
    Блокирует поток до завершения Возвращает Promise, поток свободен
    Простой, но тормозит UI Сложнее, но отзывчивый
    Подходит для быстрых операций Идеален для I/O (сеть, файлы)
    • Блокировка UI: В синхронном коде долгий цикл for не даст кликнуть по кнопке.
    • Сетевые запросы: Fetch без async ждёт ответа секунды.
    • Масштаб: В больших apps синхронность приводит к лагам.

    Как объявить и использовать async функцию

    Объявление просто: добавьте async перед function. Такая функция автоматически возвращает Promise, даже если внутри return 123 — он обернётся в resolved Promise. Внутри можно использовать await, чтобы приостановить выполнение только этой функции, не блокируя весь скрипт.

    Пример: async function fetchData() { const response = await fetch(‘/api’); return response.json(); }. Вызов: fetchData().then(data => console.log(data)). Await ждёт разрешения Promise. Это делает код похожим на синхронный, но без блокировок. Теперь разберём синтаксис подробнее.

    async function example() {
      const value = await somePromise();
      return value * 2;
    }
    
    // Вызов
    example().then(result => console.log(result));
    
    • async перед именем: Обязательно, превращает функцию в асинхронную.
    • await внутри: Только в async функциях, ждёт Promise.
    • Нюанс: Await не блокирует глобальный поток, только текущую async функцию.
    • Возврат Promise: Всегда, даже при throw ошибки.
    Элемент Описание Пример
    async Ключевое слово async function foo() {}
    await Ожидание let x = await promise;
    .then() Обработка func().then(onSuccess);

    Await и обработка ошибок в async функциях

    Await делает код последовательным: операции выполняются одна за другой, как в синхронном стиле. Но если Promise reject’нется, код упадёт — используйте try/catch. Это удобнее цепочек .then().catch(), особенно для нескольких операций.

    Пример: async function loadUser() { try { const user = await fetchUser(); const posts = await fetchPosts(user.id); return posts; } catch (error) { console.error(‘Ошибка:’, error); } }. Здесь две асинхронные операции ждут друг друга. Без try/catch ошибка сломает всё. Переходим к типичным примерам.

    • Сетевой запрос: await fetch(url) вместо .then().
    • Цепочка операций: await promise1(); await promise2(); — читаемо.
    • Ошибки: try { await riskyOp(); } catch (e) { handle(e); }.
    • Timeout симуляция: await new Promise(resolve => setTimeout(resolve, 1000));
    Проблема Решение с async/await Альтернатива
    Callback hell Последовательный код .then() цепочки
    Ошибки try/catch .catch()
    Читаемость Как sync Колбэки сложны

    Практические примеры асинхронных функций

    Рассмотрим реальные сценарии: загрузка нескольких ресурсов параллельно или последовательно. Async функции идеальны для API, файлов в Node.js или таймеров. Например, параллельная загрузка: Promise.all([await fetch1(), await fetch2()]) — но лучше без await для параллелизма.

    Функция для обработки массива Promise: asyncMap(array, async fn) ждёт все и возвращает результаты. Это упрощает map с асинхронными операциями. В UI: обновление списка пользователей без фризов. Теперь код-примеры.

    async function fetchUsers() {
      const [user1, user2] = await Promise.all([
        fetch('/user/1'),
        fetch('/user/2')
      ]);
      return [await user1.json(), await user2.json()];
    }
    
    • Параллельные запросы: Promise.all() + await внутри.
    • Не параллельно: Последовательные await — медленнее.
    • Node.js файлы: const data = await fs.readFile(‘file.txt’);
    • API с пагинацией: Цикл с await fetch(nextPage).

    Ключевые отличия async от промисов и колбэков

    Async/await — сахар над Promise: async возвращает Promise, await — это .then() под капотом. Колбэки устарели из-за пирамид. Промисы хороши для цепочек, async — для сложной логики. Выбирайте async, когда код выглядит запутанно с .then().

    Сравнение производительности: async не медленнее, но читаемее. В Thenable-объектах await работает с .then(). Это расширяет возможности. Подводим к выбору подхода.

    Подход Плюсы Минусы
    Колбэки Простой Callback hell
    Promise Цепочки, all/race Глубокие цепи
    Async/await Читаемость, try/catch Только в async
    • Когда async: Много await, сложная логика.
    • Когда Promise: Простые цепочки.

    Async функции меняют подход к задержкам

    Асинхронные функции позволяют фокусироваться на логике, а не на механизмах ожидания. Осталось место для нюансов вроде одновременных Promise или Web Workers для тяжёлых задач. Подумайте, как интегрировать их в ваш проект: начните с простых fetch и постепенно усложняйте.

    В реальных apps комбинируйте с React hooks или Vue composables. За кадром — обработка race conditions и таймауты, но базового хватит для 90% случаев.


    0 0 0 Ответить
  • kirilljsxK
    kirilljsx
    DP0 что это: автоматическая коробка передач для Peugeot, Renault и не только

    DP0 — это четырехступенчатая автоматическая трансмиссия, которую ставили на популярные модели Peugeot, Citroen, Renault и Chery. Она появилась в конце 90-х и до сих пор встречается на вторичке. Если вы заметили рывки при переключении или утечку масла, эта статья разберет, что к чему.

    Разобраться с DP0 полезно, чтобы вовремя провести ТО и избежать дорогого ремонта. Мы поговорим об устройстве, типичных болях и обслуживании. Это поможет сэкономить на сервисе и продлить жизнь коробке до 200 тысяч км и больше.

    Что такое DP0 и откуда она взялась

    DP0 — это классический гидромеханический автомат на четыре передачи, разработанный совместно PSA (Peugeot-Citroen) и Renault в 1999 году. По сути, это модернизированная версия трансмиссии Volkswagen 01M, купленной по лицензии. Коробка предназначена для переднеприводных авто с моторами 1.4–2.0 литра и крутящим моментом до 210 Нм. Производители специально “прикручивали” настройки, чтобы снизить нагрузку и увеличить ресурс.

    Ставили DP0 на модели вроде Peugeot 307, Citroen C4, Renault Megane и даже Chery. В 2013 году Renault выпустил обновления — DP2 для переднего привода и DP8 для полного. Эти версии имеют улучшенную электрику, гидротрансформатор и унифицированные ремкомплекты. Пример: на Renault Duster и Kaptur до сих пор можно встретить такие автоматы. Все это подводит к тому, что DP0 — надежная, но капризная конструкция, требующая внимания.

    Вот ключевые характеристики DP0:

    • Тип: гидроавтомат с планетарным редуктором Simpson.
    • Передачи: 4 вперед + задний ход.
    • Масло: Elf Renaultmatic D3 SYN, объем около 6 литров.
    • Ресурс: 150–200 тысяч км при правильном уходе.
    • Особенность: адаптивное ЭБУ, подстраивается под стиль езды.
    Параметр Значение
    Крутящий момент до 210 Нм
    Замена масла каждые 40 000 км
    Замена фильтра каждые 80 000 км
    Привод передний

    Устройство и модификации DP0

    Конструкция DP0 простая: один вал, планетарный ряд Simpson для передач, 8-клапанный электрогидроблок и внешний ЭБУ. Теплообменник охлаждает масло, но со временем забивается, что приводит к перегреву. Рабочая температура должна быть 75–90°C — при этом коробка живет долго. Есть спортивный и внедорожный режимы для разных стилей.

    Модификации вроде DP2 и DP8 добавили новые блокировки и электрику, но расходники совместимы. Пример: на старых Peugeot теплообменник меняют на радиатор через адаптер, чтобы избежать критического нагрева. Это особенно актуально для возрастных экземпляров с пробегом за 150 тысяч. Логично перейти к сравнению версий.

    Сравнение модификаций DP0:

    Модификация Год Особенности Ресурс
    DP0/AL4 1999 Базовая, теплообменник 150–200 тыс. км
    DP2 2013 Улучшенная электрика, передний привод 200+ тыс. км
    DP8 2013 Полный привод, новые ГТ 200+ тыс. км
    • Адаптивное управление: ЭБУ учится под водителя, меняя алгоритмы.
    • Охлаждение: обязательно следить за теплообменником, иначе пластик и резина деградируют.
    • Ремонт: унифицированные комплекты упрощают дефектовку.

    Типичные проблемы и симптомы

    Чаще всего DP0 страдает от перегрева масла, из-за чего изнашиваются фрикционы и тефлоновые кольца. Симптомы: стружка в поддоне, пинки при переключении, вибрация на 40–60 км/ч. Еще проблема — потеря давления, когда задний ход пропадает. Пример: на Renault Logan с DP0 после 100 тысяч часто течет сальник.

    В аварийном режиме остается только 3-я передача — ехать дальше нельзя, иначе добьете гидроблок. Профилактика: менять масло каждые 40 тысяч, фильтр — 80 тысяч. Капиталка включает замену поршней, прокладок и дисков. Это подводит к списку неисправностей и как их ловить.

    Типичные симптомы поломок:

    • Течь масла и стружка в поддоне — признак износа фрикционов.
    • Пинки или удары при переключении — проблемы с давлением в гидросистеме.
    • Задержки передач и повышенный расход топлива — перегрев или грязное масло.
    • Вибрация на скорости — износ ГDT или подшипников.
    • Отсутствие передач — аварийный режим ЭБУ.
    Симптом Причина Что делать
    Пинки Износ фрикционов Капиталка
    Утечка Сальники Замена уплотнений
    Нет хода Давление Диагностика ЭБУ

    Обслуживание и ремонт DP0

    Обслуживание DP0 сводится к регулярной замене масла и фильтра — это продлевает жизнь до полумиллиона км при спокойной езде. Используйте только рекомендованное ATF, полная заливка 6 литров. После 100 тысяч чистите теплообменник или ставьте радиатор. Ремонт: полная дефектовка с заменой ремкомплекта.

    Пример: владельцы Peugeot меняют все прокладки и кольца разом — это дешевле, чем потом менять по частям. Контрактные коробки найти можно, но проверяйте пробег. Важно: не нагружайте на холодную, разогревайте 5–10 минут. Теперь список рекомендаций по ТО.

    Правила ухода:

    • Масло каждые 40 000 км: полная замена с фильтром.
    Расстояние Работы
    40 000 км Масло + фильтр
    80 000 км Фильтр + чистка теплообменника
    150 000 км Капиталка
    • Температура: мониторьте датчиком, не выше 90°C.
    • Диагностика: читайте ошибки ЭБУ перед ремонтом.

    За кулисами DP0: что еще учесть

    DP0 кажется простой, но ее ресурс сильно зависит от масла и стиля езды. Мы разобрали базовое, но остались нюансы вроде совместимости с Chery или тонкостей ремонта ГDT. Стоит подумать о чип-тюнинге ЭБУ для мягких переключений.

    Дальше можно копать в мануалы или форумы по конкретной модели. Автомат служит долго, если не доводить до аварийки.


    0 0 0 Ответить
  • GameFishG
    GameFish
    Лучшие моды для Plants vs Zombies: подборка топовых 2026

    В этой подборке собраны лучшие моды для Plants vs Zombies. Они добавляют новый контент, усложняют геймплей и возвращают механики из первой части. Это поможет освежить игру, если оригинал надоел, и даст новые тактики против зомби.

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

    Моды, вдохновлённые классикой PvZ1

    Многие моды берут за основу первую Plants vs Zombies, перерабатывая механики под современный взгляд. Это не просто скины — здесь меняют поведение растений и зомби, чтобы вернуть ностальгию с новым поворотом. Например, зомби-футболист теперь просто бежит, а его шлем работает как броня, а не таран. Такие изменения заставляют переосмыслить стратегии, которые казались знакомыми.

    Логика проста: оригинал был сбалансирован идеально, но моддеры добавляют глубину. PvZ2 Requiem полностью перерабатывает PvZ2 с акцентом на PvZ1 — почти каждое растение и зомби получают старую механику. PvZ2 Edgest копирует стиль релизной PvZ2 2013 года, с классическими картами. Это подводит к списку топовых вариантов для фанатов старой школы.

    • PvZ2 Requiem: Полная переработка — растения и зомби из PvZ1 с обновлёнными анимациями. Идеально для тех, кто скучает по оригиналу, но хочет вызов.
    • PvZ2 Edgest: Новичок среди модов, но с ретро-стилем 2013 года. Карты как в релизе, акцент на классике без лишнего контента.
    • Eco Edition (v0.1.2): Обновлённые модели вручную, новые карты и онлайн-режим. Добавляет кооператив с друзьями.
    Мод Основной фокус Платформы Размер
    PvZ2 Requiem Механики PvZ1 ПК, Android ~70 MB
    PvZ2 Edgest Ретро-стиль ПК Не указан
    Eco Edition Онлайн + модели ПК, Android 79 MB

    Гибридные моды с новыми растениями и зомби

    Гибридные моды — это взрыв креатива: скрещивают растения и зомби, создавая имбу вроде летающих врагов или замораживающих снежинок. Они расширяют геймплей, добавляя 50+ новых юнитов с уникальными способностями. Hybridik вводит гибридных зомби, которые меняют линии атаки, а Fusion Edition даёт крафтинг растений для тактических комбо.

    Почему это круто? Оригинал ограничивал выбор, а здесь комбинируешь ледяные снежинки с огненными тыквами. Plants vs Zombies Grafted позволяет создавать уникальные гибриды, меняя процесс на эксперименты. Такие моды решают скуку поздних уровней, вводя sandbox-элементы.

    • Hybridik (v3.6.5): Гибридные зомби, новые растения, механики. Зомби летают и замораживают — чистый хаос.
    • Fusion Edition (v2.3.1): 50+ гибридов, новые режимы. Королева огнецвет бьёт по трём рядам.
    • Grafted (v1.106): Скрещивание растений для комбо. Прокачка и новые тактики.
    • Hybrid Extension (v0.1): Хоррор-элементы + изменения локаций. Для любителей жути.
    Мод Новые юниты Сложность Загрузок
    Hybridik 50+ гибридов Средняя 430+
    Fusion Edition Имба-растения Высокая 900k+
    Grafted Скрещивания Низкая 53k+

    Моды на сложность и новый контент

    Эти моды для тех, кто прошёл оригинал и хочет хардкора. Pvz2 Thyme — китайский пак с усложнениями, новыми уровнями и экстримом. Original добавляет оригинальный контент: больше растений, зомби и вызовов от простых до адских. Suffocation усиливает врагов, требуя идеальной стратегии.

    Они решают проблему лёгкости: боссы-зомби спавнят подкрепления, грибы прыгают линии. PvZ2 PLUS Reimagined фокусируется на новом контенте с реимагинед-старым. PvZ Ultimate вносит хаос с прокачкой и sandbox.

    • Pvz2 Thyme: Усложнения + допконтент для ветеранов. Не даст заскучать.
    • Original: Много уровней, растений, сложность нарастает.
    • Suffocation (v1.6.0): Зомби хитрее, растения слабее — тест на прочность.
    • PLUS Reimagined: Новый контент, в разработке до 2025.

    Что моды не рассказывают о балансе

    Моды меняют Plants vs Zombies, но баланс — вечная тема: иногда имба-растения ломают уровни, как огненная тыква в Fusion. Остаётся подумать над совместимостью — не все работают на Android без лагов. Китайские моды вроде Thyme требуют патчей для стабильности.

    Ещё за кадром — комьюнити-обновления: Hybrid Remake 2026 обещает ремейки с гибридами вместо классики. Стоит следить за Steam и VK-группами, где тестеры делятся фиксами.


    0 0 0 Ответить
  • hannadevH
    hannadev
    JavaScript: Округлить в меньшую сторону с Math.floor() и альтернативами

    В JavaScript округление в меньшую сторону — это базовая операция для работы с числами. Метод Math.floor() отбрасывает дробную часть, возвращая ближайшее меньшее целое. Это полезно при расчётах индексов, пагинации или обработке координат, где лишние дроби мешают.

    Без правильного округления код может выдавать неожиданные результаты, особенно с отрицательными числами. Мы разберём Math.floor(), сравним с похожими методами и покажем примеры из практики. Это поможет избежать ошибок и писать точный код.

    Как работает Math.floor() в JavaScript

    Math.floor() всегда округляет число вниз, к ближайшему меньшему целому. Для положительных чисел это просто отбрасывание дробной части: 5.9 становится 5, 10.1 — 10. С отрицательными числами интереснее: -5.1 округляется до -6, потому что -6 меньше -5.1.

    Это поведение важно понимать, чтобы не запутаться в логике. Представь, что считаешь страницы в таблице: общее количество элементов 15.7 — берёшь Math.floor(15.7) и получаешь 15. Или генерируешь случайный индекс массива: Math.floor(Math.random() * длина) даёт число от 0 до длины-1. Такой подход работает стабильно и предсказуемо.

    Теперь разберём на примерах:

    • Положительные числа: Math.floor(4.2) → 4, Math.floor(7.999) → 7.
    • Отрицательные числа: Math.floor(-4.2) → -5, Math.floor(-7.001) → -8.
    • Целые числа: Math.floor(5) → 5, без изменений.
    Число Math.floor() Пояснение
    4.2 4 Отбрасывает 0.2
    -4.2 -5 К меньшему целому
    7.999 7 Вниз к 7
    -7.001 -8 Вниз к -8

    Сравнение с другими методами округления

    Округление в меньшую сторону часто путают с похожими функциями. Math.trunc() просто усекает дробную часть, игнорируя знак: -4.2 становится -4, в отличие от Math.floor(-4.2) = -5. Math.ceil() тянет вверх: 4.2 → 5, -4.2 → -4. А Math.round() идёт к ближайшему: 4.5 → 5, 4.4 → 4.

    Выбор метода зависит от задачи. Для пагинации иногда нужен ceil для количества страниц, но для индексов — всегда floor. С отрицательными числами trunc может показаться проще, но floor строже следует правилу «в меньшую сторону». В реальном коде это спасает от багов, особенно при обработке пользовательских данных.

    Вот таблица сравнения на примерах:

    Число floor ceil round trunc
    4.2 4 5 4 4
    4.7 4 5 5 4
    -4.2 -5 -4 -4 -4
    -4.7 -5 -4 -5 -4
    • floor: Идеально для индексов и кратных значений.
    • Нюанс: С отрицательными числами уходит дальше в минус.
    • trunc: Быстрее, но не всегда «в меньшую сторону».

    Практические примеры использования Math.floor()

    В веб-разработке Math.floor() применяется везде: от генерации случайных элементов до расчётов размеров. Допустим, у тебя массив из 5 элементов, и ты хочешь случайный: Math.floor(Math.random() * 5) вернёт 0–4. Или пагинация: общее 127 элементов по 10 на странице — Math.floor(127 / 10) = 12 страниц.

    Ещё пример — округление кратных значений. Чтобы найти ближайшее меньшее кратное 5 для числа 23: раздели на 5, примени floor, умножь обратно: Math.floor(23 / 5) * 5 = 20. Это полезно для сеток в играх или UI. С отрицательными: Math.floor(-23 / 5) * 5 = -25. Всегда проверяй на граничных случаях.

    Код-примеры:

    1. Случайный элемент: const randomIndex = Math.floor(Math.random() * arr.length);
    2. Кратное: function toLowerMultiple(num, div) { return Math.floor(num / div) * div; }
    3. Пагинация: const pages = Math.floor(total / perPage);

    Важно: Math.floor() работает только с числами. Для строк используй parseFloat() сначала.

    Задача Код Результат для 23.7
    Индекс Math.floor(23.7) 23
    Кратное 5 Math.floor(23.7/5)*5 20
    Случайное Math.floor(Math.random()*23.7) 0-23

    Когда Math.floor() подводит и альтернативы

    Math.floor() надёжен, но с очень большими числами JavaScript теряет точность из-за floating-point. Для 2^53 + 0.5 он может не сработать идеально. Тогда используй побитовые операции: ~~num или num | 0 — они усекают как trunc для положительных, но быстрее.

    Для кастомного округления пиши функцию: проверяй знак с Math.sign() и комбинируй с abs(). Это редко нужно, но полезно в библиотеках. Ещё вариант — toFixed(0), но он возвращает строку, так что парсь обратно.

    • Побитовые: 23.7 | 0 → 23 (только положительные).
    • Нюанс: Не для отрицательных, как floor.
    • Функция: function strictFloor(n) { return n < 0 ? Math.ceil(n) - 1 : Math.floor(n); } — но это излишество.

    Тонкости с отрицательными и большими числами

    Math.floor() с отрицательными всегда уходит в минус, что логично по математике. Но в UI иногда хочется поведения как trunc. Тестируй: Math.floor(-0.1) = -1. Для координат в canvas это может сдвинуть объект.

    При больших числах (> 2^53) используй BigInt: (BigInt(num) | 0n), но floor не для него напрямую. В 99% случаев стандартный Math.floor() хватит с запасом.

    Числа без дробей: что ещё учесть

    Округление в меньшую сторону решает повседневные задачи в JS, от UI до алгоритмов. Мы разобрали Math.floor(), сравнили с ceil, round, trunc и показали код. Осталось поэкспериментировать с комбинациями вроде pow или random — там тоже пригодится точность. Подумать стоит над safe integers и как они влияют на округление в продакшене.


    0 0 0 Ответить
  • kirilljsxK
    kirilljsx
    Кодировка ANSI: что это, как работает и зачем нужна в 2026 году

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

    Знание ANSI поможет избежать кракозябр в файлах, особенно при работе с legacy-кодом или старыми программами. Это полезно для разработчиков, тестировщиков и всех, кто сталкивается с текстовыми данными из разных источников. Давайте разберёмся по полочкам, чтобы вы могли уверенно работать с такими файлами.

    Что такое кодировка ANSI на самом деле

    ANSI — это не единая кодировка, а общее название для однобайтовых систем представления символов, разработанных American National Standards Institute. Каждый символ кодируется одним байтом, то есть максимум 256 различных знаков. Коды от 32 до 126 полностью совпадают с ASCII, что делает её совместимой с базовыми английскими символами. В Windows под ANSI подразумевается локальная кодовая страница, заданная в реестре системы — для русского языка это обычно Windows-1251.

    На практике это значит, что файл, сохранённый в ANSI на одной машине, может отобразиться неправильно на другой, если настройки ОС отличаются. Например, русский текст в Windows-1251 превратится в набор непонятных символов на системе с западноевропейской кодовой страницей вроде Windows-1252. Такие проблемы часто возникают при обмене файлами между пользователями или при миграции данных. Логично, что для решения нужно понимать структуру и переходить к универсальным альтернативам.

    Вот ключевые особенности ANSI:

    • Однобайтовая структура: каждый символ — 8 бит, лимит в 256 кодов.
    • Зависимость от системы: реальная кодировка определяется настройками Windows (реестр).
    • Расширение ASCII: добавлены символы для конкретных языков, типографика и псевдографика.
    Характеристика Описание
    Байты на символ Всегда 1
    Макс. символов 256
    Совместимость ASCII (32-126) + локальные дополнения
    Примеры Windows-1251 (кириллица), Windows-1252 (Западная Европа)

    Как ANSI работает в Windows и повседневных задачах

    В Windows ANSI — это синоним системной кодовой страницы, которая меняется в зависимости от региональных настроек. Для русскоязычных пользователей это cp1251 (Windows-1251), где добавлены кириллические буквы, символы для украинского, белорусского и других языков. Файлы, сохранённые в Блокноте как “ANSI”, используют именно эту страницу. Это удобно для локальных задач, но проблематично при работе с многоязычными данными.

    Представьте: вы открываете TXT-файл из старого проекта в Notepad — текст нормальный. Передаёте его коллеге с английской Windows — и вот кракозябры. Такие сбои происходят потому, что байты интерпретируются по другой таблице. Важный нюанс: ANSI не предназначена для интернационализации, её лимит в 256 символов не позволяет вместить все Unicode-знаки. Переходим к практическим аспектам.

    Практические примеры использования:

    1. Сохранение в Блокноте: Выберите “Сохранить как” → кодировка ANSI для совместимости с legacy-приложениями.
    2. Обработка файлов: В скриптах Python или PowerShell проверяйте encoding='cp1251' для русских ANSI-файлов.
    3. Миграция данных: Конвертируйте в UTF-8, чтобы избежать потерь.
    Сценарий ANSI (cp1251) UTF-8
    Русский текст 1 байт/символ, компактно 2 байта/символ, универсально
    Английский 1 байт, как ASCII 1 байт
    Размер файла Меньше для кириллицы Больше, но надёжнее
    Проблемы Кракозябры при смене ОС Полная совместимость

    Различия ANSI с UTF-8 и Unicode: сравнение на примерах

    ANSI всегда использует один байт на символ, в то время как UTF-8 — переменное число байтов (1-4), а Unicode (UTF-16) — два байта базово. Для простого английского текста ANSI и UTF-8 одинаково эффективны, но кириллица в ANSI компактнее. Возьмём фразу “Привет, мир!” — в ANSI (cp1251) она займёт меньше места, чем в UTF-8, но откроется только на совместимой системе.

    В реальных проектах это критично: разработчик пишет скрипт для парсинга логов — в ANSI размер меньше, скорость выше. Но если лог содержит эмодзи или китайские иероглифы (хотя они запрещены в ANSI), файл сломается. Нюанс: переход на UTF-8 решает 99% проблем, но требует конвертации старых данных. Давайте разберём в таблице и списке.

    Преимущества и недостатки:

    • Плюсы ANSI: Компактность, быстрая обработка в старом ПО, совместимость с DOS/Windows.
    • Минусы: Локальность, лимит символов, риски при обмене.
    • Когда выбрать: Для внутренних русскоязычных TXT, CSV без спецсимволов.
    Кодировка Байты/символ Пример размера файла (36 символов кириллицы)
    ANSI (cp1251) 1 36 байт
    UTF-8 1-2 45 байт
    Unicode (UTF-16) 2 74 байта

    Управляющие последовательности ANSI в терминалах

    Помимо текстовой кодировки, ANSI известна escape-последовательностями для управления выводом в терминалах — цветами, стилем, позиционированием. Они начинаются с ESC (код 27), за которым следует [ и параметры, вроде \u001b[31m для красного текста. Это стандарт ECMA-48, используемый в Linux-терминалах, PowerShell и даже VS Code.

    В программировании на Python или Bash такие последовательности окрашивают вывод: print('\033[32mЗелёный текст\033[0m'). Без них терминал монохромный. Нюанс: в Windows до версии 10 поддержка была слабой, теперь ок. Это полезно для скриптов, логов и CLI-приложений. Подводим к примерам.

    Основные последовательности:

    • Цвета: \u001b[38;5;{код}m — 256 оттенков (0-255).
    • Стиль: \u001b[1m — жирный, \u001b[4m — подчёркнутый.
    • Сброс: \u001b[0m — вернуть дефолт.
    Команда Эффект
    \u001b[31m Красный текст
    \u001b[32m Зелёный
    \u001b[1;34m Жирный синий

    Почему ANSI всё ещё актуальна и что с ней не так

    Несмотря на доминирование UTF-8, ANSI держится в legacy-систах, принтерах и некоторых API Windows. Она экономит место и скорость в нишевых задачах, но её системная зависимость — главный минус. Стоит подумать о гибридных подходах: хранить в UTF-8, но парсить с fallback на ANSI.

    В 2026 году проблемы с кодировками не ушли — старые базы данных, экспорт из Excel или миграция с DOS. Над этим стоит поразмыслить: как автоматизировать детекцию и конвертацию, чтобы избежать рутины. Дальше — эксперименты с инструментами вроде iconv или Python’s chardet.


    0 0 0 Ответить
  • GameFishG
    GameFish
    Лучшие моды для Plants vs Zombies: полный гайд 2026

    Если вы уже прошли оригинальную Plants vs Zombies и вам хочется чего-то свежего, то модификации — это именно то, что вам нужно. Моды добавляют новые растения, зомби, механики и режимы, которые кардинально меняют игровой опыт. В этой подборке разберём самые интересные модификации, которые стоит попробовать.

    Мир PvZ модов невероятно разнообразен: есть проекты, сосредоточенные на усложнении игры, есть те, что переосмысляют классику, а есть и совсем экспериментальные варианты. Каждый найдёт что-то по вкусу, независимо от того, любите ли вы жёсткий челлендж или предпочитаете творческий подход к стратегии.

    Моды с гибридными растениями

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

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

    Ключевые особенности гибридных модов:

    • Более 50 новых гибридных растений с комбинированными способностями
    • Летающие зомби, ледяные враги и другие специальные типы
    • Переработанная графика и звуковое оформление
    • Новые механики боя, требующие глубокой стратегии
    • Дополнительные режимы и мини-игры для разнообразия

    Сложные модификации для хардкорных игроков

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

    PvZ2: Requiem — это полностью переработанная версия второй части с акцентом на классику первой игры. Разработчики вернули механики из оригинала, переделали поведение зомби и способности растений. Например, Зомби-футболист теперь просто бежит, а его шлем работает как броня. PvZ2 Thyme и Original — это китайские модификации, которые существенно усложняют оригинальную игру, добавляя десятки новых уровней с боссами и волнами враждебных волн.

    Boost механики в этих модах включают:

    • Боссы и прочные зомби, которые спавнят подкрепление
    • Враги, перепрыгивающие через растения и меняющие линии
    • Волны с 3-4 одновременными типами зомби
    • Специальные движения врагов, требующие адаптации стратегии
    • Ограничение на количество одновременных растений

    Моды на переосмысление классики

    Есть разработчики, которые берут известные механики и переделывают их с нуля, создавая совершенно новые игровые опыты. PvZ2 Edgest и PvZ2: PLUS Reimagined — отличные примеры такого подхода, где классические элементы переживают творческое возрождение.

    Edgest ориентирован на стиль релизной PvZ2 из 2013 года, но с добавлением собственного контента и механик. Авторы скрупулёзно переработали каждую карту, сохраняя атмосферу классики, но делая игру интереснее. PLUS Reimagined пошёл дальше: разработчики создают полностью новый контент или переосмысляют старый, применяя свежие подходы к известным растениям и врагам. Эти моды идеальны, если вы хотите вернуться в прошлое, но с улучшениями.

    Что отличает эти проекты:

    • Сохранение визуального стиля и атмосферы оригинала
    • Новые уровни, разработанные с учётом классических механик
    • Переработанные растения, сохраняющие суть, но с новыми способностями
    • Баланс между ностальгией и инновациями
    • Тщательная работа над деталями и анимациями

    Экспериментальные и уникальные моды

    Некоторые разработчики идут ещё дальше, создавая совершенно нестандартные модификации, которые меняют саму суть игры. Например, You Zombies Adventure позволяет играть за зомби, а не за растения — ваша цель теперь съесть пять мозгов за раунд, при этом растения получают апгрейды и защиту.

    В категорию экспериментальных также попадают моды с элементами других жанров: появляются варианты с крафтингом растений, шутер-стратегии от первого лица, где нужно собирать солнца и расставлять растения вручную, и даже моды с Sandbox-режимом, где вы сами решаете, как именно уничтожать волны врагов.

    Тип мода Особенность Сложность Для кого
    Гибриды 50+ новых растений, комбинированные способности Средняя Любители стратегии и новизны
    Хардкор Боссы, сложные враги, жёсткие волны Высокая Опытные игроки, ищущие челлендж
    Классика переделанная Новый контент в стиле оригинала Средняя Ностальгирующие по PvZ1
    Экспериментальные Новые механики, режимы, жанры Варьируется Любители необычного геймплея

    На что обратить внимание при выборе мода

    Перед тем как устанавливать модификацию, стоит учитывать несколько моментов. Совместимость с платформой — некоторые моды работают только на ПК, другие также доступны для Android. Размер файла варьируется от 79 МБ до 523 МБ, поэтому важно проверить, хватит ли вам места. Дата последнего обновления говорит о том, активно ли разработчик поддерживает проект.

    Кроме того, обратите внимание на количество загрузок и комментариев — это косвенный показатель популярности и надёжности мода. Некоторые модификации находятся в активной разработке (например, PLUS Reimagined ожидалась к зиме 2024-2025), поэтому функционал может меняться. Читайте описания и смотрите видеоревью перед установкой, чтобы понять, подходит ли вам именно этот проект.

    Базовый чек-лист перед установкой:

    • Проверьте совместимость мода с вашей ОС и версией игры
    • Убедитесь в наличии свободного места на диске
    • Прочитайте последние комментарии пользователей о стабильности
    • Посмотрите видеообзоры, чтобы понять геймплей
    • Убедитесь, что разработчик активно обновляет проект

    Итоги: выбор мода по вашему стилю игры

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

    Важно помнить, что выбор мода зависит от ваших предпочтений: если вы ищете свежести и экспериментов, выбирайте гибриды; если нужен челлендж — идите в хардкор; если хочется ностальгии с улучшениями — присмотритесь к переработкам классики. Каждый проект — результат работы энтузиастов, которые вкладывают в игру свою душу, поэтому стоит потратить время на поиск именно вашего идеального мода.


    0 0 0 Ответить
  • hannadevH
    hannadev
    JavaScript: Как добавить класс элементу — classList.add и альтернативы

    В JavaScript часто нужно динамически менять внешний вид элементов. Добавление класса — это простой способ применить стили без прямого редактирования CSS. Это помогает решать задачи вроде подсветки активных кнопок или показа модальных окон.

    Метод classList.add делает это безопасно и удобно. Он не перезаписывает существующие классы, а добавляет новые. Зачем это нужно? Чтобы избежать ошибок с дубликатами и поддерживать чистый код в проектах любого размера.

    Основной метод: classList.add()

    Объект classList — это стандартный способ работы с классами в современном JavaScript. Метод add позволяет добавить один или несколько классов к элементу за один вызов. Если класс уже есть, ничего не меняется — дубли не создаются. Это делает код надежным для повторных вызовов.

    Представьте кнопку, которую нужно подсветить при клике. Вы находите элемент через querySelector, вызываете classList.add(‘active’), и CSS-селектор .active применяется мгновенно. Логика простая: получаем элемент, добавляем класс, стили обновляются. Такой подход работает во всех браузерах без проблем совместимости.

    • Синтаксис: element.classList.add('класс1', 'класс2'); — добавляет сразу несколько классов.
    • Пример с одним классом:
      let btn = document.querySelector('#myButton');
      btn.classList.add('highlight');
      
      Результат: элемент получит class=“… highlight”.
    • Пример с несколькими: btn.classList.add('visible', 'animated'); — оба класса применятся без конфликтов.
    • Нюанс: Метод игнорирует дубли, так что add('active') дважды — это безопасно.
    Сценарий Код Результат
    Добавить один класс elem.classList.add('active'); Добавляет ‘active’ к существующим
    Несколько классов elem.classList.add('show', 'fade'); Применяет оба сразу
    Если класс уже есть elem.classList.add('active'); Ничего не меняется

    Альтернатива через className

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

    При клике на элемент nav вы можете сделать его “липким” для скролла. Получаете className, проверяете наличие класса ‘sticky’, добавляете если нужно, и обновляете атрибут. Это гибко, но вручную приходится фильтровать пустые строки. В отличие от classList, здесь легко сломать разметку лишним пробелом.

    • Базовый пример:
      let elem = document.getElementById('nav');
      elem.className += ' sticky';
      
    • С проверкой дублей:
      function addClassSafe(el, cls) {
        if (!el.className.includes(cls)) {
          el.className += ' ' + cls;
        }
      }
      
    • Разбиение на массив: el.className.split(' ').filter(Boolean).push(cls).join(' ');.
    • Важно: Всегда очищайте пустые строки с помощью filter(Boolean).
    Метод Преимущества Недостатки
    className += ’ cls’ Простой, без API Риск дублей и пробелов
    С проверкой Более безопасно Больше кода
    classList.add Автоматическая проверка Только современные браузеры

    Работа с атрибутом через setAttribute

    Метод setAttribute полностью заменяет атрибут class. Чтобы добавить класс, сначала получаете текущее значение, парсите его, добавляете новый и записываете обратно. Это полезно в скриптах, где нужно полное управление атрибутами.

    Допустим, модальное окно нужно показать с классом ‘visible’. Вы берете getAttribute(‘class’), разбиваете на массив, проверяете наличие, добавляете и вызываете setAttribute. Такой подход хорош для сложной логики, но verbose. В реальных проектах комбинируйте с функциями для переиспользования.

    • Простой пример:
      let modal = document.querySelector('#modal');
      let classes = modal.getAttribute('class') + ' visible';
      modal.setAttribute('class', classes);
      
    • С фильтрацией:
      function addWithAttr(el, cls) {
        let arr = el.getAttribute('class')?.split(' ') || [];
        if (!arr.includes(cls)) arr.push(cls);
        el.setAttribute('class', arr.join(' '));
      }
      
    • Совет: Используйте опциональную цепочку ?. для безопасности.
    Сценарий Код Когда использовать
    Быстрое добавление setAttribute('class', current + ' new') Простые скрипты
    С проверкой Функция с split/join Сложная логика
    Полная замена setAttribute('class', 'only-new') Перезапись всех классов

    Практические примеры и комбинации

    В реальных задачах классы добавляются по событиям: клик, скролл или таймер. Комбинируйте add с toggle для переключения состояний. Например, при клике на кнопку меню добавьте ‘open’ к навбару — и CSS анимация сделает остальное.

    Для модалки: слушатель на кнопку, querySelector для окна, classList.add(‘show’). Добавьте обработку закрытия с remove. Это базовый паттерн для интерактивных элементов. Тестируйте в консоли: создайте div, добавьте классы и смотрите изменения в инспекторе.

    • Toggle для переключения:
      btn.addEventListener('click', () => {
        elem.classList.toggle('active');
      });
      
    • Проверка наличия: if (elem.classList.contains('cls')) { ... }.
    • Несколько элементов: document.querySelectorAll('.item').forEach(el => el.classList.add('processed'));.
    • Нюанс: forEach на NodeList работает идеально.
    Задача Решение Бонус
    Подсветка кнопки classList.add(‘active’) + transition в CSS
    Липкий хедер add(‘sticky’) на scroll throttle для производительности
    Модалка add(‘visible’) + overlay trap focus для доступности

    Методы для старых браузов и fallback

    Не все проекты на свежем JS — иногда нужен полифилл. Пишите функцию, которая сначала пробует classList, а если нет — fallback на className. Это обеспечивает кросс-браузерность без библиотек вроде jQuery.

    Проверьте if (element.classList), и если да — add, иначе вручную. Такой fallback спасает в legacy-коде. В новых проектах classList поддерживается везде, но привычка к проверкам не помешает. Тестируйте в старых версиях Chrome или IE.

    function universalAdd(el, cls) {
      if (el.classList) {
        el.classList.add(cls);
      } else {
        if (!el.className.includes(cls)) {
          el.className += ' ' + cls;
        }
      }
    }
    
    • Плюсы: Работает везде.
    • Минусы: Больше кода.
    • Совет: В продакшене используйте Babel для транспиляции.

    За пределами простого добавления

    Добавление классов — часть экосистемы манипуляций с DOM. Есть remove, toggle, replace. Думайте о состояниях: hover, focus, loading. CSS Modules или Tailwind упрощают именование классов в больших apps.

    Останавливайтесь на classList для 90% случаев, но знайте альтернативы для edge-кейсов. Подумайте о производительности при массовом добавлении — batch-обновления лучше. В SPA-фреймворках вроде React это абстрагировано, но понимание основ ускорит отладку.


    0 0 0 Ответить
  • kirilljsxK
    kirilljsx
    mkdir -p что это: команда для создания вложенных папок в Linux

    Команда mkdir -p — это инструмент в Linux для создания директорий, включая все вложенные уровни. Она упрощает работу с файловой системой, особенно при настройке проектов.

    Без неё пришлось бы создавать папки по одной, что отнимает время и приводит к ошибкам. С mkdir -p вы указываете полный путь, и система сама разберётся. Это решает проблемы с отсутствующими родительскими каталогами и дубликатами.

    Что такое mkdir и зачем флаг -p

    Команда mkdir (от make directory) создаёт новые папки в терминале Linux. Без опций она работает просто: вводите имя, и папка появляется в текущей директории. Но если путь содержит вложенности, как project/src/main, обычный mkdir выдаст ошибку — мол, родительских папок нет.

    Флаг -p (parents) меняет всё: он создаёт всю цепочку директорий автоматически. Если какая-то папка уже существует, команда просто пропустит её без ошибок. Это удобно для скриптов и быстрой настройки окружения. Представьте, вы клонируете репозиторий и нужно развернуть структуру — mkdir -p сделает это за секунду. А без него пришлось бы вручную: сначала mkdir project, потом mkdir project/src и так далее.

    Вот базовый синтаксис:

    • mkdir имя_папки — простое создание.
    • mkdir -p путь/к/папке — с вложенностями.
    Опция Описание Пример
    -p Создаёт родительские директории, игнорирует существующие mkdir -p app/models/user
    -v Выводит сообщения о создании mkdir -pv dir1/dir2
    -m 755 Устанавливает права доступа mkdir -p -m755 logs/errors

    Разница между mkdir и mkdir -p на примерах

    Обычный mkdir dir1/dir2 сработает только если dir1 уже есть. Иначе терминал ругнётся: «No such file or directory». Это раздражает, особенно в скриптах, где нужно проверять существование заранее. mkdir -p же умнее: проверит путь и создаст всё необходимое шаг за шагом.

    Возьмём реальный сценарий. Допустим, вы настраиваете веб-проект: нужна структура site/public/css/js. Без -p придётся четыре команды. С флагом — одна: mkdir -p site/public/{css,js}. Плюс, если site уже есть, ничего не сломается. Ещё плюс: нет лишнего вывода ошибок, что чистит логи в автоматизации.

    Это критично для DevOps — в CI/CD пайплайнах такие команды летают сотнями раз. Без -p скрипты падали бы на каждом шаге. Логично перейти к примерам, чтобы увидеть в действии.

    • Простой пример: mkdir -p ~/backup/2024/photos — создаст backup, потом 2024, потом photos.
    • С фигурными скобками: mkdir -p project/{src,tests,docs} — сразу три ветки.
    • Нюанс: Если конечная папка существует, -p не перезапишет её содержимое.*

    Комбинирование флагов mkdir -p с другими опциями

    mkdir -p часто используют не в одиночку. Добавьте -v для verbose-режима — терминал расскажет, что именно создалось. Полезно для отладки скриптов. Ещё -m задаёт права: mkdir -p -m 755 data/logs сделает папки доступными для чтения всем, но запись — только владельцу.

    В проектах это спасает: представьте деплой сервера, где логи должны быть защищены. Команда mkdir -p -v -m777 /var/www/app/tmp/cache создаст структуру и покажет процесс. Без -p пришлось бы цеплять && или if-ы в bash. А с комбо всё в одной строке, надёжно и быстро.

    Для массового создания подойдёт цикл: for i in {1..5}; do mkdir -p logs/day$i; done. Это генерирует logs/day1 до day5. В продакшене такие трюки экономят часы.

    Сценарий Команда без -p Команда с -p
    Вложенная структура mkdir a && mkdir a/b mkdir -p a/b
    С правами Две команды mkdir -pm755 a/b
    Несколько веток Много mkdir mkdir -p base/{one,two}
    • Verbose + parents: mkdir -pv parent/child — увидите «created directory ‘parent’» и т.д.
    • Права доступа: Устанавливайте -m перед путём, чтобы избежать ошибок.
    • В скриптах: Используйте с cd — mkdir -p build && cd build.

    Практические сценарии использования mkdir -p

    В разработке mkdir -p — must-have. Для Node.js проекта: mkdir -p backend/{routes,middleware} frontend/{src,public}. Всё готово за секунду. В Dockerfiles добавьте в ENTRYPOINT, чтобы контейнер стартовал с нужной структурой.

    На сервере для бэкапов: mkdir -p /backup/$(date +%Y/%m)/db. Автоматически организует по датам. Если месяц уже есть — не сломается. Ещё в Git: после git clone настройте mkdir -p .git/hooks/custom. Это расширяет хуки без боли.

    Без этого флага новички часами гуглят ошибки. А опытные комбинируют с find или rsync для миграций.

    • Веб-сервер: mkdir -p /var/www/html/{assets,includes}.
    • Бэкапы: mkdir -p backups/$(date +%Y%m%d).
    • Ограничение: mkdir -p не создаёт файлы — только директории.*

    Автоматизация задач через скрипты с mkdir -p

    Почему mkdir -p меняет подход к файловой системе

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

    Осталось пространство для тонкостей: как -p ведёт себя с симлинками или в chroot. Или комбо с umask для глобальных прав. Стоит поэкспериментировать в тестовой среде, чтобы увидеть нюансы на своих данных.


    0 0 0 Ответить
  • GameFishG
    GameFish
    Подборка лучших модов для BeamNG.drive 2026: топ машин и карт

    В BeamNG.drive моды добавляют новые машины, карты и улучшают геймплей. Они решают проблему однообразия стокового контента, позволяя тестировать реалистичную физику на свежих моделях. Эта подборка поможет выбрать проверенные варианты по популярности и отзывам.

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

    Топ моды на машины

    Моды на машины — основа любой подборки для BeamNG.drive. Они расширяют гараж, добавляя реалистичные модели с детализированной физикой, PBR-материалами и рабочими дверями. Такие дополнения идеальны для симуляции аварий или дрифта, где стоковые авто быстро надоедают. Например, BMW M5 F90 предлагает 12 конфигураций кузовов, от Pre-Facelift до CS, с аутентичным звуком и высокой детализацией. Аналогично, ETK 900-Series обновлена до версии 3.01b, что делает её одной из самых скачиваемых. Эти моды популярны благодаря балансу реализма и производительности, без лагов даже на средних ПК. Логично перейти к списку лидеров по скачиваниям.

    Вот проверенные варианты, отсортированные по популярности:

    • BMW M5 F90 (0.36.x): 555 загрузок, 117 MB, множество кузовов (M5 Competition, Facelift, CS), PBR-свет и реалистичная деформация.
    • BMW X7 M60i (0.36.x): 311 загрузок, 103 MB, полностью открываемый кузов, продвинутая светотехника и звук двигателя.
    • ETK 900-Series (2018-2024) v3.01b: Свежий апдейт для 0.38.x, детализированные интерьеры, отличная управляемость на трассах.
    • Stirling S6 v1.23: Гоночный болид с обновлённой физикой, идеален для высоких скоростей и краш-тестов.
    • BMW M2 G87 v3.0: Компактный спорткар с фиксами, хорошая детализация подвески.
    Мод Версия Размер Ключевые фичи
    BMW M5 F90 0.36.x 117 MB 12 конфигураций, PBR-фары
    BMW X7 M60i 0.36.x 103 MB Открываемый кузов, реализм
    ETK 900-Series 3.01b ~100 MB Обновлённая серия 2018-2024

    Устанавливайте моды в папку mods после разархивации ZIP — это стандартный способ без ошибок.

    Лучшие моды на карты

    Карты в BeamNG.drive меняют весь опыт: от ралли по лесу до мототреков. Они решают скуку стандартных локаций, добавляя трассы с перепадами высот, барьерами и разрушаемыми объектами. Возьмём M3MotoMadness v2.0 Final — финальная версия для 0.38.x с мотоциклетными петлями и раллийными секциями. Или New England Forest Rally с петлёй для ралли, где физика разрушения сияет на полной. Эти моды популярны за счёт разнообразия: есть для оффроуда, гонок и фрирайда. Они оптимизированы, не грузят систему, но требуют актуальной версии игры. Переходим к подборке.

    Популярные карты на основе топов:

    • M3MotoMadness v2.0 Final: Для 0.38.x, мототрек с раллийными элементами, отличная для экстремальных тестов.
    • New England Forest Rally v1.0: Лесные трассы с петлями, реалистичное бездорожье и разрушения.
    • IYB B-Series Extended v2.22: Расширенная карта с дополнительными зонами для экспериментов.
    Карта Версия Тип Особенности
    M3MotoMadness 2.0 Мототрек/ралли Финальная, 0.38.x
    New England Forest Rally 1.0 Оффроуд Петли, лесные трассы
    IYB B-Series 2.22 Расширенная Доп. зоны краш-тестов

    Выбирайте карты под стиль: ралли для динамики, треки для скорости. Проверяйте совместимость с версией 0.38.x.

    Советские и ретро-моды

    Ретро-моды добавляют колорит: от советских ТАЗ до ИЖ. Они популярны за ностальгию и уникальную физику — деформации капота, слабая подвеска реалистично ломают авто. Пример: ТАЗ Мир (2101-2105) и Байкал (Нива) с 35+62 конфигурациями, рабочими дверями и обновлением 1.3. Или ИЖ 2717 v1.0 для 0.38.x — классика с аутентичными повреждениями. Такие моды идеальны для ролевых сценариев или сравнения с современными тачками. Они лёгкие по размеру, но требуют настройки конфигов для стабильности. Список топа.

    Рекомендации по ретро:

    1. ТАЗ Мир и Байкал: 35+62 конфига, реалистичная разрушаемость, обновление 22.08.25.
    2. ИЖ 2717 v1.0: Советский фургон, хорошая управляемость для своего класса.
    3. Ford Mondeo 2007 v1.0: Ретро-европейка с фиксами физики.
    4. Mazda 3 MSP v1.3 Fix: Тюнингованная версия с улучшениями.
    Мод Конфигурации Фичи
    ТАЗ Мир/Байкал 97+ Двери, повреждения
    ИЖ 2717 Стандарт Фургон-реализм
    Mazda 3 MSP Много Фикс 1.3

    Ещё больше разнообразия в модах

    Подборка не исчерпывает все варианты — моддеры выпускают обновления еженедельно. Остаётся место для нишевых аддонов вроде школьных автобусов Wentward Fusion или экскаваторов Bobcat T870. Стоит присмотреться к Dacia Sandero III для городских тестов или Afeela 1 для футуристичных экспериментов. Эти моды добавляют глубину, но проверяйте отзывы на совместимость. Дальше думайте о комбо: новая машина + карта ралли для полного погружения.


    0 0 0 Ответить
  • hannadevH
    hannadev
    Что такое includes в JavaScript: метод для массивов и строк

    Метод includes() в JavaScript — это простой способ проверить наличие элемента в массиве или подстроки в строке. Он возвращает true или false, что делает его удобным для быстрых проверок.

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

    includes() для массивов: как проверить наличие элемента

    Метод Array.prototype.includes() ищет значение в массиве и возвращает логическое значение. Он проходит по элементам с начала или с указанного индекса и останавливается при первом совпадении. В отличие от indexOf(), includes() правильно обрабатывает NaN и учитывает типы строго.

    Представьте массив пользователей на сайте. Нужно быстро узнать, есть ли среди них гость. includes() вернёт true, если элемент найден, и false иначе. Это полезно в условных конструкциях if, для фильтров или валидации форм. Логика простая: передаёте значение и опциональный fromIndex.

    • searchElement: обязательный параметр — то, что ищем в массиве.
    • fromIndex: необязательный, начинается поиск с этого индекса (по умолчанию 0, отрицательные значения считаются от конца).

    Примеры использования для массивов

    Пример Код Результат Пояснение
    Базовый поиск ['a', 'b', 'c'].includes('b') true Элемент найден.
    С fromIndex ['a', 'b', 'c'].includes('a', 1) false Поиск с индекса 1, ‘a’ не найдено.
    Отрицательный fromIndex ['a', 'b', 'c'].includes('b', -2) true Считается от конца: length + (-2).
    NaN [1, NaN, 3].includes(NaN) true indexOf() не сработал бы здесь.
    Объекты [{id:1}].includes({id:1}) false Сравнивает ссылки, не значения.

    includes() для строк: поиск подстроки

    Метод String.prototype.includes() проверяет наличие подстроки в строке с учётом регистра. Он чувствителен к большим и малым буквам, ищет с начала или с позиции. Это отличный инструмент для парсинга текста, валидации ввода или поиска ключевых слов.

    Например, проверяем, содержит ли сообщение слово «JavaScript». Метод вернёт true, если подстрока есть. Полезно в чатах, поисковиках или обработке пользовательского ввода. Второй аргумент задаёт стартовую позицию, что ускоряет поиск в длинных строках.

    • searchString: подстрока для поиска (может быть пустой, всегда true).
    • position: необязательный индекс начала поиска (по умолчанию 0).

    Сравнение includes() с другими методами строк

    Метод Возврат Особенности Когда использовать
    includes() true/false Чувствителен к регистру, простой Быстрая проверка наличия.
    indexOf() индекс / -1 То же, но возвращает позицию Нужно знать позицию.
    startsWith() true/false Только начало строки Проверка префикса.
    endsWith() true/false Только конец строки Проверка суффикса.

    Вот примеры:

    const text = "JavaScript — это весело";
    console.log(text.includes("Java")); // true
    console.log(text.includes("java")); // false (регистр важен)
    console.log(text.includes("Script", 5)); // true (с позиции 5)
    

    Различия includes() в массивах и строках

    В массивах метод сравнивает элементы строго (===), включая undefined и NaN. В строках ищет точное вхождение подстроки. Оба метода не мутируют оригинал и работают быстро для небольших коллекций. Но для объектов в массивах помните: сравниваются ссылки, а не содержимое.

    Возьмём реальный кейс: список контактов. В массиве объектов includes() не найдёт дубликат по значениям, если это разные объекты. В строке же легко проверить email на домен. Это подводит к нюансам производительности: для больших массивов лучше indexOf() или find().

    • Массивы: идеально для примитивов, учитывает пробелы (undefined как undefined).
    • Строки: не меняет регистр, пустая строка всегда true.
    • Общее: второй аргумент fromIndex работает аналогично.
    Сценарий Массив Строка Рекомендация
    Поиск по значению ✅ Прямое сравнение ✅ Подстрока includes()
    Большие данные ⚠️ Медленнее find() ✅ Быстро Другие методы
    Объекты ❌ Ссылки N/A find() или lodash

    Практические кейсы и подводные камни

    includes() часто используют в формах: проверка, введён ли запретный символ. Или в роутинге: есть ли маршрут в списке разрешённых. Ещё пример — фильтр товаров: есть ли размер в наличии. Но будьте осторожны с объектами — всегда проверяйте ссылки.

    В реальном проекте массив ролей пользователя. roles.includes('admin') быстро даёт доступ. Для строк: email.includes('@') валидирует почту на базовом уровне. Подводные камни: регистр в строках, типы в массивах (5 !== ‘5’).

    • Валидация: input.includes('<script>') — блокировка XSS.
    • Регистр: используйте toLowerCase() перед проверкой.
    • Производительность: для тысяч элементов — Set или Map лучше.

    Таблица типичных ошибок

    Ошибка Почему Решение
    false для объектов Разные ссылки Используйте find() с условием.
    Регистр в строках Чувствительность str.toLowerCase().includes(...).
    Медленный поиск Большой массив new Set(array).has(value).

    Когда includes() не хватит

    Метод includes() покрывает 80% простых проверок, но для сложных сценариев есть find(), some() или регулярки. Подумайте о Set для уникальных значений — has() быстрее. Или lodash для глубокого поиска. Это оставляет пространство для оптимизаций в крупных проектах.


    0 0 0 Ответить
  • kirilljsxK
    kirilljsx
    Как убрать фон с фотографии через Python

    И так представляю вашему вниманию классную библиотеку - rembg, устанавливается как обычно:

    pip install rembg
    

    Пример готовой программы:

    from rembg import remove
    
    def remove_background(input_path: str, output_path: str) -> None:
      
      # Удаляет фон с изображения и сохраняет результат.
    
        with open(input_path, 'rb') as input_file:
            with open(output_path, 'wb') as output_file:
                image_bytes: bytes = input_file.read()
                output_bytes: bytes = remove(image_bytes)
                output_file.write(output_bytes)
    
    if __name__ == "__main__":
        remove_background('input.png', 'output.png')
    

    Что делает код:

    • Открывает файл;
    • Убирает фон;
    • Сохраняет готовое изображение.

    0 0 0 Ответить
  • kirilljsxK
    kirilljsx
    Как подключить CSS к CSS: @import, link и лучшие практики для HTML

    Подключение CSS к CSS — это когда один файл стилей импортирует другой с помощью @import. Это помогает организовать код, разбивать стили на модули и упрощать поддержку сайта. Вы разберётесь, зачем это нужно и как делать правильно.

    Такая схема решает проблемы с разрастанием одного большого файла CSS. Вместо монолита вы получаете структуру: базовые стили, reset, компоненты. Это ускорит разработку и загрузку страниц для пользователей.

    Основной способ: директива @import в CSS

    Директива @import позволяет одному CSS-файлу ‘подтянуть’ стили из другого. Вы пишете её в самом начале файла, указывая путь к импортируемому CSS. Браузер сначала загрузит импорты, потом основной код — это важно для правильной работы каскада.

    Представьте проект с reset.css для обнуления стилей, fonts.css для шрифтов и main.css как основным. В main.css добавляете @import “reset.css”; и @import “fonts.css;”. Потом подключаете только main.css к HTML через . Стили сработают все разом, но код останется модульным. Такой подход удобен для командной работы, где каждый отвечает за свой кусок.

    • Порядок импорта критичен: ставьте @import в начало файла, иначе стили могут перезаписаться.
    • Путь к файлу: используйте относительные пути, как “…/css/reset.css”, чтобы избежать ошибок на сервере.
    • Поддержка браузеров: работает везде, но в старых IE может быть медленно — проверяйте.
    Аспект @import в CSS Множественные в HTML
    Загрузка Последовательная, блокирует рендер Параллельная, быстрее
    Организация Модули внутри CSS Прямое подключение файлов
    Каскад Импорт раньше основного кода По порядку тегов

    Нюанс: @import не используйте после других правил — браузер его проигнорирует.

    Подключение нескольких CSS через в HTML

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

    Допустим, у вас style.css для layout, components.css для кнопок и dark-theme.css. Добавляете три подряд в : сначала reset, потом основной, затем тема. Стили применятся по порядку — последний перезапишет предыдущие при конфликтах. Такой метод хорош, когда файлы независимы, и вы видите все подключения в одном месте. Минус — HTML становится длиннее, но для 5–10 файлов это ок.

    1. Создайте файлы: main.css, header.css, footer.css.
    2. В index.html:
    3. Проверьте в браузере: F12 покажет, загрузились ли все.

    Преимущества множественных :

    • Быстрее загрузка, чем @import.
    • Легко отключать файлы для тестов.
    • Медиа-запросы: добавляйте media=“screen” для мобильных.
    Файл Назначение Порядок подключения
    reset.css Обнуление 1-й
    fonts.css Шрифты 2-й
    main.css Основные стили 3-й

    Комбинированный подход и динамическое подключение

    Смешивайте методы: основной main.css импортирует мелкие модули через @import, а в HTML — несколько главных . Для продвинутых случаев подключайте CSS динамически через JavaScript — полезно для тем или A/B-тестов.

    Пример: в main.css @import “variables.css”; для общих переменных. В HTML два : для light и dark. По JS-клику меняете: document.head.appendChild(newLink). Это даёт гибкость — пользователь сам выберет тему без перезагрузки. Подходит для SPA на React/Vue. Главное — не забывайте rel=“stylesheet”. Такой микс ускоряет разработку и улучшает perf.

    • JS-пример: const link = document.createElement(‘link’); link.rel = ‘stylesheet’; link.href = ‘theme.css’; document.head.appendChild(link);.
    • Прелоад: для ускорения.
    • Fallback: проверяйте загрузку onerror.

    Таблица сравнения подходов:

    Метод Плюсы Минусы
    Только @import Чистый HTML Медленнее
    Только Быстро Раздувает head
    Комбо + JS Гибкость Сложнее код

    Практические советы по оптимизации

    Оптимизируйте подключение: минифицируйте CSS, используйте preload и media-запросы. Избегайте @import в продакшене — он блокирует параллельную загрузку, лучше бандлить через Webpack. Тестируйте в DevTools: Network-вкладка покажет время загрузки.

    Разбивайте файлы логично: по компонентам (buttons.css), страницам (home.css). Для больших сайтов — critical CSS в


    0 0 0 Ответить
  • GameFishG
    GameFish
    Лучшие моды для GTA 5 в 2026: топ подборка для ПК и RP

    GTA 5 до сих пор одна из самых популярных игр, и моды помогают её освежить. В этой подборке я собрал лучшие модификации, которые меняют геймплей, графику и добавляют новые фичи. Они решат проблему рутины в Лос-Сантосе и сделают игру интереснее.

    Если вы устали от стандартного вида города или хотите новые механики, эти моды подойдут. Установка простая через OpenIV или Script Hook, но всегда делайте бэкап. Подборка основана на свежих релизах 2025–2026 годов, чтобы всё работало стабильно.

    Графические моды для реалистичного Лос-Сантоса

    Графические моды меняют визуальную часть GTA 5, делая её ближе к реальности или фантастике. Они улучшают освещение, тени, погоду и текстуры, чтобы Лос-Сантос выглядел как настоящий мегаполис. Такие изменения заметны сразу: дождь капает реалистично, а ночи сияют неоном.

    Например, моды на основе фото Лос-Анджелеса добавляют аутентичности. Они решают проблему устаревшей графики базовой игры, особенно на мощных ПК. Перед списком стоит отметить, что для них нужен VisualV или NaturalVision как база. Теперь перейдём к топу.

    • VisualV: Улучшает цвета, освещение и интерьеры. Погода основана на реальных фото ЛА — дождь и туман выглядят потрясающе.
    • NaturalVision Evolved: Полная переработка графики с реалистичными тенями и эффектами. Идеально для скриншотов и видео.
    • The Pinnacle of V: Добавляет фотореалистичную физику машин и новые погодные эффекты, вроде отдельных капель дождя.
    • GrandCyberPunk: Превращает игру в киберпанк-мир с неоном, футуристическими машинами и кибер-персонажами.
    Мод Основные улучшения Совместимость
    VisualV Освещение, погода, интерьеры Все версии ПК
    NaturalVision Evolved Тени, текстуры, физика Требует Heap Adjuster
    GrandCyberPunk Неон, архитектура RP-сервера с графикой

    Важно: Для стабильности используйте Gameconfig V34, чтобы избежать крашей.

    Моды на геймплей и новые механики

    Эти моды добавляют свежие механики, превращая GTA 5 в новую игру. Вы можете стать полицейским, супергероем или участвовать в battle royale. Они расширяют сюжет и открывают неигровые локации, делая прохождение разнообразным.

    Real Life Mod делает мир живым: NPC реагируют реалистично, а город полон событий. PoliceLifeS позволяет патрулировать улицы и ловить бандитов. Такие моды решают скуку в свободном режиме. Логично начать со списков популярных.

    1. PoliceLifeS (LSPDFR): Играйте за копа — патрулируйте, штрафуйте, преследуйте. Не забудьте заправляться и есть пончики.
    2. Complex Control: Battle royale на уменьшающейся карте с уникальными способностями и поиском лута.
    3. Spider-Man V: Качайтесь на паутине, стреляйте сетью, используйте Spider Sense в замедленной съёмке.
    4. Map Editor + Enable All Interiors: Редактируйте карты и открывайте скрытые интерьеры для новых миссий.
    Мод Тип геймплея Сложность установки
    PoliceLifeS Полицейский симулятор Средняя
    Spider-Man V Супергерой Лёгкая
    Complex Control Battle Royale Средняя

    Совет: Комбинируйте с Just Cause 2 Eject для парашютных трюков.

    Транспортные и скриптовые моды для экшена

    Моды на машины и скрипты добавляют новые тачки и события вроде ограблений. 2026 Aston Martin Valhalla с кастомным хэндлингом разгоняется до 237 км/ч. Скрипты вроде Uptown Bank Heist вводят подземные банки и командные рейды.

    Gunpack’и для RP улучшают оружие — от silent 240 до polychrome killa. Зимние моды через Network Graphics превращают Лос-Сантос в снежный рай. Это идеально для ролевых серверов или кастомных гонок. Вот подборка хитов.

    • 2026 Aston Martin Valhalla: Гиперкар с топ-скоростью 237 км/ч. Замените handling.meta в OpenIV.
    • Uptown Bank Heist: Ограбление секретного банка с командой — новый скрипт 2026.
    • Mech / Robot Script: Управляйте роботом, делайте трюки и сражайтесь.
    • Santos Underground: Уличные гонки в подземелье Лос-Сантоса.
    Мод Особенности Для кого
    Aston Martin Valhalla 237 км/ч, реалистичная физика Любители тачек
    Uptown Bank Heist Командные ограбления RP и экшен
    Mech Script Роботы и трюки Фанаты мехов

    Нюанс: Для RP Legacy используйте сборники gunpack от PEPEZ.

    Что моды не меняют, но стоит доработать

    Эти моды покрывают графику, геймплей и транспорт, но есть ниши вроде зимних эффектов или аддонов для Franklin’а. Ultimate Shoes Pack добавит сотни кроссовок только ему. Chaos Response усиливает полицию для хаотичных погонь.

    Осталось поэкспериментировать с комбинациями: киберпанк + роботы или реальная графика + ограбления. Подумайте о совместимости на серверах вроде Legacy — не все моды работают онлайн. В 2026 году сообщество продолжает выпускать обновы, так что следите за трендами.


    0 0 0 Ответить
  • hannadevH
    hannadev
    Img: блочный или строчный элемент в HTML? Полный разбор

    Элемент в HTML по умолчанию строчный, но с нюансами поведения, как inline-block. Это важно знать, чтобы избежать проблем с версткой: отступы под картинкой, неправильное позиционирование или переносы строк.

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

    Что значит строчный элемент и как img вписывается

    Строчные элементы в HTML, такие как span, a или img, не начинают новую строку и занимают только нужную ширину. Они текут горизонтально, как слова в предложении. ведёт себя похоже: картинка встанет рядом с текстом без разрыва абзаца.

    Но есть подвох: img ближе к inline-block, потому что может иметь заданные width и height. Это позволяет ему растягиваться, не ломая поток текста. Представьте текст с иконкой — всё на одной строке, без лишних отступов снизу. Если вставить img в div или p, оно подстроится под контейнер.

    Однако без CSS иногда появляется нежелательный отступ в 3-5 пикселей под изображением — это как пробел после слова. В блочном контейнере такого нет. Логично перейти к свойствам и примерам.

    • Поток текста: img не прерывает строку, текст обтекает его.
    • Размеры: атрибуты src, width, height работают сразу, без CSS.
    • Вложение: img можно класть в div (блочный) или span (строчный), но не наоборот.
    Свойство Строчный (inline) Блочный (block) Img по умолчанию
    Новая строка Нет Да Нет
    Ширина/высота Только контент 100% ширины По атрибутам
    Отступы margin Только горизонт Все стороны Горизонт + снизу пробел*

    Как img ведёт себя в реальной верстке: примеры проблем

    В практике img часто вызывает сюрпризы. Например, в списке ul/li картинка встанет inline и текст её обтечет, если не указать display: block. Это полезно для иконок, но для баннера — минус: снизу висит отступ. Я видел, как дизайнеры часами борются с этим в галереях.

    Другой случай: img внутри p. Текст идёт слева или справа, если задать float. Без float — всё в ряд. Но если img широкий, он вылезет за пределы, потому что строчный элемент игнорирует полную ширину родителя. Чтобы исправить, меняем на block или inline-block.

    Тестировал на простом коде: <p>Текст <img src="icon.png" alt="Иконка"> текст</p> — всё на строке. Добавьте <img style="width: 200px;"> — и overflow. Логичный шаг — способы контроля через CSS.

    • Отступ снизу: решается vertical-align: bottom; или display: block;.
    • Центрирование: для inline — text-align: center;, для block — margin: 0 auto;.
      Важно: img не поддерживает псевдоэлементы ::before/::after.
    Сценарий Проблема CSS-фикс
    Отступ под img Пробел как буква display: block;
    Обтекание текстом Не нужно для баннера float: left; или display: block;
    Галерея фото Переносы неконтролируемые display: inline-block; width: 30%;

    Меняем поведение img: от inline к block и inline-block

    По умолчанию display: inline для img, но легко переключить. Хотите блочный? img { display: block; } — картинка займёт всю ширину, начнёт с новой строки, примет margin auto для центрирования. Идеально для hero-изображений.

    Inline-block даёт лучшее: display: inline-block; — размеры уважаются, элементы в ряд, vertical-align работает. В галерее это must-have: фото рядом, переносятся при узком экране. Плюс, белые края между ними фиксятся font-size: 0 на родителе.

    Пример кода: .gallery img { display: inline-block; width: 200px; margin: 10px; }. Работает везде, от Chrome до Safari. Не забудьте alt — для доступности и SEO.

    • display: block: Полная ширина, новая строка, все отступы.
    • display: inline-block: Рядом + размеры, vertical-align: middle;
    • flex/grid: Современный способ — родитель flex, img внутри растёт.
    Display Преимущества Когда использовать
    inline (default) В тексте Иконки, эмодзи
    block Центр, баннеры Полноэкранные изображения
    inline-block Галереи Несколько фото в ряд

    Нюансы img в Flexbox и Grid — что меняется

    В Flexbox или Grid img теряет строчность: ведёт себя как block. Контейнер .flex { display: flex; } заставит img заполнять flex-item. Можно задать flex-grow, align-self — гибкость на уровне.

    Например, галерея: <div class="grid"> <img> <img> </div> с display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));. Img автоматически подстроится, без inline-трюков. Плюс responsive: srcset + sizes для разных экранов.

    Но в старом IE flex не тянет, fallback на inline-block. Тестируйте кроссбраузер.

    • Flex: img { flex: 1; object-fit: cover; } — заполнение без искажений.
    • Grid: Авто-размножение колонок, img растёт.
      object-fit: contain/cover — ключ для responsive img.
    Контейнер Поведение img Совет
    Flex Как block Добавьте object-fit
    Grid Адаптивный srcset обязательно
    Обычный div Inline display: block для фикса

    Практика показывает: img эволюционирует с CSS

    Разобрались: img стартует как строчный с чертами inline-block, но CSS даёт полный контроль. От простого display до flex/grid — выбор за задачей. Осталось углубиться в SVG внутри img или lazy loading для скорости.

    Подумайте о picture вместо img для art direction. Или WebP для оптимизации — это следующий уровень верстки.


    0 0 0 Ответить
  • kirilljsxK
    kirilljsx
    chmod 777 на папку и все файлы внутри: как сделать рекурсивно

    Команда chmod 777 дает полный доступ ко всему — чтение, запись и выполнение — владельцу, группе и остальным пользователям. Это полезно для быстрого открытия папки с содержимым, когда нужно срочно поделиться файлами на сервере. Но такая настройка решает проблемы с доступом, только если вы понимаете риски.

    Часто приходится ставить эти права на веб-директории или shared-папки, чтобы скрипты работали без ошибок. Мы разберем, как применить chmod 777 рекурсивно ко всей папке, включая файлы и поддиректории. Это поможет избежать типичных ошибок и настроить все правильно.

    Что значит chmod 777 и для чего оно нужно

    Права доступа в Linux определяются тремя группами: владелец, группа и остальные. Каждая группа получает комбинацию прав — чтение (r=4), запись (w=2), выполнение (x=1). Число 777 суммирует все: 4+2+1 для каждой группы, то есть полный доступ всем.

    Для папок это значит, что любой сможет просматривать содержимое, создавать файлы, удалять и заходить внутрь. Представьте ситуацию: на сервере стоит PHP-приложение, и оно не может записать лог или загрузить файл — chmod 777 мгновенно исправит. Но это как открыть все двери: удобно, но небезопасно для продакшена.

    Реальный пример — настройка /var/www для быстрого тестирования. Вместо этого лучше 755 для папок и 644 для файлов, но 777 ускоряет разработку. Теперь перейдем к командам, чтобы применить это ко всей структуре.

    • rwx (7): владелец может все — читать, менять, выполнять скрипты или заходить в папку.
    • rwx (7): группа пользователей делает то же самое, без ограничений.
    • rwx (7): все остальные на сервере имеют полный контроль, что редко нужно.
    Права Владелец Группа Остальные Применение
    777 rwx rwx rwx Полный доступ всем, для тестов
    755 rwx r-x r-x Стандарт для директорий
    644 rw- r– r– Для файлов, только чтение остальным

    Важно: для папок x значит ‘вход’, а не запуск файла.

    Как применить chmod 777 рекурсивно к папке

    Рекурсивно значит ‘со всем содержимым’ — файлы, подпапки, все уровни. Без флага -R команда затронет только саму папку, а файлы внутри останутся недоступны. Это частая ошибка новичков: поставили 777 на /myfolder, а скрипт внутри жалуется на права.

    Пример: у вас есть /home/user/project с кучей файлов и подпапок. Запускаете chmod -R 777 /home/user/project, и все открывается. На сервере для /var/www это спасает, когда хостинг не дает sudo, но нужно быстро протестировать.

    В символьной нотации то же самое: chmod -R a+rwx folder. Аргумент a=все группы, +rwx добавляет права. Это интуитивнее чисел, если вы не помните, что 7=4+2+1. Логично перейти к практическим командам и примерам.

    1. Базовая рекурсивная команда: chmod -R 777 /path/to/folder — меняет все внутри мгновенно.
    2. Проверить перед применением: ls -la /path/to/folder покажет текущие права.
    3. Для веб-сервера: chmod -R 777 /var/www/html — типичный случай для Apache.
    Ситуация Команда Результат
    Папка с файлами chmod -R 777 mydir Все rwx для всех
    Только папки 777, файлы 666 find mydir -type d -exec chmod 777 {} \; Директории полные, файлы без x
    Откат назад chmod -R 755 mydir Стандартные права

    Флаг -R работает глубоко, но будьте осторожны с / — это сломает систему.

    Риски и когда не ставить chmod 777

    chmod 777 — это ‘три топора’, полный хаос по безопасности. Любой пользователь на сервере сможет удалить ваши файлы, внедрить malware или прочитать конфиги. В продакшене это прямой путь к взлому: скрипты типа CMS часто страдают от таких настроек.

    Пример из жизни: поставили 777 на public_html, и бот зашел, залил backdoor.php. Группы пользователей теперь всевластны, а sticky bit не спасет. Лучше chown на вашего юзера + 755/644. Аргументы за: скорость, но против — уязвимости на каждом шагу.

    Используйте find для точности: меняйте только нужные типы. Или umask для новых файлов. Это подводит к таблице альтернатив, чтобы не рисковать зря.

    • Безопасность под угрозой: любой запишет вирус в вашу папку.
    • Sticky bit не поможет: файлы удалят не-владельцы.
    • Серверные CMS: WordPress рекомендует 755, не 777.
    Проблема chmod 777 Альтернатива
    Доступ для скрипта Полный всем chown user:group + 755
    Удаление файлов Возможно всем 775 для группы
    Взлом Высокий риск ACL или SELinux

    Никогда не делайте 777 на /tmp или корень — система упадет.

    Тонкости рекурсии и проверка результата

    Рекурсия с -R проста, но работает по-разному для файлов и папок. Файлам x не всегда нужно, а папкам обязательно для входа. Команда find точнее: разделяет -type d (директории) и -type f (файлы). Пример: find /mydir -type d -exec chmod 777 {} ; для папок.

    На shared-хостинге без root это спасение, но проверяйте ls -la после. Если владелец wrong — сначала chown -R user:group. Аргументы: рекурсия удобна, но комбинируйте с проверками. Переходим к спискам команд.

    Реальный сценарий: проект с 1000+ файлов — -R справится за секунды. Но мониторьте логи, чтобы не прозевать проблемы.

    1. Полная рекурсия: chmod -R 777 /path — универсал.
    2. Только директории: find /path -type d -exec chmod 777 {} \;.
    3. Файлы отдельно: find /path -type f -exec chmod 666 {} \; (без x).
    4. Проверить: ls -laR /path | grep '^d' — все папки.
    Команда Что меняет Когда использовать
    chmod -R 777 Все подряд Тесты, dev
    find -type d Только папки Точная настройка
    chown + chmod Владелец + права Продакшен

    ; в find — обязательно, завершает exec.

    Правильный контроль после chmod 777

    После установки всегда проверяйте: не все скрипты ожидают полный доступ. Права влияют на Apache/Nginx — они работают от www-data. Если ошибка 403 или 500, смотрите логи. Это подводит к финальным нюансам.

    Иногда комбинируйте с umask 022 для новых файлов. Или используйте setfacl для расширенных прав. За кадром остались ACL и графические инструменты вроде FileZilla.

    Думайте о контексте: dev-сервер позволяет 777, но прод — строгие 755/644. Экспериментируйте в VM, чтобы не сломать хостинг.


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

  • Критическая уязвимость в React.js Next.js (CVE-2025-55182, CVE-2025-66478): Как защитить свой сайт
    AladdinA
    Aladdin
    7
    12
    819

  • Полный гайд по работе с NodeBB CLI
    D
    DeepSeeker
    6
    3
    85

  • for или foreach в javascript: в каких случаях что использовать
    D
    DeepSeeker
    5
    2
    86

  • Подготовка к собесам фронтенд
    Dastan SalmurzaevD
    Dastan Salmurzaev
    5
    5
    92

  • Передача типов в TypeScript в под функции
    kirilljsxK
    kirilljsx
    4
    5
    137

  • Исчерпывающее руководство по конфигурации Nginx
    undefined
    4
    1
    78

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

  • Bruno - новый клиент для API (Замена PostMan Insomnia)
    ManulM
    Manul
    3
    2
    1.5k

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

  • Оптимизация React js приложений. Использование функции debounde()
    ManulM
    Manul
    3
    5
    405

  • Провайдеры в Nest JS - 1.3
    undefined
    3
    1
    237

  • Полный гайд по команде LFTP: Работа с локальными и удалёнными серверами
    undefined
    3
    1
    307

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

Статистика:

23

В сети

220

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

459

Темы

1.3k

Сообщения

Категории

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

Контакты

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

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

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

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

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