dream issueshttps://lab.nexedi.com/nexedi/dream/-/issues2020-04-01T06:32:33Zhttps://lab.nexedi.com/nexedi/dream/-/issues/3Are machines with variable processingTime possible?2020-04-01T06:32:33ZGhost UserAre machines with variable processingTime possible?I'm trying to model a single machine can be reconfigured to manufacture numerous different parts. Each configuration of the machine creates a different part at a specific rate for that part. The machine only operates in one configuration at any given time. There is change-over/setup time between the configurations, then once the machine is in the new configuration, the machine's processing time would be different for the new parts it is producing. When the machine is configured to run for PartA might take 1 minute to process, whereas when configured to run PartB takes 3 minutes to process, etc.
Think of it like having a machine that can make 3 different donuts: [A] Old Fashioned [B] Jelly [C] French Cruller
![doughnuts](/uploads/d4f9c87f9912e2be5efa184c7f51ea06/doughnuts.jpg)
To make each different type of doughnut, the extruder mechanics on the machine are changed to match the desired doughnut, and based on the type of dough and other factors, their output rates are different.
How would you suggest handling this so that only one type of doughnut can be created at any given time, but the type of doughnut dictates the speed of the machine? FYI - we have some machines that can make 100's or 1000's of different parts depending on their configuration.
I'm not sure we'd model them all, but suffice to say they are very flexible machines :).
I'm trying to model a single machine can be reconfigured to manufacture numerous different parts. Each configuration of the machine creates a different part at a specific rate for that part. The machine only operates in one configuration at any given time. There is change-over/setup time between the configurations, then once the machine is in the new configuration, the machine's processing time would be different for the new parts it is producing. When the machine is configured to run for PartA might take 1 minute to process, whereas when configured to run PartB takes 3 minutes to process, etc.
Think of it like having a machine that can make 3 different donuts: [A] Old Fashioned [B] Jelly [C] French Cruller
![doughnuts](/uploads/d4f9c87f9912e2be5efa184c7f51ea06/doughnuts.jpg)
To make each different type of doughnut, the extruder mechanics on the machine are changed to match the desired doughnut, and based on the type of dough and other factors, their output rates are different.
How would you suggest handling this so that only one type of doughnut can be created at any given time, but the type of doughnut dictates the speed of the machine? FYI - we have some machines that can make 100's or 1000's of different parts depending on their configuration.
I'm not sure we'd model them all, but suffice to say they are very flexible machines :).
https://lab.nexedi.com/nexedi/dream/-/issues/2How to create a multi-threaded, non-blocking machine?2020-04-01T06:32:34ZGhost UserHow to create a multi-threaded, non-blocking machine?I'm trying to create a machine that's multi-threaded and can process many (say hundreds or thousands) of entities for their fixed duration without blocking and running single-threaded. If up to 500 entities can be in the machine at any given time, but each one must stay in the machine for say 2 hours. Creating a single queue to feed 100's/1,000's of instances of the same single-threaded machine instance seems like a bad way to approach it.
Example:
I'm thinking something along the lines of a continuous oven used for baking bread, etc. or anything that is a conveyor system loop. See this video to reference what I'm suggesting: https://www.youtube.com/watch?v=3UjUWfwWAC4&t=120
If the output speed is 500/hr but it takes 1 hour to traverse the continuous oven, then I don't think it's accurate to say any one item takes 1/500th of the time and use a regular machine with 500/hr. That might accurately model the output rate of the machine, but not the capacity (i.e. number of parts simultaneously held within) of the machine nor does it reflect the total time it takes an entity (loaf of bread) to pass through the system. Every entity takes the entire duration required to traverse the loop, but the machine (oven) can handle multiple items at the same time.
I'm trying to create a machine that's multi-threaded and can process many (say hundreds or thousands) of entities for their fixed duration without blocking and running single-threaded. If up to 500 entities can be in the machine at any given time, but each one must stay in the machine for say 2 hours. Creating a single queue to feed 100's/1,000's of instances of the same single-threaded machine instance seems like a bad way to approach it.
Example:
I'm thinking something along the lines of a continuous oven used for baking bread, etc. or anything that is a conveyor system loop. See this video to reference what I'm suggesting: https://www.youtube.com/watch?v=3UjUWfwWAC4&t=120
If the output speed is 500/hr but it takes 1 hour to traverse the continuous oven, then I don't think it's accurate to say any one item takes 1/500th of the time and use a regular machine with 500/hr. That might accurately model the output rate of the machine, but not the capacity (i.e. number of parts simultaneously held within) of the machine nor does it reflect the total time it takes an entity (loaf of bread) to pass through the system. Every entity takes the entire duration required to traverse the loop, but the machine (oven) can handle multiple items at the same time.
https://lab.nexedi.com/nexedi/dream/-/issues/1Overview question: What's the order of methods that are called in a core object?2020-04-01T06:32:34ZGhost UserOverview question: What's the order of methods that are called in a core object?Say I want to execute some code at just after a machine receives an entity, but before any internal machine processing has taken place? Similarly, how would I run some code after the machine has completed and just before hand-off to another object?
Is there a quick function rundown or diagram that easily shows what happens (and at what times) within each machine so I know where best to attach custom code to operate on entities passing through the system?
Here's a high level of how I'd see it working:
![high_level_machine](/uploads/27e2e13e4a42585eb7c02250995bca9c/high_level_machine.jpg)
Say I want to execute some code at just after a machine receives an entity, but before any internal machine processing has taken place? Similarly, how would I run some code after the machine has completed and just before hand-off to another object?
Is there a quick function rundown or diagram that easily shows what happens (and at what times) within each machine so I know where best to attach custom code to operate on entities passing through the system?
Here's a high level of how I'd see it working:
![high_level_machine](/uploads/27e2e13e4a42585eb7c02250995bca9c/high_level_machine.jpg)