V1.6 Devlog (July-December 2024): input and output nodes, undo/redo and more #97
Replies: 11 comments
-
Hello, everyone, I didn't write the detailed explanation on the design of the input and output nodes yet because there are other tasks related to the Indie Python project as a whole that I want to tackle first, including some video production (a brief presentation of Nodezator 1.5 for the Indie Python youtube channel) and a bit of work on the Bionic Blue as well. Despite that, I already started working on one of the new features/tasks scheduled for Nodezator 1.6: the ability to drag data into Nodezator. As can be seen in the demonstration video below, dragging and dropping files in Nodezator will cause a data node with a suitable widget to be created on that spot: drag_and_drop_files_demo.mp4There are still a few more things that I want to add to this feature (including stuff I already started developing), which I'll present next. The changes were already uploaded to the dev branch of the repo, although, on top of adding more stuff to this feature, as always I also intend to further edit the corresponding commits in order to refactor/refine and merge them. |
Beta Was this translation helpful? Give feedback.
-
Hello, everyone, As I said in my previous update, instead of writing up about my planned design for the input and output nodes, I've been working in other tasks of higher priority, specially since I won't be able to start working on the input/output nodes until, at the very least, a month from now. That is so because I want to work on other stuff for Nodezator first, like the feature to drag and drop data onto the app that I demonstrated last week, as well as making a brief video for youtube presenting Nodezator version 1.5 and working a bit on the Bionic Blue game as well (such is the life of the open-source maintainer, but thankfully I love it). For now, I'd like to share with you what I've been doing so far. While working on finishing the feature of dragging and dropping data onto Nodezator, I actually implemented a new quality-of-life feature (it is already in the dev branch) I've been thinking about since a long time ago: allowing users to define connections without having to precisely move the mouse over the sockets. I call this feature magnetic sockets, because the sockets work as though they attract the mouse or new connections being established with the mouse, making it a lot faster and easier to do so. Here you can see it in practice: See how I don't need to click exactly over the socket to start dragging a new connection out of it? Did you also notice how I don't need to drag the new connection exactly over the other socket, but simply by getting the mouse near it that socket is already detected? As most if not all of you know, sockets are usually kept small in many node editors. As a node editor creator myself, I believe, like in Nodezator, that this is done in order not to take much precious space on the nodes. Despite not harming the workflow, this aspect of sockets needlessly slows down editing graphs by stealing a few instants of our time every time we want to establish a new connection between sockets. It usually goes like this: we must carefully hover over one socket, click and drag a connection out of it, then be careful again to drop that connection exactly on top of the socket we want. Again, while this is second nature for most of us, myself included, it still robs us of a few precious milliseconds or even seconds. Personally, this is something that has always annoyed me. Regardless of my personal feelings, I believe this will improve usability quite a lot. That's all I'd like to share for now. As always, let me know if you have any questions or need any help or clarification on anything! Have a great weekend! Peace |
Beta Was this translation helpful? Give feedback.
-
Hello, everyone, I'm here just to give you a quick update. Already in Nodezator's dev branch: changed the magnetic sockets feature to make it closer to what I envisioned originally: the nodes had hands and would help you by grabbing the new connection for you. The hands are CC0 assets from the excellent Kenney's cursor pack |
Beta Was this translation helpful? Give feedback.
-
Hello, everyone, I'm here to update you regarding my progress on the scheduled work for Nodezator. As some of you might know, I've been recently experimenting with a socket detection solution I devised a while ago and a couple of posts I made online were shared a lot, reaching many views. Namely this one on Twitter/X and this other one on mastodon/fosstodon. Given the positive feedback and also the improvement on usability/speed I described when I first posted about this feature on this post from this very discussion, I decided to release a small patch with it in a couple of days, rather than waiting months to release it in conjunction with all the scheduled work for Nodezator. This is why I haven't worked on the scheduled features/tasks recently. Despite the fact that the socket proximity detection feature already worked from the very first day it was announced 03 weeks ago, preparing it for release required extra time because of many factors:
On top of that, I've been adding a bit of content on the manual and improving the contents of the README file to make it even more informative for new users and showcase Nodezator features more effectively. I'm very close to finish such changes and expect the new patch to be released in a few days. I decided to move the work for this new patch to a dedicated branch called This is not that much of a problem, actually, but I thought it'd be simpler to work on a dedicated branch anyway. Once the feature is ready I can merge it with the Thank you all for your support and patience. As always, let me know if you need anything. Have a nice weekend! Peace. |
Beta Was this translation helpful? Give feedback.
-
🔥 Nodezator 1.5.1 is out!
Finally merged and released the socket proximity detection feature (shown below) + other unrelated content updates Release post: https://github.com/IndiePython/nodezator/releases/tag/v1.5.1 |
Beta Was this translation helpful? Give feedback.
-
Hello, everyone, As always, I'm here to update you regarding my progress on the scheduled work for Nodezator. I actually didn't manage to do much this past couple weeks. The reason are changes in my personal life and activities outside my open-source maintainer efforts. In summary, I moved to a new address a few days ago. It is not far from where I lived before, almost the same neighborhood, but it will take a while until I settle down completely. I just got internet here and it will be a few more days or a week until my new desk is ready so I can get back to my usual development routine. Until there I'll be mostly focusing on writing rather than software development. Thank you all for your attention and patience. |
Beta Was this translation helpful? Give feedback.
-
Hello, everyone, As I said in the previous post, the situation regarding my desk didn't prevent me from working, but I still couldn't solve it yet. I was relying on a 3rd party to solve it for me but unfortunately it didn't pan out as we expected. I'm still doing everything I can to solve it as soon as possible, but I'll likely still have to wait a couple of weeks before I'm fully back into my usual speed once I have my new desk. Just to give you more context, the reason my desk is taking so long is that I actually still have the top of my old desk and only need a new suitable base for it. However, finding one is not an easy task cause people usually don't sell desks in parts here, but only whole desks. On top of that, the top is very large (I could not only put my desktop, monitor and other peripherals on top of it, but I even had extra space for writing/drawing), which makes it even harder to find a suitable base. In the end, we'll probably need to have the new base manufactured. The reason I didn't explain all that at the beginning was that I thought this was a problem I'd be able to solve swiftly, but instead here we are 😞 I'd just like to stress that I've been working as usual on the Indie Python project. I just can't work as fast since I'm relying on the small keyboard of my laptop instead of using my standard keyboard plugged to it since I don't have enough space without my desk. I can't plug my larger display to the laptop either for the same reason, which prevents me from testing changes in a larger display. In the end I just couldn't do much software development work these past weeks due to the situation. I've been mostly focusing on research and other tasks related to the project (I'll soon have news for you regarding a new child project of the Indie Python project). Again, thank you for your patience. As always, let me know if you need anything. Peace |
Beta Was this translation helpful? Give feedback.
-
Finally solved the issue with my desk this Wednesday! I'm finally fully equipped to work on my normal speed. 🎉 Long story short, instead of using a custom-made base for my desk I bought 02 trestles that fit very nicely and were very inexpensive too. The simplest solution is often the best one. |
Beta Was this translation helpful? Give feedback.
-
Hello, everyone! Didn't share any updates here recently because I've been mostly working on other tasks of the project other than development. Despite that, in the past few weeks I've fixed a few bugs and released corresponding patches, Regarding the other tasks, the Nodezator recently had a spike in the number of visits thanks to a post on HackerNews, which required my attention to answer questions on the post. I've also been working on a new child project of the Indie Python project that'll be announce in a couple weeks, along with other news for the Nodezator project. Given the problem with my desk described in the last few posts (which I already solved before) and the fact that I've been also working in this new project, I won't be able to meet the planned deadline for As always, everyone's feedback regarding the changes will be taken into account. Have a nice weekend! Peace |
Beta Was this translation helpful? Give feedback.
-
Hello, everyone! The discussions tab for the whole Indie Python project has 02 new important announcements that change the planned work for Nodezator going forward. I'll post another update here in the future regarding such impacts, but for now you should read the announcements:
I wish you a merry X/Christmas and a happy new year! Peace |
Beta Was this translation helpful? Give feedback.
-
Hello, everyone!
Nodezator development work posts like this one are meant...
Proposed features/changes
In the following paragraphs I present brief explanations on each listed feature/change.
Finishing the SDD will allow us to move forward much more smoothly and safe. First of all, it will help us define and implement the missing system test cases, which is the next item in the list. It will also help us clearly define and produce a roadmap, so Nodezator's future is clearer for the community and it is easier to plan the next changes/steps.
The importance of automated system testing was already discussed many times in the past, so instead of repeating myself here, I'll just point you to the most recent exposition on the subject: #72 (comment). Taking that into account, it is of the utmost importance to finish defining and implementing all test cases. In summary, we need them to guarantee developers, including myself, will have a much easier time introducing changes/features into Nodezator and avoiding introducing bugs and breaking existing functionality.
The undo/redo system is a staple feature in any app nowadays, so I don't think it requires further explanation. It is a feature that will make working and experimenting with Nodezator much easier and less error-prone.
Of all the changes I'm scheduling for this round of development work, input and output nodes are probably the ones which will take more time to implement, due to the many changes/additions they will require. It is a change that will impact working with Nodezator profoundly. Currently, when one exports Nodezator as a Python file, the graph is exported as a function with no parameters and no specified return value. After this feature is implemented, people will be able to define parameters and the return value for the function the graph represents.
I consider this to be the first step towards the future implementation of subgraphs/group nodes, because once graphs can have inputs (parameters) and outputs (the return value) defined for them, we'll finally be able to make it so they can be nested into each other in a subsequent version. That is, once a graph has inputs and outputs, we'll be able to regard it as a node and put that node inside another graph.
You can read more about input/output nodes in this discussion: #37, but it's been some time since I last visited that discussion, so I believe there's a few things that changed since then and a ton of things I didn't have the time to write about back then, so I'll write a more updated and complete explanation regarding them and publish it as a reply in this discussion in a few days or next week.
That is, apart from input and output nodes, the items on the list are pretty straightforward, so I intend to expand on them further. In summary, there's still things I'd like to properly present to you regarding my design for them and the approach to their implementation, so that you are all in the know and can thus offer further suggestions/feedback/opposition regarding it all. In a few days or next week I intend to post another reply here explaining all that to you.
Like the undo/redo system, other important features are also being listed for this round of changes, like the ability to drag data (files and text) into Nodezator with the mouse. For instance, dragging an image file from the system into Nodezator's canvas could automatically instantiate a data node with an image path preview widget, a node that shows that image in the graph and represents a reference to the image's path.
The ability to use the clipboard to copy and paste data between Nodezator's widgets and the system is also very convenient and desirable. Another staple feature that, I assume, needs no further explanation.
When doing a big round of changes I like to also use the opportunity to sneak in a few extra QOL/small/quick features. I won't list them here, but just go with the flow and see which ones I may end up adding. Of course, I'll avoid adding many things to our already large list of things to implement, but if they are small/quick enough it might not take too long after all. I was thinking of implementing at least a search bar for finding and instantiating nodes and the ability to reorder subparameters (arguments for variable-parameters) by dragging them with the mouse, instead of having to click the small arrow buttons repeatedly.
On the timeline
Note in the title of this post that I estimated a rather extended deadline: from July to December. This is so for a few reasons, which will discuss now.
First, instead of working on a couple of specialized features plus a few small/QOL features, I intend to work on a higher number of features and tasks (as you can see by the increased number of listed changes/features). Some of these features are not related to specific subsystems of Nodezator, like it was the case with the topological sorting implemented in the last version of Nodezator, which (mostly) only required work on subsystems related to graph execution. Features like the input and output nodes and undo/redo system will require changes in the whole package.
Second, as can be seen from all our previous development work posts, despite being able to deliver all or most of the scheduled work, accurately estimating the time required proved challenging and always required extending the original deadlines. Because of that, rather than use conservative estimates I think we own it to ourselves to work with deadlines that reflect more accurately the real time and effort required by the tasks/features scheduled.
Finally, despite having to extend our deadlines multiples times in the past, there was never indication in our results nor in feedback by the community that the work made was lacking in quality. In addition to that, as always, all the work was performed with as much transparency as possible, either by sharing a local copy of my repositories online or by working directly on a dev/development branch (the approach I adopted recently), measures which enable people to closely inspect my work at any time.
On top of that, I've always been updating people regularly on my development work, except for a few occasions that arise from time to time when tasks from other areas of the project or outside the project take up time. For instance, in addition to work on Nodezator's development, I also develop the Bionic Blue game, produce content for both projects, help users online, etc. Even on those occasions, though, what decreased was the frequency of my updates, not the frequency of my work on the project, which remained constant.
Risk management
The input/output nodes feature require a lot of GUI work, which usually takes more time to fine tune than other kind of features, which represent a moderate risk of having to extend our deadline.
Development work is already hard to accurately predict, but on top of that the tasks scheduled also include finishing Nodezator's software design document, which is technical writing work and comes with its own challenges, so it is yet another factor that can possibly result in a deadline extension.
Final observations
Despite still having to further expand on input and output nodes, I'm glad I already listed all the intended changes/features here so you can already opine if you wish.
Don't hesitate to reach out to me if you need anything. Have a nice week!
Peace
Beta Was this translation helpful? Give feedback.
All reactions