Run procedure when forever button stops? - netlogo

I would like to run a procedure whenever the the user unclicks a forever button.
Specifically, I'm using a forever button to allow the user to select a set of turtles (using methods from Code Examples in the Models Library). Once the set is selected, I want to write statistics calculated for the set to an Output window. (I can display this information from inside the button procedure, but then it updates continually, which is ugly.) A monitor element would do what I want display of a single number, but I want to be able to display an arbitrary number of values--one for each subset of the selected set of turtles. At present, I have a separate button that causes the statistics to be displayed, but I'd rather make it happen automatically.
If it's not possible to run a procedure on exist from a forever'ed procedure, is there another solution that you would suggest?
Thanks!

NetLogo has no "on exit" procedures, nor anything similar.
Given this limitation, the way I would approach your problem would be to keep the display of statistics at the end of your "forever" procedure, but to only display them if they need updating (i.e., if anything has changed). If you call clear-output before each update, you can achieve something that looks a lot like a "multi-line monitor".

Related

Multiple agents arrival based on Variable and database column

In my source block I want to be the amount of agents based on two different factors namely the amount of beds and visitors per bed. The visitors per bed is just a variable (e.g. visitors=3) and the amount of beds is loaded from the database table which is an excel file (see first image). Now I want to code this in the code block as shown in the example in image 2, but I do not know the correct code and do not know if it is even possible.
Simplest solution is just to do the pre-calcs in the input file and have in the dbase.
The more complex solution is to set the Source arrivals as:
Now, you read your dbase code at the start of the model using SQL (i.e. the query constructor). Make the necessary computations and create a Dynamic Event for each arrival when you want it to happen, relative to the model start. Each dynamic event then calls the source.inject(1) method.
Better still is to not use Source at all but a simple Enter block. The dynamic event creates the agent with all relevant properties from your dbase and pushes it into the Enter block using enter.take(myNewAgent)
But as I said: this is not trivial

Change a particular node in branch that each users have in firebase

How can I update a particular node that all users have in their own branch?
I am trying to update a users set of points back to 15 after a certain amount of days by a push of a button. I know how to update 1 users node but can't seem to figure out how to do create a function that when I push a button it resets all users that have that branch/var back to 15.
Otherwise, I would have to do it individually which is obviously not efficient.
This is my code to reset 1 of the student's node by a click of a button
Database.database().reference().root.child("students").child(userId).updateChildValues(["points": self.newPoints])
How do I write a method to reset all students who have the value "points" key by a press of a button?
Any help would be appreciated.
Thanks
You can't use wildcards to replace userId and therefore apply it to every node. You would probably need to fetch the entire students node, and update them one by one using a for loop, which would be very inefficient.
You probably want to use a different data structure in your database that would be more appropriate to your situation. Thats said, if you still want to stick with your current structure you can try having your client update a single boolean flag in your database, and then program a trigger function in node.js so that the update is handled on the server side directly. Check out : Firebase Cloud Functions

FileMaker Pro 14 - Pass Variable From Button Press

I have a number of columns, and I want to be able to have the user press the label for each column to sort the data alphabetically\numerically by that field.
I can already accomplish this rather easily, but not very efficiently. I could make one script for each column and set it to sort by that column, perhaps even creating a global variable to keep track of the direction. Instead, I'd like to reduce it to one script and pass a variable to the script based on what button\label was pressed.
So far I've found people saying you can change the color of each one and get the variable that way, but I don't want the category headers to be different colors. Yes, I could simply use a one-step process for each one, but no way to reverse it when they click it a second time. Any ideas?
You can pass a script parameter where you specify the script to be performed on the button. From there, you can specify what field to sort on and if you like, set global variables for how the fields were sorted (order and name) that you can use in conditional formatting to give visual feedback.
There are lots of techniques out there for this, but this is one I have used especially for arbitrarily large data sets where sorts should not be done on calculations.

Delayed Execution on Edit with Google Apps Script

I have a relatively large spreadsheet (300 rows, 30 columns) that I color based on the values in the spreadsheet. I'm doing accessing the API minimally using only two accesses:
getValues(...) to access all the values of the data range.
setBackgrounds(...) to set all the backgrounds of the data range.
This runs in about half a second or less. However, it gets in the way if I make it run on every edit using onEdit(), but I also don't want it to be updated at regular time intervals when I'm not editing it, seems like a waste. Is there a good way to make the script run in a "delayed" way, updating at regular time intervals while I'm editing?
Firstly, I would say you should look at Google Sheets' conditional formatting (Format > Conditional formatting menu item in Sheets) -- you may be able to do much of what you need without involving Apps Script at all.
Failing that, you can set up a regular time-based trigger to check for edits and change the backgrounds appropriately. You can support this trigger with a separate onEdit() trigger to record what has changed internally. The flow goes like this:
A change is made and onEdit() triggers
The onEdit() trigger only records the changed cell locations to a local variable or Cache
A time-based trigger fires every minute/hour/whenever
The time-based trigger checks the cache for edited cells, alters their backgrounds, then clears them from the cache
That said, depending on your workflow this approach may not be much better than simply using a time trigger to change the cells directly.

Refresh the Parent form of "Call_form" after Child form is closed in Oracle 10g

What I need is:
what trigger to use and where to put it.
I will give you an example of what I am doing.
I have a Contract form that is fully editable except the contract financial areas, which is read only. I want the user to press a button called, “change rates” and that will have a trigger “When-Button-Pressed” and call_form(UpdateFinancials);.
Now, in this screen, I have the user change the financial information such as increase the contract from 50k to 100k. Then the user saves and exits. This will then close the child form "UpdateFinancials" and show the parent form "ContractForm". The problem is, it still has all the old information on it. I need the information in the form to refresh when it gets back from the child form of the Call_Form function.
In the WHEN-BUTTON-PRESSED trigger, before you issue the CALL_FORM, set a variable (e.g. a hidden item or a global variable) to some value, e.g. 'CALLED_THE_FORM'.
In the WHEN-WINDOW-ACTIVATED trigger, test the variable, if it's ='CALLED_THE_FORM', reset the variable (e.g. to NULL), and run whatever code you want to run when the user returns from the form (e.g. execute query or whatever).
Alternatively, just execute query from the WHEN-WINDOW-ACTIVATED trigger - if you want the refresh to happen every time the user returns to the form. But personally I prefer to only refresh when I believe it is absolutely required.