[ { "title": "Main Loop (Главный цикл) в Android", "url": "/posts/android-main-loop/", "categories": "Android, Theory", "tags": "android, theory, main loop, главный цикл", "date": "2021-12-05 23:00:00 +0800", "snippet": "Не так давно наткнулась на серию статей про главный цикл в android, которые показались мне очень интересными. Поэтому сохраняю на память.Пишем свой циклОсновой любого приложения является его главный поток. На нём происходят все самые важные вещи: создаются другие потоки, меняется UI. Важнейшей ег..." }, { "title": "Kotlin. Коллекции", "url": "/posts/kotlin-collections/", "categories": "Kotlin, Collections", "tags": "kotlin, theory, collections, kotlin collections", "date": "2021-10-09 22:40:00 +0800", "snippet": "В данной статье постараюсь собрать всю информацию о коллекциях в Kotlin.Общая информацияПод коллекциями в программировании понимают объект, содержащий в себе набор значений одного или различных типов, а также позволяющий к этим значениям обращаться и извлекать. Другими словами - это контейнер, в ..." }, { "title": "Реактивное программирование. ReactiveX", "url": "/posts/reactive-programming/", "categories": "Libraries, ReactiveX", "tags": "reactive programming, reactive, reactivex, rxjava, rxkotlin, rxandroid", "date": "2021-04-20 20:05:00 +0800", "snippet": "Реактивное программирование - это программирование, основанное на асинхронных потоках данных и на распространении изменений. Под потоком здесь понимается массив данных, отсортированных по времени, который может сообщать, что данные изменились. Потоки могут транслировать данные или подписываться н..." }, { "title": "Массивы (Arrays)", "url": "/posts/arrays/", "categories": "Programming Theory, Data Structure", "tags": "theory, data structure, arrays", "date": "2021-03-30 22:23:00 +0800", "snippet": "Массивы - это структура данных для хранения элементов. Элементами могут быть целые числа, строки, объекты и т.д. Все элементы хранятся непрерывно, т.е. в соседних участках памяти. Если понадобится добавить новый элемент в массив, а места под него рядом не окажется, то придётся запросить другой бл..." }, { "title": "Android 12", "url": "/posts/android-12/", "categories": "Android, Android version history", "tags": "android, android 12, android version", "date": "2021-03-23 19:06:00 +0800", "snippet": "Дата выхода: предварительная версия выпущена 18 февраля 2021 года, релиз - 04 октября 2021 года.API: 31.Сладкое название: Snow Cone.Визуальные изменения Эффект тактильной обратной связи. Приложения на Android 12 могут использовать вибрацию для тактильной обратной связи. Этот эффект позволяет физ..." }, { "title": "Определение доминирующих цветов с помощью Palette", "url": "/posts/android-palette/", "categories": "Android, UI", "tags": "android, palette, glide, colors, dominant color, ui", "date": "2021-02-09 03:24:00 +0800", "snippet": "Библиотека Palette определяет основные цвета изображения, что в свою очередь позволяет динамически создавать и изменять цветовую схему приложения на основе заданного изображения.Подключение библиотекиДостаточно добавить следующую зависимость в файл build.gradle уровня приложения:implementation &#..." }, { "title": "Kotlin. Нюансы при использовании библиотеки Gson", "url": "/posts/kotlin-gson/", "categories": "Kotlin, Libraries", "tags": "kotlin, gson, json, android", "date": "2021-01-15 04:13:00 +0800", "snippet": "В данной статье я собрала некоторые нюансы, которые стоит учитывать, если вы пишите на Kotlin и при этом используете библиотеку Gson. Лично мной не проверялось, записано на будущее.Gson - это очень популярная библиотека для сериализации и десериализации объектов Java и JSON. Главный нюанс заключа..." }, { "title": "Git", "url": "/posts/git/", "categories": "Programming Theory, Git", "tags": "theory, git", "date": "2021-01-11 02:20:00 +0800", "snippet": "Git - это распределённая система управления версиями.Распределенная, значит, что в общем случае данные будут хранится не на одном сервере, а доступ к ним можно получить с разных устройств и из любой точки мира. Даже если у вас сломался компьютер – проделанная работа не будет потеряна.Система конт..." }, { "title": "Обфускация кода", "url": "/posts/android-obfuscation/", "categories": "Android, Theory", "tags": "android, theory, obfuscation, proguard", "date": "2021-01-11 01:14:00 +0800", "snippet": "Защита кода приложения это то, о чем не всегда задумывается разработчик. Но  ведь обфускация при сборке – это не только защита. Это также эффективный способ уменьшить размер конечного APK, а иногда и оптимизировать исполнение программы. В этом нам поможет Proguard.С учетом того, на сколько сейчас..." }, { "title": "Алгоритмы сортировки", "url": "/posts/sorting-algorithm/", "categories": "Programming Theory, Algorithms", "tags": "algorithm, theory, sorting algorithm", "date": "2020-11-04 21:08:00 +0800", "snippet": "Алгоритм сортировки — это алгоритм для упорядочивания элементов в списке.Виды алгоритмов сортировкиСортировка пузырьком / Bubble sortwikiСортировка пузырьком — это простейший и один из самых известных алгоритмов сортировки. Идея заключается в последовательном сравнении значений соседних элементов..." }, { "title": "Git Flow", "url": "/posts/git-flow/", "categories": "Programming Theory, Git", "tags": "theory, git, git flow", "date": "2020-11-02 19:25:00 +0800", "snippet": "Git flow - это популярная методология ветвления и слияния, которая описывает несколько веток для разработки, релизов и взаимодействия между ними.Схематично Git flow выглядит так:Основные принципыОсновные идеи Git Flow состоят в том, что существует несколько типов веток: главные (master и develop..." }, { "title": "Алгоритмы кэширования", "url": "/posts/cache-algorithms/", "categories": "Programming Theory, Algorithms", "tags": "algorithm, theory, cache", "date": "2020-10-30 16:15:00 +0800", "snippet": "Кэш - это временное хранилище для данных, которые с наибольшей вероятностью могут быть повторно запрошены. Загрузка данных из кэша осуществляется быстрее, чем из хранилища с исходными данными, но и его объём существенно ограничен.Алгоритмы кэшированияАлгоритмы кэширования - это подробный список и..." }, { "title": "Сложность алгоритмов. Big O. Основы.", "url": "/posts/complexity-of-algorithms/", "categories": "Programming Theory, Algorithms", "tags": "algorithm, theory, big o", "date": "2020-10-29 18:26:00 +0800", "snippet": "Сложность алгоритма - это количественная характеристика, которая говорит о том, сколько времени, либо какой объём памяти потребуется для выполнения алгоритма.Развитие технологий привело к тому, что память перестала быть критическим ресурсом. Поэтому когда говорят об анализе сложности алгоритма, о..." }, { "title": "Шпаргалка по SOLID-принципам", "url": "/posts/solid-cheat-sheet/", "categories": "Programming Theory, OOP", "tags": "theory, oop, solid", "date": "2020-10-27 20:30:00 +0800", "snippet": "Наткнулась на статью, в которой достаточно кратко, просто и с примерами рассказывается про принципы SOLID. Сохраняю на память.Источник - Шпаргалка по SOLID-принципам с примерами на PHP.Что же такое SOLID-принципы? Если верить определению Wikipedia, это: аббревиатура пяти основных принципов дизай..." }, { "title": "Kotlin. Встроенные (inline) функции", "url": "/posts/kotlin-inline-functions/", "categories": "Kotlin, Functions", "tags": "kotlin, theory, inline functions, inline, reified", "date": "2020-09-02 20:30:00 +0800", "snippet": "В Kotlin существует модификатор inline, которым можно пометить функцию. Основное его предназначение - повысить производительность. Чтобы понять за счёт чего она повышается, нужно вспомнить лямбда-выражения.Как правило, лямбда-выражения компилируются в анонимные классы. То есть каждый раз, когда и..." }, { "title": "Kotlin. Перегрузка операторов", "url": "/posts/kotlin-operator-overloading/", "categories": "Kotlin, Basics", "tags": "kotlin, operator, operator overloading", "date": "2020-08-04 17:00:00 +0800", "snippet": "Когда вы в своём коде используете какой-либо оператор, за кулисами вызывается соответствующая ему функция. При этом каждому оператору соответствует функция со строго определённым именем. Например, оператору + соответствует функция plus.Kotlin позволяет перегружать операторы, тем самым становится ..." }, { "title": "Broadcasts", "url": "/posts/broadcasts/", "categories": "Android, Theory", "tags": "android, theory, broadcasts, broadcast receiver", "date": "2020-07-27 18:46:00 +0800", "snippet": "Broadcasts - это широковещательные сообщения, которые отправляются, когда происходит определённое событие. Приложения могут отправлять их сами, либо получать сообщения, отправляемые системой Android и другими приложениями. Когда происходит трансляция сообщения, система автоматически будет направл..." }, { "title": "Tasks и Back Stack", "url": "/posts/tasks-and-back-stack/", "categories": "Android, Theory", "tags": "android, theory, tasks, back stack", "date": "2020-07-25 03:44:00 +0800", "snippet": "Task - это набор активити, с которыми пользователь взаимодействует при использовании какого-либо приложения. У каждого task’а есть свой back stack - это что-то вроде способа организации открытых пользователем активити, который устроен по принципу LIFO - “последним вошел - первым вышел”. То есть п..." }, { "title": "Androidx и Support Library", "url": "/posts/androidx-and-support-library/", "categories": "Android, General", "tags": "android, androidx, support library", "date": "2020-07-24 18:26:00 +0800", "snippet": "При разработке приложений для нескольких версий Android наверняка потребуется способ, который позволит использовать новые функции в более ранних версиях. Можно писать код, который будет обрабатывать ранние версии, а можно воспользоваться библиотекой поддержки (support library), которая обеспечива..." }, { "title": "Kotlin. Лямбда-выражения и анонимные функции", "url": "/posts/kotlin-lambdas-expressions-and-anonymous-functions/", "categories": "Kotlin, Functions", "tags": "kotlin, theory, lambdas, anonymous functions", "date": "2020-07-23 17:25:00 +0800", "snippet": "Лямбда-выражения и анонимные функции - это функции без имени, которые могут быть переданы в качестве аргумента другим функциям. Их можно объявлять отдельно: сохранить в переменной и вызывать в нужном месте. Но обычно в этом нет необходимости, поэтому чаще всего они объявляются непосредственно при..." }, { "title": "Kotlin. Ключевое слово object.", "url": "/posts/kotlin-object-keyword/", "categories": "Kotlin, Classes and Objects", "tags": "kotlin, theory, object, companion object, object expressions", "date": "2020-07-17 16:21:00 +0800", "snippet": "Ключевое слово object позволяет одновременно объявить класс и создать его экземпляр (или другими словами, объект). При этом использовать его можно по-разному: объявление объекта; реализация объекта-компаньона; запись объекта-выражения (также известен как анонимный объект и object expressions)...." }, { "title": "RecyclerView", "url": "/posts/recycler-view/", "categories": "Android, UI", "tags": "android, ui, recyclerView, layoutManager, snapping, viewType, mergeAdapter, concatAdapter", "date": "2020-07-09 14:55:00 +0800", "snippet": "RecyclerView - компонент для отображения элементов списка, который является более продвинутой и гибкой версией ListView, но не является его родственником, а относится к семейству ViewGroup.Принцип работыДля отображения данных RecyclerView использует несколько компонентов: Объект RecyclerView, ко..." }, { "title": "Kotlin. Абстрактные классы и интерфейсы.", "url": "/posts/kotlin-abstract-classes-and-interfaces/", "categories": "Kotlin, Classes and Objects", "tags": "kotlin, theory, abstract class, interfaces", "date": "2020-07-07 20:40:00 +0800", "snippet": "Абстрактные классы и интерфейсы объединены мной в одну тему, так как по своей сути они очень похожи. И те и другие имеют отношение к “моделированию” классов. С их помощью мы можем показать, что у определённой группы классов есть что-то общее: то, что их отличает от всех остальных. Ключевая разниц..." }, { "title": "Activity (Активность, Операция)", "url": "/posts/android-activity/", "categories": "Android, Theory", "tags": "android, theory, activity", "date": "2020-07-04 01:30:00 +0800", "snippet": "Activity - это компонент приложения, который является одним из его фундаментальных строительных блоков. Его основное предназначение заключается в том, что оно служит точкой входа для взаимодействия приложения с пользователем, а также отвечает за то, как пользователь перемещается внутри приложения..." }, { "title": "Kotlin. Основной и вторичный конструкторы. Init блок.", "url": "/posts/kotlin-constructors-and-init-block/", "categories": "Kotlin, Classes and Objects", "tags": "kotlin, theory, primary constructor, secondary constructor, init", "date": "2020-06-30 15:26:00 +0800", "snippet": "Прежде чем разбираться в том, какие бывают конструкторы, нужно понять, что такое конструктор и в чём его предназначение. А для того, чтобы это понять нужно разобраться с другим определением, которое будет довольно часто встречаться и в документации Kotlin, и в различных статьях (в том числе моих)..." }, { "title": "Kotlin. Классы перечислений (enum).", "url": "/posts/kotlin-enum-classes/", "categories": "Kotlin, Classes and Objects", "tags": "kotlin, theory, enum", "date": "2020-06-29 18:10:00 +0800", "snippet": "В процессе разработки чего-либо у каждого из нас (наверное) возникали такие ситуации, когда переменная должна иметь определённые (заранее известные) значения - константы. Вместо того, чтобы плодить список констант, их все можно перечислить в классе, который был придуман специально для этого. Подо..." }, { "title": "Kotlin. Проверь себя! Вопросы - ответы.", "url": "/posts/kotlin-check-yourself/", "categories": "Kotlin, Quiz", "tags": "kotlin, quiz", "date": "2020-06-25 18:15:00 +0800", "snippet": "Здесь будут вопросы и ответы по языку программирования Kotlin. Общий сборник из найденного в интернете и услышанного на собеседованиях. Создано с целью проверить себя, а также понять, что нужно подтянуть.Каковы основные преимущества языка программирования Kotlin? Краткий - в сравнении с Java, в ..." }, { "title": "Kotlin. Изолированные (запечатанные) классы (sealed classes).", "url": "/posts/kotlin-sealed-classes/", "categories": "Kotlin, Classes and Objects", "tags": "kotlin, theory, sealed classes", "date": "2020-06-25 15:50:00 +0800", "snippet": "Изолированный класс - это еще одно новшество в языке Kotlin, которого не было в Java. Тем не менее, само по себе понятие в программировании не является новым — Kotlin позаимствовал его у других языков.В официальной документации изолированному классу было дано такое определение: класс, который поз..." }, { "title": "Kotlin. Вложенные и внутренние классы", "url": "/posts/kotlin-nested-and-inner-clesses/", "categories": "Kotlin, Classes and Objects", "tags": "kotlin, theory, nested, inner", "date": "2020-06-23 18:50:00 +0800", "snippet": "В Kotlin можно объявить один класс внутри другого. Как правило это полезно, когда нужно расширить функционал внешнего класса: будет чёткое разделение прямого предназначения класса от новой функциональности, при этом код будет рядом с местом использования. Подобные классы разделяются на вложенные ..." }, { "title": "Kotlin. Классы данных (Data classes)", "url": "/posts/kotlin-data-classes/", "categories": "Kotlin, Classes and Objects", "tags": "kotlin, theory, data classes", "date": "2020-06-22 21:30:00 +0800", "snippet": "В процессе разработки нам часто приходится создавать классы, предназначенные исключительно для хранения каких-либо данных. При этом, чтобы такой класс стал максимально удобным переопределяются методы toString(), equals() и hashCode().Обычно данные методы имеют одинаковую реализацию и чтобы каждый..." }, { "title": "Kotlin. Функции области видимости (Scope Functions)", "url": "/posts/kotlin-scope-functions/", "categories": "Kotlin, Basics", "tags": "kotlin, theory, basics, scope functions", "date": "2020-06-14 13:44:00 +0800", "snippet": "В стандартной библиотеке Kotlin есть несколько вспомогательных функций, которые позволяют избавиться от громоздких конструкций, одновременно делая код более читабельным. Речь идёт о функциях области видимости - функции, выполняющие блок кода по отношению к конкретному объекту и при этом формирующ..." }, { "title": "Kotlin. Null-безопасность. Операторы &quot;?.&quot;, &quot;!!.&quot;, &quot;?:&quot;", "url": "/posts/kotlin-null-safety/", "categories": "Kotlin, Basics", "tags": "kotlin, theory, basics", "date": "2020-06-11 16:20:00 +0800", "snippet": "В статье про базовый синтаксис Kotlin я кратко затрагивала тему null-безопасности.Но думаю стоит более подробно на этом остановиться. К тому же мной были озвученыне все операторы, которые помогают работать с типами, поддерживающими null.Напомню, что Kotlin разграничивает типы с поддержкой и без п..." }, { "title": "Kotlin. Отложенная и ленивая инициализация свойств", "url": "/posts/kotlin-lateinit-and-lazy/", "categories": "Kotlin, Basics", "tags": "kotlin, theory, basics, lateinit, lazy", "date": "2020-06-09 15:40:00 +0800", "snippet": "lateinitРазработчики Kotlin крайне серьёзно относятся к проверкам на null. Поэтому,как правило, свойства, которые по логике программы должны хранить ненулевыезначения инициализируются в конструкторе.Тем не менее бывают ситуации, когда такой подход не особо удобен. Например,если вы хотите инициали..." }, { "title": "Kotlin. Модификатор const", "url": "/posts/kotlin-const-modifier/", "categories": "Kotlin, Basics", "tags": "kotlin, theory, basics, const", "date": "2020-06-07 14:08:00 +0800", "snippet": "В Kotlin, как и во многих других языках, переменные могут быть изменяемыми инеизменяемыми. В статье про базовый синтаксис рассказывалось, что для объявленияизменяемой переменной следует использовать ключевое слово var, анеизменяемой - val.Несмотря на то, что мы говорим неизменяемая, мы не подразу..." }, { "title": "Kotlin. Модификаторы доступа - private, protected, internal, public", "url": "/posts/kotlin-visibility-modifiers/", "categories": "Kotlin, Basics", "tags": "kotlin, theory, basics, modifiers", "date": "2020-06-05 14:10:00 +0800", "snippet": "Любой класс, а также его конструкторы, свойства и функции имеют модификаторыдоступа - это такие ключевые слова, с помощью которых можно задать областьдействия данных. Или иначе - они позволяют регулировать уровень доступа кразличным частям кода.В Kotlin есть четыре модификатора доступа: private ..." }, { "title": "Kotlin. Ключевое слово open. Наследование", "url": "/posts/kotlin-open-keyword/", "categories": "Kotlin, Basics", "tags": "kotlin, theory, basics, open", "date": "2020-06-05 04:20:00 +0800", "snippet": "По умолчанию в Kotlin нельзя унаследовать один класс от другого. Связано это стем, что всем классам при создании неявно задаётся статус final, который иблокирует возможность наследования. Если мы всё же попытаемся унаследоваться оттакого класса, то получим ошибку: “This type is final, so it canno..." }, { "title": "Kotlin. Основной синтаксис", "url": "/posts/kotlin-basic-syntax/", "categories": "Kotlin, Basics", "tags": "kotlin, theory, syntax", "date": "2020-06-05 02:50:00 +0800", "snippet": "В данной статье рассмотрим основной синтаксис языка Kotlin.ПеременныеKotlin использует два разных ключевых слова для объявления переменных: val и var.Используйте val для переменной, значение которой никогда не изменится,так как вы не сможете назначить ей другое значение. Если же значение переменн..." }, { "title": "Kotlin. Общий обзор", "url": "/posts/kotlin-overview/", "categories": "Kotlin, Basics", "tags": "kotlin, theory, basics", "date": "2020-06-02 01:40:00 +0800", "snippet": "Начало разработки Kotlin было анонсировано JetBrains в 2011 году.Планировался он как альтернатива языкам Java и Scala, так как тоже выполняетсяпод управлением Java Virtual Machine. И спустя 6 лет компания Googleанонсировала начало официальной поддержки Kotlin, как языка для разработки подоперацио..." }, { "title": "Манифест приложения", "url": "/posts/manifest-file/", "categories": "Android, Theory", "tags": "android, theory, manifest", "date": "2020-05-31 21:00:00 +0800", "snippet": "Манифест - это набор правил, по которым работает приложение.Файл манифеста находится в корневой папке - AndroidManifest.xml - и содержитважную информацию, без которой система не сможет запустить приложение.Основное содержимое манифеста: Имя пакета для приложения. Является идентификатором приложе..." }, { "title": "Navigation Drawer", "url": "/posts/navigation-drawer/", "categories": "Android, UI", "tags": "android, ui, navigation", "date": "2020-05-26 18:20:00 +0800", "snippet": "Navigation drawer - это главное меню приложения, которое выдвигается слева направопри нажатии пользователем на значок “гамбургера”. Либо свайпом слева направо.Его еще называют “шторкой” и в открытом виде выглядит так:Когда этот элемент интерфейса только только появился, необходимо былоосуществлят..." }, { "title": "Принципы S.O.L.I.D. в картинках", "url": "/posts/solid-in-pictures/", "categories": "Programming Theory, OOP", "tags": "theory, oop, solid", "date": "2020-05-23 16:00:00 +0800", "snippet": "Вчера наткнулась на интересную статью, которая рассказывает о принципах SOLIDи подкрепляет все это забавными картинками. На мой взгляд она достаточно понятнои наглядно объясняет смысл принципов, чего вполне достаточно для первогознакомства с ними. Поэтому решила сохранить статью на память в вольн..." }, { "title": "Как работает Android. Архитектура платформы", "url": "/posts/how-does-android-work/", "categories": "Android, Theory", "tags": "android, theory, architecture", "date": "2020-05-21 04:20:00 +0800", "snippet": "Думаю, что каждому начинающему разработчику тяжело понять как Android устроен ив принципе из чего он состоит. В этой статье я постараюсь наиболее детально ипонятно расписать как система Android спроектирована.Начнем со схемы, на которой визуально отображены все основные компонентыархитектуры, а н..." }, { "title": "Android 10", "url": "/posts/android-10/", "categories": "Android, Android version history", "tags": "android, android 10, android version", "date": "2020-05-18 18:02:00 +0800", "snippet": "Дата выхода: 3 сентября 2019.API: 29. Сладкое название: Quince Tart (пирог с айвой).Визуальные изменения Навигация жестами. В данном режиме всё экранное пространство выделяется под контент, а для управления используются экранные жесты. Подробнее в гайде. Тёмная тема. Тема добавлена н..." }, { "title": "Android 11", "url": "/posts/android-11/", "categories": "Android, Android version history", "tags": "android, android 11, android version", "date": "2020-05-18 18:01:00 +0800", "snippet": "Дата выхода: предварительная версия выпущена 19 февраля 2020 года, релиз - 8 сентября 2020 года.API: 30.Сладкое название: Red Velvet Cake (торт «Красный бархат»).Визуальные изменения Улучшена поддержка нестандартных дисплеев (pinhole - экраны с разными формами вырезов, waterfall - экран обт..." }, { "title": "История версий Android", "url": "/posts/android-version/", "categories": "Android, Android version history", "tags": "android, history", "date": "2020-05-18 18:00:00 +0800", "snippet": "В познавательных целях рассмотрим каждую версию Android и что нового она принесла.Статья будет обновляться по мере выхода новых версий.Так как по старым версиям Android сложно найти какую-то официальную информацию,я решила все таки начать разбор с новых версий.Android 1.0Дата выхода: 23.09.2008...." }, { "title": "Что такое Android", "url": "/posts/about-android/", "categories": "Android, General", "tags": "android, history", "date": "2020-05-15 20:00:00 +0800", "snippet": "Android - это операционная система с открытым исходным кодом, которая построенана основе Linux и предназначена для таких устройств как смартфоны и планшеты(на самом деле устройств, поддерживающих Androidмного, это лишь основные).Приложения для Android обычно разрабатываются на Java. Однако 17 мая..." }, { "title": "Модель развития Android разработчика", "url": "/posts/roadmap-android-developer/", "categories": "Android, General", "tags": "android, roadmap, learning", "date": "2020-05-15 01:50:00 +0800", "snippet": "Когда я только решила, что хочу начать изучать Android разработку, возник одиносновной вопрос: а с чего в общем-то начать свой путь? Так как я в этой сфересовершенно не разбиралась, было сложно найти оптимальный вариант.И лишь относительно недавно я наткнулась на Roadmap для Android разработчика,..." }, { "title": "Шаблон статьи, синтаксис Markdown", "url": "/posts/post-template/", "categories": "Markdown, Template", "tags": "template, typography, markdown", "date": "2020-05-14 16:20:00 +0800", "snippet": "Данная статья добавлена в качестве шаблона, который упростит добавлениеновых статей. Ну и чтобы визуально отобразить возможности Markdown, так какя впервые с ним работаю и еще не привыкла к его синтаксису.Создание новой статьиДобавить новый файл в папку _post с названием в формате YYYY-MM-DD-some..." } ]
