Jordan Eldredge writes about his Winamp-related web projects, including a browser Winamp clone, skin rendering, and WebAssembly visualizers.
Commenters praise his Winamp projects and link his writeups, along with his post on the risks of curl-pipe-sh install scripts.
I'm using Chrome by the way.
#1 - TypeError: Object.entries is not a function(…)
e.(anonymous function) @ winamp.js:38
#2 - winamp.js:49 Uncaught (in promise) TypeError: Object.entries is not a function
at _ (https://jordaneldredge.com/projects/winamp2-js/built/winamp.js:49:15179)
at Ct.beginWork (https://jordaneldredge.com/projects/winamp2-js/built/winamp.js:19:31711)
at i (https://jordaneldredge.com/projects/winamp2-js/built/winamp.js:19:44327)
at a (https://jordaneldredge.com/projects/winamp2-js/built/winamp.js:19:44648)
at s (https://jordaneldredge.com/projects/winamp2-js/built/winamp.js:19:44886)
at E (https://jordaneldredge.com/projects/winamp2-js/built/winamp.js:19:48429)
at b (https://jordaneldredge.com/projects/winamp2-js/built/winamp.js:19:48166)
at h (https://jordaneldredge.com/projects/winamp2-js/built/winamp.js:19:47294)
at p (https://jordaneldredge.com/projects/winamp2-js/built/winamp.js:19:46684)
at Object.Nt.updateContainer (https://jordaneldredge.com/projects/winamp2-js/built/winamp.js:19:50943)
at https://jordaneldredge.com/projects/winamp2-js/built/winamp.js:19:62380
at Object.Rt.unbatchedUpdates (https://jordaneldredge.com/projects/winamp2-js/built/winamp.js:19:49691)
at gn (https://jordaneldredge.com/projects/winamp2-js/built/winamp.js:19:62349)
at uo.render (https://jordaneldredge.com/projects/winamp2-js/built/winamp.js:27:29068)
at e.<anonymous>…
For those who don't want to navigate Twitter for whatever reason (tracking, slows down your browser, bad UI, etc.), here's the content from the thread (the images and videos are still Twitter-hosted, by the way):
-----------------------------------
It's done! Winamp2-js (https://jordaneldredge.com/projects/winamp2-js/) finally supports all three windows!
To celebrate, here's a list of some of the cool things it can do: (thread)
https://pbs.twimg.com/media/DVcfDHBVQAAp3Tm?format=png
* Load any classic Winamp skin just by dragging it onto the main window. (Shoutout to @stuk for JSZip which lets us decompress .wsz files in the browser. (link: https://stuk.github.io/jszip/)
https://video.twimg.com/ext_tw_video/961271636983820288/pu/vid/990x720/DMmXxEB7fOBIT5_a.mp4
* Drag local audio files into the playlist to queue them up.
https://video.twimg.com/ext_tw_video/961271712238063621/pu/vid/994x720/BEONYMr9RpsOJT_d.mp4
* Visualize your music with the bar or line visualizer.
https://video.twimg.com/ext_tw_video/961271795725709314/pu/vid/534x360/q5iSFe-_jTYaoxz-.mp4
* Adjust the fully functional EQ to pump up the bass.
(Shoutout to @epistemex for cardinal-spline-js (link: https://github.com/epistemex/cardinal-spline-js))
https://video.twimg.com/ext_tw_video/961271880035389441/pu/vid/630x640/V7qFCwUdrOJXhav8.mp4
* Import/export Winamp's own binary EQ settings files. …
> Can someone explain to me why people are excited about WebGPU and WASM and similar technologies?
WebAssembly brings all languages to the browser. Why shouldn't I be able to use C#, Rust, Go, Dart, Python, or whatever else in browser?
WebAssembly brings better performance. That's what Webamp found: https://jordaneldredge.com/blog/speeding-up-winamps-music-visualizer-with-webassembly/
And what Amazon found: https://www.amazon.science/blog/how-prime-video-updates-its-app-for-more-than-8-000-device-types
And what Google found: https://web.dev/case-studies/google-sheets-wasmgc
Why make things perform worse when they can perform better?
Why shouldn't I be able to make an application that compiles to the Windows, macOS, and Linux desktops and also to the browser? This one does: https://bandysc.github.io/AvaloniaVisualBasic6/
Opening it in a text editor is not sufficient. With clever use of 'sleep' you can even have the server return a malicious payload only if it thinks its getting immediately piped to sh[0].
If you're opening it in a browser to check, you've also got to worry that the server may be looking at curl's user agent to decide whether to serve up a malicious payload[1].
[0] https://www.idontplaydarts.com/2016/04/detecting-curl-pipe-bash-server-side/
[1] https://jordaneldredge.com/blog/one-way-curl-pipe-sh-install-scripts-can-be-dangerous/
A URL and an IP are not equal.
Building a script that acts differently for a web browser, a normal download, and curl, is trivial, and I've seen it happen. Here's a proof-of-concept[0] someone else wrote.
Manually downloading is safer, at least you can review, curling straight into a shell is inherently unsafe.
The better option is still a package manager, but curling straight to a shell is very unsafe.
[0] https://jordaneldredge.com/blog/one-way-curl-pipe-sh-install-scripts-can-be-dangerous/
Author of the Museum here. Agreed! That was true for "classic" Winamp skins which are what is shown here. I also took a stab at "modern" Winamp skins which were fully dynamic and scriptable and wasn't quite able to bring that to the browser. I did a writeup of that work here: https://jordaneldredge.com/webamp-modern/