Extend the escape and quoting rules

Extend the escape and quoting rules

[[shell]]
= Shell

[partintro]
--
This section covers the options for starting the shell and more advanced functionality relating to how the shell handles white spaces, quotes, and interpretation of SpEL expressions.
The introductory chapters to the
<<spring-cloud-dataflow-stream-intro, Stream DSL>> and <<spring-cloud-dataflow-composed-tasks, Composed Task DSL>> are good places to start for the most common usage of shell commands.
--

[[shell-options]]
== Shell Options
The shell is built upon the link:https://projects.spring.io/spring-shell/[Spring Shell] project.
There are command line options generic to Spring Shell and some specific to Data Flow.
The shell takes the following command line options

[source,bash,options="nowrap",subs=attributes]
----
unix:>java -jar spring-cloud-dataflow-shell-{project-version}.jar --help
Data Flow Options:
  --dataflow.uri=<uri>                              Address of the Data Flow Server [default: http://localhost:9393].
  --dataflow.username=<USER>                        Username of the Data Flow Server [no default].
  --dataflow.password=<PASSWORD>                    Password of the Data Flow Server [no default].
  --dataflow.credentials-provider-command=<COMMAND> Executes an external command which must return an
                                                    OAuth Bearer Token (Access Token prefixed with 'Bearer '),
                                                    e.g. 'Bearer 12345'), [no default].
  --dataflow.skip-ssl-validation=<true|false>       Accept any SSL certificate (even self-signed) [default: no].
  --dataflow.proxy.uri=<PROXY-URI>                  Address of an optional proxy server to use [no default].
  --dataflow.proxy.username=<PROXY-USERNAME>        Username of the proxy server (if required by proxy server) [no default].
  --dataflow.proxy.password=<PROXY-PASSWORD>        Password of the proxy server (if required by proxy server) [no default].
  --spring.shell.historySize=<SIZE>                 Default size of the shell log file [default: 3000].
  --spring.shell.commandFile=<FILE>                 Data Flow Shell executes commands read from the file(s) and then exits.
  --help                                            This message.
----

The `spring.shell.commandFile` option can be used to point to an existing file that contains
all the shell commands to deploy one or many related streams and tasks.  This is useful when creating some scripts to
help automate deployment.

Also, the following shell command helps to modularize a complex script into multiple independent files:

`dataflow:>script --file <YOUR_AWESOME_SCRIPT>`

[[shell-commands]]
== Listing Available Commands

Typing `help` at the command prompt gives a listing of all available commands.
Most of the commands are for Data Flow functionality, but a few are general purpose.
[source,bash]
----
! - Allows execution of operating system (OS) commands
clear - Clears the console
cls - Clears the console
date - Displays the local date and time
exit - Exits the shell
http get - Make GET request to http endpoint
http post - POST data to http endpoint
quit - Exits the shell
system properties - Shows the shell's properties
version - Displays shell version
----

Adding the name of the command to `help` shows additional information on how to invoke the command.
[source,bash]
----
dataflow:>help stream create
Keyword:                   stream create
Description:               Create a new stream definition
 Keyword:                  ** default **
 Keyword:                  name
   Help:                   the name to give to the stream
   Mandatory:              true
   Default if specified:   '__NULL__'
   Default if unspecified: '__NULL__'

 Keyword:                  definition
   Help:                   a stream definition, using the DSL (e.g. "http --port=9000 | hdfs")
   Mandatory:              true
   Default if specified:   '__NULL__'
   Default if unspecified: '__NULL__'

 Keyword:                  deploy
   Help:                   whether to deploy the stream immediately
   Mandatory:              false
   Default if specified:   'true'
   Default if unspecified: 'false'
----

[[shell-tab-completion]]
== Tab Completion

The shell command options can be completed in the shell by pressing the `TAB` key after the leading `--`. For example, pressing `TAB` after `stream create --` results in
```
dataflow:>stream create --
stream create --definition    stream create --name
```

If you type `--de` and then hit tab, `--definition` will be expanded.

Tab completion is also available inside the stream or composed task DSL expression for application or task properties.  You can also use `TAB` to get hints in a stream DSL expression for what available sources, processors, or sinks can be used.

[[shell-white-space]]
== White Space and Quoting Rules

It is only necessary to quote parameter values if they contain spaces or the `|` character. The following example passes a SpEL expression (which is applied to any data it encounters) to a transform processor:

`transform --expression='new StringBuilder(payload).reverse()'`

If the parameter value needs to embed a single quote, use two single quotes, as follows:

[source]
// Query is: Select * from /Customers where name='Smith'
scan --query='Select * from /Customers where name=''Smith'''

[[dsl-quotes-escaping]]
=== Quotes and Escaping

There is a Spring Shell-based client that talks to the Data Flow Server and is responsible for *parsing* the DSL.
In turn, applications may have applications properties that rely on embedded languages, such as the *Spring Expression Language*.

The shell, Data Flow DSL parser, and SpEL have rules about how they handle quotes and how syntax escaping works.
When combined together, confusion may arise.
This section explains the rules that apply and provides examples of the most complicated situations you may encounter when all three components are involved.

[NOTE]
.It's not always that complicated
====
If you do not use the Data Flow shell (for example, you use the REST API directly) or if application properties are not SpEL expressions, then the escaping rules are simpler.
====

==== Shell rules
Arguably, the most complex component when it comes to quotes is the shell. The rules can be laid out quite simply, though:

* A shell command is made of keys (`--something`) and corresponding values. There is a special, keyless mapping, though, which is described later.
* A value cannot normally contain spaces, as space is the default delimiter for commands.
* Spaces can be added though, by surrounding the value with quotes (either single (`'`) or double (`"`) quotes).
* Values passed inside deployment properties (e.g. `deployment <stream-name> --properties " ..."`) should not be quoted again.
* If surrounded with quotes, a value can embed a literal quote of the same kind by prefixing it with a backslash (`\`).
* Other escapes are available, such as `\t`, `\n`, `\r`, `\f` and unicode escapes of the form `\uxxxx`.
* The keyless mapping is handled in a special way such that it does not need quoting to contain spaces.

For example, the shell supports the `!` command to execute native shell commands. The `!` accepts a single keyless argument. This is why the following works:
----
dataflow:>! rm something
----
The argument here is the whole `rm something` string, which is passed as is to the underlying shell.

As another example, the following commands are strictly equivalent, and the argument value is `something` (without the quotes):
----
dataflow:>stream destroy something
dataflow:>stream destroy --name something
dataflow:>stream destroy "something"
dataflow:>stream destroy --name "something"
----

==== Property files rules
Rules are relaxed when loading the properties from files.
* The special characters used in property files (both Java and YAML) needs to be escaped. For example `\` should be replaced  by `\\`, '\t` by `\\t` and so forth.
* For Java property files (`--propertiesFile` <FILE_PATH>.properties) the property values should not be surrounded by quotes! It is not needed even if they contain spaces.
----
filter.expression=payload > 5
----
* For YAML property files (`--propertiesFile` <FILE_PATH>.yaml), though, the values need to be surrounded by double quotes.
----
app:
    filter:
        filter:
            expression: "payload > 5"
----

==== DSL Parsing Rules
At the parser level (that is, inside the body of a stream or task definition) the rules are as follows:

* Option values are normally parsed until the first space character.
* They can be made of literal strings, though, surrounded by single or double quotes.
* To embed such a quote, use two consecutive quotes of the desired kind.

As such, the values of the `--expression` option to the filter application are semantically equivalent in the following examples:
----
filter --expression=payload>5
filter --expression="payload>5"
filter --expression='payload>5'
filter --expression='payload > 5'
----

Arguably, the last one is more readable. It is made possible thanks to the surrounding quotes. The actual expression is `payload > 5` (without quotes).

Now, imagine that we want to test against string messages. If we want to compare the payload to the SpEL literal string, `"something"`, we could use the following:
----
filter --expression=payload=='something'           <1>
filter --expression='payload == ''something'''     <2>
filter --expression='payload == "something"'       <3>
----
<1> This works because there are no spaces. It is not very legible, though.
<2> This uses single quotes to protect the whole argument. Hence, the actual single quotes need to be doubled.
<3> SpEL recognizes String literals with either single or double quotes, so this last method is arguably the most readable.

Please note that the preceding examples are to be considered outside of the shell (for example, when calling the REST API directly).
When entered inside the shell, chances are that the whole stream definition is itself inside double quotes, which would need to be escaped. The whole example then becomes the following:
----
dataflow:>stream create something --definition "http | filter --expression=payload='something' | log"

dataflow:>stream create something --definition "http | filter --expression='payload == ''something''' | log"

dataflow:>stream create something --definition "http | filter --expression='payload == \"something\"' | log"
----

==== SpEL Syntax and SpEL Literals
The last piece of the puzzle is about SpEL expressions.
Many applications accept options that are to be interpreted as SpEL expressions, and, as seen above, String literals are handled in a special way there, too. The rules are as follows:

* Literals can be enclosed in either single or double quotes.
* Quotes need to be doubled to embed a literal quote. Single quotes inside double quotes need no special treatment, and the reverse is also true.

As a last example, assume you want to use the link:${scs-app-starters-docs}/spring-cloud-stream-modules-processors.html#spring-clound-stream-modules-transform-processor[transform processor].
This processor accepts an `expression` option which is a SpEL expression. It is to be evaluated against the incoming message, with a default of `payload` (which forwards the message payload untouched).

It is important to understand that the following statements are equivalent:
----
transform --expression=payload
transform --expression='payload'
----

However, they are different from the following (and variations upon them):
----
transform --expression="'payload'"
transform --expression='''payload'''
----

The first series evaluates to the message payload, while the latter examples evaluate to the literal string, `payload`, (again, without quotes).

==== Putting It All Together
As a last, complete example, consider how one could force the transformation of all messages to the string literal, `hello world`, by creating a stream in the context of the Data Flow shell:
// asciidoctor note: callouts don't work here, they mess up the TOC for some reason
----
dataflow:>stream create something --definition "http | transform --expression='''hello world''' | log" <1>

dataflow:>stream create something --definition "http | transform --expression='\"hello world\"' | log" <2>

dataflow:>stream create something --definition "http | transform --expression=\"'hello world'\" | log" <2>
----
<1> In the first line, there are single quotes around the string (at the Data Flow parser level), but they need to be doubled because they are inside a string literal (started by the first single quote after the equals sign).
<2> The second and third lines, use single and double quotes respectively to encompass the whole string at the Data Flow parser level. Consequently, the other kind of quote can be used inside the string. The whole thing is inside the `--definition` argument to the shell, though, which uses double quotes. Consequently, double quotes are escaped (at the shell level)

[[shell]]
= Shell

[partintro]
--
This section covers the options for starting the shell and more advanced functionality relating to how the shell handles white spaces, quotes, and interpretation of SpEL expressions.
The introductory chapters to the
<<spring-cloud-dataflow-stream-intro, Stream DSL>> and <<spring-cloud-dataflow-composed-tasks, Composed Task DSL>> are good places to start for the most common usage of shell commands.
--

[[shell-options]]
== Shell Options
The shell is built upon the link:https://projects.spring.io/spring-shell/[Spring Shell] project.
There are command line options generic to Spring Shell and some specific to Data Flow.
The shell takes the following command line options

[source,bash,options="nowrap",subs=attributes]
----
unix:>java -jar spring-cloud-dataflow-shell-{project-version}.jar --help
Data Flow Options:
  --dataflow.uri=<uri>                              Address of the Data Flow Server [default: http://localhost:9393].
  --dataflow.username=<USER>                        Username of the Data Flow Server [no default].
  --dataflow.password=<PASSWORD>                    Password of the Data Flow Server [no default].
  --dataflow.credentials-provider-command=<COMMAND> Executes an external command which must return an
                                                    OAuth Bearer Token (Access Token prefixed with 'Bearer '),
                                                    e.g. 'Bearer 12345'), [no default].
  --dataflow.skip-ssl-validation=<true|false>       Accept any SSL certificate (even self-signed) [default: no].
  --dataflow.proxy.uri=<PROXY-URI>                  Address of an optional proxy server to use [no default].
  --dataflow.proxy.username=<PROXY-USERNAME>        Username of the proxy server (if required by proxy server) [no default].
  --dataflow.proxy.password=<PROXY-PASSWORD>        Password of the proxy server (if required by proxy server) [no default].
  --spring.shell.historySize=<SIZE>                 Default size of the shell log file [default: 3000].
  --spring.shell.commandFile=<FILE>                 Data Flow Shell executes commands read from the file(s) and then exits.
  --help                                            This message.
----

The `spring.shell.commandFile` option can be used to point to an existing file that contains
all the shell commands to deploy one or many related streams and tasks.  This is useful when creating some scripts to
help automate deployment.

Also, the following shell command helps to modularize a complex script into multiple independent files:

`dataflow:>script --file <YOUR_AWESOME_SCRIPT>`

[[shell-commands]]
== Listing Available Commands

Typing `help` at the command prompt gives a listing of all available commands.
Most of the commands are for Data Flow functionality, but a few are general purpose.
[source,bash]
----
! - Allows execution of operating system (OS) commands
clear - Clears the console
cls - Clears the console
date - Displays the local date and time
exit - Exits the shell
http get - Make GET request to http endpoint
http post - POST data to http endpoint
quit - Exits the shell
system properties - Shows the shell's properties
version - Displays shell version
----

Adding the name of the command to `help` shows additional information on how to invoke the command.
[source,bash]
----
dataflow:>help stream create
Keyword:                   stream create
Description:               Create a new stream definition
 Keyword:                  ** default **
 Keyword:                  name
   Help:                   the name to give to the stream
   Mandatory:              true
   Default if specified:   '__NULL__'
   Default if unspecified: '__NULL__'

 Keyword:                  definition
   Help:                   a stream definition, using the DSL (e.g. "http --port=9000 | hdfs")
   Mandatory:              true
   Default if specified:   '__NULL__'
   Default if unspecified: '__NULL__'

 Keyword:                  deploy
   Help:                   whether to deploy the stream immediately
   Mandatory:              false
   Default if specified:   'true'
   Default if unspecified: 'false'
----

[[shell-tab-completion]]
== Tab Completion

The shell command options can be completed in the shell by pressing the `TAB` key after the leading `--`. For example, pressing `TAB` after `stream create --` results in
```
dataflow:>stream create --
stream create --definition    stream create --name
```

If you type `--de` and then hit tab, `--definition` will be expanded.

Tab completion is also available inside the stream or composed task DSL expression for application or task properties.  You can also use `TAB` to get hints in a stream DSL expression for what available sources, processors, or sinks can be used.

[[shell-white-space]]
== White Space and Quoting Rules

It is only necessary to quote parameter values if they contain spaces or the `|` character. The following example passes a SpEL expression (which is applied to any data it encounters) to a transform processor:

`transform --expression='new StringBuilder(payload).reverse()'`

If the parameter value needs to embed a single quote, use two single quotes, as follows:

[source]
// Query is: Select * from /Customers where name='Smith'
scan --query='Select * from /Customers where name=''Smith'''

[[dsl-quotes-escaping]]
=== Quotes and Escaping

There is a Spring Shell-based client that talks to the Data Flow Server and is responsible for *parsing* the DSL.
In turn, applications may have applications properties that rely on embedded languages, such as the *Spring Expression Language*.

The shell, Data Flow DSL parser, and SpEL have rules about how they handle quotes and how syntax escaping works.
When combined together, confusion may arise.
This section explains the rules that apply and provides examples of the most complicated situations you may encounter when all three components are involved.

[NOTE]
.It's not always that complicated
====
If you do not use the Data Flow shell (for example, you use the REST API directly) or if application properties are not SpEL expressions, then the escaping rules are simpler.
====

==== Shell rules
Arguably, the most complex component when it comes to quotes is the shell. The rules can be laid out quite simply, though:

* A shell command is made of keys (`--something`) and corresponding values. There is a special, keyless mapping, though, which is described later.
* A value cannot normally contain spaces, as space is the default delimiter for commands.
* Spaces can be added though, by surrounding the value with quotes (either single (`'`) or double (`"`) quotes).
* If surrounded with quotes, a value can embed a literal quote of the same kind by prefixing it with a backslash (`\`).
* Other escapes are available, such as `\t`, `\n`, `\r`, `\f` and unicode escapes of the form `\uxxxx`.
* The keyless mapping is handled in a special way such that it does not need quoting to contain spaces.

For example, the shell supports the `!` command to execute native shell commands. The `!` accepts a single keyless argument. This is why the following works:
----
dataflow:>! rm something
----
The argument here is the whole `rm something` string, which is passed as is to the underlying shell.

As another example, the following commands are strictly equivalent, and the argument value is `something` (without the quotes):
----
dataflow:>stream destroy something
dataflow:>stream destroy --name something
dataflow:>stream destroy "something"
dataflow:>stream destroy --name "something"
----

==== DSL Parsing Rules
At the parser level (that is, inside the body of a stream or task definition) the rules are as follows:

* Option values are normally parsed until the first space character.
* They can be made of literal strings, though, surrounded by single or double quotes.
* To embed such a quote, use two consecutive quotes of the desired kind.

As such, the values of the `--expression` option to the filter application are semantically equivalent in the following examples:
----
filter --expression=payload>5
filter --expression="payload>5"
filter --expression='payload>5'
filter --expression='payload > 5'
----

Arguably, the last one is more readable. It is made possible thanks to the surrounding quotes. The actual expression is `payload > 5` (without quotes).

Now, imagine that we want to test against string messages. If we want to compare the payload to the SpEL literal string, `"something"`, we could use the following:
----
filter --expression=payload=='something'           <1>
filter --expression='payload == ''something'''     <2>
filter --expression='payload == "something"'       <3>
----
<1> This works because there are no spaces. It is not very legible, though.
<2> This uses single quotes to protect the whole argument. Hence, the actual single quotes need to be doubled.
<3> SpEL recognizes String literals with either single or double quotes, so this last method is arguably the most readable.

Please note that the preceding examples are to be considered outside of the shell (for example, when calling the REST API directly).
When entered inside the shell, chances are that the whole stream definition is itself inside double quotes, which would need to be escaped. The whole example then becomes the following:
----
dataflow:>stream create something --definition "http | filter --expression=payload='something' | log"

dataflow:>stream create something --definition "http | filter --expression='payload == ''something''' | log"

dataflow:>stream create something --definition "http | filter --expression='payload == \"something\"' | log"
----

==== SpEL Syntax and SpEL Literals
The last piece of the puzzle is about SpEL expressions.
Many applications accept options that are to be interpreted as SpEL expressions, and, as seen above, String literals are handled in a special way there, too. The rules are as follows:

* Literals can be enclosed in either single or double quotes.
* Quotes need to be doubled to embed a literal quote. Single quotes inside double quotes need no special treatment, and the reverse is also true.

As a last example, assume you want to use the link:${scs-app-starters-docs}/spring-cloud-stream-modules-processors.html#spring-clound-stream-modules-transform-processor[transform processor].
This processor accepts an `expression` option which is a SpEL expression. It is to be evaluated against the incoming message, with a default of `payload` (which forwards the message payload untouched).

It is important to understand that the following statements are equivalent:
----
transform --expression=payload
transform --expression='payload'
----

However, they are different from the following (and variations upon them):
----
transform --expression="'payload'"
transform --expression='''payload'''
----

The first series evaluates to the message payload, while the latter examples evaluate to the literal string, `payload`, (again, without quotes).

==== Putting It All Together
As a last, complete example, consider how one could force the transformation of all messages to the string literal, `hello world`, by creating a stream in the context of the Data Flow shell:
// asciidoctor note: callouts don't work here, they mess up the TOC for some reason
----
dataflow:>stream create something --definition "http | transform --expression='''hello world''' | log" <1>

dataflow:>stream create something --definition "http | transform --expression='\"hello world\"' | log" <2>

dataflow:>stream create something --definition "http | transform --expression=\"'hello world'\" | log" <2>
----
<1> In the first line, there are single quotes around the string (at the Data Flow parser level), but they need to be doubled because they are inside a string literal (started by the first single quote after the equals sign).
<2> The second and third lines, use single and double quotes respectively to encompass the whole string at the Data Flow parser level. Consequently, the other kind of quote can be used inside the string. The whole thing is inside the `--definition` argument to the shell, though, which uses double quotes. Consequently, double quotes are escaped (at the shell level)


Update why-does-maven-not-download-dependencies.adoc

Fix typo

[[Whydoesmavennotdownloaddependencies-Whydoesmavennotdownloaddependencies]]
= Why does Maven not download dependencies?

Maven uses HTTP to download its dependencies along with the dependencies
of the Maven project (such as Camel).

If you run Maven and it fails to download your required dependencies it's
likely to be caused by your local firewall & HTTP proxy configurations.

See the http://maven.apache.org/guides/mini/guide-proxies.html[Maven documentation for details of how to configure the HTTP proxy].

[[Whydoesmavennotdownloaddependencies-Whydoesmavennotdownloaddependencies]]
= Why does Maven not download dependencies?

Maven uses HTTP to download its dependenices along with the dependencies
of the Maven project (such as Camel).

If you run Maven and it fails to download your required dependencies it's
likely to be caused by your local firewall & HTTP proxy configurations.

See the http://maven.apache.org/guides/mini/guide-proxies.html[Maven documentation for details of how to configure the HTTP proxy].


WMCO - Fixed an incorrect link in the WMCO documentation.

[id="enabling-windows-container-workloads"]
= Enabling Windows container workloads
include::modules/common-attributes.adoc[]
:context: enabling-windows-container-workloads

toc::[]

Before adding Windows workloads to your cluster, you must install the Windows Machine Config Operator (WMCO), which is available in the {product-title} OperatorHub. The WMCO orchestrates the process of deploying and managing Windows workloads on a cluster.

[discrete]
== Prerequisites

* You have access to an {product-title} cluster using an account with `cluster-admin` permissions.

* You have installed the OpenShift CLI (`oc`).

* You have installed your cluster using installer-provisioned infrastructure. Clusters installed with user-provisioned infrastructure are not supported for Windows container workloads.

* You have configured hybrid networking with OVN-Kubernetes for your cluster. This must be completed during the installation of your cluster. For more information, see xref:../networking/ovn_kubernetes_network_provider/configuring-hybrid-networking.adoc#configuring-hybrid-ovnkubernetes[Configuring hybrid networking].

* You are running an {product-title} cluster version 4.6.8 or later.

.Additional resources
* For the comprehensive prerequisites for the Windows Machine Config Operator, see xref:../windows_containers/understanding-windows-container-workloads.adoc#wmco-prerequisites_understanding-windows-container-workloads[Understanding Windows container workloads].

[id="installing-the-wmco"]
== Installing the Windows Machine Config Operator

You can install the Windows Machine Config Operator using either the web console or OpenShift CLI (`oc`).

include::modules/installing-wmco-using-web-console.adoc[leveloffset=+2]

include::modules/installing-wmco-using-cli.adoc[leveloffset=+2]

include::modules/configuring-secret-for-wmco.adoc[leveloffset=+1]

== Additional resources

* xref:../installing/installing_azure/installing-azure-default.adoc#ssh-agent-using_installing-azure-default[Generating a key pair for cluster node SSH access]
* xref:../operators/admin/olm-adding-operators-to-cluster.adoc#olm-adding-operators-to-a-cluster[Adding Operators to a cluster].

[id="enabling-windows-container-workloads"]
= Enabling Windows container workloads
include::modules/common-attributes.adoc[]
:context: enabling-windows-container-workloads

toc::[]

Before adding Windows workloads to your cluster, you must install the Windows Machine Config Operator (WMCO), which is available in the {product-title} OperatorHub. The WMCO orchestrates the process of deploying and managing Windows workloads on a cluster.

[discrete]
== Prerequisites

* You have access to an {product-title} cluster using an account with `cluster-admin` permissions.

* You have installed the OpenShift CLI (`oc`).

* You have installed your cluster using installer-provisioned infrastructure. Clusters installed with user-provisioned infrastructure are not supported for Windows container workloads.

* You have configured hybrid networking with OVN-Kubernetes for your cluster. This must be completed during the installation of your cluster. For more information, see xref:../networking/ovn_kubernetes_network_provider/configuring-hybrid-networking.adoc#configuring-hybrid-ovnkubernetes[Configuring hybrid networking].

* You are running an {product-title} cluster version 4.6.8 or later.

.Additional resources
* For the comprehensive prerequisites for the Windows Machine Config Operator, see xref:understanding-windows-container-workloads.adoc#wmco-prerequisites_understanding-windows-container-workloads[Understanding Windows container workloads].

[id="installing-the-wmco"]
== Installing the Windows Machine Config Operator

You can install the Windows Machine Config Operator using either the web console or OpenShift CLI (`oc`).

include::modules/installing-wmco-using-web-console.adoc[leveloffset=+2]

include::modules/installing-wmco-using-cli.adoc[leveloffset=+2]

include::modules/configuring-secret-for-wmco.adoc[leveloffset=+1]

== Additional resources

* xref:../installing/installing_azure/installing-azure-default.adoc#ssh-agent-using_installing-azure-default[Generating a key pair for cluster node SSH access]
* xref:../operators/admin/olm-adding-operators-to-cluster.adoc#olm-adding-operators-to-a-cluster[Adding Operators to a cluster].


Update 2017-10-02-Kisa-Kisa-2.adoc

Update 2017-10-02-Kisa-Kisa-2.adoc

= Kısa Kısa (2)
:hp-tags:

Bir süredir haftada bir yaptığım yolculuklarda farkına vardım ki her yolculuk bana ölümü ciddi anlamda hatırlatıyor. Günlük yaşantıda mezarlık duvarlarının arkasına silkelediğim(iz) bu gerçeği hatırlamama vesile oluyor yolculuklar. Her yolculuk bunu az veya çok bir şekilde yâdıma düşürüyormuş aslında yeni farkettim. Neden sorusu bu sezişin peşine takıldı hemencecik. İlk aklıma gelen cevap şu oldu: "Ölüm de bir yolculuktur neticede. Bu kısa yolculuklar o büyük yolculuğun bir musaggarasıdır." Bir de şöyle tarttım kendimi: "Yoksa geri dönememek korkusu mu bu yaşadığın?", "Ölümü de geri dönüşü olmayan bir gidiş olarak görüyorsun da Dünya'ya düşkünlüğün mü aklına getiriyor onu?" Terazinin iki kefesine iki düşünceyi de bıraktım, tahterevallide oynayan çocuklar gibi hangileri aşağıda hangileri yukarıda göremedim.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Bu yolculukların bitiminde kendimi bir arkadaşın kucağına bırakıverdim. Birkaç aydır uzak kaldığım, avlusunda kedilerin koşturmacasına daldığım Üsküdar Mihrimah Sultan Camiî'nden başka bir yer değildi.  Her seferinde uzaktan gül-endamını seyredip biraz özlem biraz sevinçle yol alıyorum ona doğru. Gece en siyah çarşafı örterken gökyüzüne avlusuna ayak basıyorum, Valide Sultan Camiî ile söyleşmeye başlıyor iki dost. Bölmüyorum onları, dinliyorum bir yandan şadırvandan akan suların sesi. Güneş utangaçlığını kızıllıkların ardında bırakarak gösteriyor kendini. Bir başka dostu görüyorum, uzak kalmanın ırak edemediği bir dostu. Sonra diyorum: "Dostu görmek, bayramdır."

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Yolculuk, okul, iş derken bir yoğunluk kaplıyor dört yanımı. Yapacağım işlerin, görevlerin vs. zihnimi meşgul etmesi sanırım daha yorucu oluyor. Bu yoğunluk içerisinde bir yazıyı okumak için zaman kollamaya çalışıyordum, bir türlü nasip olmuyordu. Okuduğum zaman normalde alamayacağım bir keyfi aldım. Sanırım okumak için gösterdiğim iştiyak kitapla/yazıyla aramda bir bağ oluşmasına vesile oluyor. Aynı durum ruhen, zihnen yoğun olduğum veya kendimi yalnız hissettiğim -yıllardır tek yaşamama rağmen yalnız hissettiğim zamanlar, kalabalıklar içindeki yalnızlığımdan az- anlarda yine ortaya çıkıyor. Romanın bir kahramanı omzuma dokunuyor, bir diğeri elini uzatıyor, öbürü gülümsüyor. Buna en iyi örnek _Nisan'ın 2 Günü_, basit ve yalın bir anlatımı olsa da içinde yer bulduğum bir romandı. Birkaç yıl önce okul kütüphanesinde denk gelip ödünç almıştım. Bir kış günü sırtımı peteğe dayayıp okuduğumu hatırlıyorum. Petek siperin bir cephesi olmuştu, ayaklarımın siperin diğer cephesine değdiğini hissediyordum. Kabzası ayaklarımın ucunda bir tüfek omzuma yaslanmıştı.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

İyi insan tanıyorum, keşke daha önce tanısaydım diyorum. Ve keşkeye öyle bir duygu ve vurgu yüklüyorum ki takat getiremiyor, eziliyor. Bir mahrû -güzel tavrı ay gibi parlıyor- bedâyi-âşinâ (bedâyi-şinas) nasıl olunur öğretiyor. Ben ne kadar öğrenebilirim bilmiyorum. Bir daha *keşke*...

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Cevdet Paşa'nın eli omzuma dokundu.

_Nasıl çıldırmadım hayretdeyim hâlâ sevincimden_ +
_Lisânından seni sevdim sözün gûş itdiğim demler_

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Gökte ay, parlıyor; ayın on dördüdür.

_Sana vardır yüreğimde sözlerim_

video::So6VlDiHukI[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Dede Efendi ne dersin böyle?

video::vvFUnXpoUSE[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

_"Anlatıyorum, hiç konuşmadan,_ +
_Buğdayın içini dökmesi gibi..."_

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Bir dua, Kays'ın dilinden gönlüme düşer: +
_"Gittikçe hüsnün eyle ziyâde nigârımın_ +
_Geldikçe derdine beter et müptelâ beni"_

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

-_Neden kendi cümlelerinle konuşmazsın?_ +
-Bu hâl, aklımı setr ederken ben nasıl konuşayım? +
-_Peki niye kendine sözcüler bulursun, onların diliyle söylersin?_ +
-Dilim kendi gönlümden konuşsa bu ateş yaş yaprak mı bırakır? +
-_Peki niye susmazsın?_ +
-İçim ile durmadan söyleşirken nasıl susayım? +
-_Haberdar olduğuna delilin var mıdır?_ +
-Bir ay, aydınlığının düştüğü gönülden bigâne midir? +
-_Ne vakte kadar inilersin?_ +
-Vaktin varlığından sıyrılmadan tamam olunur mu? +
-_Neyi beklersin?_ +
-Pervane, şem tutuşmadan ne yapsın? Beklediğim şeminden bir ışıktır.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

video::asqjpUOo3YE[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Uyutmayan sebep, sen ne güzelsin!

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Ya Karacaoğlan halim ortadadır, hâlâ uyandırmaz mı? +
_"Pervâne şem’ini uyandıramaz_ +
_Başta sevdâ kalpte nâr olmayınca"_

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Ümit ve sabır, iki kardeş. Birbirlerine ne güzel sarılıyor şimdi.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Öyle sermestim ki ne iş ne yolculuk ne okul ne de sınavdan bir yorgunluk hissediyorum. Nasıl sermest olmayayım ki muhatap almışken bu bendeyi?

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Üfleyiverdi yâreme şifa deyu ol mehlikâ +
Amma cûşa getirdi içre ateşi bilmedi

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Acemice, belki hadsizce. Dilime dolanmadan kelimeler söylemek kolay değil. +
Gün doğmasın pencereme ne olur, gecemi aydınlatan ay yeter. +
_Bir nefeslik lafzımda zikrime cânan düşer_

video::244526490[vimeo]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Pervaneyi bir vesvese tutmuş, kaç gecedir  uyumaz beni de uyutmaz. "Söylediklerimle şemi üzer miyim?", diye kara kara düşünür. "Acaba şem pervanenin varlığından hoşnut mudur?" Teselli verdim, ikna etmeye kalkıştım. Kâr etmedi. Ne diyeyim, nasıl edeyim? +
*Pervane kendi acizliğine hatalarına bakıp vesveseye düşerdi. Şem üzülmesin; pervane tevekkül ipine sarıldı, öylece uyudu.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Pervanenin benden başka sırdaşı yok, kime anlatsın halini? Kime döksün içini? Akıtacak gözünden yaşları ama onların sırrını ifşa edeceğinden çekinir. Gözyaşlarını da içinde saklar.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Şem'i üzerlermiş, yorgun bırakırlarmış galiba. Be vefasız Pervane sen de durmaz kendi derdinden söylersin!

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Şeyh Galib'in duasına "Amin!" deriz.

_"Yâresi muhtâc-ı kâfûr olmasın bir kimsenin_ +
_Sîneden mehpâresi dûr olmasın bir kimsenin"_

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

video::nQh3bOwTnMg[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

En çok yolculuklar düşündürür insana, aklına gelmeyenler yakalar karanlığın ve ıssızlığın ortasında.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Dilimde dua:
"Hata etmekten koru, usûlsüz vusulden sana sığındık. Cahile yol göster."

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Yazmalı mıyım sâhiden? Sanki yazamadıklarımı da gönlümden okursun. Oku ki kalksın sancısı üzerimden.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Utana sıkıla, incitmekten korkarak...

video::245933662[vimeo]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

-_Kırıyorlar kalbini, yoruyorlar gönlünü nasıl şifa buluyorsun?_ +
-Bir emanet gibi sakladığım cümlelerini okuyup okuyup deva buluyorum.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

video::QKnuIhKRWu0[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

_"Yüz çevirmem olsa dünya bir yana ben bir yana_ +
_Şem’ine pervâneyim pervâ ne lâzımdır bana_ +
_Anlasın bîgâne bilsin âşinâ sevdim seni"_

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Madem andık, bugün de Kâni söylesin:

_"Mâhum seni ben pençe-i hûrşîde degişmem_ +
_Ol sîne-i sâfî dem-i ispîde degişmem"_

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Hadsizliğin zirvesinde yanımda utancım... Bir yıl evvelin sesidir yankılanan ve çirkindir, bilirim. Güzel kılan yegâne şeydir işitecek olan kulaklar.

"_Sevgili Dost,_ +
_Schumann: "çalarken, seni kimin dinlediğini umursama" diyor. Bense umursuyorum, kimin dinlediğini."_ +

https://vimeo.com/246656385

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Darılma, işte böyle... +
_"Durup dinlenmeden akarsa pınar,_  +
_Her yıl kıştan sonra gelirse bahar,_ +
_Balıkların suyu sevdiği kadar,_  +
_Ben de seni seviyorum, darılma."_

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

video::rxamCTtodME[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Birkaç zorluğun içinde kulaç atarken durdum, farkına vardım.

_"Sevgili Dost,_ +
_Sen lazımsın bana! Ve önemlisin hadiselerden."_

_"Sevgili Dost,_ +
_Bugün yazmak değil, konuşmak istiyordum seninle. Ama yine yazdım."_

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

video::247592380[vimeo]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

video::FfgLSNglfsY[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Mihrimah'da bulsa vücut.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Nahîfî sormuş: +
_"Göz gördü gönül sevdi seni ey yüzü mâhım_ +
_Kurbânın olam var mı benim bunda günâhım"_

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

_Mevlam kulu sevdim seni_

video::MUZBPnjgzhw[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Ahmet Muhip Dranas'tan :

_"Bir güzelim sensin, bir de gökyüzü,_ +
_Gerisi denizler ötesi, hepsi._ +
_Gökyüzüyüm gündüzüyle, gecesiyle,_ +
_Sen güzelim aşkıyla, neşesiyle_ +
_Uyumlu, esgin, el ele, ikiniz,_ +
_Umutlarla bezer, gönendirirsiniz_ +
_Ömrümü, kıyısında bir akşamın."_

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Ne desin bu fakir, düğüm düğüm olmuşsa dili?

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

video::-mZqs6VEwRk[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

_"kalbimin hüsnüyusuf mahrem bahçelerinde derindesin, rüya kadar derinde"_

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Kendine kızan insanı ne geri çevirir bundan? Yapılan hatanın telafisi özür değil, biliyor hata yapan. Peki telafisi var mıdır, bilmiyor.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Yağmurda yürüyene, +
_"Gülüşüne yağmur damlası çarpsa,_ +
_Şiir olur._ +
_Bunu bir ben bilirim,_ +
_Bir de gökyüzü."_

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

_Kanat takıp uçurur da bu düşler_ +
_Uyandırır en tatlı yerinde_ +
_Gün ortasında sabah seherinde_ +
_Hatırlanır yeniden_

video::2H1oTjQ7fsI[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

video::yKMDy_AigLQ[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

video::kOxKvZJrUpA[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

_"Zülf-i siyahı sâye-i perr-i Hümâ imiş_ +
_İklîm-i hüsne anun içün pâdişâ imiş"_

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

video::PNTW_77bOho[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

video::kU4ppB06qMc[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

_Gün geldiyse..._

video::e-Y0IEoczj8[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

_Sana gelirim_

video::251945761[vimeo]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Bundandır güzel adınız oldu nihan.

https://twitter.com/iskenderpalanet/status/767788983829102592

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Olmaz bilirim. Hem kendime hem mâhıma bir hatırlatma sadece: +
_"Hâtırından çıkmasın lutfet hemân mehcûr olan_ +
_Olmasın bârî gönülden dûr gözden dûr olan"_  +

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Hamd et ey hakir gönlüm ömrünce, kafi gelmese de... Nasıl sığdırdın bir mâhı gönlüne, nasıl girdin bir mâhın gönlüne? Hamd olsun...

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

"Gel" dese gitmez misin? +
Koşa koşa gidilir izin çıksa.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Esir-i zülfünüm...

video::R_aC7EFFACM[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Sanırlar ki kızgın ve kırgınım. Asla! Bir de böyle söyleyelim ki ikna olunsun.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

video::ci2pe08q61M[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Bâkî'den çalıp söylesem çok mudur? +

_"Hep seninçündür benim dünya cefâsın çektiğim_ +
_Yoksa ömrüm varı sensiz neylerim dünyâyı ben"_

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Kar nasıl yakar insanın içini? Hatıra geldikçe bir sevinç bir özlem.

video::255248711[vimeo]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Özledim...

video::255248790[vimeo]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

video::efpvLTrg7_o[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Günaydın...🌸🌺

video::m9gZyhNPYdY[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Bekir Bey de olmasa nasıl derdim ben?

video::2AE9iCE0Asw[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Huzuru sesinizde bulmuşum efendim.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Bir zamanlar, kimine kısa kimine uzundu vakitler. Kimi saniyelerle tartardı vakti bir avare nefesle, kalbin her atımıyla. Yanmak mı denir, tütmek mi bilmezdi, bilmez. İşte o zamanlar bir ses duyarım, ah O'ndan bir iz bulurum diye düştüğü çemende şöyle deyivermiş O, eh fukara gönül bu bana olaydı keşke demiş içini çekerek: +

_"Nice arz edem hele saz-ı dil-i dildara ben_ +
_Name göndersem kebuter iltemez biryan olur"_ +

Sonrasında haddini aşıp şöyle yazıvermiş bizim pervaneveş gönül sahibi: +

_"Hayalinde vardır aşıkun vuslat ey ahsen_ +
_Maşuk okur mektubu hâkister-i kefterden_ +
_Ama naz edüp aşıkına elem ilen dersin sen_ +
_Nice arz edem hele saz-ı dil-i dildara ben_ +
_Name göndersem kebuter iltemez biryan olur"_ +

Böylesine hadsizliğe iten de nedir bizim avareyi?

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Sadettin Hoca dinletiverdi:

_"Aşkındır bana güzelim yâdigâr"_

video::rdn0VZuoiss[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

İyi ki doğmuş o Mahrû!

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Bir yanı siz olan "biz"ler ne güzel.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

İyi geceler, Allah'a emanet olunuz. Zatınıza hoşça bakın 😊😊

_Sizi rahatsız etmekten çekinerek buraya düşürdüm yolumu. Artık ne vakit uğradıysanız öyle olsun. İyi sabahlar, iyi akşamlar, iyi günler..._

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

-Ne dersin Pervane, bizim de pabucumuz dama atılır mı? +
-Sen kendi derdine yan efendi. Ben hep yanındayım Mahrû'nun. Hem ne utanmaz adamsın sen, sabiyi mi kıskanacaksın? +
-Aman estağfurullah yanlış anlattım galiba. Kıskanmak değil benimki. Kenara itilmekten korkmak sadece. Hem o minik masumu, teyzoşunun görmesini koklamasını ne kadar istediğimi bilmez gibi konuşuyorsun. Demem o ki sen yanına uğrarsın mutlaka halimi arz et.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

video::D9A6zrFojj8[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Saat, 3 olsun diye can atadursun, bugün buradan sesleneyim olur mu efendim?

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

"Kızmayın 👀" ifafesi şakadan başka nedir ki? Yeri geldiğinde kızın, kaş çatın efendim. Ama biliniz ki eğer bir an hata ettiği olursa bile isteye hataya düşmemiştir bu Pervane.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Necati Beg nasıl da haklısın sabâdan hesabını sormalı.

_Ey sabâ yabanda mı buldun ayağı toprağın_ +
_Her göze ol tûtyâyı râyegân vermek neden_

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Canım efendim

video::2hq8rHNsxfw[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

_Mübtelâ_ kelimesi nasıl geçiyordu? Anlamı için sözlükleri karıştırmaya ne hacet, bu acize bakıp görmek varken.

video::Ebvr2nFovCM[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

video::hcRl8wsIlAs[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Peki, olur efendim. Yani inşallah :))

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Fuzuli ilk mısrayı bana bakıp yazmış onu anladım lakin ikinci mısra size midir acaba? 👀

_"Olmadı ol mâha rûşen yanduğum hicrân günü_ +
_Yanduğun şeb tâ seher şem'ün ne bilsün âfitâb_ +

(Ayrılık günü yandığımdan o ay gibi güzel haberdâr olmadı, yani bu hadise ona aydınlanmadı. Mumun gece sabaha kadar yandığını güneş ne bilsin.)

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Kalem olsaydım efendim eliniz değerdi, kağıt olsaydım efendim yüzünüz bana dönerdi. Heyhat insan olup Yemen'de kalmışım. Yemen'deki de yanınızdadır öyle ya, az kalsın unutup üzülecektim. +

Siz yanımdasınız her an her vakit.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Gün boyunca kaç kere demek istedim, yutkundum. Hem bu kadar isteyip hem de bu kadar söylemekten çekinmek garip. Söylemek istediğim cümleyi zaten biliyorsunuz 👀

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

_..._ +
_yanlış anlaşılması muhtemel, kaldırıldı :) _ +
_..._

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

İyi ki varsınız efendim. Yazıyı gördüğünüzde gülümsüyorumdur size doğru. 😌😌

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

"Canım efendim", ay yüzlü gül yüzlü efendim...

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Laleler açtı

video::vMbjeQl_FdY[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Başka bir sesten tekrar etsek 👀

_Aman aman aman aaah gel yanıma_ +
_Ahu gözlüm şirin sözlüm_ +
_Aaaaah kızıl hançerim_ +
_Çağır canıma aksın kanım_ +
_Kurbanam o cana men_ +
_Aaaaah_

video::Y6vbfX0i5Hw[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

video::vg8WGEr-dPU[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

_Ya Rab sevdiğimle beraber eyle_ +
_Gönlümü cânımı her bir ânımı_

Amin amin amin...

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

_"Hep sen varsın"_ 💕

video::VXNISYc8uNI[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

🌷🌷

video::74R3ku58-t0[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

video::jSdJ7gr1-IE[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

_"Aşk-ı pâkün gamıyla şâd eyle_ +
_Yâr vaslıyla ber-murad eyle"_

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

video::fdv_Bki-2aI[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Siz rahatsız ettiğinizi sanıyorsunuz, bense derdini benle paylaşacak kadar değer veriyor bana deyip mutlu oluyorum. Dert yüzü görmeyin, görecek olursanız -hayır, hayır olursanız değil- olursak yanınızdayım. Dert ortağınız, sırdaşınız, refikiniz olabilsem ne büyük bahtiyarlık...

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Burası bir müddet öksüz kaldı.

Abdurrahim Karakoç Beyefendi kimin için söyledi bilmiyorum ama ben söylersem kim olduğu bellidir :)

_"Aşktan yana söz duyunca_ +
_Ben hep seni düşünürüm._ +
_Uçsuz hayaller boyunca_ +
_Ben hep seni düşünürüm."_

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Nedim ne güzel demiş...

_"Sevdiğim cemâlin çünkim göremem_ +
_Çıkmasın hayâlin dil-i şeydâdan_ +
_Hâk-i pâye çünki yüzler süremem_ +
_Alayım peyâmın bâd-ı sabâdan"_

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

🌷🌹🌷🌹🌷🌹🌷🌹🌷🌹🌷🌹🌷🌹🌷🌹🌷🌹🌷🌹🌷🌹🌷🌹🌷🌹🌷🌹🌷🌹🌷🌹❤

video::6CmU7vvmVxw[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

_Gönlüm senin esirin, kalbim senin yerindir_

video::s2KQlEfbeRI[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

video::cDIkxp44qak[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Bir de özlem var. Sanki bu duygu beni hiç terketmeyecek. +
Çok özledim.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Gönlüme nakşedilen fotoğrafı hiç silmedim. Tüm fotoğraflardan güzel o. +

Ben de derim ne demişse Bekir Bey.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

_Nesin a sen a güzel_

video::vweKToC3gu0[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

_Dûr etme yanından asla bendeni ey kâş-ı keman_

video::mmbPHRfJsOg[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Ne kadar da güzel değil mi? +
Çünkü O bunu beğeniyormuş.

video::ml0yoRT_e2c[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Garip bir hüzün var bu şarkıda sizi alıp getiren

video::Qprmq3Ol27A[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

İyi ki varsınız. Varsınız ya bu garip bir liman buldu uçsuz bucaksız bu ummanda

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Bir tanesiniz siz  bir tane... Yanımda olduğunuzu bileyim, aynı hayali kurduğumuzu bileyim beklerim. 💐💐💐

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Herşeye de cık 😀

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Bir yuva hayal ediyorum.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

İnşallah bir yol bulunur diye hep ümit ediyorum. Ümit de bir çeşit duadır. Sen, ben, ailelerimiz kimse üzülmesin, zorda kalmasın :)

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Ne güzel seni söylemek çiçeklere. Ne güzel senden konuşmak.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

🐰🐐

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Bedenim, ruhum ve ömrüm senin ellerinde. Nasıl dilersen öyle kullanabilirsin. Ben sultanımın bendesiyim. Boşuna değil bilakis sevgine layık olabilmek için bir fırsat.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Ne güzel bir gündü, çok güzel bir anı. Paha biçilmez bir yorgunluk. Hepsi için ne kadar teşekkür edeyim? Gülümsemeni görme bahtiyarlığına teşekkürler kafi gelmez.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Hala otobüsün camına bakıyorum, gülümsüyorsun. Güller açıyor gül yüzün.

_"Ne çâre var ki firâkunla eglenem bir dem_ +
_Ne tâli’üm meded eyler visâle fırsat olur"_ +
(Nef'î)

_(Ne senin ayrılığın yüzünden bir an oturup kalmanın çaresi var ne de talihim yardım eder de sana kavuşma fırsatı bulabilirim.)_

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Ben hala otobüsün camını gözetliyorum.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Yarimin kokusunu rüzgarında saklayan şehir, senden o kokuyu almaya geldim. Nefes nefes havandan çekerek...

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Sanki iki şehirden ayrılıyorum. İki özlemi sığdıracağım yüreğime.

Ve hiç unutma olur mu, seni seviyorum.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

"Hı hı" 💕

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Güzel, ne güzel olmuşsun

video::z7BFOVzLM8M[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Varsam Taşhan'a izini arasam, Ali Paşa'ya varıp bir yol soluklansam, Behzat boyu adımlasam, Ballıca'ya yol düşürüp nefeslensem, Çekenli'de yolunu gözlesem bulur muyum seni sultanım?

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Şirin kız, sana iyi bir eş olmanın hayali -belki de umudu- beni böylesine dinç tutan.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Çok özledim seni. İnsan en yakınında hissettiğinin özlemini daha çok duyarmış.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

video::IC-3G7jWEbk[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Nereye gidersen meleğim, avuçlarına bıraktığım kalbim de seninle oraya geliyor.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

_"Vuslatından gönlümü Allah mehcûr etmesin_ +
_Rûhumu kabzeylesin senden beni dûr etmesin"_

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Sen üzülme meleğim. Hiç üzülme. Seni tanımakla dahi iftihar ederim ben. Seni sevmekle nasıl övünürüm var düşün. Kimse yadırgamaz ayıplamaz ama varsın öyle olsun, hiç mühim değil. Seni sevmekten dolayı ayıplanacaksam üstadım Kays'a seslenirim: "Çok şükür, beni de ayıpladılar!" +

Sen hiç üzülme, gül ki güller açsın gül yüzünde. Tanımakla şeref bulduğum seni çok seviyorum.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

_Sen burada, kalbimdesin_ +
_Kalbim hep seninle atacak_

video::zCLJU1z8Cw4[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Göğe açılan pencerem, ışığım, nurum. Bilirim, bu aciz sevgim sana layık olmaya yetmez. Ne kadar çok olsa bir o kadar az kalır.

Sevgisiyle beni kuşatan melek, sana layık bir eş olma gayesinden geri kalmamak duasındayım.

Gülünce tomurcukları uyandıran güzel, yüzünde bir gülümseme olmak için canım feda.

Ne dersem az demişimdir, ne demişsem sana layık olamamışımdır. Hiç değilse bunu bilirim.

Seni seviyorum canımın içi. *İyi ki doğdun.*

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Allah'ım şükürler olsun. Bana O'nu tanıma fırsatı verdiğin için, sevgisini kalbime nakşettiğin için.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Birtanem çok özledim seni ben

video::vd_mkHdZIEQ[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Seni ben yürekten, candan seviyorum💕

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Hoşuma gitti. Belki sen de beğenirsin cancağızım.

video::5GfZahNlEh0[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Güzel olan O'nun beğendiğidir.

video::9sIN1mlr2f8[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Canımın içi senin üzülmene yüreğim dayanmıyor ki. Hep yüzün gülse. Sana çok yakışıyor.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Huzur bir enstrüman olsa senin sesinden başkasını çıkaramazdı meleğim. 💕

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

video::CVHHLh99B3Q[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

O, benim canım. Hep yanımda olsun istiyorum. Hiç ayrı kalmamak...

İyi ki var.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Atkım çooook güzel 😍

Alan, sarılan güzel çünkü.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Bardağından su içmek, tarifsiz bir mutluluk. Teşekkür ederim meleğim her an için.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Senin yanında olmanın verdiği huzur ve mutluluk bir başka. Hep senin yanında olabilsem. Ah keşke.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

_Bir tek seni sevmek çok değil_

video::303967019[vimeo]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Geriye dönüp bakınca seninle geçen her anım için şükrediyorum. Sadece yanım(n)da olduğun(m) vakitler için değil. Seni özlediğim, seni düşündüğüm, hayal kurduğum her vakit kıymetli işte. Hasılı, sevgin kalbime kondu konalı geçen ne kadar zaman varsa hepsi için binlerce şükür.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

video::9XFXbSJ5Cis[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Dönüp geçen zamana bakıyorum. Hiçbir anına keşke olmasaydı diyemem, her biri ayrı kıymetli. +
Seni sevdiğim -sana aşık olduğum demek istiyor- andan bu yana ne kadar çok güzellik yaşattın bana. +
Hepsi için sana müteşekkirim. Sesini duymak, gül yüzünü görmek aklımdan geçmezdi de kendimi dolunayı beklemekle avuturdum. +
Şimdi her telefonum çaldığında vakit ayın on dördü oluyor birden. +
Hani şair şöyle başlıyor şiirine: +
_Seninle bir yağmur başlıyor iplik iplik_ +
İşte bu yağmur ruhumu yıkıyor, pak ediyor. Senin getirdiğin yağmur. +
Ve şöyle devam ediyor ya sonraki dizede: +
_Bir güzellik doğuyor yüreğime şiirden_ +
Güzelliği ruhuma ve kalbime buyur eden sensin. Bu senin eserin. +
Düşünüyorum bazen, hayatımda ne yaptım bugüne kadar? +
Seni sevdim, işte bu kadarı yeter. +
Bak aklıma bir şiir daha geldi böyle söyleyince. +
_Seni sevip çekildim dedim dünya bu kadar_ +
Benim dünyam sensin prensesim.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Sen benim "iyi ki'msin" +
Sürekli özlediğimsin +

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

İnşallah tez vakitte hayırlısıyla, inşallah. +
Amin.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Boş durmasından daha iyi bence, ne dersin canım? 😀

video::2DPUAxvd978[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

_Ben kulunum sen efendimsin benim_

video::W0ggje8Y8Fo[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

_Bir kelebeksin, gonca çiceksin_ +
_Güzel meleksin, nazlı bebeksin_

video::1t_3ik1dx18[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Meftunun olmuşum 💕

video::7dVnGZ5mgrQ[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Bu, burada dursun. Lazım olacak 😍

video::6pZwYgoL8L8[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Yalvarırım, ne yapacağını bilmeyene yol göster. Ya da bu yolu beraber yürüyelim.

Seni seviyorum, Mahru'dan öte sevgiyle.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Yüreğimde senin hüznünü taşımak da güzel. +
İnşallah çok sürmez senden uzak kalmam. Nefesim kesiliyor. Sensiz değerim yok. Uzatma olur mu, dön tekrar. Allah bize hayırlı bir yol açar inşallah.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Aç kalma sakın. Aklım sende. Kendine iyi bak en kıymetlim.

Unutuyordum az kalsın, iyi ki doğdun meleğim.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Uçağa bindim. 22.21

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Uçak indi. 00.16


Update 2017-10-02-Kisa-Kisa-2.adoc

Update 2017-10-02-Kisa-Kisa-2.adoc

= Kısa Kısa (2)
:hp-tags:

Bir süredir haftada bir yaptığım yolculuklarda farkına vardım ki her yolculuk bana ölümü ciddi anlamda hatırlatıyor. Günlük yaşantıda mezarlık duvarlarının arkasına silkelediğim(iz) bu gerçeği hatırlamama vesile oluyor yolculuklar. Her yolculuk bunu az veya çok bir şekilde yâdıma düşürüyormuş aslında yeni farkettim. Neden sorusu bu sezişin peşine takıldı hemencecik. İlk aklıma gelen cevap şu oldu: "Ölüm de bir yolculuktur neticede. Bu kısa yolculuklar o büyük yolculuğun bir musaggarasıdır." Bir de şöyle tarttım kendimi: "Yoksa geri dönememek korkusu mu bu yaşadığın?", "Ölümü de geri dönüşü olmayan bir gidiş olarak görüyorsun da Dünya'ya düşkünlüğün mü aklına getiriyor onu?" Terazinin iki kefesine iki düşünceyi de bıraktım, tahterevallide oynayan çocuklar gibi hangileri aşağıda hangileri yukarıda göremedim.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Bu yolculukların bitiminde kendimi bir arkadaşın kucağına bırakıverdim. Birkaç aydır uzak kaldığım, avlusunda kedilerin koşturmacasına daldığım Üsküdar Mihrimah Sultan Camiî'nden başka bir yer değildi.  Her seferinde uzaktan gül-endamını seyredip biraz özlem biraz sevinçle yol alıyorum ona doğru. Gece en siyah çarşafı örterken gökyüzüne avlusuna ayak basıyorum, Valide Sultan Camiî ile söyleşmeye başlıyor iki dost. Bölmüyorum onları, dinliyorum bir yandan şadırvandan akan suların sesi. Güneş utangaçlığını kızıllıkların ardında bırakarak gösteriyor kendini. Bir başka dostu görüyorum, uzak kalmanın ırak edemediği bir dostu. Sonra diyorum: "Dostu görmek, bayramdır."

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Yolculuk, okul, iş derken bir yoğunluk kaplıyor dört yanımı. Yapacağım işlerin, görevlerin vs. zihnimi meşgul etmesi sanırım daha yorucu oluyor. Bu yoğunluk içerisinde bir yazıyı okumak için zaman kollamaya çalışıyordum, bir türlü nasip olmuyordu. Okuduğum zaman normalde alamayacağım bir keyfi aldım. Sanırım okumak için gösterdiğim iştiyak kitapla/yazıyla aramda bir bağ oluşmasına vesile oluyor. Aynı durum ruhen, zihnen yoğun olduğum veya kendimi yalnız hissettiğim -yıllardır tek yaşamama rağmen yalnız hissettiğim zamanlar, kalabalıklar içindeki yalnızlığımdan az- anlarda yine ortaya çıkıyor. Romanın bir kahramanı omzuma dokunuyor, bir diğeri elini uzatıyor, öbürü gülümsüyor. Buna en iyi örnek _Nisan'ın 2 Günü_, basit ve yalın bir anlatımı olsa da içinde yer bulduğum bir romandı. Birkaç yıl önce okul kütüphanesinde denk gelip ödünç almıştım. Bir kış günü sırtımı peteğe dayayıp okuduğumu hatırlıyorum. Petek siperin bir cephesi olmuştu, ayaklarımın siperin diğer cephesine değdiğini hissediyordum. Kabzası ayaklarımın ucunda bir tüfek omzuma yaslanmıştı.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

İyi insan tanıyorum, keşke daha önce tanısaydım diyorum. Ve keşkeye öyle bir duygu ve vurgu yüklüyorum ki takat getiremiyor, eziliyor. Bir mahrû -güzel tavrı ay gibi parlıyor- bedâyi-âşinâ (bedâyi-şinas) nasıl olunur öğretiyor. Ben ne kadar öğrenebilirim bilmiyorum. Bir daha *keşke*...

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Cevdet Paşa'nın eli omzuma dokundu.

_Nasıl çıldırmadım hayretdeyim hâlâ sevincimden_ +
_Lisânından seni sevdim sözün gûş itdiğim demler_

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Gökte ay, parlıyor; ayın on dördüdür.

_Sana vardır yüreğimde sözlerim_

video::So6VlDiHukI[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Dede Efendi ne dersin böyle?

video::vvFUnXpoUSE[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

_"Anlatıyorum, hiç konuşmadan,_ +
_Buğdayın içini dökmesi gibi..."_

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Bir dua, Kays'ın dilinden gönlüme düşer: +
_"Gittikçe hüsnün eyle ziyâde nigârımın_ +
_Geldikçe derdine beter et müptelâ beni"_

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

-_Neden kendi cümlelerinle konuşmazsın?_ +
-Bu hâl, aklımı setr ederken ben nasıl konuşayım? +
-_Peki niye kendine sözcüler bulursun, onların diliyle söylersin?_ +
-Dilim kendi gönlümden konuşsa bu ateş yaş yaprak mı bırakır? +
-_Peki niye susmazsın?_ +
-İçim ile durmadan söyleşirken nasıl susayım? +
-_Haberdar olduğuna delilin var mıdır?_ +
-Bir ay, aydınlığının düştüğü gönülden bigâne midir? +
-_Ne vakte kadar inilersin?_ +
-Vaktin varlığından sıyrılmadan tamam olunur mu? +
-_Neyi beklersin?_ +
-Pervane, şem tutuşmadan ne yapsın? Beklediğim şeminden bir ışıktır.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

video::asqjpUOo3YE[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Uyutmayan sebep, sen ne güzelsin!

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Ya Karacaoğlan halim ortadadır, hâlâ uyandırmaz mı? +
_"Pervâne şem’ini uyandıramaz_ +
_Başta sevdâ kalpte nâr olmayınca"_

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Ümit ve sabır, iki kardeş. Birbirlerine ne güzel sarılıyor şimdi.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Öyle sermestim ki ne iş ne yolculuk ne okul ne de sınavdan bir yorgunluk hissediyorum. Nasıl sermest olmayayım ki muhatap almışken bu bendeyi?

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Üfleyiverdi yâreme şifa deyu ol mehlikâ +
Amma cûşa getirdi içre ateşi bilmedi

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Acemice, belki hadsizce. Dilime dolanmadan kelimeler söylemek kolay değil. +
Gün doğmasın pencereme ne olur, gecemi aydınlatan ay yeter. +
_Bir nefeslik lafzımda zikrime cânan düşer_

video::244526490[vimeo]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Pervaneyi bir vesvese tutmuş, kaç gecedir  uyumaz beni de uyutmaz. "Söylediklerimle şemi üzer miyim?", diye kara kara düşünür. "Acaba şem pervanenin varlığından hoşnut mudur?" Teselli verdim, ikna etmeye kalkıştım. Kâr etmedi. Ne diyeyim, nasıl edeyim? +
*Pervane kendi acizliğine hatalarına bakıp vesveseye düşerdi. Şem üzülmesin; pervane tevekkül ipine sarıldı, öylece uyudu.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Pervanenin benden başka sırdaşı yok, kime anlatsın halini? Kime döksün içini? Akıtacak gözünden yaşları ama onların sırrını ifşa edeceğinden çekinir. Gözyaşlarını da içinde saklar.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Şem'i üzerlermiş, yorgun bırakırlarmış galiba. Be vefasız Pervane sen de durmaz kendi derdinden söylersin!

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Şeyh Galib'in duasına "Amin!" deriz.

_"Yâresi muhtâc-ı kâfûr olmasın bir kimsenin_ +
_Sîneden mehpâresi dûr olmasın bir kimsenin"_

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

video::nQh3bOwTnMg[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

En çok yolculuklar düşündürür insana, aklına gelmeyenler yakalar karanlığın ve ıssızlığın ortasında.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Dilimde dua:
"Hata etmekten koru, usûlsüz vusulden sana sığındık. Cahile yol göster."

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Yazmalı mıyım sâhiden? Sanki yazamadıklarımı da gönlümden okursun. Oku ki kalksın sancısı üzerimden.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Utana sıkıla, incitmekten korkarak...

video::245933662[vimeo]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

-_Kırıyorlar kalbini, yoruyorlar gönlünü nasıl şifa buluyorsun?_ +
-Bir emanet gibi sakladığım cümlelerini okuyup okuyup deva buluyorum.

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

video::QKnuIhKRWu0[youtube]

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

_"Yüz çevirmem olsa dünya bir yana ben bir yana_ +
_Şem’ine pervâneyim pervâ ne lâzımdır bana_ +
_Anlasın bîgâne bilsin âşinâ sevdim seni"_

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Madem andık, bugün de Kâni söylesin:

_"Mâhum seni ben pençe-i hûrşîde degişmem_ +
_Ol sîne-i sâfî dem-i ispîde degişmem"_

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Hadsizliğin zirvesinde yanımda utancım... Bir yıl evvelin sesidir yankılanan ve çirkindir, bilirim. Güzel kılan yegâne şeydir işitecek olan kulaklar.

"_Sevgili Dost,_ +
_Schumann: "çalarken, seni kimin dinlediğini umursama" diyor. Bense umursuyorum, kimin dinlediğini."_ +

https://vimeo.com/246656385

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

Darılma, işte böyle... +
_"Durup dinlenmeden akarsa pınar,_  +
_Her yıl kıştan sonra gelirse bahar,_ +
_Balıkların suyu sevdiği kadar,_  +
_Ben de seni seviyorum, darılma."_

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿


Add auth flow information

Add auth flow information

---
title: Authentication Service Plugin API
---

include::content/docs/variables.adoc-include[]

== Intro

Authentication Service Plugin API can be used to create plugins which can extend the authentication/authorization functionality of Gentics Mesh.

Those plugins are intended to work in conjunction with the link:{{< relref "authentication.asciidoc" >}}#_oauth2[OAuth2] interation. When the OAuth2 integration with the Keycloak Identity Provider is enabled Gentics Mesh will automatically sync users provided by Keycloak with the users that are stored in Gentics Mesh.

Once a JWT has been obtained by keycloak it can be used for Gentics Mesh requests. The token is validated and the user is synced.

Often it is however also desired to sync permission specific information from identity provider. This is where most of the Authentication Service Plugin API comes into play. The API can be used to create plugins which map the information from the JWT to Gentics Mesh roles and groups.

This way any public claim information from the JWT can be used to dynamically update the user, create roles and groups.

== Flow

A typical request which needs authentication passes through various handlers which try to autenticate. The `MeshAuthChain` is currently responsible for passing the requests along these handlers.

=== JWT handler

This handler tries to authenticate the request by validating the JWT against the Gentics Mesh keystore certificate. The identified user will be added to the request when this succeeds. In this case no other authentication handler in the chain is called.

NOTE: Failed authentications at this stage will yield a `Could not authenticate token.` warning. This warning will be removed in future versions of Gentics Mesh. The next handler in the chain will be used if the JWT handler was unable to authenticate the user.

=== OAuth handler

This handler will utilize the configured or provided public keys to validate the request.
The `AuthServicePlugin` API will be called when the request JWT could be validated with the provided public keys.

First the `acceptToken` method gets called to check if any of the plugins rejects the request.

Next the mapping process will be invoked. The token information will be inspected to check whether a mapping call is needed.

The `extractUsername` method gets called to identify and load the user.
Once the user has been loaded

NOTE: The `jti` or  `iat` of the JWT will be used to decide whether a fresh mapping call must be invoked. The JWT will only be passed to the mapping code if it has not yet been handled.

Finally the `mapToken` method will be called for every `AuthServicePlugin`.

=== Anonymous Auth Handler

This handler will only be utilized when no authentication information have been added to the request and when the anonymous authentication has been enabled. The handler will automatically assign the anonymous user to the request and accept it.

== Setup

The `AuthServicePlugin` interface must be used for an authentication plugin. This interface provides various methods which will be invoked by Gentics Mesh during the authentication process.

== Mapping JWT

.AuthServicePlugin methods excerpt
[options="header"]
|======
| Method                            | Description
| `AuthServicePlugin#mapToken()`    | Use the token information to create a mapping result which will be used to sync user, groups, roles.
|======

The information from the returned `MappingResult` will be used to sync the elements in Gentics Mesh. Any of the fields in the result can be omitted.

Sync process is as follows:

1. Update user with `MappingResult#getUser` information or use _default mapper_ if no user was specified.
2. Create roles that are listed in `MappingResult#getRoles`.
3. Create groups that are listed in `MappingResult#getGroups`.
4. Assign user to groups of `MappingResult#getGroups` list.
5. Link roles that are listed within `MappingResult#getGroups` entries to the groups (via `GroupResponse#getRoles`).
6. Iterate over all roles of the mapped groups and invoke `MappingResult#getRoleFilter` to check whether the role should be unlinked from the group. You can use this to ensure that only specific roles are links to the groups.
7. Link roles that are listed within `MappingResult#getRoles` entries to the groups (via `GroupResponse#getGroups`).
8. Iterate over all groups of the user and invoke `MappingResult#getGroupFilter` to check whether the user should be removed from the group. You can use this to ensure that the use is only part of specific groups.

NOTE: A default mapper which maps _firstname_, _lastname_, _email address_ will be used for user information if you do not set the user field in the `MappingResult` object.

NOTE: The synchronization process will only be invoked if the access token changes. Remember that you need to issue a new access token if you change the mapping in keycloak. The old token may still contain the old information.

WARNING: It is important to note that the mapper API can not be used to *delete* users, roles or groups.

== Utils

The `AuthServicePluginUtils` provides additional utility functions that can be used in your plugin implementation. The `AuthServicePluginUtils#createRoleFilter()` and `AuthServicePluginUtils#createGroupFilter()` methods can be used to create filters which will only keep role/group, user/group assignments that have been specified in the given lists.

This is useful if you want to ensure that users only belong in the groups that are managed by your identity provider/auth plugin.

== Examples

* link:https://github.com/gentics/mesh-plugin-examples/tree/master/authentication-plugin[Authentication Service Plugin Example]

---
title: Authentication Service Plugin API
---

include::content/docs/variables.adoc-include[]

== Intro

Authentication Service Plugin API can be used to create plugins which can extend the authentication/authorization functionality of Gentics Mesh.

Those plugins are intended to work in conjunction with the link:{{< relref "authentication.asciidoc" >}}#_oauth2[OAuth2] interation. When the OAuth2 integration with the Keycloak Identity Provider is enabled Gentics Mesh will automatically sync users provided by Keycloak with the users that are stored in Gentics Mesh.

Once a JWT has been obtained by keycloak it can be used for Gentics Mesh requests. The token is validated and the user is sycned.

Often it is however also desired to sync permission specific information from identity provider. This is where most of the Authentication Service Plugin API comes into play. The API can be used to create plugins which map the information from the JWT to Gentics Mesh roles and groups.

This way any public claim information from the JWT can be used to dynamically update the user, create roles and groups.

== Setup

The `AuthServicePlugin` interface must be used for an authentication plugin. This interface provides various methods which will be invoked by Gentics Mesh during the authentication process.

== Mapping JWT

.AuthServicePlugin methods excerpt
[options="header"]
|======
| Method                            | Description
| `AuthServicePlugin#mapToken()`    | Use the token information to create a mapping result which will be used to sync user, groups, roles.
|======

The information from the returned `MappingResult` will be used to sync the elements in Gentics Mesh. Any of the fields in the result can be omitted.

Sync process is as follows:

1. Update user with `MappingResult#getUser` information or use _default mapper_ if no user was specified.
2. Create roles that are listed in `MappingResult#getRoles`.
3. Create groups that are listed in `MappingResult#getGroups`.
4. Assign user to groups of `MappingResult#getGroups` list.
5. Link roles that are listed within `MappingResult#getGroups` entries to the groups (via `GroupResponse#getRoles`).
6. Iterate over all roles of the mapped groups and invoke `MappingResult#getRoleFilter` to check whether the role should be unlinked from the group. You can use this to ensure that only specific roles are links to the groups.
7. Link roles that are listed within `MappingResult#getRoles` entries to the groups (via `GroupResponse#getGroups`).
8. Iterate over all groups of the user and invoke `MappingResult#getGroupFilter` to check whether the user should be removed from the group. You can use this to ensure that the use is only part of specific groups.

NOTE: A default mapper which maps _firstname_, _lastname_, _email address_ will be used for user information if you do not set the user field in the `MappingResult` object.

NOTE: The synchronization process will only be invoked if the access token changes. Remember that you need to issue a new access token if you change the mapping in keycloak. The old token may still contain the old information.

WARNING: It is important to note that the mapper API can not be used to *delete* users, roles or groups.

== Utils

The `AuthServicePluginUtils` provides additional utility functions that can be used in your plugin implementation. The `AuthServicePluginUtils#createRoleFilter()` and `AuthServicePluginUtils#createGroupFilter()` methods can be used to create filters which will only keep role/group, user/group assignments that have been specified in the given lists.

This is useful if you want to ensure that users only belong in the groups that are managed by your identity provider/auth plugin.

== Examples

* link:https://github.com/gentics/mesh-plugin-examples/tree/master/authentication-plugin[Authentication Service Plugin Example]


Adding section on Prometheus/Grafana to monitoring docs

= Monitoring Debezium
include::../_attributes.adoc[]
:linkattrs:
:icons: font
:toc:
:toc-placement: macro

toc::[]

Debezium uses Kafka and Zookeeper, and all of these support monitoring via JMX. In fact, there are a lot of https://zookeeper.apache.org/doc/r3.1.2/zookeeperJMX.html[Zookeeper metrics] and even more http://docs.confluent.io/3.0.0/kafka/monitoring.html[Kafka metrics] available. But how JMX is enabled in these services depends on whether you're running them in Docker containers or using the standard installations.

[NOTE]
====
If you are running multiple services on the same machine, be sure to use distinct JMX ports for each service.
====

== Local installations

JMX can be enabled in Zookeeper, Kafka, and Kafka Connect using their standard installations and environment variables when running the startup commands.

=== Local Zookeeper

Zookeeper has built-in support for JMX. When running Zookeeper using a local installation, the `zkServer.sh` script recognizes the following environment variables:

[cols="35%a,10%a,55%a",options="header,footer",role="table table-bordered table-striped"]
|=======================
|Environment Variable
|Default
|Description

|`JMXPORT`
|
|Enables JMX and specifies the port number that will be used for JMX. The value is used to specify the JVM parameter `-Dcom.sun.management.jmxremote.port=$JMXPORT`.

|`JMXAUTH`
|`false`
|Whether JMX clients must use password authentication when connecting. Must be either `true` or `false`. The value is used to specify the JVM parameter `-Dcom.sun.management.jmxremote.authenticate=$JMXAUTH`.

|`JMXSSL`
|`false`
|Whether JMX clients connect using SSL/TLS. Must be either `true` or `false`. The value is used to specify the JVM parameter `-Dcom.sun.management.jmxremote.ssl=$JMXSSL`.

|`JMXLOG4J`
|`true`
|Whether the Log4J JMX MBeans should be disabled. Must be either `true` or `false`. The value is used to specify the JVM parameter `-Dzookeeper.jmx.log4j.disable=$JMXLOG4J`.
|=======================

=== Local Kafka

When running Kafka using a local installation, the `kafka-server-start.sh` script recognizes the following environment variables:

[cols="35%a,10%a,55%a",options="header,footer",role="table table-bordered table-striped"]
|=======================
|Environment Variable
|Default
|Description

|`JMX_PORT`
|
|Enables JMX and specifies the port number that will be used for JMX. The value is used to specify the JVM parameter `-Dcom.sun.management.jmxremote.port=$JMX_PORT`.

|`KAFKA_JMX_OPTS`
|`-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false  -Dcom.sun.management.jmxremote.ssl=false `
|JMX options, passed directly to the JVM during startup.
|=======================

=== Local Kafka Connect

When running Kafka using a local installation, the `connect-distributed.sh` script recognizes the following environment variables:

[cols="35%a,10%a,55%a",options="header,footer",role="table table-bordered table-striped"]
|=======================
|Environment Variable
|Default
|Description

|`JMX_PORT`
|
|Enables JMX and specifies the port number that will be used for JMX. The value is used to specify the JVM parameter `-Dcom.sun.management.jmxremote.port=$JMX_PORT`.

|`KAFKA_JMX_OPTS`
|`-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false  -Dcom.sun.management.jmxremote.ssl=false `
|JMX options, passed directly to the JVM during startup.
|=======================

== Using Docker

Enable JMX for a JVM running in a Docker container requires several additional options not normally needed when running on a local machine. This is because the JVM requires the hostname to which it will advertise itself to JMX clients. Because of this, Debezium's Docker images for Zookeeper, Kafka, and Kafka Connect use several environment variables to enable and configure JMX. Most of the environment variables are the same for all of the images, but there are some minor differences.

=== Zookeeper in Docker

The `debezium/zookeeper` image recognizes the following JMX-related environment variables:

[cols="35%a,10%a,55%a",options="header,footer",role="table table-bordered table-striped"]
|=======================
|Environment Variable
|Default
|Description

|`JMXPORT`
|
|Required. The port number that will be used for JMX. The value is used to specify the JVM parameters `-Dcom.sun.management.jmxremote.port=$JMXPORT` and `-Dcom.sun.management.jmxremote.rmi.port=$JMXPORT`.

|`JMXHOST`
|
|Required. The IP address or resolvable hostname of the Docker host, which JMX uses to construct a URL sent to the JMX client. A value of `localhost` or `127.0.0.1` will not work. The value is used to specify the JVM parameter `-Djava.rmi.server.hostname=$JMXHOST`.

|`JMXAUTH`
|`false`
|Whether JMX clients must use password authentication when connecting. Must be either `true` or `false`. The value is used to specify the JVM parameter `-Dcom.sun.management.jmxremote.authenticate=$JMXAUTH`.

|`JMXSSL`
|`false`
|Whether JMX clients connect using SSL/TLS. Must be either `true` or `false`. The value is used to specify the JVM parameter `-Dcom.sun.management.jmxremote.ssl=$JMXSSL`.

|`JMXLOG4J`
|`true`
|Whether the Log4J JMX MBeans should be disabled. Must be either `true` or `false`. The value is used to specify the JVM parameter `-Dzookeeper.jmx.log4j.disable=$JMXLOG4J`.
|=======================

The following example Docker command start a container using the `debezium/zookeeper` image with values for the `JMXPORT` and `JMXHOST` environment variables, and maps the Docker host's port 9010 to the container's JMX port:

```
docker run -it --rm --name zookeeper -p 2181:2181 -p 2888:2888 -p 3888:3888 -p 9010:9010 -e JMXPORT=9010 -e JMXHOST=10.0.1.10 debezium/zookeeper:latest
```

=== Kafka in Docker

The `debezium/kafka` image recognizes the following JMX-related environment variables:

[cols="35%a,10%a,55%a",options="header,footer",role="table table-bordered table-striped"]
|=======================
|Environment Variable
|Default
|Description

|`JMXPORT`
|
|Required. The port number that will be used for JMX. The value is used to specify the JVM parameters `-Dcom.sun.management.jmxremote.port=$JMXPORT` and `-Dcom.sun.management.jmxremote.rmi.port=$JMXPORT`.

|`JMXHOST`
|
|Required. The IP address or resolvable hostname of the Docker host, which JMX uses to construct a URL sent to the JMX client. A value of `localhost` or `127.0.0.1` will not work. The value is used to specify the JVM parameter `-Djava.rmi.server.hostname=$JMXHOST`.

|`JMXAUTH`
|`false`
|Whether JMX clients must use password authentication when connecting. Must be either `true` or `false`. The value is used to specify the JVM parameter `-Dcom.sun.management.jmxremote.authenticate=$JMXAUTH`.

|`JMXSSL`
|`false`
|Whether JMX clients connect using SSL/TLS. Must be either `true` or `false`. The value is used to specify the JVM parameter `-Dcom.sun.management.jmxremote.ssl=$JMXSSL`.
|=======================

The following example Docker command start a container using the `debezium/kafka` image with values for the `JMXPORT` and `HOST_NAME` environment variables, and maps the Docker host's port 9011 to the container's JMX port:

```
docker run -it --rm --name kafka -p 9092:9092 -p 9011:9011 -e JMXPORT=9011 -e JMXHOST=10.0.1.10 --link zookeeper:zookeeper debezium/kafka:latest
```

== Kafka Connect in Docker

The `debezium/connect` image recognizes the following JMX-related environment variables:

[cols="35%a,10%a,55%a",options="header,footer",role="table table-bordered table-striped"]
|=======================
|Environment Variable
|Default
|Description

|`JMXPORT`
|
|Required. The port number that will be used for JMX. The value is used to specify the JVM parameters `-Dcom.sun.management.jmxremote.port=$JMXPORT` and `-Dcom.sun.management.jmxremote.rmi.port=$JMXPORT`.

|`JMXHOST`
|
|Required. The IP address or resolvable hostname of the Docker host, which JMX uses to construct a URL sent to the JMX client. A value of `localhost` or `127.0.0.1` will not work. The value is used to specify the JVM parameter `-Djava.rmi.server.hostname=$JMXHOST`.

|`JMXAUTH`
|`false`
|Whether JMX clients must use password authentication when connecting. Must be either `true` or `false`. The value is used to specify the JVM parameter `-Dcom.sun.management.jmxremote.authenticate=$JMXAUTH`.

|`JMXSSL`
|`false`
|Whether JMX clients connect using SSL/TLS. Must be either `true` or `false`. The value is used to specify the JVM parameter `-Dcom.sun.management.jmxremote.ssl=$JMXSSL`.
|=======================

The following example Docker command start a container using the `debezium/connect` image with values for the `JMXPORT` and `HOST_NAME` environment variables, and maps the Docker host's port 9012 to the container's JMX port:

The Docker command to start a container using the `debezium/connect` image defines these variables using Docker's standard `-e` parameter, and maps the JMX port to a port on the Docker host. For example, the following command starts a container with JMX exposed on port 9011:

```
docker run -it --rm --name connect -p 8083:8083 -p 9012:9012 -e JMXPORT=9012 -e JMXHOST=10.0.1.10 -e GROUP_ID=1 -e CONFIG_STORAGE_TOPIC=my_connect_configs -e OFFSET_STORAGE_TOPIC=my_connect_offsets --link zookeeper:zookeeper --link kafka:kafka --link mysql:mysql debezium/connect:latest
```

== Prometheus and Grafana

The metrics exposed by Debezium and Apache Kafka are often exported and displayed via https://prometheus.io/[Prometheus] and https://grafana.com/[Grafana].
You can find an example for the required configuration and example dashboards for different connectors in the https://github.com/debezium/debezium-examples/tree/master/monitoring[Debezium examples repository].
Note these dashboards are not part of Debezium itself and are maintained on a best-effort basis.