{"id":1062,"date":"2015-05-30T17:34:48","date_gmt":"2015-05-30T15:34:48","guid":{"rendered":"http:\/\/www.robinglauser.ch\/blog\/?p=1062"},"modified":"2019-07-24T08:25:57","modified_gmt":"2019-07-24T06:25:57","slug":"build-a-open-source-chromecastsonos-alternative-with-linux","status":"publish","type":"post","link":"https:\/\/www.robinglauser.ch\/blog\/2015\/05\/30\/build-a-open-source-chromecastsonos-alternative-with-linux\/","title":{"rendered":"Build a Open-Source Chromecast\/Sonos alternative with Linux"},"content":{"rendered":"<p>Lately I&#8217;ve been thinking how we could\u00a0build an alternative for Googles Chromecast and Sonos Systems with Open-Source technology.<\/p>\n<p>The ideal solution would be something that could run on a Raspberry PI or similar device and which would be backwards compatible to the Chromecast API. However, performance could be a problem on such devices.<\/p>\n<p>The first problem is to find an Open-Source solution to auto-discover our service from various devices. So we can simply list them in our application without having to supply an IP address.<\/p>\n<h3>Service Auto-Discover<\/h3>\n<p>To auto-discover the service we could use any of the technologies listed below:<\/p>\n<p><strong>ZeroConf:\u00a0<\/strong>This is a set of technologies, including one for automatic location of network services such as printing devices.<\/p>\n<p><b>Bonjour:\u00a0<\/b>Bonjour is Apple&#8217;s implementation of ZeroConf. It can locate devices such as printers and other computers, and the services running on those devices.<\/p>\n<p><strong>Avahi:\u00a0<\/strong>This is also a implementation of ZeroConf. It is the standard implementation on free-software operating systems such as GNU\/Linux.<\/p>\n<p><strong>Dial:\u00a0<\/strong>&#8220;Discovery And Launch&#8221; short DIAL is a protocol developed by Netflix and Youtube. This is the technology Chromecast has used in the past.<\/p>\n<p><strong>mDNS:\u00a0<\/strong>This is the technology Chromecast is using at the moment. It is a ZeroConf service and is using essentially the same programming interfaces.<\/p>\n<p><a href=\"http:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2015\/05\/Autodiscover.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1063\" src=\"http:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2015\/05\/Autodiscover.jpg\" alt=\"Autodiscover\" width=\"1661\" height=\"768\" srcset=\"https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2015\/05\/Autodiscover.jpg 1661w, https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2015\/05\/Autodiscover-400x185.jpg 400w, https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2015\/05\/Autodiscover-1024x473.jpg 1024w, https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2015\/05\/Autodiscover-788x364.jpg 788w\" sizes=\"auto, (max-width: 1661px) 100vw, 1661px\" \/><\/a><\/p>\n<p>The next step here would be to evaluate all those technologies to see which would work best for our scenario.<\/p>\n<h3>Media Streaming<\/h3>\n<p><a href=\"http:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2015\/05\/services.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1071\" src=\"http:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2015\/05\/services.png\" alt=\"services\" width=\"800\" height=\"498\" srcset=\"https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2015\/05\/services.png 800w, https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2015\/05\/services-400x249.png 400w, https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2015\/05\/services-788x491.png 788w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/a><\/p>\n<p>For the replacement to be effective it would have to support at least the major video and audio Services for streaming.<\/p>\n<p>From the top off my head this would be the following: Netflix, YouTube, Vimeo, Google Music, Spotify. If you think other services should be added to this list, please leave a comment.<\/p>\n<p>Also, it should be possible to stream local media or media from a network access storage.<\/p>\n<p>For the actual streaming we can use either the individual API for the service or the DLNA standard for streaming of local or remote content.<\/p>\n<p>To distribute the audio for multi-room audio we could use the\u00a0real-time streaming protocol, so the audio is synced. The hard part here would be to regulate between\u00a0the delay for the audio control and the syncing of the audio.<\/p>\n<h3>Server Interface<\/h3>\n<p>The server should be controllable over a command line interface for audio only servers and also have the possibility of displaying the content on a display for video streaming (Netflix, YouTube, Vimeo, etc).<\/p>\n<p>If nothing is streamed we could display either pictures or some kind of looping video like a video of a fireplace.<\/p>\n<p>For servers without real displays it should be possible to display the meta information about the music on a liquid crystal display.<\/p>\n<p>The key ingredient for the interface should be performance. The time it takes for a video from the user clicking on the stream button to when the video is displayed is critical.<\/p>\n<h3>Clients<\/h3>\n<p>To compete with the Chromecast there should at least exists a browser extension and an Android and IPhone application.<\/p>\n<p>Everything should be built modular, so we can add and remove support for services without changing anything under the hood. The system would only offer a base layer on which the services can build on.<\/p>\n<p>This would mean that a client can only support some services but connect to a server who also provides more services than the client.<\/p>\n<h3>Further progress and current status<\/h3>\n<p>I&#8217;d really like to get some feedback on this article. It may be that this is complete gibberish. So if you have any questions or ideas feel free to comment or contact me directly.<\/p>\n<p>This is at the moment only a concept, but if some people are also interested in working on this or\u00a0have experience with any of those topics don&#8217;t hesitate to contact me.<\/p>\n<p>Twitter:\u00a0<a href=\"https:\/\/twitter.com\/robinglauser\" target=\"_blank\" rel=\"noopener noreferrer\">@robinglauser<br \/>\n<\/a>Google+: <a href=\"https:\/\/plus.google.com\/+RobinGlauser\/posts\" target=\"_blank\" rel=\"noopener noreferrer\">robinglauser<br \/>\n<\/a>Github: <a href=\"https:\/\/github.com\/nahakiole\" target=\"_blank\" rel=\"noopener noreferrer\">nahakiole<br \/>\n<\/a>E-Mail: <a href=\"mailto:robin.glauser@gmail.com\" target=\"_blank\" rel=\"noopener noreferrer\">robin.glauser@gmail.com<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p class=\"excerpt\">Lately I&#8217;ve been thinking how we could\u00a0build an alternative for Googles Chromecast and Sonos Systems with Open-Source technology. The ideal solution would be something that could run on a Raspberry PI or similar device and which would be backwards compatible to the Chromecast API. However, performance could be a problem on such devices. The first problem is to find an &#8230; <a class=\"read-more\" href=\"https:\/\/www.robinglauser.ch\/blog\/2015\/05\/30\/build-a-open-source-chromecastsonos-alternative-with-linux\/\">Read More<\/a><\/p>\n","protected":false},"author":2,"featured_media":1074,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[45],"tags":[117,108,107,104,105,115,114,93,106,116,110,113,112,111,109],"class_list":["post-1062","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development","tag-audio","tag-avahi","tag-bonjour","tag-chromecast","tag-dial","tag-dlna","tag-google-music","tag-linux","tag-mdns","tag-multi-room","tag-netflix","tag-spotify","tag-vimeo","tag-youtube","tag-zeroconf"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Build a Open-Source Chromecast\/Sonos alternative with Linux - Robin Glauser<\/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:\/\/www.robinglauser.ch\/blog\/2015\/05\/30\/build-a-open-source-chromecastsonos-alternative-with-linux\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Build a Open-Source Chromecast\/Sonos alternative with Linux - Robin Glauser\" \/>\n<meta property=\"og:description\" content=\"Lately I&#8217;ve been thinking how we could\u00a0build an alternative for Googles Chromecast and Sonos Systems with Open-Source technology. The ideal solution would be something that could run on a Raspberry PI or similar device and which would be backwards compatible to the Chromecast API. However, performance could be a problem on such devices. The first problem is to find an ... Read More\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.robinglauser.ch\/blog\/2015\/05\/30\/build-a-open-source-chromecastsonos-alternative-with-linux\/\" \/>\n<meta property=\"og:site_name\" content=\"Robin Glauser\" \/>\n<meta property=\"article:published_time\" content=\"2015-05-30T15:34:48+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-07-24T06:25:57+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2015\/05\/chromecast.png\" \/>\n\t<meta property=\"og:image:width\" content=\"700\" \/>\n\t<meta property=\"og:image:height\" content=\"400\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Robin Glauser\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@robinglauser\" \/>\n<meta name=\"twitter:site\" content=\"@robinglauser\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Robin Glauser\" \/>\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:\/\/www.robinglauser.ch\/blog\/2015\/05\/30\/build-a-open-source-chromecastsonos-alternative-with-linux\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.robinglauser.ch\/blog\/2015\/05\/30\/build-a-open-source-chromecastsonos-alternative-with-linux\/\"},\"author\":{\"name\":\"Robin Glauser\",\"@id\":\"https:\/\/www.robinglauser.ch\/blog\/#\/schema\/person\/e1a94504a6ff5171fa13670932514b19\"},\"headline\":\"Build a Open-Source Chromecast\/Sonos alternative with Linux\",\"datePublished\":\"2015-05-30T15:34:48+00:00\",\"dateModified\":\"2019-07-24T06:25:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.robinglauser.ch\/blog\/2015\/05\/30\/build-a-open-source-chromecastsonos-alternative-with-linux\/\"},\"wordCount\":652,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\/\/www.robinglauser.ch\/blog\/#\/schema\/person\/e1a94504a6ff5171fa13670932514b19\"},\"image\":{\"@id\":\"https:\/\/www.robinglauser.ch\/blog\/2015\/05\/30\/build-a-open-source-chromecastsonos-alternative-with-linux\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2015\/05\/chromecast.png\",\"keywords\":[\"audio\",\"avahi\",\"bonjour\",\"chromecast\",\"dial\",\"dlna\",\"google music\",\"linux\",\"mdns\",\"multi-room\",\"netflix\",\"spotify\",\"vimeo\",\"youtube\",\"zeroconf\"],\"articleSection\":[\"Development\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.robinglauser.ch\/blog\/2015\/05\/30\/build-a-open-source-chromecastsonos-alternative-with-linux\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.robinglauser.ch\/blog\/2015\/05\/30\/build-a-open-source-chromecastsonos-alternative-with-linux\/\",\"url\":\"https:\/\/www.robinglauser.ch\/blog\/2015\/05\/30\/build-a-open-source-chromecastsonos-alternative-with-linux\/\",\"name\":\"Build a Open-Source Chromecast\/Sonos alternative with Linux - Robin Glauser\",\"isPartOf\":{\"@id\":\"https:\/\/www.robinglauser.ch\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.robinglauser.ch\/blog\/2015\/05\/30\/build-a-open-source-chromecastsonos-alternative-with-linux\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.robinglauser.ch\/blog\/2015\/05\/30\/build-a-open-source-chromecastsonos-alternative-with-linux\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2015\/05\/chromecast.png\",\"datePublished\":\"2015-05-30T15:34:48+00:00\",\"dateModified\":\"2019-07-24T06:25:57+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.robinglauser.ch\/blog\/2015\/05\/30\/build-a-open-source-chromecastsonos-alternative-with-linux\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.robinglauser.ch\/blog\/2015\/05\/30\/build-a-open-source-chromecastsonos-alternative-with-linux\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.robinglauser.ch\/blog\/2015\/05\/30\/build-a-open-source-chromecastsonos-alternative-with-linux\/#primaryimage\",\"url\":\"https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2015\/05\/chromecast.png\",\"contentUrl\":\"https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2015\/05\/chromecast.png\",\"width\":700,\"height\":400},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.robinglauser.ch\/blog\/2015\/05\/30\/build-a-open-source-chromecastsonos-alternative-with-linux\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.robinglauser.ch\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Build a Open-Source Chromecast\/Sonos alternative with Linux\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.robinglauser.ch\/blog\/#website\",\"url\":\"https:\/\/www.robinglauser.ch\/blog\/\",\"name\":\"Robin Glauser\",\"description\":\"My Blog about Development, Design and my random thoughts.\",\"publisher\":{\"@id\":\"https:\/\/www.robinglauser.ch\/blog\/#\/schema\/person\/e1a94504a6ff5171fa13670932514b19\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.robinglauser.ch\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.robinglauser.ch\/blog\/#\/schema\/person\/e1a94504a6ff5171fa13670932514b19\",\"name\":\"Robin Glauser\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2015\/10\/DSC_1244_small.jpg\",\"url\":\"https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2015\/10\/DSC_1244_small.jpg\",\"contentUrl\":\"https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2015\/10\/DSC_1244_small.jpg\",\"width\":800,\"height\":530,\"caption\":\"Robin Glauser\"},\"logo\":{\"@id\":\"https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2015\/10\/DSC_1244_small.jpg\"},\"description\":\"I'm a web developer.\",\"sameAs\":[\"https:\/\/www.robinglauser.ch\",\"https:\/\/www.instagram.com\/robinglauser\/\",\"https:\/\/x.com\/robinglauser\"],\"url\":\"https:\/\/www.robinglauser.ch\/blog\/author\/robin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Build a Open-Source Chromecast\/Sonos alternative with Linux - Robin Glauser","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:\/\/www.robinglauser.ch\/blog\/2015\/05\/30\/build-a-open-source-chromecastsonos-alternative-with-linux\/","og_locale":"en_US","og_type":"article","og_title":"Build a Open-Source Chromecast\/Sonos alternative with Linux - Robin Glauser","og_description":"Lately I&#8217;ve been thinking how we could\u00a0build an alternative for Googles Chromecast and Sonos Systems with Open-Source technology. The ideal solution would be something that could run on a Raspberry PI or similar device and which would be backwards compatible to the Chromecast API. However, performance could be a problem on such devices. The first problem is to find an ... Read More","og_url":"https:\/\/www.robinglauser.ch\/blog\/2015\/05\/30\/build-a-open-source-chromecastsonos-alternative-with-linux\/","og_site_name":"Robin Glauser","article_published_time":"2015-05-30T15:34:48+00:00","article_modified_time":"2019-07-24T06:25:57+00:00","og_image":[{"width":700,"height":400,"url":"https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2015\/05\/chromecast.png","type":"image\/png"}],"author":"Robin Glauser","twitter_card":"summary_large_image","twitter_creator":"@robinglauser","twitter_site":"@robinglauser","twitter_misc":{"Written by":"Robin Glauser","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.robinglauser.ch\/blog\/2015\/05\/30\/build-a-open-source-chromecastsonos-alternative-with-linux\/#article","isPartOf":{"@id":"https:\/\/www.robinglauser.ch\/blog\/2015\/05\/30\/build-a-open-source-chromecastsonos-alternative-with-linux\/"},"author":{"name":"Robin Glauser","@id":"https:\/\/www.robinglauser.ch\/blog\/#\/schema\/person\/e1a94504a6ff5171fa13670932514b19"},"headline":"Build a Open-Source Chromecast\/Sonos alternative with Linux","datePublished":"2015-05-30T15:34:48+00:00","dateModified":"2019-07-24T06:25:57+00:00","mainEntityOfPage":{"@id":"https:\/\/www.robinglauser.ch\/blog\/2015\/05\/30\/build-a-open-source-chromecastsonos-alternative-with-linux\/"},"wordCount":652,"commentCount":2,"publisher":{"@id":"https:\/\/www.robinglauser.ch\/blog\/#\/schema\/person\/e1a94504a6ff5171fa13670932514b19"},"image":{"@id":"https:\/\/www.robinglauser.ch\/blog\/2015\/05\/30\/build-a-open-source-chromecastsonos-alternative-with-linux\/#primaryimage"},"thumbnailUrl":"https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2015\/05\/chromecast.png","keywords":["audio","avahi","bonjour","chromecast","dial","dlna","google music","linux","mdns","multi-room","netflix","spotify","vimeo","youtube","zeroconf"],"articleSection":["Development"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.robinglauser.ch\/blog\/2015\/05\/30\/build-a-open-source-chromecastsonos-alternative-with-linux\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.robinglauser.ch\/blog\/2015\/05\/30\/build-a-open-source-chromecastsonos-alternative-with-linux\/","url":"https:\/\/www.robinglauser.ch\/blog\/2015\/05\/30\/build-a-open-source-chromecastsonos-alternative-with-linux\/","name":"Build a Open-Source Chromecast\/Sonos alternative with Linux - Robin Glauser","isPartOf":{"@id":"https:\/\/www.robinglauser.ch\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.robinglauser.ch\/blog\/2015\/05\/30\/build-a-open-source-chromecastsonos-alternative-with-linux\/#primaryimage"},"image":{"@id":"https:\/\/www.robinglauser.ch\/blog\/2015\/05\/30\/build-a-open-source-chromecastsonos-alternative-with-linux\/#primaryimage"},"thumbnailUrl":"https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2015\/05\/chromecast.png","datePublished":"2015-05-30T15:34:48+00:00","dateModified":"2019-07-24T06:25:57+00:00","breadcrumb":{"@id":"https:\/\/www.robinglauser.ch\/blog\/2015\/05\/30\/build-a-open-source-chromecastsonos-alternative-with-linux\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.robinglauser.ch\/blog\/2015\/05\/30\/build-a-open-source-chromecastsonos-alternative-with-linux\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.robinglauser.ch\/blog\/2015\/05\/30\/build-a-open-source-chromecastsonos-alternative-with-linux\/#primaryimage","url":"https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2015\/05\/chromecast.png","contentUrl":"https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2015\/05\/chromecast.png","width":700,"height":400},{"@type":"BreadcrumbList","@id":"https:\/\/www.robinglauser.ch\/blog\/2015\/05\/30\/build-a-open-source-chromecastsonos-alternative-with-linux\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.robinglauser.ch\/blog\/"},{"@type":"ListItem","position":2,"name":"Build a Open-Source Chromecast\/Sonos alternative with Linux"}]},{"@type":"WebSite","@id":"https:\/\/www.robinglauser.ch\/blog\/#website","url":"https:\/\/www.robinglauser.ch\/blog\/","name":"Robin Glauser","description":"My Blog about Development, Design and my random thoughts.","publisher":{"@id":"https:\/\/www.robinglauser.ch\/blog\/#\/schema\/person\/e1a94504a6ff5171fa13670932514b19"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.robinglauser.ch\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.robinglauser.ch\/blog\/#\/schema\/person\/e1a94504a6ff5171fa13670932514b19","name":"Robin Glauser","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2015\/10\/DSC_1244_small.jpg","url":"https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2015\/10\/DSC_1244_small.jpg","contentUrl":"https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2015\/10\/DSC_1244_small.jpg","width":800,"height":530,"caption":"Robin Glauser"},"logo":{"@id":"https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2015\/10\/DSC_1244_small.jpg"},"description":"I'm a web developer.","sameAs":["https:\/\/www.robinglauser.ch","https:\/\/www.instagram.com\/robinglauser\/","https:\/\/x.com\/robinglauser"],"url":"https:\/\/www.robinglauser.ch\/blog\/author\/robin\/"}]}},"_links":{"self":[{"href":"https:\/\/www.robinglauser.ch\/blog\/wp-json\/wp\/v2\/posts\/1062","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.robinglauser.ch\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.robinglauser.ch\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.robinglauser.ch\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.robinglauser.ch\/blog\/wp-json\/wp\/v2\/comments?post=1062"}],"version-history":[{"count":25,"href":"https:\/\/www.robinglauser.ch\/blog\/wp-json\/wp\/v2\/posts\/1062\/revisions"}],"predecessor-version":[{"id":3072,"href":"https:\/\/www.robinglauser.ch\/blog\/wp-json\/wp\/v2\/posts\/1062\/revisions\/3072"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.robinglauser.ch\/blog\/wp-json\/wp\/v2\/media\/1074"}],"wp:attachment":[{"href":"https:\/\/www.robinglauser.ch\/blog\/wp-json\/wp\/v2\/media?parent=1062"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.robinglauser.ch\/blog\/wp-json\/wp\/v2\/categories?post=1062"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.robinglauser.ch\/blog\/wp-json\/wp\/v2\/tags?post=1062"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}