{"id":28412,"date":"2018-02-26T13:06:46","date_gmt":"2018-02-26T11:06:46","guid":{"rendered":"https:\/\/mamchenkov.net\/wordpress\/?p=28412"},"modified":"2018-02-26T13:06:46","modified_gmt":"2018-02-26T11:06:46","slug":"winamp2-js-implementation-of-winamp-2-9-in-html5-and-javascript","status":"publish","type":"post","link":"https:\/\/mamchenkov.net\/wordpress\/2018\/02\/26\/winamp2-js-implementation-of-winamp-2-9-in-html5-and-javascript\/","title":{"rendered":"Winamp2-js &#8211; implementation of Winamp 2.9 in HTML5 and JavaScript"},"content":{"rendered":"<!-- google_ad_section_start -->\n<p><a href=\"https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2018\/02\/winamp.png?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"28413\" data-permalink=\"https:\/\/mamchenkov.net\/wordpress\/2018\/02\/26\/winamp2-js-implementation-of-winamp-2-9-in-html5-and-javascript\/winamp\/\" data-orig-file=\"https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2018\/02\/winamp.png?fit=289%2C362&amp;ssl=1\" data-orig-size=\"289,362\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"winamp\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2018\/02\/winamp.png?fit=289%2C362&amp;ssl=1\" class=\"aligncenter size-full wp-image-28413\" src=\"https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2018\/02\/winamp.png?resize=289%2C362&#038;ssl=1\" alt=\"\" width=\"289\" height=\"362\" \/><\/a><\/p>\n<p><a href=\"https:\/\/blog.codinghorror.com\/the-principle-of-least-power\/\">Atwood&#8217;s Law<\/a> states that any application that can be written in JavaScript, will eventually be written in JavaScript.\u00a0 <a href=\"https:\/\/github.com\/captbaritone\/winamp2-js\">Winamp2-js<\/a> is yet another example supporting this law.\u00a0 It is a re-implementation of Winamp 2.9, a classic Windows MP3 player from decades ago, done in HTML5 and JavaScript.<\/p>\n<p>The <a href=\"https:\/\/github.com\/captbaritone\/winamp2-js\">source code<\/a> is on GitHub and a live demo is available <a href=\"https:\/\/jordaneldredge.com\/projects\/winamp2-js\/\">here<\/a>.<\/p>\n<!-- google_ad_section_end -->\n","protected":false},"excerpt":{"rendered":"<!-- google_ad_section_start -->\n<p>Atwood&#8217;s Law states that any application that can be written in JavaScript, will eventually be written in JavaScript.\u00a0 Winamp2-js is yet another example supporting this law.\u00a0 It is a re-implementation of Winamp 2.9, a classic Windows MP3 player from decades ago, done in HTML5 and JavaScript. The source code is on GitHub and a live &hellip; <a href=\"https:\/\/mamchenkov.net\/wordpress\/2018\/02\/26\/winamp2-js-implementation-of-winamp-2-9-in-html5-and-javascript\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Winamp2-js &#8211; implementation of Winamp 2.9 in HTML5 and JavaScript<\/span><\/a><\/p>\n<!-- google_ad_section_end -->\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"Winamp2-js - implementation of Winamp 2.9 in HTML5 and JavaScript #WebDev #HTML5 #JavaScript #MP3 #music #Windows #desktop","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false,"_links_to":"","_links_to_target":""},"categories":[1,18,62,1334],"tags":[65,1190,1139,2955,2077,2355,1330],"keyring_services":[],"class_list":["post-28412","post","type-post","status-publish","format-standard","hentry","category-general","category-programming","category-technology","category-web-work","tag-desktop","tag-html","tag-javascript","tag-jeff-atwood","tag-microsoft-windows","tag-mp3","tag-web-development"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.8 - aioseo.com -->\n\t<meta name=\"description\" content=\"Atwood&#039;s Law states that any application that can be written in JavaScript, will eventually be written in JavaScript. Winamp2-js is yet another example supporting this law. It is a re-implementation of Winamp 2.9, a classic Windows MP3 player from decades ago, done in HTML5 and JavaScript. The source code is on GitHub and a live\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Leonid Mamchenkov\"\/>\n\t<meta name=\"google-site-verification\" content=\"VHvdD0_usx1_4DzKy_QCVcICVgX2EgA2ybELT-wl7kQ\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/mamchenkov.net\/wordpress\/2018\/02\/26\/winamp2-js-implementation-of-winamp-2-9-in-html5-and-javascript\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.8\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Leonid Mamchenkov - Life, universe, and everything else\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Winamp2-js \u2013 implementation of Winamp 2.9 in HTML5 and JavaScript - Leonid Mamchenkov\" \/>\n\t\t<meta property=\"og:description\" content=\"Atwood&#039;s Law states that any application that can be written in JavaScript, will eventually be written in JavaScript. Winamp2-js is yet another example supporting this law. It is a re-implementation of Winamp 2.9, a classic Windows MP3 player from decades ago, done in HTML5 and JavaScript. The source code is on GitHub and a live\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/mamchenkov.net\/wordpress\/2018\/02\/26\/winamp2-js-implementation-of-winamp-2-9-in-html5-and-javascript\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2026\/03\/leonid-sailing-beer.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2026\/03\/leonid-sailing-beer.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2018-02-26T11:06:46+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2018-02-26T11:06:46+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/MamchenkovBlog\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:site\" content=\"@mamchenkov\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Winamp2-js \u2013 implementation of Winamp 2.9 in HTML5 and JavaScript - Leonid Mamchenkov\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Atwood&#039;s Law states that any application that can be written in JavaScript, will eventually be written in JavaScript. Winamp2-js is yet another example supporting this law. It is a re-implementation of Winamp 2.9, a classic Windows MP3 player from decades ago, done in HTML5 and JavaScript. The source code is on GitHub and a live\" \/>\n\t\t<meta name=\"twitter:creator\" content=\"@mamchenkov\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2026\/03\/leonid-sailing-beer.jpg\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2018\\\/02\\\/26\\\/winamp2-js-implementation-of-winamp-2-9-in-html5-and-javascript\\\/#blogposting\",\"name\":\"Winamp2-js \\u2013 implementation of Winamp 2.9 in HTML5 and JavaScript - Leonid Mamchenkov\",\"headline\":\"Winamp2-js &#8211; implementation of Winamp 2.9 in HTML5 and JavaScript\",\"author\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/author\\\/leonid\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/#person\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/mamchenkov.net\\\/wordpress\\\/wp-content\\\/uploads\\\/2018\\\/02\\\/winamp.png?fit=289%2C362&ssl=1\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2018\\\/02\\\/26\\\/winamp2-js-implementation-of-winamp-2-9-in-html5-and-javascript\\\/#articleImage\",\"width\":289,\"height\":362},\"datePublished\":\"2018-02-26T13:06:46+02:00\",\"dateModified\":\"2018-02-26T13:06:46+02:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2018\\\/02\\\/26\\\/winamp2-js-implementation-of-winamp-2-9-in-html5-and-javascript\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2018\\\/02\\\/26\\\/winamp2-js-implementation-of-winamp-2-9-in-html5-and-javascript\\\/#webpage\"},\"articleSection\":\"All, Programming, Technology, Web work, Desktop, HTML, JavaScript, Jeff Atwood, Microsoft Windows, mp3, web development\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2018\\\/02\\\/26\\\/winamp2-js-implementation-of-winamp-2-9-in-html5-and-javascript\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/category\\\/technology\\\/#listItem\",\"name\":\"Technology\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/category\\\/technology\\\/#listItem\",\"position\":2,\"name\":\"Technology\",\"item\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/category\\\/technology\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/category\\\/technology\\\/programming\\\/#listItem\",\"name\":\"Programming\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/category\\\/technology\\\/programming\\\/#listItem\",\"position\":3,\"name\":\"Programming\",\"item\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/category\\\/technology\\\/programming\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2018\\\/02\\\/26\\\/winamp2-js-implementation-of-winamp-2-9-in-html5-and-javascript\\\/#listItem\",\"name\":\"Winamp2-js &#8211; implementation of Winamp 2.9 in HTML5 and JavaScript\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/category\\\/technology\\\/#listItem\",\"name\":\"Technology\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2018\\\/02\\\/26\\\/winamp2-js-implementation-of-winamp-2-9-in-html5-and-javascript\\\/#listItem\",\"position\":4,\"name\":\"Winamp2-js &#8211; implementation of Winamp 2.9 in HTML5 and JavaScript\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/category\\\/technology\\\/programming\\\/#listItem\",\"name\":\"Programming\"}}]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/#person\",\"name\":\"Leonid Mamchenkov\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2018\\\/02\\\/26\\\/winamp2-js-implementation-of-winamp-2-9-in-html5-and-javascript\\\/#personImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/3cf6df002a284d78fb6e9d8222ca4d102e0832035ed6bc8447008bd234e131a4?s=96&d=identicon&r=g\",\"width\":96,\"height\":96,\"caption\":\"Leonid Mamchenkov\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/author\\\/leonid\\\/#author\",\"url\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/author\\\/leonid\\\/\",\"name\":\"Leonid Mamchenkov\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2018\\\/02\\\/26\\\/winamp2-js-implementation-of-winamp-2-9-in-html5-and-javascript\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/3cf6df002a284d78fb6e9d8222ca4d102e0832035ed6bc8447008bd234e131a4?s=96&d=identicon&r=g\",\"width\":96,\"height\":96,\"caption\":\"Leonid Mamchenkov\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2018\\\/02\\\/26\\\/winamp2-js-implementation-of-winamp-2-9-in-html5-and-javascript\\\/#webpage\",\"url\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2018\\\/02\\\/26\\\/winamp2-js-implementation-of-winamp-2-9-in-html5-and-javascript\\\/\",\"name\":\"Winamp2-js \\u2013 implementation of Winamp 2.9 in HTML5 and JavaScript - Leonid Mamchenkov\",\"description\":\"Atwood's Law states that any application that can be written in JavaScript, will eventually be written in JavaScript. Winamp2-js is yet another example supporting this law. It is a re-implementation of Winamp 2.9, a classic Windows MP3 player from decades ago, done in HTML5 and JavaScript. The source code is on GitHub and a live\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2018\\\/02\\\/26\\\/winamp2-js-implementation-of-winamp-2-9-in-html5-and-javascript\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/author\\\/leonid\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/author\\\/leonid\\\/#author\"},\"datePublished\":\"2018-02-26T13:06:46+02:00\",\"dateModified\":\"2018-02-26T13:06:46+02:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/#website\",\"url\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/\",\"name\":\"Blog of Leonid Mamchenkov\",\"description\":\"Life, universe, and everything else\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/#person\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Winamp2-js \u2013 implementation of Winamp 2.9 in HTML5 and JavaScript - Leonid Mamchenkov","description":"Atwood's Law states that any application that can be written in JavaScript, will eventually be written in JavaScript. Winamp2-js is yet another example supporting this law. It is a re-implementation of Winamp 2.9, a classic Windows MP3 player from decades ago, done in HTML5 and JavaScript. The source code is on GitHub and a live","canonical_url":"https:\/\/mamchenkov.net\/wordpress\/2018\/02\/26\/winamp2-js-implementation-of-winamp-2-9-in-html5-and-javascript\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"google-site-verification":"VHvdD0_usx1_4DzKy_QCVcICVgX2EgA2ybELT-wl7kQ","miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/mamchenkov.net\/wordpress\/2018\/02\/26\/winamp2-js-implementation-of-winamp-2-9-in-html5-and-javascript\/#blogposting","name":"Winamp2-js \u2013 implementation of Winamp 2.9 in HTML5 and JavaScript - Leonid Mamchenkov","headline":"Winamp2-js &#8211; implementation of Winamp 2.9 in HTML5 and JavaScript","author":{"@id":"https:\/\/mamchenkov.net\/wordpress\/author\/leonid\/#author"},"publisher":{"@id":"https:\/\/mamchenkov.net\/wordpress\/#person"},"image":{"@type":"ImageObject","url":"https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2018\/02\/winamp.png?fit=289%2C362&ssl=1","@id":"https:\/\/mamchenkov.net\/wordpress\/2018\/02\/26\/winamp2-js-implementation-of-winamp-2-9-in-html5-and-javascript\/#articleImage","width":289,"height":362},"datePublished":"2018-02-26T13:06:46+02:00","dateModified":"2018-02-26T13:06:46+02:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/mamchenkov.net\/wordpress\/2018\/02\/26\/winamp2-js-implementation-of-winamp-2-9-in-html5-and-javascript\/#webpage"},"isPartOf":{"@id":"https:\/\/mamchenkov.net\/wordpress\/2018\/02\/26\/winamp2-js-implementation-of-winamp-2-9-in-html5-and-javascript\/#webpage"},"articleSection":"All, Programming, Technology, Web work, Desktop, HTML, JavaScript, Jeff Atwood, Microsoft Windows, mp3, web development"},{"@type":"BreadcrumbList","@id":"https:\/\/mamchenkov.net\/wordpress\/2018\/02\/26\/winamp2-js-implementation-of-winamp-2-9-in-html5-and-javascript\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress#listItem","position":1,"name":"Home","item":"https:\/\/mamchenkov.net\/wordpress","nextItem":{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/#listItem","name":"Technology"}},{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/#listItem","position":2,"name":"Technology","item":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/programming\/#listItem","name":"Programming"},"previousItem":{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/programming\/#listItem","position":3,"name":"Programming","item":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/programming\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress\/2018\/02\/26\/winamp2-js-implementation-of-winamp-2-9-in-html5-and-javascript\/#listItem","name":"Winamp2-js &#8211; implementation of Winamp 2.9 in HTML5 and JavaScript"},"previousItem":{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/#listItem","name":"Technology"}},{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress\/2018\/02\/26\/winamp2-js-implementation-of-winamp-2-9-in-html5-and-javascript\/#listItem","position":4,"name":"Winamp2-js &#8211; implementation of Winamp 2.9 in HTML5 and JavaScript","previousItem":{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/programming\/#listItem","name":"Programming"}}]},{"@type":"Person","@id":"https:\/\/mamchenkov.net\/wordpress\/#person","name":"Leonid Mamchenkov","image":{"@type":"ImageObject","@id":"https:\/\/mamchenkov.net\/wordpress\/2018\/02\/26\/winamp2-js-implementation-of-winamp-2-9-in-html5-and-javascript\/#personImage","url":"https:\/\/secure.gravatar.com\/avatar\/3cf6df002a284d78fb6e9d8222ca4d102e0832035ed6bc8447008bd234e131a4?s=96&d=identicon&r=g","width":96,"height":96,"caption":"Leonid Mamchenkov"}},{"@type":"Person","@id":"https:\/\/mamchenkov.net\/wordpress\/author\/leonid\/#author","url":"https:\/\/mamchenkov.net\/wordpress\/author\/leonid\/","name":"Leonid Mamchenkov","image":{"@type":"ImageObject","@id":"https:\/\/mamchenkov.net\/wordpress\/2018\/02\/26\/winamp2-js-implementation-of-winamp-2-9-in-html5-and-javascript\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/3cf6df002a284d78fb6e9d8222ca4d102e0832035ed6bc8447008bd234e131a4?s=96&d=identicon&r=g","width":96,"height":96,"caption":"Leonid Mamchenkov"}},{"@type":"WebPage","@id":"https:\/\/mamchenkov.net\/wordpress\/2018\/02\/26\/winamp2-js-implementation-of-winamp-2-9-in-html5-and-javascript\/#webpage","url":"https:\/\/mamchenkov.net\/wordpress\/2018\/02\/26\/winamp2-js-implementation-of-winamp-2-9-in-html5-and-javascript\/","name":"Winamp2-js \u2013 implementation of Winamp 2.9 in HTML5 and JavaScript - Leonid Mamchenkov","description":"Atwood's Law states that any application that can be written in JavaScript, will eventually be written in JavaScript. Winamp2-js is yet another example supporting this law. It is a re-implementation of Winamp 2.9, a classic Windows MP3 player from decades ago, done in HTML5 and JavaScript. The source code is on GitHub and a live","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/mamchenkov.net\/wordpress\/#website"},"breadcrumb":{"@id":"https:\/\/mamchenkov.net\/wordpress\/2018\/02\/26\/winamp2-js-implementation-of-winamp-2-9-in-html5-and-javascript\/#breadcrumblist"},"author":{"@id":"https:\/\/mamchenkov.net\/wordpress\/author\/leonid\/#author"},"creator":{"@id":"https:\/\/mamchenkov.net\/wordpress\/author\/leonid\/#author"},"datePublished":"2018-02-26T13:06:46+02:00","dateModified":"2018-02-26T13:06:46+02:00"},{"@type":"WebSite","@id":"https:\/\/mamchenkov.net\/wordpress\/#website","url":"https:\/\/mamchenkov.net\/wordpress\/","name":"Blog of Leonid Mamchenkov","description":"Life, universe, and everything else","inLanguage":"en-US","publisher":{"@id":"https:\/\/mamchenkov.net\/wordpress\/#person"}}]},"og:locale":"en_US","og:site_name":"Leonid Mamchenkov - Life, universe, and everything else","og:type":"article","og:title":"Winamp2-js \u2013 implementation of Winamp 2.9 in HTML5 and JavaScript - Leonid Mamchenkov","og:description":"Atwood's Law states that any application that can be written in JavaScript, will eventually be written in JavaScript. Winamp2-js is yet another example supporting this law. It is a re-implementation of Winamp 2.9, a classic Windows MP3 player from decades ago, done in HTML5 and JavaScript. The source code is on GitHub and a live","og:url":"https:\/\/mamchenkov.net\/wordpress\/2018\/02\/26\/winamp2-js-implementation-of-winamp-2-9-in-html5-and-javascript\/","og:image":"https:\/\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2026\/03\/leonid-sailing-beer.jpg","og:image:secure_url":"https:\/\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2026\/03\/leonid-sailing-beer.jpg","og:image:width":1024,"og:image:height":1024,"article:published_time":"2018-02-26T11:06:46+00:00","article:modified_time":"2018-02-26T11:06:46+00:00","article:publisher":"https:\/\/www.facebook.com\/MamchenkovBlog","twitter:card":"summary_large_image","twitter:site":"@mamchenkov","twitter:title":"Winamp2-js \u2013 implementation of Winamp 2.9 in HTML5 and JavaScript - Leonid Mamchenkov","twitter:description":"Atwood's Law states that any application that can be written in JavaScript, will eventually be written in JavaScript. Winamp2-js is yet another example supporting this law. It is a re-implementation of Winamp 2.9, a classic Windows MP3 player from decades ago, done in HTML5 and JavaScript. The source code is on GitHub and a live","twitter:creator":"@mamchenkov","twitter:image":"https:\/\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2026\/03\/leonid-sailing-beer.jpg"},"aioseo_meta_data":{"post_id":"28412","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":null,"created":"2023-07-20 05:11:39","updated":"2026-01-15 13:32:09","seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/mamchenkov.net\/wordpress\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/\" title=\"Technology\">Technology<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/programming\/\" title=\"Programming\">Programming<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tWinamp2-js \u2013 implementation of Winamp 2.9 in HTML5 and JavaScript\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/mamchenkov.net\/wordpress"},{"label":"Technology","link":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/"},{"label":"Programming","link":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/programming\/"},{"label":"Winamp2-js &#8211; implementation of Winamp 2.9 in HTML5 and JavaScript","link":"https:\/\/mamchenkov.net\/wordpress\/2018\/02\/26\/winamp2-js-implementation-of-winamp-2-9-in-html5-and-javascript\/"}],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":22441,"url":"https:\/\/mamchenkov.net\/wordpress\/2014\/08\/29\/timesheet-js-javascript-library-for-simple-html5-css3-time-sheets\/","url_meta":{"origin":28412,"position":0},"title":"Timesheet.js &#8211; JavaScript library for simple HTML5 &#038; CSS3 time sheets","author":"Leonid Mamchenkov","date":"August 29, 2014","format":"link","excerpt":"Timesheet.js - JavaScript library for simple HTML5 & CSS3 time sheets.","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"timesheet.js","src":"https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2014\/08\/timesheet.js-500x206.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":22379,"url":"https:\/\/mamchenkov.net\/wordpress\/2014\/08\/12\/p5-js-a-javascript-drawing-library\/","url_meta":{"origin":28412,"position":1},"title":"p5.js &#8211; a JavaScript drawing library","author":"Leonid Mamchenkov","date":"August 12, 2014","format":"link","excerpt":"p5.js - a JavaScript drawing library. p5.js is a JavaScript library that starts with the original goal of Processing, to make coding accessible for artists, designers, educators, and beginners, and reinterprets this for today's web. Using the original metaphor of a software sketchbook, p5.js has a full set of drawing\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":18964,"url":"https:\/\/mamchenkov.net\/wordpress\/2013\/12\/14\/vim-js-javascript-port-of-vim\/","url_meta":{"origin":28412,"position":2},"title":"Vim.js &#8211; JavaScript port of Vim","author":"Leonid Mamchenkov","date":"December 14, 2013","format":false,"excerpt":"Atwood's Law -\u00a0any application that can be written in JavaScript, will eventually be written in JavaScript - seems to be getting more and more traction. \u00a0Here is the newest example - Vim.js - a JavaScript port of the popular editor Vim. This is not a production day-to-day ready software yet,\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"vim.js","src":"https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2013\/12\/vim.js-500x369.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":24250,"url":"https:\/\/mamchenkov.net\/wordpress\/2015\/05\/28\/the-worlds-collide-jsphp-and-php-js\/","url_meta":{"origin":28412,"position":3},"title":"The worlds collide: jsphp and php.js","author":"Leonid Mamchenkov","date":"May 28, 2015","format":false,"excerpt":"I guess we can consider the overlapping between PHP and JavaScript worlds complete. \u00a0Just within the last couple of days I separately and independently came across two different projects: jsphp, which is\u00a0a pseudo-implementation of the ECMA 262 standard (JavaScript 8.5.1) for PHP 5.3+ php.js, which is a resource that offers\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":22412,"url":"https:\/\/mamchenkov.net\/wordpress\/2014\/08\/20\/modernizr-avascript-library-that-detects-html5-and-css3-features-in-the-browser\/","url_meta":{"origin":28412,"position":4},"title":"Modernizr &#8211; JavaScript library that detects HTML5 and CSS3 features in the browser","author":"Leonid Mamchenkov","date":"August 20, 2014","format":"link","excerpt":"Modernizr - JavaScript library that detects HTML5 and CSS3 features in the browser.","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":18850,"url":"https:\/\/mamchenkov.net\/wordpress\/2013\/11\/24\/echo-lazy-loading-html5-images-with-data-attributes-via-javascript\/","url_meta":{"origin":28412,"position":5},"title":"Echo &#8211; lazy-loading HTML5 images with data-* attributes via JavaScript","author":"Leonid Mamchenkov","date":"November 24, 2013","format":false,"excerpt":"Echo\u00a0 is quite handy for web developers. \u00a0On those pages that feature a lot of images, things can get slow and the server might get too much of an abuse (with more traffic thrown at it). \u00a0One way to work around this is to only load those images that are\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_sharing_enabled":true,"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts\/28412","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/comments?post=28412"}],"version-history":[{"count":0,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts\/28412\/revisions"}],"wp:attachment":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/media?parent=28412"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/categories?post=28412"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/tags?post=28412"},{"taxonomy":"keyring_services","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/keyring_services?post=28412"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}