{"id":11264,"date":"2017-03-22T13:53:20","date_gmt":"2017-03-22T11:53:20","guid":{"rendered":"https:\/\/blog.zhaw.ch\/icclab\/?p=11264"},"modified":"2019-08-05T14:35:26","modified_gmt":"2019-08-05T12:35:26","slug":"snafu-the-swiss-army-knife-of-serverless-computing","status":"publish","type":"post","link":"https:\/\/blog.zhaw.ch\/icclab\/snafu-the-swiss-army-knife-of-serverless-computing\/","title":{"rendered":"Snafu &#8211; The Swiss Army Knife of Serverless Computing"},"content":{"rendered":"\n<p>by <a href=\"https:\/\/blog.zhaw.ch\/icclab\/josef-spillner\/\">Josef Spillner<\/a><\/p>\n\n\n<p>The <a href=\"https:\/\/blog.zhaw.ch\/icclab\/category\/labs\/splab\/\">Service Prototyping Lab<\/a> at Zurich University of Applied Sciences is committed to advancing the state of technology for bringing applications to the cloud, for the benefit of the society of large in general and of the local industry in particular. This obliges us to closely monitor industrial trends along with academic advances. A hot topic currently found in both is the higher-PaaS-level service class of FaaS, or Function-as-a-Service, which coincides with the marketing term Serverless Computing. We have already contributed analytical work on finding the limits and possibilities of today&#8217;s FaaS systems (<a href=\"https:\/\/arxiv.org\/abs\/1701.05945\">preprint<\/a>), and engineering work on translating legacy monolithic code into fine-grained functions (<a href=\"https:\/\/arxiv.org\/abs\/1702.05510\">preprint<\/a>). It was only a matter of time until the limits in both commercially operated FaaS services and open-source FaaS prototypes became too severe for our work. Hence, after a careful analysis of what is available, we decided to come up with an alternative FaaS host process design. The design led to an architecture, and the architecture eventually to an implementation called <strong>Snafu<\/strong>. This post presents Snafu and positions it as Swiss Army Knife for situations in which functions should be prototyped, tested or hosted.<\/p>\n<p><!--more--><\/p>\n<p>In computer engineering, a Swiss Army Knife is a software tool which can be <a href=\"https:\/\/www.edgis-security.org\/offensive-security\/netcat\/\">used in versatile ways<\/a>. No matter whether client side or server side, the tool should offer several functions for achieving results and for figuring out any issues which may occur on the path to the achievement. Snafu is designed with this philosophy: It should be flexible to use for hosting and invoking functions rapidly.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-11265 aligncenter\" src=\"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/03\/snafu-sak-logo.jpeg\" alt=\"\" width=\"300\" height=\"209\"><\/p>\n<p>Snafu functions are supplied as source or bytecode files (Python 2, Python 3, Java 8) which are simply dropped into the functions folder and parsed dynamically. All functions or methods found are offered for execution. There is no need to configure anything, although configuration is possible, for instance to specify a single function handler.<\/p>\n<p>Functions can be executed in-memory\/in-process (for Python 3 only as it is the implementation language of Snafu itself), through external interpreters (Python 2, Java), or through static proxies and dynamically allocated Docker containers. The trade-off between execution speed, isolation and scalability can thus be determined by the user and is not imposed by the provider.<\/p>\n<p>The resulting implementation of Snafu runs as command-line utility to host the functions locally and to invoke them interactively, in batch mode, or through various triggers. Compatibility with AWS Lambda is achieved through the Snafu control plane which supports multi-tenancy, multi-threading, AWS4 authentication, and forwarding of requests for higher scalability. Furthermore, existing Lambda deployments may be migrated into Snafu instances by just running snafu-import.<\/p>\n<figure id=\"attachment_11269\" aria-describedby=\"caption-attachment-11269\" style=\"width: 247px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/03\/snafu-implementation-colour.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-11269 size-medium\" src=\"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/03\/snafu-implementation-colour-247x300.png\" alt=\"\" width=\"247\" height=\"300\" srcset=\"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/03\/snafu-implementation-colour-247x300.png 247w, https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/03\/snafu-implementation-colour.png 675w\" sizes=\"auto, (max-width: 247px) 100vw, 247px\" \/><\/a><figcaption id=\"caption-attachment-11269\" class=\"wp-caption-text\">Click to show the diagram in full size.<\/figcaption><\/figure>\n<p>The choice of FaaS as programming and deployment model is both a technical and an economic one. The following sketch shows which parameters influence the feasibility to run a self-administered FaaS hosting system inside a virtual machine compared to using an existing commercial FaaS service which is typically part of a larger PaaS offering. Our experiments with Snafu have shown that at least for certain functions, self-hosting is quite competitive and exceeds both the performance barrier and the cost utility.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-11274 size-full aligncenter\" src=\"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/03\/faas-economics.png\" alt=\"\" width=\"760\" height=\"369\" srcset=\"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/03\/faas-economics.png 760w, https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/03\/faas-economics-300x146.png 300w, https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/03\/faas-economics-500x243.png 500w\" sizes=\"auto, (max-width: 760px) 100vw, 760px\" \/>While Snafu is still an early prototype, it already fills the gap for FaaS frameworks useful for quick prototyping of new cloud and network services and for in-house\/private cloud deployments of a high-performance function execution environment. The extensible nature will lead to many useful additions in the future. Implementing Go functions? Triggering code analysis and unit testing functions from commits? Billing per formal function complexity? Snafu is well positioned as starting point for such tasks.<\/p>\n<p>Apart from the technical perspective, Snafu is aligned with our goal of advancing Switzerland&#8217;s leadership in ICT by driving innovation on future and emerging cloud technologies such as FaaS.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-11266 aligncenter\" src=\"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/03\/swissmadefaas-300x300.jpeg\" alt=\"\" width=\"300\" height=\"300\" srcset=\"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/03\/swissmadefaas-300x300.jpeg 300w, https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/03\/swissmadefaas-150x150.jpeg 150w, https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/03\/swissmadefaas.jpeg 446w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>Snafu is publicly available via its <a href=\"https:\/\/github.com\/serviceprototypinglab\/snafu\/\">Git repository<\/a>. A preprint with all the technical details (design, architecture, implementation) as well as measurement results and metrics is also publicly available via <a href=\"https:\/\/arxiv.org\/abs\/1703.07562\">arXiv<\/a> CoRR. Comments and reviews are solicited publicly at <a href=\"http:\/\/www.shortscience.org\/paper?bibtexKey=journals\/corr\/1703.07562\">ShortScience<\/a>.<\/p>\n<p>Event notice: We will give a presentation and live demo of Snafu at the <a href=\"https:\/\/www.meetup.com\/Future-Cloud-Applications\/events\/237938211\/\">Future Cloud Applications<\/a> event on the 27th of April 2017 in Winterthur. You are invited to join!<\/p><div class=\"pt-sm\">Schlagw\u00f6rter: <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/docker\/\">docker<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/faas\/\">faas<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/java\/\">java<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/openshift\/\">openshift<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/python\/\">Python<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/serverless\/\">serverless<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/snafu\/\">snafu<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/tooling\/\">tooling<\/a><br><\/div>","protected":false},"excerpt":{"rendered":"<p>The Service Prototyping Lab at Zurich University of Applied Sciences is committed to advancing the state of technology for bringing applications to the cloud, for the benefit of the society of large in general and of the local industry in particular. This obliges us to closely monitor industrial trends along with academic advances. A hot [&hellip;]<\/p>\n","protected":false},"author":486,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[1,20],"tags":[484,820,838,238,273,831,853,777],"features":[],"class_list":["post-11264","post","type-post","status-publish","format-standard","hentry","category-allgemein","category-open-source","tag-docker","tag-faas","tag-java","tag-openshift","tag-python","tag-serverless","tag-snafu","tag-tooling"],"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>Snafu - The Swiss Army Knife of Serverless Computing - Service Engineering (ICCLab &amp; SPLab)<\/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\/icclab\/snafu-the-swiss-army-knife-of-serverless-computing\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Snafu - The Swiss Army Knife of Serverless Computing\" \/>\n<meta property=\"og:description\" content=\"The Service Prototyping Lab at Zurich University of Applied Sciences is committed to advancing the state of technology for bringing applications to the cloud, for the benefit of the society of large in general and of the local industry in particular. This obliges us to closely monitor industrial trends along with academic advances. A hot [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.zhaw.ch\/icclab\/snafu-the-swiss-army-knife-of-serverless-computing\/\" \/>\n<meta property=\"og:site_name\" content=\"Service Engineering (ICCLab &amp; SPLab)\" \/>\n<meta property=\"article:published_time\" content=\"2017-03-22T11:53:20+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-08-05T12:35:26+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/03\/snafu-sak-logo.jpeg\" \/>\n<meta name=\"author\" content=\"icclab\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"icclab\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. 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\/icclab\/snafu-the-swiss-army-knife-of-serverless-computing\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/snafu-the-swiss-army-knife-of-serverless-computing\/\"},\"author\":{\"name\":\"icclab\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/045c6bde7e681e689e4fc051d8932563\"},\"headline\":\"Snafu &#8211; The Swiss Army Knife of Serverless Computing\",\"datePublished\":\"2017-03-22T11:53:20+00:00\",\"dateModified\":\"2019-08-05T12:35:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/snafu-the-swiss-army-knife-of-serverless-computing\/\"},\"wordCount\":708,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/snafu-the-swiss-army-knife-of-serverless-computing\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/03\/snafu-sak-logo.jpeg\",\"keywords\":[\"docker\",\"faas\",\"java\",\"openshift\",\"Python\",\"serverless\",\"snafu\",\"tooling\"],\"articleSection\":[\"*.*\",\"Open Source\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/blog.zhaw.ch\/icclab\/snafu-the-swiss-army-knife-of-serverless-computing\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/snafu-the-swiss-army-knife-of-serverless-computing\/\",\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/snafu-the-swiss-army-knife-of-serverless-computing\/\",\"name\":\"Snafu - The Swiss Army Knife of Serverless Computing - Service Engineering (ICCLab &amp; SPLab)\",\"isPartOf\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/snafu-the-swiss-army-knife-of-serverless-computing\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/snafu-the-swiss-army-knife-of-serverless-computing\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/03\/snafu-sak-logo.jpeg\",\"datePublished\":\"2017-03-22T11:53:20+00:00\",\"dateModified\":\"2019-08-05T12:35:26+00:00\",\"author\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/045c6bde7e681e689e4fc051d8932563\"},\"breadcrumb\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/snafu-the-swiss-army-knife-of-serverless-computing\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.zhaw.ch\/icclab\/snafu-the-swiss-army-knife-of-serverless-computing\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/snafu-the-swiss-army-knife-of-serverless-computing\/#primaryimage\",\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/03\/snafu-sak-logo.jpeg\",\"contentUrl\":\"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/03\/snafu-sak-logo.jpeg\",\"width\":300,\"height\":209},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/snafu-the-swiss-army-knife-of-serverless-computing\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\/\/blog.zhaw.ch\/icclab\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Snafu &#8211; The Swiss Army Knife of Serverless Computing\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#website\",\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/\",\"name\":\"Service Engineering (ICCLab &amp; SPLab)\",\"description\":\"A Blog of the ZHAW Zurich University of Applied Sciences\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.zhaw.ch\/icclab\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/045c6bde7e681e689e4fc051d8932563\",\"name\":\"icclab\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/7b13169e03783f50e96b96fa2ff222b9c530d13c3125f077c7c44f729b857a51?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/7b13169e03783f50e96b96fa2ff222b9c530d13c3125f077c7c44f729b857a51?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/7b13169e03783f50e96b96fa2ff222b9c530d13c3125f077c7c44f729b857a51?s=96&d=mm&r=g\",\"caption\":\"icclab\"},\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/author\/icclab\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Snafu - The Swiss Army Knife of Serverless Computing - Service Engineering (ICCLab &amp; SPLab)","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\/icclab\/snafu-the-swiss-army-knife-of-serverless-computing\/","og_locale":"en_US","og_type":"article","og_title":"Snafu - The Swiss Army Knife of Serverless Computing","og_description":"The Service Prototyping Lab at Zurich University of Applied Sciences is committed to advancing the state of technology for bringing applications to the cloud, for the benefit of the society of large in general and of the local industry in particular. This obliges us to closely monitor industrial trends along with academic advances. A hot [&hellip;]","og_url":"https:\/\/blog.zhaw.ch\/icclab\/snafu-the-swiss-army-knife-of-serverless-computing\/","og_site_name":"Service Engineering (ICCLab &amp; SPLab)","article_published_time":"2017-03-22T11:53:20+00:00","article_modified_time":"2019-08-05T12:35:26+00:00","og_image":[{"url":"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/03\/snafu-sak-logo.jpeg","type":"","width":"","height":""}],"author":"icclab","twitter_card":"summary_large_image","twitter_misc":{"Written by":"icclab","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.zhaw.ch\/icclab\/snafu-the-swiss-army-knife-of-serverless-computing\/#article","isPartOf":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/snafu-the-swiss-army-knife-of-serverless-computing\/"},"author":{"name":"icclab","@id":"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/045c6bde7e681e689e4fc051d8932563"},"headline":"Snafu &#8211; The Swiss Army Knife of Serverless Computing","datePublished":"2017-03-22T11:53:20+00:00","dateModified":"2019-08-05T12:35:26+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/snafu-the-swiss-army-knife-of-serverless-computing\/"},"wordCount":708,"commentCount":0,"image":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/snafu-the-swiss-army-knife-of-serverless-computing\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/03\/snafu-sak-logo.jpeg","keywords":["docker","faas","java","openshift","Python","serverless","snafu","tooling"],"articleSection":["*.*","Open Source"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.zhaw.ch\/icclab\/snafu-the-swiss-army-knife-of-serverless-computing\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.zhaw.ch\/icclab\/snafu-the-swiss-army-knife-of-serverless-computing\/","url":"https:\/\/blog.zhaw.ch\/icclab\/snafu-the-swiss-army-knife-of-serverless-computing\/","name":"Snafu - The Swiss Army Knife of Serverless Computing - Service Engineering (ICCLab &amp; SPLab)","isPartOf":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/snafu-the-swiss-army-knife-of-serverless-computing\/#primaryimage"},"image":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/snafu-the-swiss-army-knife-of-serverless-computing\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/03\/snafu-sak-logo.jpeg","datePublished":"2017-03-22T11:53:20+00:00","dateModified":"2019-08-05T12:35:26+00:00","author":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/045c6bde7e681e689e4fc051d8932563"},"breadcrumb":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/snafu-the-swiss-army-knife-of-serverless-computing\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.zhaw.ch\/icclab\/snafu-the-swiss-army-knife-of-serverless-computing\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.zhaw.ch\/icclab\/snafu-the-swiss-army-knife-of-serverless-computing\/#primaryimage","url":"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/03\/snafu-sak-logo.jpeg","contentUrl":"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/03\/snafu-sak-logo.jpeg","width":300,"height":209},{"@type":"BreadcrumbList","@id":"https:\/\/blog.zhaw.ch\/icclab\/snafu-the-swiss-army-knife-of-serverless-computing\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/blog.zhaw.ch\/icclab\/"},{"@type":"ListItem","position":2,"name":"Snafu &#8211; The Swiss Army Knife of Serverless Computing"}]},{"@type":"WebSite","@id":"https:\/\/blog.zhaw.ch\/icclab\/#website","url":"https:\/\/blog.zhaw.ch\/icclab\/","name":"Service Engineering (ICCLab &amp; SPLab)","description":"A Blog of the ZHAW Zurich University of Applied Sciences","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.zhaw.ch\/icclab\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/045c6bde7e681e689e4fc051d8932563","name":"icclab","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/7b13169e03783f50e96b96fa2ff222b9c530d13c3125f077c7c44f729b857a51?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/7b13169e03783f50e96b96fa2ff222b9c530d13c3125f077c7c44f729b857a51?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/7b13169e03783f50e96b96fa2ff222b9c530d13c3125f077c7c44f729b857a51?s=96&d=mm&r=g","caption":"icclab"},"url":"https:\/\/blog.zhaw.ch\/icclab\/author\/icclab\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts\/11264","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/users\/486"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/comments?post=11264"}],"version-history":[{"count":7,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts\/11264\/revisions"}],"predecessor-version":[{"id":12529,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts\/11264\/revisions\/12529"}],"wp:attachment":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/media?parent=11264"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/categories?post=11264"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/tags?post=11264"},{"taxonomy":"features","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/features?post=11264"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}