Syntax error at input '(' on function isEngulfing(open, close) - syntax-error

In summary, the script that you want me to create will alert me when the minimum or maximum of the Asian session is manipulated, depending on the selected bias (bullish or bearish), and when a Shift Candle is formed by an Engulfing with POC above or below the previous candle and volume that exceeds the 20-period moving average of the TradingView Volume indicator.
This is the code:
// Variabili
bias = input(title="Enter bias (Bullish or Bearish)", type=string)
// Funzione per identificare l'Engulfing
function isEngulfing(open, close) return (open \> close\[1\] and close \> open\[1\]) or (open \< close\[1\] and close \< open\[1\])
// Calcoliamo il POC della candela corrente
poc = ((high + low + close) / 3)
// Calcoliamo il POC della candela precedente
poc_prev = ((high\[1\] + low\[1\] + close\[1\]) / 3)
// Funzione per verificare se il volume della candela Engulfing tocca la media mobile a 20 periodi dell'indicatore Volume function checkVolume(volume) return volume \>= sma(volume, 20)
// Funzione ShiftCandle
function ShiftCandle() if bias == "Bullish" if isEngulfing(open, close) and low \<= asian_range.l and checkVolume(volume) and poc \> poc_prev alertcondition(title="Shift Candle Bullish", message="Shift Candle Bullish detected") else if bias == "Bearish" if isEngulfing(open, close) and high \>= asian_range.h and checkVolume(volume) and poc \< poc_prev alertcondition(title="Shift Candle Bearish", message="Shift Candle Bearish detected")
ShiftCandle()
Tradingview compiler show me this error:
Syntax error at input '(' on function isEngulfing**(**open, close)
Can someone help me?
Thanks
Luca
I wish the program would do what I wrote in the initial part before but I just can't solve this problem.
Here are two examples:
Example: 1 - The user selects the bias from the keyboard: bullish 2 - The script alerts the user when the minimum of the Asian session is manipulated 3 - The script alerts the user when the Shift Candle is formed (in this case, the Shift Candle will be formed by a bullish Engulfing, POC of the Engulfing candle higher than the previous candle, the volume of the bullish Engulfing candle will have exceeded the 20-period MA of the TradingView Volume indicator)
Example: 2 - The user selects the bias from the keyboard: bearish 2 - The script alerts the user when the maximum of the Asian session is manipulated 3 - The script alerts the user when the Shift Candle is formed (in this case, the Shift Candle will be formed by a bearish Engulfing, POC of the Engulfing candle lower than the previous candle, the volume of the bearish Engulfing candle will have exceeded the 20-period MA of the TradingView Volume indicator)

Related

How to use randomTrips.py in SUMO on win8

I'm using randomTrips.py in SUMO to generate random trips on win8. I have a map.net.xml file and try to create a trips.xml file through randomTrips.py. However, the problem occurs and I don't know how to deal with it. The code is as follows:
C:\Program Files (x86)\Eclipse\sumo\tools>randomTrips.py -n map.net.xml -l 200 -e -o map.trips.xml
I don't get the .trips.xml file I want. And the outcome is as follows, it seems that I have missed some properties of the function in my code, but I don't know how to correct it. If anyone knows how to solve the problem, pls give me some valuable suggestions. Thanks.
The outcome is :
Usage: randomTrips.py [options]
Options:
-h, --help show this help message and exit
-n NETFILE, --net-file=NETFILE
define the net file (mandatory)
-a ADDITIONAL, --additional-files=ADDITIONAL
define additional files to be loaded by the rout
-o TRIPFILE, --output-trip-file=TRIPFILE
define the output trip filename
-r ROUTEFILE, --route-file=ROUTEFILE
generates route file with duarouter
--weights-prefix=WEIGHTSPREFIX
loads probabilities for being source, destinatio
via-edge from the files named .src.xml,
.sink.xml and .via.xml
--weights-output-prefix=WEIGHTS_OUTPREFIX
generates weights files for visualisation
--pedestrians create a person file with pedestrian trips inste
vehicle trips
--persontrips create a person file with person trips instead o
vehicle trips
--persontrip.transfer.car-walk=CARWALKMODE
Where are mode changes from car to walking allow
(possible values: 'ptStops', 'allJunctions' and
combinations)
--persontrip.walkfactor=WALKFACTOR
Use FLOAT as a factor on pedestrian maximum spee
during intermodal routing
--prefix=TRIPPREFIX prefix for the trip ids
-t TRIPATTRS, --trip-attributes=TRIPATTRS
additional trip attributes. When generating
pedestrians, attributes for and
supported.
--fringe-start-attributes=FRINGEATTRS
additional trip attributes when starting on a fr
-b BEGIN, --begin=BEGIN
begin time
-e END, --end=END end time (default 3600)
-p PERIOD, --period=PERIOD
Generate vehicles with equidistant departure tim
period=FLOAT (default 1.0). If option --binomial
used, the expected arrival rate is set to 1/peri
-s SEED, --seed=SEED random seed
-l, --length weight edge probability by length
-L, --lanes weight edge probability by number of lanes
--speed-exponent=SPEED_EXPONENT
weight edge probability by speed^ (defaul
--fringe-factor=FRINGE_FACTOR
multiply weight of fringe edges by (defa
--fringe-threshold=FRINGE_THRESHOLD
only consider edges with speed above as
edges (default 0)
--allow-fringe Allow departing on edges that leave the network
arriving on edges that enter the network (via
turnarounds or as 1-edge trips
--allow-fringe.min-length=ALLOW_FRINGE_MIN_LENGTH
Allow departing on edges that leave the network
arriving on edges that enter the network, if the
at least the given length
--min-distance=MIN_DISTANCE
require start and end edges for each trip to be
least m apart
--max-distance=MAX_DISTANCE
require start and end edges for each trip to be
most m apart (default 0 which disables a
checks)
-i INTERMEDIATE, --intermediate=INTERMEDIATE
generates the given number of intermediate way p
--flows=FLOWS generates INT flows that together output vehicle
the specified period
--maxtries=MAXTRIES number of attemps for finding a trip which meets
distance constraints
--binomial=N If this is set, the number of departures per sec
will be drawn from a binomial distribution with
and p=PERIOD/N where PERIOD is the argument give
option --period. Tnumber of attemps for finding
which meets the distance constraints
-c VCLASS, --vclass=VCLASS, --edge-permission=VCLASS
only from and to edges which permit the given ve
class
--vehicle-class=VEHICLE_CLASS
The vehicle class assigned to the generated trip
(adds a standard vType definition to the output
--validate Whether to produce trip output that is already c
for connectivity
-v, --verbose tell me what you are doing
Probably the file name association with .py files is broken, see Python Command Line Arguments (Windows). Try to run the script with python explicitly:
python randomTrips.py -n map.net.xml -l 200 -e -o map.trips.xml
I just tried last week. You can search randomTrips.py under SUMO's folder. Then you find the location of randomTrips.py, then you open the cmd and call python to execute it. You also need to specify the net.xml.

Optimising applescript to decrease energy impact

I have this script that I created for a battery indicator widget that will show on my (Macbook pro) touch bar and have it set to re-run every 3 secs (to update the text and logo), but it is eating a lot of energy just running in the background and I was wondering if maybe there was a way to make it more efficient in some way in order to decrease battery consumption.
Here is the script:
(Keep in mind that the images for the icon are in base64 because I plan on sharing this widget with people who might know nothing about computers and therefor I can't have them download and save an image in a specific directory etc..)
set bat_empty_icon to "iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAA3XAAAN1wFCKJt4AAABWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgpMwidZAAALzUlEQVR4Ae3dv69lVRUH8IdMDAxQTYjAWFAQEwsrAWNCYkFoJsgQO7UxYvQPoFWgMDYWxEYrbfzVAoUNgcRkEg2MFcWEhIIYYGhomOFXjOD6jjnkcmfemzez7ptz9r2fnay59915+9y1P/vsNeec+2P29jQCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINAXuKm/iUtbuLX+fLjioYqTFfes3N5R9zUC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"
set bat_low_icon to "iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAGAGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMTgtMTItMTJUMDA6MDk6NTcrMDE6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDE4LTEyLTEyVDAwOjI0OjA1KzAxOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDE4LTEyLTEyVDAwOjI0OjA1KzAxOjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJmOGJiM2NlLTYxOTYtNDg2ZC1hNTAxLTNhZDVlNGZlZDlkNSIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOmM4N2E0ZWM5LTRhOGQtYzM0Yy05MjU0LTA2Y2FhOGUzYjAxMSIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjBlYjhjMWMxLWI0MmEtNGUyOC04ODM0LTAzYWQyZGEwN2YwZSI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MGViOGMxYzEtYjQyYS00ZTI4LTg4MzQtMDNhZDJkYTA3ZjBlIiBzdEV2dDp3aGVuPSIyMDE4LTEyLTEyVDAwOjA5OjU3KzAxOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoTWFjaW50b3NoKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MmY4YmIzY2UtNjE5Ni00ODZkLWE1MDEtM2FkNWU0ZmVkOWQ1IiBzdEV2dDp3aGVuPSIyMDE4LTEyLTEyVDAwOjI0OjA1KzAxOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz471XDCAAAI4klEQVR4nO3dvYsd1wGG8Wd3ReLVSpWKaOUULkwgRapYCgFDwMaNUCyTLlETYhP/ASZdYpsQ3KgwbpIqbpyPVnLhxlgQECRYSuVCGFyYIGnVqNHqkxBtiqMrr1ar1d09c++Zmff5wbD6YK/OFfc8e2bmztyFjY0NJGVabD0ASe0YACmYAZCCGQApmAGQghkAKZgBkIIZACmYAZCCGQApmAGQghkAKZgBkIIZACmYAZCCGQApmAGQghkAKZgBkIIZACmY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"
set bat_half_icon to "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"
set bat_three_quarters_icon to "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"
set bat_full_icon to "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"
set bat_charging_icon to "iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAGGmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHRpZmY6T3JpZW50YXRpb249IjEiIHhtcDpDcmVhdGVEYXRlPSIyMDE4LTEyLTEyVDAwOjMwOjU5KzAxOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAxOC0xMi0xMlQwMDozNjowNyswMTowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOC0xMi0xMlQwMDozNjowNyswMTowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoyMmUzY2RlNS0xNjNjLTRkMmQtYmNjZi04YmNhOTMxYzUwMWQiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0NGVmZWJjMi1iM2E5LTM2NDMtOGFmMi1kZTI5NTVlNWNjMzgiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YTRiMzc2MS1hMjhlLTQzOGYtYjFiZi1iZDg5ZjE4M2JjZGIiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo4YTRiMzc2MS1hMjhlLTQzOGYtYjFiZi1iZDg5ZjE4M2JjZGIiIHN0RXZ0OndoZW49IjIwMTgtMTItMTJUMDA6MzY6MDcrMDE6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChNYWNpbnRvc2gpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDoyMmUzY2RlNS0xNjNjLTRkMmQtYmNjZi04YmNhOTMxYzUwMWQiIHN0RXZ0OndoZW49IjIwMTgtMTItMTJUMDA6MzY6MDcrMDE6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChNYWNpbnRvc2gpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PmmDgZ0AABSESURBVHic7d17kJ1lYcfx7zl7kt0km01YEhODGMItggWMgFwcixquIjfBDpS2YrUXe3Ha2nHaqp1p60z5B23/kFptx+lFabUUW1GRKZcACYpYQK4BAsQkQpLNdZNNstnd0z9++3ZPNns557z3fX6fmTMLuZzz5Jzz/t7n/lTq9TpmFqZq3gUws/w4AMwC5gAwC5gDwCxgDgCzgDkAzALmADALmAPALGAO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"
set chargeState to do shell script "pmset -g batt | awk '{printf \"%s %s\\n\", $4,$5;exit}'"
set percentLeft to do shell script "pmset -g batt | egrep -ow '([0-9]{1,3})[%]'" as text
set percentcheck to (item 1 of words of percentLeft as integer)
on new_icon(base64Code)
set percentLeft to do shell script "pmset -g batt | egrep -ow '([0-9]{1,3})[%]'" as text
tell application "BetterTouchTool"
update_touch_bar_widget "482F2657-A978-4D25-B9D6-EABFAD7E3B0A" text percentLeft icon_data base64Code
end tell
end new_icon
if (chargeState contains "AC") then
my new_icon(bat_charging_icon)
else if percentcheck ≥ 85 then
my new_icon(bat_full_icon)
else if (percentcheck < 85) and (percentcheck ≥ 65) then
my new_icon(bat_three_quarters_icon)
else if (percentcheck < 65) and (percentcheck ≥ 31) then
my new_icon(bat_three_quarters_icon)
else if percentcheck < 31 then
my new_icon(bat_low_icon)
else if percentcheck ≤ 10 then
my new_icon(bat_empty_icon)
end if
Your first step should be to increase the intervals at which you run the script. There is no need to have it run every 3 seconds (!). Even once a minute would be sufficient but I, personally, would set it to something such as once every ten minutes, since the battery level doesn't tends to only change once within a ten minute window. Even if it changed twice (e.g. dropping from 97% to 96% then to 95%), there would be no negative consequences from your script registering the level going from 97% straight down to 95% in a ten minute interval.
The next thing you can do is store those base 64 strings in properties rather than variables. Properties are set once and stored between subsequent runs of a script. If the values of the properties aren't altered, then the script doesn't need to read a new set of values each time it executes. As they are set at compile time, the overhead is reduced at run time.
The next thing you can do is get rid of the do shell script commands. They incur a lot of overhead. Instead, you can use AppleScriptObjC calls to obtain the information you need. There is still a slight overhead in implementing AppleScriptObjC compared to vanilla AppleScript, but it won't be as great as the cost of creating multiple shell processes:
property bat_empty_icon : "iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAA3XAAAN1wFCKJt4AAABWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgpMwidZAAALzUlEQVR4Ae3dv69lVRUH8IdMDAxQTYjAWFAQEwsrAWNCYkFoJsgQO7UxYvQPoFWgMDYWxEYrbfzVAoUNgcRkEg2MFcWEhIIYYGhomOFXjOD6jjnkcmfemzez7ptz9r2fnay59915+9y1P/vsNeec+2P29jQCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINAXuKm/iUtbuLX+fLjioYqTFfes3N5R9zUC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"
property bat_low_icon : "iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAGAGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMTgtMTItMTJUMDA6MDk6NTcrMDE6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDE4LTEyLTEyVDAwOjI0OjA1KzAxOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDE4LTEyLTEyVDAwOjI0OjA1KzAxOjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJmOGJiM2NlLTYxOTYtNDg2ZC1hNTAxLTNhZDVlNGZlZDlkNSIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOmM4N2E0ZWM5LTRhOGQtYzM0Yy05MjU0LTA2Y2FhOGUzYjAxMSIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjBlYjhjMWMxLWI0MmEtNGUyOC04ODM0LTAzYWQyZGEwN2YwZSI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MGViOGMxYzEtYjQyYS00ZTI4LTg4MzQtMDNhZDJkYTA3ZjBlIiBzdEV2dDp3aGVuPSIyMDE4LTEyLTEyVDAwOjA5OjU3KzAxOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoTWFjaW50b3NoKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MmY4YmIzY2UtNjE5Ni00ODZkLWE1MDEtM2FkNWU0ZmVkOWQ1IiBzdEV2dDp3aGVuPSIyMDE4LTEyLTEyVDAwOjI0OjA1KzAxOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz471XDCAAAI4klEQVR4nO3dvYsd1wGG8Wd3ReLVSpWKaOUULkwgRapYCgFDwMaNUCyTLlETYhP/ASZdYpsQ3KgwbpIqbpyPVnLhxlgQECRYSuVCGFyYIGnVqNHqkxBtiqMrr1ar1d09c++Zmff5wbD6YK/OFfc8e2bmztyFjY0NJGVabD0ASe0YACmYAZCCGQApmAGQghkAKZgBkIIZACmYAZCCGQApmAGQghkAKZgBkIIZACmYAZCCGQApmAGQghkAKZgBkIIZACmY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"
property bat_half_icon : "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"
property bat_three_quarters_icon : "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"
property bat_full_icon : "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"
property bat_charging_icon : "iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAGGmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHRpZmY6T3JpZW50YXRpb249IjEiIHhtcDpDcmVhdGVEYXRlPSIyMDE4LTEyLTEyVDAwOjMwOjU5KzAxOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAxOC0xMi0xMlQwMDozNjowNyswMTowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOC0xMi0xMlQwMDozNjowNyswMTowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoyMmUzY2RlNS0xNjNjLTRkMmQtYmNjZi04YmNhOTMxYzUwMWQiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0NGVmZWJjMi1iM2E5LTM2NDMtOGFmMi1kZTI5NTVlNWNjMzgiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YTRiMzc2MS1hMjhlLTQzOGYtYjFiZi1iZDg5ZjE4M2JjZGIiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo4YTRiMzc2MS1hMjhlLTQzOGYtYjFiZi1iZDg5ZjE4M2JjZGIiIHN0RXZ0OndoZW49IjIwMTgtMTItMTJUMDA6MzY6MDcrMDE6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChNYWNpbnRvc2gpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDoyMmUzY2RlNS0xNjNjLTRkMmQtYmNjZi04YmNhOTMxYzUwMWQiIHN0RXZ0OndoZW49IjIwMTgtMTItMTJUMDA6MzY6MDcrMDE6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChNYWNpbnRvc2gpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PmmDgZ0AABSESURBVHic7d17kJ1lYcfx7zl7kt0km01YEhODGMItggWMgFwcixquIjfBDpS2YrUXe3Ha2nHaqp1p60z5B23/kFptx+lFabUUW1GRKZcACYpYQK4BAsQkQpLNdZNNstnd0z9++3ZPNns557z3fX6fmTMLuZzz5Jzz/t7n/lTq9TpmFqZq3gUws/w4AMwC5gAwC5gDwCxgDgCzgDkAzALmADALmAPALGAO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"
global percentage
set [percentage, powersource] to [|current capacity|, ¬
|power source state|] of battery's info()
if powersource contains "AC" then
new_icon(bat_charging_icon)
else if percentage ≥ 85 then
new_icon(bat_full_icon)
else if percentage ≥ 65 then
new_icon(bat_three_quarters_icon)
else if percentage ≥ 31 then
new_icon(bat_three_quarters_icon)
else if percentage ≥ 11 then
new_icon(bat_low_icon)
else
new_icon(bat_empty_icon)
end if
on new_icon(base64Code)
global percentage
tell application "BetterTouchTool"
update_touch_bar_widget ¬
"482F2657-A978-4D25-B9D6-EABFAD7E3B0A" text ¬
"" & percentage & "%" icon_data base64Code
end tell
end new_icon
script battery
use framework "IOKit"
on info()
current application's IOPSCopyPowerSourcesInfo() as record
end info
end script
Additionally, I tidied up the if...then...else block so it doesn't do more number comparisons than necessary.

Getting unexpected output from BBC MicroBit robot when moving forwards and then reverse

I’m using a Micro:Bit and Bit:Bot to do some simple things but am getting unexpected results from the Bit:Bot motor.
Simply put, i’m trying to:
move the Bit:Bot forward for 1 second (with a few Green Neopixels on)
Stop motors (& clear all neopixels)
reverse (with some Red Neopixels on)
Here is my program, written in MicroPython:
from microbit import *
import neopixel
# pin13 gives access to the robot's neopixels.
myLightShow = neopixel.NeoPixel(pin13,12)
myLightShow[3]= (0,255,0)
myLightShow[4]= (0,225,0)
myLightShow[5]= (0,255,0)
myLightShow[9]= (0,255,0)
myLightShow[10]= (0,255,0)
myLightShow[11]= (0,255,0)
myLightShow.show()
#for driving the motors the following pins are used:
#pin8 (left wheel) and pin12 (right wheel) sets the direction.
#set pin to 0 for forward, set pin to 1 for reverse
# pin0 (left wheel) and pin1 (right wheel) sets speed. 0 - 1023 range
# both, therefore, are write_analog statements.
#Below, the 5 statements tell motors to go forward, at speed 300 for 1 sec
pin8.write_digital(0)
pin12.write_digital(0)
pin0.write_analog(300)
pin1.write_analog(300)
sleep(1000)
#Stop motors and clear neopixels (i.e. off)
pin0.write_analog(0)
pin1.write_analog(0)
pin8.write_digital(0)
pin12.write_digital(0)
myLightShow.clear()
# reverse at speed 350
pin8.write_digital(1)
pin12.write_digital(1)
pin0.write_analog(350)
pin1.write_analog(350)
# turn on selected neopixels and show.
myLightShow[0]= (255,0,0)
myLightShow[1]= (255,0,0)
myLightShow[2]= (255,0,0)
myLightShow[6]= (255,0,0)
myLightShow[7]= (255,0,0)
myLightShow[8]= (255,0,0)
myLightShow.show()
When i run the program on my bit:bot, it moves forward for 1 second, as expected, then stops (as expected) but then continues to move forward again!
I have been troubleshooting this for ages and don’t know what the problem is.
Can anyone help please? Thanks
Adding a sleep(1000) command seemed to rectify the issue and now the bit:bot moves as expected.

How to acquire DualEELS spectra by DM script?

I would like to acquire both low-loss and high-loss EELS spectra simultaneously in DualEELS mode by DM script. However, the command for acquiring an EELS spectrum EELSAcquireSpectrum() can obtain only single EELS spectrum.
Is there an appropriate scripting commands for DualEELS acquisition?
My system is GMS2.x, but please tell me even if such a command is available in only GMS3.x.
GMS 3.2 (Possible also for GMS 2.3)
I am not aware of any specific command for DualEELS. As a rought workaround: When you start the acquistions via EELSInvokeCaptureButton() or EELSInvokeViewButton() the mode you have set on your UI will be followed. You then need to grab the two front-most images per script.
This is a rough example script:
EELSInvokeCaptureButton()
image low,high
while ( EELSAcquisitionIsActive() )
{
Result(" \n waiting..." )
sleep( 0.1 )
}
high := GetImageDocument( 0 ).ImageDocumentGetImage( 0 )
low := GetImageDocument( 1 ).ImageDocumentGetImage( 0 )
low.ImageSetName( low.ImageGetName() + " - l" )
high.ImageSetName( high.ImageGetName() + " - h" )

Fortran program sometimes hangs while writing large files to disk

I have written a meshing application that runs quite well except for one thing:
While writing the results to disk, the program sometimes hangs. Well effectively it is still running, I can see it produces 100% CPU load and occupying memory using top. But there is no new data written to the file and this state would probably last indefinitely.
The job can not even be killed, the only option I had so far was rebooting the machine to get rid of the job.
However, most of the time the exact same job executes until the end without any problems. It should be noted that this only happens for large jobs where the final file size is somewhere above the order of 50GB. I haven't hat this behavior with smaller jobs so far. The result file is written up to a different point each time. Sometimes its 45GB, sometimes its 60GB or something completely different.
The workstation I use operates OpenSuse 13.1, has enough RAM and Disk space available. Yet the same behavior could be observed on different machines.
What I tried so far (apart from the usual debugging) was using Gfortran and Intel Fortran compilers to no avail. I messed around with the -mcmodel=large compiler option, but as I understood this is not related to the size of files written by the program and did not help anything.
I don't know what information to provide since I am really running out of ideas what could be causing the problem. I append the routine that writes an ASCII result file here because it produces the largest file size, but I have the same issues when writing unformatted files with a similar routine.
ANY hint on what could possibly cause this behavior is highly appreciated.
SUBROUTINE write_legacymesh
use types
use parameters
use data
implicit none
INTEGER :: l, n, i, j, k, number, c, neighbor
REAL(DP), DIMENSION(3) :: pos_d
CHARACTER(LEN=100) :: dummy_char
INTEGER(I4B), DIMENSION(26) :: neighborbuffer
LOGICAL :: file_exists
call write_header
call system ('sync')
! create the mesh file
dummy_char = folder_mesh // '/' // file_mesh
write(*,'(A,A)') ' writing mesh: ', trim(adjustl(dummy_char))
open(unit=20, file=trim(adjustl(dummy_char)), status='replace', action='write')
! write the mesh file
write(20,'(A)') ' LB database'
l = level_max
! write the header for this mesh size
write(20,'(A)') ' number of collision centers'
write(20,'(I16)') nf(l)
write(20,'(A)') ' number of cut links'
write(20,'(I16)') ncut(l)
write(20,'(A)') ' number of boundary collision centers'
write(20,'(I16)') nb(l)
write(20,'(A)') ' dummy value'
write(20,'(I16)') 0
write(20,'(A)') ' number of inflow boundary collision centers'
write(20,'(I16)') nb1(l)
write(20,'(A)') ' number of pressure boundary collision centers'
write(20,'(I16)') nb2(l)
write(20,'(A)') ' number of slip boundary collision centers'
write(20,'(I16)') nb3(l)
write(20,'(A)') ' number of noslip boundary collision centers'
write(20,'(I16)') nb4(l)
write(20,'(A)') ' lattice spacing'
write(20,'(E16.8)') dx(l)*scaling
! write the coordinates
write(20,'(A)') ' cc RBT value cc coordinates'
do n=1, nf(l)
number = order_level(l)%order(n)
i = levels(l)%blocks(number)%pos(1)
j = levels(l)%blocks(number)%pos(2)
k = levels(l)%blocks(number)%pos(3)
! rescale and move the geometry to get the original size and position
pos_d(1) = (real(i,kind=dp) - 0.5_dp) * dx(l) + corner_ibc(1)
pos_d(2) = (real(j,kind=dp) - 0.5_dp) * dx(l) + corner_ibc(2)
pos_d(3) = (real(k,kind=dp) - 0.5_dp) * dx(l) + corner_ibc(3)
write(20,'(2I16,3E20.7)') n, levels(l)%blocks(number)%state, pos_d*scaling
end do
! write the link info
write(20,'(A)') ' link information'
do n=1, nf(l)
number = order_level(l)%order(n)
do c=1, nlinks
neighbor = levels(l)%blocks(number)%neighbors(c)
if(neighbor .GT. 0) then
neighborbuffer(c) = levels(l)%blocks(neighbor)%number
else
neighborbuffer(c) = neighbor
end if
end do
write(20,'(7I16)') n, neighborbuffer(1:6)
write(20,'(A,6I16)') ' ', neighborbuffer(7:12)
write(20,'(A,6I16)') ' ', neighborbuffer(13:18)
end do
! write the q-values
write(20,'(A)') ' q-values'
do n=1, ncut(l)
write(20,'(I16,E20.7)') n, max(qmin, min(qmax, aux_level(l)%q_values(n)))
end do
write(20,'(A)') ' end of data'
close(unit=20)
END SUBROUTINE write_legacymesh
Edit1: Following the suggestions of flushing write buffers, I added this to every loop that writes data:
if(mod(n,10000000) .EQ. 0) then
call flush(20)
close(unit=20)
call system('sync')
open(unit=20, file=trim(adjustl(dummy_char)), status='old', position='append', action='write')
end if
This did not change anything, the routine still hangs at a random point, this time after writing 18.5GB of data or 211'149'016 write events in the first loop.
Edit2: Deactivating buffered I/O with the Intel Fortran compiler (not using the -assume buffered_io flag) kind of "solved" the issue. But of course this leaves me with slow unbuffered writes for large files, a particularly unpleasant combination.
Edit3: Thanks for the suggestion to add manual write buffers. The file format is not well suited to make use of them efficiently, but its still better than nothing. Anyway, this is a legacy file format and I am positive that I can convince my co-workers that a different file format or even unformatted files are the better option.
While I still have no idea what causes the error, at least I have a tolerable way to avoid it now. Thanks for all the valuable suggestions.