11 ms·
Show HN: I learnt how to use WebSockets, made something beautiful/terrible
- g105b 5y agoThis last week I've been isolating due to contracting COVID at Christmas. Not fun... With my time recovering in bed, I finished off learning about WebSockets by building https://www.walloftext.art https://www.walloftext.art and uploaded the code to https://github.com/g105b/text https://github.com/g105b/text with a description of how it works and what I've learnt. The intention was to make the most minimal project that tested the bidirectional communication of WebSockets. The end product is a scrollable grid that allows users to type anonymous comments. Of course this is already getting abused, but that's part of the fun! Anyway, I'd appreciate your feedback on the code, and if there are any ideas of how to make the end product any better/more fun/less crude.
- sokoloff 5y agoMy first thought was “I could stake my life that I’ll see some ASCII penises on this”. Was amused to see just how right that assumption was.
- sanqui 5y agoIs this perchance inspired by https://www.yourworldoftext.com/ https://www.yourworldoftext.com/? I remember reading an interesting technical writeup when that went out -- it was early days for websocket. It might be interesting to compare how both are built.
- neoncontrails 5y agoMy first thought was "vintage Facebook" actually — back when it was called _the_ Facebook and open only to university students. The wall was a beautifully chaotic thing, basically a text file to which all your friends had read/write access. Definitely no web sockets involved, though.
- camhart 5y agoI don't see any messages being sent across the websocket. Is it down?
- g105b 5y agoyeah :( the hacker news hug of death...
- onefuncman 5y agowhat broke?
- ncfausti 5y agoI think it's the server here: wss://www.walloftext.art/ws.php Doesn't seem to be accepting connections when I try.
- exikyut 5y agoWebSockets in PHP huh? That's a pretty cool approach, although it naturally scales terribly (sadly D:).
- girvo 5y agoYou can get it to scale (for a certain definition of scale, of course), though man it was far too much effort.
- exikyut 5y agoI empathize and relate. Out of curiosity, were you actually handling each WebSocket connection using an independent PHP-FPM instance? If so (wow), how many concurrent connections did you manage to sustain at peak? The only experience I've had using WebSockets with PHP is with using stream_socket_server() et al, and then multiplexing everything. (Then you just get handed the problem of restarting the server(s) to keep runaway GC in check...) Edit: Have realized you aren't OP - but that's fine, I'm interested to hear war stories from multiple sources!
- Antrikshy 5y agoVaguely reminds me of my own web sockets project from years ago, https://quibbler.co https://quibbler.co.
- allen-munsch 5y agovery cool. would be nice to be able to spin separate rooms for meeting Q and A, or in the moment commenting. it's an interesting take on commenting. like comment threading, timeouts, mental map like comment grouping. like evernote and visual programming, but for short lived comments,
- madmod 5y agoRIP. Well it was fun while it lasted.
- quickthrower2 5y agoAfter an hour? Not bad for another 4chan isomorph submitted to HN.
- pjot 5y agoThis looks similar to yourworldoftext[0] that was posted a few weeks ago. Very cool. [0]: https://news.ycombinator.com/item?id=29576394 https://news.ycombinator.com/item?id=29576394
- davidw 5y agoI can't write letters like è using the normal composition method (altGr) on Linux; I guess it's grabbing keystrokes directly. No big deal. What'd you write it in?
- ncphil 5y agoA valiant effort: one that has me thinking the New Years' weekend may be the time for me to refresh my own WebSockets knowledge. Thanks much for the inspiration!
- g105b 5y agoGreat! Thank you. Feel free to use my code, or fork the repo. I will put this back online at some point after re-thinking the way it persists.
- mikehall314 5y agoI worked on a similar little project about 10 years ago. We called it 300 Lines. It was a shared public canvas which displayed only the last 300 lines drawn. We used socket.io to sync between the client and a NodeJS backend. (The whole thing was really an experiment to get to grips with the then-nascent Node v0.4) Of course it was horribly abused, and we took it down after only a few days.
- exikyut 5y agoSo what'd The Internet People™ do to it, exactly? DDoS the WebSocket server? Write Very Bad URLs? Worse? :( I wanted to see. Not fair, takers away of nice things. >:/
- joshspankit 5y agoAlso curious. I thought the last thing up would be a screenshot.
- jvanderbot 5y agolet me see. I open a page and text that other people enter in real time is rendered as html on that page? what could possibly go wrong.
- toomanyrichies 5y agoI saw people had written things like "Hitler did nothing wrong", "Biden is a pedophile", etc. Basically the kind of stuff that makes one root for a meteor to come and wipe out humanity.
- stavros 5y agoI'd recommend watching the film "don't look up" for an optimistic view on a likely future for humanity (or the lack thereof).
- rndmind 5y ago
- scrose 5y agoWhile I didn't get to see what the site originally looked like. If it was just 'submit anonymous comments that websocket subscribers can see', there's a golang example leveraging the gorilla/websocket package that does just that[0]. Edit: I see from the OP's link to the github project that persisting the chats to a DB was included with this. [0] https://github.com/gorilla/websocket/tree/master/examples/chat https://github.com/gorilla/websocket/tree/master/examples/ch...
- can16358p 5y agoAnyone who saw what it was before it was taken down (which is just what I saw when I opened it now for the first time), what exactly was it?
- eyelidlessness 5y agoVery early on in my journey learning to write software, I wrote a “guestbook” feature for my personal site (also in PHP). Prior to that, the only code I’d successfully written and actually shipped (beyond PHP templating of data I fully controlled, even if I didn’t understand it) read ID3 metadata from MP3s (my own music). Point is I had never written anything that handled user input. I was also proud of my accomplishment and shared it with my nearest tech community. It was, if I recall, less than an hour before someone had exploited the obvious XSS vulnerability. At the time I was aghast and felt like it was a cruel thing to do. And while I know better than that now… Here’s the thing: that tech community, even the whole internet, was a lot smaller then. The person who exploited my naive first program accepting user input claimed responsibility and explained why. The other people around were both knowledgeable enough and kind enough to help me understand that that person was a friendly who meant no harm. Folks trying to learn new things now won’t be in a community like that by default, and probably won’t know to look for it. And the people who take advantage of that are clearly more malicious and not friendlies. I don’t know what the takeaway from my “here’s the thing” is, for HN, but I do think we’d all be better off if we pay close attention to being welcoming/supportive for noobs, and also strive to make learning tech less of a risk when inevitably first steps go wrong.
- graderjs 5y agoYes it definitely seems like it could be a form of hazing inspired by people advertising themselves as noobs, or just by opening up a service. I've posted many show HNs over the past 7 years and many provided some ways for people to do computation on the server (by design) but not some form of limiting that (by my inexperience). I know everyone's experience can be different, and I know that sometimes, and for me personally, other things that people do on ShowHNs are particularly hurtful--Like being cruel or dismissive...I mean you're bearing your soul right? Your work; a little embryonic thing you're contributing to the world... And some people seem like they just want to try to kill that--but for me, that's been different to the security "hazing" my posts received. I've been personally grateful for those security hazings, because it gave me opportunities to test and improve those projects. Seriously the best free security audit you could get. Sometimes it felt annoying .. because I thought I'd patch something but then I checked the server I found people found a way through or found a way to circumvent that. But I saw it as a challenge and I imagined it was like a way to redteam and anticipate and prevent things that would end up happening in the real world anyway so it was incredibly valuable actually in hardening the products I made. Good learning experience too. :) My favorite event to solve was people using my remote browser product to run cryptocurrency mining javascript. And overcoming that challenge was quite tricky at first, because cpulimit is more of a suggestion than a hard limit. And also because the cloud where I originally ran this (and most clouds have this rule too), disallowed using the compute resources for mining crypto so I almost got a strike on my account because other people were using this thing I had opened up to mine with. After discussing with the contact window everything was cool, but I still needed a way to block this. While there are CPU throttling apis I could use on a per tab basis via Chrome remote debugging protocol (and I may look into that more in future), there's also a chance that under high CPU load the debugging protocol becomes unresponsive and so you can't intervene via that route anyway. What I went with was just operating system process monitoring and cgroups (now v2 in the latest kernels which are unfortunately for now more limited) plus killing processes that violated too many monitoring intervals. A cool thing about Google Chrome is it's pretty robust to killing some of its processes off so you can kill off the processes of a couple of tabs that are involved in cryptocurrency mining but it doesn't kill the entire browser. The whole thing was a great way to learn more operating system internals as well as to discover the plethora of tools available for resource control in linux. Particularly impressive are the networking and bandwidth control options like iptables. So instead of dockerizing my apps I basically created these custom sandboxes by using operating system apis that's been incredibly effective at preventing abuse.
- colechristensen 5y agoOff topic: what is the deal with people writing “learnt”? I might use that instead of learned if I was trying to be funny but I’m seeing people use it all over the place unironically.
- DenseComet 5y agoAs with a lot of English spelling variations, it's just a regional difference. https://www.grammarly.com/blog/learned-learnt/ https://www.grammarly.com/blog/learned-learnt/
- igitur 5y agoThat's just how it's _spelt_ in the UK. But this is why it's somewhat dangerous to infer tone from text without knowing more about the context.
- g105b 5y agoI'm British.
- colechristensen 5y agoHuh, I'd never picked up on the alternative word.
- Aeolun 5y agoI can’t imagine this was bad enough to take it offline. Certainly everything written on there exists elsewhere on the net already?
- unbanned 5y agoWhy was it taken down?
- g105b 5y agoIllegal content uploaded via my naive websocket implementation. I thought it was best to turn it off than fix while it was "hot".
- throwaway127596 5y agowhat sort of illegal content…