{"id":1166,"date":"2020-03-01T11:32:17","date_gmt":"2020-03-01T10:32:17","guid":{"rendered":"http:\/\/blog.zhaw.ch\/splab\/?p=1166"},"modified":"2020-03-02T16:44:12","modified_gmt":"2020-03-02T15:44:12","slug":"log-files-semantic-compression-and-learned-attribute-based-notifications","status":"publish","type":"post","link":"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/01\/log-files-semantic-compression-and-learned-attribute-based-notifications\/","title":{"rendered":"Log files: Semantic compression and learned attribute-based notifications"},"content":{"rendered":"\n<p>Many providers of hosted services, including cloud applications, are subject to a contradiction in handling log data. On the one hand, storing logs consumes resources and should be minimised or avoided altogether to save resource cost. On the other hand, regulatory constraints such as keeping the data for the purpose of future audits exist. A smart solution to encode the data appropriately needs to be found. The coding encompasses both compression, to keep resource use low, and encryption, to prevent leaking information to unauthorised parties, for instance when logging for the purpose of intrusion detection. On an algorithmic level, the encoded data should still be usable for computation, in particular comparison and search. In this blog post, based on the didactic log example shown in the figure below, we present algorithms and architectures to handle cloud log files in a smart way.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"375\" src=\"https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/example-1024x375.png\" alt=\"\" class=\"wp-image-1168\" srcset=\"https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/example-1024x375.png 1024w, https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/example-300x110.png 300w, https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/example-768x281.png 768w, https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/example-676x248.png 676w, https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/example.png 1117w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<!--more-->\n\n\n\n<p>The example shows two hypothetic log lines, both simplified by not carrying timestamp or associated device information. When the first line is parsed, the significance of any information contained therein can only be evaluated by using named-entity recognition and rule-\/pattern-based <a href=\"https:\/\/medium.com\/@rohit.sharma_7010\/a-complete-tutorial-for-named-entity-recognition-and-extraction-in-natural-language-processing-71322b6fb090\">entity extraction<\/a>. When the second line is parsed, byte-level and contextual differences to the previous one can also be taken into account. A sound approach is therefore to combine both techniques, extract the significant data parts, and compress the remainder with good to excellent compression ratios, aided by long log files with almost monotonic but not quite identical messages.<\/p>\n\n\n\n<p>Finding differences the right way <a href=\"https:\/\/link.springer.com\/article\/10.1007%2Fs10664-019-09772-z\">is not trivial<\/a>. Apart from byte-level identification of changes, insertions or removals, context elements such as separators (spaces, commas, semicolons) need to be considered to reduce unnecessary diffs.<\/p>\n\n\n\n<p>Beyond the algorithm, an architectural integration is needed. A sound approach is to divide the system into four parts: log file provisioning (this part is optional and is typically implemented already with <a href=\"https:\/\/access.redhat.com\/documentation\/en-us\/red_hat_enterprise_linux\/7\/html\/system_administrators_guide\/s1-basic_configuration_of_rsyslog\">network logging<\/a>), file parsing and semantic detection of attributes along with attribute-based compression, interactive <a href=\"https:\/\/ieeexplore.ieee.org\/document\/8525315\">attribute-based search<\/a>, and attribute-based alerting and notification. The following figure shows the architecture, again in simplified form, of the algorithmic-architectural approach called <em>&#8220;Semlog&#8221;<\/em> for semantic log handling.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"609\" height=\"449\" src=\"https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/architecture-semlog.png\" alt=\"\" class=\"wp-image-1173\" srcset=\"https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/architecture-semlog.png 609w, https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/architecture-semlog-300x221.png 300w\" sizes=\"auto, (max-width: 609px) 100vw, 609px\" \/><\/figure>\n\n\n\n<p>All of this appears to be over-engineered at first. Why not just compress with gzip, use zgrep for search, and something based on ztail for notification? Oh wait, there is no ztail (<a href=\"https:\/\/serverfault.com\/questions\/312853\/is-there-a-compression-format-that-supports-tail-operations\">yet<\/a>)&#8230; and the other <a href=\"http:\/\/www.landoflinux.com\/linux_z_commands.html\">&#8220;Z commands&#8221;<\/a> may also have their drawbacks, however established they may be on today&#8217;s systems, in particular regarding memory use and operation speed.<\/p>\n\n\n\n<p>Furthermore, the system should not only use with static logfiles, but instead also with continuous log streams. Given the modular architecture, which could be implemented as command-line tools or microservices, and the preference for JSON for structured messaging among developers, partial JSON stream processing using <a href=\"https:\/\/jsonpath.com\/\">JSONpath<\/a> is another suitable ingredient for convenient programmatic access. In contrast to typical DOM-style document parsing, the document can still be incomplete, yet in contrast to SAX-style stream parsing, not every opening and closing brace needs to be accounted for in code. Instead, triggers are set on whole blocks identified with these paths.<\/p>\n\n\n\n<p>The implementation thus consists of four parts:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>A <em>netlogservice<\/em> convenience script that reads a static log file and replays it in original logging speed, taking the time offset into consideration.<\/li><\/ul>\n\n\n\n<ul class=\"wp-block-list\"><li>An <em>slc<\/em> (semantic log compression) script that reads from a static file or a stream (including stdin), identifies attributes, and creates or updates a compressed index for search in addition to possible structured output (on stdout).<\/li><\/ul>\n\n\n\n<ul class=\"wp-block-list\"><li>Another script <em>slcgrep<\/em> that reads the index to find matching log lines.<\/li><\/ul>\n\n\n\n<ul class=\"wp-block-list\"><li>Finally, a script <em>slcnotify<\/em> that installs conditional triggers and reads a file (including stdin) to notify upon the continued or first-time presence of conditions.<\/li><\/ul>\n\n\n\n<p>The scripts can be connected through pipes to combine their functionality. In scalable environments, they can further be set up as interconnected microservices with additional wrapper code, even though the integration of CLI tools into cloud platforms (e.g. PaaS or cloud functions) is still often not seamless.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">netlogserve examples\/admin.log | slc -j - | slcnotify portnumber:8008<\/pre>\n\n\n\n<p>The emerging implementation is publicly available via <a href=\"https:\/\/github.com\/serviceprototypinglab\/semlogcompress\">Git<\/a>.<\/p>\n<div class=\"pt-sm\">Schlagw\u00f6rter: <a href=\"http:\/\/blog.zhaw.ch\/splab\/tag\/architecture\/\">architecture<\/a>, <a href=\"http:\/\/blog.zhaw.ch\/splab\/tag\/cloud-messaging\/\">cloud messaging<\/a>, <a href=\"http:\/\/blog.zhaw.ch\/splab\/tag\/compression\/\">compression<\/a>, <a href=\"http:\/\/blog.zhaw.ch\/splab\/tag\/intrusiondetection\/\">intrusiondetection<\/a>, <a href=\"http:\/\/blog.zhaw.ch\/splab\/tag\/machinelearning\/\">machinelearning<\/a>, <a href=\"http:\/\/blog.zhaw.ch\/splab\/tag\/smart-coding\/\">smart coding<\/a>, <a href=\"http:\/\/blog.zhaw.ch\/splab\/tag\/stealth-computing\/\">stealth computing<\/a><br><\/div>","protected":false},"excerpt":{"rendered":"<p>Many providers of hosted services, including cloud applications, are subject to a contradiction in handling log data. On the one hand, storing logs consumes resources and should be minimised or avoided altogether to save resource cost. On the other hand, regulatory constraints such as keeping the data for the purpose of future audits exist. A [&hellip;]<\/p>\n","protected":false},"author":203,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[4],"tags":[136,135,97,100,99,134,95],"features":[],"class_list":["post-1166","post","type-post","status-publish","format-standard","hentry","category-research","tag-architecture","tag-cloud-messaging","tag-compression","tag-intrusiondetection","tag-machinelearning","tag-smart-coding","tag-stealth-computing"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Log files: Semantic compression and learned attribute-based notifications - Service Prototyping Lab<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/01\/log-files-semantic-compression-and-learned-attribute-based-notifications\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Log files: Semantic compression and learned attribute-based notifications\" \/>\n<meta property=\"og:description\" content=\"Many providers of hosted services, including cloud applications, are subject to a contradiction in handling log data. On the one hand, storing logs consumes resources and should be minimised or avoided altogether to save resource cost. On the other hand, regulatory constraints such as keeping the data for the purpose of future audits exist. A [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/01\/log-files-semantic-compression-and-learned-attribute-based-notifications\/\" \/>\n<meta property=\"og:site_name\" content=\"Service Prototyping Lab\" \/>\n<meta property=\"article:published_time\" content=\"2020-03-01T10:32:17+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-03-02T15:44:12+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/example-1024x375.png\" \/>\n<meta name=\"author\" content=\"Josef Spillner\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Josef Spillner\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/01\/log-files-semantic-compression-and-learned-attribute-based-notifications\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/01\/log-files-semantic-compression-and-learned-attribute-based-notifications\/\"},\"author\":{\"name\":\"Josef Spillner\",\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/#\/schema\/person\/33a5227c6cc1fa3329279d33c3cc440e\"},\"headline\":\"Log files: Semantic compression and learned attribute-based notifications\",\"datePublished\":\"2020-03-01T10:32:17+00:00\",\"dateModified\":\"2020-03-02T15:44:12+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/01\/log-files-semantic-compression-and-learned-attribute-based-notifications\/\"},\"wordCount\":672,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/01\/log-files-semantic-compression-and-learned-attribute-based-notifications\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/example-1024x375.png\",\"keywords\":[\"architecture\",\"cloud messaging\",\"compression\",\"intrusiondetection\",\"machinelearning\",\"smart coding\",\"stealth computing\"],\"articleSection\":[\"Research\"],\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/01\/log-files-semantic-compression-and-learned-attribute-based-notifications\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/01\/log-files-semantic-compression-and-learned-attribute-based-notifications\/\",\"url\":\"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/01\/log-files-semantic-compression-and-learned-attribute-based-notifications\/\",\"name\":\"Log files: Semantic compression and learned attribute-based notifications - Service Prototyping Lab\",\"isPartOf\":{\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/01\/log-files-semantic-compression-and-learned-attribute-based-notifications\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/01\/log-files-semantic-compression-and-learned-attribute-based-notifications\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/example-1024x375.png\",\"datePublished\":\"2020-03-01T10:32:17+00:00\",\"dateModified\":\"2020-03-02T15:44:12+00:00\",\"author\":{\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/#\/schema\/person\/33a5227c6cc1fa3329279d33c3cc440e\"},\"breadcrumb\":{\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/01\/log-files-semantic-compression-and-learned-attribute-based-notifications\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/01\/log-files-semantic-compression-and-learned-attribute-based-notifications\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/01\/log-files-semantic-compression-and-learned-attribute-based-notifications\/#primaryimage\",\"url\":\"https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/example-1024x375.png\",\"contentUrl\":\"https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/example-1024x375.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/01\/log-files-semantic-compression-and-learned-attribute-based-notifications\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\/\/blog.zhaw.ch\/splab\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Log files: Semantic compression and learned attribute-based notifications\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/#website\",\"url\":\"https:\/\/blog.zhaw.ch\/splab\/\",\"name\":\"Service Prototyping Lab\",\"description\":\"A Blog of the ZHAW Zurich University of Applied Sciences\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.zhaw.ch\/splab\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/#\/schema\/person\/33a5227c6cc1fa3329279d33c3cc440e\",\"name\":\"Josef Spillner\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/c57d7019e91373902c08eac230e003cb4f8498ecf68c9d119e9ecb82fdf6c400?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/c57d7019e91373902c08eac230e003cb4f8498ecf68c9d119e9ecb82fdf6c400?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/c57d7019e91373902c08eac230e003cb4f8498ecf68c9d119e9ecb82fdf6c400?s=96&d=mm&r=g\",\"caption\":\"Josef Spillner\"},\"description\":\"Head of the Service Prototyping Lab. Research on distributed systems and application computing paradigms. Senior lecturer at Zurich University of Applied Sciences.\",\"url\":\"https:\/\/blog.zhaw.ch\/splab\/author\/spio\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Log files: Semantic compression and learned attribute-based notifications - Service Prototyping Lab","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/01\/log-files-semantic-compression-and-learned-attribute-based-notifications\/","og_locale":"en_GB","og_type":"article","og_title":"Log files: Semantic compression and learned attribute-based notifications","og_description":"Many providers of hosted services, including cloud applications, are subject to a contradiction in handling log data. On the one hand, storing logs consumes resources and should be minimised or avoided altogether to save resource cost. On the other hand, regulatory constraints such as keeping the data for the purpose of future audits exist. A [&hellip;]","og_url":"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/01\/log-files-semantic-compression-and-learned-attribute-based-notifications\/","og_site_name":"Service Prototyping Lab","article_published_time":"2020-03-01T10:32:17+00:00","article_modified_time":"2020-03-02T15:44:12+00:00","og_image":[{"url":"https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/example-1024x375.png","type":"","width":"","height":""}],"author":"Josef Spillner","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Josef Spillner","Estimated reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/01\/log-files-semantic-compression-and-learned-attribute-based-notifications\/#article","isPartOf":{"@id":"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/01\/log-files-semantic-compression-and-learned-attribute-based-notifications\/"},"author":{"name":"Josef Spillner","@id":"https:\/\/blog.zhaw.ch\/splab\/#\/schema\/person\/33a5227c6cc1fa3329279d33c3cc440e"},"headline":"Log files: Semantic compression and learned attribute-based notifications","datePublished":"2020-03-01T10:32:17+00:00","dateModified":"2020-03-02T15:44:12+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/01\/log-files-semantic-compression-and-learned-attribute-based-notifications\/"},"wordCount":672,"commentCount":0,"image":{"@id":"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/01\/log-files-semantic-compression-and-learned-attribute-based-notifications\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/example-1024x375.png","keywords":["architecture","cloud messaging","compression","intrusiondetection","machinelearning","smart coding","stealth computing"],"articleSection":["Research"],"inLanguage":"en-GB","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.zhaw.ch\/splab\/2020\/03\/01\/log-files-semantic-compression-and-learned-attribute-based-notifications\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/01\/log-files-semantic-compression-and-learned-attribute-based-notifications\/","url":"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/01\/log-files-semantic-compression-and-learned-attribute-based-notifications\/","name":"Log files: Semantic compression and learned attribute-based notifications - Service Prototyping Lab","isPartOf":{"@id":"https:\/\/blog.zhaw.ch\/splab\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/01\/log-files-semantic-compression-and-learned-attribute-based-notifications\/#primaryimage"},"image":{"@id":"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/01\/log-files-semantic-compression-and-learned-attribute-based-notifications\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/example-1024x375.png","datePublished":"2020-03-01T10:32:17+00:00","dateModified":"2020-03-02T15:44:12+00:00","author":{"@id":"https:\/\/blog.zhaw.ch\/splab\/#\/schema\/person\/33a5227c6cc1fa3329279d33c3cc440e"},"breadcrumb":{"@id":"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/01\/log-files-semantic-compression-and-learned-attribute-based-notifications\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.zhaw.ch\/splab\/2020\/03\/01\/log-files-semantic-compression-and-learned-attribute-based-notifications\/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/01\/log-files-semantic-compression-and-learned-attribute-based-notifications\/#primaryimage","url":"https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/example-1024x375.png","contentUrl":"https:\/\/blog.zhaw.ch\/splab\/files\/2020\/03\/example-1024x375.png"},{"@type":"BreadcrumbList","@id":"https:\/\/blog.zhaw.ch\/splab\/2020\/03\/01\/log-files-semantic-compression-and-learned-attribute-based-notifications\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/blog.zhaw.ch\/splab\/"},{"@type":"ListItem","position":2,"name":"Log files: Semantic compression and learned attribute-based notifications"}]},{"@type":"WebSite","@id":"https:\/\/blog.zhaw.ch\/splab\/#website","url":"https:\/\/blog.zhaw.ch\/splab\/","name":"Service Prototyping Lab","description":"A Blog of the ZHAW Zurich University of Applied Sciences","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.zhaw.ch\/splab\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Person","@id":"https:\/\/blog.zhaw.ch\/splab\/#\/schema\/person\/33a5227c6cc1fa3329279d33c3cc440e","name":"Josef Spillner","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/secure.gravatar.com\/avatar\/c57d7019e91373902c08eac230e003cb4f8498ecf68c9d119e9ecb82fdf6c400?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/c57d7019e91373902c08eac230e003cb4f8498ecf68c9d119e9ecb82fdf6c400?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c57d7019e91373902c08eac230e003cb4f8498ecf68c9d119e9ecb82fdf6c400?s=96&d=mm&r=g","caption":"Josef Spillner"},"description":"Head of the Service Prototyping Lab. Research on distributed systems and application computing paradigms. Senior lecturer at Zurich University of Applied Sciences.","url":"https:\/\/blog.zhaw.ch\/splab\/author\/spio\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/posts\/1166","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/users\/203"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/comments?post=1166"}],"version-history":[{"count":15,"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/posts\/1166\/revisions"}],"predecessor-version":[{"id":1187,"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/posts\/1166\/revisions\/1187"}],"wp:attachment":[{"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/media?parent=1166"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/categories?post=1166"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/tags?post=1166"},{"taxonomy":"features","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/features?post=1166"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}