Добавить информационную страницу/оглавление раздела
2. Заполните все поля: введите название страницы, содержание страницы*, и Содержимое. Содержимое 1. 4 — это кнопки навигации по лекции, Вы можете создать кнопку для перехода в начало страницы, на следующую/предыдущую страницу, в конец/начало лекции или закончить лекцию. Нажмите Сохранить страницу.
*Содержание страницы Вы можете импортировать из файла формата *.docx, для этого воспользуйтесь инструкцией Импорт текста из Word в Moodle.
3. Таким же образом добавьте остальные страницы лекции.
- Нет меток
Как использовать макросы в Confluence, чтобы систематизировать и оформить документацию по продукту и процессам?

Привет, Хабр! Меня зовут Таня Дудо, и я уже 6 лет помогаю людям и командам обмениваться знаниями внутри компаний. Для этого использую Confluence. Да-да, ту самую wiki-систему, которую часто называют неудобной и несовременной. Сегодня выступлю ее адвокатом-обозревателем: расскажу про 7 полезных макросов для систематизации и оформления контента и наглядно покажу, как они работают.
Дисклеймер: с марта Atlassian не продают лицензии в Россию напрямую. Но если у вас уже есть, никто не запрещает ей пользоваться. На сайте Atlassian есть развернутая документация по установке Confluence и Jira. Она охватывает практически все аспекты. Вот, например, одна из статей.
В чем проблема с Confluence или почему я решила написать этот текст
Часто вижу в разных компаниях, что документация в Confluence живет своей жизнью: команды оформляют и хранят данные как хотят, никто сильно не погружается в работу этой системы. Из-за этого она кажется неповоротливой, вызывает раздражение и жаркие споры о том, какой инструмент лучше подойдет для накопления и передачи знаний.
Не буду утверждать, что Confluence — самый лучший в мире инструмент для работы с документацией. Все-таки, это дело привычки, вкуса и корпоративных ограничений. Наоборот, в тексте сосредоточусь на прикладных знаниях о том, как ласково приручить этого непростого зверя и покажу, как документация может преобразиться с использованием конкретных макросов.
- недавно начал с ней работать,
- уже использует и ищет способы сделать работу с Confluence более комфортной.
Что такое макросы и зачем они нужны
Макросы — это программные алгоритмы действий, «упакованные» в понятный графический интерфейс. Если проще, это внутренние инструменты Confluence, которые помогают делать документацию понятнее и удобнее.
Чем макросы круче текстовых редакторов?
Базовая комплектация текстового редактора выполняет простые операции по редактированию. Например, там можно выделить текст жирным или курсивом, изменить цвет символов, выровнять столбцы по середине или по краю.
Макросы эти возможности расширяют: интегрируют контент из внешних источников, помогают настроить навигацию внутри большой базы знаний или сформировать единый тон визуального оформления документации.
- форматирование контента,
- интеграция внутреннего контента,
- интеграция внешнего контента.
Их можно называть «группами быстрого улучшения» — они помогут сделать вашу доку читабельнее всего в пару кликов.

Где находятся макросы
Макросы можно добавить в статью в режиме редактирования. Они прячутся в верхней панели инструментов, за кнопкой с названием «Вставить прочий контент».

Самые популярные макросы — например, «Оглавление» и «Галерея» — лежат в выпадающем меню. Больше возможностей скрываются за строчкой «Другие макросы».

В библиотеке макросы рассортированы по группам. В левой части интерфейса можно сразу перейти к нужной группе.

Если подходящего макроса не нашлось, через кнопку «Найти еще макросы…» можно перейти в Atlassian Market и изучить платные и бесплатные дополнения, совместимые с вашей версией Confluence.
Макросы-блоки и макросы-рамки
Макрос может быть самодостаточным и не требовать вставки чего-то (например, текста, изображений или ссылок) внутри себя. В таком случае он выглядят как блок.

Макросы-блоки выполняют сложные операции вроде составления оглавления, интеграции контента и формирования диаграмм.
Если для работы макроса что-то нужно поместить внутрь, он выглядит как рамка.
Представьте: вам нужно спрятать под кат какой-то текст. Тогда можно использовать макрос «Раскрыть»: внутрь рамки помещаем текст, а после сохранения ок окажется внутри раскрывающегося меню.

Режим редактирования. Внутри рамки макроса — текст, который будет в раскрывающемся меню.

После сохранения страница будет выглядеть так.
Внутрь одного макроса-рамки можно помещать сколько угодно других макросов. Главное, чтобы в пирамиде была логика. Так, например, можно сделать пирамиду из раскрывающихся пунктов, или спрятать содержание статьи, если оно слишком объемное. Или добавить макрос форматирования текста.
Возможно, эти тексты тоже вас заинтересуют:
Макросы форматирования: подсказка, предупреждение, примечание и блок кода
- делают важные текстовые вставки заметными,
- задают единый тон визуального оформления,
- позволяют вставить код в статью и подсветить синтаксис.
Пожалуй, самый распространенный пример разноформатного подхода — это выделение подсказки, предупреждения и примечания.
Наверняка вы видели, как в самом начале текста капслоком написано «ВНИМАНИЕ», и после этого идет абзац красного текста. Или подсказка отмечена звездочкой, а пояснение дано внизу страницы курсивом, как в печатных книгах.
Опасность разного оформления в том, что при беглом прочтении такие акценты могут проскользнуть мимо внимания читателя. А еще к ним будет сложно вернуться и придется перечитывать текст заново.
Как использовать
В Confluence нашли изящное решение: унифицировали макросы «Подсказка», «Предупреждение», «Примечание» и «Информация».

Описание этой группы макросов в Confluence.
В режиме редактирования они выглядят как макросы-рамки, внутри которых можно разместить текст.

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

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

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

После добавления макроса информация стала более заметной и читаемой.
Макросы для интеграции внутреннего контента
- создают «зеркало» статьи или ее отрывка в другом пространстве,
- поддерживают автообновление: достаточно внести правки в оригинал, и все интеграции обновятся сами,
- помогают быстро перейти из «зеркала» в оригинальную статью и углубиться в нужный материал.
Выборка — это небольшой отрывок из исходной статьи, а страница — полное «зеркало» всего текста.
Главный профит этого макроса в обновлении: если в исходной статье что-то поменяется, цитата или страница-зеркало изменится вместе с ней. Это намного эффективнее ручного обновления скопипащенного отрывка.

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

Макросы интеграции внешнего контента
- позволяют размещать контент из внешних источников без дополнительных авторизаций,
- можно вставить задачи из Jira и видеть актуальный статус, не переходя в таск трекер,
- взаимодействие с интерактивным виджетом происходит прямо в Confluence.
Самый простой пример такой внешней интеграции — добавление на страницу задач из Jira.
Представьте: проводите встречу, записываете meeting notes в Confluence и по итогам определяете задачи. Как их записать, чтобы исполнители точно знали, что нужно сделать и к какому сроку? Завести их в таск-трекер, а потом привязать к странице с результатами встречи.
Таски добавляются через макрос «Фильтр\проблема Jira» — достаточно ввести код проекта и номер задачи. В Confluence подтянется ее название и актуальный статус.

На этой странице собрана часть задач по созданию кластера Managed Kubernetes. Видно название задачи, ее код в таск-трекере, а также статус в реальном времени. По клику по коду задачи можно перейти в Jira и посмотреть подробности.
Еще один полезный макрос интеграции внешнего контента — «Коннектор виджета». С его помощью на страницу можно добавить любой контент из интернета, будь то видео с YouTube, Google-документ или таблица. Все будет отображаться прямо в Confluence без дополнительных авторизаций.

Например, можно собрать галерею из выступлений коллег. На скриншоте — наша подборка докладов сотрудников Selectel.

Где больше узнать про макросы
У Confluence есть много возможностей для работы с контентом. И этот текст, конечно же, не является исчерпывающим руководством.
Если макросов «базовой комплектации» не хватает, то на помощь придет Atlassian Market. В нем можно выбрать из тысячи решений именно то, которое подойдет под потребности вашего проекта. Среди дополнений есть предложения и самого Atlassian, и сторонних разработчиков, которые делали макросы для себя, а после удачного запуска представили их широкой аудитории.
Больше полезной информации по работе с Confluence можно найти в корпоративном университете Atlassian Univercity или на ютуб-канале Atlassian.
Confluence
Atlassian Confluence is a publishing platform for supporting team collaboration. Confluence has a variety of hosting options which include both free and paid subscription plans.
Confluence Cloud Only
Publishing is currently limited to Confluence Cloud. We do not yet support publishing to Confluence Server or Confluence Data Center.
Quarto provides support for publishing individual documents, as well as projects composed of multiple documents, into Confluence Spaces.




Managing Confluence content with Quarto allows you to author content in Markdown, manage that content with your usual version control tools like Git and GitHub, and leverage Quarto’s tools for including computational output.
The next section, Confluence Publishing Basics, walks through the process of publishing a single page to Confluence, including how to set up your Confluence account in Quarto, and how to specify a destination for your document in your Confluence Space.
Before you use Confluence Publishing for your own project you’ll want to read the remaining sections on this page:
- Publishing Projects describes how to publish a collection of documents, including how your project structure translates to the structure of pages in your Confluence Space.
- Publishing Workflow describes the model for making updates to Confluence pages published from Quarto, including the page permissions that are set when you publish from Quarto.
- Authoring for Confluence describes some of the differences between authoring for Confluence and authoring for a Quarto website.
- Publishing Settings covers how to manage your publishing settings.
Be Careful with Sensitive or Confidential Content
Publishing Quarto documents to a public Confluence space will make the content of those documents public. It is your responsibility to understand the permissions of your Confluence Space and verify your publishing destination to protect against any sensitive or confidential content from being made publicly available.
Confluence Publishing Basics
To demonstrate the process of publishing to Confluence, we’ll take a single document, confluence-demo.qmd , and publish it as a page to a Confluence space. Here’s the contents of confluence-demo.qmd :
--- title: Confluence Demo format: confluence-html --- ## Overview Write your content in Quarto documents and publish to Confluence.
Notice that the format is set to confluence-html in the document YAML. This allows the local preview of the document to mimic the eventual appearance on Confluence. You can preview your document locally as you would any other Quarto document, by using the Render command in VS Code and RStudio, or by using quarto preview from the command line:
Terminal
quarto preview confluence-demo.qmd
The result of previewing confluence-demo.qmd locally is shown below:

The preview attempts to provide an accurate idea of how your content will look. However, some items in the preview are merely placeholders, like the publishing date, author, and read time in the header. When the document is published to Confluence, these items will be generated by Confluence.
To publish a document to Confluence use quarto publish confluence followed by the file name:
Terminal
quarto publish confluence confluence-demo.qmd
Unless you’ve published to Confluence before, you’ll be prompted to set up an account and select a destination for your page.
Setting Up Your Account
When you publish to Confluence for the first time, you’ll be prompted to set up a Confluence account in Quarto. To prepare, log in to Confluence, and navigate to the space, or page within a space, which you wish to publish to.
You’ll first be prompted for your Confluence Domain. This is the first part of the URL to the Confluence page you wish to publish to. For example:
Terminal
? Confluence Domain: › ❯ e.g. https://mydomain.atlassian.net/
Next, you’ll be asked to enter the Email Address for the account used in this Confluence Domain (if you are unsure, look at your account profile on Confluence):
Terminal
? Confluence Account Email: ›
Finally, you’ll be asked for an API Token:
Terminal
? Confluence API Token: › ❯ Create an API token at https://id.atlassian.com/manage/api-tokens
Confluence API Tokens are specific to your account. You’ll need to create a token, copy, and then paste it into this prompt. For more information on Access Tokens please see the Confluence Documentation on API Tokens.
Quarto saves this account information (domain, email and token) so it can be used for future calls to quarto publish confluence . The final prompt will ask you to select a destination for your page.
Selecting a Destination
Pages in Confluence are arranged in a hierarchy: every page has a parent. When you publish from Quarto to Confluence you’ll be asked to specify the parent for your page by providing its URL:
Terminal
? Space or Parent Page URL: › ❯ Browse in Confluence to the space or parent, then copy the URL
If you want your page to be at the top level of your space, specify the space itself, e.g.:
https://domain.atlassian.net/wiki/spaces/ABBR
Otherwise, specify the URL for the parent page, e.g.:
https://domain.atlassian.net/wiki/spaces/ABBR/pages/123456
Once the destination is specified, Quarto will render the page for publishing, publish it to Confluence, and open a browser to view the published page.
An example of the published version of confluence-demo.qmd is shown below:

In the sidebar navigation this page is listed at the top level under Pages because the destination was set to the space URL.
Publishing Projects
To publish a collection of documents, organize your documents in a Quarto project, and use the confluence project type. Here’s a minimal _quarto.yml file for a Confluence project:
_quarto.yml
project: type: confluence
Include this file in a project directory, then arrange your .qmd or .ipynb documents into whatever hierarchy you want to use for publishing. For example:
_quarto.yml index.qmd team.qmd projects/ planning.qmd retrospectives.qmd
Alternatively, to get started with a template project in a new directory, use quarto create :
Terminal
quarto create project confluence
As with documents, you can preview your project using the Render command in VS Code and RStudio, or by using quarto preview from the command line:
Terminal
quarto preview
The project preview produces an HTML website with navigation automatically added to the sidebar. This navigation is for convenience, the navigation for the published pages will be handled internally by Confluence.
The project preview attempts to style your content as it will appear on Confluence, however, you may notice some differences in appearance.
To publish your project run quarto publish confluence from your project folder:
Terminal
quarto publish confluence
You’ll be walked through the same steps as publishing a single document, setting up an account, if needed, and selecting a destination for your project on Confluence, before publishing your project to Confluence.
Project Structure
The hierarchy of documents inside folders in your project will be respected in the publishing process. Confluence’s concept of folders is that pages can have children, so your folders will be represented by pages in Confluence.
When a project is published, a single page is created in Confluence to hold it. Documents at the top level of the project are published as pages nested under this project page. Folders inside the project are represented by a page, and any documents (or other folders) inside the folder are represented as pages nested under the folder page.
As an example, consider the following project structure:
example-project/ ├── _quarto.yml ├── project-roadmap.qmd ├── reports-folder │ ├── 2023-01.qmd │ └── 2023-03.qmd └── team-members.qmd
The Confluence structure resulting from publishing this project to the top level of the space is shown below:

The titles used in the Confluence sidebar navigation are taken from the page and project title, as specified in the document YAML and _quarto.yml respectively, and generated from the folder name for folders. Quarto may add some additional characters to meet the Confluences requirement that every page in a space has a unique name.
index.qmd
Pages in Confluence that represent folders will have no content unless an index.qmd is found inside the folder. If an index.qmd file exists its content will populate the folder page. For example, consider the following index.qmd :
index.qmd
--- title: Reports --- Monthly reports on project progress
Adding this to the folder reports-folder and re-publishing the site, changes the name of the page representing this folder to “Reports” and adds this contents to the page.

Publishing Workflow
In Confluence, many people are able to make direct edits to pages. However, managing your content from Quarto requires a shift in perspective: edits to pages are made only in the Quarto project, and only one account should publish those changes to Confluence.
Publishing to Confluence is a one-way street: there is no way to bring back content edits from Confluence to your Quarto project. Edits that are made on Confluence will be overwritten next time the page is published from Quarto. Updating a page requires editing the document in Quarto, and rerunning:
Terminal
quarto publish confluence
To help avoid a situation where someone inadvertently edits a page being managed in Quarto, the permissions for pages are set when you publish so everyone with access to the space can view the page, but only you, the publisher, can edit the page.

Permission to edit the page includes publishing updates, so any updates to a page need to be published from the same account as the original publish.
Publishing without Control over Permissions
We attempt to detect if you are publishing to a destination where you do not have control over page permissions and you’ll receive a warning. You may proceed with the publish, but any page you publish can be both viewed and edited by anyone with access to the space.
If you delete a page on Confluence, and republish it from Quarto, you’ll see the error:
ERROR: API Error: 404 - Not Found
This occurs because Quarto stores and reuses the location of your page on Confluence in _publish.yml . If the page is deleted on Confluence, this location will no longer exist. To solve the problem, delete the corresponding entry in _publish.yml , and publish again. You’ll then be prompted to set the destination. You can read more about _publish.yml in the Publishing Settings section.
Authoring
Authoring for Confluence is very similar to authoring HTML documents and Quarto webpages. However, you should be aware of some key limitations as well as some features specific to Confluence publishing.
Content Limitations
The confluence-html format supports nearly all of the standard Quarto markdown content types, including tables, callouts, and cross references.
However, there is currently no support for Citations, Videos, Diagrams, Tabsets, or Equations. In the future, we may add these features if there is a Confluence equivalent that can support the functionality.
Links
When creating links between pages in your Confluence Project, you can provide the source file as the link target (rather than the path to the Confluence page). You can also add hash identifiers ( # ) to the source file if you want to link to a particular section in the document. For example:
[about](about.qmd) [about](about.qmd#section)
Raw Confluence Blocks
Raw Confluence blocks allow you to include content that should pass through Quarto unchanged and be interpreted directly by Confluence. For example, Confluence’s Storage Format includes specific tags for a task list. To include a Confluence task list in your document, use these tags inside a raw Confluence block:
``` incomplete task list item ```
When published to Confluence this results in the following list:

Website Limitations
Confluence projects are a special type of website that don’t support the traditional Website features like Listings, Themes and Navigation (as these things are taken care of internally by Confluence).
Confluence Limitations
As discussed in Publishing Workflow edits to page content made in Confluence are overwritten when content is published from Quarto. This is also the case for any inline comments made on Confluence. Page level emojis and page level comments are preserved across publishes.
Publishing Settings
Once you have published to Confluence, you might be interested in understanding how to manage your publishing and account settings.
_publish.yml
The _publish.yml file is used to specify the publishing destination. This file is automatically created (or updated) whenever you execute the quarto publish command, and is located within the project or document directory.
The service, id, and URL of the published content is specified in _publish.yml . For example:
- source: project confluence: - id: "5f3abafe-68f9-4c1d-835b-9d668b892001" url: "https://myteam.atlassian.net/wiki/spaces/TEAMSPACE/pages/123456/Plan"
The next time you publish the same document or project, the _publish.yml file will be used to provide account and space information so that you are not prompted for this information again.
If you have an existing Confluence Space that you want to publish to, you should manually create a _publish.yml file that looks like the example above, but with the appropriate id and url values for your document.
Account information is not stored in _publish.yml , so it is suitable for checking in to version control and being shared by multiple publishers.
Account Management
You can list and remove saved Confluence accounts using the quarto publish accounts command:
$ quarto publish accounts ? Manage Publishing Accounts ❯ ✔ Confluence: jj@posit.co ✔ Netlify: jj@posit.co ❯ Use the arrow keys and spacebar to specify accounts you would like to remove. Press Enter to confirm the list of accounts you wish to remain available.
How to use Confluence code blocks
Adding a code block or code snippet in Confluence is relatively quick and easy. When writing technical documentation, it’s helpful to include code examples to provide meaningful context to the reader.
For example, you might want to show how a global variable is set and used throughout a particular flow in your code. Inserting a code block is the best way to illustrate the what, how, and why of doing that.
There are several ways to add code to your Confluence docs. This is part of our series of articles about Atlassian Confluence.
What are Confluence macros?
Confluence macros are extensions to the native functionality of Confluence pages. When editing a document, macros are available via the “+” menu in the toolbar. Popular built-in macros include Attachments, Google Drive, and the Table of Contents macro.
Macros can be written using HTML, proprietary XML tags, or the Java-based template engine, Apache Velocity. They function like small applications that can accept parameters and change functionality based on those parameters.
Macros can be repackaged into plugins, which include code bundles, resources, and configuration files that can either create new functionality or manipulate existing functionality within Confluence.
What is the Confluence code block macro?
The code block macro allows you to write or paste code directly into your Confluence pages. Pages published with code snippets have the look and feel of a native IDE, including proper syntax highlighting, indentation, and presentation elements that can be customized with CSS.
Code blocks are a great way to provide context to readers and demonstrate using either hypothetical or real-world code fragments. Developers learn best when they can glean context from code and implementation details.
We believe context is king and that code is as much about the sum of the parts as it is about the parts themselves. Pairing code directly with the documentation provides understanding beyond variables and classes, which is why the code block macro is a Confluence feature worth talking about.
The code block macro goes beyond source code. It can also be used to display command line interface actions and detailed logs from applications and services. Various parameters can be used with the code block macro, including selecting the appropriate programming language, showing line numbers, and more.
Writing user macros
Confluence can be extended with custom user macros beyond those provided by Atlassian. Macros allow you to manipulate the formatting of your docs and add custom functionality. User macros are built with custom code directly within the Confluence web app. They can be written and managed only by users with administrative privileges.
User macro access can be scoped for individual users or shared across the entire platform. They have a standardized template syntax to make them easy to use once they’re implemented.
How to insert the code block macro in your page
Confluence’s page editor makes it easy to insert various types of content blocks, including a code snippet . Once you are in the edit mode for a page, you can click the “+” icon in the toolbar and select “Code snippet.”
You can also use a forward slash shortcut (or “slash command”) to trigger the in-editor context menu. Simply type: /code in your doc and you’ll see the “Code snippet” option pop up.
The code block macro can also be added with wiki markup syntax, like the following:
code-coupled-documentation: “Yes, please!”
Select the programming language for syntax highlighting
Once you’ve added the snippet, you’ll be presented with a code editor directly in your Confluence document, which includes line numbers and a dropdown menu allowing you to select a programming language for appropriate syntax highlighting. You can see all the languages available in the official Confluence documentation.
Adjust the visual width of the code snippet editor
In the upper-right corner of the code snippet editor is an icon that lets you widen the visual editor. Confluence calls this the “Go wide” button. Clicking it gives you the option of the default text column width, a slightly expanded view, or a full-page width. Obviously, which view you prefer is a matter of preference and has no bearing on the function of the code snippet.
Add code to the snippet editor
Add code in the snippet editor by typing or pasting. It’s important to note that you won’t see syntax highlighting take effect until after you’ve clicked Publish or Update. The published reading version of the page will have the appropriate syntax coloring and highlighting.
Advanced: customize the appearance of code snippets with CSS
Confluence allows developers and administrators to customize the look and feel of the application and the pages you create. You can update the CSS stylesheets and make your pages and code snippets look exactly how you like. Here’s the official documentation on giving Confluence a makeover. (Note: you might need to be a Confluence administrator to access this function, depending on how your Confluence instance is configured.)
You can also try adding custom CSS to the page header via the “Space Settings” gear icon sidebar. Navigate to the “Look and Feel” tab and then to the “Header and Footer” tab.
How to add code blocks with Swimm
We have written extensively about code-coupled documentation and have built an entire application ecosystem to help developers include live code – using code snippets – in their documentation.
Confluence’s code block and editor are great tools, but they contribute to the problem of docs being outdated as soon as they’re published.
Swimm has a much better way of including living code in docs and connecting the documentation directly with the code. Use our slash commands to include code snippets directly from the code repository itself. No “copypasta.” Just highlight the code you want to include and start writing a doc.
We swear it’s really that easy!
Bottom line
Swimm integrates directly with popular IDE plugins, including VS Code and IntelliJ, so developers know when docs are available for the code they’re reading or changing. We integrate directly with CI/CD pipelines, and our AI/ML engine can notify developers via Slack and Swimm’s GitHub app of critical documentation-related updates.
Additionally, Swimm docs live alongside the code in the code repository. Swimm makes sure the docs are updated automatically when the code changes.
We call this Continuous Documentation, an innovation that enables dev teams to easily create documentation that’s always up to date and easy to find the moment you need it. It’s designed to meet the very real documentation challenges and needs of dev around the world.
Want to give it a try? Sign up for free to see what code-coupled, always up-to-date documentation looks like.
