Give identifier that a file has been modified

VSCode Version:1.3.1
OS Version:OSX 10.11.5

Steps to Reproduce:

Modify a file

There is no identifier to show that the file has been modified. In Sublime Text you get a yellow circle:

@jchannon do you not see this?

Do you have auto save turned on maybe?

Nope :(
On 14 July 2016 at 12:41, Benjamin Pasero<EMAIL_ADDRESS>wrote:

@jchannon https://github.com/jchannon do you not see this?
[image: image]
https://cloud.githubusercontent.com/assets/900690/16838258/9541ea9e-49c8-11e6-9312-642b140ed06a.png
Do you have auto save turned on maybe?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/Microsoft/vscode/issues/9273#issuecomment-232641724,
or mute the thread
https://github.com/notifications/unsubscribe/AAGaplvhPmSwwvuVP74uNfeNb8RKs9y9ks5qViBmgaJpZM4JMTaS
.

@jchannon you are the first one to report this, we need more info. can you record a video maybe?

@bpasero

@jchannon can you share your global settings? Does it reproduce with extensions disabled (code --disable-extensions)?

Still there with disabled extensions.
What settings would you like?
On 14 July 2016 at 13:21, Benjamin Pasero<EMAIL_ADDRESS>wrote:

@jchannon https://github.com/jchannon can you share your global
settings? Does it reproduce with extensions disabled (code
--disable-extensions)?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/Microsoft/vscode/issues/9273#issuecomment-232649912,
or mute the thread
https://github.com/notifications/unsubscribe/AAGapl9tt2M8n_3CpK58rMoLtaCKeJISks5qVim2gaJpZM4JMTaS
.

The file that opens when you press Cmd+,

Default
// Overwrite settings by placing them into your settings file.
// See http://go.microsoft.com/fwlink/?LinkId=808995 for the most commonly used settings.
{

// Editor

    // Controls the font family.
    "editor.fontFamily": "Menlo, Monaco, 'Courier New', monospace",

    // Controls the font size.
    "editor.fontSize": 12,

    // Controls the line height.
    "editor.lineHeight": 0,

    // Controls visibility of line numbers
    "editor.lineNumbers": true,

    // Controls visibility of the glyph margin
    "editor.glyphMargin": false,

    // Columns at which to show vertical rulers
    "editor.rulers": [],

    // Characters that will be used as word separators when doing word related navigations or operations
    "editor.wordSeparators": "`~!@#$%^&*()-=+[{]}\\|;:'\",.<>/?",

    // The number of spaces a tab is equal to.
    "editor.tabSize": 4,

    // Insert spaces when pressing Tab.
    "editor.insertSpaces": true,

    // When opening a file, `editor.tabSize` and `editor.insertSpaces` will be detected based on the file contents.
    "editor.detectIndentation": true,

    // Controls if selections have rounded corners
    "editor.roundedSelection": true,

    // Controls if the editor will scroll beyond the last line
    "editor.scrollBeyondLastLine": true,

    // Controls after how many characters the editor will wrap to the next line. Setting this to 0 turns on viewport width wrapping (word wrapping). Setting this to -1 forces the editor to never wrap.
    "editor.wrappingColumn": 300,

    // Controls the indentation of wrapped lines. Can be one of 'none', 'same' or 'indent'.
    "editor.wrappingIndent": "same",

    // A multiplier to be used on the `deltaX` and `deltaY` of mouse wheel scroll events
    "editor.mouseWheelScrollSensitivity": 1,

    // Controls if quick suggestions should show up or not while typing
    "editor.quickSuggestions": true,

    // Controls the delay in ms after which quick suggestions will show up
    "editor.quickSuggestionsDelay": 10,

    // Enables parameter hints
    "editor.parameterHints": true,

    // Controls if the editor should automatically close brackets after opening them
    "editor.autoClosingBrackets": true,

    // Controls if the editor should automatically format the line after typing
    "editor.formatOnType": false,

    // Controls if suggestions should automatically show up when typing trigger characters
    "editor.suggestOnTriggerCharacters": true,

    // Controls if suggestions should be accepted 'Enter' - in addition to 'Tab'. Helps to avoid ambiguity between inserting new lines or accepting suggestions.
    "editor.acceptSuggestionOnEnter": true,

    // Controls whether the editor should highlight similar matches to the selection
    "editor.selectionHighlight": true,

    // Controls the number of decorations that can show up at the same position in the overview ruler
    "editor.overviewRulerLanes": 3,

    // Controls the cursor blinking animation, accepted values are 'blink', 'visible', and 'hidden'
    "editor.cursorBlinking": "blink",

    // Zoom the font of the editor when using mouse wheel and holding Ctrl
    "editor.mouseWheelZoom": false,

    // Controls the cursor style, accepted values are 'block' and 'line'
    "editor.cursorStyle": "line",

    // Enables font ligatures
    "editor.fontLigatures": false,

    // Controls if the cursor should be hidden in the overview ruler.
    "editor.hideCursorInOverviewRuler": false,

    // Controls whether the editor should render whitespace characters
    "editor.renderWhitespace": false,

    // Controls whether the editor should render control characters
    "editor.renderControlCharacters": false,

    // Controls whether the editor should render indent guides
    "editor.renderIndentGuides": false,

    // Controls if the editor shows reference information for the modes that support it
    "editor.referenceInfos": true,

    // Controls whether the editor has code folding enabled
    "editor.folding": true,

    // Inserting and deleting whitespace follows tab stops
    "editor.useTabStops": true,

    // Remove trailing auto inserted whitespace
    "editor.trimAutoWhitespace": true,

    // Keep peek editors open even when double clicking their content or when hitting Escape.
    "editor.stablePeek": false,

    // Controls if the diff editor shows the diff side by side or inline
    "diffEditor.renderSideBySide": true,

    // Controls if the diff editor shows changes in leading or trailing whitespace as diffs
    "diffEditor.ignoreTrimWhitespace": true,

    // Enable word based suggestions.
    "editor.wordBasedSuggestions": true,

// Emmet

    // When enabled, emmet abbreviations are expanded when pressing TAB.
    "emmet.triggerExpansionOnTab": true,

    // Preferences used to modify behavior of some actions and resolvers of Emmet.
    "emmet.preferences": {},

    // Define profile for specified syntax or use your own profile with specific rules.
    "emmet.syntaxProfiles": {},

// Workbench

    // Controls if opened editors should show in tabs or not.
    "workbench.editor.showTabs": true,

    // Controls if opened editors show as preview. Preview editors are reused until they are kept (e.g. via double click or editing).
    "workbench.editor.enablePreview": true,

    // Controls if opened editors from quick open show as preview. Preview editors are reused until they are kept (e.g. via double click or editing).
    "workbench.editor.enablePreviewFromQuickOpen": true,

    // Controls where editors open. Select 'left' or 'right' to open editors to the left or right of the current active one. Select 'first' or 'last' to open editors independently from the currently active one.
    "workbench.editor.openPositioning": "right",

// Window

    // When enabled, will open files in a new window instead of reusing an existing instance.
    "window.openFilesInNewWindow": true,

    // Controls how folders are being reopened after a restart. Select 'none' to never reopen a folder, 'one' to reopen the last folder you worked on or 'all' to reopen all folders of your last session.
    "window.reopenFolders": "one",

    // Controls if a window should restore to full screen mode if it was exited in full screen mode.
    "window.restoreFullscreen": false,

    // Adjust the zoom level of the window. The original size is 0 and each increment above (e.g. 1) or below (e.g. -1) represents zooming 20% larger or smaller. You can also enter decimals to adjust the zoom level with a finer granularity.
    "window.zoomLevel": 0,

// Files

    // Configure glob patterns for excluding files and folders.
    "files.exclude": {
        "**/.git": true,
        "**/.svn": true,
        "**/.DS_Store": true
    },

    // Configure file associations to languages (e.g. "*.extension": "html"). These have precedence over the default associations of the languages installed.
    "files.associations": {},

    // The default character set encoding to use when reading and writing files.
    "files.encoding": "utf8",

    // The default end of line character.
    "files.eol": "\n",

    // When enabled, will trim trailing whitespace when you save a file.
    "files.trimTrailingWhitespace": false,

    // Controls auto save of dirty files. Accepted values:  "off", "afterDelay", "onFocusChange". If set to "afterDelay" you can configure the delay in "files.autoSaveDelay".
    "files.autoSave": "off",

    // Controls the delay in ms after which a dirty file is saved automatically. Only applies when "files.autoSave" is set to "afterDelay"
    "files.autoSaveDelay": 1000,

    // Configure glob patterns of file paths to exclude from file watching. Changing this setting requires a restart. When you experience Code consuming lots of cpu time on startup, you can exclude large folders to reduce the initial load.
    "files.watcherExclude": {
        "**/.git/objects/**": true,
        "**/node_modules/**": true
    },

// File Explorer

    // Number of editors shown in the Open Editors pane. Set it to 0 to hide the pane.
    "explorer.openEditors.visible": 9,

    // Controls if the height of the open editors section should adapt dynamically to the number of elements or not.
    "explorer.openEditors.dynamicHeight": true,

    // Controls if the explorer should automatically reveal files when opening them.
    "explorer.autoReveal": true,

// Search

    // Configure glob patterns for excluding files and folders in searches. Inherits all glob patterns from the files.exclude setting.
    "search.exclude": {
        "**/node_modules": true,
        "**/bower_components": true
    },

// Git

    // Is git enabled
    "git.enabled": true,

    // Path to the git executable
    "git.path": null,

    // Whether auto fetching is enabled.
    "git.autofetch": true,

    // Whether long commit messages should be warned about.
    "git.enableLongCommitWarning": true,

    // Always allow large repositories to be managed by Code.
    "git.allowLargeRepositories": false,

// HTTP

    // The proxy setting to use. If not set will be taken from the http_proxy and https_proxy environment variables
    "http.proxy": "",

    // Whether the proxy server certificate should be verified against the list of supplied CAs.
    "http.proxyStrictSSL": true,

// Update

    // Configure whether you receive automatic updates from an update channel. Requires a restart after change.
    "update.channel": "default",

// CSS

    // Controls CSS validation and problem severities.

    // Enables or disables all validations
    "css.validate": true,

    // When using a vendor-specific prefix make sure to also include all other vendor-specific properties
    "css.lint.compatibleVendorPrefixes": "ignore",

    // When using a vendor-specific prefix also include the standard property
    "css.lint.vendorPrefix": "warning",

    // Do not use duplicate style definitions
    "css.lint.duplicateProperties": "ignore",

    // Do not use empty rulesets
    "css.lint.emptyRules": "warning",

    // Import statements do not load in parallel
    "css.lint.importStatement": "ignore",

    // Do not use width or height when using padding or border
    "css.lint.boxModel": "ignore",

    // The universal selector (*) is known to be slow
    "css.lint.universalSelector": "ignore",

    // No unit for zero needed
    "css.lint.zeroUnits": "ignore",

    // @font-face rule must define 'src' and 'font-family' properties
    "css.lint.fontFaceProperties": "warning",

    // Hex colors must consist of three or six hex numbers
    "css.lint.hexColorLength": "error",

    // Invalid number of parameters
    "css.lint.argumentsInColorFunction": "error",

    // Unknown property.
    "css.lint.unknownProperties": "warning",

    // IE hacks are only necessary when supporting IE7 and older
    "css.lint.ieHack": "ignore",

    // Unknown vendor specific property.
    "css.lint.unknownVendorSpecificProperties": "ignore",

    // Property is ignored due to the display. E.g. with 'display: inline', the width, height, margin-top, margin-bottom, and float properties have no effect
    "css.lint.propertyIgnoredDueToDisplay": "warning",

    // Avoid using !important. It is an indication that the specificity of the entire CSS has gotten out of control and needs to be refactored.
    "css.lint.important": "ignore",

    // Avoid using 'float'. Floats lead to fragile CSS that is easy to break if one aspect of the layout changes.
    "css.lint.float": "ignore",

    // Selectors should not contain IDs because these rules are too tightly coupled with the HTML.
    "css.lint.idSelector": "ignore",

// SCSS (Sass)

    // Controls SCSS validation and problem severities.

    // Enables or disables all validations
    "scss.validate": true,

    // When using a vendor-specific prefix make sure to also include all other vendor-specific properties
    "scss.lint.compatibleVendorPrefixes": "ignore",

    // When using a vendor-specific prefix also include the standard property
    "scss.lint.vendorPrefix": "warning",

    // Do not use duplicate style definitions
    "scss.lint.duplicateProperties": "ignore",

    // Do not use empty rulesets
    "scss.lint.emptyRules": "warning",

    // Import statements do not load in parallel
    "scss.lint.importStatement": "ignore",

    // Do not use width or height when using padding or border
    "scss.lint.boxModel": "ignore",

    // The universal selector (*) is known to be slow
    "scss.lint.universalSelector": "ignore",

    // No unit for zero needed
    "scss.lint.zeroUnits": "ignore",

    // @font-face rule must define 'src' and 'font-family' properties
    "scss.lint.fontFaceProperties": "warning",

    // Hex colors must consist of three or six hex numbers
    "scss.lint.hexColorLength": "error",

    // Invalid number of parameters
    "scss.lint.argumentsInColorFunction": "error",

    // Unknown property.
    "scss.lint.unknownProperties": "warning",

    // IE hacks are only necessary when supporting IE7 and older
    "scss.lint.ieHack": "ignore",

    // Unknown vendor specific property.
    "scss.lint.unknownVendorSpecificProperties": "ignore",

    // Property is ignored due to the display. E.g. with 'display: inline', the width, height, margin-top, margin-bottom, and float properties have no effect
    "scss.lint.propertyIgnoredDueToDisplay": "warning",

    // Avoid using !important. It is an indication that the specificity of the entire CSS has gotten out of control and needs to be refactored.
    "scss.lint.important": "ignore",

    // Avoid using 'float'. Floats lead to fragile CSS that is easy to break if one aspect of the layout changes.
    "scss.lint.float": "ignore",

    // Selectors should not contain IDs because these rules are too tightly coupled with the HTML.
    "scss.lint.idSelector": "ignore",

// LESS

    // Controls LESS validation and problem severities.

    // Enables or disables all validations
    "less.validate": true,

    // When using a vendor-specific prefix make sure to also include all other vendor-specific properties
    "less.lint.compatibleVendorPrefixes": "ignore",

    // When using a vendor-specific prefix also include the standard property
    "less.lint.vendorPrefix": "warning",

    // Do not use duplicate style definitions
    "less.lint.duplicateProperties": "ignore",

    // Do not use empty rulesets
    "less.lint.emptyRules": "warning",

    // Import statements do not load in parallel
    "less.lint.importStatement": "ignore",

    // Do not use width or height when using padding or border
    "less.lint.boxModel": "ignore",

    // The universal selector (*) is known to be slow
    "less.lint.universalSelector": "ignore",

    // No unit for zero needed
    "less.lint.zeroUnits": "ignore",

    // @font-face rule must define 'src' and 'font-family' properties
    "less.lint.fontFaceProperties": "warning",

    // Hex colors must consist of three or six hex numbers
    "less.lint.hexColorLength": "error",

    // Invalid number of parameters
    "less.lint.argumentsInColorFunction": "error",

    // Unknown property.
    "less.lint.unknownProperties": "warning",

    // IE hacks are only necessary when supporting IE7 and older
    "less.lint.ieHack": "ignore",

    // Unknown vendor specific property.
    "less.lint.unknownVendorSpecificProperties": "ignore",

    // Property is ignored due to the display. E.g. with 'display: inline', the width, height, margin-top, margin-bottom, and float properties have no effect
    "less.lint.propertyIgnoredDueToDisplay": "warning",

    // Avoid using !important. It is an indication that the specificity of the entire CSS has gotten out of control and needs to be refactored.
    "less.lint.important": "ignore",

    // Avoid using 'float'. Floats lead to fragile CSS that is easy to break if one aspect of the layout changes.
    "less.lint.float": "ignore",

    // Selectors should not contain IDs because these rules are too tightly coupled with the HTML.
    "less.lint.idSelector": "ignore",

// HTML

    // Maximum amount of characters per line (0 = disable).
    "html.format.wrapLineLength": 120,

    // List of tags, comma separated, that shouldn't be reformatted. 'null' defaults to all tags listed at https://www.w3.org/TR/html5/dom.html#phrasing-content.
    "html.format.unformatted": "a, abbr, acronym, b, bdo, big, br, button, cite, code, dfn, em, i, img, input, kbd, label, map, object, q, samp, script, select, small, span, strong, sub, sup, textarea, tt, var",

    // Indent <head> and <body> sections.
    "html.format.indentInnerHtml": false,

    // Whether existing line breaks before elements should be preserved. Only works before elements, not inside tags or for text.
    "html.format.preserveNewLines": true,

    // Maximum number of line breaks to be preserved in one chunk. Use 'null' for unlimited.
    "html.format.maxPreserveNewLines": null,

    // Format and indent {{#foo}} and {{/foo}}.
    "html.format.indentHandlebars": false,

    // End with a newline.
    "html.format.endWithNewline": false,

    // List of tags, comma separated, that should have an extra newline before them. 'null' defaults to "head, body, /html".
    "html.format.extraLiners": "head, body, /html",

// JSON

    // Associate schemas to JSON files in the current project
    "json.schemas": [],

// Markdown

    // A list of URLs or local paths to CSS style sheets to use from the markdown preview. Relative paths are interpreted relative to the folder open in the explorer. If there is no open folder, they are interpreted relative to the location of the markdown file. All '\' need to be written as '\\'.
    "markdown.styles": [],

// PHP

    // Whether php validation is enabled or not.
    "php.validate.enable": true,

    // Points to the php executable.
    "php.validate.executablePath": null,

    // Whether the linter is run on save or on type.
    "php.validate.run": "onSave",

// TypeScript

    // Specifies the folder path containing the tsserver and lib*.d.ts files to use.
    "typescript.tsdk": null,

    // Enables tracing of messages send to the TS server
    "typescript.tsserver.trace": "off",

    // Enables experimental auto build. Requires 1.9 dev or 2.x tsserver version and a restart of VS Code after changing it.
    "typescript.tsserver.experimentalAutoBuild": false,

    // Complete functions with their parameter signature.
    "typescript.useCodeSnippetsOnMethodSuggest": false,

    // Enable / disable TypeScript validation
    "typescript.validate.enable": true,

    // Defines space handling after a comma delimiter
    "typescript.format.insertSpaceAfterCommaDelimiter": true,

    //  Defines space handling after a semicolon in a for statement
    "typescript.format.insertSpaceAfterSemicolonInForStatements": true,

    // Defines space handling after a binary operator
    "typescript.format.insertSpaceBeforeAndAfterBinaryOperators": true,

    // Defines space handling after keywords in control flow statement
    "typescript.format.insertSpaceAfterKeywordsInControlFlowStatements": true,

    // Defines space handling after function keyword for anonymous functions
    "typescript.format.insertSpaceAfterFunctionKeywordForAnonymousFunctions": true,

    // Defines space handling after opening and before closing non empty parenthesis
    "typescript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis": false,

    // Defines space handling after opening and before closing non empty brackets
    "typescript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets": false,

    // Defines whether an open brace is put onto a new line for functions or not
    "typescript.format.placeOpenBraceOnNewLineForFunctions": false,

    // Defines whether an open brace is put onto a new line for control blocks or not
    "typescript.format.placeOpenBraceOnNewLineForControlBlocks": false,

    // Enable / disable JavaScript validation
    "javascript.validate.enable": true,

    // Defines space handling after a comma delimiter
    "javascript.format.insertSpaceAfterCommaDelimiter": true,

    //  Defines space handling after a semicolon in a for statement
    "javascript.format.insertSpaceAfterSemicolonInForStatements": true,

    // Defines space handling after a binary operator
    "javascript.format.insertSpaceBeforeAndAfterBinaryOperators": true,

    // Defines space handling after keywords in control flow statement
    "javascript.format.insertSpaceAfterKeywordsInControlFlowStatements": true,

    // Defines space handling after function keyword for anonymous functions
    "javascript.format.insertSpaceAfterFunctionKeywordForAnonymousFunctions": true,

    // Defines space handling after opening and before closing non empty parenthesis
    "javascript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis": false,

    // Defines space handling after opening and before closing non empty brackets
    "javascript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets": false,

    // Defines whether an open brace is put onto a new line for functions or not
    "javascript.format.placeOpenBraceOnNewLineForFunctions": false,

    // Defines whether an open brace is put onto a new line for control blocks or not
    "javascript.format.placeOpenBraceOnNewLineForControlBlocks": false,

// External Terminal

    // Customizes which terminal to run on Windows.
    "terminal.external.windowsExec": "cmd",

    // Customizes which terminal application to run on OS X.
    "terminal.external.osxExec": "Terminal.app",

    // Customizes which terminal to run on Linux.
    "terminal.external.linuxExec": "xterm",

// Integrated Terminal

    // The path of the shell that the terminal uses on Linux.
    "terminal.integrated.shell.linux": "/bin/zsh",

    // The command line arguments to use when on the Linux terminal.
    "terminal.integrated.shellArgs.linux": [],

    // The path of the shell that the terminal uses on OS X.
    "terminal.integrated.shell.osx": "/bin/zsh",

    // The command line arguments to use when on the OS X terminal.
    "terminal.integrated.shellArgs.osx": [],

    // The path of the shell that the terminal uses on Windows.
    "terminal.integrated.shell.windows": "cmd.exe",

    // Controls the font family of the terminal, this defaults to editor.fontFamily's value.
    "terminal.integrated.fontFamily": "",

    // Controls the font size of the terminal, this defaults to editor.fontSize's value.
    "terminal.integrated.fontSize": 0,

    // Controls the line height of the terminal, this defaults to normal.
    "terminal.integrated.lineHeight": 0,

// Problems View

    // Controls if Problems view should automatically reveal files when opening them
    "problems.autoReveal": true,

// Telemetry

    // Enable usage data and errors to be sent to Microsoft.
    "telemetry.enableTelemetry": true,

    // Enable crash reports to be sent to Microsoft.
	// This option requires restart to take effect.
    "telemetry.enableCrashReporter": true

}

User
// Place your settings in this file to overwrite the default settings
{
    "go.formatOnSave": true,
    "telemetry.enableCrashReporter": false,
    "editor.formatOnType": true,
    "files.autoSave": "afterDelay",
    "terminal.integrated.fontFamily": "Source Code Pro for Powerline",
    "telemetry.enableTelemetry": false
}

Aha, it must be the "files.autoSave": "afterDelay",

One thing to note is the when "files.autoSaveDelay" uses the default of 1000 it doesn't seem to delay, its instant yet if i change it to "files.autoSaveDelay": 1200, then I can see the delay.

No, we respect the delay but we decided to only show the dirty indicator if delay > 1000. that gives you still some freedom in terms of the indicator even when auto save is enabled 👍

Seems an odd decision, I've set it to 1100 just so I can see its working 😄
Thanks for the help

@jchannon not odd if you know the history of auto save. The entire team works with auto save enabled and up until 1 year ago we did not even have a way to turn that off. That is also why we react allergic to the save indicator, so we wanted auto save ON but indicators OFF. The result is the behaviour as it is today.


wasm 'RuntimeError: Atomics.wait cannot be called in this context'

Describe the bug
I have a rust crate "other" and a type within it "LocalEditor".
In my flutter_rust_bridge target crate, I have use other::LocalEditor.
In the flutter_rust_bridge crate, I have a method pub fn uses_local_editor(editor: &mut<LocalEditor>) -> Option<Vec<u8>>{...}
In dart I have an async function 'doesStuff' and I call doesStuff() with no await so it runs independently in the main event loop. It parses some data in Rust and eventually calls notifyListeners() if applicable.
doesStuff has:
final value = await usesLocalEditor(editor: anEditor);
I sometimes get, but it's not reliablie or frequent, and I can't repro:
══╡ EXCEPTION CAUGHT BY MAIN ZONE ╞═════════════════════════════════════════════════════════════════
The following NativeError object was thrown:
  RuntimeError: Atomics.wait cannot be called in this context

When the exception was thrown, this was the stack:
pkg/rust_lib.js 323:10                                               rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLockLocalEditor
packages/stuff/src/rust/frb_generated.web.dart 634:12                rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLockLocalEditor
packages/flutter_rust_bridge/src/rust_arc/_common.dart 32:38         clone
packages/flutter_rust_bridge/src/misc/rust_opaque.dart 51:52         cstEncode
packages/flutter_rust_bridge/src/misc/rust_opaque.dart 57:34         sseEncode
packages/stuff/src/rust/frb_generated.dart 1769:26                   sse_encode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedrust_asyncRwLockLocalEditor
packages/stuff/src/rust/frb_generated.dart 372:9                     <fn>
<snip>

This is on up-to-date Chrome with up-to-date FRB. No reliable repro, it doesn't happen every time, but I wanted to report in case the stack trace / error message are something you're familiar with.
Steps to reproduce
N/A
Logs
N/A

Expected behavior
No response
Generated binding code
No response
OS
No response
Version of flutter_rust_bridge_codegen
No response
Flutter info
No response
Version of clang++
No response
Additional context
No response

Hmm, I quickly searched it and see https://github.com/WebAssembly/threads/issues/106.
Quick guess (need experiments to verify!): Is it because that, rust_arc_increment_strong_count (calls Arc to increment count) once in a while needs to do Atomics.wait (because of concurrency?), and if that is done on main thread, webassembly is unhappy about that.
Maybe we can firstly reproduce this by creating a minimal Rust code that calls Atomics.wait deliberately, and tries to call it on Dart side.

I confirmed that if I convert my data structure that is involved in this from RustAutoOpaque to translatable, the issue no longer occurs (or maybe occurs much more rarely). When it is RustAutoOpaque, possibly because of nondeterminism in my app's behavior, it shows up every few refreshes.
From reading that thread and a few others around it, it's not safe for any FRB code to call any Atomics.wait-using code, unless there's a way to mark some FRB code as "only off main thread" and enforce that. Other ways would be to explicitly drop multithreading and +atomics, or take out '&var' support and insist on only pure owned data transfers, &mut, or pure copies, but no locking until the Rust atomics story is cleared up.

it's not safe for any FRB code to call any Atomics.wait-using code, unless there's a way to mark some FRB code as "only off main thread" and enforce that

Yes I think so, due to limitations of web assembly. That limitations holds only for Web, and non-Web platforms are always happy though.

unless there's a way to mark some FRB code as "only off main thread" and enforce that

Firstly, for user code, as long as you do not use sync mode, i.e. use the default mode, I guess you are safe. This is because the default mode uses a thread pool, thus no main thread is blocked.
However, for this specific bug report, it is because of rust_arc_increment_strong_count (which calls Arc::increment_strong_count, which seems to be called in main thread. Then maybe we have some choices to fix it:

When in web, make the real increment-strong-count happen in non-main thread. For example, fn rust_arc_increment_strong_count() { execute_in_thread_pool(|| Arc::increment_strong_count()) }.
Does there exist an Arc that does not use Atomics.wait in Web? I think there can be one, since e.g. it can choose to spin instead of calling Atomics.wait. I guess we can ask this on Rust forum etc.

A couple other notes, without solving anything:

there is also Atomics.waitAsync, supported everywhere except Firefox, and my understanding is it can be supported in Firefox at lower performance with a polyfill.
On web/wasm, I didn't realize FRB was setting up a web worker pool. I think it's an important safety call out that sync has different correctness criteria due to this issue.
The sync mode is a good clue for me to check for issues. I do have a case where sync mode is required, for example, Flutter's Dismissible widget requires that a data source reflects a dismiss immediately, so if the data source lives in Rust, I need modify the data with a #[frb(sync)] method. I'll try to find a workaround.

Repro: https://github.com/aran/frb-exc-repro/blob/mut/lib/main.dart

After some more thought, it's clearer now: When targeting wasm there is no safe way to use standard concurrency primitives that ultimately depend on Atomics.wait.
In particular any frb(sync) function cannot wait on any lock/mutex because all lock/mutex code will ultimately need either Atomics.wait or an async call out. Any async function has to cope with being async but not having access to concurrency control primitives. The current behavior of automatically wrapping in an RwLock doesn't work for several cases.
Assuming we can eliminate the automatic RwLock wrapper, you can safely use frb(sync) with:

types that are translatable types all the way down and contain no synchronized data.
translatable types containing synchronized data as long the sync function doesn't use the synchronized data
In both cases reading is always safe if the data is globally immutable. Reading and writing would also both be safe if the data never gets sent to any other thread / web worker. In particular, it's safe if either all calls touching the data are sync, or if all async calls are restricted in their execution to the main thread. This main-thread-async could be supported by another frb annotation.

It can never be made safe to mix frb(sync) with async methods accessing the same data from the Rust thread pool.
Now for async with &mut or owned mut- the story there is even harder. To write safe async code that uses &mut references to data, you have to guarantee at the Flutter layer that it's a globally unique reference, no matter which thread. That's very hard to guarantee at the Flutter layer without Rust's type system to help out. There might some hacks to help like a runtime ownership tracking API at the Flutter level to catch issues, or a main-thread-only busywait implementation, because it's hard to stop flutter code from calling asyncMutableRustAPI(data); asyncMutableRustAPI(data);.
Finally, auto-wrapping in an RwLock only works for data where all accesses are async and sent to the web worker thread pool.
I could see a few different ways of supporting this from the FRB layer. One way would be allow users finer-grained control of the RustAutoOpaque wrapping to allow avoiding the automatic RwLock. Another helpful feature would be allow running an async call on the main thread event loop rather than the thread pool. Then for some data that had a frb(sync) call with an &mut on some data, you could allow other async methods that take & references to it to run on the main thread event loop, which would still be safe.

With no further changes to FRB, the simplest way to make Rust mutable data safe might be to choose either async or sync globally. Either run everything in the thread pool where RwLock works, or run everything sync where Atomic.wait will never be needed.

Another helpful feature would be allow running an async call on the main thread event loop rather than the thread pool.

Do not remember very clearly, but in web it seems we use the main thread and web primitives for async, so it is not in a thread pool. It is the non-sync non-async fn that uses thread pool IMHO.

@fzyzcjy When in web, make the real increment-strong-count happen in non-main thread. For example, fn rust_arc_increment_strong_count() { execute_in_thread_pool(|| Arc::increment_strong_count()) }.

Elaborate this a little bit: We can convert arbitrary main-thread code into non-main-thread, by letting main thread runs function body in non-main-thread, and main thread just do busy wait (if other waiting primitive is not allowed). This may not be harmful (except for overhead of changing thread), because even without this change, the main thread will be blocked by exactly the same amount of time.

Apologies for the lack of clarity - in all of the above, when talking about async functions, I only meant non-async Rust functions that are not labeled frb(sync) and are compiled to async Dart functions. For these functions, it would be useful to have options to instruct FRB to avoid wrapping data in locks and to send these to the main thread event loop rather than thread pool.
I'm not sure of the right tradeoffs between main thread busy-waits and other approaches. At first glance it would seem unfortunate to be forced into main thread busy-waits because it could result in surprising performance behavior.

More information why increment_strong_count utilizes Atomics.wait: It seems that you are using the quickstart mode. Try to set full_dep: true and see whether it works.

Btw, as is mentioned in your another post, another simple way to avoid this issue may be to use async fn (i.e. Rust async functions) and #[frb(sync)] fn (i.e. Dart and Rust sync functions), which in Web only uses the main thread (while uses multi thread in native.

Up to you how you want to track full solutions. For my case I am working around issues by exclusively using frb(sync) and I've turned on full_dep although I'm not sure I understand the full implications of that or why there are different modes with different correctness properties.

Close since this is solved by, for example, always use async fn. Feel free to reopen if needed!


Add sessionStorage as built-in variable

Add sessionStorage as a built-in variable to javascript, just like localStorage

Resolves #3667
Changes
Added sessionStorage as built-in variable
Checklist

[ ] Added markup tests, or they don't apply here because...
[x] Updated the changelog at CHANGES.md

Awesome, this needs a changelog entry also... you'll need to copy the last release and make a new 11.8 section at the top... should be easy to see what they look like from the prior.

Changelog added for 11.8.0

@morinel Thanks so much!


Clearer description on limitation of Private Link with ADF

With only private link enabled, the self hosted integration runtime will run in limited mode as it can't communicate with Azure Relay. Besides not able to perform interactive authoring, user will not be able to create linked service. Without linked service, user will not even able to create dataset and pipeline.
Suggest to call out customer will still need both private link for ADF, and whitelist service bus, which is not covered under Azure Service Bus Service Tag.

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 04cca896-a855-6c8a-44fa-0ba83b5f058a
Version Independent ID: 3d841099-2213-9384-a0b9-568c04663630
Content: Azure Private Link for Azure Data Factory - Azure Data Factory
Content Source: articles/data-factory/data-factory-private-link.md
Service: data-factory
GitHub Login: @nabhishek
Microsoft Alias: abnarain

@guangying94 Thanks for the feedback! I have assigned the issue to the content author to evaluate and update the limitation of Private link with ADF.

Thanks for your dedication to our documentation. Unfortunately, at this time we have been unable to review your issue in a timely manner and we sincerely apologize for the delayed response. The requested updates have not been made since the creation of this issue, and the timeline for resolution may vary based on resourcing, so we've created an internal work item to incorporate your suggestions. We are closing this issue for now, but feel free to comment here as necessary. #please-close


Update changelog for Maps Timezone

API change check
APIView has identified API level changes in this PR and created following API reviews.
@azure-rest/maps-timezone


Damage auto-roll?

Thank you so much for the work you've done on the system. We played last night (using V11) and everything worked great!
One question I have: Is there a way to set things so that damage rolls automatically on a success? I've seen it done that way in OSE and now I'm spoiled.
Thanks again for all you do!
(Now I see that I probably should have put this under discussions; sorry, I'm new here...)

Feature requests are fine here. This request is a little tricky with the way things are currently structured, but not impossible by any means. It may take me a while to get to it though.
In the mean time, if it helps, you can drag the weapons onto the macro bar to make it easier to roll their damage. It's a bit unintuitive in that you must drag in the space in between the labels (since clicking on most of the labels does something).

It's a bit unintuitive in that you must drag in the space in between the labels (since clicking on most of the labels does something).

This should be fixed with my most recent changes. You should be able to drag from anywhere on the item in the actor's sheet now

In the next release, the item macro can do this (thanks to @jalensailin's refactor of the roll logic) so I will close this one out. Example:
Drag item onto bar to get macro:

Clicking on the macro (on a successful test) gives:


[ALLUXIO-2353] Use super user permission in REST service

@jsimsa @ifcharming
https://alluxio.atlassian.net/browse/ALLUXIO-2353

LGTM

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/Alluxio-Pull-Request-Builder/11766/
Test PASSed.


Setup Pywal Coloring

Configure pywal for kitty

It is now setup, however need to now check how it is overriding the existing colors. Is it only creating its own colors in the ~/.cache/wal/ ?

Not using anymore.


fixAdd waiting timeout while creating mv and row count report. (#31944)

backport https://github.com/apache/doris/pull/31944

Further comments
If this is a relatively large or complex change, kick off the discussion at<EMAIL_ADDRESS>by explaining why you chose the solution you did and what alternatives you considered, etc...

run buildall


Invalid output when mixing strings and atoms

This was my mistake, but I got highly unexpected behaviour out of Poison when it happened. I have a dictionary that is a mixture of atoms and strings for keys, and in the output there is a duplicated key, which is not valid JSON.
Minimal test case:
iex(12)> Poison.encode! %{ :foo => "bar", "foo" => "baz" }
"{\"foo\":\"baz\",\"foo\":\"bar\"}"

The result is that the other side of the HTTP endpoint would ambiguously parse the output. Very tricky to debug.

Interesting issue.
I've had a look and made a small change - will put a PR in shortly. I've made the assumption that Poison shouldn't make the decision about which of those two entries are the right one to end up in the final JSON - and it raises an error.
Interestingly it seems the same problem exists in Ruby
pry(main)> { :a => "a", "a" => "A" }.to_json
=> "{\"a\":\"a\",\"a\":\"A\"}"

I also checked my browser (Chrome) and it chooses the last value that is entered when an object has the same key multiple times.
Do you think failing when we have multiple matching keys is the right way to go about this @devinus ?

@BennyHallett thanks for looking into it! It seems that that ordering isn't (last value entered) predictable on bigger maps. I was doing a large Map.merge(default_values, actual_values) and it would be pretty unpredictable what would happen.
The solution I ended up taking was to explicitly normalize all of my keys to strings before doing the merge. Worked great for me, but doesn't solve the general case problem. My normalization function did fail when there were multiple matching keys :)

No worries. My solution was to just fail - I'm not sure it's Poison's responsibility to decide which key the programmer wants to include

I've got a fix for this but I'm not entirely happy with it - the benchmarks show a jump in processing time for maps from around 20 µs/op to around 40 µs/op. While 20 µs is almost nothing, I don't think a 100% increase in processing time is a good thing.
The change makes the encoding fail when we detect duplicate keys. It does this by normalising the keys into an array, running Enum.uniq on it, and then comparing the length of that to the length of the keys in the original map.
Can anyone think of a more efficient way of doing this?

Hmmmm, my workaround just straight up normalized to all string keys and failed if it came across a dupe. Not sure if it's faster or slower than what you've got:
  def normalize_map(m) do
    {r, dupes} = Enum.reduce(Map.to_list(m), {%{}, false}, fn({k,v}, state) ->
      {acc, dupes} = state
      key = cond do
        is_atom(k) -> Atom.to_string(k)
        true -> k
      end
      { Map.put(acc, key, v),
        dupes || Map.has_key?(acc, key)
      }
    end)
    case dupes do
      false -> {:ok, r}
      true -> {:error, :duplicate_key}
    end
  end

@tonyarkles Thanks for that - gave me some ideas.
Unfortunately it's still slow - I made a PR for what I've got, hopefully someone has some ideas. One that I've added is to make the key validation optional, so that developers can trade off between speed and correctness.
Interested to see what @devinus and yourself think.

You guys rock. Thanks!


Design process to validate the calibration

How is a user to determine, once their calibration is good enough.
need design of stack, process flow, UX and data flow.
Then implement based on the current CE-calibrations

So: i created the lightening deployment which injects (currenty) 1 mock-attack per kubehound edge.
Next Step:
Create in the Visualizer UI a means, to add /modify patterns and flush/reset the DBs and rerun the lightening until user is happy with the detections


just wanted to say thank you

Awesome tool, thank you so much for building it. Life saver. You can close the issue :)

Thanks a lot for your comment :)
I'm happy if you find Memoscope useful.
Do not hesitate to send bug reports, new feature or pull requests.


COS-230 - Update the README for Windows users

A couple of thoughts: first, I'm surprised to hear that this issue (on Windows) is about symlinks. Again, since running the tool against a simple hello-world worked, I thought it had something to do with the size of the image (anyone following this who has not seen the related discussion @ioah86 linked to above may want to read that for context).
Second, I'm surprised also that you've listed Windows Dev mode as the first solution. That's the most onerous/wide-ranging/long-lasting of the 3 options. Really, I'd think the second should be listed first, as it's easiest. And while you've talked about how to do it with powershell, I'll note that one need not use that. I had shared how it worked from the simple command prompt, as long as that was opened "with admin". I'll understand if you prefer not to detail that, but you could at least say "open the Windows command prompt or powershell as admin", and then you could go on to detail only the latter.
Also, in that current point 2, you say "This Can be done..." with a capital C that you'll want to lowercase. :-)
Finally, your current point 3 discusses installing WSL. What I had shared originally was that I encountered this while running Docker via Docker Desktop for Windows (which is very commonly used for Windows folks), and that already implements WSL in latest versions. My suggestion was to point people to how they could implement python and coguard within the WSL vm they'd already have. Your current wording leaves the impression they have to install WSL. I suppose we can presume people who understand things can "figure it out".
Again, I leave all this simply as thoughts for you to consider. If you opt to weave those thoughts into any improvement, that's great.  If you may prefer I offer a revision instead, I could do that. But I didn't want to just do that, as you may not agree with my contentions above. I thought it better to discuss them first. Totally your call how we proceed with any revisions, if at all.
As always, I'm just trying to help.

Those are fair points. Let me see how I can address them. I will update the PR shortly

But, just to give you the reason why I put the developer mode as first option: Coming from a Linux world, running something as administrator is an option that is usually exercised last. But I guess in Windows it is accepted as an in-betweener more readily. I will take your view for now, as I do think you know the Windows-user world better than I do.

And re symlinks: https://github.com/python/cpython/issues/95763 Apparently, that is something Windows has released later, but yes, it has something to do with Symlinks. And unfortunately, it is important in this software product: Take e.g. the mariadb docker image. The path to the actual configuration file is going through 2 symlinks.

And, last but not least: Thank you for your help.

Updated the PR. Please let me know if I missed anything @carehart


(node) does NOT work with node-fetch

Your documentation states that either node-fetch or isomorphic-fetch can be used for nodejs environments. This is not true as node-fetch still leads to a fetch is not defined error. isomorphic-fetch however does work. Any reason why? Please update your documentation to accurately reflect what's required to use your api

Thanks Moe. Do you happen to have a snippet that reproduces this?
On Feb 19, 2018 2:31 AM, "Moe Jangda"<EMAIL_ADDRESS>wrote:
Your documentation states that either node-fetch or isomorphic-fetch can be
used for nodejs environments. This is not true as node-fetch still leads to
a fetch is not defined error. isomorphic-fetch however does work. Any
reason why? Please update your documentation to accurately reflect what's
required to use your api
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/dropbox/dropbox-sdk-js/issues/181, or mute the thread
https://github.com/notifications/unsubscribe-auth/AE2ScNLV-Zk2FtV4lpCacFwdKf1ty9Hwks5tWI-YgaJpZM4SJ2ID
.

Sure @pran1990 :
require('node-fetch');
const DropboxTeam = require('dropbox').DropboxTeam;
const dbx = new DropboxTeam({ accessToken: 'removed for obvious reasons' });

(async () => {
    try {
        const members = await dbx.teamMembersList();
        const userId = members.members[0].profile.team_member_id;
        const userDbx = dbx.actAsUser(userId);

        const folders = await userDbx.filesListFolder({ path: '' });
    } catch (e) {
        console.log('error:', e);
    }
})();

Output when run:
error: ReferenceError: fetch is not defined
    at rpcRequest (/Users/beandip/code/side-projects/clientgrid/dbx-integration/node_modules/dropbox/lib/rpc-request.js:69:3)
    at DropboxTeam.request (/Users/beandip/code/side-projects/clientgrid/dbx-integration/node_modules/dropbox/lib/dropbox-base.js:414:14)
    at DropboxTeam.routes.teamMembersList (/Users/beandip/code/side-projects/clientgrid/dbx-integration/node_modules/dropbox/lib/routes-team.js:398:15)
    at __dirname (/Users/beandip/code/side-projects/clientgrid/dbx-integration/index.js:7:35)
    at Object.<anonymous> (/Users/beandip/code/side-projects/clientgrid/dbx-integration/index.js:15:3)
    at Module._compile (module.js:624:30)
    at Object.Module._extensions..js (module.js:635:10)
    at Module.load (module.js:545:32)
    at tryModuleLoad (module.js:508:12)
    at Function.Module._load (module.js:500:3)

On another quick note, are the limitations as to what trial business users can do using the dropbox api? i keep getting a 403 back when attempting to create a team folder but my application has team member file access. We can defer this question to a later time. I just figured i'd bring it up now incase there is a limitation in which case it'd be beneficial to include that in the documentation as well.

Thanks! We'll look into it.
Regarding your other question, that doesn't sound specific to the JavaScript SDK, so please open an API ticket, if you haven't already, and we'll check on that and follow up with your there.

We just looked into this, and it appears you'll need to set this in order to use the SDK with node-fetch:
global.fetch = require('node-fetch');.

We'll get the documentation updated. Thanks and apologies for the bother!

We've updated the documentation to just recommend isomorphic-fetch for consistency, but the above code should work if you want to use node-fetch.


add pyiron import tests

Checklist

[x] Used a personal fork of the feedstock to propose changes
[x] Bumped the build number (if the version is unchanged)
[x] Reset the build number to 0 (if the version changed)
[x] Re-rendered with the latest conda-smithy (Use the phrase @conda-forge-admin, please rerender in a comment in this PR for automated rerendering)
[x] Ensured the license file is being packaged.

@conda-forge-admin, please rerender

@pmrv  Could you also merge this in please?


PHOENIX-2474 Cannot round to a negative precision (to the left of the…

… decimal)

https://github.com/apache/phoenix/commit/b7d45ca66729ae57c0896449e36b80f4fdcafb46


Add the url-check tool to the repository

The feature
The url-check tool is a way to spot broken links and gives overview pages with status.
Why?
By finding the broken links more easily, we, and the Wikidata community, gets a possibility to increase the quality of the data by finding simple errors and sites that have disappeared.
Examples and inspiration

Demo
Foundation for Public Code's use of the tool

I want to work on these issue


Ranger's "Favored Foe" ability imports as an item, not a feature

Hunter's Prey: Colorssus Slayer does not have an associated icon

Tick "Import D&D Beyond Actons as Features, not weapons" on the import screen.


Object constructor argument of spacing

Challenge Name

https://www.freecodecamp.com/challenges/get-json-with-the-jquery-getjson-method
Issue Description

Hello, I'm newbie to the javascript. I used to write C or C++ so I adapted several coding styles from them.  The issue I encountered was if I left space between the argument and the parenthesis, I would fail the last requirement ("Don't forget to ...") of the challenge.  I knew it might not be a good practice to adopt the style but I was wondering why it would fail the test. So far, I haven't found any related information. Thanks for your consideration.
Browser Information

Browser Name, Version:  Chrome, 52.0.2743.116
Operating System: Windows 7
Mobile, Desktop, or Tablet: Laptop

Your Code

/* Incorrect */
       $.getJSON("/json/cats.json", function( json ) {
                $(".message").html( JSON.stringify(json) );
                });
/* Correct */
       $.getJSON("/json/cats.json", function(json) {
                $(".message").html( JSON.stringify(json) );
                });

Screenshot

@babygoat Sorry for the delay. This has come up before in similar challenges (ex. #10021 and #8360). It's a matter of updating the Regex tests to accept optional spaces because as you've mentioned, it is acceptable. Thanks for the issue.


fix  counter cache field doesn't updated #158

the problem is caused by default value of cache_options[:unique] is false even when it is not passed.  #158

Thanks for the PR @sachiotomita. I realize this is super old but it would be great to get it merged. Would you mind rebasing on master to get a proper spec suite run?

Reimplemented in #243


Remove the hostname from property file

This also updates the scaleup properties file with the sample params.

@jeremyeder PTAL.


Missing createjoltprojects scripts

I wanted to build VPhysics Jolt and can't find createjoltprojects.bat / createjoltprojects.sh scripts, yet they are referenced in the Actions workflow.
Where are these?

See https://github.com/Joshua-Ashton/VPhysics-Jolt/blob/main/build.md
These scripts are in eg. https://github.com/Joshua-Ashton/mini-source-sdk/tree/master/sdk2013-sp/src

Thank you. I didn't properly read the initial steps and assumed I could use my SSDK2013 project.


i think roblox hates us

am getting error:
RobloxPlayerBeta.exe Target bytes set 1 of 3 is not found. Target bytes set 2 of 3 is not found. Target bytes set 3 of 3 is not found. 3 failures occured when patching. Press Enter to quit

it seems https://github.com/Windows81/Roblox-Home-Patcher/tree/main worked as well as running it as admin somewhere else.

am getting error: RobloxPlayerBeta.exe Target bytes set 1 of 3 is not found. Target bytes set 2 of 3 is not found. Target bytes set 3 of 3 is not found. 3 failures occured when patching. Press Enter to quit

Huh? Was the script patching the wrong file? Why is it saying RobloxPlayerBeta.exe??? It's not supposed to do that and nothing in the script points to anything with that filename???????

it seems https://github.com/Windows81/Roblox-Home-Patcher/tree/main worked as well as running it as admin somewhere else.

This is just a fork of this repository, doesn't actually have any functional difference. (I think)


Merge driver-test into dev

This PR is to merge driver-test which presently has only the nominal tests for get_options. I propose merging driver-test into dev because no proposal is on the table to make any other development on driver tests (although many tests are still required).
Leaving dev behind on the minimal driver tests is unwise if there is no active plan to add more tests. Leaving dev behind risks regression when other changes are added to dev.
EDIT: I also propose deleting driver-test branch after this PR is merged. (Deleting the branch causes no loss.)

Thanks for bringing this up, I also agree we can merge and delete this branch.

Thanks @cmcmone and @Ndemco for your approval. I will complete this merge as soon as I'm done with my current task.


traefik crashes when kubernetes secret is used for basic auth

Do you want to request a feature or report a bug?
BUG.

What did you do?
Applied #1707 to get access to secrets
Installed deployment of latest traefik image with 3 replicas.
Deployed k8s-dashboard and made ingress rule with basic auth + secret.

What did you expect to see?
All replicas to be working. Not only 2 of them.
What did you see instead?
2\3 are up and the third one couldn't get existing secret.
Output of traefik version: (What version of Traefik are you using?)
Version:      v1.3.1
Codename:     raclette
Go version:   go1.8.3
Built:        2017-06-16_11:21:48AM
OS/Arch:      linux/amd64

What is your environment & configuration (arguments, toml, provider, platform, ...)?
debug = true
logLevel = "INFO"
defaultEntryPoints = ["http","https"]

[entryPoints]
	[entryPoints.http]
	address = ":80"
	[entryPoints.https]
	address = ":443"

[web]
address = ":8080"
	[web.auth.basic]
	users = [ "test:$apr1$Y8X0T234$8hoaJeKIka4wJi13yETbK." ]

[kubernetes]
namespaces = [ "default", "kube-system" ]

If applicable, please paste the log output in debug mode (--debug switch)
time="2017-06-27T15:32:58Z" level=info msg="Traefik version v1.3.1 built on 2017-06-16_11:21:48AM"
time="2017-06-27T15:32:58Z" level=info msg="Using TOML configuration file /config/traefik.toml"
time="2017-06-27T15:32:58Z" level=debug msg="Global configuration loaded {"GraceTimeOut":10000000000,"Debug":true,"CheckNewVersion":true,"AccessLogsFile":"","TraefikLogsFile":"","LogLevel":"DEBUG","EntryPoints":{"http":{"Network":"","Address":":80","TLS":null,"Redirect":null,"Auth":null,"Compress":false},"https":{"Network":"","Address":":443","TLS":null,"Redirect":null,"Auth":null,"Compress":false}},"Cluster":null,"Constraints":[],"ACME":null,"DefaultEntryPoints":["http","https"],"ProvidersThrottleDuration":2000000000,"MaxIdleConnsPerHost":200,"IdleTimeout":180000000000,"InsecureSkipVerify":false,"Retry":null,"HealthCheck":{"Interval":30000000000},"Docker":null,"File":null,"Web":{"Address":":8080","CertFile":"","KeyFile":"","ReadOnly":false,"Statistics":null,"Metrics":null,"Path":"","Auth":{"Basic":{"Users":["test:$apr1$Y8X0T234$8hoaJeKIka4wJi13yETbK."],"UsersFile":""},"Digest":null,"HeaderField":""}},"Marathon":null,"Consul":null,"ConsulCatalog":null,"Etcd":null,"Zookeeper":null,"Boltdb":null,"Kubernetes":{"Watch":true,"Filename":"","Constraints":[],"Endpoint":"","Token":"","CertAuthFilePath":"","DisablePassHostHeaders":false,"Namespaces":["default","kube-system"],"LabelSelector":""},"Mesos":null,"Eureka":null,"ECS":null,"Rancher":null,"DynamoDB":null}"
time="2017-06-27T15:32:58Z" level=info msg="Preparing server https &{Network: Address::443 TLS:<nil> Redirect:<nil> Auth:<nil> Compress:false}"
time="2017-06-27T15:32:58Z" level=info msg="Preparing server http &{Network: Address::80 TLS:<nil> Redirect:<nil> Auth:<nil> Compress:false}"
time="2017-06-27T15:32:58Z" level=info msg="Starting provider *server.WebProvider {"Address":":8080","CertFile":"","KeyFile":"","ReadOnly":false,"Statistics":null,"Metrics":null,"Path":"","Auth":{"Basic":{"Users":["test:$apr1$Y8X0T234$8hoaJeKIka4wJi13yETbK."],"UsersFile":""},"Digest":null,"HeaderField":""}}"
time="2017-06-27T15:32:58Z" level=info msg="Starting provider *kubernetes.Provider {"Watch":true,"Filename":"","Constraints":[],"Endpoint":"","Token":"","CertAuthFilePath":"","DisablePassHostHeaders":false,"Namespaces":["default","kube-system"],"LabelSelector":""}"
time="2017-06-27T15:32:58Z" level=info msg="Starting server on :80"
time="2017-06-27T15:32:58Z" level=info msg="Starting server on :443"
time="2017-06-27T15:32:58Z" level=info msg="Creating in-cluster Provider client
"
time="2017-06-27T15:32:58Z" level=debug msg="Using label selector: ''"
time="2017-06-27T15:32:59Z" level=debug msg="Received event from kubernetes &Endpoints{ObjectMeta:ObjectMeta{Name:tiller-deploy,GenerateName:,Namespace:kube-system,SelfLink:/api/v1/namespaces/kube-system/endpoints/tiller-deploy,UID:db0c7d32-1b98-11e7-8d60-0025905d1042,ResourceVersion:9558297,Generation:0,CreationTimestamp:2017-04-07 13:48:18 +0000 UTC,DeletionTimestamp:<nil>,DeletionGracePeriodSeconds:nil,Labels:map[string]string{app: helm,name: tiller,},Annotations:map[string]string{},OwnerReferences:[],Finalizers:[],ClusterName:,},Subsets:[{[{<IP_ADDRESS>  0xc4207bcbc0 ObjectReference{Kind:Pod,Namespace:kube-system,Name:tiller-deploy-1332042700-pb18c,UID:daebcdb3-1b98-11e7-8d60-0025905d1042,APIVersion:,ResourceVersion:9558296,FieldPath:,}}] [] [{tiller 44134 TCP}]}],}"
time="2017-06-27T15:32:59Z" level=error msg="Provider connection error secret "kube-system"/"k8s-dashboard-basic-auth" not found, retrying in 651.281427ms"
ERROR: logging before flag.Parse: E0627 15:32:59.062442       1 runtime.go:66] Observed a panic: "send on closed channel" (send on closed channel)
/go/src/github.com/containous/traefik/vendor/k8s.io/client-go/pkg/util/runtime/runtime.go:72
/go/src/github.com/containous/traefik/vendor/k8s.io/client-go/pkg/util/runtime/runtime.go:65
/go/src/github.com/containous/traefik/vendor/k8s.io/client-go/pkg/util/runtime/runtime.go:51
/usr/local/go/src/runtime/asm_amd64.s:514
/usr/local/go/src/runtime/panic.go:489
/usr/local/go/src/runtime/chan.go:180
/usr/local/go/src/runtime/chan.go:604
/go/src/github.com/containous/traefik/provider/kubernetes/client.go:136
/go/src/github.com/containous/traefik/provider/kubernetes/client.go:143
/go/src/github.com/containous/traefik/vendor/k8s.io/client-go/tools/cache/controller.go:173
<autogenerated>:50
/go/src/github.com/containous/traefik/vendor/k8s.io/client-go/tools/cache/controller.go:251
/go/src/github.com/containous/traefik/vendor/k8s.io/client-go/tools/cache/delta_fifo.go:420
/go/src/github.com/containous/traefik/vendor/k8s.io/client-go/tools/cache/controller.go:131
/go/src/github.com/containous/traefik/vendor/k8s.io/client-go/tools/cache/controller.go:102
/go/src/github.com/containous/traefik/vendor/k8s.io/client-go/pkg/util/wait/wait.go:96
/go/src/github.com/containous/traefik/vendor/k8s.io/client-go/pkg/util/wait/wait.go:97
/go/src/github.com/containous/traefik/vendor/k8s.io/client-go/pkg/util/wait/wait.go:52
/go/src/github.com/containous/traefik/vendor/k8s.io/client-go/tools/cache/controller.go:102
/usr/local/go/src/runtime/asm_amd64.s:2197
ERROR: logging before flag.Parse: E0627 15:32:59.062615       1 runtime.go:66] Observed a panic: "send on closed channel" (send on closed channel)
/go/src/github.com/containous/traefik/vendor/k8s.io/client-go/pkg/util/runtime/runtime.go:72
/go/src/github.com/containous/traefik/vendor/k8s.io/client-go/pkg/util/runtime/runtime.go:65
/go/src/github.com/containous/traefik/vendor/k8s.io/client-go/pkg/util/runtime/runtime.go:51
/usr/local/go/src/runtime/asm_amd64.s:514
/usr/local/go/src/runtime/panic.go:489
/go/src/github.com/containous/traefik/vendor/k8s.io/client-go/pkg/util/runtime/runtime.go:58
/usr/local/go/src/runtime/asm_amd64.s:514
/usr/local/go/src/runtime/panic.go:489
/usr/local/go/src/runtime/chan.go:180
/usr/local/go/src/runtime/chan.go:604
/go/src/github.com/containous/traefik/provider/kubernetes/client.go:136
/go/src/github.com/containous/traefik/provider/kubernetes/client.go:143
/go/src/github.com/containous/traefik/vendor/k8s.io/client-go/tools/cache/controller.go:173
<autogenerated>:50
/go/src/github.com/containous/traefik/vendor/k8s.io/client-go/tools/cache/controller.go:251
/go/src/github.com/containous/traefik/vendor/k8s.io/client-go/tools/cache/delta_fifo.go:420
/go/src/github.com/containous/traefik/vendor/k8s.io/client-go/tools/cache/controller.go:131
/go/src/github.com/containous/traefik/vendor/k8s.io/client-go/tools/cache/controller.go:102
/go/src/github.com/containous/traefik/vendor/k8s.io/client-go/pkg/util/wait/wait.go:96
/go/src/github.com/containous/traefik/vendor/k8s.io/client-go/pkg/util/wait/wait.go:97
/go/src/github.com/containous/traefik/vendor/k8s.io/client-go/pkg/util/wait/wait.go:52
/go/src/github.com/containous/traefik/vendor/k8s.io/client-go/tools/cache/controller.go:102
/usr/local/go/src/runtime/asm_amd64.s:2197
panic: send on closed channel [recovered]
	panic: send on closed channel [recovered]
	panic: send on closed channel

goroutine 39 [running]:
github.com/containous/traefik/vendor/k8s.io/client-go/pkg/util/runtime.HandleCrash(0x0, 0x0, 0x0)
	/go/src/github.com/containous/traefik/vendor/k8s.io/client-go/pkg/util/runtime/runtime.go:58 +0x126
panic(0x1ca6940, 0xc4208ee540)
	/usr/local/go/src/runtime/panic.go:489 +0x2cf
github.com/containous/traefik/vendor/k8s.io/client-go/pkg/util/runtime.HandleCrash(0x0, 0x0, 0x0)
	/go/src/github.com/containous/traefik/vendor/k8s.io/client-go/pkg/util/runtime/runtime.go:58 +0x126
panic(0x1ca6940, 0xc4208ee540)
	/usr/local/go/src/runtime/panic.go:489 +0x2cf
github.com/containous/traefik/provider/kubernetes.eventHandlerFunc(0xc420112d20, 0x1f5e6e0, 0xc4200f3800)
	/go/src/github.com/containous/traefik/provider/kubernetes/client.go:136 +0x55
github.com/containous/traefik/provider/kubernetes.newResourceEventHandlerFuncs.func1(0x1f5e6e0, 0xc4200f3800)
	/go/src/github.com/containous/traefik/provider/kubernetes/client.go:143 +0x3e
github.com/containous/traefik/vendor/k8s.io/client-go/tools/cache.ResourceEventHandlerFuncs.OnAdd(0xc42032dc50, 0xc42032dc60, 0xc42032dc70, 0x1f5e6e0, 0xc4200f3800)
	/go/src/github.com/containous/traefik/vendor/k8s.io/client-go/tools/cache/controller.go:173 +0x49
github.com/containous/traefik/vendor/k8s.io/client-go/tools/cache.(*ResourceEventHandlerFuncs).OnAdd(0xc4207ce300, 0x1f5e6e0, 0xc4200f3800)
	<autogenerated>:50 +0x73
github.com/containous/traefik/vendor/k8s.io/client-go/tools/cache.NewInformer.func1(0x1cd5ac0, 0xc4208ff2e0, 0x1cd5ac0, 0xc4208ff2e0)
	/go/src/github.com/containous/traefik/vendor/k8s.io/client-go/tools/cache/controller.go:251 +0x24d
github.com/containous/traefik/vendor/k8s.io/client-go/tools/cache.(*DeltaFIFO).Pop(0xc4206602c0, 0xc4205bf320, 0x0, 0x0, 0x0, 0x0)
	/go/src/github.com/containous/traefik/vendor/k8s.io/client-go/tools/cache/delta_fifo.go:420 +0x218
github.com/containous/traefik/vendor/k8s.io/client-go/tools/cache.(*Controller).processLoop(0xc42015f110)
	/go/src/github.com/containous/traefik/vendor/k8s.io/client-go/tools/cache/controller.go:131 +0x3c
github.com/containous/traefik/vendor/k8s.io/client-go/tools/cache.(*Controller).(github.com/containous/traefik/vendor/k8s.io/client-go/tools/cache.processLoop)-fm()
	/go/src/github.com/containous/traefik/vendor/k8s.io/client-go/tools/cache/controller.go:102 +0x2a
github.com/containous/traefik/vendor/k8s.io/client-go/pkg/util/wait.JitterUntil.func1(0xc4207d87b0)
	/go/src/github.com/containous/traefik/vendor/k8s.io/client-go/pkg/util/wait/wait.go:96 +0x5e
github.com/containous/traefik/vendor/k8s.io/client-go/pkg/util/wait.JitterUntil(0xc4207a7fb0, 0x3b9aca00, 0x0, 0x1b63001, 0xc420112c60)
	/go/src/github.com/containous/traefik/vendor/k8s.io/client-go/pkg/util/wait/wait.go:97 +0xad
github.com/containous/traefik/vendor/k8s.io/client-go/pkg/util/wait.Until(0xc4207d87b0, 0x3b9aca00, 0xc420112c60)
	/go/src/github.com/containous/traefik/vendor/k8s.io/client-go/pkg/util/wait/wait.go:52 +0x4d
github.com/containous/traefik/vendor/k8s.io/client-go/tools/cache.(*Controller).Run(0xc42015f110, 0xc420112c60)
	/go/src/github.com/containous/traefik/vendor/k8s.io/client-go/tools/cache/controller.go:102 +0x1c7
created by github.com/containous/traefik/provider/kubernetes.(*clientImpl).WatchSecrets
	/go/src/github.com/containous/traefik/provider/kubernetes/client.go:227 +0x28e

The log says that we are sending on a closed channel, referencing this piece of the code where we forward an object received via the Informer to the events channel.
I think the problem is due to a race between our WatchAll() method closing all channels once the goroutine returns on reception of the stop signal, and the Informer-internal processing trying to notify our eventHandlerFunc.

Note to myself and the maintainers: Our naming of the various involved channels (stop, watch, event) is super confusing and continuously changing depending on what method you're looking at. :/

I'll be taking a wild shot here: could the problem be due to us not waiting for the secrets controller to have synchronized here?
/cc @dtomcej @errm

I am able to reproduce this by setting up basic auth via annotations but don't provide a Secret object.

Yep, waiting for the secret controller sync fixes things.
PR incoming...

Closed by #1798 .


remove viewStart from getDecisions

Description

Removing viewStart flag. We will retrieve decisions by scope only. We will not retrieve page-wide scope decisions for now.
Related Issue

Motivation and Context

Screenshots (if appropriate):
Types of changes

[] Bug fix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change which adds functionality)
[x] Improvement (non-breaking change which does not add functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to change)

Checklist:

[x] I have signed the Adobe Open Source CLA or I'm an Adobe employee.
[ ] I have submitted a documentation pull request or no changes are needed.
[x] I have made any necessary test changes and all tests pass.
[x] I have run the Sandbox successfully.

Looks good! Let’s merge it today if possible.


AND operator is not working with LONG operands

e.g.
DIM a AS LONG
a = $7fffff AND $000000
print a

outputs: 8388607

Bug. Looks like OR and XOR are also affected. Thanks.


[Impeller] Wire up static shader analysis of all Impeller shaders using malioc on CI.

The ARM Mali Offline Compiler has proven to give actionable insights into the performance of Impeller shaders. This issue tracks if it is possible to wire up the tool on CI.

cc @zanderso

I think this is complete now. Closing.


Fix binary subtypes

Fix return value of subtype() function in case no subtype is set.
Add unit tests for byte_container_with_subtype class.

Coverage remained the same at 100.0% when pulling 7c19aa22108eef6ff01a16b7fa7b09ef9058b3b5 on issue2863 into eb488bb4d9969eea53136515e4f90efb2785fdfc on develop.


However, it seems that the angular preset is not being used by the conventional changelog command. I suggest we update to standard-version.

It would be nice to clarify this in the Readme, and also clarify how strongly we should adhere to eslint messages (I see you have been deleting a number of codacy messages, should we update eslintrc in this case?)

It would be nice to clarify this in the Readme

Yes, good idea.

(I see you have been deleting a number of codacy messages, should we update eslintrc in this case?)

I've been removing the Unnecessary block errors which I've also turned off in the Codacy settings. import { named } from 'dependency' is fine in my opinion.


[UI Issue]:  Not enough padding-y for Announcement-Bar on Mobile devices

Description
On mobile devices, the content in the announcement bar doesn't have enough vertical padding.

We can add a little padding, to improve the readability

.
To Reproduce

Go to docs/roadmap on a mobile device
See the announcement bar on top
See error

Anything else?
No response
Code of Conduct

[X] I agree to follow this project's Code of Conduct

I will do this task.


RFC for ZIP-213: Shielded Coinbase rules for Heartwood

Is your feature request related to a problem? Please describe.
ZIP-213 introduces shielded coinbase.
Describe the solution you'd like
In order to implement this we should first write up the design for how  this work in an RFC.
Additional context
PR #1190 started implementing this work and should be used to inform the design and write up

Moving this out of Sprint 13 as we'll deal with coinbase rules at a later date, post NU5 activation

Moving this out of Sprint 13 as we'll deal with coinbase rules at a later date, post NU5 activation

We're only skipping coinbase input validation: Founders Reward, Funding Streams, and Miner Rewards.
We have to validate coinbase outputs, because outputs get spent along with other Zcash coins.
But looking at the list of consensus rules in #608, we don't need a design here, just some good function and module docs.


chore(docs): add Models tutorial and docs CONTRIBUTING

Breaks out introduction to Weave Models from the Evaluations tutorial. The reason being that Weave Models are a powerful tool for versioning and should be highlighted independently of Evaluations for clarity, instead of introducing the concept alongside Evaluations & Scorers.
New models tutorial covers:

Define, Init and call Weave Model with example
Shows how to export, modify and use a tracked Weave Model

This PR adds a basic DOCS_CONTRIBUTING.md file just to have these instructions documented somewhere, based off of W&B docodile readme

Closed in favor of https://github.com/wandb/weave/pull/2064


fix: range thumb being off track in some browsers

👨💻 Changes proposed(What did you do ?)

remove margin top for other browsers

✔ Check List (Check all the applicable boxes)

[x] My code follows the code style of this project.
[x] This PR does not contain plagiarized content.
[x] The title and description of the PR is clear and explains the approach.

:tada: This PR is included in version 2.32.2 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


Structuredstreaming writes data to delta table, HDFS has many small files, how to merge

Each batch will produce 3 files. If it is a long-running streaming program, the later reading and writing speed will be affected. How to merge these small files?I'm still doing it wrong

Hi @wanghangyu817 , Managed Delta Lake on Databricks has OPTIMIZE to deal with this, but that implementation is tied to some specific logic within Databricks. There's a discussion of the feature on https://github.com/delta-io/delta/issues/49, including some instructions for how to compact the small files yourself.

@mukulmurthy I'm trying to start another program to merge as dynamically


Incorporate data normalization for relevant demographics

Is your feature request related to a problem? Please describe.
It doesn't appear that Splink handles data normalization.  There are several demographics that either benefit from, or essentially require data normalization.  For example:

Different punctuation for patient names.  E.g. "Jean-Claude Van Damme" vs. "Jean Claude Van Damme".
Different phonetic spellings of names.  E.g., "Jon" vs. "John".
Different abbreviations in both names and addresses.  E.g., "St" vs. "St." vs. "Street".  Or "Jr." vs. Junior" for names.

Describe the intended behavior
The demographics for these two patients probably should be normalized prior to submission to the record linking process.
Jon Smith at 123 Main Street
John Smith at 123 Main St.
Describe the solution you'd like
Data normalization is a pretty complicated problem.  There are different solutions for different problems.  You may be able to use a USPS process to normalize address data (though you should consider the $$ cost of calling a USPS service for large number of patients, which will be necessary for the populations we are talking about).  There may be other options to normalize phonetic spelling of names.

While it is true that Splink does not support data normalization out of the box, the use of probabilistic data linkage  helps a lot to help de-duplicate the records anyway.
However, it is true that adding data normalization to the fields that we are applying our blocking rules to would help to reduce the rate of error. In the short term, we can add some textual normalization to the names and addresses as we parse them. We can use tools such as NLTK to help with this preprocessing.
I will work on adding some textual normalization in the near future. Please let us know if you would like to talk more about potential solutions.

Tasks for this ticket

[x] Normalize text punctuation
[x] Replace abbreviations with full term
[x] Replace British English
[ ] Normalize Dates
[ ] Normalize all numbers
[ ] Normalize different phonetic spellings
[ ] Name spelling?


Update cold start invoke frequency to at least 30 min

Could the cold start invoke frequency be updated to at least every 30 min for cold starts?
Looks like the code is getting 10 cold start samples daily for each language/platform but the numbers I have seen are much longer if hit frequency is at least 30 min apart for each of the invocations.

👋 @safihamid
Interesting idea! Sure I'll run a test overnight to see if there is any difference.
Do you have numbers to share?
Thanks!

Thanks! When I hit my endpoints every 30 min, for .NET 6 I get 550 msec on P50 and for Java8 I get 930 msec on P50 as examples. These are on 1024 MB.

Hi, I'm wondering if there's any update on this ticket, and what's the potential reason behind difference between cold start after function redeployed vs wait for 30 minutes then reinvoke


Added error output information to cmdProbe failure error

This PR adds more information to the command probe execution failure error message so it is more helpful while debugging the configuration of the probe.
Signed-off-by: Jakub Dzon<EMAIL_ADDRESS>

Thank you for the PR @jakub-dzon ! Much appreciated !


Update Release Testing with latest changes

We need these test changes to validate release build.
git checkout release/v1.32.x
git pull
git cherry-pick 90cd25d468e27546cf0756f1b88bdaa1dd68ccda
git checkout -b patch-test
git push -u origin patch-test

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:

Please upload report for BASE (release/v1.32.x@91cbba8). Learn more about missing BASE report.

:exclamation: Your organization needs to install the Codecov GitHub app to enable full functionality.
Additional details and impacted files
@@                Coverage Diff                 @@
##             release/v1.32.x     #809   +/-   ##
==================================================
  Coverage                   ?   76.94%
  Complexity                 ?      234
==================================================
  Files                      ?       15
  Lines                      ?      681
  Branches                   ?      115
==================================================
  Hits                       ?      524
  Misses                     ?      129
  Partials                   ?       28

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.


Added option to skip Matlab compatibility testing

I have added the ability to skip Matlab compatibility testing by
defining the environment variable PYWT_DISABLE_MATLAB. It does not
matter what the variable is set to; if it exists, the test is skipped.
This has been introduced to enable skipping the test even if 'mlab' is
installed since the test takes quite a long time.

I think it would be preferable to do this with an argument switch in runtests.py (e.g. python runtests.py --skip-matlab), but I'm not sure how you'd go about doing it.

You're probably right. That would seem more clean. This was just a quick
hack because it annoyed me during development of some new tests. Maybe I
can look into this later or, preferably, someone with more insight in
the 'runtests.py' script has a solution?

Had a quick look: you need to use extra_args in runtests.py - this passes additional arguments to nose. The argument you want to pass is --ignore-files=REGEX where REGEX matches the matlab test file.

Or, you can do this:
python runtests.py -- --ignore-files=matlab

Anything after the first -- is passed to nose.

In that case I will just use your proposal and close the pull request. No need for it then.
Thanks

@ThomasA I think you're the first one that has run those tests in a while. How long do they take exactly? And just to be sure: I assume that they all pass?

I don't remember exactly, but I think the script said something around 2700s when it was done. The tests passed.

Ouch, that's way too long. So we should (a) make it faster, and (b) mark it with @dec.slow so it doesn't get run with pywt.test() but only with pywt.test('full').
Looking at the test I'd expect that most of the time is spent for data_size=50000. I don't quite see why there need to be so many sizes of data; if we delete a few including 50000 then the runtime may become less unreasonable. Could you check what it goes down to then?

Yes, I can try that tomorrow.

If I remove size 50000, it runs in 2660s. If I remove all but size 100 and the range, it runs in 2397s.
If I run it without Matlab, it runs in about 11s...

Running it only with data_size = (w.dec_len,) still takes 130s, so maybe it should include data_size = (w.dec_len,) and one or two bigger sizes? data_size = (w.dec_len, 1000) takes 218s.

Thanks for looking into this. I would be fine with reducing the number of sizes tested, but we should probably keep at least some odd and even lengths.
I think it may be worth updating the tests to use python-matlab-bridge instead, which supports python 3 and is easy to install via pip.  It also has more development activity as compared to mlabwrap.  I am unfamiliar with the operation of mlabwrap, but I suspect it is repeatedly creating and closing Matlab sessions.  I doubt the actual computations themselves are taking so long, but I could be wrong.  I will try running the existing tests using pymatbridge instead and report back here.

I am not sure it actually opens multiple sessions. At least, it only triggers Matlab's splash screen once no matter how many test cases I include. I suspect (but I have not looked into the code) that it communicates data, possibly commands to/from Matlab via files and I guess that can slow it down quite a bit?

Yes, I think you are correct that it does just create one session.  I guess it is mainly slow because there are a ton of cases to run:
(6 border modes) x (74 wavelets) x (len(data_size))
I did create a version of the tests using pymatbridge here.  It is definitely still way too slow if all data_size values are used.  If I truncate to only data_size = (w.dec_len, w.dec_len + 1), it is taking 89 s on my machine.  I tried downloading mlabwrap, but it gave some compilation errors that I did not take the time to sort out, so I unfortunately don't have a comparison there in terms of execution time.

@ThomasA thanks for testing that. It looks to me then that there's no good way to make the runtime completely acceptable for regular usage. So how about splitting it in two: data_size = (w.dec_len, w.dec_len + 1) marked as slow (so it runs with pywt.test('full')) and the current test as is that needs an environment variable set in order to run it. Maybe PYWT_XSLOW in analogy to SCIPY_XSLOW?

I've also tried without success to install mlabwrap in the past, and development of that project stopped a long time ago. Moving to pymatbridge would be good I think, even if it doesn't solve the speed issue.

I can try out pymatbridge for comparison. Can you put the test script on a branch or just send it to me?

@ThomasA there was a link hidden in my previous comment :)
https://github.com/grlee77/pywt/tree/pymatbridge_tests/pywt/tests/test_matlab_compatibility.py
I just uploaded a second commit where I reordered the loops to minimize transferring data to Matlab.  That helped by another 25% or so so that it is about a minute now.
The only way to make this substantially faster would probably be to only test the full set of boundary modes on a small subset of the wavelets.


Reserved keywords in version 3.1.1

We are using dynalite for our test suite instead of calling the proper DynamoDB service, and we've seen our tests which are interacting with dynalite fail after the release of version 3.1.1.
I've constructed a minimal test case to reproduce the issue.
First, create the table like this:
[jeppe@reventon ~]$ aws dynamodb create-table \
>     --endpoint-url http://localhost:4567 \
>     --table-name my-table \
>     --attribute-definitions '[{"AttributeName": "user_id", "AttributeType": "N"}, {"AttributeName": "day", "AttributeType": "S"}]' \
>     --key-schema '[{"AttributeName": "user_id", "KeyType": "HASH"}, {"AttributeName": "day", "KeyType": "RANGE"}]' \
>     --provisioned-throughput '{"ReadCapacityUnits": 100, "WriteCapacityUnits": 100}'
{
    "TableDescription": {
        "AttributeDefinitions": [
            {
                "AttributeName": "user_id",
                "AttributeType": "N"
            },
            {
                "AttributeName": "day",
                "AttributeType": "S"
            }
        ],
        "TableName": "my-table",
        "KeySchema": [
            {
                "AttributeName": "user_id",
                "KeyType": "HASH"
            },
            {
                "AttributeName": "day",
                "KeyType": "RANGE"
            }
        ],
        "TableStatus": "CREATING",
        "CreationDateTime":<PHONE_NUMBER>.596,
        "ProvisionedThroughput": {
            "NumberOfDecreasesToday": 0,
            "ReadCapacityUnits": 100,
            "WriteCapacityUnits": 100
        },
        "TableSizeBytes": 0,
        "ItemCount": 0,
        "TableArn": "arn:aws:dynamodb:us-east-1:000000000000:table/my-table",
        "TableId": "bf943054-4d7d-42e0-78d8-e83fb182"
    }
}

You don't need to load any data into the table.
If you query against dynalite the query succeeds like this:
[jeppe@reventon ~]$ aws dynamodb query \
>     --endpoint-url http://localhost:4567 \
>     --table-name my-table \
>     --key-condition-expression 'user_id = :uid AND #d > :date' \
>     --expression-attribute-names '{"#d": "day"}' \
>     --expression-attribute-values '{":uid": {"N": "123"}, ":date": {"S": "2019-12-01"}}'
{
    "Items": [],
    "Count": 0,
    "ScannedCount": 0,
    "ConsumedCapacity": null
}

while in dynalite 3.1.1 it instead fails like this:
[jeppe@reventon ~]$ aws dynamodb query \
>     --endpoint-url http://localhost:4567 \
>     --table-name my-table \
>     --key-condition-expression 'user_id = :uid AND #d > :date' \
>     --expression-attribute-names '{"#d": "day"}' \
>     --expression-attribute-values '{":uid": {"N": "123"}, ":date": {"S": "2019-12-01"}}'

An error occurred (ValidationException) when calling the Query operation: Invalid KeyConditionExpression: Attribute name is a reserved keyword; reserved keyword: day

Doing the query against the proper DynamoDB shows it behaves like dynalite 3.1.0, which leads me to believe this is a bug in dynalite.

Ugh, sorry about that – I refactored the query parser to fix another bug with it (hence the patch release) and I obviously introduced another edge case. WIll fix ASAP

Should be fixed in v3.0.2 – sorry for the breakage 😞

(Which has just been published, to clarify)

Should be fixed in v3.0.2 – sorry for the breakage 😞

I assume you mean v3.1.2 😉
Thank you for fixing this so fast!


Generate resources fail in M1: Segmentation fault

Hello! I have a problem with capacitor/assets (and also with cordova-res) that I can't generate the resources for iOS on an apple M1 chip. Always the error: segmentation fault
flowww@MacBook-Air-de-FLOWww FLOWww.Apps_FLOWwwMe % npm list -g
/opt/homebrew/lib
├──<EMAIL_ADDRESS>├──<EMAIL_ADDRESS>├──<EMAIL_ADDRESS>├──<EMAIL_ADDRESS>├──<EMAIL_ADDRESS>└──<EMAIL_ADDRESS>npx capacitor-assets generate --ios
Generating assets for ios
zsh: segmentation fault  npx capacitor-assets generate --ios
cordova-res ios
WARN:	No config.xml file in directory. Skipping config.
zsh: segmentation fault  cordova-res ios
I have installed vips with brew (in arm64 arch) even sharp, but it still doesn't work...
flowww@MacBook-Air-de-FLOWww FLOWww.Apps_FLOWwwMe % brew info vips
==> vips: stable 8.13.3
Image processing library
https://github.com/libvips/libvips
/opt/homebrew/Cellar/vips/8.13.3 (96 files, 5.6MB) *
Poured from bottle on 2022-11-22 at 19:39:53
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/vips.rb
License: LGPL-2.1-or-later
==> Dependencies
Build: gobject-introspection ✔, meson ✘, ninja ✔, pkg-config ✔
Required: cairo ✔, cfitsio ✔, cgif ✔, fftw ✔, fontconfig ✔, gettext ✔, glib ✔, imagemagick ✔, jpeg-xl ✔, libexif ✔, libgsf ✔, libheif ✔, libimagequant ✔, libmatio ✔, librsvg ✔, libspng ✔, libtiff ✔, little-cms2 ✔, mozjpeg ✔, openexr ✔, openjpeg ✔, openslide ✔, orc ✔, pango ✔, poppler ✔, webp ✔
==> Analytics
install: 13,339 (30 days), 40,128 (90 days), 120,216 (365 days)
install-on-request: 13,000 (30 days), 39,042 (90 days), 116,922 (365 days)
build-error: 0 (30 days)
Any ideas?

I'm not able to reproduce but will leave this open in case others have a similar issue and have more to add, thanks

I encountered this issue with capacitor-assets 3.0.5.
On my Apple Silicon Mac, build script was running in a Docker container which is x64 architecture Linux.
After updating sharp to 0.33.4 and use Node.js v18.17.0, then the segmentation fault disappeared.
For more details about node version, see https://github.com/withastro/astro/issues/9345#issuecomment-1870663966 .

I have the same issue, except it only crashes on Android, not iOS, e.g.
npx capacitor-assets generate --android
fails, but
npx capacitor-assets generate --ios works
@knaito-asial how did you upgrade sharp?
I did
npm install sharp
but that produced a new installation of sharp, rather than updating the one under node_modules/<EMAIL_ADDRESS>I then copied the new sharp directory into the capacitor/assets/node_modules/sharp directory, but neither of those fixed the segmentation fault...
My ionic info in case relevant:
Ionic:
Ionic CLI                     : 7.2.0 (/Users/markwatkins/.nvm/versions/node/v20.14.0/lib/node_modules/@ionic/cli)
Ionic Framework               : @ionic/angular 7.8.6
@angular-devkit/build-angular : 16.2.14
@angular-devkit/schematics    : 16.2.14
@angular/cli                  : 16.2.14
@ionic/angular-toolkit        : 9.0.0
Capacitor:
Capacitor CLI      : 6.0.0
@capacitor/android : 6.0.0
@capacitor/core    : 6.0.0
@capacitor/ios     : 6.0.0
Utility:
cordova-res : not installed globally
native-run  : 2.0.1
System:
NodeJS : v20.14.0 (/Users/markwatkins/.nvm/versions/node/v20.14.0/bin/node)
npm    : 10.7.0
OS     : macOS Unknown

This is still an issue, sharp dependency needs updated

Updating sharp to latests fixes this issue

Same problem here. When running capacitor-assets generate --android on a github self hosted run it causes a Segmentation fault: 11 issue. This seems like a executable error with capacitor-assets and the runner since the script is trying to access some temp folders which are not permitted. @mlynch this is why its hard to reproduce localy. :)

Hi @hardcorelite version 2.0.4 of what? If you mean capacitor-assets i use version 3.0.5 still facing the issue


Ensure that attempt to remove instance and SSH key both go through

Signed-off-by: Nathan LeClaire<EMAIL_ADDRESS>

@tianon @dgageot  What do you think about this? I tried to test it by deleting the instance but not the SSH key pair before attempting docker-machine rm and it seemed to work, but it also didn't spit any error message back at me, so I suspect the conditions resulting in dangling SSH keys might be slightly more difficult to track down.

If the terminate fails for some reason (lack of network connection, etc), wouldn't this mean that our SSH key is now gone and we have no way of accessing the VM anymore?

@tianon Indeed, but if you're requesting docker-machine rm, that instance is as good as gone to the user anyway, right?

So, to me it sort of seems like expecting to be able to salvage deleted files if UNIX rm were to fail for some reason.

Yeah, that's fair -- that makes me wonder what rm's behavior is when it comes across a failure halfway through a recursive rm. :smile:

Well, that answers that:
$ mkdir -p a/b/c
$ mkdir -p e/f/g
$ mkdir -p h/i/j
$ sudo chown -R root:root e
$ rm -rf a e h
rm: cannot remove ‘e/f/g’: Permission denied
$ find
.
./e
./e/f
./e/f/g
$

LGTM :+1:

Nice

Yeah, that's fair -- that makes me wonder what rm's behavior is when it comes across a failure halfway through a recursive rm. :smile:

It doesn't just print "Oops" to STDERR and exit 1?