Links should (again) connect to different types if SPACE is pressed

At some point it became possible to connect a link at hand to a pin of a different type, even if space is not pressed. This leads to very confusing errors, I have seen several times already that students accidentally create infinite loops. I don’t know in which iteration it was implemented and because of which reason, maybe sometime during Navigating a patch with Space and left mouse button? Any memories about that, @gregsn?

I remember the Group(Spectral) of Stride.Rendering had such behavior.

Once there was an explanation for it if I recall correctly.

Don’t know if it was clear enough, but I am talking about this:

space

A String is not an RGBA… it shouldn’t be so easy to connect them. A few months ago you had to press space to make a connection like this.

Can you give an example for that? If one patches a loop, the link gets red and displays an error message on hover. But afaik that loop is not “executed”.

Imo getting a red link + error on hover is sufficient. Or have a setting like “Connections need to be forced”.

space

This is what happens sometimes to unexperienced patchers. I think just because links don’t have to be forced using Space anymore.

Since this feature was enabled by default, I think it has only gotten better. The ‘where you can connect’ indicator is there, if you make a mistake the connection turns red, that seems to be enough. It’s important to think carefully about whether or not ‘misslicking’ is actually a problem. It seems to me that the less button pressing the better.

By the way, I don’t think this is a ‘bug’ category, more of a ‘feature’.

1 Like

I am with @bjoern and @yar.

I would argue that the user interface should respect your gestures. It shouldn’t pretend that you clicked on the canvas - or when using the drag/drop behavior it shouldn’t pretend that you dragged a link onto the canvas. It also shouldn’t just ignore your actions.

In my opinion, the patch editor should feel like enabling you to “draw” anything you want. Red links and such then allow you to understand if this is a more or less meaningful program, but that’s just an extra. The most important basic requirement is that you are free to sketch fast.

Often enough you know better than the editor. You have several things in mind that you want to do to your patch (beginners included), not only drawing a link.
A link might turn red for now, but after a few more clicks it gets valid again when getting closer to what you actually had in mind.

When would that be, in the case of a beginner, and also for an experienced patcher? Can you give examples of links that you definitely want to force-connect?

Let’s together collect some examples.
The point I wanted to make is that wiring stuff together leads to pins getting typed in a certain way. They might have been “generic” before. Depending on which part of my program I patch first the compiler draws different temporary conclusions regarding the types of the already placed nodes, pads, and pins. If the fact that the stuff I already placed onto the canvas restricts my ability to sketch further then something feels broken. It would now feel like I need to patch in a certain way to get it right.

In other words: code → typed program
not: typed program → restrict coding

An experienced patcher is a former novice.

The current behaviour creates a sense of consistency, a flow to patch building. And, it seems to me, follows the fundamentally correct rule - the fewer clicks and keystrokes you have to do, the better.

Consistency: there is not a single node system that has a connection prohibition that can be bypassed by shortcuts. Everything is connected to everything else - the right habit. Plus, Gamma literally requires this with the type system, otherwise connectivity becomes hell.

Newbies: It took me months to learn that a spacebar could connect something, and I came up with some tricks to connect the unconnectable. As a beginner, I literally acted like a fool instead of patching.

Flow: For the sake of beginners, do you introduce a rather strange UX solution to make them feel 10% more comfortable for a month, so that when they become experienced patchers, they will feel 90% more uncomfortable for the rest of their lives? I sometimes code on a tablet, so how do you suggest I connect nodes without a keyboard?

I would put it more simply: if you think it’s right, why? What UX principle is being pursued and what is the long-term vision for this? Other than protecting a group of people. There is a problem with misclicking, but it’s not that fundamental and requires thinking through a UX strategy. There are other problems in the interface, but the desire to go back to ‘the way it was’ is perceived as wrong rather than a desire to actually improve something.

1 Like

Okay, okay! I just happen to be in a position where I can see people fail at several things and I’d like to report on these. Links only being connectable to matching types was indeed helping with learning about types. I think making people feel comfortable for the first month is actually very important, because we need people.

1 Like

Collect more data. I think the direction of thought is right and the motivation is good, but the proposed solution feels too straightforward.

I wrote earlier about UX practices already in place that there will be problems with misclicks. I encounter them myself every day. But the mantra ‘give yourself more space, spread out the nodes, don’t mince things’ helps.

I just want to mention here that this link is the only connection in all 12 sessions / 36 hours in the beginner course that has to be forced.

Here’s one that I experience every year. I’m really glad that the link enforcement is not necessary any more, as this example is something I do at the very beginning. (and link enforcing with space key is a bit too much at that stage when you’re still overwhelmed with everything else)

callmenames-2024-11-19-Application_2024.11.19-18.18.01

Edit: Sidenote: I still believe that the QuadRenderer should not be in the advanced category (one more thing one has to learn in the beginning but should not be necessary here)

3 Likes

So the problem is mainly due to interfaces and inherited types?

Edit: @motzi - IMO that is a rather advanced use case…