<commit_before># Stroom Quick-Start Tutorial
In this quick-start guide you will learn how to use Stroom to get from [this CSV](./resources/mock_stroom_data.csv), which looks like this:

```
id,guid,from_ip,to_ip,application
1,10990cde-1084-4006-aaf3-7fe52b62ce06,192.168.3.11,172.16.58.3,Tres-Zap
2,633aa1a8-04ff-442d-ad9a-03ce9166a63a,172.16.17.32,172.16.31.10,Sub-Ex
...
```

> **Note:** The data used in _mock_stroom_data.csv_ is randomly generated and any association with any real world IP address or name is entirely coincidental.

To this XML:

```xml
<?xml version="1.1" encoding="UTF-8"?>
<Events xmlns:stroom="stroom" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <Event>
      <Id>1</Id>
      <Guid>10990cde-1084-4006-aaf3-7fe52b62ce06</Guid>
      <FromIp>192.168.3.11</FromIp>
      <ToIp>172.16.58.3</ToIp>
      <Application>Tres-Zap</Application>
   </Event>
   <Event>
      <Id>2</Id>
      <Guid>633aa1a8-04ff-442d-ad9a-03ce9166a63a</Guid>
      <FromIp>172.16.17.32</FromIp>
      <ToIp>172.16.31.10</ToIp>
      <Application>Sub-Ex</Application>
   </Event>
  ...
```

You will go from a clean vanilla Stroom to having a simple [pipeline](../user-guide/pipelines/README.md) that takes in CSV data and outputs that data transformed into XML. Stroom is a generic and powerful tool for ingesting and processing data: it's flexible because it's generic so if you do want to start processing data we would recommend you follow this tutorial otherwise you'll find yourself struggling.

We're going to do the following:

1. Get and run Stroom
2. Do some quick and easy but necessary config
3. Get some data into Stroom
4. Set up a pipeline

All the things we create here are available as a [content pack](https://github.com/gchq/stroom-content/releases/tag/stroom-101-v1.0), so if you just wanted to see it running you could get there quite easily.

## Getting and Running Stroom

There are several options to get Stroom running and by far the quickest and easiest is to follow the first option of running the pre-built Docker Hub image of Stroom.

> If you're new to [Docker](https://www.docker.com/what-docker) then you might want to follow their [getting started guide](https://www.docker.com/products/docker) first.

Running Stroom options:

* [Run using a Docker Hub image](../dev-guide/docker.md#using-a-pre-built-docker-hub-image)
* [Run using a release](../install-guide/stroom-app-install.md)
* From source you can:
  * [Build and run from IntelliJ](../dev-guide/stroom-in-an-ide.md)
  * [Build and run using Docker](../dev-guide/docker.md#building-a-docker-image-from-a-stroom-distribution)

## Basic configuration

### Somewhere for Stroom to store data

In Stroom a [_volume_](../user-guide/volumes.md) is a place to store data. When you first load up Stroom there won't be any volumes configured so that's the first thing to do. If you don't then when you try and upload data to a [feed](../user-guide/feeds.md) (the next thing we'll do) it won't have anywhere to put the data.
<commit_msg>Improve ordering of text<commit_after># Stroom Quick-Start Tutorial
In this quick-start guide you will learn how to use Stroom to get from [this CSV](./resources/mock_stroom_data.csv), which looks like this:

```
id,guid,from_ip,to_ip,application
1,10990cde-1084-4006-aaf3-7fe52b62ce06,192.168.3.11,172.16.58.3,Tres-Zap
2,633aa1a8-04ff-442d-ad9a-03ce9166a63a,172.16.17.32,172.16.31.10,Sub-Ex
...
```
To this XML:

```xml
<?xml version="1.1" encoding="UTF-8"?>
<Events xmlns:stroom="stroom" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <Event>
      <Id>1</Id>
      <Guid>10990cde-1084-4006-aaf3-7fe52b62ce06</Guid>
      <FromIp>192.168.3.11</FromIp>
      <ToIp>172.16.58.3</ToIp>
      <Application>Tres-Zap</Application>
   </Event>
   <Event>
      <Id>2</Id>
      <Guid>633aa1a8-04ff-442d-ad9a-03ce9166a63a</Guid>
      <FromIp>172.16.17.32</FromIp>
      <ToIp>172.16.31.10</ToIp>
      <Application>Sub-Ex</Application>
   </Event>
  ...
```

You will go from a clean vanilla Stroom to having a simple [pipeline](../user-guide/pipelines/README.md) that takes in CSV data and outputs that data transformed into XML. Stroom is a generic and powerful tool for ingesting and processing data: it's flexible because it's generic so if you do want to start processing data we would recommend you follow this tutorial otherwise you'll find yourself struggling.

We're going to do the following:

1. Get and run Stroom
2. Do some quick and easy but necessary config
3. Get some data into Stroom
4. Set up a pipeline

All the things we create here are available as a [content pack](https://github.com/gchq/stroom-content/releases/tag/stroom-101-v1.0), so if you just wanted to see it running you could get there quite easily.

> **Note:** The CSV data used in _mock_stroom_data.csv_ (linked to above) is randomly generated and any association with any real world IP address or name is entirely coincidental.

## Getting and Running Stroom

There are several options to get Stroom running and by far the quickest and easiest is to follow the first option of running the pre-built Docker Hub image of Stroom.

> If you're new to [Docker](https://www.docker.com/what-docker) then you might want to follow their [getting started guide](https://www.docker.com/products/docker) first.

Running Stroom options:

* [Run using a Docker Hub image](../dev-guide/docker.md#using-a-pre-built-docker-hub-image)
* [Run using a release](../install-guide/stroom-app-install.md)
* From source you can:
  * [Build and run from IntelliJ](../dev-guide/stroom-in-an-ide.md)
  * [Build and run using Docker](../dev-guide/docker.md#building-a-docker-image-from-a-stroom-distribution)

## Basic configuration

### Somewhere for Stroom to store data

In Stroom a [_volume_](../user-guide/volumes.md) is a place to store data. When you first load up Stroom there won't be any volumes configured so that's the first thing to do. If you don't then when you try and upload data to a [feed](../user-guide/feeds.md) (the next thing we'll do) it won't have anywhere to put the data.

{'fraction_non_alphanumeric': 0.11917268548916612, 'fraction_numerical': 0.056139198949441894, 'mean_word_length': 3.878302642113691, 'pattern_counts': {'":': 0, '<': 55, '<?xml version=': 2, '>': 59, 'https://': 6, 'lorem ipsum': 0, 'www.': 6, 'xml': 8}, 'pii_count': 16, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2469030', 'n_tokens_mistral': 2260, 'n_tokens_neox': 2007, 'n_words': 677}