relpipe-data/release-v0.18.xml
branchv_0
changeset 329 5bc2bb8b7946
parent 319 2a5f26e69a76
equal deleted inserted replaced
328:cc60c8dd7924 329:5bc2bb8b7946
       
     1 <stránka
       
     2 	xmlns="https://trac.frantovo.cz/xml-web-generator/wiki/xmlns/strana"
       
     3 	xmlns:m="https://trac.frantovo.cz/xml-web-generator/wiki/xmlns/makro">
       
     4 	
       
     5 	<nadpis>Release v0.18</nadpis>
       
     6 	<perex>new public release of Relational pipes</perex>
       
     7 	<m:release>v0.18</m:release>
       
     8 
       
     9 	<text xmlns="http://www.w3.org/1999/xhtml">
       
    10 		<p>
       
    11 			We are pleased to introduce you the new development version of <m:name/>.
       
    12 			This release brings several new tools of each type (inputs, outputs, transformations and streamlet) and some smaller improvements.
       
    13 		</p>
       
    14 		
       
    15 		<ul>
       
    16 			<li>
       
    17 				New <strong>input tools</strong> for reading various formats:
       
    18 				read <strong>ASN.1</strong>, <strong>YAML</strong> and <strong>JSON</strong>; see details below
       
    19 			</li>
       
    20 			<li>
       
    21 				New <strong>XMLTable-like input tools</strong> for converting arbitrary tree structures to relations:
       
    22 				read <strong>ASN.1</strong>, <strong>INI</strong>, <strong>MIME</strong>, <strong>YAML</strong>, <strong>JSON</strong>, <strong>CBOR</strong> and <strong>HTML</strong>; see details below
       
    23 			</li>
       
    24 			<li>
       
    25 				New <strong>input tool and streamlet</strong> for reading <strong>barcodes</strong> and <strong>QR codes</strong>: see details below
       
    26 			</li>
       
    27 			<li>
       
    28 				New <strong>input and output tool</strong> for the <strong>INI</strong> format: see details below
       
    29 			</li>
       
    30 			<li>
       
    31 				New <strong>input and output tool</strong> for interacting with <strong>X11</strong>: see details below
       
    32 			</li>
       
    33 			<li>
       
    34 				New <strong>XPath transformation</strong>: see details below
       
    35 			</li>
       
    36 			<li>
       
    37 				<strong>Data types</strong> support on <strong>CSV</strong> input and output: strings, integers and booleans; see details below
       
    38 			</li>
       
    39 			<li>
       
    40 				The <strong>grep</strong>, <strong>cut</strong> and <strong>sed</strong> transformations have new CLI interface: see details below
       
    41 			</li>
       
    42 		</ul>
       
    43 		
       
    44 		<p>
       
    45 			See the (<a href="#newExamples">new</a>) <m:a href="examples">examples</m:a> and (<a href="#newScreenshots">new</a>) <m:a href="screenshots">screenshots</m:a> pages for details.
       
    46 		</p>
       
    47 		
       
    48 		<p>
       
    49 			Please note that this is still a development release and thus the API (libraries, CLI arguments, formats) might and will change.
       
    50 			Any suggestions, ideas and bug reports are welcome in our <m:a href="contact">mail box</m:a>.
       
    51 		</p>
       
    52 		
       
    53 		<h2 id="standardInputModules">New standard input modules</h2>
       
    54 		
       
    55 		<p>
       
    56 			These tools allows serialization of arbitrary relational data
       
    57 			and then reading resulting file or stream back to the relational data.
       
    58 			An of course, we can read data created or generated somewhere else.
       
    59 			Since this release, we can newly serialize our relations to YAML and ASN.1, store, edit or transfer these files or streams and then deserialize them and pipe them through relational transformations or outputs.
       
    60 			Formats like XML or Recfiles were already supported in previous releases.
       
    61 			Full lossless round-trip is now possible with: XML, YAML, ASN.1 and Recfile formats.
       
    62 			Partial lossless round-trip is possible with CSV – these input and output tools are limited to a single relation.
       
    63 			Lossy round-trip is possible with <code>relpipe-out-nullbyte</code> and <code>relpipe-in-cli</code> – 
       
    64 			the <i>nullbyte</i> stream may contain only a single relation and its data types need to be passed as CLI arguments to the input tool.
       
    65 			Other formats (e.g. JACK, INI or X11) may also have corresponding inputs and outputs, but they produce and consume some specific structures – they are not universal and usable with arbitrary relational data.
       
    66 		</p>
       
    67 		
       
    68 		
       
    69 		<h3 id="YAML-JSON">YAML and JSON</h3>
       
    70 		
       
    71 		<p>
       
    72 			YAML is a text format for serializing tree structures into text (like XML).
       
    73 			It can be sometimes tricky, but basic scenarios are intuitive and straightforward.
       
    74 			We can use YAML to describe relational data and load them using the <code>relpipe-in-yaml</code> input filter
       
    75 			and we can produce YAML files using the <code>relpipe-out-yaml</code> output filter.
       
    76 		</p>
       
    77 	
       
    78 		<p>More details in the example: <m:a href="examples-yaml">Reading and writing YAML</m:a></p>
       
    79 		
       
    80 		<h3>ASN.1</h3>
       
    81 		<p>
       
    82 			There are actually more ASN.1 applications around us than most people realize.
       
    83 			ASN.1 is almost everywhere – in cryptography (X.509 / TLS / HTTP, S/MIME etc.), LDAP, payment cards, telecommunications (including GSM, GPRS, EDGE, UMTS, LTE, 5G), Kerberos authentication etc.
       
    84 			So it is very useful to be able to access these data.
       
    85 			Because ASN.1 is abstract, there are several ways how such data can be serialized into a stream of octets (bytes).
       
    86 			Most common way is BER (Basic Encoding Rules), so we support BER (and thus its variants DER and CER) in the first version of our tools.
       
    87 			Later other encoding might be supported and we could also parse the ASN.1 syntax (the schema language).
       
    88 		</p>
       
    89 		<p>
       
    90 			ASN.1 BER output was added several releases ago.
       
    91 			Now we have also ASN.1 BER input (<code>relpipe-in-asn1</code>) so we can read data in this format generated earlier.
       
    92 			Of course, BER data can be generated or read also by other ASN.1 capable software.
       
    93 			However, maybe more interesting than <code>relpipe-in-asn1</code> is <code>relpipe-in-asn1table</code> (see <a href="#XMLTable">below</a>) that reads arbitrary ASN.1 BER data (not only serialized relational data).
       
    94 		</p>
       
    95 		
       
    96 		<h2 id="INI">Reading and writing INI</h2>
       
    97 		<p>
       
    98 			INI is very common simple text format used for configuration files.
       
    99 			It extends classic <i>key=value</i> config files and adds one more level – sections – for structuring.
       
   100 			In this release we got input and output filter for INI and similar formats (Java .properties, MANIFEST.MF, key=value configs).
       
   101 			Because comments and whitespace are also supported, we can do (almost) loss-less conversions and transformations (e.g. change value of an entry).
       
   102 		</p>
       
   103 		
       
   104 		<p>More details in the example: <m:a href="examples-ini">Reading and writing INI and unix configs</m:a></p>
       
   105 		
       
   106 		<h2>Reading barcodes and QR codes</h2>
       
   107 		<p>
       
   108 			Either ubiquitous 1D barcodes (procudct labels, ISBN in form of EAN-13 etc.) or 2D barcodes (QR containing hyperlinks, vCards etc.)
       
   109 			encode numbers, texts or other data into images that can be printed and scanned or photographed later.
       
   110 			Now we can interact with this technology – read barcodes using the
       
   111 			<code>relpipe-in-barcode</code> tool or <code>barcode-reader</code> streamlet.
       
   112 		</p>
       
   113 		<p>More details in the example: <m:a href="examples-barcode">Reading barcodes and QR</m:a></p>
       
   114 		
       
   115 		<h2 id="XMLTable">New XMLTable-like input modules: ASN.1, INI, MIME, YAML, JSON, CBOR, HTML</h2>
       
   116 		<p>
       
   117 			More details in the examples:
       
   118 		</p>
       
   119 		<ul>
       
   120 			<li><m:a href="examples-reading-querying-uniform-way">Reading and querying JSON, YAML, CBOR, HTML, MIME, INI, ASN.1 and XML in a uniform way</m:a></li>
       
   121 			<li><m:a href="examples-asn1-x509">Exploring content of X.509 certificates</m:a></li>
       
   122 		</ul>
       
   123 		
       
   124 		<h2 id="X11">X11 input and output modules</h2>
       
   125 		<p>
       
   126 			The X Window System or X11 comes from 1984 and is still widely used (despite we have some other options like Wayland).
       
   127 			This protocol and set of libraries and interfaces gives us GUI (graphical user interface), manages our displays, windows, keyboards and mice.
       
   128 			Since this release of <m:name/> we can interact with this wonderful technology through the <code>relpipe-in-x11</code> and <code>relpipe-out-x11</code> tools.
       
   129 			In the following example we will show how to acquire information about the input devices, screens and windows or capture and emit X11 events (key presses and mouse movements).
       
   130 		</p>
       
   131 		<p>More details in the example: <m:a href="examples-x11-basics">Exploring X11 windows and devices and emulating mouse movements and keystrokes</m:a></p>
       
   132 
       
   133 		<h2 id="XPath">XPath transformation</h2>
       
   134 		<p>
       
   135 			We got a new powerful language for filtering and transformations: XPath.
       
   136 			It is now part of the toolset consisting of SQL, AWK, Scheme and others.
       
   137 			However XPath is originally a language designed for XML, in <m:name/> we can use it for relational data coming from various sources, not only XML,
       
   138 			and also for data that violates the rules of normal forms.
       
   139 			We can process quite complex tree structures entangled in records but we can also write simple and intuitive expressions like <code>x = "a" or y = 123</code>.
       
   140 		</p>
       
   141 		<p>More details in the example: <m:a href="examples-xpath-filtering-transforming">Filtering and transforming relational data with XPath</m:a></p>
       
   142 
       
   143 		<h2 id="csvDataTypes">Data types in CSV + generic relpipe-tr-infertypes tool</h2>
       
   144 		<p>
       
   145 			CSV input and output filters now support data types i.e. CSV can now carry not only text strings, but also booleans and integers (or more types in future releases).
       
   146 			We also have a new tool <code>relpipe-tr-infertypes</code> that can automatically recognize the types in data that came from CSV or any other source.
       
   147 		</p>
       
   148 		<p>More details in the example: <m:a href="examples-csv-data-types">CSV and data types</m:a></p>
       
   149 		
       
   150 		<h2>Feature overview</h2>
       
   151 		
       
   152 		<h3>Data types</h3>
       
   153 		<ul>
       
   154 			<li m:since="v0.8">boolean</li>
       
   155 			<li m:since="v0.15">variable-length signed integer (SLEB128)</li>
       
   156 			<li m:since="v0.8">string in UTF-8</li>
       
   157 		</ul>
       
   158 		<h3>Inputs</h3>
       
   159 		<ul>
       
   160 			<li m:since="v0.11">Recfile</li>
       
   161 			<li m:since="v0.9">XML</li>
       
   162 			<li m:since="v0.13">XMLTable</li>
       
   163 			<li m:since="v0.9">CSV</li>
       
   164 			<li m:since="v0.9">file system</li>
       
   165 			<li m:since="v0.8">CLI</li>
       
   166 			<li m:since="v0.8">fstab</li>
       
   167 			<li m:since="v0.14">SQL script</li>
       
   168 			<li m:since="v0.16">JACK</li>
       
   169 			<li m:since="v0.18">barcode</li>
       
   170 			<li m:since="v0.18">X11</li>
       
   171 			<li m:since="v0.18">ASN.1 BER</li>
       
   172 			<li m:since="v0.18">ASN.1 BER Table</li>
       
   173 			<li m:since="v0.18">INI</li>
       
   174 			<li m:since="v0.18">INITable</li>
       
   175 			<li m:since="v0.18">MIMETable</li>
       
   176 			<li m:since="v0.18">YAML</li>
       
   177 			<li m:since="v0.18">YAMLTable</li>
       
   178 			<li m:since="v0.18">JSON</li>
       
   179 			<li m:since="v0.18">JSONTable</li>
       
   180 			<li m:since="v0.18">CBORTable</li>
       
   181 			<li m:since="v0.18">HTMLTable</li>
       
   182 		</ul>
       
   183 		<h3>Transformations</h3>
       
   184 		<ul>
       
   185 			<li m:since="v0.13">sql: filtering and transformations using the SQL language</li>
       
   186 			<li m:since="v0.18">xpath: filtering and transformations using the XPath language</li>
       
   187 			<li m:since="v0.12">awk: filtering and transformations using the classic AWK tool and language</li>
       
   188 			<li m:since="v0.10">scheme: filtering and transformations defined in the Scheme language using GNU Guile</li>
       
   189 			<li m:since="v0.8">grep: regular expression filter, removes unwanted records from the relation</li>
       
   190 			<li m:since="v0.8">cut: regular expression attribute cutter (removes or duplicates attributes and can also DROP whole relation)</li>
       
   191 			<li m:since="v0.8">sed: regular expression replacer</li>
       
   192 			<li m:since="v0.8">validator: just a pass-through filter that crashes on invalid data</li>
       
   193 			<li m:since="v0.18">infertypes: derive data types from attribute values</li>
       
   194 			<li m:since="v0.8">python: highly experimental</li>
       
   195 		</ul>
       
   196 		<h3>Streamlets</h3>
       
   197 		<ul>
       
   198 			<li m:since="v0.15">xpath (example, unstable)</li>
       
   199 			<li m:since="v0.15">hash (example, unstable)</li>
       
   200 			<li m:since="v0.15">jar_info (example, unstable)</li>
       
   201 			<li m:since="v0.15">mime_type (example, unstable)</li>
       
   202 			<li m:since="v0.15">exiftool (example, unstable)</li>
       
   203 			<li m:since="v0.15">pid (example, unstable)</li>
       
   204 			<li m:since="v0.15">cloc (example, unstable)</li>
       
   205 			<li m:since="v0.15">exiv2 (example, unstable)</li>
       
   206 			<li m:since="v0.15">inode (example, unstable)</li>
       
   207 			<li m:since="v0.15">lines_count (example, unstable)</li>
       
   208 			<li m:since="v0.15">pdftotext (example, unstable)</li>
       
   209 			<li m:since="v0.15">pdfinfo (example, unstable)</li>
       
   210 			<li m:since="v0.15">tesseract (example, unstable)</li>
       
   211 			<li m:since="v0.18">barcode (example, unstable)</li>
       
   212 		</ul>
       
   213 		<h3>Outputs</h3>
       
   214 		<ul>
       
   215 			<li m:since="v0.11">ASN.1 BER</li>
       
   216 			<li m:since="v0.11">Recfile</li>
       
   217 			<li m:since="v0.9">CSV</li>
       
   218 			<li m:since="v0.8">tabular</li>
       
   219 			<li m:since="v0.8">XML</li>
       
   220 			<li m:since="v0.8">nullbyte</li>
       
   221 			<li m:since="v0.8">GUI in Qt</li>
       
   222 			<li m:since="v0.8">ODS (LibreOffice)</li>
       
   223 			<li m:since="v0.17">JACK</li>
       
   224 			<li m:since="v0.18">X11</li>
       
   225 			<li m:since="v0.18">INI</li>
       
   226 			<li m:since="v0.18">YAML</li>
       
   227 		</ul>
       
   228 		
       
   229 		<h2 id="newExamples">New examples</h2>
       
   230 		<ul>
       
   231 			<li><m:a href="examples-reading-querying-uniform-way">Reading and querying JSON, YAML, CBOR, HTML, MIME, INI, ASN.1 and XML in a uniform way</m:a></li>
       
   232 			<li><m:a href="examples-xpath-filtering-transforming">Filtering and transforming relational data with XPath</m:a></li>
       
   233 			<li><m:a href="examples-csv-data-types">CSV and data types</m:a></li>
       
   234 			<li><m:a href="examples-x11-basics">Exploring X11 windows and devices and emulating mouse movements and keystrokes</m:a></li>
       
   235 			<li><m:a href="examples-asn1-x509">Exploring content of X.509 certificates</m:a></li>
       
   236 			<li><m:a href="examples-csv-sql-join">Running SQL JOINs on multiple CSV files</m:a></li>
       
   237 			<li><m:a href="examples-yaml">Reading and writing YAML</m:a></li>
       
   238 			<li><m:a href="examples-ini">Reading and writing INI and unix configs</m:a></li>
       
   239 			<li><m:a href="examples-barcode">Reading barcodes and QR</m:a></li>
       
   240 			<!--
       
   241 			<li><m:a href="examples-x11-kvm">Software replacement of KVM switch</m:a></li>
       
   242 			-->
       
   243 		</ul>
       
   244 		
       
   245 		<h2 id="newScreenshots">New screenshots</h2>
       
   246 		
       
   247 		<m:img src="img/wmaker-yaml-xml-tabular-1.png"/>
       
   248 		
       
   249 		<h2 id="incompatibleChanges">Backward incompatible changes</h2>
       
   250 		
       
   251 		<p>
       
   252 			In <code>relpipe-tr-sql</code> and <code>relpipe-in-sql</code> the <code>--list-data-sources</code> option has now boolean parameter
       
   253 			i.e. it is not the presence of the option but the <code>true</code> or <code>false</code> value what matters.
       
   254 			We can also list the data sources while we simultaneously run some SQL.
       
   255 		</p>
       
   256 		
       
   257 		<p>
       
   258 			The <code>relpipe-tr-grep</code>, <code>relpipe-tr-cut</code> and <code>relpipe-tr-sed</code>
       
   259 			were the last tools with the obsolete positional CLI interface.
       
   260 			In this release, they were updated and now share the same style of CLI arguments as other tools.
       
   261 			Besides consistent and predictable user interface, these tools are now more powerful because they can transforma more relations at once.
       
   262 		</p>
       
   263 		
       
   264 		<p>Instead of e.g.</p>
       
   265 		<pre>relpipe-tr-grep 'a' 'b' 'c'</pre>
       
   266 		<p>we now write:</p>
       
   267 		<pre>relpipe-tr-grep --relation 'a' --attribute 'b' --value 'c'</pre>
       
   268 		<p>Bash completion helps us while writing such commands and result is much more readable than original cryptic version.</p>
       
   269 		
       
   270 		<p>See updated examples:</p>
       
   271 		
       
   272 		<ul>
       
   273 			<li><m:a href="examples-rename-vg-fstab">Renaming VG in /etc/fstab using relpipe-tr-sed</m:a></li>
       
   274 			<li><m:a href="examples-rename-groups-backreferences">Using relpipe-tr-sed with groups and backreferences</m:a></li>
       
   275 			<li><m:a href="examples-grep-fstab">Filtering /etc/fstab using relpipe-tr-grep</m:a></li>
       
   276 			<li><m:a href="examples-grep-cut-fstab">Doing projection and restriction using cut and grep</m:a></li>
       
   277 			<li><m:a href="examples-apt">Reading apt (Debian package system) results</m:a></li>
       
   278 			<li><m:a href="examples-in-xmltable-ssm-gui">Generating statistics and charts using XMLTable</m:a></li>
       
   279 			<li><m:a href="streamlets-preview">Streamlets preview</m:a></li>
       
   280 			<li><m:a href="examples-csv-sql-join">Running SQL JOINs on multiple CSV files</m:a></li>
       
   281 			<li><m:a href="examples-runnable-jars">Finding runnable JARs</m:a></li>
       
   282 		</ul>
       
   283 		
       
   284 		
       
   285 		<h2 id="installation">Installation</h2>
       
   286 		
       
   287 		<p>
       
   288 			Instalation was tested on Debian GNU/Linux 10.2.
       
   289 			The process should be similar on other distributions.
       
   290 		</p>
       
   291 		
       
   292 		<m:pre src="examples/release-v0.18.sh" jazyk="bash" odkaz="ano"/>
       
   293 		
       
   294 		<p>
       
   295 			<m:name/> are modular thus you can download and install only parts you need (the libraries are needed always).
       
   296 			Tools <code>out-gui.qt</code> and <code>tr-python</code> require additional libraries and are not built by default.
       
   297 		</p>
       
   298 		
       
   299 	</text>
       
   300 
       
   301 </stránka>