{"id":4938,"date":"2020-10-02T16:45:52","date_gmt":"2020-10-02T15:45:52","guid":{"rendered":"https:\/\/www.20i.com\/blog\/?p=4938"},"modified":"2026-04-16T10:18:34","modified_gmt":"2026-04-16T09:18:34","slug":"i-love-javascript","status":"publish","type":"post","link":"https:\/\/www.20i.com\/blog\/i-love-javascript\/","title":{"rendered":"I \u2764\ufe0f JavaScript"},"content":{"rendered":"\n<p><strong>So, continuing with my I \u2764\ufe0f \u2026 series of posts, I thought I\u2019d like to bring a technology into focus that I myself don\u2019t directly develop with at 20i*. <\/strong><\/p>\n\n\n\n<p>Rather, it&#8217;s a technology that is absolutely the reason we have the incredible web as we know it to be in 2020. Please enter JavaScript.<\/p>\n\n\n\n<p>At 20i we use JavaScript in our <a href=\"https:\/\/www.20i.com\/my20i\">control panel<\/a> primarily &#8211; Vue being our main technology, but what else can it do?<\/p>\n\n\n\n<p>Now before any hardcore purists out there tell me off for incorrectly referring to JavaScript, ECMAScript or ES6, please know &#8211; I love them all. <\/p>\n\n\n\n<p>They all contribute to making the web browser the truly incredible platform it is. So, let\u2019s have a look at some examples!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Drops<\/h2>\n\n\n\n<p>First up is my flat-out favourite: this is a wicked 12 channel mixing demo, with fade, balance, stop, rewind and other fancy mixing desk coolness. Check it out! <a href=\"http:\/\/kevvv.in\/mix\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">kevvv.in\/mix<\/a><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"http:\/\/kevvv.in\/mix\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><img loading=\"lazy\" decoding=\"async\" width=\"1295\" height=\"492\" src=\"https:\/\/www.20i.com\/blog\/wp-content\/uploads\/2020\/10\/Mix-JS.png\" alt=\"Mixing desk in JavaScript\" class=\"wp-image-4947\" srcset=\"https:\/\/www.20i.com\/blog\/wp-content\/uploads\/2020\/10\/Mix-JS.png 1295w, https:\/\/www.20i.com\/blog\/wp-content\/smush-webp\/2020\/10\/Mix-JS-300x114.png.webp 300w, https:\/\/www.20i.com\/blog\/wp-content\/smush-webp\/2020\/10\/Mix-JS-768x292.png.webp 768w, https:\/\/www.20i.com\/blog\/wp-content\/smush-webp\/2020\/10\/Mix-JS-370x141.png.webp 370w, https:\/\/www.20i.com\/blog\/wp-content\/smush-webp\/2020\/10\/Mix-JS-270x103.png.webp 270w, https:\/\/www.20i.com\/blog\/wp-content\/smush-webp\/2020\/10\/Mix-JS-740x281.png.webp 740w\" sizes=\"auto, (max-width: 1295px) 100vw, 1295px\" \/><\/a><\/figure>\n\n\n\n<p>Next up is a console only (yes, that\u2019s right) game. <\/p>\n\n\n\n<p>Click the link, open your dev console, and start playing! <a href=\"http:\/\/rikukissa.github.io\/falling\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">http:\/\/rikukissa.github.io\/falling\/<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Adventures<\/h2>\n\n\n\n<p>In keeping in the console vibe, do remember those text adventure games?<\/p>\n\n\n\n<p>Well, there\u2019s one right here. JavaScript may be able to impress us sonically and visually, but it\u2019s also has standard text output too of course (PS: I love the use of errors and the iconic\/ironic \u201cthis page best viewed with&#8221; mantra&#8230;). <\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/secretGeek\/console-adventure\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/github.com\/secretGeek\/console-adventure<\/a><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"780\" height=\"130\" src=\"https:\/\/www.20i.com\/blog\/wp-content\/uploads\/2020\/10\/Adventure.png\" alt=\"Text adventure game in JS\" class=\"wp-image-4948\" srcset=\"https:\/\/www.20i.com\/blog\/wp-content\/uploads\/2020\/10\/Adventure.png 780w, https:\/\/www.20i.com\/blog\/wp-content\/smush-webp\/2020\/10\/Adventure-300x50.png.webp 300w, https:\/\/www.20i.com\/blog\/wp-content\/smush-webp\/2020\/10\/Adventure-768x128.png.webp 768w, https:\/\/www.20i.com\/blog\/wp-content\/smush-webp\/2020\/10\/Adventure-370x62.png.webp 370w, https:\/\/www.20i.com\/blog\/wp-content\/smush-webp\/2020\/10\/Adventure-270x45.png.webp 270w, https:\/\/www.20i.com\/blog\/wp-content\/smush-webp\/2020\/10\/Adventure-740x123.png.webp 740w\" sizes=\"auto, (max-width: 780px) 100vw, 780px\" \/><\/figure>\n\n\n\n<p>And then found myself thinking\u2026what about 3D?<\/p>\n\n\n\n<p>Obviously web browsers have OpenGL, so are there any libraries to make 3D composition easier? Well, enter three.js &#8211; basic XML (almost SVG like) syntax for creating 3d scenes. This is superb: <\/p>\n\n\n\n<p><a href=\"https:\/\/threejs.org\/docs\/index.html#manual\/en\/introduction\/Creating-a-scene\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">https:\/\/threejs.org\/docs\/index.html#manual\/en\/introduction\/Creating-a-scene<\/a><\/p>\n\n\n\n<p>Of course, that uses the web browser&#8217;s (and therefore the OS\u2019s) rendering architecture, and doesn\u2019t really showcase JavaScript itself there truly.<\/p>\n\n\n\n<p>Whereas, this bad boy is real raytracing engine programmed in JavaScript. <\/p>\n\n\n\n<p><a href=\"http:\/\/www.slimeland.com\/raytrace\/\">http:\/\/www.slimeland.com\/raytrace\/<\/a><\/p>\n\n\n\n<p>It isn\u2019t very fast but it is a raytracer\u2026go get the kettle on. \u2615<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"http:\/\/www.slimeland.com\/raytrace\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><img loading=\"lazy\" decoding=\"async\" width=\"799\" height=\"524\" src=\"https:\/\/www.20i.com\/blog\/wp-content\/uploads\/2020\/10\/raytrace.png\" alt=\"JavaScript raytracing\" class=\"wp-image-4949\" srcset=\"https:\/\/www.20i.com\/blog\/wp-content\/uploads\/2020\/10\/raytrace.png 799w, https:\/\/www.20i.com\/blog\/wp-content\/smush-webp\/2020\/10\/raytrace-300x197.png.webp 300w, https:\/\/www.20i.com\/blog\/wp-content\/smush-webp\/2020\/10\/raytrace-768x504.png.webp 768w, https:\/\/www.20i.com\/blog\/wp-content\/smush-webp\/2020\/10\/raytrace-370x243.png.webp 370w, https:\/\/www.20i.com\/blog\/wp-content\/smush-webp\/2020\/10\/raytrace-270x177.png.webp 270w, https:\/\/www.20i.com\/blog\/wp-content\/smush-webp\/2020\/10\/raytrace-740x485.png.webp 740w\" sizes=\"auto, (max-width: 799px) 100vw, 799px\" \/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Simulation and emulation<\/h2>\n\n\n\n<p>Now, if like me, you\u2019ve always found physical world simulations modelled on screen fascinating, then you\u2019ll love this. <\/p>\n\n\n\n<p>It\u2019s a real time 2D soft and rigid body simulator. If anyone has used big 3D apps like 3D Studio Max or Maya, then you\u2019ll just love how simple these are to get started with.<\/p>\n\n\n\n<p><a href=\"https:\/\/brm.io\/matter-js\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">https:\/\/brm.io\/matter-js\/<\/a><\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><a href=\"http:\/\/brm.io\/matter-js\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><img loading=\"lazy\" decoding=\"async\" width=\"651\" height=\"460\" src=\"https:\/\/www.20i.com\/blog\/wp-content\/uploads\/2020\/10\/MatterJS.png\" alt=\"Physics simulation in JavaScript\" class=\"wp-image-4950\" style=\"width:488px;height:345px\" srcset=\"https:\/\/www.20i.com\/blog\/wp-content\/uploads\/2020\/10\/MatterJS.png 651w, https:\/\/www.20i.com\/blog\/wp-content\/smush-webp\/2020\/10\/MatterJS-300x212.png.webp 300w, https:\/\/www.20i.com\/blog\/wp-content\/smush-webp\/2020\/10\/MatterJS-370x261.png.webp 370w, https:\/\/www.20i.com\/blog\/wp-content\/smush-webp\/2020\/10\/MatterJS-270x191.png.webp 270w\" sizes=\"auto, (max-width: 651px) 100vw, 651px\" \/><\/a><\/figure>\n\n\n\n<p>Now stepping away from the virtual world nearly into the physical world, this is a very nice library for getting started on robotics without the robots! <\/p>\n\n\n\n<p>You can test your ideas and logic before \u201ccommitting\u201d to buying some hardware. <\/p>\n\n\n\n<p>I&#8217;m building an RC car and this is going to get me started:<\/p>\n\n\n\n<p><a href=\"http:\/\/johnny-five.io\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">http:\/\/johnny-five.io\/<\/a><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"250\" height=\"255\" src=\"https:\/\/www.20i.com\/blog\/wp-content\/uploads\/2020\/10\/JSbots.png\" alt=\"An Arduino chip\" class=\"wp-image-4952\"\/><\/figure>\n\n\n\n<p>And finally, let\u2019s use our ultra-modern devices to take a nostalgia trip. Here is Windows 95. Enjoy!<\/p>\n\n\n\n<p><a href=\"https:\/\/archive.org\/details\/win95_in_dosbox\">https:\/\/archive.org\/details\/win95_in_dosbox<\/a> (Press the Xbox styled power button at the top to begin) <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/win95.ajf.me\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><img loading=\"lazy\" decoding=\"async\" width=\"600\" height=\"368\" src=\"https:\/\/www.20i.com\/blog\/wp-content\/uploads\/2020\/10\/Windows-95-in-JavaScript.png\" alt=\"Windows 95 in your browser\" class=\"wp-image-4971\" srcset=\"https:\/\/www.20i.com\/blog\/wp-content\/uploads\/2020\/10\/Windows-95-in-JavaScript.png 600w, https:\/\/www.20i.com\/blog\/wp-content\/smush-webp\/2020\/10\/Windows-95-in-JavaScript-300x184.png.webp 300w, https:\/\/www.20i.com\/blog\/wp-content\/smush-webp\/2020\/10\/Windows-95-in-JavaScript-370x227.png.webp 370w, https:\/\/www.20i.com\/blog\/wp-content\/smush-webp\/2020\/10\/Windows-95-in-JavaScript-270x166.png.webp 270w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/a><\/figure>\n\n\n\n<p>What unusual applications of JS have you seen? Let us know.<\/p>\n\n\n\n<p>*I did create the 20i <a href=\"https:\/\/www.20i.com\/blog\/sitemaps-complete-guide\/\">Sitemap<\/a> Generator in Node tho!<\/p>\n","protected":false},"excerpt":{"rendered":"So, continuing with my I \u2764\ufe0f \u2026 series of posts, I thought I\u2019d like to bring a technology&hellip;","protected":false},"author":4,"featured_media":4973,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"ub_ctt_via":"","_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"csco_singular_sidebar":"","csco_page_header_type":"","csco_page_load_nextpost":"","footnotes":""},"categories":[51,60],"tags":[81],"class_list":{"0":"post-4938","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-technology","8":"category-web-design-dev","9":"tag-internet","10":"cs-entry"},"featured_image_src":"https:\/\/www.20i.com\/blog\/wp-content\/uploads\/2020\/10\/I-love-JavaScript.png","author_info":{"display_name":"rh20i","author_link":"https:\/\/www.20i.com\/blog\/author\/rh20i\/"},"_links":{"self":[{"href":"https:\/\/www.20i.com\/blog\/wp-json\/wp\/v2\/posts\/4938","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.20i.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.20i.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.20i.com\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.20i.com\/blog\/wp-json\/wp\/v2\/comments?post=4938"}],"version-history":[{"count":27,"href":"https:\/\/www.20i.com\/blog\/wp-json\/wp\/v2\/posts\/4938\/revisions"}],"predecessor-version":[{"id":19175,"href":"https:\/\/www.20i.com\/blog\/wp-json\/wp\/v2\/posts\/4938\/revisions\/19175"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.20i.com\/blog\/wp-json\/wp\/v2\/media\/4973"}],"wp:attachment":[{"href":"https:\/\/www.20i.com\/blog\/wp-json\/wp\/v2\/media?parent=4938"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.20i.com\/blog\/wp-json\/wp\/v2\/categories?post=4938"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.20i.com\/blog\/wp-json\/wp\/v2\/tags?post=4938"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}