Что выбрать: React Native, Flutter или нативный подход
Важнейшая проблема кроссплатформенной разработки решалась в мобильных фреймворках разными способами. Первоначально проект Apache Cordova (ранее PhoneGap) решил эту проблему внедрением webview-рендеринга. Затем в проекте...
7 бесплатных API для уникальных приложений
При разработке приложения мы часто хотим просто сосредоточиться на интерфейсе, но интересные, динамические данные для отображения нам тоже нужны. Здесь в игру вступают общедоступные...
Создание музыкального бота с помощью Discord.js
API discord предоставляет инструмент для создания и использования ботов. Рассмотрим пример создания базового музыкального бота и добавления его на сервер. Бот сможет проигрывать, пропускать...
Почему стоит избегать метода push при разработке на JavaScript
Использование метода push может привести к изменению исходного массива. Такой код чреват потенциальными проблемами и, возможно, его придется даже переписывать.
Обзор функциональностей CSS, которые появились в 2022 году
Познакомимся с новыми функциональностями CSS 2022 года. Они отражают современные тенденции в развитии языка и нацелены на улучшение стилизации веб-страниц.
5 практик JavaScript под пристальным взглядом профи
Чем чище код, тем лучше! Руководствуясь такой логикой, автор детально анализирует несколько практик в JavaScript, обращая внимание программистов на связанные с ними нюансы.
Слоты: сделайте свой Angular API гибким
Подход с унифицированным определением слотов оказывается достаточно гибким при разработке API для низкоуровневых компонентов. Ознакомьтесь с его особенностями, преимуществами и примерами реализации.
Миграция REST API на GraphQL
GraphQL появился относительно недавно, а значит, разработчики API не уверены, писать следующий API на GraphQL или нет. Очевидно, что REST API хорошо знаком программистам...
Напишите свой первый микросервис на JavaScript
Предлагаем пошаговую инструкцию по разработке простого микросервиса на основе API с использованием JavaScript, NodeJS и контейнеризации с помощью docker.
Дизайнер и код
Чуть ли не каждую неделю выходят публикации с размышлениями о том, должен ли современный дизайнер понимать код. Наша индустрия наконец-то накопила достаточно опыта, чтобы...
Улучшение производительности .NET Core API
Google предоставляет такую статистику посещаемости веб-страниц:
53% посетителей мобильных сайтов покидают страницу, если она загружается более трёх секунд.https://www.thinkwithgoogle.com/marketing-resources/data-measurement/mobile-page-speed-new-industry-benchmarks/
Это значит, что очень важно сделать ваш сайт...
Автоматизация: друг или враг дизайнера?
В начале XIX века Британия находилась в процессе трансформации в результате промышленной революции. Отрасли производства, как, например, обрабатывающая или текстильная, сильно изменились благодаря инновациям...
21 лайфхак для новичков в JavaScript
В JavaScript есть эксклюзивные практики, которые используют профессионалы и о которых даже не подозревают новички. Ознакомьтесь с некоторыми из них, чтобы усовершенствовать свои навыки в написании кода и преуспеть в динамичном мире JavaScript-разработки.
Стратегии обнаружения изменений в Angular - «onPush» и «Default»
В Angular есть две стратегии обнаружения изменений — «Default» и «onPush». Рассмотрим преимущества и недостатки этих стратегий.
Что такое «обнаружение изменений» в Angular?
Механизм обнаружения изменений в...
Совместное использование состояний между окнами без задействования сервера
Как разделить состояние между несколькими окнами, чтобы создать иллюзию целостной картинки? Поговорим о приемах, с помощью которых можно реализовать такую задумку.
Динамическое масштабирование элементов в CSS
Сегодня я поделюсь с вами одним трюком, с которым я столкнулся, работая с CSS. С его помощью можно динамически масштабировать любой HTML-элемент, а заодно...
Лучшие практики JavaScript — производительность
Ограничение доступа к переменным и свойствам
Задача состоит в том, чтобы сократить время доступа к переменным и свойствам объектов в приложениях.
Причина заключается в том, что...
Как создать Meetup+Slack приложение с помощью Standard Library и Node.js
Meetup — это популярный веб-сайт, на котором люди со схожими интересами объединяются в группы для организации тематических мероприятий в своих городах. После того, как мы успешно...
15 сайтов, экономящих время разработчика
Хотите выделить время, чтобы взяться за новые увлекательные задачи, углубиться в сложные проблемы или просто уходить с работы вовремя? Эти 15 сайтов помогут значительно сократить процесс разработки.
Шаблон “Декоратор” в разработке на TypeScript
Овладейте полезным инструментом TS-разработчика - шаблоном проектирования "Декоратор". Он позволяет динамически расширять функциональность объектов, не усложняя читаемость кода.
Топ-9 современных общедоступных JS-библиотек для разработки ИИ
Эти библиотеки не только помогут создать высокопроизводительные приложения, управляемые искусственным интеллектом, но и значительно упростят вашу работу. С ними ваши проекты по ИИ станут умнее, быстрее и эффективнее!
Создание многофункционального калькулятора на чистом JavaScript
Это руководство поможет вам создать калькулятор с расширенными возможностями - голосовыми командами, клавишами быстрого доступа и адаптивными темами - на чистом JavaScript. Такой многофункциональный инструмент, динамичный и настраиваемый, значительно повысит качество пользовательского опыта.
В чём разница между var, let и const в JavaScript
Сегодня вы узнаете два новых способа создавать переменные в JavaScript (ES6), а именно с помощью let и const. Мы разберёмся в чём разница между...
Сайты с модальными диалоговыми окнами без JavaScript
Сайты, которые используют JavaScript для большей части таких элементов, как модальные диалоговые окна, выпадающее меню, мобильные меню-«гамбургеры», зачастую демонстрируют полный провал в плане удобства...
Пять причин поместить функции в класс
Не все функции созданы одинаковыми. Класс — это набор каким-то образом связанных друг с другом функций. Они могут принадлежать одной категории и иметь что-то общее в...
Создание пользовательских хуков React: полное руководство
Пользовательские хуки React помогают оптимизировать разработку и создавать более динамичные и эффективные приложения. Предлагаем полное и доступное руководство по их созданию и использованию.
Как преобразовать функции JavaScript в генераторы, эффективно использующие память
Ключевое слово yield используется в JavaScript для приостановки выполнения функций. При повторном вызове функции ее выполнение продолжается с последнего оператора yield.
Функция, возвращающая (yields) значения,...
Несложное WebGPU-программирование с использованием taichi.js
Фреймворк taichi.js позволяет создавать захватывающий графический контент без освоения сложного WebGPU-программирования. Убедитесь в этом на примере игровой программы "Жизнь". Потребуется менее 100 строк кода, чтобы разработать распараллеленную WebGPU-программу с 3 конвейерами вычислений и конвейером рендеринга.
Почему React негативно повлиял на веб-разработку
Недавно я представлял нашу компанию на конференции разработчиков .debug. Целью моего посещения было привлечение специалистов к обмену мнениями. Идея состояла в том, чтобы создать своего...
Чем веб-дизайн отличается от front end разработки?
Основные различия между веб-дизайнером и разработчиком веб-интерфейсов, которые помогут вам определиться с профессией в сфере IT
Балансировка нагрузки и последовательное хеширование
Рассмотрим, как работает хеширование запросов при наличии в системе двух и более серверов и как его можно усовершенствовать для балансировки нагрузки.
Двоичное дерево поиска: вставка значения с использованием JavaScript
Двоичное дерево — это древовидная структура данных, в которой каждый элемент имеет не более 2 дочерних элементов. Эта структура данных состоит из трех основных элементов:
1. Данные
2....
Пять алиасов Git, без которых мне не прожить
Я большой фанат коротких путей.
Алиасы, хаки, скрипты, автоматизация, обходные варианты… я люблю избыточную оптимизацию, поэтому неудивительно, что мне особенно нравится функциональность алиасов в Git — настолько,...
Как использовать WebGL для интерактивной 3D-графики
Расширьте возможности веб-приложения за счет интерактивной 3D-графики. Предлагаем пошаговый гайд по 3D-моделированию с использованием WebGL (API JavaScript) и библиотеки Three.js.
3 совета, как стать мастером Йода по JavaScript
Увидев в проекте на Angular или React устаревший код JavaScript, код-ревьюер сразу определит, что разработчик — новичок. Но если вы воспользуетесь 3 советами из...
Nest.js и Next.js: в чем разница?
Стоите перед дилеммой: Nest.js или Next.js? Возможно, стоит использовать оба фреймворка? Каждый из них идеален в своей области, и при этом они прекрасно дополняют друг друга в разработке полного цикла. Узнайте об особенностях Nest.js и Next.js, чтобы принять обоснованное решение.
Компиляция TypeScript в нативный код
Представляем Static Hermes - новое поколение движков JavaScript. Ключевой особенностью его является опциональная компиляция JavaScript с указанием типов в нативный код, обеспечивающая предсказуемую производительность на уровне C и C++.
Python для Android: Как начать делать кроссплатформенные приложения с Kivy
В этом руководстве приведены шаги, необходимые для создания кроссплатформенного приложения для Android с использованием Python-фреймворка Kivy и Linux Ubuntu. Перед началом установки и запуском...
AutoScraper и Flask: создание API для любого сайта менее чем за 5 минут
В этом руководстве мы создадим собственный поисковый API электронной коммерции с поддержкой как eBay, так и Etsy без использования каких-либо внешних API. С помощью AutoScraper и Flask мы можем достичь этой цели менее чем за 20 строк Python кода для каждого сайта.
5 библиотек ведения логов для Node.js
Обсуждаем, почему так важно вести логи, и разбираем популярные библиотеки, обеспечивающие эту возможность для приложений Node.js: Winston, Pino, Bunyan, Log Level и npmlog.
Map, CompactMap и FlatMap в Swift
Знакомимся с альтернативным способом работы с массивами и словарями, с помощью которого можно получить более лаконичный и читаемый код.
Что такое Tailwind CSS и как внедрить его на сайт или в React-приложение?
CSS может стать вашим лучшим другом или злейшим врагом. Несмотря на то, что он невероятно гибкий, а результаты его применения порой кажутся магией, без...
15 часто используемых методов массивов JavaScript
Массивы используются практически в каждом приложении, однако методы некоторых из них довольно запутаны. Эти 15 методов массивов стоит освоить, поскольку они часто применяются на практике.
Основы дизайна, которые должен знать каждый креативщик
Обычный поиск в Google по запросу “образовательные онлайн-ресурсы по дизайну” даёт миллионы результатов — вовсе неудивительно, что понимание того, с чего начинать изучение, может показаться дизайнеру-новичку...
Полное руководство по “this” в JavaScript
"Чему равно this в данном случае?" - этот вопрос часто сбивает с толку новичков в JavaScript-программировании. Предлагаем четкий алгоритм, который поможет быстро определить значение ключевого слова this.
Тест-драйв Solara для разработки веб-приложений на Python
Протестируем возможности фреймворка Solara в процессе создания приложения-планировщика на Python. Выявим его достоинства и недостатки и сравним со Streamlit.
Как создавать сайты с молниеносной загрузкой: рекомендации по оптимизации фронтенда. Часть 2
В этой части детально рассмотрим завершающие этапы критически важного пути рендеринга (CRP): компоновку макета и отрисовку. Вы получите представление об общих стратегиях оптимизации CRP, а реальные сценарии позволят вам овладеть практическими методами создания молниеносных сайтов.
Программирование будущего: беспилотный автомобиль, управляемый JavaScript и ИИ
Пытаетесь разгадать магию беспилотных автомобилей? Присоединяйтесь к программистам, увлекающимся автоматизированными транспортными средствами. Они помогут написать код, превращающий автомобиль в самоуправляемое чудо техники.
Новые API браузера, необходимые каждому веб-разработчику
Современные API браузера повышают производительность разработчиков и даже способны заменить популярные библиотеки для фронтенд-компонентов. Используйте их для создания удобных веб-приложений.
Kubernetes: сэкономьте до 50% с вытесняемыми объектами
Контейнеры существуют долгое время и Kubernetes меняет не только технологический ландшафт, но и организационное мышление. Все больше компаний переходят к облачным технологиям и спрос...
10 лайфхаков JavaScript, которые сделают из вас профессионала
Опытные JavaScript-программисты владеют приемами, которые неизвестны новичкам. Познакомьтесь с 10 из них: они сделают код качественнее, а вас - более профессиональным программистом.
Спасение жизней с помощью Scrum
Историки могут пересмотреть прогресс человечества и обозначить чёткую линию между временем “до появления Scrum” и “после появления Scrum”.
Это первая из двух статей, которую я...
Цветовые схемы в дизайне
Цвет — один из важнейших элементов дизайнерских проектов, а не просто визуальная составляющая, приятная глазу. Он влияет на восприятие пользователя и на то, какие...
Основные принципы темного UI-дизайна
Сегодня темное оформление UI-дизайна встречается повсюду — от мобильных экранов до широкомасштабных телевизоров. Сила, роскошь и элегантность — это то, что выражает темное оформление....
5 актуальных рекомендаций по оптимизации отладки
Ох, уж эти ошибки! Их появление в коде ничего, кроме досады, не вызывает. Лично мне они точно портят настроение. Только представьте: вы создаете продукт,...
4 секрета читаемого и производительного кода JavaScript
JavaScript настолько гибкий язык программирования, что дает вам возможность достигать целей разными способами. При этом существует ряд принципов и рекомендаций, соблюдение которых позволит улучшить...
4 главных тренда в веб-хостинге в этом году
Самый важный шаг сделан: вы вступили на тропу предпринимательства и открыли собственный бизнес, теперь вы сам себе начальник. Но подождите, кое-что вы все-таки забыли!...
Поиск и использование компонентов с bit.dev для создания приложений
Bit упрощает использование компонентов из библиотек и приложений. Bit’s hub (bit.dev) облегчает поиск и взаимодействие с этими компонентами.
В этой статье мы узнаем, как найти...
Прогрессивное совершенствование и JavaScript-фреймворки: сложные взаимоотношения
Рассмотрите ключевые шаблоны, инструменты, сценарии использования и бизнес-ограничения при создании пользовательских интерфейсов для веб-приложений. Это позволит выбрать наиболее приемлемый подход при разработке бизнес-проекта.
Почему разрабатывать веб-интерфейсы так сложно?
Предлагаем разбор ключевых проблем разработки веб-интерфейсов. Их осмысление - ключ к эффективным решениям в области фронтенда, позволяющим создавать визуально привлекательные, надежные, безопасные и удобные для пользователя веб-интерфейсы.
50 вопросов, ответы на которые вы должны знать, прежде чем идти на собеседование по...
Собеседования c разработчиками напоминают Дикий Запад. Никто толком не понимает, чем занимается. Большинство технических рекрутеров не могут отличить Java от JavaScript. Тем не...
11 инструментов для ускорения создания пользовательского интерфейса
Предлагаем подборку бесплатных инструментов для стилистического оформления пользовательских интерфейсов. Они помогут фронтенд-разработчикам и дизайнерам существенно сэкономить время и повысить производительность.
Как выглядит нескучный модульный лендинг React
Рассмотрим красивый шаблон лендинга с качественным кодом и улучшенной доступностью. Разберемся, что делает его структурированным, самодокументируемым и легко настраиваемым.
Как писать лог-файлы, которые экономят время
Сначала позвольте немного поразглагольствовать: программа, поддержкой которой я занимаюсь по работе, содержит много милых особенностей. “Произошла ошибка” — не то, что достойно такого описания....
Введение в Webpack для новичков
Что такое Webpack?
Webpack — это инструмент, позволяющий скомпилировать, например, JavaScript модули в единый JS-файл. Webpack также известен как сборщик модулей.
При большом количестве файлов он создает один объемный файл...
Что такое Deno и заменит ли он NodeJS?
Для тех, кто не совсем в теме, Deno — это детище Райана Даля, ставшего известным благодаря созданию Node.js, который вам, наверняка, знаком. Значит ли это, что...
Повесть об однонаправленном потоке данных в Angular
У Angular есть свои фишки и причуды. В то время как React реализует модель однонаправленного потока данных по умолчанию, Angular с самого начала точно...
Поэтапное создание рабочей контактной формы в Next.js
Учимся создавать контактную форму для эффективного взаимодействия с пользователями. В этом важном деле нам помогут API-маршруты Next.js и API SendGrid.
Использование хуков Git для улучшения процесса разработки
Недавно я впервые внес вклад в новую кодовую базу: расширил и реализовал некоторые функции, которые мне были нужны. После тщательного тестирования того, что функциональность...
F-строки и 3 эффективных способа их применения
Далеко в прошлом остались те времена, когда разработчики Python еще использовали оператор % для форматирования строк.
С момента появления Python 3.0 его постепенно заменили вызовом...
UX в 2021 — что ожидать?
UX-дизайн — это переменчивая сфера, в которой появляются новые направления каждый год, и последний — не исключение. COVID-19 и всемирная изоляция внесли неожиданные коррективы...
Как создавать собственные хуки на React
Учимся использовать логику компонентов для создания многоразовых хуков
Хуки React, впервые появившиеся в версии React v16.8, кардинально изменили подход к написанию кода. Из коробки React...
7 лучших библиотек для создания эффективных приложений ReactJS
Библиотека ReactJS выделяется своей производительностью. Но теперь у нас появилась возможность еще больше ее усовершенствовать. Сообщество пользователей React создало несколько дополнительных весьма эффективных библиотек.
Рассмотрим...
Можно ли использовать бессерверные технологии для создания микросервисов?
Прежде чем узнать о возможностях использования бессерверных технологий для создания микросервисов, рассмотрим создание простого веб-приложения с помощью бессерверного стека приложений AWS.
Бессерверные строительные блоки для...
Хочешь стать веб-разработчиком? Учи Node.js, а не PHP
Один из самых частых вопросов, которые я слышу от своих учеников, звучит так: "Почему вы преподаете нам Node.js, а не PHP?" Ответ "Поверьте, я...
Ведущие тенденции веб-разработки в 2019 году
Знаете ли вы, что во всем мире создают и запускают около 200 сайтов в минуту?
В мире насчитывается 200 миллионов активных веб-сайтов, а общее количество неактивных...
Новые функции в TypeScript
Введение
TypeScript — это сильно типизированный, объектно-ориентированный и компилируемый open-source язык, разработанный и поддерживаемый компанией Microsoft. Он был создан в целях привнесения статических типов в современный JavaScript....
Веб-скрапинг с помощью Node.js — Часть 1
В этой статье я расскажу о том, как использовать Node.js, чтобы выполнить быстрый и эффективный веб-скрапинг для одностраничных приложений. С помощью веб-скрапинга можно собирать...
Построение бесконечного списка с помощью SwiftUI и Combine
С момента представления SwiftUI на WWDC2019 его популярность резко возросла. В течение последних двух лет отдел разработки Apple внес в этот UI-фреймворк много улучшений....
Профессиональная обработка ошибок в TypeScript
Обработка ошибок - важнейшая часть программирования на Type/JavaScript. Приложение может столкнуться с большими проблемами в будущем, если вы не уделите должного внимания выявлению и регистрации ошибок. Посмотрите, как это делают профи.
Возможности контроля в JavaScript: методы AbortSignal.timeout() и AbortSignal.any()
Представляем два малоизвестных, но очень полезных метода управления асинхронными задачами: AbortSignal.timeout() и AbortSignal.any(). Оба эти метода поддерживаются основными веб-браузерами и позволяют корректно прервать асинхронные операции.
Как отследить событие закрытия браузера и вкладки с помощью JavaScript
Вам нужно отследить событие закрытия браузера или вкладки, чтобы предупредить пользователя о любых несохраненных изменениях на веб-странице? Предлагаем пошаговый алгоритм этой операции.
Чего я не знал о CSS, а стоило бы
Делать сайты я учился по-старомодному: открывал исходный код и пытался повторить то, что видел. А по тому, чего не видел (PHP/MySQL), прочёл какую-то случайно...
Почему никто не рассказал мне это о CSS
Многим разработчикам, кажется, нет дела до CSS и это не новость. Тем не менее многое из того, что мы узнаём, происходит в процессе общения...
Relay для Angular
Всем привет! Сегодня я представлю вашему вниманию relay-angular, молодую инновационную библиотеку, которая доказала свою стабильность в процессе создания библиотек react-relay-offline и relay-hooks.
Признаюсь, что не...
70% интервьюеров задают эти 5 вопросов по React.js
Чтобы стать React-разработчиком, надо успешно пройти техническое собеседование. Предлагаем ответы на вопросы, касающиеся самых базовых понятий React.js, а также экспертные рекомендации для будущих разработчиков.
Советы по отладке JavaScript
Любое программное обеспечение не застраховано от ошибок. Каждая функция может иметь несколько вариантов использования и рабочих процессов. При написании программы иногда упускаются несколько пограничных...
Javascript и функциональное программирование. Часть 4: каррирование
Предыдущие статьи: Часть 1, Часть 2, Часть 3
Каррированием называется метод, при котором мы вызываем функцию с меньшим количеством аргументов. Но функция эта возвращает значения...
Дизайн для всех: подробное руководство по созданию интерфейсов для людей с ограниченными возможностями
Создание дизайн-решений, которые будут работать для каждого — сейчас разработчики сосредоточены на этой теме больше, чем когда-либо раньше. Всё чаще ведётся речь о том, что интересы...
Парсинг HTML из строки на Ruby On Rails
На одном из этапов моего проекта в школе программирования Flatiron Bootcamp мне пришлось столкнулся с проблемой, совершенно отличающейся от того, что я видел раньше....
Создание тестового фреймворка JavaScript
Фреймворк модульного тестирования
Суть модульного тестирования заключается в проверке небольших изолированных фрагментов кода. Если тест использует внешний ресурс, например сеть или базу данных, он уже...
AEGIS — система аутентификации платформы Ankorstore
Как убрать задачи аутентификации с фронтенда и бэкенда приложения и устранить технические недоработки, связанные с масштабированием? Изучим механизмы аутентификации и наиболее важные рабочие процессы обработчика токенов в AEGIS.
Как избавиться от операторов switch - малоизвестный способ
Простой способ облагородить свой код
Скорее всего, вы, как и я, научились не перегружать исходный код операторами if . Они трудно читаются. Такой код сложно проверить и...
Анимация границ с помощью свойств CSS
Движущиеся красочные элементы всегда привлекают внимание пользователей сайтов. Научимся создавать интересные анимированные границы с помощью CSS.
React Query - залог эффективных запросов
В статье будут рассмотрены:
случаи использования React Query; простые запросы fetch с помощью пакета React Query; поиск элементов через API по ID; пагинация; мутации.
Случаи использования React Query
Традиционный метод fetch() отлично...
Как работает проверка доступности API в Swift
Мы постоянно применяем проверки на доступность API, чтобы обеспечить откаты ПО для пользователей, использующих старые версии iOS. А задавались ли вы вопросом, как эту...
Изучите эти основы JavaScript и станьте лучшим разработчиком
В языке JavaScript есть примитивы, объекты и функции и все они рассматриваются в качестве объектов, даже примитивы.
Примитивы
Число, булевый (логический) тип данных, строка, undefined и...
Функции call, apply и bind: использование и сравнение
Изучите практические способы управления контекстом в JavaScript. Эффективное использование функций call, apply и bind обеспечит ожидаемую их работу в различных объектах и скриптах, повысит надежность и гибкость кода.
Связь между микро-фронтендами
Слабая связанность
Слабая связанность - самый важный аспект реализации любого шаблона связи в микро-фронтендах. Прямой связи необходимо избегать, начиная с бэкендов микросервисов. Однако довольно часто...
Что значит this в JavaSсript?
Значение this — одна из самых запутанных составляющих JavaSсript. this может принимать различные значения в зависимости от того, где располагается.
В этой статье мы рассмотрим, где используется...
Шаблоны проектирования в React
React - библиотека JavaScript, которая отличается гибкой архитектурой и функциональностью и, пожалуй, чаще других используется при создании пользовательских интерфейсов. Еще сильнее упрощают процесс разработки на React шаблоны проектирования.
6 функций Pandas для быстрого эксплораторного анализа данных
Познакомьтесь с 6 функциями, лежащими в основе любого эксплораторного анализа данных. Они позволят сделать первый шаг в исследовании данных в Pandas.
Nelm — полноценная замена Helm
Ознакомьтесь с Nelm - усовершенствованным инструментом развертывания Kubernetes, сохраняющим обратную совместимость с Helm. Его возможности, включая режим пробного запуска и расширенную обработку ошибок, обещают ускорить и упростить управление развертыванием Kubernetes.
Галерея лучших модулей Python
Вас никогда не обескураживало огромное число модулей Python? И, скорее всего, вам было непросто выбрать всего один для конкретного проекта. В этой статье вы...
10 заповедей UI-дизайна
Этот список составлен на основе книги "101 UX-принцип" (101 UX Principles), написанной Уиллом Грантом (Will Grant).
1. Пустые состояния
Пустые состояния должны представлять нечто большее, чем...








































































































