Suggetion about event.

Reopen old issue #3243. Maybe for 2.1
Event as jquery like
1. Trigger event using name or object (break BC? yes/no).
Currently, to send event object, it must be as as second parameter of trigger(). But, event object itself contain name property. Better first parameter can be event name or event object.
// use
Yii::$app->trigger('myEvent');
// or use
$myEvent = new Event('myEvent');
Yii::$app->trigger($myEvent);

2. Use return false; or $event->stopPropagation() to stop handling (break BC? no).
Currently to stop event handling we use $event->handled = true. Prefer using return false.
Yii::$app->on('myEvent', function($event){
    //...
    if ($condition){
        return false;
        // or $event->stopPropagation();
        // instead of $event->handled = true;
    }
});

Yii::$app->trigger('myEvent');

3. Add extra parameter when trigger event (break BC? no).
Yii::$app->on('myEvent', function($event, $param1, $param2){
    // do with $param1 and $param2
});

Yii::$app->trigger('myEvent',['param1', 'param2']);

There's going to be an event manager PSR in the works soon: https://groups.google.com/forum/#!topic/php-fig/MFL__YvumkE

Here: https://github.com/bretterer/fig-standards/blob/event-manager/proposed/event-manager.md
It totally makes sense so I'd adopt it.

hmm... What target actually is? What different with sender? If event only triggered from Event Manager, i am affraid we must adopt namespace.

It doesn't force you to name events in any certain way but yes, I guess it would lead to names like namespace.eventName. Target serves the same purpose as sender. You can see targets in JavaScript DOM events everywhere. Usually it is what triggered the event.

@mdmunir I like this way ，Laravel's event is implemented


one client's packet is splited to three packets by server

client code
public class ClientTest {
	public static void main(String[] args) {
		Vertx vertx = Vertx.vertx();
		vertx.createNetClient().connect(1234, "localhost", res -> {
			NetSocket socket = res.result();
        	Random random = new Random();
			byte[] data = new byte[2200];
			random.nextBytes(data);
			socket.write(Buffer.buffer().appendBytes(data));
		});
	}
}

server code
public class ServerTest {
    public static void main(String[] args) {
        Vertx vertx = Vertx.vertx();
        NetServerOptions options = new NetServerOptions();
        //options.setReceiveBufferSize(2000);
        //options.setSendBufferSize(2000);
        NetServer server = vertx.createNetServer(options);
        server.connectHandler(socket -> {
            socket.handler(buffer -> {
                System.out.println("I received some bytes: " + buffer.length());
            });
        }).listen(1234);
    }
}

I konw vertx use AdaptiveRecvByteBufAllocator for default allocator, it can automatically increases and decreases buffer size, but it not work for the first large packet.
I also used NetServerOptions to set BufferSize, vertx will use FixedRecvByteBufAllocator, it work well  at the beginning, but this connection's tcp window is decreasing, the result is the  tcp window can't hold one packet.
How should I do, if I want to receive a whole packet.

hi, you should not ask questions in this issue tracker and instead use the Vert.x forum where someone will answer you https://groups.google.com/forum/#!forum/vertx


[BEAM-297] update flink README.md at line 145

Be sure to do all of the following to help us incorporate your contribution
quickly and easily:

[x] Make sure the PR title is formatted like:
[BEAM-<Jira issue #>] Description of pull request
[x] Make sure tests pass via mvn clean verify. (Even better, enable
Travis-CI on your fork and ensure the whole test matrix passes).
[x] Replace <Jira issue #> in the title with the actual Jira issue
number, if there is one.
[ ] If this contribution is large, please file an Apache
Individual Contributor License Agreement.

[BEAM-297] update flink README.md at line 145,
version of org.apache.beam should be 0.1.0-incubating-SNAPSHOT now.

R: @mxm @aljoscha any reaction?

Ah yes, that one fell through the cracks. LGTM
I'll merge it. In the long run this should probably be folded into the documentation.

Thanks for fixing! @JianfengQian 😃

Thanks for sharing this fix with us!


Wait till WebSocket connection is established

SignalR is working great except one thing. I establish a connection on document ready
$(document).ready(function () {
const connection = new signalR.HubConnectionBuilder()
.withUrl("/widgetHub")
.build();
connection.on("ReceiveEmailCount", (userId) => {
    console.log("UserId via SignalR:" + userId);
});

connection.start().catch(err => console.error(err.toString()));
connection.invoke("GetEmailCount").catch(err => console.error(err.toString()));

});
The invoke is called after the connection.start(), but the connection is not established before the connection.invoke is called.
Because of this I get the error "Error: Cannot send data if the connection is not in the 'Connected' State."
If I build a delay for the execution of connection.invoke it works perfectly, but I don't want to wait longer than necessary.
Is there a way to wait till the WebSocket connection is established?

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

ID: 3cf283c9-5cd2-a9ff-b8c8-372d8a04356d
Version Independent ID: 729fddcf-24e4-b563-4952-a8045b231868
Content: ASP.NET Core SignalR JavaScript client
Content Source: aspnetcore/signalr/javascript-client.md
Product: aspnet-core
GitHub Login: @rachelappel
Microsoft Alias: rachelap

Yes, the start and invoke functions are async so you can await them or do .then(() => connection.invoke(...))

@BrennanConroy when I use await I get an error that the start and invoke function are not async...
The .then(() => is working perfectly thanks!

Closing as answered. Re-open if you have more issues.


Upgrade to napi@1

New platforms support:

windows x32 (Wait for https://github.com/rust-lang/rust/issues/67497)
apple silicon
linux aarch64
linux armv7
android aarch64

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.

@kdy1 testing failed, doesn't seem to be caused by my changes.

The failing test is a test about invalid config file.
It seems like napi::CallContext.get_deserialized does not support deny_unknown_fields of serde. Is this intentional?

hmmmm, seems like error was eaten by napi...I will fix it

Is this done?

Everything is done in swc side, I need sometime to prepare the napi@1 final release, like documentation and migration guide.

Then I'll wait for it. Thanks a lot!!

Ready to review


hotreload hook

I have some complex component with many subcomponents. I need hidden textarea for input capturing. I create root component with textarea. I need clicks on any subcomponent lead to focus on this textarea. I don't want seek local root component with $parent walking and seeking for magic property.
So I create single object (shared controller) with focus method. So I handle all clicks with some action and maintain focus on textarea.
Now hotreload comes. It triggers rerender of root component and after that replaces state with old one. old state includes old textarea reference.

I think the problem is that you are placing the textarea reference in your component state. Component state should be pure serializable data. The textarea reference doesn't need to be in the state. You can just attach it to the instance in the ready hook with this.sharedController = ....

You can just attach it to the instance in the ready hook with this.sharedController = ....
No, I can't, because after 'ready' method comes state replace.

Do not define sharedController inside data at all, then it won't be replaced. It's just a normal property on the Vue instance.

I have complex app with multiple editors. I don't know exact count of components. I can bootstrap Vuejs as separate app, but it breaks idea of vuejs components, because now it's two types of components: native vuejs and bootstraping with sharedController provided in props.

I don't think I understand your last comment and how it relates to the solution I suggested. But to be concise, your sharedController doesn't need to be defined in data. Just do:
created () {
  this.sharedController = sharedController
}

If this doesn't work due to other constraints, then you didn't provide enough context. Either way, this should not be solved by adding a hotreload hook.

Ok. Let's make it simplier.
sharedController is just mediator. It recieves 'focus' messages from all complex component. I need make actual textarea focused when 'focus' event occur.
What happens when I init app.
I need somehow told sharedController what to do on 'focus' event. So I provide closure with actual reference to textarea. All works ok.
Hotreload comes.
New component tree created with new sharedController. All is ok: new tree with new sharedController, old with old one. Ready hook comes. I told new sharedController what to do on 'focus' event.
Now hotreload replaces all my state in new component with old sharedController. How old sharedController (from previous state) should be updated?

Did you understand my suggestion? sharedController is not part of the state if you avoid declaring it in data.

Hm. It works, but it's kind'a injecting in component. I can accidently replace some important property. I suggested that there is only several safe spaces for state: data, props, methods.

I tested some time solution with 'created' method. I've found that it works only in this simple case, that I mentioned above.
I have another case, when hotreload hook is much simpler.
I have some two types of components

Complex structure DOM-based component with one hidden textarea that capture all keyboard activity
Simple canvas-based component with hidden textarea.
I have component for multiple keyboard scheme handling. Problem 1. Current scheme is a state. After hot reload I will be switched to default scheme.
Ok. I extend keyboard_controller for different components with actions specific to that component. Actions could be result of keyboard actions or mouse actions.
So I want handle all mouse events with that controller. Problem 2. Canvas must be pannable, so I must store offset_x, offset_y between hot reloads.

So, I have two solutions:

Without hotreload hook. I must make state detachable from controller, because state must preserve with hot reload. After 'ready' I must setTimeout for waiting hotreload applies. Now data has old state, I can attach this state to controller and call update, that would redraw all canvas contents to actual state (not clean canvas, but with elements, pan, other state before hotreload)
With hotreload hook. Just update textarea, canvas reference. Then call update.

Pros:

If error occurs in hotreload hook, page would be reloaded, due hotreload exception catch logic, not my custom.
setTimeout/setImmediate not guarantee that no changes occur between 'ready' and after hotreload, so external data feed can easily break the state. Hotreload hook is sync.
I can organize code as I want, framework not limits me.
(almost impossible case) It's stable if hotreload would be async and setTimeout would be fired before state replace.

Cons:

If controller initialization is long, I want no new controller created at all, so I want fully different path of hooks for hotreload and typical create. It's too much changes and can be fragile.


Vertical and horizontal sliders

Sliders such as progress bars or volume sliders found on music and video controls for example

The sliders are ready to be implemented in the next version


Unhelpful sugared type in type hint

Suggest we have:
struct Foo
{
    using Self_t = Foo;
    static inline auto new(Raw_t x) { return (Self_t)(x); }
};

Something like this will show up in inlay-hint:
auto f | :Self_t |= Foo::new(x);
         ^^^^^^^

So clearly we want Self_t --> Foo , however the lsp server seems to be unable to handle that inference.

Transferred to server repo.

I wouldn't say it's wrong, but it's certainly less helpful than using the target of the alias would be.
See also #1298, this is another motivating example for having better heuristics.

cc @zyn0217 who has a patch which improves the heuristic for when to use the desugared type in many cases, but not this one

Thanks for your help, may i ask how can we apply such patch mentioned?

Thanks for noticing my patch. Please let me make sure if I'm understanding correctly.

So clearly we want Self_t --> Foo, ...

Are you suggesting that, we should print real type for using alias (including typedef of course), if the alias name (Self_t in this example) is essentially the type to which scope the using-declaration belongs?(Foo in this example.)
Consider a few examples:
#include <vector>

template <typename T>
struct Widget {
  using Injected = Widget;
  using Vector = std::vector<Injected>;
  static Vector Make() { return {}; }
  static Injected Create() { return {}; }
};

using Type = int;

auto O = Widget<Type>::Create(); // : Widget<int>, rather than `: Injected` ?
auto V = Widget<Type>::Make(); // : Vector, instead of `: std::vector<Widget<int>>` ?

Note we can't always prefer real types. Take a real scenario for example, if you've ever played with curl, you probably had to deal with a type called CURL. It is created by curl_easy_init, and used for later networking manipulation. It is, however, a type alias of void. One might write following code,
auto curl = ::curl_easy_init();

and I think we're expecting hint CURL * for curl rather than void * which is confusing, right?

Thanks for noticing my patch. Please let me make sure if I'm understanding correctly.

So clearly we want Self_t --> Foo, ...

Are you suggesting that, we should print real type for using alias (including typedef of course), if the alias name (Self_t in this example) is essentially the type to which scope the using-declaration belongs?(Foo in this example.)
Consider a few examples:
#include <vector>

template <typename T>
struct Widget {
  using Injected = Widget;
  using Vector = std::vector<Injected>;
  static Vector Make() { return {}; }
  static Injected Create() { return {}; }
};

using Type = int;

auto O = Widget<Type>::Create(); // : Widget<int>, rather than `: Injected` ?
auto V = Widget<Type>::Make(); // : Vector, instead of `: std::vector<Widget<int>>` ?

Note we can't always prefer real types. Take a real scenario for example, if you've ever played with curl, you probably had to deal with a type called CURL. It is created by curl_easy_init, and used for later networking manipulation. It is, however, a type alias of void. One might write following code,
auto curl = ::curl_easy_init();

and I think we're expecting hint CURL * for curl rather than void * which is confusing, right?

I found that interestingly :
using Self_t = Foo&;
static .... auto& new(...) { return (Self_t)(x); }

things can be inferred correctly but not for using Self_t = Foo;

We don't do extra desugaring for references or pointers at the client site.
I don't think this is intended behavior, since we have the patch trying to retain the sugared type for auto deduction.
struct D {
  using type = D;
  using ref = D&;
  ref self() { return *this; }
  type value() { return *this; }
};

void foo() {
  D d;
  auto self = d.self(); // self: D&, where sugared type `ref` is discarded.
  // VarDecl <col:3, col:22> col:8 self 'D':'D' cinit
  //                                     ^~~ Hmmm, should be `ref` here
  auto value = d.value(); // value: type. The sugared `type` is retained.
  // VarDecl <col:3, col:24> col:8 value 'type':'D' cinit
}

Maybe this is a bad case for that patch, but I didn't investigate further.

cc @zyn0217 who has a patch which improves the heuristic for when to use the desugared type in many cases, but not this one

Thanks for your help, may i ask how can we apply such patch mentioned?

If you'd like to apply it before it is approved and merged, you'd have to build clangd from source, and apply the patch to your source checkout (which you can do using arc patch).
Alternatively, you can wait until the patch is merged and appears in a weekly snapshot at https://github.com/clangd/clangd/releases (or if you're on Linux, in a nightly package at https://apt.llvm.org/).

I don't think this is intended behavior, since we have the patch trying to retain the sugared type for auto deduction.
struct D {
  using type = D;
  using ref = D&;
  ref self() { return *this; }
  type value() { return *this; }
};

void foo() {
  D d;
  auto self = d.self(); // self: D, where sugared type `ref` is discarded.
  // VarDecl <col:3, col:22> col:8 self 'D':'D' cinit
  //                                     ^~~ Hmmm, should be `ref` here
  auto value = d.value(); // value: type. The sugared `type` is retained.
  // VarDecl <col:3, col:24> col:8 value 'type':'D' cinit
}

Maybe this is a bad case for that patch, but I didn't investigate further. (@HighCommander4 might have a more clear understanding about it.)

I'm not sure either -- I can't think of a reason this discrepancy would be intentional, so my first thought is it's a bug, but it's possible I'm overlooking something; maybe @mizvekov can comment on this.

I don't think this is intended behavior, since we have the patch trying to retain the sugared type for auto deduction.
struct D {
  using type = D;
  using ref = D&;
  ref self() { return *this; }
  type value() { return *this; }
};

void foo() {
  D d;
  auto self = d.self(); // self: D, where sugared type `ref` is discarded.
  // VarDecl <col:3, col:22> col:8 self 'D':'D' cinit
  //                                     ^~~ Hmmm, should be `ref` here
  auto value = d.value(); // value: type. The sugared `type` is retained.
  // VarDecl <col:3, col:24> col:8 value 'type':'D' cinit
}

Maybe this is a bad case for that patch, but I didn't investigate further. (@HighCommander4 might have a more clear understanding about it.)

I'm not sure either -- I can't think of a reason this discrepancy would be intentional, so my first thought is it's a bug, but it's possible I'm overlooking something; maybe @mizvekov can comment on this.

Thanks for your help :)

Sorry, I was wrong. It has nothing to do with D110216.
Back to @Eplankton's case,

I found that interestingly :

using Self_t = Foo&;
static .... auto& new(...) { return (Self_t)(x); }

things can be inferred correctly but not for using Self_t = Foo;

(It is incomplete and I think it should be like this.)
struct D {
  using ref = D&;
  using value = D;
  static auto& createRef(D &x) { return (ref)(x); } // -> D&
  static auto createValue(D &x) { return (value)(x); } // -> value
};

The sugar was stripped in Sema::BuildCStyleCastExpr before type deduction, which occurred at the parsing stage for the expression (ref)(x). The result type (of the cast expression?) was constructed using the result of getNonLValueExprType(), where any structure above LValueReferenceType would be discarded.
ElaboratedType 0x555563a5f630 'ref' sugar
`-TypedefType 0x555563a5f600 'D::ref' sugar
  |-TypeAlias 0x555563a5f0b0 'ref'
  `-LValueReferenceType 0x555563a5f070 'D &'
# The Following would be retained.
    `-ElaboratedType 0x555563a5f010 'D' sugar
      `-RecordType 0x555563a5eef0 'struct D'
        `-CXXRecord 0x555563a5ee60 'D'


Add tablet UI for post-shower feedback

Within the first minute of a user leaving a shower, if they tap their RFID on the tablet, bring up a UI for them to rate their shower music experience and optionally provide comments.
On the idle screen during this minute, add text along the lines of "Marc, how was the playback? Tap RFID to provide feedback."

I've simplified the project plans to exclude a visible tablet, since it was redundant to the web interface. As such, I won't be implementing this.


Update licensing-ps-examples.md

Update Licensing PowerShell Examples with Microsoft Graph PowerShell equivalents.

#sign-off

Hi @barclayn, @SteveMutungi254 has finalized work on this PR. GH requires your sign off for review and merge. Appreciate your assistance!

#sign-off

reassign:omondiatieno

#sign-off


Merge to live!

Docs Build status updates of commit e0f4097:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

F1/rasterexportrotation-property-visio-vis_sdr-chm16262545.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/application-defined-or-object-defined-error.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/can-t-find-project-or-library.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/empty-enum-type-not-allowed.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/end-select-without-select-case.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/end-with-without-with.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/exit-do-not-within-doloop.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/exit-for-not-within-fornext.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/expected-variable-or-procedure-not-enum-type.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/invalid-inside-enum.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/invalid-optional-parameter-type.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/invalid-outside-enum.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/invalid-paramarray-use.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/invalid-redim.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/invalid-syntax-for-conditional-compiler-constant-declarations.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/must-be-first-statement-on-the-line.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/object-module-must-implement-all-procedures-in-interface.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/statement-invalid-outside-type-block.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/syntax-error.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/unable-to-unload-within-this-context-error-365.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/variable-not-defined.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/wend-without-while.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/while-without-wend.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/wildcard-characters-used-in-string-comparisons.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/windowless-controls-can-t-have-menus.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/with-object-must-be-user-defined-type-object-or-variant.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/wizards-can-t-reference-projects.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/wrong-number-of-arguments-error-450.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/wrong-number-of-dimensions.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/wrong-version-of-operating-system-requires-windows-nt-3-51-build-item1-or-later.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/you-must-save-a-project-before-you-can-reference-it.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/you-must-terminate-the-if-block-with-an-end-if.md
:white_check_mark:Succeeded
View

Office-Mac/AppleScriptTask.md
:white_check_mark:Succeeded
View

Office-Mac/GrantAccessToMultipleFiles.md
:white_check_mark:Succeeded
View

Office-Mac/idMSOExcelMac.md
:white_check_mark:Succeeded
View

access/Concepts/Miscellaneous/0-database-engine-driver.md
:white_check_mark:Succeeded
View

access/Concepts/Miscellaneous/5-database-engine-driver-1-of-2.md
:white_check_mark:Succeeded
View

access/Concepts/Miscellaneous/a-call-to-an-ole-system-function-was-not-successful-try-reinstalling-the-applica.md
:white_check_mark:Succeeded
View

access/Concepts/Miscellaneous/a-cancel-was-performed-on-the-operationerror-3642.md
:white_check_mark:Succeeded
View

access/Concepts/Miscellaneous/a-column-requested-is-not-being-returned-to-the-recordseterror-3647.md
:white_check_mark:Succeeded
View

access/Concepts/Miscellaneous/a-different-operation-is-preventing-this-operation-from-being-executederror-3667.md
:white_check_mark:Succeeded
View

access/Concepts/Miscellaneous/a-disk-i-o-error-occurred-while-reading-or-writing-to-the-temp-directoryerror-35.md
:white_check_mark:Succeeded
View

access/Concepts/Miscellaneous/a-problem-occurred-in-your-database-correct-the-problem-by-repairing-and-compact.md
:white_check_mark:Succeeded
View

access/Concepts/Miscellaneous/a-system-error-has-occurred-or-your-swap-file-has-reached-its-limiterror-3539.md
:white_check_mark:Succeeded
View

access/Concepts/Miscellaneous/about-compressing-the-data-in-a-text-memo-or-hyperlink-field.md
:white_check_mark:Succeeded
View

access/Concepts/Miscellaneous/access-denied-at-destination-dropbox-foldererror-3562.md
:white_check_mark:Succeeded
View

access/Concepts/Miscellaneous/access-was-denied-while-accessing-dropbox-folder-nameerror-3468.md
:white_check_mark:Succeeded
View

access/Concepts/Miscellaneous/account-name-already-existserror-3390.md
:white_check_mark:Succeeded
View

access/Concepts/Miscellaneous/account-name-is-not-a-valid-account-nameerror-3030.md
:white_check_mark:Succeeded
View

access/Concepts/Miscellaneous/action-query.md
:white_check_mark:Succeeded
View

This comment lists only the first 50 files in the pull request.
For more details, please refer to the build report.
Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.

Docs Build status updates of commit 0f56558:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

F1/rasterexportrotation-property-visio-vis_sdr-chm16262545.md
:white_check_mark:Succeeded
View

Language/Concepts/Forms/tips-on-using-text-boxes.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/a-compatible-activex-component-must-be-a-visual-basic-executable-or-a-dll.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/a-module-is-not-a-valid-type.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/a-procedure-with-a-paramarray-argument-cannot-be-called-with-named-arguments.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/a-property-or-method-call-cannot-include-a-reference-to-a-private-object-either.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/activex-control-item-not-found-error-363.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/application-defined-or-object-defined-error.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/argument-not-optional-error-449.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/argument-required-for-property-let-or-property-set.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/array-argument-must-be-byref.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/assignment-to-constant-not-permitted.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/bad-dll-calling-convention-error-49.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/bad-file-mode-error-54.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/bad-interface-for-implements-interface-is-not-derived-from-iunknown.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/bad-interface-for-implements-method-does-not-return-hresult.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/bad-interface-for-implements-method-has-out-only-or-lcid-parameter.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/bad-interface-for-implements-method-has-parameter-with-too-many-levels-of-indire.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/bad-interface-for-implements-method-has-underscore-in-name.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/bad-interface-for-implements-methods-uses-type-that-is-not-supported-by-visual-b.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/bad-record-length-error-59.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/bad-record-number-error-63.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/block-if-without-end-if.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/can-t-add-a-reference-to-the-specified-file.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/can-t-call-friend-procedure-on-an-object-that-isn-t-an-instance-of-the-defining.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/can-t-create-autoredraw-image-error-480.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/can-t-display-system-information.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/can-t-empty-clipboard-error-520.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/can-t-enter-break-mode-at-this-time.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/can-t-execute-code-in-break-mode.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/can-t-find-project-or-library.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/can-t-get-or-put-user-defined-type-containing-object-reference.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/can-t-have-paramarrays-with-optional-arguments.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/can-t-load-or-unload-this-object-error-361.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/can-t-open-clipboard-error-521.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/can-t-perform-requested-operation-error-17.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/can-t-redim-erase-or-assign-to-variant-that-contains-array-whose-element-is-with.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/can-t-rename-with-different-drive-error-74.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/can-t-sink-this-object-s-events-because-it-s-already-firing-events-to-the-maximu.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/cannot-define-a-kwid_tkpublic-user-defined-type-within-a-private-object-module.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/cannot-display-specified-name-because-it-is-hidden.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/cannot-jump-to-specified-type-because-it-is-in-the-specified-library-which-is-no.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/case-else-outside-select-case.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/case-without-select-case.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/class-is-not-set-error-31018.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/class-not-registered-on-local-machine-error-463.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/code-execution-has-been-interrupted.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/conflicting-attributes-were-found-in-itemthe-defaults-will-be-used.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/constant-expression-required.md
:white_check_mark:Succeeded
View

Language/Reference/User-Interface-Help/constants-fixed-length-strings-arrays-user-defined-types-and-declare-statements.md
:white_check_mark:Succeeded
View

This comment lists only the first 50 files in the pull request.
For more details, please refer to the build report.
Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.


🐛 [BUG] -

Description
the image at the range-slider project is not showing its broken

Reproduction URL
https://zerooctave.co/ZeroOctave-Javascript-Projects/
Reproduction steps
1. Go to 'https://zerooctave.co/ZeroOctave-Javascript-Projects/'
2. Scroll down to 'maze game'
3. See error

Screenshots
![Screenshot (96)](https://github.com/ZeroOctave/ZeroOctave-Javascript-Projects/assets/125110272/fd06aef1-c5ca-4b2b-a075-d3df7de31fa6)

Logs
No response
Browsers
Chrome, Firefox, Microsoft Edge, Brave
OS
No response
Additional Context
No response
Sections Completed

[X] Description
[X] Reproduction URL
[X] Reproduction steps
[X] Screenshots
[ ] Logs
[ ] Browsers
[ ] OS
[ ] Additional Context

Code of Conduct

[X] I follow Contributing Guidelines of this project.
[X] I have checked the current issues for duplicate problems.
[X] I have read the readme of this repository.

can i take this issue

yes sure if you have any dought  i will help you if you want

@gopiexplore Can you please review my pr?

@Astrodevil @Anmol-Baranwal @akshatkhatri Can you please review my pr?


Remove Unencrypted Logs from Private Token Contract

We emit unencrypted logs from the private functions in the private token contract. This leaks privacy (spotted original by Mike in https://github.com/AztecProtocol/aztec-packages/issues/1689). But for the sandbox release, we still kept these unencrypted logs for the private token contract because it was being used in the docs to demonstrate retrieval of logs. Longer term, we should remove these unencrypted logs from this contract and update the docs to use a different example for retrieval of unencrypted logs.
https://github.com/AztecProtocol/aztec-packages/blob/ad1c2cb13434ecac1b25dd42a68bac8efdb0c4f5/yarn-project/noir-contracts/src/contracts/private_token_contract/src/main.nr#L41
https://github.com/AztecProtocol/aztec-packages/blob/ad1c2cb13434ecac1b25dd42a68bac8efdb0c4f5/yarn-project/noir-contracts/src/contracts/private_token_contract/src/main.nr#L65
https://github.com/AztecProtocol/aztec-packages/blob/ad1c2cb13434ecac1b25dd42a68bac8efdb0c4f5/yarn-project/noir-contracts/src/contracts/private_token_contract/src/main.nr#L94
Most (if not all) of such logs can be found by grepping 'TODO(1757)'

Addressed by https://github.com/AztecProtocol/aztec-packages/pull/1780


Tap the current tab bar item to pop to the first route

Description
Tapping the current tab bar item in a UITabController brings the user back to the root view controller, if the user is already in the root view controller it will try to scroll the child UITableViewController to the top.  This is the first step to implementing such behavior.
Related Issues
#25181
Tests
See tab_view_test.dart
Checklist
Before you create this PR confirm that it meets all requirements listed below by checking the relevant checkboxes ([x]). This will ensure a smooth and quick review process.

[x] I read the Contributor Guide and followed the process outlined there for submitting PRs.
[x] I signed the CLA.
[x] I read and followed the Flutter Style Guide, including Features we expect every widget to implement.
[x] I updated/added relevant documentation (doc comments with ///).
[x] All existing and new tests are passing.
[x] The analyzer (flutter analyze --flutter-repo) does not report any problems on my PR.
[x] I am willing to follow-up on review comments in a timely manner.

Breaking Change
Does your PR require Flutter developers to manually update their apps to accommodate your change?

[ ] Yes, this is a breaking change (Please read Handling breaking changes). Replace this with a link to the e-mail where you asked for input on this proposed change.
[x] No, this is not a breaking change.

@LongCatIsLooong, are you still working on this PR?  If not, could you close it to get it off of the PR backlog?


What code can i use to see the score of the most recent trading day?

❓ Questions and Help
I used my own data(till 2020-12-25) to run example work flow, How to see the top5 or buttom 5 or all of them's score to trade on the stock market tomorrow? THX  XD
We sincerely suggest you to carefully read the documentation of our library as well as the official paper. After that, if you still feel puzzled, please describe the question clearly under this issue.

Hi, @quinnnnnnnnn
You can use Recorder to retreive the model predictions.


Feature Request: Jump to index without animation

I want to set the stack to a new index via the controller

This would be real nice !

any updates on this feature?

Done in the v7.0.0!


Add environment.yaml

Add an environment.yaml file for easy installation of snakemake and other dependencies using conda. Fixes #4.
Create a new conda environment by running
conda update -n base conda
conda env create -f environment.yaml
conda activate snakemake-tutorial

I named the environment snakemake-tutorial. A bit wordy, but descriptive.

In the README, we might want to remind folks to disconnect from VPN before creating the environment, since pip doesn't work well when connected.

Should we merge this in and i'll add it to the base code repo?


Workspace IRI not preserved when not logged in first

When I access e.g.  https://mission-control.netlify.app/workspaces/instance868993698 and I am not logged in, I am taken to the login screen. When I log in, I end up on my default dashboard instead of  https://mission-control.netlify.app/workspaces/instance868993698.
When I am already logged in, https://mission-control.netlify.app/workspaces/instance868993698 takes me to my workspace.

Thanks for the feedback! I will definitely improve this. We're currently migrating to a different authentication provider, I'll tackle this issue as soon as it's done - likely during the weekend.

Thanks for the feedback! I will definitely improve this. We're currently migrating to a different authentication provider, I'll tackle this issue as soon as it's done - likely during the weekend.


Unable to pull / build docker image

Due to lack of connectivity with dockers repositories grafana lab is unable to pull/build dockers images  :
[developer@devbox metrics-grafana]$make lab
docker-compose -f telemetry-stack/docker-compose.yaml pull
Pulling influxdb (influxdb:1.1.3)...
ERROR: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
make: *** [stack-pull] Error 1

@hpreston might be able to help with connectivity policies


fails to build, "missing function body"

I'm trying to build a different project (kahing/goofys), which uses this project.  I'm using a Rock64 running Ubuntu 17.10 armhf, actually aarch64 architecture.  I get this error message:

Sorry, I'm on my phone
rock64@rock64:~$ go get github.com/kahing/goofys
github.com/jacobsa/fuse/internal/buffer
work/src/github.com/jacobsa/fuse/internal/buffer/runtime.go:24: missing function body for "memclr"
work/src/github.com/jacobsa/fuse/internal/buffer/runtime.go:29: missing function body for "memmove"
I saw the same thing in a closed issue from a year ago, and the guy said he figured it out - but I'm less knowedgeable than he was and don't understand his solution.  Any chance that change could be made now?

This was most likely fixed by https://github.com/jacobsa/fuse/commit/0630024b2bfb0724598a8dbccc5aa568b4379311


freedom转发UDP有问题？

Please skip to the English section below if you don't write Chinese.
中文：
提交 Issue 之前请先阅读 Issue 指引，然后回答下面的问题，谢谢。
除非特殊情况，请完整填写所有问题。不按模板发的 issue 将直接被关闭。

你正在使用哪个版本的 V2Ray？（如果服务器和客户端使用了不同版本，请注明）
v3.11-arm

你的使用场景是什么？比如使用 Chrome 通过 Socks/VMess 代理观看 YouTube 视频。
使用Max Lv 的ss Android 4.4.6连接v2ray的ss时，将其DNS请求通过路由和freedom转发到同在ss一个服务器的dnsmasq上来做域名解释。

你看到的不正常的现象是什么？（请描述具体现象，比如访问超时，TLS 证书错误等）
ss连接后测试是表示可用的，但是访问域名站点时，v2是有日志记录，但dnsmasq日志没收到请求记录。使用一个网络检测工具直接做DNS请求，的确没收到。v2日志是提示TCP的请求。直接访问IP站点是没问题的。（后者已通过部分网站和telegram验证过）

你期待看到的正确表现是怎样的？
正常通过freedom转发UDP流量。

请附上你的配置（提交 Issue 前请隐藏服务器端IP地址）。
服务器端配置:

   {
    "log" : {
        "access" : "/var/log/v2ray/access.log",
        "error" : "/var/log/v2ray/error.log",
        "loglevel" : "debug" //"warning"
    },

    "inbound" : {
        "tag" : "socks-in",
        "port" : 1080,
        "listen" : "*",
        "protocol" : "socks",
        "settings" : {
            "auth" : "noauth",
            "udp" : false,
            "ip" : "*",
            "timeout": 0
        }
    },
    "inboundDetour":[
        {
            "tag": "shadowsocks-in",
            "port": 8010,
            "listen": "<IP_ADDRESS>",
            "protocol": "shadowsocks",
            "allocate": { "strategy": "always"},
            "settings":{
                "email": "*",
                "method": "chacha20-ietf",
                "password": "*",
                "udp": false,
                "level": 0
            }
        }
    ],

    "outbound" :{
        "tag" : "vmess-lacn2",
        "protocol" : "vmess",
        "settings" : {
            "vnext" : [
                {
                    "address" : "*"
                    ,"port" : 6981,
                    "users" : [
                        {
                            "id" : "*",
                            "alterId" : 64,
                            "security" : "aes-128-gcm"
                        }
                    ]
                }
            ]
        },
        "mux" : {
            "enabled" : true,
            "concurrency":16
        }
    },
    "outboundDetour": [
        {
            "tag": "direct",
            "protocol": "freedom",
            "sendThrough": "<IP_ADDRESS>",
            "settings": {"domainStrategy": "AsIs"}
        },
        {
            "tag": "dns-fake",
            "protocol": "freedom",
            "sendThrough": "<IP_ADDRESS>",
            "settings": {
               "domainStrategy": "UseIP",
               "redirect": "<IP_ADDRESS>:53"
            }
        },
        {
            "tag" : "vmess-gcp", //Google GCP
            "protocol" : "vmess",
            "settings" : {
                "vnext" : [
                    {
                        "address": "*"
                        ,"port" : 6982,
                        "users" : [
                            {
                                "id" : "*",
                                "alterId" : 64,
                                "security" : "chacha20-poly1305"
                            }
                        ]
                    }
                ]
            },
            "mux" : {
                "enabled" : true,
                "concurrency":16
            }
        }
    ],

    "policy":{
        "levels": {
            "0": {
                "handshake": 1,
                "connIdle": 600,
                "uplinkOnly": 5,
                "downlinkOnly": 30
            },
            "100": {
                "handshake": 3,
                "connIdle": 60,
                "uplinkOnly": 60,
                "downlinkOnly": 30
            }
        }
    },

    "dns":{
        "servers": ["<IP_ADDRESS>"]
    },
    "routing" : {
        "strategy" : "rules",
        "settings" : {
            "domainStrategy" : "IPIfNonMatch",
            "rules" : [
                {
                    "type" : "field",
                    "outboundTag" : "dns-fake"
                    ,"ip":[
                        //"<IP_ADDRESS>"
                        "<IP_ADDRESS>"
                    ]
                    ,"port": "53"
                    ,"network": "tcp,udp"
                    ,"inboundTag" :["shadowsocks-in"]
                },
                {
                    "type" : "field",
                    "outboundTag" : "direct",
                    "ip" : [
                        "<IP_ADDRESS>/8",
                        "<IP_ADDRESS>/8",
                        "<IP_ADDRESS>/10",
                        "<IP_ADDRESS>/8",
                        "<IP_ADDRESS>/16",
                        "<IP_ADDRESS>/12",
                        "<IP_ADDRESS>/24",
                        "<IP_ADDRESS>/24",
                        "<IP_ADDRESS>/16",
                        "<IP_ADDRESS>/15",
                        "<IP_ADDRESS>/24",
                        "<IP_ADDRESS>/24",
                        "::1/128",
                        "fc00::/7",
                        "fe80::/10",
                        "geoip:cn"
                    ]
                },
                {
                    "type" : "field",
                    "outboundTag" : "vmess-gcp"
                    ,"domain" : [
                        /* google域名 */
                    ]
                },
                {
                    "type" : "field",
                    "outboundTag" : "vmess-gcp"
                    ,"inboundTag" :["shadowsocks-in"]
                    ,"ip" :[
                        /* googleIP */
                    ]
                }
            ]
        }
    }
}

客户端配置:

    // 在这里附上客户端配置

请附上出错时软件输出的错误日志。在 Linux 中，日志通常在 /var/log/v2ray/error.log 文件中。
服务器端错误日志:

    2018/03/04 19:46:59 [Info] [302455775] Proxy|Shadowsocks: tunnelling request to tcp:<IP_ADDRESS>:53
2018/03/04 19:46:59 [Info] [302455775] App|Dispatcher: taking detour [dns-fake] for [tcp:<IP_ADDRESS>:53]
2018/03/04 19:46:59 [Info] [302455775] Proxy|Freedom: opening connection to tcp:<IP_ADDRESS>:53
2018/03/04 19:46:59 [Info] [302455775] Transport|Internet|TCP: dialing TCP to tcp:<IP_ADDRESS>:53
2018/03/04 19:47:01 [Info] [1726762277] App|Proxyman|Inbound: connection ends > Proxy|Shadowsocks: connection ends > context canceled
2018/03/04 19:47:01 [Info] [1599425208] App|Proxyman|Inbound: connection ends > Proxy|Shadowsocks: connection ends > context canceled
2018/03/04 19:47:01 [Info] [1726762277] App|Proxyman|Outbound: failed to process outbound traffic > Proxy|Freedom: connection ends > context canceled
2018/03/04 19:47:01 [Info] [1599425208] App|Proxyman|Outbound: failed to process outbound traffic > Proxy|Freedom: connection ends > context canceled
2018/03/04 19:47:01 [Info] [1284659133] App|Proxyman|Inbound: connection ends > Proxy|Shadowsocks: connection ends > context canceled
2018/03/04 19:47:01 [Info] [1284659133] App|Proxyman|Outbound: failed to process outbound traffic > Proxy|Freedom: connection ends > context canceled
2018/03/04 19:47:04 [Info] [741636329] Proxy|Shadowsocks: tunnelling request to tcp:<IP_ADDRESS>:53
2018/03/04 19:47:04 [Info] [741636329] App|Dispatcher: taking detour [dns-fake] for [tcp:<IP_ADDRESS>:53]
2018/03/04 19:47:04 [Info] [741636329] Proxy|Freedom: opening connection to tcp:<IP_ADDRESS>:53
2018/03/04 19:47:04 [Info] [741636329] Transport|Internet|TCP: dialing TCP to tcp:<IP_ADDRESS>:53
2018/03/04 19:47:06 [Info] [3735725937] App|Proxyman|Inbound: connection ends > Proxy|Shadowsocks: connection ends > context canceled
2018/03/04 19:47:06 [Info] [3735725937] App|Proxyman|Outbound: failed to process outbound traffic > Proxy|Freedom: connection ends > context canceled
2018/03/04 19:47:06 [Info] [2986977334] App|Proxyman|Inbound: connection ends > Proxy|Shadowsocks: connection ends > context canceled
2018/03/04 19:47:06 [Info] [2986977334] App|Proxyman|Outbound: failed to process outbound traffic > Proxy|Freedom: connection ends > context canceled
2018/03/04 19:47:06 [Info] [1870120712] App|Proxyman|Inbound: connection ends > Proxy|Shadowsocks: connection ends > context canceled
2018/03/04 19:47:06 [Info] [1870120712] App|Proxyman|Outbound: failed to process outbound traffic > Proxy|Freedom: connection ends > context canceled
2018/03/04 19:47:06 [Info] [587753784] App|Proxyman|Inbound: connection ends > Proxy|Shadowsocks: connection ends > context canceled
2018/03/04 19:47:06 [Info] [587753784] App|Proxyman|Outbound: failed to process outbound traffic > Proxy|Freedom: connection ends > context canceled
2018/03/04 19:47:09 [Info] [1899824252] Proxy|Shadowsocks: tunnelling request to tcp:<IP_ADDRESS>:443
2018/03/04 19:47:09 [Info] [1899824252] App|Dispatcher: default route for tcp:<IP_ADDRESS>:443
2018/03/04 19:47:09 [Info] [1899824252] App|Proxyman|Mux: dispatching request to tcp:<IP_ADDRESS>:443
2018/03/04 19:47:11 [Info] [3722958417] App|Proxyman|Inbound: connection ends > Proxy|Shadowsocks: connection ends > context canceled
2018/03/04 19:47:11 [Info] [3722958417] App|Proxyman|Outbound: failed to process outbound traffic > Proxy|Freedom: connection ends > context canceled
2018/03/04 19:47:11 [Info] [447564512] App|Proxyman|Inbound: connection ends > Proxy|Shadowsocks: connection ends > context canceled
2018/03/04 19:47:11 [Info] [447564512] App|Proxyman|Outbound: failed to process outbound traffic > Proxy|Freedom: connection ends > context canceled
2018/03/04 19:47:11 [Info] [394752855] App|Proxyman|Outbound: failed to process outbound traffic > Proxy|Freedom: connection ends > context canceled
2018/03/04 19:47:11 [Info] [394752855] App|Proxyman|Inbound: connection ends > Proxy|Shadowsocks: connection ends > context canceled
2018/03/04 19:47:11 [Info] [3272563266] App|Proxyman|Inbound: connection ends > Proxy|Shadowsocks: connection ends > context canceled
2018/03/04 19:47:11 [Info] [3272563266] App|Proxyman|Outbound: failed to process outbound traffic > Proxy|Freedom: connection ends > context canceled
2018/03/04 19:47:16 [Info] [3063128731] App|Proxyman|Inbound: connection ends > Proxy|Shadowsocks: connection ends > context canceled
2018/03/04 19:47:16 [Info] [3063128731] App|Proxyman|Outbound: failed to process outbound traffic > Proxy|Freedom: connection ends > context canceled
2018/03/04 19:47:16 [Info] [48686042] App|Proxyman|Inbound: connection ends > Proxy|Shadowsocks: connection ends > context canceled
2018/03/04 19:47:16 [Info] [48686042] App|Proxyman|Outbound: failed to process outbound traffic > Proxy|Freedom: connection ends > context canceled
2018/03/04 19:47:16 [Info] [3402573702] App|Proxyman|Inbound: connection ends > Proxy|Shadowsocks: connection ends > context canceled
2018/03/04 19:47:16 [Info] [3402573702] App|Proxyman|Outbound: failed to process outbound traffic > Proxy|Freedom: connection ends > context canceled
2018/03/04 19:47:16 [Info] [3929709879] App|Proxyman|Inbound: connection ends > Proxy|Shadowsocks: connection ends > context canceled
2018/03/04 19:47:16 [Info] [3929709879] App|Proxyman|Outbound: failed to process outbound traffic > Proxy|Freedom: connection ends > context canceled

客户端错误日志:

    // 在这里附上客户端日志

请附上访问日志。在 Linux 中，日志通常在 /var/log/v2ray/access.log 文件中。

   2018/03/04 19:45:05 <IP_ADDRESS>:43993 accepted tcp:<IP_ADDRESS>:4828
2018/03/04 19:45:08 <IP_ADDRESS>:43996 accepted tcp:<IP_ADDRESS>:443
2018/03/04 19:45:08 <IP_ADDRESS>:43998 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:08 <IP_ADDRESS>:44001 accepted tcp:<IP_ADDRESS>:443
2018/03/04 19:45:09 <IP_ADDRESS>:44003 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:09 <IP_ADDRESS>:44008 accepted tcp:<IP_ADDRESS>:443
2018/03/04 19:45:09 <IP_ADDRESS>:44009 accepted tcp:<IP_ADDRESS>:443
2018/03/04 19:45:09 <IP_ADDRESS>:44011 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:09 <IP_ADDRESS>:44014 accepted tcp:<IP_ADDRESS>:5228
2018/03/04 19:45:10 <IP_ADDRESS>:44019 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:10 <IP_ADDRESS>:44020 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:10 <IP_ADDRESS>:44021 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:14 <IP_ADDRESS>:44024 accepted tcp:<IP_ADDRESS>:443
2018/03/04 19:45:14 <IP_ADDRESS>:44028 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:14 <IP_ADDRESS>:44029 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:14 <IP_ADDRESS>:44030 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:15 <IP_ADDRESS>:44037 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:15 <IP_ADDRESS>:44038 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:15 <IP_ADDRESS>:44039 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:15 <IP_ADDRESS>:44040 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:15 <IP_ADDRESS>:44041 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:15 <IP_ADDRESS>:44042 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:16 <IP_ADDRESS>:44045 accepted tcp:<IP_ADDRESS>:4828
2018/03/04 19:45:19 <IP_ADDRESS>:44050 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:19 <IP_ADDRESS>:44049 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:19 <IP_ADDRESS>:44051 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:20 <IP_ADDRESS>:44060 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:20 <IP_ADDRESS>:44061 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:20 <IP_ADDRESS>:44063 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:20 <IP_ADDRESS>:44062 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:20 <IP_ADDRESS>:44064 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:20 <IP_ADDRESS>:44065 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:23 <IP_ADDRESS>:44068 accepted tcp:<IP_ADDRESS>:443
2018/03/04 19:45:24 <IP_ADDRESS>:44078 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:24 <IP_ADDRESS>:44075 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:24 <IP_ADDRESS>:44076 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:24 <IP_ADDRESS>:44077 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:24 <IP_ADDRESS>:44079 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:24 <IP_ADDRESS>:44080 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:25 <IP_ADDRESS>:44086 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:25 <IP_ADDRESS>:44087 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:25 <IP_ADDRESS>:44085 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:28 <IP_ADDRESS>:44090 accepted tcp:<IP_ADDRESS>:4828
2018/03/04 19:45:29 <IP_ADDRESS>:44093 accepted tcp:<IP_ADDRESS>:4829
2018/03/04 19:45:29 <IP_ADDRESS>:44102 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:29 <IP_ADDRESS>:44101 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:29 <IP_ADDRESS>:44103 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:29 <IP_ADDRESS>:44104 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:29 <IP_ADDRESS>:44105 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:29 <IP_ADDRESS>:44106 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:30 <IP_ADDRESS>:44111 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:30 <IP_ADDRESS>:44112 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:30 <IP_ADDRESS>:44113 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:33 <IP_ADDRESS>:44115 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:34 <IP_ADDRESS>:44123 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:34 <IP_ADDRESS>:44124 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:34 <IP_ADDRESS>:44121 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:34 <IP_ADDRESS>:44125 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:34 <IP_ADDRESS>:44126 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:34 <IP_ADDRESS>:44127 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:38 <IP_ADDRESS>:44129 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:39 <IP_ADDRESS>:44139 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:39 <IP_ADDRESS>:44138 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:39 <IP_ADDRESS>:44137 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:39 <IP_ADDRESS>:44140 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:39 <IP_ADDRESS>:44141 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:39 <IP_ADDRESS>:44142 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:43 <IP_ADDRESS>:44146 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:43 <IP_ADDRESS>:44147 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:44 <IP_ADDRESS>:44153 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:44 <IP_ADDRESS>:44154 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:44 <IP_ADDRESS>:44152 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:45 <IP_ADDRESS>:44157 accepted tcp:<IP_ADDRESS>:443
2018/03/04 19:45:48 <IP_ADDRESS>:44161 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:48 <IP_ADDRESS>:44160 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:49 <IP_ADDRESS>:44168 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:49 <IP_ADDRESS>:44166 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:49 <IP_ADDRESS>:44167 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:53 <IP_ADDRESS>:44171 accepted tcp:<IP_ADDRESS>:443
2018/03/04 19:45:53 <IP_ADDRESS>:44173 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:53 <IP_ADDRESS>:44178 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:53 <IP_ADDRESS>:44177 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:53 <IP_ADDRESS>:44180 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:58 <IP_ADDRESS>:44182 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:58 <IP_ADDRESS>:44185 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:58 <IP_ADDRESS>:44186 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:45:58 <IP_ADDRESS>:44188 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:46:03 <IP_ADDRESS>:44191 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:46:03 <IP_ADDRESS>:44192 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:46:03 <IP_ADDRESS>:44194 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:46:03 <IP_ADDRESS>:44197 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:46:03 <IP_ADDRESS>:44198 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:46:08 <IP_ADDRESS>:44203 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:46:08 <IP_ADDRESS>:44202 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:46:08 <IP_ADDRESS>:44205 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:46:08 <IP_ADDRESS>:44208 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:46:08 <IP_ADDRESS>:44209 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:46:13 <IP_ADDRESS>:44213 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:46:13 <IP_ADDRESS>:44214 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:46:13 <IP_ADDRESS>:44216 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:46:13 <IP_ADDRESS>:44219 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:46:13 <IP_ADDRESS>:44220 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:46:15 <IP_ADDRESS>:44222 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:46:18 <IP_ADDRESS>:44226 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:46:18 <IP_ADDRESS>:44227 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:46:18 <IP_ADDRESS>:44229 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:46:18 <IP_ADDRESS>:44232 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:46:18 <IP_ADDRESS>:44233 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:46:20 <IP_ADDRESS>:44235 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:46:23 <IP_ADDRESS>:44237 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:46:23 <IP_ADDRESS>:44241 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:46:23 <IP_ADDRESS>:44242 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:46:23 <IP_ADDRESS>:44244 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:46:25 <IP_ADDRESS>:44247 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:46:25 <IP_ADDRESS>:44248 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:46:28 <IP_ADDRESS>:44250 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:46:28 <IP_ADDRESS>:44253 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:46:28 <IP_ADDRESS>:44254 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:46:28 <IP_ADDRESS>:44256 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:46:30 <IP_ADDRESS>:44260 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:46:30 <IP_ADDRESS>:44261 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:46:33 <IP_ADDRESS>:44265 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:46:33 <IP_ADDRESS>:44264 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:46:35 <IP_ADDRESS>:44269 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:46:35 <IP_ADDRESS>:44270 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:46:38 <IP_ADDRESS>:44273 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:46:38 <IP_ADDRESS>:44274 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:46:40 <IP_ADDRESS>:44277 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:46:40 <IP_ADDRESS>:44278 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:46:43 <IP_ADDRESS>:44280 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:46:45 <IP_ADDRESS>:44282 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:46:48 <IP_ADDRESS>:44284 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:46:50 <IP_ADDRESS>:44286 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:46:59 <IP_ADDRESS>:44288 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:47:04 <IP_ADDRESS>:44290 accepted tcp:<IP_ADDRESS>:53
2018/03/04 19:47:09 <IP_ADDRESS>:39884 accepted tcp:<IP_ADDRESS>:443
2018/03/04 19:47:31 <IP_ADDRESS>:39897 accepted tcp:<IP_ADDRESS>:443
2018/03/04 19:47:59 <IP_ADDRESS>:39900 accepted tcp:<IP_ADDRESS>:4828
2018/03/04 19:47:59 <IP_ADDRESS>:39903 accepted tcp:<IP_ADDRESS>:4829

其它相关的配置文件（如 Nginx）和相关日志。

从log看的确是收到了一个tcp::53的请求。你能确定一下传入数据是UDP的吗？一个简单的方法是关闭shadowsocks的udp(udp:false)，然后看一下能不能产生类似的log。

裸连的情况，确认网络检测工具的DNS请求是UDP的。
我的想法，如果使用了ss的VPN模式，网络检测工具发出UDP的DNS请求，被ss的VPN服务收下，并负载在ss的链接上送出。ss应该是TCP连接，而且改造自socks5，socks5是可以在TCP上承载UDP报文的。
不太清楚，是ss承载这个UDP请求改了TCP，还是v2的ss收到这个请求后错误处理为TCP？

使用以下配置做了相关测试：
{
	"log": {
        "access" : "./access.log",
        "error" : "./error.log",
		"loglevel": "debug"
	},
	"inbound": {
		"tag": "dns-in",
		"port": 53,
		"listen": "<IP_ADDRESS>",
		"protocol": "dokodemo-door",
		"allocate": {
			"strategy": "always"
		},
		"settings": {
			"address": "<上游DNS地址>",
			"port": 53,
			"network": "udp,tcp",
			"timeout": 500,
			"userLevel": 0,
			"followRedirect": false
		}
	},
	"inboundDetour": [
        {
            "tag": "shadowsocks-in",
            "port": 8010,
            "listen": "<IP_ADDRESS>",
            "protocol": "shadowsocks",
            "allocate": {
                "strategy": "always"
            },
            "settings": {
                "email": "*",
                "method": "chacha20-ietf",
                "password": "*",
                "udp": false,
                "level": 0
            }
        }
    ],
	"outbound":
    {
        "tag": "direct3",
        "protocol": "freedom",
        "settings": {"domainStrategy": "UseIP"}
    },
    /*{
		"tag": "blackhole",
		"protocol": "blackhole",
		"settings": {

		}
	},*/
	"outboundDetour": [
        {
            "tag": "direct",
            "protocol": "freedom",
            "settings": {

            }
        },
        {
            "tag": "direct2",
            "protocol": "freedom",
            "settings": {
                "domainStrategy": "UseIP"
                ,
                "redirect": "<上游DNS地址>:53"
            }
        }
    ],
	"routing": {
        "strategy" : "rules",
        "settings" : {
            "domainStrategy": "IPIfNonMatch",
            "rules": [
                {
                    "type" : "field",
                    //"outboundTag" : "direct"
                    "outboundTag" : "direct2"
                    //,"ip":["<IP_ADDRESS>"]
                    ,"port": "53"
                    ,"network": "tcp,udp"
                    ,"inboundTag" :["shadowsocks-in"]
                },

                {
                    "type": "field",
                    "outboundTag": "direct",
                    "ip":[
                            "<IP_ADDRESS>/8",
                            "<IP_ADDRESS>/8",
                            "<IP_ADDRESS>/10",
                            "<IP_ADDRESS>/8",
                            "<IP_ADDRESS>/16",
                            "<IP_ADDRESS>/12",
                            "<IP_ADDRESS>/24",
                            "<IP_ADDRESS>/24",
                            "<IP_ADDRESS>/16",
                            "<IP_ADDRESS>/15",
                            "<IP_ADDRESS>/24",
                            "<IP_ADDRESS>/24",
                            "::1/128",
                            "fc00::/7",
                            "fe80::/10"
                    ]
                }
            ]
        }
    }
}

ss-Android 客户端是4.5.0
证实了以下问题：

我使用的网络测试工具是UDP请求。
ss会”拦截了“相关的请求（可能是端口），并劫持到所设置的远程DNS做TCP请求。
在家里和工作地做测试并做了抓包，工作地使用工作地的内部DNS做上游，能正常工作。家里使用dnsmasq，会出现大量超时和重发。两地使用外部的DNS，都没问题。
所以可能是家里的dnsmasq有问题。打扰了（囧）

后话，用pdnsd代替dnsmasq接受ss的DNS请求，可能dnsmasq处理TCP的dnsmasq请求吃不消。


Feedback Feature!

Gave the bug icon a beta badge.
Improved the form inside the bug feedback modal.
Added javascript for sending a Ajax call to the Submission Form.

Added certain features and enhancements onto the Feedback Feature. Which is currently disabled due to instability and issues within the form request and provider.


Please add compatibility for: Better Recipe Book

Hello, I found this bug - it happens when I deactivate the option "Keep crafting screens centered":

Use the latest version. #21

Hello, I am using the latest version, which is 0.7.0 now, since yesterday.
I should go one step back and it works then?
I installed Better Recipe Book today started from version 0.7.0.

This one is on me, haha. I've never used Better Recipe Book before, and just hardcoded the tab offset to the default configuration. Didn't realize that mod had an option to not center the screen.
I'll push a fix sometime in the future


udpate configuration for recent autorest.csharp changes

Contributing to the Azure SDK
Please see our CONTRIBUTING.md if you are not familiar with contributing to this repository or have questions.
For specific information about pull request etiquette and best practices, see this section.

API change check for Azure.ResourceManager
API changes are not detected in this pull request for Azure.ResourceManager


Dynamic forms

Is there any way we can create dynamic forms? maybe by using a json

You might want to check out https://www.nuget.org/packages/WpfMaterialForms

@bkinny isn't that this same code? I have checked this project out and I don't think you can do what I am asking for.

Sorry, I got my repos mixed up.

Hey @hashitha. I haven't merged to master yet but that's the current aim for this project. Forms will be generated by classes and customized using attributes. Class properties compile to low level objects - FormElements. You can create true runtime dynamic forms using those FormElements but it will be complex so there is a builder layer planned for convenience. I find that classes were the best approach because of mvvm patterns and elements bind automatically to properties.

Here's an example of what's currently possible:
[Title("Log in to continue")]
[Action("cancel", "CANCEL")]
[Action("login", "LOG IN", Validates = true)]
public class Login
{
    [Field(Icon = "Account")]
    [Value(Must.NotBeEmpty, Message = "Enter your username.")]
    public string Username { get; set; }

    [Field(Icon = "Key")]
    public string Password { get; set; }

    public bool RememberMe { get; set; }
}

<md:Card>
    <DynamicForm Margin="12" Model={Binding LoginInstance} />
</md:Card>

This implies that you must have a class at compile time. For a serializable solution JSON may be too verbose, I'm thinking of an XML-like approach:
<form name="Login">
    <title>Log in to continue</title>
    <string name="Username" icon="Account">
        <validator type="MustNotBeEmpty" message="Enter your username." />
    </string>
    <password name="Password" icon="Account" />
    <bool name="RememberMe" />
    <action name="cancel" content="CANCEL" />
    <action name="login" content="LOGIN" validates="true" />
</form>

The generated FormElements for these two descriptions may be the same, though in the second case we're losing strong typing, so these properties will be assigned to a dynamic object.
Any thoughts on this idea?

Hi @EdonGashi,
The second XML approach would work better for us. I think dynamic object would be fine because we just need the final results as a key-value pair to generate the pdf. Also having a separate class for each form won't work in this case.
I am looking for something like typeform.com for WPF. Basically, the end user will create the form and we would send the data to a pdf merge service like https://www.webmerge.me/ and get the final pdf.

I need a quick refresh on linq 2 xml and I'll implement a parser. Shouldn't take long.

No worries, once you are done I will test it out.

I think I have a working prototype. I added the following example to the demo. This is equivalent to the User.cs class:
<form>
    <title>Create account</title>
    <heading>Personal details</heading>
    <input type="string" name="FirstName"
           label="First name"
           tooltip="Enter your first name here."
           icon="pencil">
        <validate must="NotBeEmpty" />
    </input>
    <input type="string" name="LastName"
           label="Last name" icon="empty"
           tooltip="Enter your last name here." />
    <input type="datetime?"
           name="DateOfBirth"
           label="Date of birth"
           icon="calendar"
           conversionError="Invalid date string.">
        <validate must="NotBeEmpty" />
        <validate must="BeLessThan" value="2020-01-01">
            You said you are born in the year {Value:yyyy}. Are you really from the future?
        </validate>
    </input>
    <heading>Account details</heading>
    <input type="string" name="Username"
           label="Username" icon="account" >
        <validate must="MatchPattern" value="^[a-zA-Z][a-zA-Z0-9]*$"
                  message="'{Value}' is not a valid username." />
    </input>
    <input type="string" name="Password"
           label="Password" icon="key">
        <validate converter="Length" must="BeGreaterThanOrEqualTo" value="6">
            Your password has {Value|Length} characters, which is less than the required {Argument}.
        </validate>
    </input>
    <input type="string" name="PasswordConfirm"
           label="Confirm password" icon="empty">
        <validate must="BeEqualTo" value="{Binding Password}"
                  onValueChanged="ClearErrors"
                  message="The entered passwords do not match." />
    </input>

    <heading icon="checkall">Review entered information</heading>
    <text>Name: {Binding FirstName} {Binding LastName}</text>
    <text>Date of birth: {Binding DateOfBirth:yyyy-MM-dd}</text>
    <text>Username: {Binding Username}</text>

    <heading>License agreement</heading>
    <text>By signing up, you agree to our terms of use, privacy policy, and cookie policy.</text>
    <input type="bool" name="Agree" label="Agree to license" defaultValue="false">
        <validate must="BeTrue">You must accept the license agreement.</validate>
    </input>
    <action name="reset" content="RESET" icon="close" resets="true" />
    <action name="submit" content="SUBMIT" icon="check" validates="true" />
</form>

Notes

Because we are not binding to any class, an ExpandoObject is created and has properties matching to the names of input tags. ModelState provides utillities such as validation and resetting to default values. <DynamicForm> provides three properties: Model - the form definition source (class instance, class type, FormDefinition, primitive), Value - model instance (class instance=itself, class type=new class(), FormDefinition=ExpandoObject, primitive=itself), Context - where ContextBinding gets its data from, defaults to DataContext of the control.
Some data types are not yet implemented - password, combobox, calendar (currently displayed as textbox), toggle, slider.
Layout in columns is not yet implemented in XML. The underlying architecture supports it so it's a matter of adding some more xml tags.
There's a lightweight template engine for string literals as seen in the example above. If you need { and } you need to escape with double braces or an @ symbol for verbatim strings: message="@literal string {not binding}"
The template engine supports {Binding FirstName} {Property FirstName} (one time binding), {ContextBinding FirstName} (binding to datacontext property instead of model property), {ContextProperty FirstName} {StaticResource FormTitle} {DynamicResource FormTitle} (suitable for localization), and contextual resources e.g. {Value} and {Argument} in validators.
If incorrect form definitions are provided it might cause crashes.
Controls are lookless so material design is not mandatory. Example of the above form with metro:

or vanilla wpf:

Let me know what you think. Thanks!

I think this will work well. Can I give this a go?

Sure, it's pushed to master. Consider this syntax as 95% final. I'll try to stay backwards compatible with future updates. I'll add a  element to support grouping, some more controls like    , nothing too complex though because we don't want to reinvent xaml. There's also a MD stepper proposal which would fit so well with this model - separate your controls in s and it'd feel quite close to the typeform you linked.

Thanks!
I agree, keep it simple. We only need the basic controls.

I have tried the code and it all seems to work fine. To get the entered data out when the user clicks submit do I have to go through CompiledDefinition.FormRows ?
I want to get the following for each input data

name of field
field type e.g. string, int etc
value

DynamicForm.Value property holds the dynamic object. I wanted something like <DynamicForm Model="{Binding MyXmlDefinition}" Value="{Binding MyKeyValues, Mode=OneWayToSource}" />. Wpf doesnt allow the latter though since it's a readonly dependency property and you can't assign bindings to it. So I'm going to change it to a two way property which ignores source changes. It's a hack but it'll allow MVVM binding.
Meanwhile you can use:
var dictionary = (IDictionary <string,object>)MyDynamicForm.Value;
This casts the expando to a key value map. Keys are prop names and values are current values. This should cover most cases as you can call value.GetType (). The exception is nulls where you won't be able to determine the property type.
If you need to go deeper to "reflect" the form types we need to get the DataFormFields present in the current definition. They are stored internally in the form (need to make an api) or we can query the children of formrows for Elements of type DataFormField which hold the Key property and the PropertyType.
The DataFormField is the "blueprint" so it wont hold the current values. They are held in the .Value. One can be considered the "class" the other the "instance".
I'll write some documentation soon.
About actions - if your ViewModel implements IActionHandler it will receive callbacks from action clicks. If validates=""

Misclicked cause of phone. If validates="true" callbacks may be suspended it model fails validation. It seems a good idea to pass model instance here too. Maybe I'll change that quickly?

object model parameter works great for us. I can use something like this to generate the final JSON
 public void HandleAction(object model, string action, object parameter)
        {
            notificationService.Notify($"Action '{action}'");

            if (action.Equals("submit"))
            {
                var dictionary = (IDictionary<string, object>)model;

                foreach (KeyValuePair<string, object> kvp in dictionary)
                {
                    Console.WriteLine("Key = {0} ", kvp.Key);

                    Type t = kvp.Value.GetType();
                    if (t.Equals(typeof(String)))
                        Console.WriteLine("{0} is String.", kvp.Value);
                    else if (t.Equals(typeof(DateTime)))
                        Console.WriteLine("{0} is a DateTime.", kvp.Value);
                    else if (t.Equals(typeof(int)))
                        Console.WriteLine("{0} is a 32-bit integer.", kvp.Value);
                    else if (t.Equals(typeof(long)))
                        Console.WriteLine("{0} is a 32-bit integer.", kvp.Value);
                    else if (t.Equals(typeof(double)))
                        Console.WriteLine("{0} is a double-precision floating point.", kvp.Value);
                    else if (t.Equals(typeof(Boolean)))
                        Console.WriteLine("{0} is a Boolean.", kvp.Value);
                    else
                        Console.WriteLine("'{0}' is another data type.", kvp.Value);

                }
            }

        }

With the c# 7 pattern matching it gets even better:
switch (kvp.Value)
{
    case int i:
        Console.WriteLine($"Integer {i}");
        break;
    case string s:
        Console.WriteLine($"String {s}");
        break;
    case long l:
        Console.WriteLine($"Long {l}");
        break;
        // other cases
    case null:
        Console.WriteLine("Field has no value. Cannot determine type.");
        break;
    default:
        Console.WriteLine("Other type.");
        break;
}

Note: I think JSON.NET allows you to serialize ExpandoObjects so you don't have to do it manually.
If not, you can do something like this:
Dictionary<string,object> clonedPairs = new Dictionary<string,object>(dictionary); // clones the original dict.

string json = JsonConvert.SerializeObject(clonedPairs);

This generates a JObject as in the following example:
http://www.newtonsoft.com/json/help/html/SerializeDictionary.htm

This is great! thanks for the info @EdonGashi


Add lazy option for createBottomTabNavigator

We should support disabling "lazy" if people want to. See: https://github.com/react-navigation/react-navigation/issues/4254

now that the commit is made, will the lazy option be available with a new release?

Any update on this? Lazy being forced to true is making tab navigation too slow.

Any update on this? Lazy being forced to true is making tab navigation too slow.

It's already released. Also lazy should make it fast since only 1 tab is rendered on startup, not slow. You're probably seeing this, which is a separate issue: https://github.com/react-navigation/react-navigation/issues/4412

@satya164 Are you certain this is released? I believe createBottomTabNavigator does not allow the option to set lazy to false (preload all tabs).
As our tab content is quite heavy, I'm currently seeing no solution but to remain with the deprecated tabNavigator purely so we can disable lazy.

Has this change been released yet? I don't see anything in the documentation about being able to set lazy to false with createBottomTabNavigator. I'd like to be able to update from TabNavigator to createBottomTabNavigator, but need to disable lazy loading.

It has been released, docs need to be updated


TypeDef Render Broken for Nested Classes

Version: 0.103.1
The code at the bottom throws this exception: java.lang.IllegalArgumentException: Illegal group reference. The reason is because when calling Property.newProperty() with a Class instance, newProperty(ClassRef.forClass(type), name) is executed, which then in turn calls return new ClassRef(c.getTypeName(), 0, Collections.emptyList(), Collections.emptyMap()), and c.getTypeName() contains a $ for nested classes, which then breaks the render for TypeDef.
The solution appears to be to use c.getCanonicalName() in ClassRef, which will contain . instead of $ for nested classes.
package com.some.company;

import io.sundr.adapter.api.AdapterContext;
import io.sundr.adapter.reflect.ReflectionAdapter;
import io.sundr.model.Kind;
import io.sundr.model.Property;
import io.sundr.model.TypeDefBuilder;
import lombok.val;
import org.junit.jupiter.api.Test;

public class FooTest {
    public class Foo {
        private String name;
        private Integer count;
    }

    @Test
    void foo() {
        val r = new ReflectionAdapter(AdapterContext.getContext());
        val td = r.adaptType(Foo.class);

        val tb = new TypeDefBuilder()
            .withKind(Kind.CLASS)
            .withName(td.getName() + "Safe")
            .withPackageName(Foo.class.getPackageName())
            .addNewConstructor()
            .withArguments(Property.newProperty(Foo.class, "wrapped"))
            .endConstructor()
            .build();

        System.out.println(tb.render());
    }
}

@EarthCitizen: thank you very much for reporting that, I am sure it wasn't trivial to get to the bottom of it.
Would you like to provide a PR for that, as you've already done most of the work already?

@iocanel I will see what I can do, time allowing.


Error when adding a transition to nested child then hitting the back button

When adding a transition that is nested in another route the back button throws an error.
import 'package:flutter/material.dart';
import 'package:vrouter/vrouter.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  GlobalKey<NavigatorState> _navKey = GlobalKey<NavigatorState>();
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return VRouter(
      debugShowCheckedModeBanner: false,
      mode: VRouterModes.history,
      navigatorKey: _navKey,
      routes: [
        VWidget(
          path: '/',
          widget: FirstChild(),
          stackedRoutes: [
            VWidget(
              path: '/second',
              widget: SecondChild(),
              transitionDuration: Duration(seconds: 0),
              buildTransition: (animation, secondaryAnimation, child) => FadeTransition(opacity: animation, child: child),
            ),
          ],
        ),
      ],
    );
  }
}

class FirstChild extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(),
      body: Container(
        width: double.infinity,
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [Text('VRouter - First Child'), TextButton(onPressed: () => context.vRouter.push('/second'), child: Text('Go to second child'))],
        ),
      ),
    );
  }
}

class SecondChild extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(),
        body: Center(
          child: Text('VRouter - Second Child'),
        ));
  }
}

Could you share the error as well?

Oh, duration should not be 0

Thats strange. It works on the parents. Here is what I put to get it working
transitionDuration: Duration(microseconds: 1),

Thanks for your help!

Yeah I don't exactly know why this causes an issue here but I've already been aware of this. Not sure I can fix this in VRouter though.
Anyway feel free to close if this did the trick 😊


Use POST instead of GET method to retrieve lambda-size due to GET method length limitations

http://deep.dev.public.9fb1fc57.s3-website-us-east-1.amazonaws.com/#/deep-benchmarking


Update to include Cloud apps

The list of support Microsoft Cloud Apps looks outdated. In addition to the list of 9 Microsoft Cloud Apps listed here, in the Intune portal I can see PowerApps, OneDrive, Cloud App Security, Planner, Delve, Sway, Office 365 Message Encryption Portal, and possibly more.

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

ID: 0073f5a8-daf6-7f14-127f-e0c9d80af78d
Version Independent ID: d6d0afdf-3619-ca03-718b-a40bfd07bab9
Content: Azure Active Directory conditional access settings reference
Content Source: articles/active-directory/conditional-access/technical-reference.md
Service: active-directory
GitHub Login: @MarkusVi
Microsoft Alias: markvi

Hi @JoelHazelton, I have staged an update to this article wit the most recent list of supported cloud apps.
#please-close


fix json syntax error - typing error

there was an unexpected comma in json used as custom configuration file

@moebius87 no worries, thank you.


Fix native shaders OpenGL

In native, every uniform is converted to a vec4 and usage in shader is updated accordingly. This is done because bgfx only support vec4/mat4, for every rendering backend.
For example,
uniform bool alphaTest; is converted to uniform vec4 alphaTest; and usage is changed:
if (alphaTest) to if (alphaTest.x)
A problem rised with OpenGL (at least it doesn't with Metal and HLSL, don't know for Vulkan): Conversion from a float value to a boolean is not authorized and compiling the shader crashes the app.
The fix here casts alphaTest to a float and compares it with 0.
I fixed it for the DOF postprocess as well. IIRC it crashed on Native ( ping @DarraghBurkeMS )
Tested with D3D11 and OpenGL.

This should be done in the shader compiler on the native side.

Fix will be done in Shader traversers/compilation instead. Closing.


Error refreshing existing lambda functions

The "Function Name" drop down is not populated in the "Upload to AWS Lambda" form and the log shows an error
Steps to reproduce:

Right-click project to deploy the lambda handler
Click "Publish to AWS Lambda..."
"Upload to AWS Lambda" form is displayed and the "Function Name" drop down is not populated
The following error is added to the log file
2021-06-21 19:14:14,883 [1] ERROR Amazon.AWSToolkit.Lambda.ViewModel.UploadFunctionViewModel - Error refreshing existing lambda functions.
System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'Amazon.Lambda.AmazonLambdaClient'.
at Amazon.Runtime.AmazonServiceClient.ThrowIfDisposed() in D:\JenkinsWorkspaces\trebuchet-stage-release\AWSDotNetPublic\sdk\src\Core\Amazon.Runtime\AmazonServiceClient.cs:line 405
at Amazon.Runtime.AmazonServiceClient.InvokeAsync[TResponse](AmazonWebServiceRequest request, InvokeOptionsBase options, CancellationToken cancellationToken) in D:\JenkinsWorkspaces\trebuchet-stage-release\AWSDotNetPublic\sdk\src\Core\Amazon.Runtime\AmazonServiceClient.cs:line 240
at Amazon.Lambda.AmazonLambdaClient.ListFunctionsAsync(ListFunctionsRequest request, CancellationToken cancellationToken) in D:\JenkinsWorkspaces\trebuchet-stage-release\AWSDotNetPublic\sdk\src\Services\Lambda\Generated_bcl45\AmazonLambdaClient.cs:line 3698
at Amazon.AWSToolkit.Lambda.ViewModel.UploadFunctionViewModel.d__187.MoveNext()

Expected behavior
"Function Name" drop down should be populated with the available Lambda Functions
Screenshots

Computer (please complete the following information):

Windows Version: Windows 10 OS Build 19043.985
Visual Studio Version: 2019 - 16.10.2
AWS Toolkit for Visual Studio Version: <IP_ADDRESS>

Hi @andredasilvauk , can you please share your entire log file located within %localappdata%\AWSToolkit\logs\visualstudio?
Also, can you confirm that you have existing zip based lambda functions in the account and region(us-east-1) specified above?

Hi @shruti0085,
Thank you for your response.
Please find attached the log file
log.txt
As for the zip based lambda functions, I am not sure how to provide this information. I am, however, able to deploy them when using the zip package type, but have to be very careful to match all the environment variables, subnets and security groups in the template with the current lambda, or I end up altering the current lambda function values, which is why I am very interested in getting to the bottom of this issue.
Kind regards,
Andre da Silva

Looking at the toolkit logs it seems like it could be possible that the VS instance was not fully setup/initialized when the Publish To AWS Lambda menu item was selected/clicked.
Could you re-try after waiting a couple of mins to allow full initialization of the toolkit and VS instance?
As for my question relating to zip based lambda, by navigating to AWS Explorer in the Visual Studio, selecting the credential and region you specified above, expand AWS Lambda and if you have any existing Lambda functions in that region, you should be able to see them under that node.
The Upload to AWS Lambda function dialog in the Function name dropdown lists names of Lambda functions matching type selected in the dialog that already exist in your account(specified with credentials) in the region selected through the Region dropdown. Taking the example of this image,  with PackageType selected to be Zip, the FunctionName dropdown would list all existing Zip based functions in your account in region N.Virginia. If you don't have any existing functions, the dropdown would be empty,
As for the altering lambda function behavior, can you provide a few more details/steps to reproduce it?
What is template referring to here, is it the aws-lambda-tools-defaults.json file?

I tried waiting and clicking the Publish To AWS Lambda menu item but unfortunately had the same result.
I have plenty of lambda functions in the AWS Explorer, also, from the AWS CLI, when viewing the lambdas, it shows that it is a ZIP package type.
I may have not have explained myself properly regarding the altering lambda function behavior. What I meant is that I need check the existing subnets, security groups and environment variables for the lambda I am planning to update, so I can match these values in the AWS Upload to AWS Lambda forms, or they will either be under incorrect subnets or security groups, or have incorrect environment variables

Hi @andredasilvauk , I have a fix for a problem that was preventing the Function list from getting populated. Please try this build of the Toolkit, to see if it addresses your issue:
AWSToolkitPackage.zip version <IP_ADDRESS>90
Sha 384: B8760E1683F81CE14FBE42DDA5E02DAC2349A0EE9FF1D0F237692B2E693B96C1FF13B947EC8314583FFE2B543C8F5939

Hi @awschristou, thank you very much for your response.
I can confirm that the function list issue has been fixed.
Feel free to close the ticket.
Thank you for the fix.
Kind regards

Thank you for the confirmation @andredasilvauk - this fix hasn't been released to the marketplace yet. I'll re-open this issue, and close it again when the fix has been released. (You're welcome to keep using the test build until then)

A fix for this issue has been released with the <IP_ADDRESS> version of the Toolkit


Could this library distribute a single file?

Hi,
I'm a member of cdnjs. We want to host this library.
Both of src/TextareaAutosize.js and src/calculateNodeHeight.js should component to work. (ref: https://github.com/cdnjs/cdnjs/pull/10364#issuecomment-290110517)
But this library isn't distributed a single file, would you like to provide it?
If you have any suggestions, please let me know.
Thank you.
#132
cdnjs/cdnjs#10364

We gonna provide it in the nearest future, there is a pending PR for this. After releasing should something more be done on our side so you can host this? Like informing u somewhere?

@Andarist It sounds good. Thank you very much.
If it does not bother you, please let me know here --> cdnjs/cdnjs#10364
I'll host this library after you release.

closing this in favor of the PR on cdnjs repo


Add block data, 1.19 support, cleanup

If you think this is ready to go, I'm ready to pull it- thank you!

What is the status of this PR?


Upgrade to v2.2.2; Return to upstream Redis

This PR upgrades ArgoCD to v2.2.2.
Bitnami Redis support has been removed again because the image's permission are quite broken. The image was overridden to point to dockerhub in global defaults (internal) for a while.
Checklist

[x] PR contains a single logical change (to build a better changelog).
[x] Update the documentation.
[x] Categorize the PR by setting a good title and adding one of the labels:
bug, enhancement, documentation, change, breaking, dependency
as they show up in the changelog.

Please add a page for good measure, even if it's just mentioning that quay.io image isn't supported anymore and any image pins in the hierararchy should be removed or ensured to use docker.io.

Good point 👍


The code compiles but we get a missing dependency runtime crash.

Closing as I'm about to create a proper migration PR :wink:


X-Mid header for anonymous request

[edit: delete]

Can you maybe close this issue ?

Can you maybe close this issue ?


Acquisition class won't run

Hello!
When I try to use the Acquisition class the program gives me an error:
acq = Acquisition(directory=r'C:\Documents\pycromanager', name='test')
---------------------------------------------------------------------------
Exception                                 Traceback (most recent call last)
<ipython-input-15-98c15ec4f3dd> in <module>
      1 #with Acquisition(directory=r"C:\Users\lmorales-curiel\Documents\pycromanager", name="a") as acq:
----> 2 acq = Acquisition(directory=r"C:\Users\lmorales-curiel\Documents\pycromanager", name="a.tif")

c:\users\lmorales-curiel\appdata\local\programs\python\python36\lib\site-packages\pycromanager\acquire.py in __init__(self, directory, name, image_process_fn, event_generation_hook_fn, pre_hardware_hook_fn, post_hardware_hook_fn, post_camera_hook_fn, show_display, storage_monitor_callback_fn, tile_overlap, max_multi_res_index, magellan_acq_index, magellan_explore, process, saving_queue_size, debug, core_log_debug)
    428                 max_multi_res_index if max_multi_res_index is not None else -1,
    429                 saving_queue_size,
--> 430                 core_log_debug,
    431             )
    432         storage = self._remote_acq.get_data_sink()

c:\users\lmorales-curiel\appdata\local\programs\python\python36\lib\site-packages\pycromanager\core.py in <lambda>(instance, signatures_list, *args)
    397                 fn = lambda instance, *args, signatures_list=tuple(
    398                     methods_with_name
--> 399                 ): instance._translate_call(signatures_list, args)
    400                 fn.__name__ = method_name_modified
    401                 fn.__doc__ = "{}.{}: A dynamically generated Java method.".format(

c:\users\lmorales-curiel\appdata\local\programs\python\python36\lib\site-packages\pycromanager\core.py in _translate_call(self, method_specs, fn_args)
    505         # args that are none are placeholders to allow for polymorphism and not considered part of the spec
    506         # fn_args = [a for a in fn_args if a is not None]
--> 507         valid_method_spec, deserialize_types = _check_method_args(method_specs, fn_args)
    508         # args are good, make call through socket, casting the correct type if needed (e.g. int to float)
    509         message = {

c:\users\lmorales-curiel\appdata\local\programs\python\python36\lib\site-packages\pycromanager\core.py in _check_method_args(method_specs, fn_args)
    670             "Incorrect arguments. \nExpected {} \nGot {}".format(
    671                 " or ".join([", ".join(method_spec["arguments"]) for method_spec in method_specs]),
--> 672                 ", ".join([str(type(a)) for a in fn_args]),
    673             )
    674         )

Exception: Incorrect arguments.
Expected java.lang.String, java.lang.String, boolean, boolean, int, int, int, int, boolean, boolean
Got <class 'str'>, <class 'str'>, <class 'bool'>, <class 'bool'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'bool'>

I saw the code, and I even tried to explicitly give all the parameters that it needs but I don't know why it does not work. It gives the same error when I try:
with Acquisition(directory=r'C:\Users\lmorales-curiel\Documents\pycromanager', name='test') as acq:
I already tried updating pycromanager:
pip install pycromanager --upgrade
Can you give me more details of what am I doing wrong?
Thanks in advance!

This is a mismatch between pycro-manager and micro-manager versions. Have you tried updating to latest nightly build of micro-manager?

Thank you so much! And sorry for the very basic question.


add libtommath

Again, would like a repo under hunter-packages.
I added a cmake build system and have opened a pull request, but will still need a fork to provide a release of v1.0 that contains the cmake build system (also, they might reject my pr).

would like a repo under hunter-packages

https://github.com/hunter-packages/libtommath

updated to the hunter-packages repo

renamed as well

Testing:

https://ci.appveyor.com/project/ingenue/hunter/build/1.0.1376
https://travis-ci.org/ingenue/hunter/builds/205494065

Some tests failed, please follow https://github.com/ruslo/hunter/pull/639#issuecomment-280970213

fixed in vs2008, also https://github.com/ingenue/hunter/pull/53

Testing:

https://ci.appveyor.com/project/ingenue/hunter/build/1.0.1388
https://travis-ci.org/ingenue/hunter/builds/205535905

Uploading:

https://ci.appveyor.com/project/ingenue/hunter/build/1.0.1389
https://travis-ci.org/ingenue/hunter/builds/205645141

Released:

https://github.com/ruslo/hunter/releases/tag/v0.18.5


Pulse naming issues

We have several naming issues in Pulse-frontend classes/modules/methods:

[ ] Inconsistency in Channel, PulseCommand, Schedule: PulseCommand -> Command?
[ ] common module -> removed and move contents to top-level?
[ ] Inconsistency in DriveInstruction applied to OutputChannel: OutputInstruction or rename OutputChannel? Rename both (to PulseInstruction and PulseChannel)?
[ ] channels module have more than channels, it's more like device module: pulse/channels -> pulse/device?

(I guess we have more)

Agreed on all counts.

Inconsistency in DriveInstruction applied to OutputChannel: OutputInstruction or rename OutputChannel? Rename both (to PulseInstruction and PulseChannel)?

I think PulseInstruction and PulseChannel make the most sense. However, they may be confused with the pulse module? If this is the case maybe OutputInstruction and OutputChannel? What do you think?


Tag API is underdocumented

Namely, Tags and Tag structures are missing (api/c-s/tags.yaml and event-schemas/schema/m.tag use type: object for them). This causes ambiguity with regards to whether order should be a number or a string - all examples but one still use strings, even though the text mentions that order is a number.

WIP (almost complete): https://github.com/QMatrixClient/matrix-doc/tree/define-tag-structure

#1639 could be seen as part of this larger issue