diff --git a/README.md b/README.md index d331847..24d1605 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,8 @@ This repository includes resources and tools we use at Ableton when building and * [Max for Live Production Guidelines](m4l-production-guidelines/m4l-production-guidelines.md) - A collection of suggestions that we recommend keeping in mind in when sharing your Max device. * [Ableton's patch code standard](patch-code-standard/patch-code-standard.md) - The patch code standard that Ableton uses for the devices that come with Live. -* [CPU Reporter](cpu-reporter/README.md) - A device to measure the CPU usage of a Live set over time. +* [CPU Reporter](cpu-reporter/README.md) - A device to measure the CPU usage of a Live Set over time. +* [Load Time Tester](load-time-tester/README.md) - A device and patch to measure the loading time of a Live Set. * [maxdiff](maxdiff/README.md) - A way to get readable git diffs for Max devices and Max patch files. These are aimed primarily at experienced Max for Live builders. To get started with Max for Live, please have a look at the [Building Max Devices](https://www.ableton.com/en/packs/building-max-devices/) Pack. diff --git a/load-time-tester/DoneLoading.amxd b/load-time-tester/DoneLoading.amxd new file mode 100644 index 0000000..3f8832e Binary files /dev/null and b/load-time-tester/DoneLoading.amxd differ diff --git "a/load-time-tester/Load Time Tester Test Project/Icon\r" "b/load-time-tester/Load Time Tester Test Project/Icon\r" new file mode 100644 index 0000000..e69de29 diff --git a/load-time-tester/Load Time Tester Test Project/Load Time Tester Test.als b/load-time-tester/Load Time Tester Test Project/Load Time Tester Test.als new file mode 100644 index 0000000..f68b775 Binary files /dev/null and b/load-time-tester/Load Time Tester Test Project/Load Time Tester Test.als differ diff --git a/load-time-tester/Load Time Tester.maxpat b/load-time-tester/Load Time Tester.maxpat new file mode 100644 index 0000000..93ce521 --- /dev/null +++ b/load-time-tester/Load Time Tester.maxpat @@ -0,0 +1,494 @@ +{ + "patcher": { + "fileversion": 1, + "appversion": { + "major": 9, + "minor": 3, + "revision": 0, + "architecture": "x64", + "modernui": 1 + }, + "classnamespace": "box", + "rect": [ 67.0, 115.0, 311.0, 320.0 ], + "openinpresentation": 1, + "boxes": [ + { + "box": { + "fontname": "Ableton Sans Small", + "fontsize": 10.0, + "id": "obj-9", + "linecount": 3, + "maxclass": "live.comment", + "numinlets": 1, + "numoutlets": 0, + "patching_rect": [ 429.0, 333.0, 72.0, 42.0 ], + "presentation": 1, + "presentation_rect": [ 13.0, 276.0, 147.0, 18.0 ], + "text": "4. See the loading time here:", + "textjustification": 0 + } + }, + { + "box": { + "active": 0, + "fontname": "Ableton Sans Small", + "fontsize": 10.0, + "frozen_box_attributes": [ "active" ], + "id": "obj-7", + "maxclass": "live.numbox", + "numinlets": 1, + "numoutlets": 2, + "outlettype": [ "", "float" ], + "parameter_enable": 1, + "patching_rect": [ 510.0, 346.0, 50.0, 15.0 ], + "presentation": 1, + "presentation_rect": [ 13.0, 296.0, 163.0, 15.0 ], + "saved_attribute_attributes": { + "valueof": { + "parameter_longname": "live.numbox", + "parameter_mmax": 10000000.0, + "parameter_modmode": 3, + "parameter_shortname": "live.numbox", + "parameter_type": 0, + "parameter_unitstyle": 2 + } + }, + "varname": "live.numbox" + } + }, + { + "box": { + "fontname": "Ableton Sans Small", + "fontsize": 10.0, + "id": "obj-5", + "maxclass": "live.comment", + "numinlets": 1, + "numoutlets": 0, + "patching_rect": [ 18.0, 20.0, 72.0, 18.0 ], + "presentation": 1, + "presentation_rect": [ 13.0, 209.0, 72.0, 18.0 ], + "text": "3. Press Load", + "textjustification": 0 + } + }, + { + "box": { + "fontname": "Ableton Sans Small", + "fontsize": 10.0, + "id": "obj-2", + "maxclass": "live.comment", + "numinlets": 1, + "numoutlets": 0, + "patching_rect": [ 95.0, 20.0, 142.0, 18.0 ], + "presentation": 1, + "presentation_rect": [ 13.0, 15.0, 142.0, 18.0 ], + "text": "1. Drop the Live Application", + "textjustification": 0 + } + }, + { + "box": { + "fontname": "Ableton Sans Small", + "fontsize": 10.0, + "id": "obj-1", + "maxclass": "live.comment", + "numinlets": 1, + "numoutlets": 0, + "patching_rect": [ 395.0, 20.0, 283.0, 18.0 ], + "presentation": 1, + "presentation_rect": [ 13.0, 112.0, 283.0, 18.0 ], + "text": "2. Drop the Live set file that contains DoneLoading.amxd", + "textjustification": 0 + } + }, + { + "box": { + "decodemode": 1, + "fontname": "Ableton Sans Small", + "fontsize": 10.0, + "id": "obj-6", + "maxclass": "live.drop", + "numinlets": 1, + "numoutlets": 2, + "outlettype": [ "", "" ], + "parameter_enable": 1, + "patching_rect": [ 95.0, 41.0, 284.0, 60.0 ], + "presentation": 1, + "presentation_rect": [ 13.0, 35.0, 284.0, 60.0 ], + "saved_attribute_attributes": { + "valueof": { + "parameter_invisible": 1, + "parameter_longname": "live.drop", + "parameter_modmode": 0, + "parameter_shortname": "live.drop", + "parameter_type": 4 + } + }, + "varname": "live.drop" + } + }, + { + "box": { + "id": "obj-33", + "maxclass": "newobj", + "numinlets": 2, + "numoutlets": 1, + "outlettype": [ "float" ], + "patching_rect": [ 571.0, 346.0, 45.0, 22.0 ], + "text": "/ 1000." + } + }, + { + "box": { + "fontname": "Arial", + "fontsize": 13.0, + "id": "obj-32", + "maxclass": "newobj", + "numinlets": 1, + "numoutlets": 2, + "outlettype": [ "", "int" ], + "patching_rect": [ 95.0, 113.0, 140.0, 23.0 ], + "text": "conformpath max boot" + } + }, + { + "box": { + "fontname": "Arial", + "fontsize": 13.0, + "id": "obj-36", + "maxclass": "newobj", + "numinlets": 1, + "numoutlets": 2, + "outlettype": [ "", "int" ], + "patching_rect": [ 395.0, 113.0, 140.0, 23.0 ], + "text": "conformpath max boot" + } + }, + { + "box": { + "fontname": "Ableton Sans Small", + "fontsize": 10.0, + "id": "obj-26", + "maxclass": "live.text", + "mode": 0, + "numinlets": 1, + "numoutlets": 2, + "outlettype": [ "", "" ], + "parameter_enable": 1, + "patching_rect": [ 35.0, 41.0, 44.0, 15.0 ], + "presentation": 1, + "presentation_rect": [ 13.0, 229.0, 44.0, 15.0 ], + "saved_attribute_attributes": { + "valueof": { + "parameter_enum": [ "val1", "val2" ], + "parameter_longname": "live.text", + "parameter_mmax": 1, + "parameter_modmode": 0, + "parameter_shortname": "live.text", + "parameter_type": 2 + } + }, + "text": "LOAD", + "varname": "live.text" + } + }, + { + "box": { + "id": "obj-25", + "maxclass": "newobj", + "numinlets": 2, + "numoutlets": 1, + "outlettype": [ "float" ], + "patching_rect": [ 571.0, 306.0, 83.0, 22.0 ], + "text": "- 0." + } + }, + { + "box": { + "id": "obj-24", + "maxclass": "newobj", + "numinlets": 2, + "numoutlets": 2, + "outlettype": [ "bang", "" ], + "patching_rect": [ 571.0, 228.0, 54.0, 22.0 ], + "text": "sel done" + } + }, + { + "box": { + "id": "obj-23", + "maxclass": "newobj", + "numinlets": 1, + "numoutlets": 1, + "outlettype": [ "float" ], + "patching_rect": [ 571.0, 267.0, 55.0, 22.0 ], + "text": "cpuclock" + } + }, + { + "box": { + "id": "obj-22", + "maxclass": "newobj", + "numinlets": 1, + "numoutlets": 1, + "outlettype": [ "float" ], + "patching_rect": [ 635.0, 267.0, 55.0, 22.0 ], + "text": "cpuclock" + } + }, + { + "box": { + "id": "obj-21", + "maxclass": "newobj", + "numinlets": 2, + "numoutlets": 1, + "outlettype": [ "" ], + "patching_rect": [ 35.0, 230.0, 29.5, 22.0 ], + "text": "join" + } + }, + { + "box": { + "id": "obj-20", + "maxclass": "newobj", + "numinlets": 2, + "numoutlets": 2, + "outlettype": [ "", "" ], + "patching_rect": [ 335.0, 191.0, 79.0, 22.0 ], + "text": "zl reg" + } + }, + { + "box": { + "id": "obj-19", + "maxclass": "newobj", + "numinlets": 1, + "numoutlets": 3, + "outlettype": [ "bang", "bang", "bang" ], + "patching_rect": [ 35.0, 152.0, 619.0, 22.0 ], + "text": "t b b b" + } + }, + { + "box": { + "id": "obj-18", + "maxclass": "newobj", + "numinlets": 2, + "numoutlets": 2, + "outlettype": [ "", "" ], + "patching_rect": [ 35.0, 191.0, 79.0, 22.0 ], + "text": "zl reg" + } + }, + { + "box": { + "decodemode": 1, + "fontname": "Ableton Sans Small", + "fontsize": 10.0, + "id": "obj-13", + "maxclass": "live.drop", + "numinlets": 1, + "numoutlets": 2, + "outlettype": [ "", "" ], + "parameter_enable": 1, + "patching_rect": [ 395.0, 41.0, 284.0, 60.0 ], + "presentation": 1, + "presentation_rect": [ 13.0, 132.0, 284.0, 60.0 ], + "saved_attribute_attributes": { + "valueof": { + "parameter_invisible": 1, + "parameter_longname": "live.drop[2]", + "parameter_modmode": 0, + "parameter_shortname": "live.drop", + "parameter_type": 4 + } + }, + "varname": "live.drop[2]" + } + }, + { + "box": { + "id": "obj-12", + "maxclass": "newobj", + "numinlets": 1, + "numoutlets": 0, + "patching_rect": [ 571.0, 385.0, 80.0, 22.0 ], + "text": "print seconds" + } + }, + { + "box": { + "id": "obj-11", + "maxclass": "newobj", + "numinlets": 1, + "numoutlets": 1, + "outlettype": [ "" ], + "patching_rect": [ 571.0, 190.0, 97.0, 22.0 ], + "saved_object_attributes": { + "port": 1337 + }, + "text": "udpreceive 1337" + } + }, + { + "box": { + "id": "obj-8", + "maxclass": "newobj", + "numinlets": 1, + "numoutlets": 1, + "outlettype": [ "" ], + "patching_rect": [ 35.0, 269.0, 97.0, 22.0 ], + "text": "prepend open -a" + } + }, + { + "box": { + "id": "obj-4", + "maxclass": "newobj", + "numinlets": 1, + "numoutlets": 2, + "outlettype": [ "", "bang" ], + "patching_rect": [ 35.0, 308.0, 33.0, 22.0 ], + "saved_object_attributes": { + "shell": "(default)" + }, + "text": "shell" + } + } + ], + "lines": [ + { + "patchline": { + "destination": [ "obj-24", 0 ], + "source": [ "obj-11", 0 ] + } + }, + { + "patchline": { + "destination": [ "obj-36", 0 ], + "source": [ "obj-13", 0 ] + } + }, + { + "patchline": { + "destination": [ "obj-21", 0 ], + "source": [ "obj-18", 0 ] + } + }, + { + "patchline": { + "destination": [ "obj-18", 0 ], + "source": [ "obj-19", 0 ] + } + }, + { + "patchline": { + "destination": [ "obj-20", 0 ], + "source": [ "obj-19", 1 ] + } + }, + { + "patchline": { + "destination": [ "obj-22", 0 ], + "source": [ "obj-19", 2 ] + } + }, + { + "patchline": { + "destination": [ "obj-21", 1 ], + "source": [ "obj-20", 0 ] + } + }, + { + "patchline": { + "destination": [ "obj-8", 0 ], + "source": [ "obj-21", 0 ] + } + }, + { + "patchline": { + "destination": [ "obj-25", 1 ], + "source": [ "obj-22", 0 ] + } + }, + { + "patchline": { + "destination": [ "obj-25", 0 ], + "source": [ "obj-23", 0 ] + } + }, + { + "patchline": { + "destination": [ "obj-23", 0 ], + "source": [ "obj-24", 0 ] + } + }, + { + "patchline": { + "destination": [ "obj-33", 0 ], + "order": 0, + "source": [ "obj-25", 0 ] + } + }, + { + "patchline": { + "destination": [ "obj-7", 0 ], + "order": 1, + "source": [ "obj-25", 0 ] + } + }, + { + "patchline": { + "destination": [ "obj-19", 0 ], + "source": [ "obj-26", 0 ] + } + }, + { + "patchline": { + "destination": [ "obj-18", 1 ], + "source": [ "obj-32", 0 ] + } + }, + { + "patchline": { + "destination": [ "obj-12", 0 ], + "source": [ "obj-33", 0 ] + } + }, + { + "patchline": { + "destination": [ "obj-20", 1 ], + "source": [ "obj-36", 0 ] + } + }, + { + "patchline": { + "destination": [ "obj-32", 0 ], + "source": [ "obj-6", 0 ] + } + }, + { + "patchline": { + "destination": [ "obj-4", 0 ], + "source": [ "obj-8", 0 ] + } + } + ], + "parameters": { + "obj-13": [ "live.drop[2]", "live.drop", 0 ], + "obj-26": [ "live.text", "live.text", 0 ], + "obj-6": [ "live.drop", "live.drop", 0 ], + "obj-7": [ "live.numbox", "live.numbox", 0 ], + "parameterbanks": { + "0": { + "index": 0, + "name": "", + "parameters": [ "-", "-", "-", "-", "-", "-", "-", "-" ], + "buttons": [ "-", "-", "-", "-", "-", "-", "-", "-" ] + } + }, + "inherited_shortname": 1 + }, + "autosave": 0 + } +} \ No newline at end of file diff --git a/load-time-tester/README.md b/load-time-tester/README.md new file mode 100644 index 0000000..2ed1897 --- /dev/null +++ b/load-time-tester/README.md @@ -0,0 +1,26 @@ +# Measuring loading time # + +When refactoring or adding features to a Max for Live device, it can be important to know how this affects the device's loading time. Manually timing this can be sufficient but sometimes you'd like to get a more precise and consistent measurement. + +The Load Time Tester is the combination of a Max device and a small patch that give you insight into a Live Set's loading time. + +The DoneLoading device +The Load Time Tester + +To measure the loading time of a device, you can include the device in a Live Set and use the patch to launch a specific version of Live with the Set to measure how long it takes for this Live Set to be loaded. + +## Using the Load Time Tester ## + +* Create a Live Set you want to test for loading. + * If you want to test the loading time of a single device, you can add mutliple copies of the device to the Set, depending on its typical use. + * Make sure to include one copy of the `Done Loading.amxd` device in the Set. +* Load the `Load Time Tester.maxpat` patch in standalone Max and set its paths: + * Find the Live application you want to use for testing on your computer and drag the application to the first drop panel in the Load Time Tester. + * Find the Live Set and drag it to the second drop panel in the Load Time Tester. +* Get the system to consume little resources + * Launch the selected Live application manually and close it once, to allow the operating system to cache as many of the application launching as possible. + * Close any instance of Live + * Make sure no heavy processes are running on your computer. +* Press LOAD in the Load Time Tester. +* Wait for the Live application to launch and for the application to load the Live Set. +* Find the loading time in the number box in the Load Time Tester. diff --git a/load-time-tester/images/DoneLoading.png b/load-time-tester/images/DoneLoading.png new file mode 100644 index 0000000..032014c Binary files /dev/null and b/load-time-tester/images/DoneLoading.png differ diff --git a/load-time-tester/images/LoadTimeTester.png b/load-time-tester/images/LoadTimeTester.png new file mode 100644 index 0000000..c702369 Binary files /dev/null and b/load-time-tester/images/LoadTimeTester.png differ diff --git a/load-time-tester/shell.maxhelp b/load-time-tester/shell.maxhelp new file mode 100644 index 0000000..682e7ed --- /dev/null +++ b/load-time-tester/shell.maxhelp @@ -0,0 +1,909 @@ +{ + "patcher" : { + "fileversion" : 1, + "appversion" : { + "major" : 6, + "minor" : 0, + "revision" : 8 + } +, + "rect" : [ 158.0, 146.0, 831.0, 513.0 ], + "bglocked" : 0, + "openinpresentation" : 0, + "default_fontsize" : 12.0, + "default_fontface" : 0, + "default_fontname" : "Arial", + "gridonopen" : 0, + "gridsize" : [ 15.0, 15.0 ], + "gridsnaponopen" : 0, + "statusbarvisible" : 2, + "toolbarvisible" : 1, + "boxanimatetime" : 200, + "imprint" : 0, + "enablehscroll" : 1, + "enablevscroll" : 1, + "devicewidth" : 0.0, + "description" : "", + "digest" : "", + "tags" : "", + "boxes" : [ { + "box" : { + "fontname" : "Geneva", + "fontsize" : 9.0, + "id" : "obj-35", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 633.5, 179.0, 98.0, 16.0 ], + "text" : "/usr/local/bin/unrar" + } + + } +, { + "box" : { + "fontname" : "Geneva", + "fontsize" : 9.0, + "id" : "obj-31", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 217.0, 408.0, 32.5, 16.0 ], + "text" : "set" + } + + } +, { + "box" : { + "fontname" : "Geneva", + "fontsize" : 9.0, + "id" : "obj-30", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 500.0, 201.0, 56.0, 16.0 ], + "text" : "example-1" + } + + } +, { + "box" : { + "fontname" : "Geneva", + "fontsize" : 9.0, + "id" : "obj-29", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 500.0, 179.0, 121.0, 16.0 ], + "text" : "/usr/local/bin/example-1" + } + + } +, { + "box" : { + "bgcolor" : [ 1.0, 0.0, 0.065008, 1.0 ], + "fontname" : "Geneva", + "fontsize" : 12.0, + "id" : "obj-34", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 453.5, 53.0, 161.0, 19.0 ], + "text" : "TESTED SUDO WORKS !!!!!", + "textcolor" : [ 1.0, 1.0, 1.0, 1.0 ] + } + + } +, { + "box" : { + "bgcolor" : [ 1.0, 0.0, 0.065008, 1.0 ], + "fontname" : "Geneva", + "fontsize" : 12.0, + "id" : "obj-33", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 522.5, 89.0, 232.0, 19.0 ], + "text" : "echo 'a' | sudo -S rm -rf /Library/Logs", + "textcolor" : [ 1.0, 1.0, 1.0, 1.0 ] + } + + } +, { + "box" : { + "bgcolor" : [ 1.0, 0.0, 0.065008, 1.0 ], + "fontname" : "Geneva", + "fontsize" : 12.0, + "id" : "obj-32", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 385.5, 89.0, 128.0, 19.0 ], + "text" : "rm -rf /Library/Logs", + "textcolor" : [ 1.0, 1.0, 1.0, 1.0 ] + } + + } +, { + "box" : { + "fontname" : "Geneva", + "fontsize" : 9.0, + "id" : "obj-28", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 391.0, 140.0, 47.0, 16.0 ], + "text" : "penter a" + } + + } +, { + "box" : { + "bgcolor" : [ 1.0, 0.0, 0.065008, 1.0 ], + "fontname" : "Geneva", + "fontsize" : 12.0, + "id" : "obj-27", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 542.0, 118.0, 193.0, 19.0 ], + "text" : "echo 'a' | sudo -S mkdir /AAAA", + "textcolor" : [ 1.0, 1.0, 1.0, 1.0 ] + } + + } +, { + "box" : { + "fontname" : "Geneva", + "fontsize" : 9.0, + "id" : "obj-26", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 370.0, 181.0, 84.0, 16.0 ], + "text" : "cd /usr/local/bin" + } + + } +, { + "box" : { + "fontname" : "Geneva", + "fontsize" : 9.0, + "id" : "obj-25", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 66.0, 386.0, 232.0, 16.0 ], + "text" : "\" y Assume Yes on all queries\"" + } + + } +, { + "box" : { + "fontname" : "Geneva", + "fontsize" : 9.0, + "id" : "obj-24", + "linecount" : 2, + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 366.5, 235.0, 335.0, 27.0 ], + "text" : "/usr/local/bin/rar a -s -y -hpXXX -x.DS_Store /Users/Mac/Desktop/AR.rar /Users/Mac/Desktop/ALL-NEW-RACK12" + } + + } +, { + "box" : { + "fontname" : "Geneva", + "fontsize" : 9.0, + "id" : "obj-1", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 134.0, 148.0, 56.0, 16.0 ], + "text" : "vm_stat 1" + } + + } +, { + "box" : { + "fontname" : "Geneva", + "fontsize" : 9.0, + "frgb" : 0.0, + "id" : "obj-2", + "maxclass" : "comment", + "numinlets" : 1, + "numoutlets" : 0, + "patching_rect" : [ 70.0, 212.0, 105.0, 18.0 ], + "text" : "( works only as root )" + } + + } +, { + "box" : { + "fontname" : "Geneva", + "fontsize" : 9.0, + "id" : "obj-3", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 138.0, 179.0, 32.5, 16.0 ], + "text" : "pkill" + } + + } +, { + "box" : { + "fontname" : "Geneva", + "fontsize" : 9.0, + "id" : "obj-4", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 23.0, 210.0, 49.0, 16.0 ], + "text" : "tcpdump" + } + + } +, { + "box" : { + "fontname" : "Geneva", + "fontsize" : 9.0, + "id" : "obj-5", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 0, + "patching_rect" : [ 345.0, 278.0, 55.0, 18.0 ], + "text" : "print done" + } + + } +, { + "box" : { + "color" : [ 1.0, 0.360784, 0.682353, 1.0 ], + "fontname" : "Geneva", + "fontsize" : 9.0, + "id" : "obj-6", + "maxclass" : "newobj", + "numinlets" : 0, + "numoutlets" : 0, + "patcher" : { + "fileversion" : 1, + "appversion" : { + "major" : 6, + "minor" : 0, + "revision" : 8 + } +, + "rect" : [ 621.0, 408.0, 222.0, 234.0 ], + "bglocked" : 0, + "openinpresentation" : 0, + "default_fontsize" : 12.0, + "default_fontface" : 0, + "default_fontname" : "Arial", + "gridonopen" : 0, + "gridsize" : [ 15.0, 15.0 ], + "gridsnaponopen" : 0, + "statusbarvisible" : 2, + "toolbarvisible" : 1, + "boxanimatetime" : 200, + "imprint" : 0, + "enablehscroll" : 1, + "enablevscroll" : 1, + "devicewidth" : 0.0, + "description" : "", + "digest" : "", + "tags" : "", + "boxes" : [ { + "box" : { + "fontname" : "Geneva", + "fontsize" : 9.0, + "id" : "obj-1", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 28.0, 75.0, 110.0, 16.0 ], + "text" : "ls fakedirectory 2>&1" + } + + } +, { + "box" : { + "fontname" : "Geneva", + "fontsize" : 9.0, + "id" : "obj-2", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 0, + "patching_rect" : [ 28.0, 156.0, 99.0, 18.0 ], + "text" : "print stdout&stderr" + } + + } +, { + "box" : { + "color" : [ 1.0, 0.890196, 0.090196, 1.0 ], + "fontname" : "Geneva", + "fontsize" : 9.0, + "id" : "obj-3", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 28.0, 100.0, 51.0, 18.0 ], + "text" : "tosymbol" + } + + } +, { + "box" : { + "fontname" : "Geneva", + "fontsize" : 9.0, + "id" : "obj-4", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 2, + "outlettype" : [ "", "bang" ], + "patching_rect" : [ 28.0, 128.0, 30.0, 18.0 ], + "text" : "shell" + } + + } +, { + "box" : { + "fontname" : "Geneva", + "fontsize" : 9.0, + "frgb" : 0.0, + "id" : "obj-5", + "linecount" : 3, + "maxclass" : "comment", + "numinlets" : 1, + "numoutlets" : 0, + "patching_rect" : [ 27.0, 23.0, 152.0, 40.0 ], + "text" : "standard error can be combined with stdout by following a command with \"2>&1\"" + } + + } + ], + "lines" : [ { + "patchline" : { + "destination" : [ "obj-3", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-1", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-4", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-3", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-2", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-4", 0 ] + } + + } + ] + } +, + "patching_rect" : [ 217.0, 297.0, 81.0, 18.0 ], + "saved_object_attributes" : { + "default_fontface" : 0, + "default_fontname" : "Arial", + "default_fontsize" : 12.0, + "description" : "", + "digest" : "", + "fontface" : 0, + "fontname" : "Arial", + "fontsize" : 12.0, + "globalpatchername" : "", + "tags" : "" + } +, + "text" : "p standard-error" + } + + } +, { + "box" : { + "fontname" : "Geneva", + "fontsize" : 9.0, + "id" : "obj-7", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 0, + "patching_rect" : [ 196.5, 347.0, 62.0, 18.0 ], + "text" : "print stdout" + } + + } +, { + "box" : { + "fontname" : "Geneva", + "fontsize" : 9.0, + "id" : "obj-8", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 149.0, 89.0, 132.0, 16.0 ], + "text" : "perl -e 'print \\\"howdy\\\\n\\\"'" + } + + } +, { + "box" : { + "fontname" : "Geneva", + "fontsize" : 9.0, + "id" : "obj-9", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 144.0, 53.0, 173.0, 16.0 ], + "text" : "ls -l \\\"/Library/Application Support\\\"" + } + + } +, { + "box" : { + "fontname" : "Geneva", + "fontsize" : 9.0, + "id" : "obj-10", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 26.0, 152.0, 62.0, 16.0 ], + "text" : "echo $USER" + } + + } +, { + "box" : { + "fontname" : "Geneva", + "fontsize" : 9.0, + "id" : "obj-11", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 32.0, 181.0, 64.0, 16.0 ], + "text" : "perl -version" + } + + } +, { + "box" : { + "fontname" : "Geneva", + "fontsize" : 9.0, + "id" : "obj-12", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 37.0, 112.0, 32.5, 16.0 ], + "text" : "date" + } + + } +, { + "box" : { + "fontname" : "Geneva", + "fontsize" : 9.0, + "id" : "obj-13", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 41.0, 56.0, 83.0, 16.0 ], + "text" : "cat /etc/passwd" + } + + } +, { + "box" : { + "id" : "obj-14", + "maxclass" : "button", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "bang" ], + "patching_rect" : [ 32.0, 278.0, 20.0, 20.0 ] + } + + } +, { + "box" : { + "fontname" : "Geneva", + "fontsize" : 9.0, + "id" : "obj-15", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 148.0, 118.0, 159.0, 16.0 ], + "text" : "ps -x | grep MaxMSP | grep -v grep" + } + + } +, { + "box" : { + "fontname" : "Geneva", + "fontsize" : 9.0, + "id" : "obj-16", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 12.0, 86.0, 96.0, 16.0 ], + "text" : "mkdir ~/anewfolder" + } + + } +, { + "box" : { + "fontname" : "Geneva", + "fontsize" : 9.0, + "id" : "obj-17", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 78.0, 112.0, 43.0, 16.0 ], + "text" : "whoami" + } + + } +, { + "box" : { + "fontname" : "Geneva", + "fontsize" : 9.0, + "id" : "obj-18", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 121.0, 235.0, 97.0, 16.0 ], + "text" : "ping -c 20 localhost" + } + + } +, { + "box" : { + "fontname" : "Geneva", + "fontsize" : 9.0, + "id" : "obj-19", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 131.0, 31.0, 40.0, 16.0 ], + "text" : "ls -l ~/" + } + + } +, { + "box" : { + "fontname" : "Geneva", + "fontsize" : 9.0, + "id" : "obj-20", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 2, + "outlettype" : [ "", "bang" ], + "patching_rect" : [ 84.0, 278.0, 134.0, 18.0 ], + "text" : "shell" + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 14.0, + "frgb" : 0.0, + "id" : "obj-21", + "maxclass" : "comment", + "numinlets" : 1, + "numoutlets" : 0, + "patching_rect" : [ 17.0, 27.0, 55.0, 22.0 ], + "text" : "SHELL" + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 10.0, + "frgb" : 0.0, + "id" : "obj-22", + "maxclass" : "comment", + "numinlets" : 1, + "numoutlets" : 0, + "patching_rect" : [ 66.0, 28.0, 52.0, 18.0 ], + "text" : "unix shell" + } + + } +, { + "box" : { + "fontname" : "Geneva", + "fontsize" : 9.0, + "frgb" : 0.0, + "id" : "obj-23", + "maxclass" : "comment", + "numinlets" : 1, + "numoutlets" : 0, + "patching_rect" : [ 166.0, 181.0, 110.0, 18.0 ], + "text" : "kill the current process" + } + + } + ], + "lines" : [ { + "patchline" : { + "destination" : [ "obj-20", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-1", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-20", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-10", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-20", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-11", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-20", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-12", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-20", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-13", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-20", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-14", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-20", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-15", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-20", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-16", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-20", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-17", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-20", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-18", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-20", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-19", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-25", 1 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-20", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-5", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-20", 1 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-7", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-20", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-20", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-24", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-20", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-26", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-20", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-28", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-20", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-29", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-20", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-3", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-20", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-30", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-25", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-31", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-20", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-35", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-20", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-4", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-20", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-8", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-20", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-9", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-26", 1 ], + "disabled" : 0, + "hidden" : 0, + "midpoints" : [ 448.0, 181.0 ], + "source" : [ "", -1 ] + } + + } + ], + "dependency_cache" : [ { + "name" : "shell.mxo", + "type" : "iLaX" + } + ] + } + +} diff --git a/load-time-tester/shell.mxe b/load-time-tester/shell.mxe new file mode 100755 index 0000000..0c3f8b7 Binary files /dev/null and b/load-time-tester/shell.mxe differ diff --git a/load-time-tester/shell.mxe64 b/load-time-tester/shell.mxe64 new file mode 100755 index 0000000..73b0cca Binary files /dev/null and b/load-time-tester/shell.mxe64 differ diff --git a/load-time-tester/shell.mxo/Contents/Info.plist b/load-time-tester/shell.mxo/Contents/Info.plist new file mode 100644 index 0000000..74b6984 --- /dev/null +++ b/load-time-tester/shell.mxo/Contents/Info.plist @@ -0,0 +1,50 @@ + + + + + BuildMachineOSBuild + 19H1217 + CFBundleDevelopmentRegion + English + CFBundleExecutable + shell + CFBundleGetInfoString + shell 8.0.0, Copyright ©2018 Bill Orcutt/Jeremy Bernstein + CFBundleIdentifier + com.bootsquad.shell + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + iLaX + CFBundleShortVersionString + 8.0.0 + CFBundleSignature + max2 + CFBundleSupportedPlatforms + + MacOSX + + CFBundleVersion + 8.0.0 + CSResourcesFileMapped + + DTCompiler + com.apple.compilers.llvm.clang.1_0 + DTPlatformBuild + 12D4e + DTPlatformName + macosx + DTPlatformVersion + 11.1 + DTSDKBuild + 20C63 + DTSDKName + macosx11.1 + DTXcode + 1240 + DTXcodeBuild + 12D4e + LSMinimumSystemVersion + 10.11 + + diff --git a/load-time-tester/shell.mxo/Contents/MacOS/shell b/load-time-tester/shell.mxo/Contents/MacOS/shell new file mode 100755 index 0000000..1cdd809 Binary files /dev/null and b/load-time-tester/shell.mxo/Contents/MacOS/shell differ diff --git a/load-time-tester/shell.mxo/Contents/PkgInfo b/load-time-tester/shell.mxo/Contents/PkgInfo new file mode 100644 index 0000000..0febb6e --- /dev/null +++ b/load-time-tester/shell.mxo/Contents/PkgInfo @@ -0,0 +1 @@ +iLaXmax2 \ No newline at end of file diff --git a/load-time-tester/shell.mxo/Contents/_CodeSignature/CodeResources b/load-time-tester/shell.mxo/Contents/_CodeSignature/CodeResources new file mode 100644 index 0000000..d5d0fd7 --- /dev/null +++ b/load-time-tester/shell.mxo/Contents/_CodeSignature/CodeResources @@ -0,0 +1,115 @@ + + + + + files + + files2 + + rules + + ^Resources/ + + ^Resources/.*\.lproj/ + + optional + + weight + 1000 + + ^Resources/.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^Resources/Base\.lproj/ + + weight + 1010 + + ^version.plist$ + + + rules2 + + .*\.dSYM($|/) + + weight + 11 + + ^(.*/)?\.DS_Store$ + + omit + + weight + 2000 + + ^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/ + + nested + + weight + 10 + + ^.* + + ^Info\.plist$ + + omit + + weight + 20 + + ^PkgInfo$ + + omit + + weight + 20 + + ^Resources/ + + weight + 20 + + ^Resources/.*\.lproj/ + + optional + + weight + 1000 + + ^Resources/.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^Resources/Base\.lproj/ + + weight + 1010 + + ^[^/]+$ + + nested + + weight + 10 + + ^embedded\.provisionprofile$ + + weight + 20 + + ^version\.plist$ + + weight + 20 + + + +