{"id":11865,"date":"2020-10-30T17:47:13","date_gmt":"2020-10-30T16:47:13","guid":{"rendered":"https:\/\/www.codemotion.com\/magazine\/?p=11865"},"modified":"2021-12-23T11:44:05","modified_gmt":"2021-12-23T10:44:05","slug":"webcomponents-bike-computer","status":"publish","type":"post","link":"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/webcomponents-bike-computer\/","title":{"rendered":"Building a bike-computer on the Web with WebComponents"},"content":{"rendered":"\t\t\t\t<div class=\"wp-block-uagb-table-of-contents uagb-toc__align-left uagb-toc__columns-1  uagb-block-0dfc03da      \"\n\t\t\t\t\tdata-scroll= \"1\"\n\t\t\t\t\tdata-offset= \"30\"\n\t\t\t\t\tstyle=\"\"\n\t\t\t\t>\n\t\t\t\t<div class=\"uagb-toc__wrap\">\n\t\t\t\t\t\t<div class=\"uagb-toc__title\">\n\t\t\t\t\t\t\tTable Of Contents\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"uagb-toc__list-wrap \">\n\t\t\t\t\t\t<ol class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#choosing-web-bluetooth-over-mobile-first\" class=\"uagb-toc-link__trigger\">Choosing Web Bluetooth over mobile-first?<\/a><li class=\"uagb-toc__list\"><a href=\"#wanting-to-learn-something-new-with-a-side-project\" class=\"uagb-toc-link__trigger\">Wanting to learn something new with a side project?\u00a0<\/a><li class=\"uagb-toc__list\"><a href=\"#why-webcomponents\" class=\"uagb-toc-link__trigger\">Why WebComponents?\u00a0<\/a><li class=\"uagb-toc__list\"><a href=\"#web-audiometric-with-it-whats-the-idea-there\" class=\"uagb-toc-link__trigger\">Web Audiometric with it. What&#039;s the idea there?<\/a><li class=\"uagb-toc__list\"><a href=\"#google-developers-experts-program\" class=\"uagb-toc-link__trigger\">Google Developers experts program<\/a><\/ol>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\n\n\n<p>Passion projects offer a great opportunity to learn new skills and develop experience in pursuits you really enjoy. A keen cyclist, Filip Bech-Larse developed a trainer <span id=\"urn:enhancement-2e6e0fb9\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/mobile_app\">app<\/span> that reads sensor-data via <strong>WebBluetooth<\/strong> from different sources, including Heart-rate, Speed, and Cadence. Filip is a <span id=\"urn:enhancement-98fb63e5\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/front_and_back_ends\">front-end<\/span> <span id=\"urn:enhancement-8c0cebe0\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/software_developer\">developer<\/span> from Denmark, and the Head of <span id=\"urn:enhancement-8ce72d95\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/technology\">Technology<\/span> and Innovation at IMPACT, delivering large-scale commerce-products to well-known business and consumer brands. I spoke to him prior to his presentation at <em><a href=\"https:\/\/events.codemotion.com\/conferences\/online\/2020\/online-tech-conference-spanish-edition\/#home\" class=\"ek-link\">Codemotion\u2019s online conference: The Spanish edition<\/a><\/em> about how he created the opportunity to learn <strong>WebComponents<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-choosing-web-bluetooth-over-mobile-first\">Choosing Web Bluetooth over mobile-first?<\/h2>\n\n\n\n<p>I was curious why Filip opted for Web <a class=\"ek-link ek-link\" href=\"https:\/\/www.codemotion.com\/magazine\/dev-hub\/mobile-dev\/iot-innovation-and-bluetooth-mesh-networks\/\">Bluetooth<\/a> in the first <span id=\"urn:enhancement-4a763ee1\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/instance_computer_science\">instance<\/span>. He gave two great reasons:&nbsp;<\/p>\n\n\n\n<p>\u201cFirstly, <strong>platform independence<\/strong>. So you can write your <span id=\"urn:enhancement-626b5534\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/code_programming_language\">code<\/span> once and have it deployed, no matter if it&#8217;s an <span id=\"urn:enhancement-eec4b8f8\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/android_operating_system\">Android<\/span> phone, or Windows Phone or your <span id=\"urn:enhancement-58aa3d59\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/desktop_computer\">desktop computer<\/span> or wherever you want it to operate.&nbsp; Secondly, I really like that I\u2019m in charge of the <span id=\"urn:enhancement-cbc240f6\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/code_programming_language\">code<\/span>. So, there&#8217;s no <span id=\"urn:enhancement-f55d4dbe\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/mobile_app\">app<\/span> store or restriction to the customer.\u201d<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"640\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/10\/bluetooth-1024x640.jpg\" alt=\"webcomponents bluetooth\" class=\"wp-image-11236\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/10\/bluetooth-1024x640.jpg 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/10\/bluetooth-300x188.jpg 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/10\/bluetooth-768x480.jpg 768w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/10\/bluetooth.jpg 1080w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n\n<p>Creating a product is always a great tangible way to learn a hands-on skill instead of watching a video or reading a book. Filip notes that he wanted to play with <span id=\"urn:enhancement-c654e670\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/web_web_browser\">Web<\/span> <span id=\"urn:enhancement-c70e1c27\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/bluetooth\">Bluetooth<\/span>. \u201cAnd I thought this was kind of a fun way to do it that was relevant to something I found personally interesting. I got started, just around the last COVID-19 lockdown, and as I had to stay in my house,&nbsp; it was a good way to get some exercise done as well.\u201d<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-wanting-to-learn-something-new-with-a-side-project\">Wanting to learn something new with a side project?&nbsp;<\/h2>\n\n\n\n<p>Maybe you\u2019ve been wanting to build something but you\u2019re not really sure how to get started. Filip advises: \u201cI think you start by just trying to build something, even if it&#8217;s only for you. You don&#8217;t have to have a perfect idea. You don&#8217;t have to have a business plan. Really <strong>just start building something<\/strong>. And it&#8217;s fun &#8211; to me, that&#8217;s the most important part. Eventually, I moved onto <span id=\"urn:enhancement-be7cf494\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/swift_programming_language\">Swift<\/span> like everybody else, and I don&#8217;t use my own stuff anymore. But I think it was a fun experience.&nbsp; You learn so much more from actually trying to build something by yourself.\u201d<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-why-webcomponents\">Why WebComponents?&nbsp;<\/h2>\n\n\n\n<p>Filip asserts that <strong>WebComponents<\/strong> have a <a href=\"https:\/\/www.codemotion.com\/magazine\/dev-hub\/web-developer\/thinking-in-web-component\/\" class=\"ek-link\">much broader audience<\/a> than simply <span id=\"urn:enhancement-ac96fbb1\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/web_web_browser\">Web<\/span> <span id=\"urn:enhancement-ce953e44\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/bluetooth\">Bluetooth<\/span> stuff (we discussed about this <span id=\"urn:enhancement-6048c112\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/technology\">technology<\/span> <a href=\"https:\/\/www.codemotion.com\/magazine\/dev-hub\/web-developer\/thinking-in-web-component\/\" class=\"ek-link\">here<\/a>). He suggests that <span id=\"urn:enhancement-d0439c95\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/bluetooth\">Bluetooth<\/span> is still limited in some respects, \u201cbut I think <strong>web <span id=\"urn:enhancement-8fa92b58\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/component-based_software_engineering\">components<\/span> are really the model of everything on the <span id=\"urn:enhancement-5b47e5ed\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/web_web_browser\">web<\/span><\/strong>. And I think one <span id=\"urn:enhancement-2b8258d\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/component-based_software_engineering\">component<\/span> will eventually take over, and just be how you do <span id=\"urn:enhancement-db9198e9\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/component-based_software_engineering\">components<\/span> on the <span id=\"urn:enhancement-1c6e76ee\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/web_web_browser\">web<\/span> everywhere.\u201d<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"366\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/10\/Senza-titolo-1-8-1024x366.jpg\" alt=\"angular, vue, node webcomponents\" class=\"wp-image-11877\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/10\/Senza-titolo-1-8-1024x366.jpg 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/10\/Senza-titolo-1-8-300x107.jpg 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/10\/Senza-titolo-1-8-768x274.jpg 768w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/10\/Senza-titolo-1-8.jpg 1101w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n\n<p>He explained:&nbsp;<\/p>\n\n\n\n<p>&nbsp;\u201cI used to do stuff with <a href=\"https:\/\/www.codemotion.com\/magazine\/dev-hub\/web-developer\/react-project-cra-nextjs-gatsby\/\" class=\"ek-link\"><span id=\"urn:local-annotation-646227\" class=\"textannotation disambiguated\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/react\">React<\/span><\/a> and with <span id=\"urn:local-annotation-228773\" class=\"textannotation disambiguated\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/vue-js\">Vue<\/span> and with <a class=\"ek-link ek-link\" href=\"https:\/\/www.codemotion.com\/magazine\/dev-hub\/community-manager\/interview-fabio-biondi-refactoring-an-angular-application-through-a-live-coding-session\/\">Angular,<\/a> and I did everything from <span id=\"urn:enhancement-6872cda9\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/angularjs\">AngularJS<\/span>, to <span id=\"urn:local-annotation-872557\" class=\"textannotation disambiguated\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/jquery\">jQuery<\/span> and stuff. <strong>I really see web <span id=\"urn:enhancement-4254b772\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/component-based_software_engineering\">components<\/span> as a very important milestone in the future of <span id=\"urn:enhancement-60f8d6a7\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/web_development\">web development<\/span><\/strong>. I like the idea that you take an almost primitive thing that all the <span id=\"urn:enhancement-5201c7ad\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/software_framework\">frameworks<\/span> agree on, and then you actually put it in the platform so that the <span id=\"urn:enhancement-2f937d0a\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/software_framework\">frameworks<\/span> don&#8217;t have to compete over implementing the same <span id=\"urn:enhancement-8cb3791a\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/software_feature\">feature<\/span>.&nbsp; They can actually just use the platform. I think that that&#8217;s better for frameworks and everybody wins in this scenario.\u201d&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-web-audiometric-with-it-what-s-the-idea-there\">Web Audiometric with it. What&#8217;s the idea there?<\/h2>\n\n\n\n<p>The use of Web Audio metronome was motivated to play with more web technologies. But Filip was also attracted to the idea to make something that beeps along with your heart, which offers an audible indication of your stress levels and how your body is responding to exercise. He notes that \u201cWhen you play it alongside music, it&#8217;s easy to hear if it goes up or down. I actually started out connecting it to like the cadence of the cycling. Typically when you do indoor sessions, you do two minutes at 80mph or two minutes at 90 mph, and the metronome kind of makes it easier to follow along.\u201d&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-google-developers-experts-program\">Google Developers experts program<\/h2>\n\n\n\n<p>Filip is a <strong><span id=\"urn:enhancement-e55ad5be\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/google_developers\">Google Developer<\/span> Expert <\/strong>(<strong>GDE<\/strong>) in Web technologies. He describes the <span id=\"urn:enhancement-73845b0a\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/computer_program\">program<\/span> as akin to an MVP <span id=\"urn:enhancement-2a30e16f\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/computer_program\">program<\/span> which offers great benefits:&nbsp;<\/p>\n\n\n\n<p>\u201cIt gives me access to people within <span id=\"urn:enhancement-34f47471\" class=\"textannotation disambiguated wl-organization\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/google\">Google<\/span> that actually work on the stuff that I like. So I get to sit down with the engineers that actually build through them, and talk to them about, for example, considerations in how an <span id=\"urn:enhancement-c4cd6f67\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/application_programming_interface\">API<\/span> should work or how <span id=\"urn:enhancement-ffd51db4\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/software_standard\">standards<\/span> should evolve. From a framework perspective, a part of the GDE <span id=\"urn:enhancement-e69c4d3a\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/computer_program\">program<\/span> is actually also access to the Angular team and how they work with Angular and where that&#8217;s going. And I think that&#8217;s pretty interesting.\u201d<\/p>\n\n\n\n<p>The <span id=\"urn:enhancement-2680c52f\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/computer_program\">program<\/span> also provides access to international conferences as a speaker in places such as Romania and Ukraine and picks up the costs, providing valuable experience speaking around the world.&nbsp;<\/p>\n\n\n\n<p>During his talk, Filip will demonstrate <strong>building the <span id=\"urn:enhancement-3c2842b4\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/mobile_app\">app<\/span> with WebComponents<\/strong> in <a href=\"https:\/\/www.codemotion.com\/magazine\/dev-hub\/web-developer\/learning-typescript\/\" class=\"ek-link\">TypeScript<\/a>, and talk about different modules and production optimisations. He\u2019s looking to extend the capability of his bike computer to a progressive <span id=\"urn:enhancement-d88b2740\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/web_application\">web app<\/span>. During this talk he\u2019ll showcase his creation &#8211; in his bike shed, suitably attired in lycra &#8211; and turn his creation into an offline-capable PWA that in the future could be added to the <span id=\"urn:enhancement-225b2fb5\" class=\"textannotation disambiguated wl-organization\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/microsoft\">Microsoft<\/span> Store and <span id=\"urn:enhancement-d213e72b\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/google_play\">Play store<\/span>.<\/p>\n\n\n","protected":false},"excerpt":{"rendered":"<p>Passion projects offer a great opportunity to learn new skills and develop experience in pursuits you really enjoy. A keen cyclist, Filip Bech-Larse developed a trainer app that reads sensor-data via WebBluetooth from different sources, including Heart-rate, Speed, and Cadence. Filip is a front-end developer from Denmark, and the Head of Technology and Innovation at&#8230; <a class=\"more-link\" href=\"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/webcomponents-bike-computer\/\">Read more<\/a><\/p>\n","protected":false},"author":85,"featured_media":11875,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_editorskit_title_hidden":false,"_editorskit_reading_time":4,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","_uag_custom_page_level_css":"","_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[8],"tags":[6236],"collections":[],"class_list":{"0":"post-11865","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-javascript","8":"tag-web-developer","9":"entry"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.9 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Building a bike-computer on the Web with WebComponents - Codemotion<\/title>\n<meta name=\"description\" content=\"We meet with Filip Bech-Larse before his talk at the Spanish edition of Codemotion Virtual conference, to learn more about WebComponents.\" \/>\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.codemotion.com\/magazine\/frontend\/javascript\/webcomponents-bike-computer\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Building a bike-computer on the Web with WebComponents\" \/>\n<meta property=\"og:description\" content=\"We meet with Filip Bech-Larse before his talk at the Spanish edition of Codemotion Virtual conference, to learn more about WebComponents.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/webcomponents-bike-computer\/\" \/>\n<meta property=\"og:site_name\" content=\"Codemotion Magazine\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Codemotion.Italy\/\" \/>\n<meta property=\"article:published_time\" content=\"2020-10-30T16:47:13+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-12-23T10:44:05+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/10\/Senza-titolo-1-7.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"675\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Cate Lawrence\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:site\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Cate Lawrence\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/webcomponents-bike-computer\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/webcomponents-bike-computer\/\"},\"author\":{\"name\":\"Cate Lawrence\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/df32323fd62dc47fa8892426677a2cc1\"},\"headline\":\"Building a bike-computer on the Web with WebComponents\",\"datePublished\":\"2020-10-30T16:47:13+00:00\",\"dateModified\":\"2021-12-23T10:44:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/webcomponents-bike-computer\/\"},\"wordCount\":924,\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/webcomponents-bike-computer\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/10\/Senza-titolo-1-7.jpg\",\"keywords\":[\"Web Developer\"],\"articleSection\":[\"JavaScript\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/webcomponents-bike-computer\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/webcomponents-bike-computer\/\",\"name\":\"Building a bike-computer on the Web with WebComponents - Codemotion\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/webcomponents-bike-computer\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/webcomponents-bike-computer\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/10\/Senza-titolo-1-7.jpg\",\"datePublished\":\"2020-10-30T16:47:13+00:00\",\"dateModified\":\"2021-12-23T10:44:05+00:00\",\"description\":\"We meet with Filip Bech-Larse before his talk at the Spanish edition of Codemotion Virtual conference, to learn more about WebComponents.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/webcomponents-bike-computer\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/webcomponents-bike-computer\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/webcomponents-bike-computer\/#primaryimage\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/10\/Senza-titolo-1-7.jpg\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/10\/Senza-titolo-1-7.jpg\",\"width\":1200,\"height\":675,\"caption\":\"web mobile app development\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/webcomponents-bike-computer\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Dev Life\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/dev-life\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Events\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/dev-life\/events\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Building a bike-computer on the Web with WebComponents\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"name\":\"Codemotion Magazine\",\"description\":\"We code the future. Together\",\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\",\"name\":\"Codemotion\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"width\":225,\"height\":225,\"caption\":\"Codemotion\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Codemotion.Italy\/\",\"https:\/\/x.com\/CodemotionIT\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/df32323fd62dc47fa8892426677a2cc1\",\"name\":\"Cate Lawrence\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/2dbf9850a6e06e402d71247f79a76d6a5adad553ed6aab558a29a4107e5e83b1?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/2dbf9850a6e06e402d71247f79a76d6a5adad553ed6aab558a29a4107e5e83b1?s=96&d=mm&r=g\",\"caption\":\"Cate Lawrence\"},\"url\":\"https:\/\/www.codemotion.com\/magazine\/author\/cate-lawrence\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Building a bike-computer on the Web with WebComponents - Codemotion","description":"We meet with Filip Bech-Larse before his talk at the Spanish edition of Codemotion Virtual conference, to learn more about WebComponents.","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.codemotion.com\/magazine\/frontend\/javascript\/webcomponents-bike-computer\/","og_locale":"en_US","og_type":"article","og_title":"Building a bike-computer on the Web with WebComponents","og_description":"We meet with Filip Bech-Larse before his talk at the Spanish edition of Codemotion Virtual conference, to learn more about WebComponents.","og_url":"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/webcomponents-bike-computer\/","og_site_name":"Codemotion Magazine","article_publisher":"https:\/\/www.facebook.com\/Codemotion.Italy\/","article_published_time":"2020-10-30T16:47:13+00:00","article_modified_time":"2021-12-23T10:44:05+00:00","og_image":[{"width":1200,"height":675,"url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/10\/Senza-titolo-1-7.jpg","type":"image\/jpeg"}],"author":"Cate Lawrence","twitter_card":"summary_large_image","twitter_creator":"@CodemotionIT","twitter_site":"@CodemotionIT","twitter_misc":{"Written by":"Cate Lawrence","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/webcomponents-bike-computer\/#article","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/webcomponents-bike-computer\/"},"author":{"name":"Cate Lawrence","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/df32323fd62dc47fa8892426677a2cc1"},"headline":"Building a bike-computer on the Web with WebComponents","datePublished":"2020-10-30T16:47:13+00:00","dateModified":"2021-12-23T10:44:05+00:00","mainEntityOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/webcomponents-bike-computer\/"},"wordCount":924,"publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/webcomponents-bike-computer\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/10\/Senza-titolo-1-7.jpg","keywords":["Web Developer"],"articleSection":["JavaScript"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/webcomponents-bike-computer\/","url":"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/webcomponents-bike-computer\/","name":"Building a bike-computer on the Web with WebComponents - Codemotion","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/webcomponents-bike-computer\/#primaryimage"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/webcomponents-bike-computer\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/10\/Senza-titolo-1-7.jpg","datePublished":"2020-10-30T16:47:13+00:00","dateModified":"2021-12-23T10:44:05+00:00","description":"We meet with Filip Bech-Larse before his talk at the Spanish edition of Codemotion Virtual conference, to learn more about WebComponents.","breadcrumb":{"@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/webcomponents-bike-computer\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/webcomponents-bike-computer\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/webcomponents-bike-computer\/#primaryimage","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/10\/Senza-titolo-1-7.jpg","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/10\/Senza-titolo-1-7.jpg","width":1200,"height":675,"caption":"web mobile app development"},{"@type":"BreadcrumbList","@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/javascript\/webcomponents-bike-computer\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.codemotion.com\/magazine\/"},{"@type":"ListItem","position":2,"name":"Dev Life","item":"https:\/\/www.codemotion.com\/magazine\/dev-life\/"},{"@type":"ListItem","position":3,"name":"Events","item":"https:\/\/www.codemotion.com\/magazine\/dev-life\/events\/"},{"@type":"ListItem","position":4,"name":"Building a bike-computer on the Web with WebComponents"}]},{"@type":"WebSite","@id":"https:\/\/www.codemotion.com\/magazine\/#website","url":"https:\/\/www.codemotion.com\/magazine\/","name":"Codemotion Magazine","description":"We code the future. Together","publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.codemotion.com\/magazine\/#organization","name":"Codemotion","url":"https:\/\/www.codemotion.com\/magazine\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","width":225,"height":225,"caption":"Codemotion"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Codemotion.Italy\/","https:\/\/x.com\/CodemotionIT"]},{"@type":"Person","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/df32323fd62dc47fa8892426677a2cc1","name":"Cate Lawrence","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/2dbf9850a6e06e402d71247f79a76d6a5adad553ed6aab558a29a4107e5e83b1?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2dbf9850a6e06e402d71247f79a76d6a5adad553ed6aab558a29a4107e5e83b1?s=96&d=mm&r=g","caption":"Cate Lawrence"},"url":"https:\/\/www.codemotion.com\/magazine\/author\/cate-lawrence\/"}]}},"featured_image_src":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/10\/Senza-titolo-1-7-600x400.jpg","featured_image_src_square":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/10\/Senza-titolo-1-7-600x600.jpg","author_info":{"display_name":"Cate Lawrence","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/cate-lawrence\/"},"uagb_featured_image_src":{"full":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/10\/Senza-titolo-1-7.jpg",1200,675,false],"thumbnail":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/10\/Senza-titolo-1-7-150x150.jpg",150,150,true],"medium":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/10\/Senza-titolo-1-7-300x169.jpg",300,169,true],"medium_large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/10\/Senza-titolo-1-7-768x432.jpg",768,432,true],"large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/10\/Senza-titolo-1-7-1024x576.jpg",1024,576,true],"1536x1536":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/10\/Senza-titolo-1-7.jpg",1200,675,false],"2048x2048":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/10\/Senza-titolo-1-7.jpg",1200,675,false],"small-home-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/10\/Senza-titolo-1-7.jpg",100,56,false],"sidebar-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/10\/Senza-titolo-1-7-180x128.jpg",180,128,true],"genesis-singular-images":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/10\/Senza-titolo-1-7-896x504.jpg",896,504,true],"archive-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/10\/Senza-titolo-1-7-400x225.jpg",400,225,true],"gb-block-post-grid-landscape":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/10\/Senza-titolo-1-7-600x400.jpg",600,400,true],"gb-block-post-grid-square":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/10\/Senza-titolo-1-7-600x600.jpg",600,600,true]},"uagb_author_info":{"display_name":"Cate Lawrence","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/cate-lawrence\/"},"uagb_comment_info":0,"uagb_excerpt":"Passion projects offer a great opportunity to learn new skills and develop experience in pursuits you really enjoy. A keen cyclist, Filip Bech-Larse developed a trainer app that reads sensor-data via WebBluetooth from different sources, including Heart-rate, Speed, and Cadence. Filip is a front-end developer from Denmark, and the Head of Technology and Innovation at&#8230;&hellip;","lang":"en","_links":{"self":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/11865","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/users\/85"}],"replies":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/comments?post=11865"}],"version-history":[{"count":12,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/11865\/revisions"}],"predecessor-version":[{"id":15121,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/11865\/revisions\/15121"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media\/11875"}],"wp:attachment":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media?parent=11865"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/categories?post=11865"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/tags?post=11865"},{"taxonomy":"collections","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/collections?post=11865"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}