You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

1283 lines
64 KiB

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="generator" content="Asciidoctor 2.0.10">
<meta name="author" content="Laborejo Software Suite">
<title>Patroneo</title>
<style>
/* Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
/* Uncomment @import statement to use as custom stylesheet */
/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}
audio,video{display:inline-block}
audio:not([controls]){display:none;height:0}
html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
a{background:none}
a:focus{outline:thin dotted}
a:active,a:hover{outline:0}
h1{font-size:2em;margin:.67em 0}
abbr[title]{border-bottom:1px dotted}
b,strong{font-weight:bold}
dfn{font-style:italic}
hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
mark{background:#ff0;color:#000}
code,kbd,pre,samp{font-family:monospace;font-size:1em}
pre{white-space:pre-wrap}
q{quotes:"\201C" "\201D" "\2018" "\2019"}
small{font-size:80%}
sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
sup{top:-.5em}
sub{bottom:-.25em}
img{border:0}
svg:not(:root){overflow:hidden}
figure{margin:0}
fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
legend{border:0;padding:0}
button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
button,input{line-height:normal}
button,select{text-transform:none}
button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
button[disabled],html input[disabled]{cursor:default}
input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
textarea{overflow:auto;vertical-align:top}
table{border-collapse:collapse;border-spacing:0}
*,*::before,*::after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
html,body{font-size:100%}
body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
a:hover{cursor:pointer}
img,object,embed{max-width:100%;height:auto}
object,embed{height:100%}
img{-ms-interpolation-mode:bicubic}
.left{float:left!important}
.right{float:right!important}
.text-left{text-align:left!important}
.text-right{text-align:right!important}
.text-center{text-align:center!important}
.text-justify{text-align:justify!important}
.hide{display:none}
img,object,svg{display:inline-block;vertical-align:middle}
textarea{height:auto;min-height:50px}
select{width:100%}
.center{margin-left:auto;margin-right:auto}
.stretch{width:100%}
.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr}
a{color:#2156a5;text-decoration:underline;line-height:inherit}
a:hover,a:focus{color:#1d4b8f}
a img{border:0}
p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
p aside{font-size:.875em;line-height:1.35;font-style:italic}
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
h1{font-size:2.125em}
h2{font-size:1.6875em}
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
h4,h5{font-size:1.125em}
h6{font-size:1em}
hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
em,i{font-style:italic;line-height:inherit}
strong,b{font-weight:bold;line-height:inherit}
small{font-size:60%;line-height:inherit}
code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
ul,ol{margin-left:1.5em}
ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
ul.square{list-style-type:square}
ul.circle{list-style-type:circle}
ul.disc{list-style-type:disc}
ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
dl dt{margin-bottom:.3125em;font-weight:bold}
dl dd{margin-bottom:1.25em}
abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
abbr{text-transform:none}
blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)}
blockquote cite::before{content:"\2014 \0020"}
blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)}
blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
@media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
h1{font-size:2.75em}
h2{font-size:2.3125em}
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
h4{font-size:1.4375em}}
table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede}
table thead,table tfoot{background:#f7f8f7}
table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
table tr.even,table tr.alt{background:#f8f8f7}
table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6}
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
.clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:" ";display:table}
.clearfix::after,.float-group::after{clear:both}
:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed;word-wrap:break-word}
:not(pre)>code.nobreak{word-wrap:normal}
:not(pre)>code.nowrap{white-space:nowrap}
pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed}
pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit}
pre>code{display:block}
pre.nowrap,pre.nowrap pre{white-space:pre;word-wrap:normal}
em em{font-style:normal}
strong strong{font-weight:400}
.keyseq{color:rgba(51,51,51,.8)}
kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
.keyseq kbd:first-child{margin-left:0}
.keyseq kbd:last-child{margin-right:0}
.menuseq,.menuref{color:#000}
.menuseq b:not(.caret),.menuref{font-weight:inherit}
.menuseq{word-spacing:-.02em}
.menuseq b.caret{font-size:1.25em;line-height:.8}
.menuseq i.caret{font-weight:bold;text-align:center;width:.45em}
b.button::before,b.button::after{position:relative;top:-1px;font-weight:400}
b.button::before{content:"[";padding:0 3px 0 2px}
b.button::after{content:"]";padding:0 2px 0 3px}
p a>code:hover{color:rgba(0,0,0,.9)}
#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
#header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
#header::after,#content::after,#footnotes::after,#footer::after{clear:both}
#content{margin-top:1.25em}
#content::before{content:none}
#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf}
#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}
#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
#header .details span:first-child{margin-left:-.125em}
#header .details span.email a{color:rgba(0,0,0,.85)}
#header .details br{display:none}
#header .details br+span::before{content:"\00a0\2013\00a0"}
#header .details br+span.author::before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
#header .details br+span#revremark::before{content:"\00a0|\00a0"}
#header #revnumber{text-transform:capitalize}
#header #revnumber::after{content:"\00a0"}
#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #dddddf;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
#toc{border-bottom:1px solid #e7e7e9;padding-bottom:.5em}
#toc>ul{margin-left:.125em}
#toc ul.sectlevel0>li>a{font-style:italic}
#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
#toc li{line-height:1.3334;margin-top:.3334em}
#toc a{text-decoration:none}
#toc a:active{text-decoration:underline}
#toctitle{color:#7a2518;font-size:1.2em}
@media screen and (min-width:768px){#toctitle{font-size:1.375em}
body.toc2{padding-left:15em;padding-right:0}
#toc.toc2{margin-top:0!important;background:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #e7e7e9;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
#toc.toc2>ul{font-size:.9em;margin-bottom:0}
#toc.toc2 ul ul{margin-left:0;padding-left:1em}
#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
body.toc2.toc-right{padding-left:0;padding-right:15em}
body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #e7e7e9;left:auto;right:0}}
@media screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
#toc.toc2{width:20em}
#toc.toc2 #toctitle{font-size:1.375em}
#toc.toc2>ul{font-size:.95em}
#toc.toc2 ul ul{padding-left:1.25em}
body.toc2.toc-right{padding-left:0;padding-right:20em}}
#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
#content #toc>:first-child{margin-top:0}
#content #toc>:last-child{margin-bottom:0}
#footer{max-width:100%;background:rgba(0,0,0,.8);padding:1.25em}
#footer-text{color:rgba(255,255,255,.8);line-height:1.44}
#content{margin-bottom:.625em}
.sect1{padding-bottom:.625em}
@media screen and (min-width:768px){#content{margin-bottom:1.25em}
.sect1{padding-bottom:1.25em}}
.sect1:last-child{padding-bottom:0}
.sect1+.sect1{border-top:1px solid #e7e7e9}
#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
#content h1>a.anchor::before,h2>a.anchor::before,h3>a.anchor::before,#toctitle>a.anchor::before,.sidebarblock>.content>.title>a.anchor::before,h4>a.anchor::before,h5>a.anchor::before,h6>a.anchor::before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
details>summary:first-of-type{cursor:pointer;display:list-item;outline:none;margin-bottom:.75em}
.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
.paragraph.lead>p,#preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
table.tableblock #preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:inherit}
.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
.admonitionblock>table td.icon{text-align:center;width:80px}
.admonitionblock>table td.icon img{max-width:none}
.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6)}
.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
.exampleblock>.content>:first-child{margin-top:0}
.exampleblock>.content>:last-child{margin-bottom:0}
.sidebarblock{border-style:solid;border-width:1px;border-color:#dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;-webkit-border-radius:4px;border-radius:4px}
.sidebarblock>:first-child{margin-top:0}
.sidebarblock>:last-child{margin-bottom:0}
.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
.literalblock pre,.listingblock>.content>pre{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;overflow-x:auto;padding:1em;font-size:.8125em}
@media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}}
@media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}}
.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class="highlight"],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
.literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)}
.listingblock>.content{position:relative}
.listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5}
.listingblock:hover code[data-lang]::before{display:block}
.listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5}
.listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
.listingblock pre.highlightjs{padding:0}
.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
.listingblock pre.prettyprint{border-width:0}
.prettyprint{background:#f7f7f8}
pre.prettyprint .linenums{line-height:1.45;margin-left:2em}
pre.prettyprint li{background:none;list-style-type:inherit;padding-left:0}
pre.prettyprint li code[data-lang]::before{opacity:1}
pre.prettyprint li:not(:first-child) code[data-lang]::before{display:none}
table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none}
table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal}
table.linenotable td.code{padding-left:.75em}
table.linenotable td.linenos{border-right:1px solid currentColor;opacity:.35;padding-right:.5em}
pre.pygments .lineno{border-right:1px solid currentColor;opacity:.35;display:inline-block;margin-right:.75em}
pre.pygments .lineno::before{content:"";margin-right:-.125em}
.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
.quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em}
.quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
.quoteblock blockquote{margin:0;padding:0;border:0}
.quoteblock blockquote::before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
.quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right}
.verseblock{margin:0 1em 1.25em}
.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
.verseblock pre strong{font-weight:400}
.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
.quoteblock .attribution br,.verseblock .attribution br{display:none}
.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
.quoteblock.abstract blockquote::before,.quoteblock.excerpt blockquote::before,.quoteblock .quoteblock blockquote::before{display:none}
.quoteblock.abstract blockquote,.quoteblock.abstract p,.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{line-height:1.6;word-spacing:0}
.quoteblock.abstract{margin:0 1em 1.25em;display:block}
.quoteblock.abstract>.title{margin:0 0 .375em;font-size:1.15em;text-align:center}
.quoteblock.excerpt>blockquote,.quoteblock .quoteblock{padding:0 0 .25em 1em;border-left:.25em solid #dddddf}
.quoteblock.excerpt,.quoteblock .quoteblock{margin-left:0}
.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{color:inherit;font-size:1.0625rem}
.quoteblock.excerpt .attribution,.quoteblock .quoteblock .attribution{color:inherit;text-align:left;margin-right:0}
table.tableblock{max-width:100%;border-collapse:separate}
p.tableblock:last-child{margin-bottom:0}
td.tableblock>.content>:last-child{margin-bottom:-1.25em}
td.tableblock>.content>:last-child.sidebarblock{margin-bottom:0}
table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
table.grid-all>thead>tr>.tableblock,table.grid-all>tbody>tr>.tableblock{border-width:0 1px 1px 0}
table.grid-all>tfoot>tr>.tableblock{border-width:1px 1px 0 0}
table.grid-cols>*>tr>.tableblock{border-width:0 1px 0 0}
table.grid-rows>thead>tr>.tableblock,table.grid-rows>tbody>tr>.tableblock{border-width:0 0 1px}
table.grid-rows>tfoot>tr>.tableblock{border-width:1px 0 0}
table.grid-all>*>tr>.tableblock:last-child,table.grid-cols>*>tr>.tableblock:last-child{border-right-width:0}
table.grid-all>tbody>tr:last-child>.tableblock,table.grid-all>thead:last-child>tr>.tableblock,table.grid-rows>tbody>tr:last-child>.tableblock,table.grid-rows>thead:last-child>tr>.tableblock{border-bottom-width:0}
table.frame-all{border-width:1px}
table.frame-sides{border-width:0 1px}
table.frame-topbot,table.frame-ends{border-width:1px 0}
table.stripes-all tr,table.stripes-odd tr:nth-of-type(odd),table.stripes-even tr:nth-of-type(even),table.stripes-hover tr:hover{background:#f8f8f7}
th.halign-left,td.halign-left{text-align:left}
th.halign-right,td.halign-right{text-align:right}
th.halign-center,td.halign-center{text-align:center}
th.valign-top,td.valign-top{vertical-align:top}
th.valign-bottom,td.valign-bottom{vertical-align:bottom}
th.valign-middle,td.valign-middle{vertical-align:middle}
table thead th,table tfoot th{font-weight:bold}
tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7}
tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
p.tableblock>code:only-child{background:none;padding:0}
p.tableblock{font-size:1em}
ol{margin-left:1.75em}
ul li ol{margin-left:1.5em}
dl dd{margin-left:1.125em}
dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
ul.unstyled,ol.unstyled{margin-left:0}
ul.checklist{margin-left:.625em}
ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
ul.checklist li>p:first-child>input[type="checkbox"]:first-child{margin-right:.25em}
ul.inline{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
ul.inline>li{margin-left:1.25em}
.unstyled dl dt{font-weight:400;font-style:normal}
ol.arabic{list-style-type:decimal}
ol.decimal{list-style-type:decimal-leading-zero}
ol.loweralpha{list-style-type:lower-alpha}
ol.upperalpha{list-style-type:upper-alpha}
ol.lowerroman{list-style-type:lower-roman}
ol.upperroman{list-style-type:upper-roman}
ol.lowergreek{list-style-type:lower-greek}
.hdlist>table,.colist>table{border:0;background:none}
.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
td.hdlist1{font-weight:bold;padding-bottom:1.25em}
.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
.colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
.colist td:not([class]):first-child img{max-width:none}
.colist td:not([class]):last-child{padding:.25em 0}
.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
.imageblock.left{margin:.25em .625em 1.25em 0}
.imageblock.right{margin:.25em 0 1.25em .625em}
.imageblock>.title{margin-bottom:0}
.imageblock.thumb,.imageblock.th{border-width:6px}
.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
.image.left{margin-right:.625em}
.image.right{margin-left:.625em}
a.image{text-decoration:none;display:inline-block}
a.image object{pointer-events:none}
sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
sup.footnote a,sup.footnoteref a{text-decoration:none}
sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline}
#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0}
#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em}
#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
#footnotes .footnote:last-of-type{margin-bottom:0}
#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
.gist .file-data>table td.line-data{width:99%}
div.unbreakable{page-break-inside:avoid}
.big{font-size:larger}
.small{font-size:smaller}
.underline{text-decoration:underline}
.overline{text-decoration:overline}
.line-through{text-decoration:line-through}
.aqua{color:#00bfbf}
.aqua-background{background:#00fafa}
.black{color:#000}
.black-background{background:#000}
.blue{color:#0000bf}
.blue-background{background:#0000fa}
.fuchsia{color:#bf00bf}
.fuchsia-background{background:#fa00fa}
.gray{color:#606060}
.gray-background{background:#7d7d7d}
.green{color:#006000}
.green-background{background:#007d00}
.lime{color:#00bf00}
.lime-background{background:#00fa00}
.maroon{color:#600000}
.maroon-background{background:#7d0000}
.navy{color:#000060}
.navy-background{background:#00007d}
.olive{color:#606000}
.olive-background{background:#7d7d00}
.purple{color:#600060}
.purple-background{background:#7d007d}
.red{color:#bf0000}
.red-background{background:#fa0000}
.silver{color:#909090}
.silver-background{background:#bcbcbc}
.teal{color:#006060}
.teal-background{background:#007d7d}
.white{color:#bfbfbf}
.white-background{background:#fafafa}
.yellow{color:#bfbf00}
.yellow-background{background:#fafa00}
span.icon>.fa{cursor:default}
a span.icon>.fa{cursor:inherit}
.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
.admonitionblock td.icon .icon-note::before{content:"\f05a";color:#19407c}
.admonitionblock td.icon .icon-tip::before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
.admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
.admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
.admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
.conum[data-value] *{color:#fff!important}
.conum[data-value]+b{display:none}
.conum[data-value]::after{content:attr(data-value)}
pre .conum[data-value]{position:relative;top:-.125em}
b.conum *{color:inherit!important}
.conum:not([data-value]):empty{display:none}
dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
p{margin-bottom:1.25rem}
.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
.print-only{display:none!important}
@page{margin:1.25cm .75cm}
@media print{*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
html{font-size:80%}
a{color:inherit!important;text-decoration:underline!important}
a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
abbr[title]::after{content:" (" attr(title) ")"}
pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
thead{display:table-header-group}
svg{max-width:100%}
p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
#toc,.sidebarblock,.exampleblock>.content{background:none!important}
#toc{border-bottom:1px solid #dddddf!important;padding-bottom:0!important}
body.book #header{text-align:center}
body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em}
body.book #header .details{border:0!important;display:block;padding:0!important}
body.book #header .details span:first-child{margin-left:0!important}
body.book #header .details br{display:block}
body.book #header .details br+span::before{content:none!important}
body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
.listingblock code[data-lang]::before{display:block}
#footer{padding:0 .9375em}
.hide-on-print{display:none!important}
.print-only{display:block!important}
.hide-for-print{display:none!important}
.show-for-print{display:inherit!important}}
@media print,amzn-kf8{#header>h1:first-child{margin-top:1.25rem}
.sect1{padding:0!important}
.sect1+.sect1{border:0}
#footer{background:none}
#footer-text{color:rgba(0,0,0,.6);font-size:.9em}}
@media amzn-kf8{#header,#content,#footnotes,#footer{padding:0}}
</style>
</head>
<body class="article toc2 toc-left">
<div id="header">
<h1>Patroneo</h1>
<div class="details">
<span id="author" class="author">Laborejo Software Suite</span><br>
</div>
<div id="toc" class="toc2">
<div id="toctitle">Table of Contents</div>
<ul class="sectlevel1">
<li><a href="#_introduction">1. Introduction</a>
<ul class="sectlevel2">
<li><a href="#_quick_start">1.1. Quick Start</a></li>
<li><a href="#_basic_principles">1.2. Basic Principles</a></li>
<li><a href="#_keyboard_controls">1.3. Keyboard Controls</a></li>
</ul>
</li>
<li><a href="#_description_of_the_graphical_user_interface_and_its_functions">2. Description of the graphical user interface and its functions</a>
<ul class="sectlevel2">
<li><a href="#_toolbar">2.1. Toolbar</a></li>
<li><a href="#_form_editor">2.2. Form Editor</a></li>
<li><a href="#_pattern_editor">2.3. Pattern Editor</a>
<ul class="sectlevel3">
<li><a href="#_pattern_context_menu">2.3.1. Pattern Context Menu</a></li>
<li><a href="#_duration_and_volume">2.3.2. Duration and Volume</a></li>
<li><a href="#_pitches_and_scales">2.3.3. Pitches and Scales</a></li>
<li><a href="#_shadows">2.3.4. Shadows</a></li>
</ul>
</li>
<li><a href="#_grouping_in_the_pattern">2.4. Grouping in the Pattern</a></li>
</ul>
</li>
<li><a href="#_installation_and_start">3. Installation and Start</a></li>
<li><a href="#_help_and_development">4. Help and Development</a>
<ul class="sectlevel2">
<li><a href="#_testing_and_reporting_errors">4.1. Testing and Reporting Errors</a></li>
<li><a href="#_programming">4.2. Programming</a></li>
<li><a href="#_translations">4.3. Translations</a></li>
</ul>
</li>
</ul>
</div>
</div>
<div id="content">
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>For program version 1.6.1</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_introduction">1. Introduction</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Patroneo (which is Esperanto for "Pattern") is an easy to use, pattern based midi sequencer, a
program that sends digital "notes" to software instruments such as synthesizers and samplers.</p>
</div>
<div class="paragraph">
<p>Patroneo is primarily designed for educational purposes, where the main goal is to teach the
importance of patterns and repetitions in any kind of music. However, Patroneo is a full sequencer
you can use to create real music. The constraints it presents will more likely boost your
creativity than suppressing it.</p>
</div>
<div class="paragraph">
<p>You have tracks with one pattern each. Turn on steps in the pattern to play
musical notes. Switch the patterns on and off in a sequence to create a song structure.
Connect external synthesizers and samplers to create sounds.</p>
</div>
<div class="sect2">
<h3 id="_quick_start">1.1. Quick Start</h3>
<div class="paragraph">
<p>To get to know the most important functions and workflows, this video has been created.</p>
</div>
<div class="videoblock">
<div class="content">
<video src="https://www.laborejo.org/documentation/patroneo/patroneo-quickstart-english.mp4" width="500" controls>
Your browser does not support the video tag.
</video>
</div>
</div>
<div class="paragraph">
<p>Or as Youtube Mirror</p>
</div>
<div class="videoblock">
<div class="content">
<iframe width="500" src="https://www.youtube.com/embed/ygpwn0gzO8g?rel=0" frameborder="0" allowfullscreen></iframe>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_basic_principles">1.2. Basic Principles</h3>
<div class="paragraph">
<p>Patroneo organizes its music in tracks that contain measures. All measures of a track play the same
"pattern" that creates music through a sequence of "steps".</p>
</div>
<div class="paragraph">
<p>The track is connected to an instrument through JACK, so Patroneo itself does not produce any
sounds.</p>
</div>
<div class="paragraph">
<p>If you press Play, the track plays back from left to right. Whenever a measure is highlighted in
the Form Editor, the pattern is played.</p>
</div>
<div class="paragraph">
<p>If you want to hear different patterns from the same instrument, you create several tracks for the
same JACK instrument.</p>
</div>
<div class="paragraph">
<p>The selection of the tones per pattern is freely selectable. You can use normal musical scales or
set any tones in any order. If you change the scale later, the pattern sounds different without
having to switch tones on and off again.</p>
</div>
<div class="paragraph">
<p>Saving and loading your project is done by the New Session Manager (Agordejo). There you will find
a "Save" button.</p>
</div>
</div>
<div class="sect2">
<h3 id="_keyboard_controls">1.3. Keyboard Controls</h3>
<div class="paragraph">
<p>In principle, Patroneo can be operated with the mouse. The keyboard is needed for only a few
functions, such as changing track names or setting half-tone transposition. However, the keyboard
makes some workflows faster and more convenient.</p>
</div>
<div class="ulist">
<div class="title">Shortcuts</div>
<ul>
<li>
<p>Space: Start and pause playback</p>
</li>
<li>
<p>L: Play the current measure as a loop</p>
</li>
<li>
<p>Home: Set playback to the beginning of the track.</p>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_description_of_the_graphical_user_interface_and_its_functions">2. Description of the graphical user interface and its functions</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Use your browser&#8217;s search function to locate the individual letters like [B] and their explanation.</p>
</div>
<div class="imageblock">
<div class="content">
<a class="image" href="overview-english.png"><img src="overview-english.png" alt="Screenshot with Captions"></a>
</div>
</div>
<div class="paragraph">
<p>Patroneo consists of three parts: The Toolbar, the Form Editor, and the Pattern Editor. Between
form- and pattern editor there is a <strong>[L] Handle</strong> which you can grab with the left mouse button and
move it up or down to give more space to one or the other area.</p>
</div>
<div class="sect2">
<h3 id="_toolbar">2.1. Toolbar</h3>
<div class="paragraph">
<p>The <strong>[A] Toolbar</strong> combines various commands with properties of the entire piece.</p>
</div>
<div class="paragraph">
<p><strong>[D] Clone Selected Track</strong> adds a new track based on the currently selected one. This is an
important and often used command that is mainly used to enable variants. The cloned track is empty,
but inherits the scale of the original, its average velocity or volume, color and name. If the name
ends in a single letter like "A", "g" or a number, it is automatically incremented, as you can see
in the screenshot. The new track automatically connects to the same JACK instrument.</p>
</div>
<div class="paragraph">
<p><strong>[E] Add Track</strong> adds an empty track. It is given a random name and is not connected in JACK. Scale,
note-names etc. will be taken from the currently selected track.</p>
</div>
<div class="paragraph">
<p><strong>[F] BPM / Tempo</strong>: The tempo can be completely deactivated by unchecking the box. In this case, the
"JACK Transport" system takes over, as indicated by the "JACK" logo in the deactivated input field.
This allows programs running in parallel to create complex tempo sequences, which is not possible
in Patroneo alone. If the checkbox is activated, the specified tempo is considered to be beats per
minute. A "beat" is the selected note value of the list [H]. More on that later.</p>
</div>
<div class="paragraph">
<p><strong>[G] Measures per Track</strong> controls the total length of the piece, whereby the absolute number of
seconds can change depending on how the tempo is selected and how long a measure should be. If the
number of measures is reduced, no measures are actually deleted, but just ignored. If you later set
the number of measures higher again, you will get your old configuration back. Patroneo nevers
stops playback on its own. Especially in a JACK-transport environment it will continue playing even
after its own end.</p>
</div>
<div class="paragraph">
<p><strong>[H] Steps per Pattern, in groups of &#8230;&#8203; so that each group produces a &#8230;&#8203;</strong> note. Here you can set
how long the patterns are and what grouping below the beat they have. This is the most complicated
part in Patroneo and will be discussed later in this manual. For now it is recommended to ignore
the "groups" field. Steps per Pattern is simply the number of tones that can be switched on and
off. The drop down list selects how long each of these steps is.</p>
</div>
<div class="paragraph">
<p><strong>[I] Playback Controls</strong> are three buttons. From left to right:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Play / Pause. Press to play or pause the music at the current location. You can also press the space bar.</p>
</li>
<li>
<p>Loop on and off. The currently played measure (in all tracks) is continuously repeated. This function is suitable for working in a certain place by getting to hear your changes quickly. The loop is broken up by pressing the button again or jumping around in the timeline (see letter Z below).</p>
</li>
<li>
<p>To the start: Jumps back to the beginning, whether the music is playing or not.</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_form_editor">2.2. Form Editor</h3>
<div class="paragraph">
<p>In the <strong>[B] Form Editor</strong> you create the structure of a piece. To do this, the measures in each
track can be switched on and off as desired. One can imagine, for example, a drum set that plays
three bars in a row and makes a "break" every fourth bar. For this common drum technique you need
two tracks. In the screenshot this "3+1" pattern can be seen in the third section (bars 17 to 24)
in the orange bass track.</p>
</div>
<div class="paragraph">
<p>Whole parts (e.g. verse and chorus) are implemented by using different
tracks. To make the creation of related tracks as comfortable as possible, the "clone" command
exists (see letter D).</p>
</div>
<div class="paragraph">
<p>It is possible to zoom in on the measures. To do this, hold down the <strong>CTRL</strong> key and turn the mouse
wheel up or down. Please make sure that the mouse cursor is actually over the measures and not over
the track names or on the timeline.</p>
</div>
<div class="paragraph">
<p><strong>[Z] Timeline</strong>: a click with the left mouse button sets the playback position, even during
playback. In addition, the measure groups (not to be confused with grouping in the pattern, see
letter H) can be seen and set here. If you hover over the timeline with the mouse cursor, you can
reduce or increase the size of the groups with the mouse wheel. The groups not only have an
cosmetical function but are also used as units of measurement if you want to delete or add entire
ranges (see letter K).</p>
</div>
<div class="paragraph">
<p><strong>[J] Track Names</strong>. Here you can move tracks, rename them, give them a different color and more:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>A single click with the left mouse button on a name selects a track without changing anything. This is the best way to just look at a track. (A click on the measure area changes a measure immediately!)</p>
</li>
<li>
<p>The double arrow on the far left can be used to move tracks up and down to organize them. It has no effect on the sound or the JACK connections. To move, click on the arrow with the left mouse button, hold it down and move the mouse up and down.</p>
</li>
<li>
<p>The colored square shows the current color. A left mouse click opens a dialog.</p>
</li>
<li>
<p>Track names can be changed at any time by a double-clicking with the left mouse button. Press the Return key to finish renaming. The JACK connection is retained when renaming. It is a good habit to end tracks on a single letter or number. These are used in "cloning" to construct a variant of the name. See the screenshot above.</p>
</li>
<li>
<p>A click with the right mouse button on a name opens the context menu of a track. Here you can</p>
<div class="ulist">
<ul>
<li>
<p>Switch all measures on or off (only applies to the visible measures)</p>
</li>
<li>
<p>Invert the activated measures: Off becomes On and vice versa.</p>
</li>
<li>
<p>Clone this track (same function as in the toolbar)</p>
</li>
<li>
<p>Delete the track permanently and irreversibly</p>
</li>
<li>
<p>Copy the measure sequence of another track onto the selected one. Measures that have already been set are preserved. If you use this function from an empty track you will practically get "copy track".</p>
</li>
</ul>
</div>
</li>
</ul>
</div>
<div class="paragraph">
<p>Now finally the <strong>[K] Track</strong> itself. A left click on a measure switches it on or off again. You can
switch several measures in a row on and off by holding down the left mouse button after clicking
and moving the mouse left or right. A right click on a specific measure opens a context menu:
Insert new measures in all tracks(!) at this position or delete measures from all tracks. The
number of measures results from the current measure group setting from the time line (see letter
Z).</p>
</div>
<div class="paragraph">
<p>These functions are especially understandable if you apply them to the first measure of a
group (after the white line). This allows you to insert new "parts" or delete an entire part.</p>
</div>
<div class="paragraph">
<p>A good method is also to change the group size for these functions briefly and then reset them
immediately afterwards.</p>
</div>
<div class="paragraph">
<p><strong>[X] Half Tone Transposition</strong> is adjusted by holding down the SHIFT key and then turning the mouse
wheel up or down over an activated measure. In the measure itself a small text appears, e.g. +5h.
Five semitones upwards; C becomes F, MIDI note 60 becomes 65; the transposition is only valid for
the respective measure and is not visible in the pattern itself (see below). If the measure is
switched off (and on again), the transposition is deleted.</p>
</div>
<div class="paragraph">
<p><strong>[Y] In-Scale Transposition</strong>. It is recommended to familiarize yourself with the pattern and its
scale (see letters O to R) first. Are you back? All right, here we go: If you hold the mouse cursor
over an activated measure, you can adjust the transposition, based on the scale, with the mouse
wheel up or down. The label shows how many steps up or down (-6s to +6s) this measure is shifted.
If the measure is switched off, the transposition also disappears. In the pattern itself (see
below) you cannot see whether a measure is transposed or not.</p>
</div>
<div class="paragraph">
<p>One can imagine that the steps in the pattern are shifted up or down in the rows behind the scenes.
Whatever tone is set in this row gets played. With a normal scale, this is musically easy to
understand: The tones are moved up or down in the scale.</p>
</div>
<div class="paragraph">
<p>However, if the scale is chosen freely,
there are non-intuitive outcomes; "up and down" with respect to pitches may lose their meaning. It
is possible to use two interleaved scales in the pattern and to switch between them by scale
transposition +1. Or even uses completely different tones, so that only the rhythm remains the
same.</p>
</div>
<div class="paragraph">
<p>Scale and half-tone transposition can be combined. First the scale is changed, then the semitone.
These combinations open up many creative possibilities!</p>
</div>
</div>
<div class="sect2">
<h3 id="_pattern_editor">2.3. Pattern Editor</h3>
<div class="paragraph">
<p>The <strong>[C] Pattern Editor</strong> is used for composing. The tones, also called "steps", are used to form a
measure. The pattern is exactly as long as a measure and is played from left to right. There are
several possibilities for tonal arrangement, which are now explained.</p>
</div>
<div class="paragraph">
<p>The pattern is always as long as set in the toolbar (see letter H). Steps that have been set are
never deleted by rezising! If you make the measures shorter, tones "too far to the right" are
simply ignored. You can see them again as soon as you make the measures longer again.</p>
</div>
<div class="paragraph">
<p>If the pattern is larger than the screen you can either use the scroll bars or zoom. To zoom hold
down the <strong>CTRL</strong> key and turn the mouse wheel up or down.</p>
</div>
<div class="paragraph">
<p>At the top you can see a label for the <strong>[M] Active Track</strong>.</p>
</div>
<div class="paragraph">
<p>The pattern itself is arranged in rows and columns. The rows symbolise the (adjustable) pitches,
the columns show their rhythmic sequence and position in time.</p>
</div>
<div class="sect3">
<h4 id="_pattern_context_menu">2.3.1. Pattern Context Menu</h4>
<div class="paragraph">
<p>A right click on a step opens a context menu that provides the following exclusive functions. For
all functions that reverse or invert ("On" becomes "Off" and vice versa), please note that all
volume information (see below) is lost.</p>
</div>
<div class="paragraph">
<p>"Row" here refer to all steps of the same pitch. From left to right.</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Invert row (an empty row is completely filled)</p>
</li>
<li>
<p>Clear row</p>
</li>
<li>
<p>Repeat to here to fill row (see below)</p>
</li>
<li>
<p>Invert Steps (the whole pattern)</p>
</li>
<li>
<p>All Steps On</p>
</li>
<li>
<p>All Steps Off</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>The function "Repeat to here to fill row" opens up many creative possibilities: All steps from the
beginning of the row to the selected one (incl.) are taken as a "sub-pattern" which is used to fill
the rest of the row. All existing steps will be deleted with their volumes.</p>
</div>
<div class="paragraph">
<p>For example, if you want a note every fourth step, activate the first step of the row, leave three
empty and click on the fourth step as context menu and select the fill function. The whole row will
now be a recurring pattern of "X o o o X o o o&#8230;&#8203;".</p>
</div>
</div>
<div class="sect3">
<h4 id="_duration_and_volume">2.3.2. Duration and Volume</h4>
<div class="paragraph">
<p>A <strong>[S] Step</strong> is a grey or coloured box. Grey means pause, coloured means <strong>[T] Sounding Tone</strong>. A
click with the left mouse button switches the steps on and off. A right click opens the context
menu. Here you can switch all (currently visible) steps on, off or invert all: Off On becomes Off
and vice versa. All volume information (see below) will be lost.</p>
</div>
<div class="paragraph">
<p>All steps are equal length. <strong>[V] Other Durations</strong> are also possible: If you hold down the left
mouse button after activating a step, you can shorten or lengthen the tone by moving it to the left
or right. It must be at least half the length. A tone is at most as long as the measure itself.</p>
</div>
<div class="paragraph">
<p>You can activate as many steps in a row or simultaneously as you like. Thus <strong>[W] Chords</strong> can be
built.</p>
</div>
<div class="paragraph">
<p>Steps can have different <strong>[U] Volumes</strong>. For this Patroneo uses so-called MIDI Velocity. If you hold
the mouse cursor over an activated step, you can make its sound softer or louder by turning the
mouse wheel. The volumes are displayed as numbers between 1 and 127. If you want to see all volumes
at once you can click with the mouse wheel (middle mouse button) into the free area left or right
of the pattern. In addition, a step looks more transparent the quieter it is. If the step is
switched on and off, the volume is set back to the normal value, derived from the average volume of
all tones of this pattern.</p>
</div>
<div class="paragraph">
<p>You can use the <strong>[M] Velocity</strong> buttons to make all tones of a pattern quieter or louder. If you
click on it, the volume changes by 1 each, but if you hold the mouse cursor over a button and
rotate your mouse wheel the velocity changes by 10 each. It doesn&#8217;t matter which velocity button
(plus or minus) you hover over.</p>
</div>
<div class="paragraph">
<p>To make all tones of a row quieter or louder hold the Alt key (not AltGr) and use your mousewheel
on a step of that row.</p>
</div>
</div>
<div class="sect3">
<h4 id="_pitches_and_scales">2.3.3. Pitches and Scales</h4>
<div class="paragraph">
<p>Click with the middle mouse button on a step to hear the sound it plays. This allows you to
"pre-listen" before you decide to set a note. Tip: Hold down the middle mouse button and move the
mouse up and down the steps.</p>
</div>
<div class="paragraph">
<p>Which actual pitch is played ("MIDI Key") is determined by the <strong>[R] Scale</strong>. Patroneo always works
with eight-note scales. Normally, this is a common musical scale: seven different notes and the
octave of the root note.</p>
</div>
<div class="paragraph">
<p>Such common <strong>[Q] Scales</strong> can be selected directly. For example, major, minor, various so-called
"church modes" but also the blues scale or chromatic (e.g. to GM drum mapping).</p>
</div>
<div class="paragraph">
<p>If you select a scale from the list, it will be built upon the bottom row. As a rule of thumb this
is also the lowest note. In the screenshot this is midi note 60 / C4, located bottom left. You must
first select the root directly and then select a <strong>[Q] Scale</strong>.</p>
</div>
<div class="paragraph">
<p>There are four buttons to change the pitch of both the root note and the entire scale:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><strong>[O] Half Tone</strong> Plus or minus shifts the whole scale up or down by one semitone each. This should not be confused with the temporary transposition from the form editor (see letter X). This is called destructive change, since the values themselves are permanently changed.</p>
</li>
<li>
<p><strong>[P] Octave</strong> Plus or minus shifts directly by a whole octave. You could also press the half-tone button 12 times. Don&#8217;t.</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>As already described in the scale transposition (see letter Y), it is also possible to directly
input any value between 0 and 127 in the <strong>[R] Fields of the Scale</strong>. The tones do not have to have
musically meaningful intervals, nor do they have to be sorted in ascending or descending order.</p>
</div>
</div>
<div class="sect3">
<h4 id="_shadows">2.3.4. Shadows</h4>
<div class="paragraph">
<p>Often you want to add more tones to an existing track in a different pattern. A second voice,
question/answer technique etc. To help you, it is possible to display other tracks as <strong>[2]
Shadows</strong>. Just click with the middle mouse button on the track you want to see. This is only
possible in the measure area, not on the track name or on the timeline.</p>
</div>
<div class="paragraph">
<p>You can display as many shadows as you want, until you lose track. All shadows disappear as soon as
the active track changes.</p>
</div>
<div class="paragraph">
<p>Shadows are just a guidance and not litereal pitches: If you choose a shadow-track with a different
scale than your current one the shadow-pitches will be technically wrong. Shadows are very simple
in principle. They just show which steps are marked, nothing more.</p>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_grouping_in_the_pattern">2.4. Grouping in the Pattern</h3>
<div class="paragraph">
<p>Grouping is part of the time signature.</p>
</div>
<div class="paragraph">
<p>As mentioned above <strong>steps per pattern</strong>, sets the length of the pattern. Patroneo starts with 8
steps per measure for a new project (see screenshot). On the far right is a drop down list, which
is set to "Quarter" for a new project. You start with a traditional 8/4 time signature.</p>
</div>
<div class="paragraph">
<p>The field <strong>in groups of</strong> allows you to group steps together, each group being as long as specified
in the drop down list. This allows you to further subdivide your time signature. The "beat", i.e.
the tempo, is based on the main beats, the first step of each group.</p>
</div>
<div class="ulist">
<div class="title">Examples</div>
<ul>
<li>
<p>4/4 time signature with eights notes as smallest rhythmical unit</p>
<div class="ulist">
<ul>
<li>
<p>8 steps per pattern / in groups of 2 / so that each group produces a quarter</p>
</li>
</ul>
</div>
</li>
<li>
<p>4/4 time signature subdivided as triplet eights notes (swing)</p>
<div class="ulist">
<ul>
<li>
<p>9 steps per pattern / in groups of 3 / so that each group produces a quarter</p>
</li>
</ul>
</div>
</li>
<li>
<p>12/8 time signature</p>
<div class="ulist">
<ul>
<li>
<p>12 steps per pattern / in groups of 1 / so that each group produces an eigth</p>
</li>
</ul>
</div>
</li>
<li>
<p>8/4 time signature subdivided as sixteenth notes</p>
<div class="ulist">
<ul>
<li>
<p>32 steps per pattern / in groups of 4 / so that each group produces a quarter</p>
</li>
</ul>
</div>
</li>
</ul>
</div>
<div class="paragraph">
<p>Normally, the time signature is set relatively at the beginning of a new project. However, it
happens every now and then that you need smaller rhythm values than you thought at the beginning.
If you simply increase the value of the grouping, you get more subdivisions, but the number of
steps remains the same. Likewise, the notes remain exactly in the "column" in which they were
previously placed. In other words, the music will sound different. Overall, the measure is also
getting shorter, since the same number of steps is now used for shorter steps.</p>
</div>
<div class="paragraph">
<p>Patroneo therefore offers the function <strong>Convert Grouping</strong> (in the Edit menu) to change the existing
measure structure and to resize steps already set so that the music sounds the same.</p>
</div>
<div class="paragraph">
<p>If you click on the button in the toolbar, a small dialog box opens in which you can enter the
desired grouping. It is also possible to set what should happen if the conversion would not work
properly for musical reasons (see below).</p>
</div>
<div class="paragraph">
<p>Conversion is often possible without any problems:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>If the grouping of <code>1</code> is set to a higher value, it always works</p>
</li>
<li>
<p>If the grouping is set from <code>2</code> to <code>4</code> it always works</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>For all other transformations it depends on whether the existing tones lie between the new grid
after the conversion or not. The former case is not possible and you have to decide:</p>
</div>
<div class="ulist">
<div class="title">Error Handling</div>
<ul>
<li>
<p>Do nothing (default)</p>
<div class="ulist">
<ul>
<li>
<p>The operation is aborted, everything remains as before.</p>
</li>
</ul>
</div>
</li>
<li>
<p>Delete wrong steps</p>
<div class="ulist">
<ul>
<li>
<p>Anything that would appear between the grid will be deleted or discarded.</p>
</li>
</ul>
</div>
</li>
<li>
<p>Merge wrong steps</p>
<div class="ulist">
<ul>
<li>
<p>Impossible positions are moved to the next possible position. In any case, this means that the music now sounds different. Usually several notes are pushed on top of each other and form chords.</p>
</li>
</ul>
</div>
</li>
</ul>
</div>
<div class="paragraph">
<p>With a little experience you will be able to estimate what error handling you need.</p>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_installation_and_start">3. Installation and Start</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Patroneo is exclusive for Linux. The best way to install is to use your package manager.
If it is not there, or only in an outdated version, please ask your Linux distribution to provide a recent version.</p>
</div>
<div class="paragraph">
<p>If available in the package repository, please continue reading directly at "Start patroneo from Agordejo / New Session Manager".
If not, you can build Patroneo yourself.</p>
</div>
<div class="ulist">
<div class="title">Build and Install</div>
<ul>
<li>
<p>Please check the supplied README.md for dependencies.</p>
</li>
<li>
<p>You can download a release or clone the git version</p>
<div class="ulist">
<ul>
<li>
<p>Download the latest version from <a href="https://www.laborejo.org/downloads" class="bare">https://www.laborejo.org/downloads</a> and extract it.</p>
</li>
<li>
<p>git clone <a href="https://git.laborejo.org/lss/patroneo.git" class="bare">https://git.laborejo.org/lss/patroneo.git</a></p>
</li>
</ul>
</div>
</li>
<li>
<p>Change into the new directory and use these commands:</p>
</li>
<li>
<p><code>./configure --prefix=/usr</code></p>
<div class="ulist">
<ul>
<li>
<p>The default prefix is /usr/local</p>
</li>
</ul>
</div>
</li>
<li>
<p><code>make</code></p>
</li>
<li>
<p><code>sudo make install</code></p>
</li>
</ul>
</div>
<div class="ulist">
<div class="title">Start patroneo from Agordejo (New Session Manager, NSM)</div>
<ul>
<li>
<p>Run <code>agordejo</code></p>
</li>
<li>
<p>Press the <code>New</code> button, and enter a name for your piece of music.</p>
</li>
<li>
<p>Use the launcher to add <code>patroneo</code> to the session.</p>
</li>
<li>
<p>Add any compatible programs, e.g. synthesizers.</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Please read README.md for other ways of starting patroneo, which are impractical for actual use but can
be helpful for testing and development.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_help_and_development">4. Help and Development</h2>
<div class="sectionbody">
<div class="paragraph">
<p>You can help Patroneo in several ways: Testing and reporting errors, translating, marketing, support, programming and more.</p>
</div>
<div class="sect2">
<h3 id="_testing_and_reporting_errors">4.1. Testing and Reporting Errors</h3>
<div class="paragraph">
<p>If you find a bug in the program (or it runs too slow) please contact us in a way that suits you best.
We are thankful for any help.</p>
</div>
<div class="ulist">
<div class="title">How to contact us</div>
<ul>
<li>
<p>Report bugs and issues: <a href="https://www.laborejo.org/bugs" class="bare">https://www.laborejo.org/bugs</a></p>
</li>
<li>
<p>Website: <a href="https://www.laborejo.org" class="bare">https://www.laborejo.org</a></p>
</li>
<li>
<p>E-Mail: <a href="mailto:info@laborejo.org">info@laborejo.org</a></p>
</li>
<li>
<p>If you see the opportunity and know that a developer will read it also forums, social media etc..</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_programming">4.2. Programming</h3>
<div class="paragraph">
<p>If you want to do some programming and don&#8217;t know where to start please get in contact with us directly.
The short version is: clone the git, change the code, create a git patch or point me to your public git.</p>
</div>
</div>
<div class="sect2">
<h3 id="_translations">4.3. Translations</h3>
<div class="paragraph">
<p>Patroneo is very easy to translate with the help of the Qt-Toolchain, without any need for programming.
The easiest way is to contact the developers and they will setup the new language.</p>
</div>
<div class="paragraph">
<p>However, here are the complete instructions for doing a translation completely on your own and integrating it into the program.
The program is split in two parts. A shared "template" between the Laborejo Software Suite and the actual program.</p>
</div>
<div class="paragraph">
<p>The process is the same for both parts, but needs to be done in different directories:
<code>template/qtgui</code> and plain <code>/qtgui</code>, relative to the root directory, where the patroneo executable is.</p>
</div>
<div class="paragraph">
<p>Everytime you see "template/qtgui" below you can substitute that with just "qtgui" to translate the other part of Patroneo.</p>
</div>
<div class="paragraph">
<p>You can add a new language like this:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Open a terminal and navigate to template/qtgui/resources/translations</p>
</li>
<li>
<p>Edit the file <code>config.pro</code> with a text editor</p>
<div class="ulist">
<ul>
<li>
<p>Append the name of your language in the last line, in the form <code>XY.ts</code>, where XY is the language code.</p>
</li>
<li>
<p>Make sure to leave a space between the individual languages entries.</p>
</li>
</ul>
</div>
</li>
<li>
<p>Run <code>sh update.sh</code> in the same directory</p>
<div class="ulist">
<ul>
<li>
<p>The program has now generated a new <code>.ts</code> file in the same directory.</p>
</li>
</ul>
</div>
</li>
<li>
<p>Start Qt Linguist with <code>linguist-qt5</code> (may be named differently) and open your newly generated file</p>
</li>
<li>
<p>Select your "Target Language" and use the program to create a translation</p>
</li>
<li>
<p>Send us the <code>.ts</code> file, such as by e-mail to <a href="mailto:info@laborejo.org">info@laborejo.org</a></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>You can also incorporate the translation into Patroneo for testing purposes. This requires rudimentary Python knowledge.</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Run the "Release" option in QtLinguists "File" menu. It creates a <code>.qm</code> file in the same directory as your <code>.ts</code> file.</p>
</li>
<li>
<p>Edit <code>template/qtgui/resources/resources.qrc</code> and duplicate the line <code>&lt;file&gt;translations/de.qm&lt;/file&gt;</code> but change it to your new .qm file.</p>
</li>
<li>
<p>run <code>sh buildresources.sh</code></p>
</li>
<li>
<p>Edit <code>engine/config.py</code>: add your language to the line that begins with "supportedLanguages" like this: <code>{"German": "de.qm", "Esperanto: "eo.qm"}</code></p>
<div class="ulist">
<ul>
<li>
<p>To find out your language string (German, Esperanto etc.) open the <code>python3</code> interpreter in a terminal and run the following command:</p>
</li>
<li>
<p><code>from PyQt5 import QtCore;QtCore.QLocale().languageToString(QtCore.QLocale().language())</code></p>
</li>
</ul>
</div>
</li>
</ul>
</div>
<div class="paragraph">
<p>To test the new translation you can either run the program normally, if your system is set to that language. Alternatively start patroneo via the terminal:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>LANGUAGE=de_DE.UTF-8 ./patroneo -V --save /dev/null</code></p>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
<div id="footer">
<div id="footer-text">
Last updated 2020-07-24 13:17:53 +0200
</div>
</div>
</body>
</html>