The leaderboard is fascinating. Some people are clearly putting a lot of time into this, while the rest of us are trying to sneak phallic shapes past your CNN.
I speak 5 languages and english isn't on top of the list. The time you spent writing that novel could have been spent learning another language instead perhaps?
I could dedicate a month, or a year, and never come up with something like those. Are they really using the site tool, or is there a trick to draw them elsewhere and import them? Those are truly amazing!
It would be hilarious if that guy vibe coded a thing that’s just repeatedly googling images of real fish and then slavishly drawing them into the site.
The major problem is that I could up-vote and down-vote as many times as I want. It is rate-limited, however[1]. I know, because I wrote a script. :D Seems like someone else did, too, except to down-vote.
Please fix it.
[1] After refresh, you can continue voting till you reach the limit, which is problematic.
Are people actually drawing these in the browser, or is there some extension that lets you populate a canvas with something you did with a stylus in Photoshop?
Ok there's some sort of bot war going on with the leaderboard, right? The Palestine fish has 370,000 votes total (both up & down), which seems like a lot. Does HN really drive that kind of traffic??
The rule of thumb is 100*upvotes+50, so with the current 600 points, it's like 60.000 visits. Don't take that estimation too seriously, it's only a not so bad initial estimation.
After seeing it in action, my second thought (first was just watching my fish) was that I was amazed at the good behavior of the users because I would have expected a lot of penises floating around. Now I understand. Nicely done!
Actually most people aren't trying to submit bad fish! I was surprised to, it's really like 95/5 good to bad submissions. People seem to follow the rules on average :)
My hot take is that the Slack logo is an Alphabet-product logo. The colors aren't quite right, but it's red/yellow/green/blue like an Alphabet logo. It would fit right into the lineup. It's particularly similar to the (obsolete) Google Podcasts and Google Photos logos.
My pet theory (that I don't sincerely believe) is that this was deliberate to help smooth a hypothetical acquisition by Alphabet, before they were bought by Salesforce.
> My pet theory (that I don't sincerely believe)...
To be clear, this combination is a tetradic palete on a color wheel. Color theory and simplified logo trends make this coincidence much more likely than it would initially appear. Still funny.
My guess is the CNN was trained on highly abstracted stereotypical-fish-drawings, not on actual pictures or high-quality drawings of fish. I put in my best effort to draw a good-looking fish (although I'm no artist) and I got 35%. Then I drew a basic single-stroke fish and got 65%.
Somewhat interesting thing with my 9yo. She's a pretty good artist, she can draw various characters and objects pretty well.
With this she clearly just wanted to do the standard stick fish shape, but it turns out she only knows how to do it facing left. Facing left, looks typical, facing right, almost a figure 8. So after like 6 attempts being judged by the computer she's getting frustrated, and I'm like how about this, turn the phone upside down to have her draw facing left. But now she can't do it left either!
Feature request: Make the model evaluate the fish and then evaluate the mirrored version of the fish. Pick the highest value as the orientation. What could go wrong? Perhaps ask the user before mirroring?
I think she learned to do the fish the way kids learn to draw a star. It's a motion they learn to do, and she wanted to do that simple motion. She's good at knowing a shape she wants to make and drawing it but I think knowing a gesture she wants to make is different.
And then I think when she consciously thinks about it - trying to do it the opposite way, or later the normal way after being judged repeatedly - she can't make the motion that way. But I bet if she was just thinking of the shape and trying to draw that shape it would be zero issue.
The code shows it... Your escaping routine seems OK, but you really __should not__ be building HTML and JS(!) using raw string interpolation. Or letting the client decide whether the submission needs moderation.
I don't let the client decide whether the submission needs moderation :)
There's a very slightly different model in the backend that sends things to the mod queue. Strings are also sanitized there. But copilot really wanted to add all that logic to the frontend too and I thought it was funny
Absolutely! I've removed all references of HTML and JS using string interpolation.
(jk)
This is definitely a drawback with with vibe-coding. I never really write like HTML5 style code - at work I always use typescript with heavy ESLint, so never have to worry about this.
I figured the string sanitization in the backend would take care of any XSS vulns, which was my main concern. But I will have to read into the dangers of string interpolation which I admit I do not remember too much about (outside of the XSS stuff I tried to mitigate).
That's absolutely not true. Sanitization on the client is significantly safer, because the client knows how it parses HTML, while the server can, at best, guess (and hope it follows the spec).
When you set element.textContent = someUserGeneratedContent, the browser guarantees that the user-generated content will never be parsed as HTML.
response.write("<div>" + sanitize(someUserGeneratedContent) + "</div>") has no such guarantee.
I did this on a trip to Japan but can't remember for the life of me where. Some museum. My wife and I drew fishes and then they were uploaded and we went to a room and watched them swim across walls/ceilings. Really cool experience
The Singapore ArtScience museum has this concept. Templated sea animal colour in pages that a guide vetted before scanning and then your fish appears on the walls of the dark room in a sea life picture swimming with all the other fish. It was pretty cool. A variation in the other room was the same deal but with flying machines, but this time they gave you a remote control that controlled specifically your creation as it flew around on the landscape projected onto the walls.
Our family did this recently as well at teamLab Planets in Tokyo. I filled out a circular template with a very creepy looking "smiley" face. The template turned out to be for raindrops. I couldn't stop giggling when hundreds of my monstrous creations filled the room, it was very fun.
Fun, but really frustrating to spend a ton of time making a detailed fish, get a fish probability of 67.2%, submit it successfully with no note about it needing moderation, and it still never shows up.
And I don't mean "I never noticed it show up in the public tank". I mean my profile says "8 fish created", but if I "view my fish" there are only two in the list. If I go to my default fish tank I see all 8, but if I click on one of the missing ones and try to add it to a different tank or vote on it I get "Failed to <do whatever>: Fish not found".
They exist but they don't exist. This isn't a tank, it's a window into purgatory.
What a fun game! Especially on a Note 10+, and I have to say, seeing the dongnet keep up with each pen stroke on a 2019 device is really impressive! Possibly still a little generous, though, I think. Writing "FISH" on a rectangle shouldn't hit 50%, but this does explain why SSN-69 didn't have much of a chance :D
Small changes if make:
- Change the background colour of the drawing canvas to match the water background
- Add fill tool? So folks can color this fish white? Bonus points if you automatically color the inside part of the fish white
- Fix the discontinuity of how the fish swim by stretching the pixels of the fish that you draw
My initial fish likelihood score was 7% and I couldn't get it past 12% without looking up what a fish looks like. I learned a lot about myself via this app, so thank you.
This doesn’t work for me on Firefox Focus on iOS, even with all the ad and tracker blocking disabled. Tapping on the make it swim button does nothing. I’m able to see the tank with the tank button though.
There used to be something like this at the Boston Museum of Science, where you created a fish (don’t remember if you drew it freehand and/or selected from different fish parts) and released it into the tank with other fish and predators.
This is an issue that many are seeing, it has to do with how the model is loaded / how the submission logic works without it. I think I know the fix, but am currently getting slammed at my big boy job and so I can't fix it until I'm free in the evening ...
Nice, I got my upside down penis fish past the filter! Although, once it was swimming it did look very much like a fancy guppy. I don't think anyone would recognize it, but I still feel smug about "beating" the machine.
This is my favorite thing today! I only saw one penis fish (with the penis nestled inside the face, as a facial feature of sorts). That's pretty good for a drawing app on the internet, well done! I've given up on running public apps that accept user contributions.
Does not work for me on desktop Firefox. When I press the "make it swim!" button, there's an error in console: "Uncaught (in promise) Error: Fish model not loaded"
I could submit a fish on desktop Firefox, but apparently the fish died shortly thereafter. Voting is broken though.
EDIT: Nevermind! Now there's a problem uploading a fish, and the local aquarium is broken, so I can't view the previous one, either. It's a nice idea, but I really wish it worked better with Firefox (being on the web and all).
Locally we have the National Museum of Play. One of the exhibits right near the entrance is a virtual aquarium where you can color in a picture of a fish. Then you take it to a scanner and press a button and your fish starts swimming in a huge screen that serves as a virtual aquarium.
This is my feeling of vibe coding this kind of stuff so far. It's never really good, it's just kind of acceptable because it was vibe codeded.
The way the fish are stretched where they gets sliced into bands is not something I think most humans would generally choose to do. With a few characters of code change you could at least stretch each column so it scales to the next column.
I know vibe coding will continue to get better. There's a bunch of people at my work that have a vibe-coding chat where they show off their latest creation. Most of them they'd done in Gemini Canvas. The prompts are usually 1 or 2 paragraphs like "Make a 3d tower defense game with joypad input where you move a character using the joypad and can place towers by pressing the button. ....." And it spits out a working game but it's only interesting because it was vibe coded, not because the game is actually in any-way-shape-or-form interesting, good, pretty.
Also, I appreciate that this game had a fish recognizer but I also found it super scary. I tried to make to make a sunfish and it was like "not a fish". I don't want bad AI judging what is and isn't acceptable.
I recently went to an aquarium in Exmouth, Western Australia, which had a giant wall mounted display with a tablet which allowed kids (of all ages!) to draw a fish and "release" it into the tank.
Very cool! NN seems too focused on precision over recall (not allowing enough false positives) but trying to get stuff past it is also part of the fun.
Very fun. My only suggestion would be a small highlight when you submit your fish so you can easily see which fish is yours - at least for a few seconds.
There is mobile support... but it currently loads a 40mb model which doesn't work so great in a lot of places where you will use a phone. I meant to allow you to submit anyway, but I didn't test enough. Sorry...
> The phrase (From the River to the Sea) and its variations have been used both by Palestinians and Israelis to mean that the area should consist of one state.
This constitutes advocating for a second holocaust?
It turns out there are two filters; the fishiness as determined by the UI layer must be separate from the content moderation filters on the backend. I've also had a couple fish that the UI thought were acceptable but the backend (rightfully) disappeared into the void.
1. https://drawafish.com/rank.html?userId=1753510318634_cdeh6a4...
https://drawafish.com/tank.html?capacity=55&sort=popular also don't sleep on that one
Semi relevant Silicon Valley clip (maybe nsfw, language)
https://www.youtube.com/watch?v=ACmydtFDTGs
Please fix it.
[1] After refresh, you can continue voting till you reach the limit, which is problematic.
Really nice toy!
Worked out the box didn't think twice of it
Good point though as the site doesnt follow responsive design patterns
https://www.evanmiller.org/how-not-to-sort-by-average-rating...
> I built a basic CNN trained against penises
After seeing it in action, my second thought (first was just watching my fish) was that I was amazed at the good behavior of the users because I would have expected a lot of penises floating around. Now I understand. Nicely done!
1. 95% of people will not be trying to draw penises
2. 5% penises by volume is a lot of penises
I think it’s just human nature that that’s the first thing you try to draw on any online whiteboard.
(sorry)
I don't think so, he said "long" lol
Edit: And a lot of Palestinian flags when sorting by popular.
My pet theory (that I don't sincerely believe) is that this was deliberate to help smooth a hypothetical acquisition by Alphabet, before they were bought by Salesforce.
To be clear, this combination is a tetradic palete on a color wheel. Color theory and simplified logo trends make this coincidence much more likely than it would initially appear. Still funny.
35% for this masterpiece? Rigged
With this she clearly just wanted to do the standard stick fish shape, but it turns out she only knows how to do it facing left. Facing left, looks typical, facing right, almost a figure 8. So after like 6 attempts being judged by the computer she's getting frustrated, and I'm like how about this, turn the phone upside down to have her draw facing left. But now she can't do it left either!
And then I think when she consciously thinks about it - trying to do it the opposite way, or later the normal way after being judged repeatedly - she can't make the motion that way. But I bet if she was just thinking of the shape and trying to draw that shape it would be zero issue.
At least on Firefox/Mac, sometimes while dragging it "picks up" the image to drag it. This should prevent that.
The code shows it... Your escaping routine seems OK, but you really __should not__ be building HTML and JS(!) using raw string interpolation. Or letting the client decide whether the submission needs moderation.
There's a very slightly different model in the backend that sends things to the mod queue. Strings are also sanitized there. But copilot really wanted to add all that logic to the frontend too and I thought it was funny
(jk)
This is definitely a drawback with with vibe-coding. I never really write like HTML5 style code - at work I always use typescript with heavy ESLint, so never have to worry about this.
I figured the string sanitization in the backend would take care of any XSS vulns, which was my main concern. But I will have to read into the dangers of string interpolation which I admit I do not remember too much about (outside of the XSS stuff I tried to mitigate).
Thanks for giving the opportunity to learn... :)
I love that this is becoming a meme, haha. Thanks for the laugh.
When you set element.textContent = someUserGeneratedContent, the browser guarantees that the user-generated content will never be parsed as HTML.
response.write("<div>" + sanitize(someUserGeneratedContent) + "</div>") has no such guarantee.
They have it in several other places.
And I don't mean "I never noticed it show up in the public tank". I mean my profile says "8 fish created", but if I "view my fish" there are only two in the list. If I go to my default fish tank I see all 8, but if I click on one of the missing ones and try to add it to a different tank or vote on it I get "Failed to <do whatever>: Fish not found".
They exist but they don't exist. This isn't a tank, it's a window into purgatory.
6.3%??????
From the description
Isn't this how some Lego MMO died? They spent too many resources on "moderation" and too few on the actual game.
If you post that more proeminently, maybe you'll get a bunch of kids on summer holidays finding ways to make penises pass your filter...
https://monosnap.com/file/uD9n2bXCODCLwthVwdKXdGleogXuJ6
https://paperplanes.world/
Small changes if make: - Change the background colour of the drawing canvas to match the water background - Add fill tool? So folks can color this fish white? Bonus points if you automatically color the inside part of the fish white - Fix the discontinuity of how the fish swim by stretching the pixels of the fish that you draw
EDIT: Tried again and now I see there is a highlight, but it's pretty hard to see a in a busy tank, the color contrast is not very high
I did manage to finally get one in there, but it looked more like a plane than a fish.
[1] https://www.youtube.com/watch?v=tWwCK95X6go&ab_channel=Felix
Love the simplicity of this.
Uncaught (in promise) Error: Fish model not loaded verifyFishDoodle https://drawafish.com/src/js/app.js:514 <anonymous> https://drawafish.com/src/js/app.js:170 EventListener.handleEvent* https://drawafish.com/src/js/app.js:168
Edit: Never mind, I had to wait till the model loaded. Took some time though. Fun project nevertheless!
EDIT: Nevermind! Now there's a problem uploading a fish, and the local aquarium is broken, so I can't view the previous one, either. It's a nice idea, but I really wish it worked better with Firefox (being on the web and all).
Also: When you release something like this to the public, I'm amazed at how quickly humans race to the bottom. That bit can be awful to watch.
Also inspired by that: https://drawdeadfish.com/
Now to share with my grandkids.
So this means it's doing CORS? Why not just have GCP serve everything?
This is my feeling of vibe coding this kind of stuff so far. It's never really good, it's just kind of acceptable because it was vibe codeded.
The way the fish are stretched where they gets sliced into bands is not something I think most humans would generally choose to do. With a few characters of code change you could at least stretch each column so it scales to the next column.
I know vibe coding will continue to get better. There's a bunch of people at my work that have a vibe-coding chat where they show off their latest creation. Most of them they'd done in Gemini Canvas. The prompts are usually 1 or 2 paragraphs like "Make a 3d tower defense game with joypad input where you move a character using the joypad and can place towers by pressing the button. ....." And it spits out a working game but it's only interesting because it was vibe coded, not because the game is actually in any-way-shape-or-form interesting, good, pretty.
Also, I appreciate that this game had a fish recognizer but I also found it super scary. I tried to make to make a sunfish and it was like "not a fish". I don't want bad AI judging what is and isn't acceptable.
I did just about spit out of coffee reading the words vibe coded fish tinder though. But a smart thing to implement.
Fun idea, fun site!
For example, if a fill tool was available I bet we would see far far fewer hollow fish.
edit - my beautiful Esox Pinilis was culled from the UGC ocean by whoever is manually moderating this :D
Fish or no fish
https://imgur.com/a/qwRQJcL
https://www.theguardian.com/world/2023/oct/31/from-the-river...
All other submissions have score approximately equal to number of likes.
Is the first submission legit or the result of hackers?
This constitutes advocating for a second holocaust?
https://drawafish.com/rank.html?userId=1754072603630_i0f8iw6...
Now, make a man and we will make him adventure in the forest?
Inundate me with penises and swastikas!