Suggestions for Canvas and future events!

https://programming.dev/post/16920926

Suggestions for Canvas and future events! - programming.dev

Hey everyone! Thanks for participating in Canvas. I wanted to make a thread to collect together suggestions people have that can be worked on before the next Canvas. Feel free to also throw in suggestions for future Events we can build and run for the fediverse. Ill be collecting suggestions together and making issues for them in the repository for myself or some other contributors to work on (the projects open source so anyones free to contribute! https://git.sc07.company/sc07/canvas [https://git.sc07.company/sc07/canvas] Feel free to reach out to me and I can help get you set up with the codebase)

Escalating timers are an antipattern. It punishes anyone who looks away for more than thirty seconds - and thirty seconds per click is not exactly a brisk pace for maintaining attention.

Other than that, good shit, well done. Undo was a welcome surprise. Ditto the repetition prevention.

No wait, one other thing. (Complaint sandwich!) Scaling should be in integer powers. Everything but fully-zoomed-out and extremely-blown-up looked lumpy and distracting. Especially with all the pixel art going on.

I think it was 30s between every pixel at the start.

It was sort of, but it was a bug. If you just left them, you’d get one every 33ish seconds until you had 6. But if you had 2 then used one, you’d have to wait 66 seconds until you got another, unless you used your last one then it was back to 33.

It was fixed partway through to be as originally intended.

I like the escalating time, but the pacing issue is a fair point.

So perhaps the escalation could be delayed? Give it a tiny larger timer (let’s say, 40s?), and make the second pixel take as much time as the first. Like this:

  • current times - 30s, 60s, 90s, 120s, 150s, 180s; total 630s
  • my proposal - 40s, 40s, 80s, 120s, 160s, 200s; total 640s

This way you’d be only getting less pixels per minute after 80s of inactivity, not 30s.

Longer waits would be worse.

It should be one every thirty seconds until you hit some limit. Do not incentivize continuously staring at a timer. Do not incentivize obsessively staring at a time. Just rate-limit people in the simplest way that could possibly work.

I get why you’re saying this, and I agree with base reason. However, I feel like fixing the problem by removing the feature is not the way to go, as I think that active playing should be rewarded.

Regarding the base time (30s vs. 40s): I proposed 40s because the total waiting time would be roughly the same. It could be also 20s, if necessary/desired, up to the devs.

Additionally it would be great if there was an audible “ping” once you get a new pixel. Then regardless of the timer or how it progresses people would feel freer to do other stuff while checking the canvas.

One literal pixel every thirty seconds is not “active.”

You went people to drool when a bell rings.

Encouraging users to obsess or react is plainly an addiction mechanic. In a collaborative MS Paint session. Tweaking the details of it misses what’s wrong with it. It’s an antifeature. It’s a mistake.

Just give people one pixel every thirty seconds. “Active” means they check at least every couple minutes, at their convenience, where they will have up to six. If they step away for an hour they don’t get hundreds.

One effect of this is that someone steadily editing got more pixels than someone editing in batches, which felt like a feature when defending against trolls.

Encouraging anyone to stare at a screen for two actions per second is brutal. Especially when those actions, to be optimal, have to happen the moment the timer rolls over.

This is an addiction mechanic.

This is some free-to-play mobile-game nonsense.

No matter how good the motivations are, no matter what narratives we can build around casual versus attentive use, this is a bad decision for software. It is deliberate manipulation of the user’s motives and habits for destructive patterns of behavior.

I didn’t love it tbh. I had the canvas up in half of the screen and was doing something else but would look over too early then just be waiting for x seconds for my next pixel.

Same. Watched some streams and found myself listening distractedly while staring at a window with nothing happening. It is, perhaps unfortunately, plenty of time to reflect on why, and to ask whether this is desirable.

The worst example of this accidental mistreatment (in my personal experience) was the idle game The Idle Class. From the genre and the title, you’d figure you can just leave it running, and come back whenever. But the dev added e-mail events that give a huge bonus if you catch them within thirty seconds. I cannot overstate - that is a Skinner box. That is operant conditioning on a random schedule. It’s how brains develop obsessive habits, and eventually, superstitions.

Now that everyone’s been exposed to real-money video games and at least acknowledges some of their tactics are criminal, we should all be mindful of how software influences people. Problems don’t need to be malicious or complex. Reliable incentives over time are profoundly influential.

Thank you, very clear! I suggest to add one pixel every 30 seconds, plain and simple. If a modifier to this timer is required for reasons, that could be based on the number of pixels placed during the past x minutes or so.

I’d rather not discourage consistent use, either. One valid purpose for modifying the rate could be soft botting prevention. Instead of handing people CAPTCHAs, just string them out on 40 seconds, 50 seconds, etc., as suspicion dictates.

What’d be great - and what I think would prevent some botting - is an official queue function. When I was filling in teal for half an hour at a time, I would have preferred to click a few spots in a row and let my browser do them for me. Automating an entire image would be ruinous. That’s just a bot war waiting to happen. But if I could leave a dozen pixels floating, at any given time, I wouldn’t give a damn when the timer says they’ll get placed.

I think I agree on the cooldowns. Often times I wanted to step away and let the pixels accumulate, but it’s hard to resist when you realize you’d be missing out on double or triple the amount of pixels you could be placing. If the goal was to reward the player for actively placing pixels, all I can say is it didn’t feel very rewarding.

I kinda disagree about the integer scaling. 1x to 2x zoom is a very big shift without any in-between. It would also feel strange on pinch-to-zoom on mobile without in-between. I think instead it could snap to an integer scaling, or have a zoom slider that works to integer scaling. Overall though I agree, having a way to snap into integer scaling makes the pixel art look better

Have whatever between 1x and 2x, but the desktop scroll-wheel options cannot be 1x, 1.6723x, πx, and so on.

thank you (and everyone else in this thread) for the constructive feedback!

i’ve added the timers as an issue in the tracker to help with keeping track of everything

i think i got the main points given in this thread, but if theres something you think is missing feel free to reply to this so i can add it 👍

i’ve also added the weird zooming issue also

Pixel cooldown adjustments (#121) · Issues · sc07 LLC / Canvas · GitLab

Current system: Pixel placement times are increased based on what pixel you are about to gain Concerns brought up in...

GitLab
So much went right that all the negatives are nitpicky.
i’m glad :) it was very fun to run after all
I’d be keen to run/test a local version, what do I need in the .env.local as a minimum to get up and running?
It looks like the compose file has REDIS_HOST and DATABASE_URL. There’s also a few in the dockerfile for setting PORT (3000) and some node stuff I don’t understand

To get it actually running you need to do more than set up just the env but ive got what I needed to do here

share.ategon.dev/u/IzcMWM.md

If you want to allow logging in so you can test the features that get unlocked from that heres some code changes to get it working so you can bypass setting up openid

share.ategon.dev/u/W7IODE.md

Client will be up at localhost:5173

Zipline - Code (IzcMWM.md)

there’s an issue to write instructions on how to setup the environment

the server requires the authentication server to be fediverse-auth with the current implementation, but there’s an issue to add support for other providers

(once the documentation is written i’ll be putting it in #canvas-meta:aftermath.gg to keep people in the loop)

Write development environment setup (#91) · Issues · sc07 LLC / Canvas · GitLab

sc07 GitLab

GitLab
Yeah, I figured as much. I put it on the backburner as I was wetting up a selfhosted scratch instance for the girls

The event was fun for the first 48 hours - before the expansion. After that it was mostly policing and defending existing art. I would prefer a 48 hour canvas without expansion.

That said, it was fun anyways. Thanks for all your work and thanks to grant for setting everything up and fixing issues on the fly.

i’ll keep a note of that, a couple people have also suggested alternatives to canvas expansion

i’m glad you enjoyed the event, it was really fun to run (and fix bugs for) :)

I often got the “you’ve already placed a pixel of that color there” error, even though I never touched this area. I also couldn’t fix my own pixelart easily because of this.
You could get around that bug by choosing a different color and then pressing undo. After that it reverted to the correct color.
I did, it was still quite annoying. Having the “Undo” is enough and it doesn’t need a warning imo

i’ve created an issue to track this :)

this error was being sent by the server, so somewhere along the chain your computer got desynced from the pixels the server was aware about

"You've already placed a pixel of that color here" (#137) · Issues · sc07 LLC / Canvas · GitLab

Reported by [email protected] I often got the “you’ve already placed a pixel of that color there” error, even though I never touched this...

GitLab

On mobile I kept opening the whois pixel by accident when dragging. I often tap and hold to initiate a drag because I’m still looking at the art, but when i drag away and let go, it opens the whois thing. I think if you drag a certain screen-space distance away it should cancel the whois pixel lookup.

The heatmap I found too hard to tell where recent pixels were placed. I think at 100% opacity the “cold” pixels should be dark blue instead of their actual color.

A couple times I placed a dot, realized I actually didn’t want it there and ran out of time to undo, which felt bad having to wait 30s. I wish it was a bit longer.

When you try to place a pixel a few milliseconds too early I feel like it should queue it and wait the few milliseconds for you.

I’m not super sure on the canvas having transparency. Most people treated the canvas as white, not transparent. If you wanted a white-on-white drawing, people will just make an outline.

Maybe a concept worth testing: if you place a pixel next to your own pixels, you get a (slightly) reduced cooldown, that way you get an extra boost when completing your art. (At the same time, I think there is beauty in the canvas being as simple as possible:)

+1 on the mobile draggging issue

Happy to participate!

The one thing I wasn’t super sure on was the undo timer… was it really 30 seconds 😅? I thought it was 5-15s, but i didnt really time it. And I’ll be honest, I missed it maybe 3 times, so not much.

Besides just increasing the delay, there’s 2 other thoughts:

  • A bigger target takes less time to hit (tho making it bigger might bother some, as it obstructs the canvas)
  • Two times I missed were bc I failed to notice my mistake. Maybe some extra visual feedback when you place a pixel could help. For example: when the void made it to my art, I accidentally made a dark gray become black, so it was harder to notice the color change. i was too busy focusing where to place the next pixel

Overall if you feel that the undo time was fine as it was I could easily respect that decision :)

Fitts's law - Wikipedia

Thanks for making it open source! I’m curious how complex the authentication stuff was. I didn’t place many pixels but it was fun to peek in and see what changed every once in a while!

It would be amazing if parts of it could be animated. Maybe multiple layers of canvases (say, 5 frames, shown over a second). Each with their own images, which could be viewed as a flipbook.

Instead of going for a larger canvas, go for more layers.

Just a thought.

that’s a cool take on canvas, i like it

i’ve created an issue for it to keep track of it :)

Layered/animated canvas (#132) · Issues · sc07 LLC / Canvas · GitLab

Suggested by [email protected] It would be amazing if parts of it could be animated. Maybe multiple layers of canvases (say, 5 frames, shown...

GitLab

Is there a history of the changes stored? I’d love to watch an accelerated animation of the creation process.

I did not find a way to simply “view the entire canvas & download a snapshot,” which would be nice.

There are time lapses, and all the data has been released.

(for completeness as i’m going through all the comments)

there’s a suggestion for that and it should be implemented for next year 👍

Snapshot of the entire canvas (#73) · Issues · sc07 LLC / Canvas · GitLab

Keybind: P Suggested by @waffle6787:matrix.org Save the entire Canvas as a png

GitLab

Suggestions:

  • When getting rid of bots, undo their changes.
  • Assign the pixel timer based also on IP, not just account. That should discourage people who used multiple accounts just to have more pixels.
  • Don’t let freshly created accounts to place pixels. They compound with both issues above.
IPs should never be used to moderate, they are shared across too many people. Often multiple neighborhoods will share an IP.
That’s the closest thing we have though. The alternative is just people using alts, and at that point might as well not have limits. There can be ways to add exceptions if needed.

I do not like the idea of using IPs for that either, but since it’s only for the timing instead of locking people out of the service, it’s less of a concern.

And as db0 said IPs are far from optimal but they’re the best thing that “we” [actually the devs] have available. If you have some alternative way to discourage simultaneous multi-accounting, by all means, suggest it here.

If you undo the changes done by a bot it could cause chaos. It is better to let users know it needs to be fixed.

Also you could do some sort of proof of work to make it unfeasible to have a bunch of alts.

If you undo the changes dome by a bot it could cause chaos. It is better to let users know it needs to be fixed.

It could cause chaos if done poorly, indeed. But I think that there are ways to minimise this chaos.

One of them would be that reverted pixels are marked as “reverted by the admins”, and that appears in an overlay similar to the heatmap.

Also you could do some sort of proof of work to make it unfeasible to have a bunch of alts.

Like in cryptography? I like this idea. Perhaps it could be used when there’s a reasonable possibility that two accounts are from the same user; for example same IP, or same username but different instance, etc.

Proof of work - Wikipedia

The only problem with proof of work (pow) is that it won’t perform the same across devices and will kill battery life. The difficulty of the proof would need to be calculated on page load which could open it up to spoofing a different device.

there’s an issue to add support for undoing pixels with bans, but that would mainly get used in very bad circumstances and wouldn’t be the default

as others have mentioned, there’s not going to be anything that automatically does actions against IPs, instead opting for a flag that moderations can look into further

i’ve also mentioned somewhere else in the thread, but i wouldn’t want to punish new accounts as, especially this year, it brings new people to the Fediverse and i don’t want to hamper the growth of that :) (it also isn’t very possible to get a reliable creation date of new accounts because of how the fediverse is designed)

Ban with pixel undo (#100) · Issues · sc07 LLC / Canvas · GitLab

Option to undo pixels while banning

GitLab
OK! At least the other batch of suggestions was more useful :) Those are fair points.

I would like a shorter timer for small instance. So bigger communities have a longer timer and small a shorter one. But i affraid it wont help at all.

Protected area as in minetest. It would help against grief.

Also for new account with 0 coms, just created during this canva event : restriction, second layer for drawing before approval…something like that ?

I wonder if we could do some sort of competition between instances? At the end we could all vote.

Great idea we can organize that between our instance instead of waiting for the next year. :D

I quickly drafted some rules :

  • the competitive instance chose together a subject
  • the pixel art must be original and not copy-pasted from web. we don’t use a template : hosted and template desactivated.each instance will have their private layer. Once the event is over, our draw will be revealed.
  • 2-3 day to draw and send the result
  • 1 week for voting

I love drawing, i’m quite good at it, except perspective :)

Sounds like a cool concept, i’ve added it to the issue tracker to not lose it :)
Instance-based canvas competition (#4) · Issues · fediverse.events / Events · GitLab

Suggested by [email protected] & [email protected] the competitive instance chose together a subject the pixel art must be original and not copy-pasted...

GitLab

i’ve created an issue for the lower cooldowns for smaller instances

sounds like a neat idea imo :)

and for the second suggestion, i’d like to avoid imposing restrictions on new accounts as Canvas has brought a lot of people to the fediverse and i wouldn’t want to hamper their contributions because they just found out about it

Variable cooldowns for smaller instances (#145) · Issues · sc07 LLC / Canvas · GitLab

Suggested by [email protected] I would like a shorter timer for small instance. So bigger communities have a longer timer and small a shorter...

GitLab

The problem is that if they know smaller instance have a lower cooldown, they can

  • create their own server
  • subcribe in a small instance. An alt account dedicated to spamming.

So, the idea of lower cooldown should come with some security.

If alts are really discouraged, please take steps to actually prevent them.
I think a proof of work could work but it would be really bad for battery life. If someone had multiple tabs open there computer would start to crawl which would make the experience awful

I’ll be working on some better moderation tooling for next year’s canvas (+ any other fediverse event) but with the nature of this, the tooling won’t be in the open :/

here’s the issue i created for enabling these external moderation tools

if you have any suggestions (execution or specific checks) feel free to shoot me a DM on matrix

Moderation hooks for external services (#123) · Issues · sc07 LLC / Canvas · GitLab

Expose endpoints that external tools can interact with to do moderation actions Implementation Actions should be thrown into a...

GitLab

Okay wild idea for a smaller canvas :

Have the canvas fade out to white a little every hour.

Eventually old pixels would die and people would either have to maintain or draw new stuff. It would make the timelapse more interesting and more animated by default.

ooo that sounds fun

i’ve created an issue for this so i can keep track of it :)

Fading canvas (#131) · Issues · sc07 LLC / Canvas · GitLab

Suggested by [email protected] Have the canvas fade out to white a little every hour. Eventually old pixels would...

GitLab