MacOS 10.15 can't build rust build

Trying to build the benchpress-rs when installing benchpressjs and it fails to build the binary, reverting to compiling with js.
Versions installed:
rustc - 1.42.0 (installed via homebrew)
python - 2.7.16
neon - 0.4.0
npm - 6.14.4
node - 12.16.2 (tried latest 8, 10 & 12)
build.log:
neon info forcing rebuild for new build settings
neon info running cargo
   Compiling memchr v2.3.2
   Compiling lazy_static v1.4.0
   Compiling regex-syntax v0.6.14
   Compiling cc v1.0.41
   Compiling neon-build v0.3.1
   Compiling either v1.5.0
   Compiling semver-parser v0.7.0
   Compiling json v0.12.1
   Compiling cslice v0.2.0
   Compiling thread_local v1.0.1
   Compiling neon v0.3.1
   Compiling benchpress-rs v0.1.0 (/path/to/nodebb/node_modules/benchpressjs/rust/benchpress-rs/native)
   Compiling itertools v0.8.2
   Compiling semver v0.9.0
   Compiling aho-corasick v0.7.8
   Compiling regex v1.3.4
   Compiling benchpress_sys v0.1.0 (/path/to/nodebb/node_modules/benchpressjs/rust/benchpress-rs/benchpress_sys)
   Compiling neon-runtime v0.3.1
error: linking with `cc` failed: exit code: 1
  |
  = note: "cc" "-m64" "-L" "/usr/local/Cellar/rust/1.42.0/lib/rustlib/x86_64-apple-darwin/lib" "/path/to/nodebb/node_modules/benchpressjs/rust/benchpress-rs/native/target/release/deps/benchpress_rs.benchpress_rs.77rml78k-cgu.0.rcgu.o" "/path/to/nodebb/node_modules/benchpressjs/rust/benchpress-rs/native/target/release/deps/benchpress_rs.benchpress_rs.77rml78k-cgu.1.rcgu.o" "/path/to/nodebb/node_modules/benchpressjs/rust/benchpress-rs/native/target/release/deps/benchpress_rs.benchpress_rs.77rml78k-cgu.10.rcgu.o" "/path/to/nodebb/node_modules/benchpressjs/rust/benchpress-rs/native/target/release/deps/benchpress_rs.benchpress_rs.77rml78k-cgu.11.rcgu.o" "/path/to/nodebb/node_modules/benchpressjs/rust/benchpress-rs/native/target/release/deps/benchpress_rs.benchpress_rs.77rml78k-cgu.12.rcgu.o" "/path/to/nodebb/node_modules/benchpressjs/rust/benchpress-rs/native/target/release/deps/benchpress_rs.benchpress_rs.77rml78k-cgu.13.rcgu.o" "/path/to/nodebb/node_modules/benchpressjs/rust/benchpress-rs/native/target/release/deps/benchpress_rs.benchpress_rs.77rml78k-cgu.14.rcgu.o" "/path/to/nodebb/node_modules/benchpressjs/rust/benchpress-rs/native/target/release/deps/benchpress_rs.benchpress_rs.77rml78k-cgu.15.rcgu.o" "/path/to/nodebb/node_modules/benchpressjs/rust/benchpress-rs/native/target/release/deps/benchpress_rs.benchpress_rs.77rml78k-cgu.2.rcgu.o" "/path/to/nodebb/node_modules/benchpressjs/rust/benchpress-rs/native/target/release/deps/benchpress_rs.benchpress_rs.77rml78k-cgu.3.rcgu.o" "/path/to/nodebb/node_modules/benchpressjs/rust/benchpress-rs/native/target/release/deps/benchpress_rs.benchpress_rs.77rml78k-cgu.4.rcgu.o" "/path/to/nodebb/node_modules/benchpressjs/rust/benchpress-rs/native/target/release/deps/benchpress_rs.benchpress_rs.77rml78k-cgu.5.rcgu.o" "/path/to/nodebb/node_modules/benchpressjs/rust/benchpress-rs/native/target/release/deps/benchpress_rs.benchpress_rs.77rml78k-cgu.6.rcgu.o" "/path/to/nodebb/node_modules/benchpressjs/rust/benchpress-rs/native/target/release/deps/benchpress_rs.benchpress_rs.77rml78k-cgu.7.rcgu.o" "/path/to/nodebb/node_modules/benchpressjs/rust/benchpress-rs/native/target/release/deps/benchpress_rs.benchpress_rs.77rml78k-cgu.8.rcgu.o" "/path/to/nodebb/node_modules/benchpressjs/rust/benchpress-rs/native/target/release/deps/benchpress_rs.benchpress_rs.77rml78k-cgu.9.rcgu.o" "-o" "/path/to/nodebb/node_modules/benchpressjs/rust/benchpress-rs/native/target/release/deps/libbenchpress_rs.dylib" "-Wl,-exported_symbols_list,/var/folders/zd/82jnxxpj5gbgjfp6lggy_lz5xn0_6q/T/rustcESSCHP/list" "/path/to/nodebb/node_modules/benchpressjs/rust/benchpress-rs/native/target/release/deps/benchpress_rs.4oylf5bnuuwul4hh.rcgu.o" "-Wl,-dead_strip" "-nodefaultlibs" "-L" "/path/to/nodebb/node_modules/benchpressjs/rust/benchpress-rs/native/target/release/deps" "-L" "/path/to/nodebb/node_modules/benchpressjs/rust/benchpress-rs/native/target/release/build/neon-runtime-07ef246a1c1568ef/out" "-L" "/usr/local/Cellar/rust/1.42.0/lib/rustlib/x86_64-apple-darwin/lib" "/path/to/nodebb/node_modules/benchpressjs/rust/benchpress-rs/native/target/release/deps/libneon-a1255b6689a3c43e.rlib" "/path/to/nodebb/node_modules/benchpressjs/rust/benchpress-rs/native/target/release/deps/libsemver-fe190c1b53367c4d.rlib" "/path/to/nodebb/node_modules/benchpressjs/rust/benchpress-rs/native/target/release/deps/libsemver_parser-ce1d91984306bc84.rlib" "/path/to/nodebb/node_modules/benchpressjs/rust/benchpress-rs/native/target/release/deps/libcslice-ed3d084ca559ddda.rlib" "/path/to/nodebb/node_modules/benchpressjs/rust/benchpress-rs/native/target/release/deps/libneon_runtime-c2aaf52cfe0ee31d.rlib" "/path/to/nodebb/node_modules/benchpressjs/rust/benchpress-rs/native/target/release/deps/libbenchpress_sys-1fc9abcecb084a85.rlib" "/path/to/nodebb/node_modules/benchpressjs/rust/benchpress-rs/native/target/release/deps/libjson-edded06a7f6eab27.rlib" "/path/to/nodebb/node_modules/benchpressjs/rust/benchpress-rs/native/target/release/deps/libitertools-fd4785c8b0b42838.rlib" "/path/to/nodebb/node_modules/benchpressjs/rust/benchpress-rs/native/target/release/deps/libeither-29de4c47020026c4.rlib" "/path/to/nodebb/node_modules/benchpressjs/rust/benchpress-rs/native/target/release/deps/libregex-8931f2639ad314c6.rlib" "/path/to/nodebb/node_modules/benchpressjs/rust/benchpress-rs/native/target/release/deps/libthread_local-9c739dbc1c9762c7.rlib" "/path/to/nodebb/node_modules/benchpressjs/rust/benchpress-rs/native/target/release/deps/libregex_syntax-435b53b814759f9e.rlib" "/path/to/nodebb/node_modules/benchpressjs/rust/benchpress-rs/native/target/release/deps/libaho_corasick-1ef26f493bcb73c7.rlib" "/path/to/nodebb/node_modules/benchpressjs/rust/benchpress-rs/native/target/release/deps/libmemchr-0114f282056375bc.rlib" "/path/to/nodebb/node_modules/benchpressjs/rust/benchpress-rs/native/target/release/deps/liblazy_static-40a8dbb5a45d4dfc.rlib" "/usr/local/Cellar/rust/1.42.0/lib/rustlib/x86_64-apple-darwin/lib/libstd-5ac8d8d4e885e7ea.rlib" "/usr/local/Cellar/rust/1.42.0/lib/rustlib/x86_64-apple-darwin/lib/libpanic_unwind-31a317cba2ea608f.rlib" "/usr/local/Cellar/rust/1.42.0/lib/rustlib/x86_64-apple-darwin/lib/libhashbrown-e663228b3a72c3b4.rlib" "/usr/local/Cellar/rust/1.42.0/lib/rustlib/x86_64-apple-darwin/lib/librustc_std_workspace_alloc-c3e3d519896c561c.rlib" "/usr/local/Cellar/rust/1.42.0/lib/rustlib/x86_64-apple-darwin/lib/libbacktrace-00000d459680f741.rlib" "/usr/local/Cellar/rust/1.42.0/lib/rustlib/x86_64-apple-darwin/lib/libbacktrace_sys-330d49dc0aa2c735.rlib" "/usr/local/Cellar/rust/1.42.0/lib/rustlib/x86_64-apple-darwin/lib/librustc_demangle-11aa2caed781b665.rlib" "/usr/local/Cellar/rust/1.42.0/lib/rustlib/x86_64-apple-darwin/lib/libunwind-96408568c54b6ec7.rlib" "/usr/local/Cellar/rust/1.42.0/lib/rustlib/x86_64-apple-darwin/lib/libcfg_if-7040b9a0b1863285.rlib" "/usr/local/Cellar/rust/1.42.0/lib/rustlib/x86_64-apple-darwin/lib/liblibc-fc91fd6650ffc137.rlib" "/usr/local/Cellar/rust/1.42.0/lib/rustlib/x86_64-apple-darwin/lib/liballoc-ad887e9bb97552e0.rlib" "/usr/local/Cellar/rust/1.42.0/lib/rustlib/x86_64-apple-darwin/lib/librustc_std_workspace_core-eeb8c307d85bc5f1.rlib" "/usr/local/Cellar/rust/1.42.0/lib/rustlib/x86_64-apple-darwin/lib/libcore-e7605d10d7a7abee.rlib" "/usr/local/Cellar/rust/1.42.0/lib/rustlib/x86_64-apple-darwin/lib/libcompiler_builtins-4acd3cb9a43668af.rlib" "-lSystem" "-lresolv" "-lc" "-lm" "-dynamiclib" "-Wl,-dylib"
  = note: Undefined symbols for architecture x86_64:
            "v8::External::New(v8::Isolate*, void*)", referenced from:
                _Neon_Fun_New in libneon_runtime-c2aaf52cfe0ee31d.rlib(neon.o)
            "v8::Function::New(v8::Local<v8::Context>, void (*)(v8::FunctionCallbackInfo<v8::Value> const&), v8::Local<v8::Value>, int, v8::ConstructorBehavior, v8::SideEffectType)", referenced from:
                _Neon_Fun_New in libneon_runtime-c2aaf52cfe0ee31d.rlib(neon.o)
            "v8::EscapableHandleScope::EscapableHandleScope(v8::Isolate*)", referenced from:
                _Neon_Convert_ToString in libneon_runtime-c2aaf52cfe0ee31d.rlib(neon.o)
            "v8::V8::ToLocalEmpty()", referenced from:
                _Neon_Error_ThrowErrorFromUtf8 in libneon_runtime-c2aaf52cfe0ee31d.rlib(neon.o)
            "v8::EscapableHandleScope::Escape(unsigned long*)", referenced from:
                _Neon_Convert_ToString in libneon_runtime-c2aaf52cfe0ee31d.rlib(neon.o)
            "v8::Value::ToString(v8::Local<v8::Context>) const", referenced from:
                _Neon_Convert_ToString in libneon_runtime-c2aaf52cfe0ee31d.rlib(neon.o)
            "v8::String::Utf8Length(v8::Isolate*) const", referenced from:
                _Neon_String_Utf8Length in libneon_runtime-c2aaf52cfe0ee31d.rlib(neon.o)
            "node::DecodeWrite(v8::Isolate*, char*, unsigned long, v8::Local<v8::Value>, node::encoding)", referenced from:
                _Neon_String_Data in libneon_runtime-c2aaf52cfe0ee31d.rlib(neon.o)
            "v8::String::NewFromUtf8(v8::Isolate*, char const*, v8::NewStringType, int)", referenced from:
                _Neon_Object_Set_String in libneon_runtime-c2aaf52cfe0ee31d.rlib(neon.o)
                _Neon_String_New in libneon_runtime-c2aaf52cfe0ee31d.rlib(neon.o)
                _Neon_Error_ThrowErrorFromUtf8 in libneon_runtime-c2aaf52cfe0ee31d.rlib(neon.o)
            "v8::Exception::TypeError(v8::Local<v8::String>)", referenced from:
                _Neon_Error_NewTypeError in libneon_runtime-c2aaf52cfe0ee31d.rlib(neon.o)
            "v8::HandleScope::HandleScope(v8::Isolate*)", referenced from:
                _Neon_Object_Set_String in libneon_runtime-c2aaf52cfe0ee31d.rlib(neon.o)
                _Neon_Scope_Enter in libneon_runtime-c2aaf52cfe0ee31d.rlib(neon.o)
                _Neon_Error_ThrowErrorFromUtf8 in libneon_runtime-c2aaf52cfe0ee31d.rlib(neon.o)
            "v8::Isolate::GetCurrentContext()", referenced from:
                _Neon_Object_Set_String in libneon_runtime-c2aaf52cfe0ee31d.rlib(neon.o)
                _Neon_Convert_ToString in libneon_runtime-c2aaf52cfe0ee31d.rlib(neon.o)
                _Neon_Fun_New in libneon_runtime-c2aaf52cfe0ee31d.rlib(neon.o)
            "v8::Exception::Error(v8::Local<v8::String>)", referenced from:
                _Neon_Error_ThrowErrorFromUtf8 in libneon_runtime-c2aaf52cfe0ee31d.rlib(neon.o)
            "v8::Object::Set(v8::Local<v8::Context>, v8::Local<v8::Value>, v8::Local<v8::Value>)", referenced from:
                _Neon_Object_Set_String in libneon_runtime-c2aaf52cfe0ee31d.rlib(neon.o)
            "v8::External::Value() const", referenced from:
                _Neon_Fun_GetDynamicCallback in libneon_runtime-c2aaf52cfe0ee31d.rlib(neon.o)
            "v8::HandleScope::~HandleScope()", referenced from:
                _Neon_Object_Set_String in libneon_runtime-c2aaf52cfe0ee31d.rlib(neon.o)
                _Neon_Scope_Exit in libneon_runtime-c2aaf52cfe0ee31d.rlib(neon.o)
                _Neon_Error_ThrowErrorFromUtf8 in libneon_runtime-c2aaf52cfe0ee31d.rlib(neon.o)
            "v8::Isolate::ThrowException(v8::Local<v8::Value>)", referenced from:
                _Neon_Error_Throw in libneon_runtime-c2aaf52cfe0ee31d.rlib(neon.o)
                _Neon_Error_ThrowErrorFromUtf8 in libneon_runtime-c2aaf52cfe0ee31d.rlib(neon.o)
            "v8::HandleScope::~HandleScope()", referenced from:
                _Neon_Convert_ToString in libneon_runtime-c2aaf52cfe0ee31d.rlib(neon.o)
            "v8::Isolate::GetCurrent()", referenced from:
                _Neon_Call_CurrentIsolate in libneon_runtime-c2aaf52cfe0ee31d.rlib(neon.o)
                _Neon_Object_Set_String in libneon_runtime-c2aaf52cfe0ee31d.rlib(neon.o)
                _Neon_String_Utf8Length in libneon_runtime-c2aaf52cfe0ee31d.rlib(neon.o)
                _Neon_String_Data in libneon_runtime-c2aaf52cfe0ee31d.rlib(neon.o)
                _Neon_Convert_ToString in libneon_runtime-c2aaf52cfe0ee31d.rlib(neon.o)
                _Neon_Error_Throw in libneon_runtime-c2aaf52cfe0ee31d.rlib(neon.o)
                _Neon_Error_ThrowErrorFromUtf8 in libneon_runtime-c2aaf52cfe0ee31d.rlib(neon.o)
                ...
            "_node_module_register", referenced from:
                benchpress_rs::__LOAD_NEON_MODULE::__load_neon_module::h8cdba572bd1997c7 in benchpress_rs.benchpress_rs.77rml78k-cgu.4.rcgu.o
          ld: symbol(s) not found for architecture x86_64
          clang: error: linker command failed with exit code 1 (use -v to see invocation)

error: aborting due to previous error

error: could not compile `benchpress-rs`.

To learn more, run the command again with --verbose.
neon ERR! cargo build failed

Error: cargo build failed
    at Target.<anonymous> (/path/to/nodebb/node_modules/benchpressjs/rust/benchpress-rs/node_modules/neon-cli/lib/target.js:121:35)
    at step (/path/to/nodebb/node_modules/benchpressjs/rust/benchpress-rs/node_modules/neon-cli/lib/target.js:32:23)
    at Object.next (/path/to/nodebb/node_modules/benchpressjs/rust/benchpress-rs/node_modules/neon-cli/lib/target.js:13:53)
    at fulfilled (/path/to/nodebb/node_modules/benchpressjs/rust/benchpress-rs/node_modules/neon-cli/lib/target.js:4:58)
    at processTicksAndRejections (internal/process/task_queues.js:97:5)

I'm out of ideas what to change to get it to build as I've tried uninstalling/reinstalling rust/node/neon to multiple different versions.

I had the same issue with the literally the exact same setup. I think the issue is with the crate versions for neon-build and neon. Upgrading the versions of both fixed the compilation error (upgrade to at least 0.3.3 I think). It might be related to this issue.

I managed to get this working earlier today. I hacked the Cargo.toml file in the benchpress-rs/native folder and updated [build-dependancies] for neon-build to 0.4.0. It compiles okay now.
When you say 'upgrading' do you mean upgrading neon tools? as that was already @ 0.4.0. Or do you mean upgrading the library similar to my modifications?
I also updated the [dependancies] for neon to 0.4.0 although that seemed more logical to keep them in the same version, but it worked without that modification either way.

Oh nice. Yeah meant the crate versions in the toml file specifically.

I had the same issue with the literally the exact same setup. I think the issue is with the crate versions for neon-build and neon. Upgrading the versions of both fixed the compilation error (upgrade to at least 0.3.3 I think). It might be related to this issue.

I looked at that issue multiple times - but not really having much understanding of rust I couldn't sort it out. What's odd is the differences between the cli tool version and then the dependancies versions don't seem to be linked. That issue you reference even says someone went to<EMAIL_ADDRESS>which resolved the issue for them which seems confusing to me as the issue states you need 0.3.2 for it to work? I guess the tools and the library are just different but it's unfortunate that the versions numbers are similar confusing matters?

Yeah idk. I guess the cli tool might have different versioning or can get out of sync from the rust creates. Definitely a weird quark.

I'll bump the rust dependencies including neon this week. Thanks for figuring it out, as I do not have a Mac.

All good, glad I could help! What really threw me was when I got finally it compiling it was slower than the JS version! I wasn't using --release and after adding it to the compile the rust version sped up about 4-5 times. I haven't seen the 30x speed increase over the JS, but it's certainly faster (~15s down to 5.5s) to build templates in NodeBB.

The actual build times are dominated by uglify minifying the generated js module templates. Which is why you don't see the 30x increase.

I've updated dependencies to latest in 2.0.3, so that should now work


Performed some minor cleanup

Used gofmt cleanup + turned some constants into CLI params.

This was folded into #357.


Curious about the Messagebus / Queue plan

Is your feature request related to a problem? Please describe.
I would be curious what the Ideas  around MessageBus / Queues are.
I did a dirty hack for my project to add an event emitter to the EventStore in order to listen to events and then put them on a queue.
But I think having an abstract interface like for the eventStoreStorage makes probably more sense. So curious on what the ideas around that are, and whether I can help.
Describe alternatives you've considered
import Emittery from 'emittery'
import type {
    $Contravariant,
    Aggregate,
    EventDetail,
    EventType,
    EventTypesDetails,
    Reducer,
} from '@castore/core'
import { EventStore as BaseEventStore } from '@castore/core'

export class EventStore<
    I extends string = string,
    E extends EventType[] = EventType[],
    D extends EventDetail = EventTypesDetails<E>,
    // cf https://devblogs.microsoft.com/typescript/announcing-typescript-4-7-rc/#optional-variance-annotations-for-type-parameters
    // EventStore is contravariant on its fns args: We have to type them as "any" so that EventStore implementations still extends the EventStore type
    $D extends EventDetail = $Contravariant<D, EventDetail>,
    R extends Reducer<Aggregate, $D> = Reducer<Aggregate, $D>,
    A extends Aggregate = ReturnType<R>,
    $A extends Aggregate = $Contravariant<A, Aggregate>
> extends BaseEventStore<I, E, D, $D, R, A, $A> {
    emitter: Emittery
    constructor(...args: ConstructorParameters<typeof BaseEventStore<I, E, D, $D, R, A, $A>>) {
        super(...args)
        this.emitter = new Emittery()

        const originalPushEvent = this.pushEvent
        this.pushEvent = async (event: $D) => {
            await originalPushEvent(event)
            await this.emit(event)
        }
    }

    on<EventType extends E[number]>(
        eventName: EventType['type'],
        listener: (event: EventDetail<EventType>) => Promise<void>
    ) {
        this.emitter.on(eventName, listener)
        return () => this.emitter.off(eventName, listener)
    }

    emit<EventType extends E[number]>(event: EventDetail<EventType>) {
        return this.emitter.emit(event.type, event)
    }
}

Hello @KeKs0r !
Message queues and buses are now a thing in Castore 🥳 With adapters for SQS, Event-bridge and in-memory solutions (I used fastq for queues and native EventEmitters for buses). Check the docs: https://github.com/castore-dev/castore#--event-driven-architecture
Can't wait to hear your feedbacks :)
I think it would make sense for event stores to be seamlessly connected to notification message buses & queues 🤔 Actually it could be done through the adapter:
const myEventStore = new EventStore({
  eventStorageAdapter: withMessageQueue(new InMemoryEventStorageAdapter(...), new NotificationMessageQueue(...))
})

Or we could also provide "destination" attributes:
const myEventStore = new EventStore({
  eventStorageAdapter: ...,
  destinationMessageQueue: new NotificationMessageQueue(...)
})

What do you think?

Hi @KeKs0r !
Just published a new version with a new class: ConnectedEventStores. I hope that this, along with the InMemoryMessageBusAdapter, will match your needs!
Closing this issue right now :)


Azure pipelines fail when a proto field is modified in a PR

Title: Azure pipelines fail when a proto field is modified in a PR
Description:
When a proto field is modified via incremental commits in a single PR, the Azure pipelines fail.
Repro steps:
1. Create a PR with a change in the api/ protos. The first change should add a new field to a proto.
2. Add another commit to the PR by modifying the type of the same field. This should cause the Azure pipelines to fail and exit with the following error.
Bash exited with code '1'.

Logs:
Here's the log from PR #8226.
envoy/api/v2/cds.proto:703:34: Field number 42 has already been used in "envoy.api.v2.Cluster" by field "dns_failure_refresh_rate".

Lets discuss in the PR in question for now.


Why concatenate membership degree of features with the original features as the input of the decision tree?

Hi, sir, thanks for your work! After reading your sample code, I found that you concatenate the membership degree features together with the original features as the training data of the decision tree.
X, y = datasets.load_wine(return_X_y=True)

# X = X[:, 1:2]

# 2. Preprocess the dataset.
# 2.1. Do fuzzification preprocessing.
X_fuzzy_pre = X.copy()
fuzzification_options = FuzzificationOptions(n_conv=5)

# Extract fuzzy features in feature fuzzification to generate degree of membership sets of each feature.
X_dms = extract_fuzzy_features(X_fuzzy_pre, n_conv=fuzzification_options.n_conv)
X_plus_dms = np.concatenate((X, X_dms), axis=1)

# 2.2. Do your other data preprocessing, e.g. identifying the feature values and target values, processing the missing values, etc.

# 3. Partition the dataset.
X_train_f, X_test_f, y_train_f, y_test_f = train_test_split(X_plus_dms, y, test_size=0.3, random_state=22)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=22)

The shape of X is [178, 13], the shape of X_dms is [178, 65] ( 65 = 13 * n_conv), and the shape of X_plus_dms is [178, 78] (78 = 13 + 65). May I ask why did you use these two kinds of features to train a tree? Also, I changed the test data splitting ratio to 0.3, the structures of the trained fuzzy decision tree and non-fuzzy decision tree were almost identical, as you can see :
====================================================================================================
12:770.0?
  True-->5:2.2?
    True=>0:12.85?
        True=>0.0
        False=>1.0
    False=>1:2.56?
        True=>2.0
        False=>1.0
  False-->9:4.9?
    True=>6:1.41?
        True=>1.0
        False=>2.0
    False=>6:0.99?
        True=>2:2.87?
                True=>0.0
                False=>1.0
        False=>2.0
========================================================================================
12:770.0?
  True-->5:2.2?
    True=>0:12.85?
        True=>0.0
        False=>1.0
    False=>1:2.56?
        True=>2.0
        False=>1.0
  False-->9:4.9?
    True=>6:1.41?
        True=>1.0
        False=>2.0
    False=>2:2.87?
        True=>0.0
        False=>6:0.99?
                True=>1.0
                False=>2.0
========================================================================================
Fuzzy model's accuracy is: 0.87037037037
Non-fuzzy model's accuracy is: 0.87037037037
========================================================================================

Process finished with exit code 0

The printed tree structure indicates that the top-level node indices of both fuzzy and non-fuzzy decision trees are 12, 5, 0, 1 ... which in the range from 0 to 12, means the trees are mainly constructed on the origin features, not fuzzy membership degree features.  Is there any problem with this? If I'm wrong, please correct me.
This is my code:
from fuzzytrees.fdt_base import FuzzificationOptions, FuzzyDecisionTreeWrapper, CRITERIA_FUNC_CLF
from fuzzytrees.fdts import FuzzyCARTClassifier
from fuzzytrees.util_preprocessing_funcs import extract_fuzzy_features
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import numpy as np
from sklearn import tree

X, y = datasets.load_wine(return_X_y=True)

# 2. Preprocess the dataset.
# 2.1. Do fuzzification preprocessing.
X_fuzzy_pre = X.copy()
fuzzification_options = FuzzificationOptions(n_conv=5)

# Extract fuzzy features in feature fuzzification to generate degree of membership sets of each feature.
X_dms = extract_fuzzy_features(X_fuzzy_pre, n_conv=fuzzification_options.n_conv)
X_plus_dms = np.concatenate((X, X_dms), axis=1)

# 2.2. Do your other data preprocessing, e.g. identifying the feature values and target values, processing the missing values, etc.

# 3. Partition the dataset.
X_train_f, X_test_f, y_train_f, y_test_f = train_test_split(X_plus_dms, y, test_size=0.3, random_state=22)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=22)

# 4. Train the models.
# 4.1. Using a fuzzy classifier (You can customise the arguments in your constructor and their default values).
fclf = FuzzyDecisionTreeWrapper(fdt_class=FuzzyCARTClassifier, disable_fuzzy=False,
                                fuzzification_options=fuzzification_options,
                                criterion_func=CRITERIA_FUNC_CLF["gini"], max_depth=5)
fclf.fit(X_train_f, y_train_f)

# 4.2. Using a non-fuzzy classifier (You can customise the arguments in your constructor and their default values).
clf = FuzzyDecisionTreeWrapper(fdt_class=FuzzyCARTClassifier, disable_fuzzy=True,
                               criterion_func=CRITERIA_FUNC_CLF["gini"], max_depth=5)
clf.fit(X_train, y_train)

# 5. Look at the models.
# 5.1. Look at the fuzzy model.
fclf.print_tree()

print("========================================================================================")
# 5.2. Look at the non-fuzzy model.
clf.print_tree()

print("========================================================================================")
# 6. Evaluate the models.
# 6.1. Evaluate the fuzzy model.
y_pred_f = fclf.predict(X_test_f)
acc_f = accuracy_score(y_test_f, y_pred_f)
print("Fuzzy model's accuracy is:", acc_f)

# 6.2. Evaluate the non-fuzzy model.
y_pred = clf.predict(X_test)
acc = accuracy_score(y_test, y_pred)
print("Non-fuzzy model's accuracy is:", acc)

# 6.3. Do your other evaluations.
print("========================================================================================")

Hi, Neron,
All membership degrees are used to calculate the split criteria in the induction, while the original features are retained to meet interpretability requirements. However, you could build different fuzzy decision trees based on other fuzzification and de-fuzzification techniques .
Kind regards,
Zhaoqing Liu


Allow to run E2E tests over tailscale network with a Personal Token

In what area(s)?

/area runtime

/area operator

/area placement

/area docs

/area test-and-release
The original issue is the #4962. However it stills on hold because of this.
I'm creating a new issue to address the possibility of executing the tests using the tailscale subnet router but using their personal keys.

/assign


Cosmetic updates

Update layout of main menu by extracting the label from the overviews.
Extract labels from overview so we have nice crisp text instead of rendered text. (Also simplifies the Overview views as well)
Add padding and rounded corners to chart images, looks nicer in dark mode.
Update scatter chart to show symbols, looks better with different symbols.
Rename the test file to ChartScreenshotGenerator.
Reduce the height of the One dimension bar for added realism.
Update the Image renderer to use uiImage renditions instead of cgImage only to convert it to UIImage.
Add gradients to charts to make them pop.

Before
After

Maybe we can make the backgrounds of the chart images on the overview darker in dark mode instead of always setting the background to white?

Great suggestion, now that the title is outside of the preview, we can make them translucent again, supporting both light and dark modes dynamically.
https://user-images.githubusercontent.com/16542463/174431075-c79fa5a5-91df-4df6-8872-fc24652245c7.mp4

Radar: FB10335209


Anti entity Fly/Speed

Also added ginkgoch-buffer-io to deps (used for decode MoveActorAbsolute Packet)

You are currently made a pull request to bdsx.
so, if bdsx will merge use that event handler
I cannot merge it now cause procHacker looks not good

there's a conflicts,
and please dispose() after allocate.
It will use memory

is there dispose() for BlockPos object?

fixed


Add CI auto-build

Add CI auto-build:

Done in test/build directory using esbuild
Whenever you create a new release in https://github.com/FiloSottile/typage/releases (takes 5 secs), it will auto-build age.js and upload it there
No additional setup required

Lock CI action commits:

Prevents supply chain attacks when git tag is replaced with another commit

Compared to 0.1.5, it's now 19x smaller:

age-0.1.5.js: 1.46MB

minified: 963.3KB
minified + gzipped: 299.74KB

age-noble.js: 77.73KB

minified: 38.5KB
minified + gzipped: 13.93KB

Thank you! No need to lock the versions in the test Actions, they have
permissions:
  contents: read

and I set the default to read-only, too.

About the esbuild release artifact, can you help me understand what/how downstream users use it? The README has an example for creating a file that sets a global variable. This instead would be an ES module, right? It's for use as a <script type="module">?

The end-result would look like one in here: https://github.com/paulmillr/noble-curves/releases/tag/1.4.2
It has global variable "age".
Which means it would be for plain classic <script src="..."></script>, not script type module. But it could probably be used with modules as well.

I also usually do releasing using CI: publish-npm.yml
It will build the package and upload it to NPM, using transparency logs. This would require adding NPM_TOKEN to the repository.

Thank you! I went for something similar (I do this a lot) based on your PR. Main differences are using two build stages to drop privileges in the one that runs esbuild (and to always upload an artifact for debugging and to notice breakages even if it's not a release), and avoiding the separate package.json.
Opening an issue for NPM publishing, I would definitely like not to have this bearer token sitting around.


Fixed issue with initializing deterministic ECDSASigner.

From @stevenroose on June 25, 2014 13:30
Copied from original issue: izaera/cipher/pull/85

Is there a reason this is not merged?

From @izaera on November 26, 2014 7:29
Let me have a look at it because I'm now engaged in other project. I think the last time I saw it I decided not to merge it because I'm refactoring all algorithm construction and initalization.
I'll push the development branch where I'm doing the refactor so that you can have a look at it. Mainly I'm trying to make all construction/initialization the same and I'm removing all parameter classes in favour of typed hash maps. That makes initialization look much simpler, reduces the need for documentation, allows serialization of algorithms, makes reset() much more predictable, and reduces the documentation needed too.

From @izaera on November 26, 2014 19:14
OK. This is the branch: https://github.com/izaera/cipher/tree/devel-wip
You can have a look at what I'm planning in (f.e.) https://github.com/izaera/cipher/blob/devel-wip/test/paddings/padded_block_cipher_test.dart
The idea is to pass all params in a map with defined keys (those starting with Param.). Param.Chain is a special key to be able to pass different parameters to different algorithms in a chain of, say, a padding, plush a block mode plus a block cipher.
The parameters are passed in construction and cannot be modified. This way, whenever you call reset() the algorithm is for sure at its initial state. Also, it's very easy to serialize algorithms because their configurtion is immutable. This also fixes the issue with ParametersWithRandom, which was not serializable.
I have also removed the entropy generators (they will go in another project), so there's no distinction between client and server any more, and the initialization is far easier.
Have a look and tell me what you think.
I'm not yet sure if I'm going to release v1.0 with these changes or if I'll stabilize v1.0 with the current scheme and move on to v2.0 with the modifications. Also note that I'll diverge from BouncyCastle, because Dart is not a static language like Java, and there are some things that don't make too much sense (for example, the CipherParameters).

Overall, parameter passing this way, looks a lot better than with
specialized classes. There is one thing that bothers me a little, though.
The Param class is global for all parts of cipher. This means there is no
way to know what parameters a class expects.
I'd suggest to use inner classes, however I know Dart does not support them
(yet) https://code.google.com/p/dart/issues/detail?id=3755, and define a
Param class inside each algorithm so that a PaddedBlockCipher will accept
PaddedBlockCipher.Param.XXX params and BlockCipher.XXX params as
PaddedBlockCipher.Param extends BlockCipher.Param.
I've recently been doing something similar with event publishing. In Java,
a popular strategy is to define an MyEmitter.events<> class and several
MyEmitter.OnSomeEvent classes that are used to identify
events. This way, it is easy to know what events a class emits and what
types of metadata accompany the events.
But as long as Dart does not support inner classes, this is not possible to
do it this way.
How did you plan to indicate what parameters are accepted by an
implementation? All in the documentation?
On Wed, Nov 26, 2014 at 8:14 PM, Ivan Zaera<EMAIL_ADDRESS>wrote:

OK. This is the branch: https://github.com/izaera/cipher/tree/devel-wip
You can have a look at what I'm planning in (f.e.)
https://github.com/izaera/cipher/blob/devel-wip/test/paddings/padded_block_cipher_test.dart
The idea is to pass all params in a map with defined keys (those starting
with Param.). Param.Chain is a special key to be able to pass different
parameters to different algorithms in a chain of, say, a padding, plush a
block mode plus a block cipher.
The parameters are passed in construction and cannot be modified. This
way, whenever you call reset() the algorithm is for sure at its initial
state. Also, it's very easy to serialize algorithms because their
configurtion is immutable. This also fixes the issue with
ParametersWithRandom, which was not serializable.
I have also removed the entropy generators (they will go in another
project), so there's no distinction between client and server any more, and
the initialization is far easier.
Have a look and tell me what you think.
I'm not yet sure if I'm going to release v1.0 with these changes or if
I'll stabilize v1.0 with the current scheme and move on to v2.0 with the
modifications. Also note that I'll diverge from BouncyCastle, because Dart
is not a static language like Java, and there are some things that don't
make too much sense (for example, the CipherParameters).
—
Reply to this email directly or view it on GitHub
https://github.com/izaera/cipher/pull/85#issuecomment-64696639.

From @izaera on November 27, 2014 9:15
I tried to go that way in my first attempt. The problem is that some
parameters may be shared among several algorithms when you chain them.
For example, if you chain a MAC and a BlockCipher, they normally use the
same key, so you want to have just one Param.Key in your hashmap when
you configure the chain.
Thus, I created Param for well known parameters and let the possibility
of extending it for more specific parameters (I think that I have a
Pbkdf2Param class for example with parameters specific to that algorithm).
Also, having many usual params in Param makes autocompletion easier for
new users of cipher, because you just need to type Param. and the IDE
shows you the more usual options.
Regarding how to document used params, I planned to use plain
documentation (as they do in Javascript). In the end, it's not so bad,
because you wouldn't even need to look at the documentation at all. I
mean, its implicit in every algorithm which parameters you need.
Example: AES needs a symmetric key, RSA needs a public or private key,
and so on. So, IMO, it's not so bad not to type it.


Handle ERR_NOTEXTTOSEND (412)

More relevant after #1627. 412 is sent when no message is passed, so if someone does a blank /ns (or other alias) it will be reported. Right now, No text to send is printed in the lobby, however it should probably show in the open channel when the message is sent.

Closing as its a subset of #1380


Integrate CORSIGN QR Codes for positive tests

Feature description
We started a PKI system for official authorities. With this Tool they are able to give trust to testcenters in their region. With this trust the test centers are able to sign JWT Tokens inside a QR Code. The full JWT Modell and the signing process is explained open source at https://github.com/innFactory/corsign-core and next week we'll start to integrate this QR codes in a testcity (Rosenheim: https://www.ovb-online.de/rosenheim/rosenheim-stadt/corona-kontaktverfolgung-rosenheim-software-freiheit-90462363.html). So in the near future every testcenter in this region will create a CORSIGN QR Code with at least the following fields from the mentioned model:
{
  "sub": "UUID (Unique User IDentifier) which could be used in third-party applications such as SORMAS, valid until a new test is performed",
  "exp": "The token expires after a pre-defined duration (e.g 24 hours) passed since the Sars-CoV-2 was done",
  "iat": "Date and time of the Sars-Cov-2 test",
  "nbf": "Valid not before Sars-Cov-2 test date and time",
  "aud": "Place for the signer, can be used to store additional information for a third-party application",
  "pld": {
    "person": {
      "firstname": "Max *required",
      "lastname": "Mustermann *required",
      "email"<EMAIL_ADDRESS>*required or phoneNumber",
      "phoneNumber": "0803199999 *required or E-Mail",
    },
    "information": {
      "isNegative": true,
    }
  }
}

Because of the JWT format there is also a JWK Remote Source (http://iss.corsign.de/.well-known/jwks.json) where all the public keys for sig check for tracing apps are / validation is stored. The CWA can check if the token is valid and then check if the isNegative field is false. All the other fields can be ignored. But this information could contain the needed information
The QR Code content looks like:
$issuer/v1/validate/$jwt (split before validate/ allows every camera app to scan the qr code and see the result)
for example with our implementation:
https://www.corsign.de/v1/validate/eyJraWQiOiI5ZjhmMzUxZi1kYWNmLTQyMmItOWUwMy05OWQ1YThhMTNmODYiLCJhbGciOiJSUzUxMiJ9.eyJzdWIiOiJjZDIxMGFjMS1hNTdkLTQ5ZTctOGJmMC1kZGVhMjRkMjNiYzYiLCJhdWQiOiJhcG8xLnJvc2VuaGVpbS5kZSIsIm5iZiI6MTYxODIyMzUyNSwiaXNzIjoiaHR0cHM6XC9cL2lzcy5jb3JzaWduLmRlIiwicGxkIjp7InBlcnNvbiI6eyJ6aXAiOiI4MTUwOCIsImNvdW50cnkiOiJHZXJtYW55IiwiZmlyc3RuYW1lIjoiVG9iaWFzIiwicGhvbmVOdW1iZXIiOiIwODE1IDAwIiwiY2l0eSI6InRlc3RjaXR5Iiwic2V4IjoiTSIsImlkQ2FyZE51bWJlciI6IiIsImVtYWlsIjoidGVzdEBpbm5mYWN0b3J5LmRlIiwibGFzdG5hbWUiOiJ0ZXN0In0sImluZm9ybWF0aW9uIjp7ImFwcERhdGExIjp7InRlc3QiOiJ0ZXN0MSJ9LCJpc05lZ2F0aXZlIjp0cnVlLCJhcHBEYXRhMiI6eyJ0ZXN0MiI6InRlc3QzIn0sInZhY2NpbmUiOiJibGEiLCJpc1ZhY2NpbmF0ZWQiOnRydWUsInRlc3RUeXBlIjoidGVzdCJ9fSwiZXhwIjoxNjE4Mzk2MzI1LCJpYXQiOjE2MTgyMjM1MjV9.CUgo2wGlKTb3Mcvh9H7NzxcnbKYwIfBWxBksa6VgPU6Yab26BmQiastf7sZyO1ZLb5Bo5zqODYkKLkZW4Nq0obHXIN5OOtZXXk6MhlPxDVs1p949g51z5blSYh-qNq_CdHq1nlZwIXAiUSzx4SZxBuVTBp_0xg8Eg0EUDdm9-7dO9a0Hp8Y8v9BXmlhIVTAAcd-iUo1jhYOlzoDesieB56EVsJ8-qmao1BTPeTl09ZbN4T6oaSHxx0-NLvqopf77PsKCAsFo5hror2tfzH7Wosx0XcafsDdCkjL2ic5-_dN0RjL1Piq0nS7ByK7lkEDuBT00R8pnbX2mC3e-dPGwpg
Because of the open format every personal information is just stored inside of the QR Codes. One of the Big Tracing Apps ("darf ich rein") has already implemented this qr code.
Problem and motivation
The problem is, that nearly every testcenter has it's own software system for their appoinments and tests. every software sends different qr codes for the result. with the corsign model we try to start an open source modell for this problem to connect the testcenter software with the tracing apps.

Hi @jona7o ,
why are the personal data of the testees not encrypted and only encoded base64?
Are you warning the testees to keep their QR code strictly private, because any malicious attacker (e.g., an unauthorized gate keeper) with access to that code and an arbitrary scanning app could extract their personal details (including full address, telephone, email) to carry out a subseeding social engineering attack like Enkeltrick and alike? In your case there would also be an attack surface for a nice identity theft due to the completeness of the personal data inside the QR code.
See also https://github.com/corona-warn-app/cwa-documentation/issues/587

Hi @vaubaehn,
the testees are warned that they should keep this code private and use it only for check-ins in restaurants / etc. Every app could take the information it needs from the model and encrypt it in their data model. The model just contains that much fields for later purposes. Right now, when the people are tested the testcenters will only write data for: firstname, lastname, phone and/or email and the test result. The people are also aware that the qr code is only valid if they have their id card with the same name on it, so that an authorized gate keeper is able to check them in.
For example "darf ich rein" shows this screen if the code is valid or if the code is expired

@jona7o
Thanks for your explanation. Yes, people must be warned that this QR contains sensitive data and only trusted places/personnel should get access to it. In daily living, it will get difficult to understand, who is authorized and who not. Especially when not so tech-savvy people or our grands are requested to present their code to anyone.
I don't see any problem to encrypt the personal data right from the beginning inside the QR code.

@jona7o
Just one last question: may I kindly ask, which Landesdatenschützer or authority gave their approval for that project?
Could you provide a sample paper print out with the warning text, please?
Thank you very much in advance.

For the usage in corona warn app an encrypted version is no problem. I think for cwa only the isNegative flag is needed. But all the centralized tracing apps need the data to encrypt them with their own mechansim to transfer the data to the related health authority. I think this Problem can be solved when IRIS is available and all tracing apps and health agencies use the same plattform for data exchange. The city is rosenheim. I can send you the article by mail. They want to get a bavarian reference city when reopening is possible. For this case everyone needs a negative test and has to get checked in. The Problem you mentioned is the same if you give away your official id card to a foreigner. You should not do this without a reason.

Hi @jona7o , thanks for staying in discussion, I think it's important.
Just as to be clear I don't want to 'destroy' anything: Personally, I'm supporting your idea, and I think it would be a big gain for everyone if processing and attesting immune/test status fast and easy without any headache.
However, personal data must be protected as good as possible, and here we're dealing with health data also.
To make my points understandble more easy, I'm emphasizing that I understood, either an app could be used to be used as an entry pass (showing a summary of the already extracted data from QR code), or the QR code itself on a paper copy for people without a mobile phone.

For the usage in corona warn app an encrypted version is no problem. I think for cwa only the isNegative flag is needed.

CWA is planning to provide rapid test data as an entry pass. For this, a testcenter-generated QR code will contain First Name, Last Name and Date of Birth as personal data base64 encoded, and some identifiers, that will enable CWA to fetch the test result from a secured server (to set the negativeFlag accordingly) after the test result becomes available (for currently planned implementation code, see e.g., here: https://github.com/corona-warn-app/cwa-app-android/pull/2843/commits/12aa8dcbed9924985254aaca3dd4f919e5212c02).
I already raised my doubts here https://github.com/corona-warn-app/cwa-documentation/issues/587 that it's not a good idea to do so in an unencrypted way. You will find some more details there.
Also, for me it's unclear at the time being, if CWA will even be able to persist personal data in a future release without violating the Terms of Usage by Apple and Google, see also here: https://github.com/corona-warn-app/cwa-wishlist/issues/459#issuecomment-821963319 So I guess it needs a new thorough evaluation if such an approach can be implemented into CWA at all.

But all the centralized tracing apps need the data to encrypt them with their own mechansim to transfer the data to the related health authority.

True, but the personal data can be embedded into the QR code in an encrypted way, the app can decrypt it (there would be different options on how this could be possible to fetch an authorized decryption key from online db), and then persist it again encyrypted inside the app in line with standards of data security.

The city is rosenheim. I can send you the article by mail.

Thanks for your suggestion, it could be interesting, but I won't expose my private e-Mail here publicly :)

The Problem you mentioned is the same if you give away your official id card to a foreigner. You should not do this without a reason.

Now we're arriving at the most important points: Yes, absolutely true, the QR code would need to be treated as carefully as an official id card. But there are important differences between our Bundespersonalausweis and your QR code:
It is in our cultural knowledge and common sense, that our official ID cards should only be presented to authorized or trusted people. They're usually wearing a uniform. If you leave a copy of your ID anywhere else (bank, renting agency, whatever) then you KNOW where you left your ID, and in case of abuse you would be able to trace the case.
I don't see this cultural/public knowledge with QR codes in general yet. One big problem here is, that you are not able to see 'with your eyes' which data are stored insied the QR code (in opposite to an ID).  But as said before, for a malicious attacker it's a seconds task to extract these data and later abuse them.
Also, how will you find out, who's authorized to scan your QR code and who not? If you will be asked to present your QR code inside the entrance of a restaurant, I think it's unlikely that the person is unauthorized. But how about in front of a public toilet, for example. If you were asked there to present your QR code (to let only negative tested people inside, "because of the aerosols"), would you ask the guy to authorize himself in front of you by showing his company id or his personal id?

Another problem is the 'time-limited value' of such a test certificate. After it expires, how many people will just leave the paper on an outside cafe's table? How many will throw it to a publicly accessible trash can without even thinking how many personal data they were just giving out of there hands? How many people would think about to blacken (or destory) the QR code before wasting it to the paper recycle can?
There are two solutions:
Either the people must be made aware strongly and repeatedly, which data is embedded inside the QR code, that they need to see an authorization from anyone who is requesting to see it in doubt, and that it needs to be trashed/destroyed securely after it expired, and must not be lost!
You can achieve this, by printing out a long explaining text next to the QR code. But who will read it carefully? What about blind people, analphabetics and people with language barriers?
Or you encrypt the personal data, before embedding into QR code. The decryption key can be fetched from an online db from authorized apps/persons only. This will provide maximum security and won't burden testees with long explaing texts. If you're interested in details how this could be achieved, just leave a note here.
You didn't answer my above two questions yet: Do you already have a warning text on your paper print outs? Could you provide an example here?
And: has your project already been approved by your local Rosenheim's DSB and/or by Thomas Petri, the LBDS of Bavaria?
(FYI: @rugk - is this discussion something, you or some of your fellows are interested in? Or can you calm me down ;)?)

True, but the personal data can be embedded into the QR code in an encrypted way, the app can decrypt it

If the app can decrypt it, it somehow needs to get the key for that. This can't be static nor hardcoded into the app for obvious reasons (it's easily extractable).
I'm not sure whether there would even be a way to do this decentralized and security. I won't claim there is none, but it will need some very clever (cryptographic) stuff, probably, as you of course also cannot expose the encryption key to anyone, who requests an API or so.
One way could be to generate the private or symmetric key before you even get your QR code and transfer the public/symmetric key to the ones, who generate your test result… but… you see this gets way too difficult to do practically.
And:

The decryption key can be fetched from an online db from authorized apps/persons only.

No, I don't really consider this a solution and it is none, because the app also needs to get the key… And even if that worked, the "authorized personal" is just a smaller group of people and we just decreased the potential misuse potential.
Another idea I'd had would be to turn the stuff around, encrypt and safe the sensitive data symmetrically and upload it to some server. The QR code then only contains the API details (some ID or so) and the encryption key. Then you can download and encrypt the data once you have the key.
The advantage of that approach would mainly tackle this risk:

Another problem is the 'time-limited value' of such a test certificate. After it expires, how many people will just leave the paper on an outside cafe's table? How many will throw it to a publicly accessible trash can without even thinking how many personal data they were just giving out of there hands?

I do see this as a big risk, actually, as I think that problem is very realistic. I mean you hopefully won't get the test result by doing that – if the API can only be requested once, but it's indeed still personal data. (I only skimmed over what has been written here and judge the shown security issues, so please bear with me if I interpret something incorrectly, but isNegative sounds as if the test result may[?] be included.) In any case
So with the "encrypt data and send to server" you would have two advantages:

no sensitive data in the QR code, so once it is lost, it does not matter where you throw it away
the API can delete the data when requested once, respectively only downloaded once

Another problem is the 'time-limited value' of such a test certificate. After it expires, how many people will just leave the paper on an outside cafe's table? How many will throw it to a publicly accessible trash can without even thinking how many personal data they were just giving out of there hands? How many people would think about to blacken (or destory) the QR code before wasting it to the paper recycle can?

You didn't answer my above two questions yet: Do you already have a warning text on your paper print outs? Could you provide an example here?

:+1:
Also, I still don't quite understand, why the name needs to be included in there anyway. Just to go one step back and consider whether we can just remove the data (data minimalisation ya' know).

Hi @rugk , thanks a lot for contributing to this discussion!
There were some points, where you disagreed, but where we actually have the same opinion/understanding. but that was maybe because of

(I only skimmed over what has been written here and judge the shown security issues, so please bear with me if I interpret something incorrectly,

and so I can easily bear it :wink: Yes, the texts are already quite long...
But you also added some valuable points which are definetly worth to have a closer look,. I'm a bit short in time at the moment, but will try to comment in the evening. The reason why I'm putting so much effort in this issue, is, that I don't want to see CWA getting in trouble, and that CWA issue is very closely related to the one discussed here. Also, I'm very nervous that the planned implementation of the European Vaccination Pass will become a similar "data privacy El Dorado", and that these "entry passes" here is kind of a test run for that.

Hi @jona7o ,
thanks a lot for providing the sample paper print out/PDF. I think that will help to continue to evaluate the "QR code approach" further, for you, but also for CWA's already planned RAT implementation.
As stated above I'm a bit short in time. I'd like to continue the discussion later, preferrably after

I will answer tomorrow again.

you added some more to the discussed points.
Thank you very much in advance!

So now i am back and in the meantime i have checked everything with our special attorney for computer science and privacy law. He told me that we could store all the data inside of the QR Code, but the tracing/corona related apps like CWA, Luca, "Darf ich rein" and others must treat this data as they have described the usage of data in their privacy policy. The only thing our attorney told me is that the QR Code should not contain more data than printed on the test result page. So if you just process the isNegative Boolean field compared with the iat (issued at) date everything should be completely fine.
The test centers are also permitted to transmit the data, because in our use-case we don't save anything in a backend service and just transmit positive tests AES encrypted to the related health authority like "Rosenheim". Every Testcenter in the city or in the district of rosenheim is able to transmit their positive data. Right now we are talking with a lot of test center software developers and most of them are open to use this technology, because of the side-effect of transmitting their positive data encrypted. While doing my research on test certificates and transmitting test results, I came across a very frightening fact. It is common practice that the "schnelltest" centers transmit their data of positive persons as an unencrypted and unsigned email attachment every day. I'll hope our corsign service will fix this soon in a lot of smaller test centers, because they don't have access to RKI DEMIS.


feat: A way to force Schemathesis to generate unique test cases

Codecov Report

Merging #1652 (0b26d40) into master (baeca01) will decrease coverage by 0.20%.
The diff coverage is 100.00%.

@@            Coverage Diff             @@
##           master    #1652      +/-   ##
==========================================
- Coverage   98.96%   98.75%   -0.21%
==========================================
  Files          93       95       +2
  Lines        7604     7634      +30
  Branches     1571     1312     -259
==========================================
+ Hits         7525     7539      +14
- Misses         48       58      +10
- Partials       31       37       +6

Impacted Files
Coverage Δ

src/schemathesis/__init__.py
100.00% <100.00%> (ø)

src/schemathesis/cli/__init__.py
99.21% <100.00%> (+<0.01%)
:arrow_up:

src/schemathesis/contrib/__init__.py
100.00% <100.00%> (ø)

src/schemathesis/contrib/unique_data.py
100.00% <100.00%> (ø)

src/schemathesis/models.py
99.11% <100.00%> (+0.01%)
:arrow_up:

src/schemathesis/_compat.py
62.50% <0.00%> (-15.00%)
:arrow_down:

src/schemathesis/extra/pytest_plugin.py
98.57% <0.00%> (-1.43%)
:arrow_down:

src/schemathesis/cli/callbacks.py
98.84% <0.00%> (-1.16%)
:arrow_down:

src/schemathesis/utils.py
96.93% <0.00%> (-0.77%)
:arrow_down:

src/schemathesis/cli/output/default.py
98.61% <0.00%> (-0.56%)
:arrow_down:

... and 1 more

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.


[Decompiler] Support anonymous functions

Support anonymous functions and add the ones in gkernel.gc to the offline test.

Pull Request Test Coverage Report for Build 652194474

17 of 68 (25.0%)  changed or added relevant lines in 7 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage decreased (-0.07%) to 68.576%

Changes Missing Coverage
Covered Lines
Changed/Added Lines
%

common/goos/PrettyPrinter.cpp
7
8
87.5%

decompiler/IR2/FormExpressionAnalysis.cpp
0
2
0.0%

decompiler/IR2/AtomicOpTypeAnalysis.cpp
0
7
0.0%

decompiler/IR2/Form.cpp
0
9
0.0%

decompiler/ObjectFile/ObjectFileDB_IR2.cpp
0
11
0.0%

decompiler/analysis/anonymous_function_def.cpp
0
21
0.0%

Totals

Change from base Build 652093759:
-0.07%

Covered Lines:
32134

Relevant Lines:
46859

💛  - Coveralls


Bug in package "path" in Windows implementation

This issue was originally filed by<EMAIL_ADDRESS>
==== OK =====
pattern: "c:"
root: "c:"
segs: 1
==== OK =====
pattern: "c:\"
root: "c:"
segs: 1
==== OK =====
pattern: ""
root: ""
segs: 1
==== BAD =====
pattern: "\"
root: ""
segs: 0
As for me, "\" and all other similar (eg. "\") should be reduced in favor of single "".
And this single "" should be considered as "root".
Currently pattern [sep][sep]+ matched in Windows not as in Posix.
I don't think that this path "\" in Windows relative.

This issue has been moved to dart-lang/path#4.


fix schema fetch job

continue table processing after reporting failure
remove validation for new column with deletion error, as it's valid during migrations

Codecov Report

Merging #224 into master will increase coverage by 0.02%.
The diff coverage is 60%.

@@            Coverage Diff             @@
##           master     #224      +/-   ##
==========================================
+ Coverage   69.38%   69.41%   +0.02%
==========================================
  Files         155      155
  Lines       20681    20680       -1
==========================================
+ Hits        14349    14354       +5
+ Misses       5231     5226       -5
+ Partials     1101     1100       -1

Impacted Files
Coverage Δ

metastore/validator.go
83.62% <ø> (+0.69%)
:arrow_up:

metastore/schema_fetch.go
80.85% <60%> (-2.11%)
:arrow_down:

memstore/cuckoo_index.go
91.27% <0%> (+1%)
:arrow_up:

subscriber/common/job/driver.go
71.98% <0%> (+1.41%)
:arrow_up:

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 885a922...9ca02a3. Read the comment docs.


Unit test

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

Comparison is base (76dd266) 13.09% compared to head (faa9d38) 29.87%.
Report is 12 commits behind head on main.

:exclamation: Your organization needs to install the Codecov GitHub app to enable full functionality.
Additional details and impacted files
@@              Coverage Diff              @@
##               main      #31       +/-   ##
=============================================
+ Coverage     13.09%   29.87%   +16.78%
  Complexity      544      544
=============================================
  Files            77       77
  Lines          2055     2055
=============================================
+ Hits            269      614      +345
+ Misses         1786     1441      -345

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


Backport/backport 205 to 2.x

Description
Manual backport PR of https://github.com/opensearch-project/dashboards-notifications/pull/205
Issues Resolved
[List any issues this PR will resolve]
Check List

[ ] Commits are signed per the DCO using --signoff

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
For more information on following Developer Certificate of Origin and signing off your commits, please check here.

CI failures are pre-existing failures, which needs to be addressed. They are not due to this PR changes.


TMT tidying

Ticket for keeping track of fixes etc for TMT while assembling paper

Using only 2 sets in comparision - FB and TransportDB, as little gained from other sources and significant redundancy in data
Intersect is 598 genes, of which all but two are in TMT gene group -> one was blocked for PAINT (go-annotation/issues/4843)
One is CG4520 - this should have been put into an "UNCLASSIFIED PORINS" gene group and annotations blocked.
[ ] make UNCLASSIFIED PORINS
[ ] add CG4520
[ ] block annotations from PAINT and InterPro

Jack scoring


TOTP UI/UX improvement

In the existing implementation when viewing configured QR code, the modal shows a link to regenerate, a field to input TOTP and a button to Verify. Since this is not user friendly, suggestion is to show only the option to regenerate when view a configured QR code. Click on regenerate directs user to scan the new QR code and verify new TOTP.
Better to warn the user that regenerating QR code will invalidate the previous TOTP configuration.
Existing modal shown for both configure and view QR code:

Improved UI designs

Configure QR code modal:

View QR code modal:

When clicked on Regenerate:

@JayaShakthi97 can we close this issue if this is already done?


./prowler: line 2: $'\r': command not found

I am on windows 10 and using cygwin to run Prowler but running into the following error. Help?
$ ./prowler
./prowler: line 2: $'\r': command not found
./prowler: line 4: $'\r': command not found
./prowler: line 9: $'\r': command not found
./prowler: line 12: $'\r': command not found
./prowler: line 13: $'\r': command not found
./prowler: line 22: $'\r': command not found
./prowler: line 30: $'\r': command not found
./prowler: line 33: $'\r': command not found
./prowler: line 37: $'\r': command not found
./prowler: line 53: $'\r': command not found
./prowler: line 64: syntax error near unexpected token `$'{\r''
'/prowler: line 64: `usage(){

@s1mrankaur cygwin is having issue with the unix line endings, see https://stackoverflow.com/questions/43693127/cygwin-r-command-not-found-error for details and solution

As a workaround you can use the docker container and forget about dependencies, etc.

@zfLQ2qx2  Is it just the prowler file that I will need to convert with notepad++?

Since there is no more feedback here, closing it. Feel free to reopen it if needed.


The quick demo is not working on real devices.

Hello,
The quick demo perfectly works on simulators but I cannot make it work on a real iPad and a real Apple TV (neither with an iPhone). All my devices are on the last version. I do not have any error message. There is just nothing happening. But I do know I press the button and I also know that the text is sent. But somehow the Apple TV does not receive the text.
I also posted the question on github.
Thank you!
http://stackoverflow.com/questions/35720873/ios-to-tvos-communication-is-not-working

Hi @magohamote , when I developed it it used to work, but I didn't test it anymore with the new OS versions, so may be it's broken.
I don't have so much time now to look at it, sorry !


Treebrowser column alignment

While indenting the first column of child nodes makes sense, the other columns to the right should align vertical. When they also indent, they don't line up properly down the screen. Could we have the option implemented to only indent the first column of the row when the tree rows expand?

this has been fixed in v2.2.2


Unblock request

souq.com

This is done for now. However, I'm having stability issues with the server in France. Have to look into it as well.
Do report to me if you are experiencing issues.
Closing this issue. Feel free to re-open if issue persists.


validation error always reported as signature failure

in _doUserOpValidation, any validation failure (revert reason) is ignored, and reported back as SIG_VALIDATION_FAILED - which is wrong.
SIG_VALIDATION_FAILED should only be returned if the signature is syntactically correct (e.g. the right length, right sub-fields (if any), etc), but resolves to the wrong signer.
the called method should return the SIG_VALIDATION_FAILED as part of the returned validation data
Instead, the original revert should be thrown (or wrapped with an outer revert, if needed)

Acknowledged, thanks.


Future Request: Be able to highlight multiple sections

So it is possible to highlight code/text in Spyder, but when im going to highlight a second section without removing the first highlight, it is natural to hold CTRL and highlight the second part, but this future does not exist in Spyder. This future does however exists in many other IDEs and in the Windows OS in general. Would therefore be nice to have this added in a future version.

Hi @Chuck321123 thank you for the feedback! Is this maybe related with having multicursor support inside Spyder? If that is the case then maybe this could be a duplicate of https://github.com/spyder-ide/spyder/issues/2112. If not, to better understand the idea, could it be possible for you to share a screen record video or GIF showing the feature expected behavior? Let us know!

@dalthviz Sure. Here is an example in Windows:
https://github.com/spyder-ide/spyder/assets/123987501/f6c1999e-e8e2-4c6e-b86d-68c2d1c72cfe
The idea was that you could do the same thing in the Spyder Editor


Commas appear in "Static Pose Weights" in Scale Tool and are not accepted

Steps to reproduce

Open 2354
Load scale setup file
Go to Static Pose Weights --> R.ASIS (under markers)
Note that "Weight" has a comma in it: "1,000"
Try to change it to "8,000": doesn't work
Try to change it to "8000": works

Expected result
Either the "Weight" box doesn't give the user a comma in the box OR commas can be accepted
Environment
Windows (@carmichaelong) and Mac (@chrisdembia)

This is in the upper left corner of the panel and not in the table? Can you confirm? Thanks

Upper right corner of the panel, not in the table.

Verified on Mac.


Consider empty response as ban only when status code is 200.

Resolves #1

Codecov Report

Merging #2 into master will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##           master       #2   +/-   ##
=======================================
  Coverage   49.21%   49.21%
=======================================
  Files           3        3
  Lines         191      191
  Branches       33       33
=======================================
  Hits           94       94
  Misses         90       90
  Partials        7        7

Impacted Files
Coverage Δ

rotating_proxies/middlewares.py
28.07% <ø> (ø)
:white_check_mark:

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update bc8785d...f97773c. Read the comment docs.

Thanks @digawp! I'll make a release soon.


Enable strict mode in msal-browser

Enables the TypeScript strict compiler option for msal-browser

Coverage decreased (-4.4%) to 77.993% when pulling 0cee2348b0c375eefcdf8bf43da7c6065485103c on msal-browser-strict into 513855f780aef1cb1c905944ec3ba139623addf3 on dev.

Coverage decreased (-4.4%) to 77.993% when pulling 0cee2348b0c375eefcdf8bf43da7c6065485103c on msal-browser-strict into 513855f780aef1cb1c905944ec3ba139623addf3 on dev.


Deploying multiple deployments for Microsoft.CognitiveServices/accounts

Bicep version
0.18.4
Describe the bug
When deploying multiple model deployments to an openai resource I get the following error:
Another operation is being performed on the parent resource '/subscriptions/subscriptionid/resourceGroups/resourcegroupname/providers/Microsoft.CognitiveServices/accounts/openaitestname'. Please try again later.

To Reproduce
Steps to reproduce the behavior:
deploy the below bicep:
var modelsToUse = [
  {
    name: 'gpt-35-turbo'
    version: '0301'
    identifier: 1
    capacity: 120
  }
  {
    name: 'text-davinci-003'
    version: '1'
    identifier: 1
    capacity: 60
  }
  {
    name: 'text-embedding-ada-002'
    version: '2'
    identifier: 1
    capacity: 120
  }
]

resource openAi 'Microsoft.CognitiveServices/accounts@2023-05-01' = {
  name: 'openaitestname'
  location: 'westeurope'
  sku: {
    name: 'S0'
  }
  kind: 'OpenAI'
  properties: {
    customSubDomainName: 'openaitestname'
    networkAcls: {
      defaultAction: 'Deny'
    }
    publicNetworkAccess: 'Disabled'
    disableLocalAuth: true
  }

  resource deployments 'deployments@2023-05-01' = [for model in modelsToUse: {
    name: toLower('openaitestname-${model.name}-${model.version}-${model.identifier}')
    sku: {
      name: 'Standard'
      capacity: model.capacity
    }
    properties: {
      model: {
        format: 'OpenAI'
        name: model.name
        version: model.version
      }
    }
  }]
}

Additional context
Building in a dependency on every next deployment actually deploys correctly:
resource openAi 'Microsoft.CognitiveServices/accounts@2023-05-01' = {
  name: 'openaitestname'
  location: 'westeurope'
  sku: {
    name: 'S0'
  }
  kind: 'OpenAI'
  properties: {
    customSubDomainName: 'openaitestname'
    networkAcls: {
      defaultAction: 'Deny'
    }
    publicNetworkAccess: 'Disabled'
    disableLocalAuth: true
  }

  resource deployments 'deployments@2023-05-01' = [for model in [ modelsToUse[0] ]: {

    name: toLower('openaitestname-${model.name}-${model.version}-${model.identifier}')
    sku: {
      name: 'Standard'
      capacity: model.capacity
    }
    properties: {
      model: {
        format: 'OpenAI'
        name: model.name
        version: model.version
      }
    }
  }]

  resource deployments2 'deployments@2023-05-01' = [for model in [ modelsToUse[1] ]: {
    name: toLower('openaitestname-${model.name}-${model.version}-${model.identifier}')
    sku: {
      name: 'Standard'
      capacity: model.capacity
    }
    properties: {
      model: {
        format: 'OpenAI'
        name: model.name
        version: model.version
      }
    }
    dependsOn: [
      openAi::deployments
    ]
  }]

  resource deployments3 'deployments@2023-05-01' = [for model in [ modelsToUse[2] ]: {
    name: toLower('openaitestname-${model.name}-${model.version}-${model.identifier}')
    sku: {
      name: 'Standard'
      capacity: model.capacity
    }
    properties: {
      model: {
        format: 'OpenAI'
        name: model.name
        version: model.version
      }
    }
    dependsOn: [
      openAi::deployments2
    ]
  }]
}

It looks to me that an OpenAi resource can't handle deploying multiple model deployments at the same time, is that something we can build in to bicep to check/validate or is this expected behaviour and should it be documented more properly?

Use @batchSize(1) decorator
https://github.com/Azure/azure-dev/blob/main/templates/common/infra/bicep/core/ai/cognitiveservices.bicep#L26

Creating a manual dependency between two Microsoft.CognitiveServices/accounts/deployments also seems to resolve the issue. I suppose it's the equivalent of @batchsize for a loop.
resource openai 'Microsoft.CognitiveServices/accounts@2023-10-01-preview' = {
  name: 'openai'
  kind: 'OpenAI'

  resource firstDeployment 'deployments@2023-10-01-preview' = {
    name: 'text-embedding-ada-002'
    sku: {
      name: 'Standard'
    }
    properties: {
      model: {
        format: 'OpenAI'
        name: 'text-embedding-ada-002'
        version: '2'
      }
    }
  }

  resource secondDeployment 'deployments@2023-10-01-preview' = {
    name: 'gpt-4o-mini'
    sku: {
      name: 'GlobalStandard'
    }
    properties: {
      model: {
        format: 'OpenAI'
        name: 'gpt-4o-mini'
        version: '2024-07-18'
      }
    }
    dependsOn: [
      // Create dependency with previous deployment to prevent https://github.com/Azure/bicep-types-az/issues/1730
      firstDeployment
    ]
  }
}


TypeScript Boilerplate

Add a TypeScript Boilerplate to create node modules fast.
Current problems I see
These things stop this currently from being a proper boilerplate

xo rules

[ ] ava/no-ignored-test-files see https://github.com/avajs/eslint-plugin-ava/issues/201
[ ] @typescript-eslint/promise-function-async does not work for me currently. Have not checked for a relevant issue yet.

configuration

[ ] Ava should support typescript without configuration and additional dependencies
[ ] Xo should support typescript without configuration and additional dependencies https://github.com/xojs/xo/issues/373

Open questions I have
I would like other thoughts on these one.

Also a cli boilerplate in TypeScript? The main benefit I see is easier and less error prone usage from dependants. The cli does not do many things so I currently don't think it will be as useful as the module itself in TypeScript.
Prepare as build script in package.json. npm-scripts describes prepare, prepack and prepublishOnly. I personally like to check package content via npm pack so prepublishOnly is not helpful here. prepare also runs on a npm install without arguments as its done after a git clone. This might save some time as it hasn't to be done manually but could be annoying on WIP feature branches. The safest solution would be prepack but I think prepare is a nice to have.
Omit index.js / index.d.ts in package.json types and main? This may not be clear to a inexperienced user. Add it or omit it? For example got is currently omitting it.

closes #16

Also a cli boilerplate in TypeScript? The main benefit I see is easier and less error prone usage from dependants. The cli does not do many things so I currently don't think it will be as useful as the module itself in TypeScript.

Unless the CLI is large, like XO/AVA large, I will probably not bother to make CLI's in TS.

Omit index.js / index.d.ts in package.json types and main? This may not be clear to a inexperienced user. Add it or omit it? For example got is currently omitting it.

This is moot since it's being compiled to dist, so we have to list it.

Omit index.js / index.d.ts in package.json types and main? This may not be clear to a inexperienced user. Add it or omit it? For example got is currently omitting it.

This is moot since it's being compiled to dist, so we have to list it.

I assume we talked past each other: main and types are needed. But it can be dist/index.js or dist. In the second case NPM will assume the index.js. For new users it might be not clear what is happening there so it could be nice to just write the full form. Omitting it and just write dist looks more clean on the other hand (and that's the way got is going for example).


Add simple man cat(1) like list of options actions help choice

$ qpdf --help
Run "qpdf --help=topic" for help on a topic.
Run "qpdf --help=--option" for help on an option.
Run "qpdf --help=all" to see all available help.

How about a fourth option, that makes just a
$ man cat
list of what each option does. Yes, I tried --help=all but
that is an overkill blizzard of information.
In fact --help=man could just produce a Unix man page... which then could be the future man page. Yes, just like
$ info cat
gives more than
$ man cat
you wouldn't to mention everything on man qpdf.

man qpdf already shows the same information as help and is automatically generated. I'm not going to generate info documentation. I used to use texinfo for documentation years ago. Maybe info knows how to convert other formats on the fly? I haven't tried it in ages. But there is a manual page, and it is installed with the Debian packages.

I see. Debian has gone from a minimal man page to now a maximal man page.
Maybe there could be
"qpdf --help=--options" where that final "s" could trigger just a option list, like indeed "--<TAB>" does currently via Bash Completions.

--<TAB> in qpdf shows all options valid in the current context. --help=--<TAB> will show all options. I don't think I want I want to add --help=options, which is what it would be (rather than --help=--options. It feels like a fair bit of clutter for the value. There are already several ways to get this information. You can also do qpdf --help=--all | grep '== --' and get what you probably want. I suppose --help=options wouldn't be that hard to add.

to fix your trouble check this solution click
maybe this will solve your problem.


super(): TypeError: super() argument 1 must be type, not function (hashtag621)

super() throws an error:
% python foo.py
2022-03-21 13:35:10.211 | ERROR    | __main__:<module>:45 - An error has been caught in function '<module>', process 'MainProcess' (56772), thread 'MainThread'<PHONE_NUMBER>):
Traceback (most recent call last):

> File "/Users/mpenning/fixme/ansible_venv_lab/foo.py", line 45, in <module>
    thislist = AnsibleHostList()
               └ <function AnsibleHostList at 0x108c8edc0>

  File "/Users/mpenning/fixme/ansible_venv_lab/foo.py", line 13, in __init__
    super(AnsibleHostList, self).__init__()
          │                └ <unprintable AnsibleHostList object>
          └ <function AnsibleHostList at 0x108c8edc0>

TypeError: super() argument 1 must be type, not function

from collections.abc import MutableSequence
import sys

from loguru import logger

 onerror=lambda _: sys.exit(1))
class AnsibleHostList(MutableSequence):
    """A container for manipulating lists of hosts"""

    def __init__(self, data=None):
        """Initialize the class"""
        super(AnsibleHostList, self).__init__()
        if (data is not None):
            self._list = list(data)
        else:
            self._list = list()

    def __repr__(self):
        return "<{0} {1}>".format(self.__class__.__name__, self.list)

    def __len__(self):
        """List length"""
        return len(self._list)

    def __getitem__(self, ii):
        """Get a list item"""
        return self._list[ii]

    def __delitem__(self, ii):
        """Delete an item"""
        del self._list[ii]

    def __setitem__(self, ii, val):
        hashtag optional: self._acl_check(val)
        self._list[ii] = val

    def __str__(self):
        return str(self._list)

    def insert(self, ii, val):
        hashtag optional: self._acl_check(val)
        self._list.insert(ii, val)

    def append(self, val):
        self.insert(len(self._list), val)

thislist = AnsibleHostList()
print(thislist)

However, if I remove  onerror=lambda _: sys.exit(1)), the class can use super() as required.
I can work around this problem by adding ` to every method on the function, but that's an awful workaround for this problem.
I believe the behavior above should be a bug...  Please advise on the next steps to fix this... I can try to submit a PR, if-required... but I don't know this code-base very well...
I'm running python 3.9.10 with loguru v0.6.0 on macOS Catalina

Hi.
The logger.catch() is not really meant to decorate classes, its primary use is for functions.


Make Prometheus docs better, fix input params.

Docs are too complicated.
input should default to unifi
path should be target
Consider collect[] approach

There's examples for this in node_exporter, snmp_exporter, mysqld_exporter
https://github.com/prometheus/node_exporter#filtering-enabled-collectors

scrape_configs:
  - job_name: 'unifipoller'
    static_configs:
      - targets:
        - https://unifi.controller:8443
        - https://another.controller:8443
    metrics_path: /scrape
    params:
      input: [unifi]
    relabel_configs:
     - source_labels: [__address__]
       target_label: __param_target
     - source_labels: [__param_target]
       target_label: instance
     - target_label: __address__
       replacement: localhost:9130

After the updates, my setup on unraid looks like this:
  - job_name: 'unifipoller'
    static_configs:
      - targets:
        - 'https://unifi-controller:8443'
    metrics_path: /scrape
    relabel_configs:
     - source_labels: [__address__]
       target_label: __param_target
     - source_labels: [__param_target]
       target_label: instance
     - target_label: __address__
       replacement: 'UniFi-Poller:9130'


Improvements in Stub.

Patch related to #33.
Don't allow Stub to patch a final methods.
Provide correct signature for a "$param = null" params.

:+1: !


EMR service is recreating on every terraform apply

Versions

Module version [Required]:
v2.1.0
Terraform version:
1.5.3
Provider version(s):
~> 5.44

Reproduction Code [Required]
Steps to reproduce the behavior:
Expected behavior
Everytime terraform apply is triggered emr service is getting recreated, using  release_label = "emr-6.13.0" but still recreating with same version, my understanding is that when release_label is used it should not check for newer version
Actual behavior
release_label is forcing replacing of emr service

Additional context

You can set the release version with release_label, otherwise this module will pull the latest release version at the time of apply

You can set the release version with release_label, otherwise this module will pull the latest release version at the time of apply

i'm setting release_label, yet emr is recreating for every terraform apply, could you please try to reproduce this? this is taken from example code
this is how i'm pass release_label
source  = "terraform-aws-modules/emr/aws"
version = "v2.1.0"
autoscaling_iam_role_description = "IAM role for EMR AutoScaling ${local.resource_prefix}"
name = "emr-instance-group"
release_label = "emr-6.13.0"
applications  = ["Flink"]


Added iOS v16 dependency

Added .iOS(.v16) platform dependency to match the main.swift dependency.  This will resolve a compiler error when other packages have a earlier dependency.

Thanks for your contribution! I've added this in 66af2ab and pushed it back as far as iOS 14. Released in 1.1.4


launch() fails on Linux

OS: Linux Mint 17
Code:
var DynamoDbLocal = require('dynamodb-local');
DynamoDbLocal.launch(dynamoLocalPort, null, ['-sharedDb']);

Result:
Checking for  /tmpdynamodb-local
DyanmoDb Local not installed. Installing...
## aborted

I think there might be a problem with in the following code:
var tmpDynamoLocalDirDest = os.tmpdir() + 'dynamodb-local'

Since os.tmp() returns /tmp, tmpDyamoLocalDirDest becomes /tmpdynamodb-local instead of /tmp/dynamodb-local.
Seems like an easy fix for Linux, but I don't know the impact on other OSes.

I should also mentioned that I tried to created the /tmpdynamodb-local directory manually and re-ran the node script. However it still end up aborting without any indication of what the error is and the /tmpdynamodb-local directory is empty as well.

Should be fixed in https://github.com/doapp-ryanp/dynamodb-local/commit/1a3563b7932600ec8f2a5a645d56544acd138460
npmjs.com is giving me 500 errors so i cant update it in the regtistry ATM.
Once u see it bump to 0.0.11, please upgrade, re-test and close if it fixes.  Thanks

@doapp-ryanp: Thanks for the update. 0.0.11 works! :+1:
I will close the ticket.


buz binary is missing within the releases

See e.g. https://github.com/silverton-io/buz/releases/tag/v0.15.3

Thanks for this @bufferoverflow - will take a peek

@bufferoverflow - you should find the binaries are again in the release -> https://github.com/silverton-io/buz/releases/tag/v0.15.6
Thanks again for the note.

cool, thanks for the super fast action @jakthom !


Add a intro file to the 2.x integrations directory for WLS

Environment Details

Helidon Version: 2.x
Helidon MP
JDK version:
OS:

Not Valid. Hence, closing it.

Not Valid. Hence, closing it.


Event listeners that are defined in $listen are fired twice if shouldDiscoverEvents is true

Laravel Version: 5.8.35
PHP Version: 7.2.20-2+ubuntu16.04.1+deb.sury.org+1

Description:
If the shouldDiscoverEvents() method of the event service provider is set to true, and there are also some event/listener pairs defined in the $listen array, then the listeners in the $listen array are called twice every time an event fires
Steps To Reproduce:

Create an event/listener pair, set each to Log::debug that they were called
Add them to the $listen array in EventServiceProvider
Turn on event discovery as defined here
fire the event in tinker
Open your log file and observer 1 log entry for the event, 2 for the listener

The link you supplied specifies that the automatically discovered events are in addition to the manually registered ones, but I agree that having duplicates because of that doesn't make a ton of sense. I'll look into making a PR for this

Hey there,
Unfortunately we don't support this version anymore. Please check out our support policy on which versions we are currently supporting. Can you please try to upgrade to the latest version and see if your problem persists? We'll help you out and re-open this issue if so.
Thanks!


Fixed typos in ENV varible - changed DD_DATABASE_PASsWORD to DD_DATAB…

…ASE_PASSWORD
Commit message says everything - bugfix of a typo in an ENV variable.  Will also do a PR for dev branch.
Note: DefectDojo is now on Python3.5 and Django 2.2.x Please submit your pull requests to the 'dev' branch as the 'legacy-python2.7' branch is only for bug fixes. Any new features submitted to the legacy branch will be ignored and closed.
When submitting a pull request, please make sure you have completed the following checklist:

[ ] Your code is flake8 compliant
[ ] Your code is python 3.5 compliant (specific python >=3.6 syntax is currently not accepted)
[ ] If this is a new feature and not a bug fix, you've included the proper documentation in the ReadTheDocs documentation folder. https://github.com/DefectDojo/Documentation/tree/master/docs or provide feature documentation in the PR.
[ ] Model changes must include the necessary migrations in the dojo/db_migrations folder.
[ ] Add applicable tests to the unit tests.
[ ] Add the proper label to categorize your PR

Current accepted labels for PRs:

Import Scans (for new scanners/importers)
enhancement
feature
bugfix
maintenance (a.k.a chores)
dependencies

FWIW, it looks like the Chrome instance used by the integration tests failed for some reason, see
https://travis-ci.org/github/DefectDojo/django-DefectDojo/jobs/677523114#L2868
My changes don't touch anything covered by those tests so this should be a safe commit.

@mtesauro per our new release model, do you intend to backport this fix to the release candidate branch? Thanks.

@madchap Missed this - yes, I am happy to backport this fix to the release candidate branch.  That said, I did another PR to get this updates into the dev branch so it may be easier to just cherrypick that PR into the release branch.  This is a super simple fix - just corrects a typo in 2 files.
See PR #2229 which looks like it's already staged for inclusion in the release branch.


Home assistant OS on Raspberry PI will not accept addon

Hello,
Great work on making this device work with home assistant.
I see you left instructions for npm install but I do not have the possibility to try like that on Home Assistant OS running on Raspberry Pi with an image install and when I try to add this repository (with url: https://github.com/zymotik/it500/ ) it gives me the following error:
21-01-08 01:08:03 ERROR (MainThread) [supervisor.store] https://github.com/zymotik/it500/ is not a valid add-on repository
21-01-08 01:08:04 ERROR (MainThread) [supervisor.utils.json] Can't read json from /data/addons/git/7100a8b3/repository.json: [Errno 2] No such file or directory: '/data/addons/git/7100a8b3/repository.json'
21-01-08 01:08:04 WARNING (MainThread) [supervisor.store.data] Can't read repository information from /data/addons/git/7100a8b3/repository.json
Is there any way around it?
Thank you very much for your help and the work you do.

I have spent a couple of ours searching for any similar issue, I can add other addons from github (just tested), no issue with DNS or anything else, restarted a couple of time everything to be sure, I am really out of ideas. Other than that I am ready with the device:id, it500 is functional

I have spent a couple of ours searching for any similar issue, I can add other addons from github (just tested), no issue with DNS or anything else, restarted a couple of time everything to be sure, I am really out of ideas. Other than that I am ready with the device:id, it500 is functional

Were you able to install successfully? I am looking for a ready solution to control the salus IT500, but so far I have successfully managed only through NODE-RED (with some restrictions - to one device, and I have two). In addition, I would like to control them from the Lovelace card, and not from the NODE-RED dashboard.

it may be time to throw the it500 and replace it with something that actually works with lovelace and HA automations fully.
Daniel Tudor
+40742226622

On 11 Feb 2021, at 21:21, martinez1000<EMAIL_ADDRESS>wrote:

Were you able to install successfully? I am looking for a ready solution to control the salus IT500, but so far I have successfully managed only through NODE-RED (with some restrictions - to one device, and I have two). In addition, I would like to control them from the Lovelace card, and not from the NODE-RED dashboard.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub, or unsubscribe.


Fix unknown subcommand errors

See commit messages for more details.
Related to https://jira.mesosphere.com/browse/DCOS_OSS-3500

@mesosphere-ci run linux integration tests

@mesosphere-ci run linux integration tests

cmd = ['dcos', 'help', 'node'], returncode = 0
stdout = b'Display DC/OS node information\n\nUsage:\n  dcos node [flags]\n  dcos node [command]\n\nCommands:\n  decommission\n ...  --json              Print in json format\n\nUse "dcos node [command] --help" for more information about a command.\n'
stderr = b'', env = None, stdin = None

    def assert_command(
            cmd,
            returncode=0,
            stdout=b'',
            stderr=b'',
            env=None,
            stdin=None):
        """Execute CLI command and assert expected behavior.

        :param cmd: Program and arguments
        :type cmd: list of str
        :param returncode: Expected return code
        :type returncode: int
        :param stdout: Expected stdout
        :type stdout: bytes
        :param stderr: Expected stderr
        :type stderr: bytes
        :param env: Environment variables
        :type env: dict of str to str
        :param stdin: File to use for stdin
        :type stdin: file
        :rtype: None
        """

        returncode_, stdout_, stderr_ = exec_command(cmd, env, stdin)

        assert returncode_ == returncode, (returncode_, returncode)
>       assert stdout_ == stdout, (stdout_, stdout)
E       AssertionError

@mesosphere-ci run linux integration tests

There were some fixtures in integration tests expecting the old format, trying again.


Do a temporary copy+rename instead of just copy

Previous code wrote directly to HDFS file. This caused problems when the
process is stopped as the copy operation is stopped before finishing.
Now the copy is done in several steps

Copy to a temporary file (.copy). This is the operation that takes
longer
Delete destination file (.siva)
Move temporary file to destination (atomic)

@mcarmonaa it fails because go-git v4 is still not released. We have the go-git version set in borges' glide.yaml. Testing with the correct version passes in my laptop. More information here:
https://github.com/src-d/core-retrieval/pull/42#issuecomment-347463354


feat: EDV storage

Signed-off-by: Derek Trider<EMAIL_ADDRESS>

@DRK3 does this close #506?

@DRK3 can you confirm the tests work with this change?


Required and Science command

RequiredCommand

Added Required Command that showcases all the leftover modules to take after cross referencing against user's GradPad
Can be accessed by typing 'required'
Modules are split into 5 various categories

Foundation
IT Professionalism
Math And Science
Science
Industrial Experience

Respective modules can be found under data folder
If user has completed all modules, a success message will be shown for each category(eg. "You have completed all your Foundation Modules!")
Focus Area modules have not been added (KIV)
For Industrial Experience, 12MCs are needed, thus, the required command also calculates the current MC the user is at at reflects it in the Command Line Display

ScienceCommand
-Added Science command that displays all the available Science modules.
-Can be accessed by typing 'science'

Respective modules can be found under data folder as well

General Design Approach
-The RequiredCommand and ScienceCommand have various attributes to help store the modules, namely a ReadOnlyGradPad for storage of modules and an actual ObservableList to do the comparisons with.
-Each module category will have a method to set up the module storage(eg. setFoundationStorage) and compare that storage against the user's currents modules (compareFoundation) to see if the user is missing anything out.
-The execute method then invokes all the various methods to set up the storages and does the comparisons, keeping track of all the undone modules, before displaying it to the user.
Notes
Since the command works by retrieving the stored modules in a JSON file and that the RequiredCommand extends the Command class, I had to change the execute method, to allow it to throw IOExceptions and DataConversionExceptions so that it can handle exceptions if the JSON file is not found. As a result, I changed a couple methods to throw IOExceptions and DataConversionExceptions, but this should not affect the general flow of the app.

As per Sam's reviews, I have made some changes to the PR.
The major changes are as such:
RequiredCommandStorage
Added this class to deal with all the pulling of modules from the respective JSON files.
RequiredCommandMessages
Added this class to store all the standard messages and paths that the RequiredCommand will use.
RequiredCommand

Changed the class such that it no longer has to deal with storage of the required modules! It now simply uses Getter methods from the RequiredCommandStorage to get the respective modules from the various fields.

The class now mainly deals with all the comparison of GradPad modules against all the required modules.

ScienceCommand

Changed the class slightly to improve the overall performance and design

RequiredCommandTest
Changed the tests to suit the new methods
RequiredCommandStorageTest
Added the test class to test the new RequiredCommandStorage class.

Codecov Report

Merging #97 into master will increase coverage by 0.39%.
The diff coverage is 78.68%.

@@             Coverage Diff              @@
##             master      #97      +/-   ##
============================================
+ Coverage     73.31%   73.70%   +0.39%
- Complexity      424      460      +36
============================================
  Files            76       79       +3
  Lines          1274     1392     +118
  Branches        123      141      +18
============================================
+ Hits            934     1026      +92
+ Misses          302      293       -9
- Partials         38       73      +35

Impacted Files
Coverage Δ
Complexity Δ

...java/seedu/address/logic/parser/GradPadParser.java
85.00% <0.00%> (-15.00%)
13.00 <0.00> (ø)

src/main/java/seedu/address/ui/UiManager.java
0.00% <ø> (ø)
0.00 <0.00> (ø)

.../seedu/address/logic/commands/RequiredCommand.java
70.83% <70.83%> (ø)
14.00 <14.00> (?)

...seedu/address/storage/RequiredCommandMessages.java
83.33% <83.33%> (ø)
1.00 <1.00> (?)

...a/seedu/address/logic/commands/ScienceCommand.java
87.50% <87.50%> (ø)
5.00 <5.00> (?)

.../seedu/address/storage/RequiredCommandStorage.java
100.00% <100.00%> (ø)
11.00 <11.00> (?)

...el/module/ModuleCodeContainsKeywordsPredicate.java
77.77% <0.00%> (-22.23%)
8.00% <0.00%> (+1.00%)
:arrow_down:

...java/seedu/address/nusmods/NusmodsDataManager.java
80.00% <0.00%> (-20.00%)
7.00% <0.00%> (+1.00%)
:arrow_down:

...java/seedu/address/logic/commands/FindCommand.java
81.81% <0.00%> (-18.19%)
7.00% <0.00%> (+1.00%)
:arrow_down:

src/main/java/seedu/address/model/GradPad.java
78.57% <0.00%> (-13.10%)
13.00% <0.00%> (+1.00%)
:arrow_down:

... and 15 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 3495472...15ba3ac. Read the comment docs.


Scott: Update Labs for ASP.NET Core 2.1.

Includes all tags, with the format 2.1_LabXStart (1-7).

Thanks, Scott!


[SPARK-9563][SQL] Remove repartition operators when they are the child of Exchange and shuffle=True

JIRA: https://issues.apache.org/jira/browse/SPARK-9563
We should remove repartition operators when they are the child of Exchange and shuffle=True.

Merged build triggered.

Merged build started.

Test build #39858 has started for   PR 7959 at commit 5dc7be8.

Test build #39858 has finished for   PR 7959 at commit 5dc7be8.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test PASSed.

One other thought: a related optimization might be to collapse adjacent repartition calls.  E.g. if I call repartition(10).repartition(100) then we'll actually repartition twice, whereas I think we may be able to safely drop the smaller repartition.

To optimise repartition(10).repartition(100) to repartition(100) seems reasonable. Is it also doable for repartition(100).repartition(10) to repartition(10)?

Merged build triggered.

Merged build started.

Test build #40000 has started for   PR 7959 at commit 4ba7a38.

Test build #40000 has finished for   PR 7959 at commit 4ba7a38.

This patch fails PySpark unit tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test FAILed.

retest this please.

Merged build triggered.

Merged build started.

Test build #248 has started for   PR 7959 at commit 4ba7a38.

Merged build triggered.

Merged build started.

Test build #40022 has started for   PR 7959 at commit 4ba7a38.

Test build #248 has finished for   PR 7959 at commit 4ba7a38.

This patch fails Spark unit tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test FAILed.

Test build #40022 has finished for   PR 7959 at commit 4ba7a38.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test PASSed.

Merged build triggered.

Merged build started.

Test build #40285 has started for   PR 7959 at commit e1efa4c.

Test build #40285 has finished for   PR 7959 at commit e1efa4c.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test PASSed.

/cc @yhuai, do you have any thoughts on this PR? The basic change here seems fine to me.

Merged build triggered.

Merged build started.

Merged build finished. Test FAILed.

test this please.

Merged build triggered.

Merged build started.

Merged build finished. Test FAILed.

retest this please.

Merged build triggered.

Merged build started.

Test build #40429 has started for   PR 7959 at commit 0b334b7.

Test build #40429 has finished for   PR 7959 at commit 0b334b7.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test PASSed.

@JoshRosen Hi, I think this patch stays here too long. Is it ok to merge it?

@yhuai any thoughts? I think the high level approach makes sense.


Spring Boot autoconfiguration tutorial doesn't work in Spring Boot 3

Spring Boot 3 has removed support for META_INF/spring.factories autoconfiguration here.

Hey, @prdoyle.
We have internal tasks to update our articles to Spring Boo 3, but it might take some time.
This article will remain open until then.

Hi @prdoyle we have updated the article.