Serializable errors proof-of-concept

Description of change
Exploring various implementations of serializable errors for actor handlers and bindings.
Introduces a FlatEnum procedural macro to derive serializable C-style enums for errors, which hopefully reduces maintenance required at the cost of obscuring the actual types in the source code. The generated code is no_std compatible, even though the flat-enum crate itself requires std.
Essentially this changes the JsValue errors emitted from the wasm bindings to include the enum variant code. E.g.
Error::DecodeBitmap(std::io::Error::new(std::io::ErrorKind::Other, "something went wrong!"))

before, JS received only a string description of the error:
"Failed to decode roaring bitmap: something went wrong!"

after, JS can match on the type of error too (as a string):
{"code":"DecodeBitmap","description":"Failed to decode roaring bitmap: something went wrong!"}

Note that specifying macro attributes such as #[wasm_bindgen] in derive proc-macros is an unstable feature only available on nightly for now (tracking issue), so we still have to serialize errors to and from JsValue manually with this approach. The alternative is ditching the FlatEnum proc-macro and writing out all the flat error structs and enum codes manually.
Without the #[wasm_bindgen] attribute we cannot generate proper error types with Typescript. However, until wasm-bindgen switches to a more useful JsError alternative to JsValue for handling errors in Result<T, JsValue>, we wouldn't be able to use those types anyway without manually casting the returned JsValue in Typescript code (possibly). There are several tracking issues for better error handling in wasm-bindgen (https://github.com/rustwasm/wasm-bindgen/issues/1004, https://github.com/rustwasm/wasm-bindgen/issues/1017, https://github.com/rustwasm/wasm-bindgen/issues/1742, https://github.com/rustwasm/wasm-bindgen/pull/2463).
Another downside of the proc_macro approach to deriving FlatEnum is that it needs to be called in the libraries where those errors are defined, and also adds the wasm-bindgen dependency to all the libraries which export an error. The dependency is optional and feature-gated but it's still not ideal. There may be an alternative, cleaner approach using a declarative macro which can be called in the bindings code instead, but iterating over the enum variants is more difficult with that approach and needs more work.
Incomplete and just a proof-of-concept, do no merge.
Links to any relevant issues
Serializable errors #321
Type of change
Add an x to the boxes that are relevant to your changes.

[ ] Bug fix (a non-breaking change which fixes an issue)
[x] Enhancement (a non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
[ ] Documentation Fix

How the change has been tested
Describe the tests that you ran to verify your changes.
Make sure to provide instructions for the maintainer as well as any relevant configurations.
Change checklist
Add an x to the boxes that are relevant to your changes.

[ ] I have followed the contribution guidelines for this project
[ ] I have performed a self-review of my own code
[ ] I have commented my code, particularly in hard-to-understand areas
[ ] I have made corresponding changes to the documentation
[ ] I have added tests that prove my fix is effective or that my feature works
[ ] New and existing unit tests pass locally with my changes

I think this approach---deriving FlatEnum for errors exported to Wasm bindings---can be considered complete as a proof-of-concept now. It's not perfect but it's useful in that it highlights some fundamental issues and things to look out for going forward.
Advantages:

informative: the derived FlatEnum exposes the enum variant in JS code, compared to just a string error message currently, potentially allowing certain errors to be handled differently in user code (e.g. retrying on a timeout).
easily maintainable: using #[derive(FlatEnum), any updates to the error enums are propagated, so the definitions only need to be updated once in the Rust code.
simplifies error handling: by implementing Into<JsValue> (through the From trait), errors in Wasm bindings can be short-circuited using the ? operator, without an intermediate .map_err(<function that converts error to JsValue>) step, as a minor convenience.

Disadvantages:

stringly-typed: the enum variant code is serialized to JsValue as a string, and so cannot be exhaustively matched in a switch/case statement in e.g. Typescript. As mentioned in this PR and issue #321, this is a fundamental problem with wasm-bindgen requiring all result errors to be converted to JsValue.
"clunky": the derive approach requires the wasm-bindgen dependency to be added to all crates which export errors to bindings. While this is feature-gated, it's still a disadvantage until it's decided whether or not to use the #[wasm_bindgen] attribute throughout the identity.rs crates, which would require the dependency regardless.
wasm-specific: these flat errors are only really useful for the Wasm bindings, as other language bindings throw errors as exceptions automatically (e.g. uniffi-rs) or have their own requirements for converting errors.

I'm not a massive fan of this approach but wasm-bindgen only allowing JsValue for result errors is really the core problem preventing an ideal, non-stringly-typed solution. I can't imagine any solution from our side would be perfect until that is addressed in wasm-bindgen (along with the ability to export rich enums automatically using #[wasm_bindgen]).
An alternative approach would be to define the C-style enum errors in the wasm bindings to avoid polluting the identity.rs crates. That would use a declarative macro though, which might have problems enumerating the enum variants without extra dependencies.

Very nice PoC!
I am primarily wondering whether JS developers would actually match on the code property. I'm very unfamiliar with JS error handling, but at least according to this SO answer, the accepted default is both messy and inaccurate, i.e. catching all or nothing. So, essentially, is the trouble with the proc-macro and generating all those errors worth it? If our error handling approach with the codes is actually unidiomatic for JS, then it might not end up being used and most of the work might just go to waste :confused:.
It would be interesting to have a JS developer's view. @abdulmth do you think having
{"code":"DecodeBitmap","description":"Failed to decode roaring bitmap: something went wrong!"}

thrown instead of just
"Failed to decode roaring bitmap: something went wrong!"

would be a worthwhile improvement? Would JS devs actually match on the code  if they have the possibility to do so? Or are they generally used to match on strings if they want to catch exception A, but not exception B?
@cycraig as you mentioned in #321, the C-style enums aren't actually a fundamental binding requirement, contrary to my initial belief. If we end up going with the current approach anyway, because it has value for the JS devs, I think I would still prefer regular Rust enums (option 2) for the actor,  since that would be more idiomatic for matching. Do you think we could allow deriving both C-style enums for bindings, and Rust enums for the actor?

Exceptions are usually done by throwing an Error object (see Error). Expected are the name and message properties. But as Phillip said, you can throw anything in JavaScript (a string or an arbitrary object). But usually I expect an Error object to be thrown that has name and  message properties.

@cycraig as you mentioned in #321, the C-style enums aren't actually a fundamental binding requirement, contrary to my initial belief. If we end up going with the current approach anyway, because it has value for the JS devs, I think I would still prefer regular Rust enums (option 2) for the actor, since that would be more idiomatic for matching. Do you think we could allow deriving both C-style enums for bindings, and Rust enums for the actor?

Indeed, the intermediate C-style are basically useless for the wasm-bindings because the enum variants can't be matched on in JavaScript except as a string and the Rust code exported to Wasm can just use the rich error enums directly. In my opinion the actor should use Rust enums that wrap any errors it needs as a string, unless it is a useful subvariant e.g.
#[derive(serde::Serialize, serde::Deserialize)]
enum SomeActorError {
  StrongholdPasswordNotSet,
  AccountError(string),
  ClientError(string),
  ...
}

Then implement From manually for each of the errors as-needed:
impl From<AccountError> for SomeActorError {
  fn from(error: AccountError) -> SomeActorError {
    match error {
      StrongholdPasswordNotSet => SomeActorError::StrongholdPasswordNotSet,
      err => SomeActorError::AccountError(err.to_string()),
    }
  }
}

If we need to send things like backtrace information (which seems to be a somewhat complex subject), then we could use an intermediate struct (that is still serializable) to hold it, e.g.
#[derive(serde::Serialize, serde::Deserialize)]
struct SerdeError {
  error: String,
  backtrace: Backtrace/String/something serializable,
}

#[derive(serde::Serialize, serde::Deserialize)]
enum SomeActorError {
  StrongholdPasswordNotSet(SerdeError),
  AccountError(SerdeError ),
  ClientError(SerdeError),
  ...
}

The above examples are just for demonstration. One could derive those From implementations to embed the variant code using a proc-macro, as done in this PR but in my opinion the actor errors and wasm binding errors should be considered completely separately.

Exceptions are usually done by throwing an Error object (see Error)

This changes things a bit. The current implementation, only returns arbitrary objects/strings, never a proper JavaScript Error. I.e. when using try-catch for errors in the following code example, e instanceof Error will always return false for anything we return, even with the current changes in this PR:
let messageId;
try {
    messageId = await client.publishDocument(doc.toJSON());
} catch (e) {
    if (e instanceof Error) {
        console.log(`e is an Error! ${e}`)
    } else {
        console.log(`not an Error... ${e}`)
    }
}

This will always print "not an Error..."
We can convert the error we return into a js_sys::Error, as suggested by https://github.com/rustwasm/wasm-bindgen/issues/1735#issuecomment-524348781. This would make e instanceof Error return true. However, this approach may not be ideal since the only two fields of Error (name and message) are both simple strings, so while we could pass the serialised JSON error as the message I think it may need to be parsed as JSON inside JavaScript to access custom fields like code and description?
Based on the points raised already, I'll work on another proof-of-concept. Essentially it will convert the Rust errors directly to some WasmError struct without C-style enums as an intermediary (since those are useless and unused).

I think it may need to be parsed as JSON inside JavaScript to access custom fields like code and description?

I'm not sure I've understood yet why we can't map the code into name and description into message? If code is the name of the enum variant, you can match on that even if it's a string.
I've taken a quick look at aws-sdk-js to see their approach, and it seems they frequently use throw new Error("some error description"). If we overwrite error.name with the name of the variant, then devs can use that to implement branching logic. I understand that we have not the same level of expressiveness as in Rust, because of nesting, but I thought we had accepted this as a trade-off. This seems like the best and simplest thing we can do with the JS Error type. If someone wants branching logic within a variant, they can still do some (ugly of course) error.name.contains("error string i want to match"), which is probably what most JS devs need to do anyway with most exceptions.

I'm not sure I've understood yet why we can't map the code into name and description into message? If code is the name of the enum variant, you can match on that even if it's a string.

We absolutely can do that and that will likely be the final implementation. I'm just checking whether we can do any better than that, by e.g. adding more fields to the returned error apart from the description, such as stacktraces to aid in debugging.
On a related note: I have to correct my previous statement that we can't use #[wasm_bindgen] in the proc-macro, we absolutely can (as long as it's placed above/before the #[derive(...)] attributes).
This enables use to generate something like the following:
#[wasm_bindgen]
#[derive(Clone, Debug)]
pub struct WasmError {
  code: WasmErrorCode,
  description: String,
}

#[wasm_bindgen]
impl WasmError {
  #[wasm_bindgen(constructor)]
  pub fn new(code: WasmErrorCode, description: String) -> Self {
    Self {
      code,
      description,
    }
  }

  #[wasm_bindgen(getter)]
  pub fn code(&self) -> SerdeErrorCode {
    self.code
  }

  #[wasm_bindgen(getter)]
  pub fn description(&self) -> String {
    self.description.clone()
  }
}

#[wasm_bindgen]
#[derive(Clone, Copy, Debug)]
pub enum WasmErrorCode {
  CryptoError,
  ...
}

In Javascript, this would enable the user to check the type of code too:
let messageId;
try {
    messageId = await client.publishDocument(doc.toJSON());
} catch (e) {
    if (e instanceof Error) {
        console.log(`e is an Error! ${e}`)          // WasmError is still NOT a Javascript Error
    } else if (e instanceof WasmError) {            // WasmError is exported by identity-wasm
        if (e.code === WasmErrorCode.CryptoError) { // WasmErrorCode enum variants can be compared directly
            console.log(`CryptoError: ${e}`)
        } else {
            console.log(`Unknown WasmError: ${e}`)
        }
    } else {
        console.log(`not an Error: ${e}`)
    }
}

However when I actually tried doing that for all the different error enums identity.rs exports, the linker fails due to "duplicate symbols":
 = note: rust-lld: error: duplicate symbol: flaterror_new
          >>> defined in C:\Work\iota\identity.rs\bindings\wasm\target\wasm32-unknown-unknown\release\deps\libidentity_credential-61734c946a494da3.rlib(identity_credential-61734c946a494da3.identity_credential.23b4pm7p-cgu.1.rcgu.o)
          >>> defined in C:\Work\iota\identity.rs\bindings\wasm\target\wasm32-unknown-unknown\release\deps\libidentity_did-9b8e16a2407ef1de.rlib(identity_did-9b8e16a2407ef1de.identity_did.9s0pxrfz-cgu.0.rcgu.o)

          rust-lld: error: duplicate symbol: __wbindgen_describe_flaterror_new
          >>> defined in C:\Work\iota\identity.rs\bindings\wasm\target\wasm32-unknown-unknown\release\deps\libidentity_credential-61734c946a494da3.rlib(identity_credential-61734c946a494da3.identity_credential.23b4pm7p-cgu.1.rcgu.o)
          >>> defined in C:\Work\iota\identity.rs\bindings\wasm\target\wasm32-unknown-unknown\release\deps\libidentity_did-9b8e16a2407ef1de.rlib(identity_did-9b8e16a2407ef1de.identity_did.9s0pxrfz-cgu.0.rcgu.o)

          rust-lld: error: duplicate symbol: flaterror_code
          >>> defined in C:\Work\iota\identity.rs\bindings\wasm\target\wasm32-unknown-unknown\release\deps\libidentity_credential-61734c946a494da3.rlib(identity_credential-61734c946a494da3.identity_credential.23b4pm7p-cgu.1.rcgu.o)
          >>> defined in C:\Work\iota\identity.rs\bindings\wasm\target\wasm32-unknown-unknown\release\deps\libidentity_did-9b8e16a2407ef1de.rlib(identity_did-9b8e16a2407ef1de.identity_did.9s0pxrfz-cgu.0.rcgu.o)

          rust-lld: error: duplicate symbol: __wbindgen_describe_flaterror_code
          >>> defined in C:\Work\iota\identity.rs\bindings\wasm\target\wasm32-unknown-unknown\release\deps\libidentity_credential-61734c946a494da3.rlib(identity_credential-61734c946a494da3.identity_credential.23b4pm7p-cgu.1.rcgu.o)
          >>> defined in C:\Work\iota\identity.rs\bindings\wasm\target\wasm32-unknown-unknown\release\deps\libidentity_did-9b8e16a2407ef1de.rlib(identity_did-9b8e16a2407ef1de.identity_did.9s0pxrfz-cgu.0.rcgu.o)

          rust-lld: error: duplicate symbol: flaterror_description
          >>> defined in C:\Work\iota\identity.rs\bindings\wasm\target\wasm32-unknown-unknown\release\deps\libidentity_credential-61734c946a494da3.rlib(identity_credential-61734c946a494da3.identity_credential.23b4pm7p-cgu.1.rcgu.o)
          >>> defined in C:\Work\iota\identity.rs\bindings\wasm\target\wasm32-unknown-unknown\release\deps\libidentity_did-9b8e16a2407ef1de.rlib(identity_did-9b8e16a2407ef1de.identity_did.9s0pxrfz-cgu.0.rcgu.o)

[and so on...]

So while we could try and make the derived struct names hygienic (it's really a problem with the code generated by wasm_bindgen that's unhygienic and conflicting in the same namespace), it doesn't seem worth it.

I've taken a quick look at aws-sdk-js to see their approach, and it seems they frequently use throw new Error("some error description").

With the norm being generic error strings in Javascript, I think simply returning a Javascript Error with name = code and message = description is "fine". I've been spoiled by the enums and error handling in Rust but the reality is probably that it's not especially useful nor idiomatic in Javascript.

I've updated the code with proper usage of #[wasm_bindgen] which renames the exported generated types from e.g. WasmIotaError back to IotaError in Javascript code, so it elides the conversion on their side.
This means proper type comparisons may now be used as per the original proposal in the issue (instead of string comparisons).
E.g.
let messageId;
try {
    messageId = await client.publishDocument(doc.toJSON());
} catch (e) {
    if (e instanceof Error) {                 // exported errors are still NOT subclasses of Javascript Errors
        console.log(`e is an Error! ${e}`)
    } else if (e instanceof CoreError) {      // CoreError is exported by identity-wasm
        switch (e.code) {                     // CoreErrorCode enum variants can be compared directly
            case CoreErrorCode.Crypto: {
                console.log(`CryptoError: ${e}`); break;
            }
            case CoreErrorCode.InvalidUrl: {
                console.log(`InvalidUrl: ${e}`); break;
            }
            default: {
                console.log(`Unhandled CoreError: ${e}`)
            }
        }
    } else {
        console.log(`not an Error: ${e}`)
    }
}

Most of the original disadvantages of this approach have been addressed now (at the cost of re-naming the errors to avoid namespace conflicts and including wasm-bindgen as a feature-gated dependency in most of the identity crates) so it's not too bad anymore. It's perhaps overkill and unlikely to be used though.
I'll still push the alternative implementation based on js_sys::Error soon.


Not able to display gallery

Hey!
I have installed the gem and set it up, but the gallery is not being displayed.
I am using carrierwave to store my images, and I have
specified the correct attribute names so heritage has access to both
thumbnails and full image.
In my view:
<%= render_gallery_for @images %>

where @images is an array of objects with thumbnail and full images are accessible like this: @images[i].image.thumb.url & @images[i].image.url
Hermitage configuration:
Hermitage.configure :images do
  original -> item { item.image.url }
  thumbnail -> item { item.image.thumb.url }
  title -> item { item.category.name }
  list_tag :ul
  item_tag :li
  list_class 'thumbnails'
  item_class 'span4'
  link_class 'thumbnail'
  image_class nil
  each_slice nil
end

Viewing the gallery:

Clicking an image, (not being able to click to the next image, simply goes to the image url):

What am I doing wrong?
Thanks.

Hi @Philippoes,
Are you sure that you added require hermitage to your application.js and the script is initialized with no errors?

Thanks for responding @ImmaculatePine ,
Yes, hermitage is added to the application.js file.
my application.js file
//= require rails-ujs
//= require turbolinks
//= require_tree .
//= require jquery3
//= require popper
//= require bootstrap-sprockets
//= require hermitage

Also, I do get this error when clicking one of the images that are being displayed:
TypeError: url.indexOf is not a function
    at jQuery.fn.init.jQuery.fn.load```

Could you reproduce it in a new empty project and share the code?

Hi, here is the Repo Link
When you clone it down, pls make sure to seed the database with rails db:seed to seed a few test categories. This is because I am using category name as title in the images for the gallery.

@Philippoes I think I found it.
Error occurs in loadImage() function which uses jQuery's load(). The problem is that they changed its behaviour in newer releases. Old versions of jQuery fallback to load event if callback is the only provided argument (which is the case for hermitage implementation). The newest version raises error you see in your logs.
Fix should be easy - all I need is to replace .load(complete) with .on('load', complete).
Unfortunately it won't help you... The latest version of hermitage (which is not released to rubygems yet and could be installed from master branch) doesn't support Rails 5. I added this limitation due to some problems with tests when I revised them after the Rails 5 release.
To sum it up, I can fix this, but the fix will be available for Rails < 5.0 only. You could try to rollback to the older jQuery version but I'm not sure that Rails 5 supports it.

@ImmaculatePine  Thanks! Alright, I understand. I am able to rollback to an older version of jquery. Which one would be optimal to use?

@Philippoes<EMAIL_ADDRESS>should work for sure. You can check what exactly version of jQuery it provides.


Kerberos AES256 algorithm

Good day.
Could you please help me with my question:
Ive learned and read a lot about your Kerberos .Net implementation, but havent found the answer.
If we look at AES256 algorithm implementation we`ll find that in some steps it uses n-fold algorithm in order to derive some help-keys. For example, the word "kerberos" is given to n-fold algorithm to make a string of bytes.
During making the key for message encryption with the help of AES256 algorithm we use n-fold algorithm not only for the word "kerberos", also we use it with constants, which are depended on the type of the packet (AS_REG,AS_REP,TGS_REP). Where can i find these constants, which a given on the entrance of n-fold algorithm in order to make intermediate keys?
`private static ReadOnlyMemory DR(ReadOnlyMemory key, ReadOnlyMemory constant, int keySize, int blockSize)
{
var keyBytes = new Memory(new byte[keySize]);
        ReadOnlyMemory<byte> ki;

        if (constant.Length != blockSize)
        {
            ki = NFold(constant.Span, blockSize);
        }
        else
        {
            ki = constant;
        }

        var n = 0;

        do
        {
            ki = AESCTS.Encrypt(ki, key, AllZerosInitVector);

            if (n + blockSize >= keySize)
            {
                ki.CopyTo(keyBytes.Slice(n, keySize - n));
                break;
            }

            ki.CopyTo(keyBytes.Slice(n, blockSize));

            n += blockSize;
        }
        while (n < keySize);

        return keyBytes;
    }`

I have a very important issue with it, could you please help me?

The constant is derived in dk():
private static ReadOnlyMemory<byte> DK(ReadOnlyMemory<byte> key, KeyUsage usage, KeyDerivationMode kdf, int keySize, int blockSize)
{
    using (var constantPool = CryptoPool.RentUnsafe<byte>(5))
    {
        var constant = constantPool.Memory.Slice(0, 5);

        Span<byte> span = constant.Span;
        span.Clear();
        BinaryPrimitives.WriteInt32BigEndian(span, (int)usage);

        constant.Span[4] = (byte)kdf;

        return DK(key, constant, keySize, blockSize);
    }
}

The per-request value relies on KeyUsage. That's defined in an enum in the cryptography folder.

So, the constant consists of 5 bytes.
There are a lot of values in KeyUsage file
as i can understand
for as_reg packet the constant is PaEncTs = 1
and for as_rep EncAsRepPart = 3
and they have this form:
0x00 0x00 0x00 0x00 0x01
0x00 0x00 0x00 0x00 0x03
But i cant understand, which constants are for another packets. For example TGS_REP and so on.  Its not trivial task to understand : there are a lot of values in KeyUsage
Could you please explain

You know there's a spec, right?
https://tools.ietf.org/html/rfc4120
It's pretty clear about what to use.

From: EightLegs<EMAIL_ADDRESS>Sent: Saturday, October 10, 2020 8:43:51 AM
To: dotnet/Kerberos.NET<EMAIL_ADDRESS>Cc: Steve Syfuhs<EMAIL_ADDRESS>Comment<EMAIL_ADDRESS>Subject: Re: [dotnet/Kerberos.NET] Kerberos AES256 algorithm (#204)
So, the constant consists of 5 bytes.
There are a lot of values in KeyUsage file
as i can understand
for as_reg packet the constant is PaEncTs = 1
and for as_rep EncAsRepPart = 3
and they have this form:
0x00 0x00 0x00 0x00 0x01
0x00 0x00 0x00 0x00 0x03
But i cant understand, which constants are for another packets. For example TGS_REP and so on. Its not trivial task to understand : there are a lot of values in KeyUsage
Could you please explain
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHubhttps://github.com/dotnet/Kerberos.NET/issues/204#issuecomment-706568297, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AAJHTYJI5IMNVP6XMGB44VTSKB6LPANCNFSM4SLATBFA.

Ive read a lot of rfc about Kerberos and couldnt find really detailed explanation about how AES algorithm works.
there are several constants in its calculation, which are not described

AES is defined in https://tools.ietf.org/html/rfc3962
Which relies on https://tools.ietf.org/html/rfc3961 for general implementation details.

From: EightLegs<EMAIL_ADDRESS>Sent: Saturday, October 10, 2020 8:56:47 AM
To: dotnet/Kerberos.NET<EMAIL_ADDRESS>Cc: Steve Syfuhs<EMAIL_ADDRESS>Comment<EMAIL_ADDRESS>Subject: Re: [dotnet/Kerberos.NET] Kerberos AES256 algorithm (#204)
Ive read a lot of rfc about Kerberos and couldnt find really detailed explanation about how AES algorithm works.
there are several constants in its calculation, which are not described
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHubhttps://github.com/dotnet/Kerberos.NET/issues/204#issuecomment-706570077, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AAJHTYL74VQ2LSL4L7NLK4TSKB737ANCNFSM4SLATBFA.

I know about this standards.
Thanks a lot, i  will try to find out.
But, actually, there is not step-by-step explanation of making key with the help of AES algorithm, which is used in Kerberos

Specs generally don't provide step by step guidance. The 3961 spec is however pretty clear about how the KDF operates. 3962 provides AES-specific guidance, which isn't actually notably different because it just changes algorithm parameters. 4120 specifies which key usage types should be used during particular message flows.

From: EightLegs<EMAIL_ADDRESS>Sent: Saturday, October 10, 2020 9:02:40 AM
To: dotnet/Kerberos.NET<EMAIL_ADDRESS>Cc: Steve Syfuhs<EMAIL_ADDRESS>Comment<EMAIL_ADDRESS>Subject: Re: [dotnet/Kerberos.NET] Kerberos AES256 algorithm (#204)
I know about this standards.
Thanks a lot, i will try to find out.
But, actually, there is not step-by-step explanation of making key with the help of AES algorithm, which is used in Kerberos
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHubhttps://github.com/dotnet/Kerberos.NET/issues/204#issuecomment-706571087, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AAJHTYP4UJRRNNSVEPLVUN3SKCASBANCNFSM4SLATBFA.

Thank you for explaning me
But I`ve found your project here, and i think that it will be very clear step by step algorithm of derivation of the key and the values of constants.
I know about these RFCs, but interested in details, which are provided in the project. But i can`t understand some things in functions in order to find the values of constants


If fetch_results=True in sdk.get_batch() we should wait for job completion

This would make the behavior consistent with the job submission fetch_results behaviour.

Is this not the case ? That sounds like a bug

I would say no (but I've not ran and confirmed yet)
As you see in the code (client), there is no check that the batch is done
    def _get_batch(
        self, id: str, fetch_results: bool = False
    ) -> Tuple[Dict[str, Any], List[Dict[str, Any]]]:
        batch_data: Dict[str, Any] = self._request(
            "GET", f"{self.endpoints.core}/api/v1/batches/{id}"
        )["data"]
        jobs_data = batch_data.pop("jobs", [])
        if fetch_results:
            results = self._request(
                "GET", f"{self.endpoints.core}/api/v1/batches/{id}/results"
            )["data"]
            for job_data in jobs_data:
                job_data["result"] = results.get(str(job_data["id"]), None)
        return batch_data, jobs_data

Ah yes you're right I was thinking of the _create_batch function! Would be nice! I think we could just move all the logic that is inside the create_batch function to the get_batch function
Do you need this for QD module 2 release  ?

For now I just left this in a different library (because I wanted to do some other checks too, so it was nice), but as soon as this is released this would be something to fix. But we should probably take the time to consider all the functions and make sure that everything works as expected / desired.

Would also be convenient to support an optional timeout argument, for example in test environments where we know that the batch is supposed to take a few seconds at most.
Infinite waiting is a rather annoying experience when running a test suite.

deprecated fetch_results


nlcd is required for example 3

03_harmonizing_community_boundaries
should this be documented somewhere as it isn't clear what to do (the error is going to be cryptic for an end user):
~/geosnap/harmonize/harmonize.py in harmonize(raw_community, target_year, weights_method, extensive_variables, intensive_variables, allocate_total, raster, codes, force_crs_match, index, time_col)
    145                 raster_path=raster,
    146                 codes=codes,
--> 147                 force_crs_match=force_crs_match,
    148             )
    149

~/tobler/tobler/area_weighted.py in area_tables_raster(source_df, target_df, raster_path, codes, force_crs_match)
    443     # The 'append_profile_in_gdf' function is present in nlcd.py script
    444     res_union = fast_append_profile_in_gdf(
--> 445         res_union_pre, raster_path, force_crs_match=force_crs_match
    446     )
    447

~/tobler/tobler/vectorized_raster_interpolation.py in fast_append_profile_in_gdf(geodataframe, raster_path, force_crs_match)
    169
    170     _check_presence_of_crs(geodataframe)
--> 171     raster_path = fetch_quilt_path(raster_path)
    172     if force_crs_match:
    173         raster = rasterio.open(raster_path)

~/tobler/tobler/data.py in fetch_quilt_path(path)
     39         except ImportError:
     40             raise(
---> 41                 "Unable to locate local raster data. If you would like to use "
     42                 "raster data from the National Land Cover Database, you can "
     43                 "store it locally using the `data.store_rasters()` function"

TypeError: exceptions must derive from BaseException

yeah, thats a mistake anyway, as it needs to raise a real exception so the text actually prints. maybe IOError?

resolved bt #158


Take<Chain< ... >> panics when calling bytes.

This code will panic:
let a = Cursor::new(Bytes::from(&b"hello"[..]));
let b = Cursor::new(Bytes::from(&b"world"[..]));
let mut out = vec![];
out.put(a.chain(b).take(8));

with

index 8 out of range for slice of length 5

This is because Take::bytes() attempts to slice the result Chain::bytes() up to the minimum of the limit (8) and the number of bytes remaining in the Chain (10). However, Chain::bytes() returns only the first contiguous byte slice which has length 5.
Edit:
Actually Buf::take() always uses its limit parameter, not the minimum of the remaining bytes and the limit parameter as I initially thought. As a result,
let a = Cursor::new(Bytes::from(&b"hello"[..]));
let mut out = vec![];
out.put(a.take(8));

panics with the same message, which is, in my opinion, still a bit unintuitive but consistent with the behavior of the rest of the crate.

This is #138.

The fix was merged! Thanks.


Pyguacamole logs

I am using pyguacamole on a django project and I can't see pyguacamole logs. Is there something I should do other than adding pyguacamole to my LOGGING section in setting.py of my project ? or could I be doing it wrong ?

you could enable the debug logs when initializing the client.

Thanks a lot, that didn't work for me, or at least I can't see the logs, so I did this configuration :
logging.basicConfig( filename="/mylogpath/guac.log", filemode='a', level=logging.DEBUG )
and I passed logger=logging.getLogger() to the constructor of the client.


Rubocop Round 2

@pitbulk ready for review (and round 3 PR as well)

@pitbulk please review and merge when you have time, along with #658

@pitbulk please review and merge when you have time, along with https://github.com/SAML-Toolkits/ruby-saml/pull/658


Support shared filters

Once #57 is merged the next logical step is to support shared filters.
This should be fairly simple: We could have a trivial subclass of FilterHandler that was annotated with Netty's @Shareable and some mechanism for filter implementations to indicate their shareability (e.g. a marker interface). Then it would be a responsibility of the FilterChainFactory to re-use a single instance of such filters.
With shareability would come additional requirements for thread safety which would need to be documented.

The reason this is "the next logical step" is it allows TopicEncryption filter instances to have a common lookup, rather than ending up with the same mappings over all the channels.


Amputate Links

From issue 1, this pull request adds two simple rules that convert three different types of Google AMP links to their canonical equivalent. There may be AMP links that take other forms not covered by these rules.

[!NOTE]

Google AMP (Accelerated Mobile Pages) is harmful to the free and open web for a variety of reasons that are beyond the scope of this discussion. Relevant to this app, it enables both the publisher and Google to spy on readers instead of just the publisher. It also misrepresents who is serving you content in the URL bar.

There is no straightforward way I see to create a single rule covering all three of these link types using the interface exposed by Untracker, at least without running this rule on all links instead of just AMP links.
Amputate - Host
This rule converts Google AMP links of the subdomain form...
https://amp.example.com/some/path/news-article.html

...to their canonical form.
https://example.com/some/path/news-article.html

Here is my rule code.
if ($.matches(url, '(.+[.])?amp[.].+')) {
    const host = $.getHost(url).replace(/(?<!\w)amp[.]/, '');
    return $.setHost(url, host);
}

Amputate - Path
This rule amputates links using the path form...
https://example.com/amp/some/path/news-article.html

...or the file extension form of Google AMP...
https://example.com/some/path/news-article.html.amp

...to their canonical form.
https://example.com/some/path/news-article.html

Here is my rule code.
if ($.matches(url, '.*', '.*amp.*')) {
    const path = $.getEncodedPath(url).replace(/[./]amp(?!\w)/, '');
    return $.setEncodedPath(url, path);
}

Tests
I tested my changes against Untracker v1.0.3 (4) from F-Droid on Android 13.
1. - AMP subdomain is removed.
https://amp.example.com/some/path/news-article.html

2. - Normal subdomains are preserved.
https://amp.news.example.com/some/path/news-article.html

3. - Non-AMP subdomains are not matched.
https://damp.example.com/some/path/news-article.html

4. - Non-AMP subdomains are not matched.
https://amperes.example.com/some/path/news-article.html

5. - AMP paths are removed.
https://example.com/amp/some/path/news-article.html

6. - Non-AMP paths are not matched.
https://example.com/damp/some/path/news-article.html

7. - Non-AMP paths are not matched.
https://example.com/ampere/some/path/news-article.html

8. - AMP file extensions are removed.
https://example.com/some/path/news-article.html.amp

9. - AMP file extensions are removed.
https://example.com/some/path/news-article.amp.html

[ ] Tests pass
[ ] Appropriate changes to README are included in PR

Individual CLA signed.

Is there an official way to get the original URL of an AMP page? I don't like AMP either, but having amp in a domain or path doesn't necessarily mean it's an AMP page since it has a lot of other meanings, and I don't want to include something that may not work as a built-in rule. So I would recommend keeping it as a custom rule for now.

Is there an official way to get the original URL of an AMP page?

Yes, the AmputatorBot project provides a free, public API that uses fourteen patterns, heuristics, and can follow redirects that claims a >97% conversion rate.
Using their API instead of local rules has some implications. It would reveal the link being shared to a third-party (them), requires an Internet connection, and your app will have to wait on the API response. You may also have to mark your app on F-Droid as "depending on a non-free service" because of this.

Everything, except for some parts of this API and the website, has been open sourced on GitHub.

I did not go this route initially because I wasn't even sure if your rule script allows me to call out to the Internet, it is more work, and these rules are sufficient in 99.9% of use-cases. I am willing to try implementing the AmputatorBot API in your app and opening another pull request, but I'm not going to spend time on it unless you are willing to accept those implications and that work would be likely to be merged.
Another option would be set the rules in this pull request to "disabled" by default. I went ahead and pushed a commit to do that so, if you want to go with this option, you can just approve or merge this pull request.
A third option still would be to dig through their codebase and implement the fourteen rules they use locally. This side-steps the implications of using their API while almost certainly addressing your concerns. However, I don't know how complicated their rules are. Again, I would be willing to work on implementing this but I won't put time into it unless you signal interest in that work.
What do you think?

The app does allow rules to connect to Internet which is how the built-in rule for expanding short links are implemented - it provides a $.fetch() API similar to the Fetch API in browsers.
I feel okay with either of the following:

Having a disabled-by-default built-in rule that calls AmputatorBot - and I hope there can be some heuristics that allows skipping the call to AmputatorBot for most non-AMP pages.
Having a built-in rule that implements the proper rules locally, but maybe still disabled by default if it's not going to work in 100% of cases.
Keep the rule as a custom one and people can get it from you/somewhere else.

You are right, I remember seeing $.fetch() now. It had been a few weeks, I forgot about that.
Awesome, thank you for discussing it with me! I'll look at implementing number 1 or number 2 when I have some time and open another pull request. Cool project BTW, this is definitely a feature Android has needed for some time.

I opened issue 25 to track this feature request.


Faster Refresh

Hi there,
i am relativ new to HA. I use your integration and its works pretty good.
Could you discribe me where i can change the refreshing to something like 15-30sec?
I tried to change the_init_.py line 42 to 30 seconds but it didnt change anything.
Thanks in advance

Hi, it should be the right place, did you restarted HA fully?

Hi, i also use your sma speedwire integration and changed the update interval to 30 sec., but after fully restart nothing changed.
Thanks!


Revert minSdkVersion back to 20

Recently the minSdkVersion was changed from 20 to 23 but there doesn't seem to be any reason for that. We are still supporting devices on API levels lower than 23, so can we  please keep doing so?

I also used SDK 19 before. Unfortunately now must be at least v23.

@aqinfh I must be missing something - why must it be at least v23? When I set the minSdfVersion back to 20 it seems to work fine.

have you tried to make a release version?
idk flutter tells me to update minsdk version, or downgrade flutter_compass version

@aqinfh Sorry I meant if I clone this repo and set the minSdkVersion back to 20 it seems to work fine on the

what version of flutter are you using? mine v2.5.0

Flutter 2.5.1

i'm using flutter with the same version now.
When i use Flutter compass 0.7.0. still need to update min sdkversion

@aqinfh I've cloned the compass repo and changed it to set the minSdkVersion back to 20 and then built my Flutter project with the cloned repo. There is special notation in pubspec.yml to refer to a (cloned) git (Github) repo.

what did you mean about "There is special notation in pubspec.yaml to refer to a (cloned) git (Github) repo"?


[Question] Upscaled or Original version of the favicons?

I wanted to use the included favicons as the icon for my comfy install folder but the included ones for the browser tab are pretty small. Does anyone know where I can find the originals?

Sorry I don't have it anymore, it was the avatar of comfyanonymous but he has since changed it!


Use ensure_packages() to avoid resource conflicts

This module uses an older technique to make sure that curl and
mercurial are installed; unfortunately, this technique causes a
resource conflict in the event that either of those package resources
are declared elsewhere.  This patch declares a dependency on
puppetlabs/stdlib and then uses the ensure_packages() function to
achieve the same effect without the resource conflict.

Thanks for this. I haven't maintained this well so I will check it out later today just to make sure it all works and then give this a merge.

🌟  Thanks for the pull request!
I have also published a new version onto forge 1.2.0


Do something when the user clicks on the icon on the toolbar

Now it isn't doing anything. It may seem its broken. Maybe show a tutorial?

I was thinking about open the settings page: https://github.com/anthonysousa/trellodoro/commit/90847ed115bc8e5b2652d65277198a04b64bf3f8
What do you think?

Even better :+1:


Move CudaRng pub methods to trait

This will enable a corresponding CpuRng to implement them

Actually tihnk this should be done outside the crate!


[Question] Multiple Image Input

How can I include multiple input images into the synth? When starting braindance.py path-to-my-imagefolder, a filemanager opens that just let's me select a single image.
I'd like to re-create a whole room by including the info's of multiple images.

This work specifically focused on the synthesis of novel views from a single input image. Currently it cannot take into account multiple images, but that's a very interesting direction for future works!
If you have many views available, you might be interested in Stable View Synthesis.


is bolt getting dumber?

Describe the bug
i just gave bolt a prompt that asked to simply make the navbar transparent and the black text white, and it failed miserably.  This is a task that I am certain bolt could have handled perfectly a few weeks ago.  What is going on?
I'm about to spend another $50 on bolt but not if it's not capable of doing simple things like this.
Link to the Bolt URL that caused the error
https://bolt.new/~/sb1-8tqdb4bu
Validations

[X] Please make your project public or accessible by URL. This will allow anyone trying to help you to easily reproduce the issue and provide assistance.

Steps to reproduce
prompt it with this: make the navbar transparent and all black text white
Expected behavior
the changes as described in the prompt
Screen Recording / Screenshot
No response
Platform
Browser name = Chrome
Full version = <IP_ADDRESS>
Major version = 131
navigator.appName = Netscape
navigator.userAgent = Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<IP_ADDRESS> Safari/537.36
performance.memory = {
  "totalJSHeapSize": 67675861,
  "usedJSHeapSize": 64951453,
  "jsHeapSizeLimit":<PHONE_NUMBER>
}
Username = TechIntegrationLabs
Chat ID =<PHONE_NUMBER>6d

Additional context
No response

Yes. I think they have reprogrammed it to waste tokens.  I have done some SIMPLE tests and it waits just until deployment and ends up in endless loops.


Collateral Rehypothecation and Credit Denominations

The base Credit mechanism has only a single borrowable asset, CREDIT tokens, which the protocol can mint within the constraints outlined in the smart contracts. Among DeFi lending markets today, there are examples of large markets where there is no rehypothecation of collateral (MakerDAO, Liquify) as well as those with extensive rehypothecation (Aave, Compound).
It's desirable to lend non-CREDIT denominations. Since users may be willing to pay high rates to borrow some of the deposited collateral assets, it can increase returns for those borrowing credits, as well as for the GUILD holders. We've been considering a framework where each primary LendingTerm contains a reference to a secondary collateralLendingTerm, which contains the rehypothecation rules for the original LendingTerm's collateral asset. The downside of this is introducing more complexity into the core protocol mechanism, requiring an accounting mechanism to manage liquidity in the rehypothecated asset. As noted by @eswak this would also require an additional accounting step when handling bad debt as contagion would exist between loans.
I now think it is better to have no rehypothecation in the base system. Instead we can use the same market governance rules as CREDIT itself for creating synthetics in many denominations, and GUILD holders can choose which they want to stake on.
If we think of CREDIT as a generically "USD-denomination" synthetic (not preferring a specific stablecoin or backing asset, but rather targeting a certain risk and yield), each of these dCredits is denominated in a reference asset like DAI, wstETH, OUSG, etc. This denomination is not hardcoded anywhere but is reflected in the set of loan terms approved by governance. Just the same as CREDIT, a user who wants to short OP could put up ARB collateral to mint credit_OP, while OP holders who wish to earn yield within the protocol would need to swap OP for credit_OP on a DEX, and a user who wants to long credit_OP could use it as collateral to mint CREDIT if suitable loan terms are available.
I like that this unifies everything within a single mechanism and makes it simple for users to earn yield on a given asset. Like CREDIT, liquidity management occurs through market price fluctuation and use of the "call" mechanism in loans, instead of directly calculating an exchange rate on chain. It also creates a separation of concerns between the GUILD holders who are allocating in different denominations. It would require a duplication of the gauges (where GUILD holders can choose which instance's gauges to participate in), and the remaining question would be handling of the surplus buffer accounting, but these seem like manageable issues.

I'm closing this issue as I believe we have consensus that by default, borrower collateral is not rehypothecated (this is actually a requirement for certain RWA security tokens).


Adding multilanguage support

Coverage increased (+0.002%) to 90.998% when pulling f4acfc9c0c2fa2d36d7fc6da991702026cc6dfb7 on DDDIM:staging into af26f1923f38417932e92d629aa741012deee9ad on FarmBot:staging.

@DDDIM Thanks again for your contributions to the app's internationalization.
Your changes will be merged in my next pull request after I apply some minor changes / updates. :+1: :1st_place_medal: :tada:


Refactoring kubectl invocation to better support silence

The current kubectl invocation infrastructure has UI interactions such as 'binary not found', 'install dependencies' etc. deep in the fundamental path.  This can result in situations where the extension accidentally activates (e.g. because the user is working with a non-Kubernetes YAML file) and the user gets spammed with repeated notifications and prompts.
This PR refactors invocation to better support silent invocation, and to give the application level finer grained control over when to engage in UI interactions.  It does not necessarily reduce noise right now because the main purpose is to restructure invocation with minimal risk, but it is necessary infrastructure for reducing noise in the forthcoming sequel.

@bnookala @squillace (and anyone else) it would be great if you could have a play with this and let me know if you see any regressions.  It's a bit of a beast and probably tricky to review unfortunately...

@lstocchi Thanks!  I addressed the comments except for the one about named constants, where I am not sure about the benefits vs folderol of the change, given that the compiler verifies the values anyway...?

@lstocchi Thanks! I addressed the comments except for the one about named constants, where I am not sure about the benefits vs folderol of the change, given that the compiler verifies the values anyway...?

I was thinking about constants just to prevent any typos when writing new code or, if in future we need to change any of those string, we don't need to go all over the code. But it's not a requirement at all. Just to make you think on this :+1:

@itowlson i finally finished to look at everything. Sorry it tooks so long but i was quite busy and this PR is huge. All the things i commented previously are the only ones i found. For the rest it looks good for me :+1:

Thanks heaps @lstocchi - appreciate all your time and attention on this!


Allow Enabling 90Hz mode for Oculus

By adding:
{
 ...,
  "Video": {
    "DisplayRefresh": 90,
  },
 ...,
}

This PR will allow setting the default display refresh to 90Hz or, presumably, if you have v28, to 120Hz.

Can we make this draft?

Done, though I think it's ready for review, just not for merge. How can I indicate that?

Done, though I think it's ready for review, just not for merge. How can I indicate that?

I think maybe we just need a discussion. My feeling is that the benefits aren't enough to warrant the hassle right now and we should maybe revisit this later. So my vote is to move it to a Github issue or discussion.

90Hz mode offers a much smoother experience, if we can keep it up. Jumping framerates are probably worse, though, than locking at 72Hz.
This PR was an attempt at making it easier to test if 90Hz is suitable for real world use in OB. I still think it serves that purpose, although if we don't have anyone with time to test and validate it, then I agree that it's not really going to go anywhere. But without the PR, I know it will never get anywhere...
(so yes, I opened this to try to encourage discussion. I guess it didn't work)

One way to mitigate the performance cost of this would be to combine it with Application Spacewarp: https://developer.oculus.com/blog/introducing-application-spacewarp/
But our extensive use of transparancy might rule that out. Anyone got any thoughts?

One way to mitigate the performance cost of this would be to combine it with Application Spacewarp: https://developer.oculus.com/blog/introducing-application-spacewarp/

Note that Spacewarp currently hard requires URP (and OpenXR, but we're working on that) to function, so it's a bigger task! It sounds like a really useful feature though.

Before we talk about performance cost... can we try this and see?
We know that our average frame rate (from Oculus metrics) is just a hair under 72. I don't know if that means we'll never hit 90 in the real world, or it's easily capable of doing target-2.

@mikeage we've had reports that xr_v2 has gained some performance compared to the main release. is bumping to 90 by default possible?

Sure -- do we have a set of reference files to test with? (I need to confirm how we check FPS; I don't think we have the VrApi prints anymore). But we can try enabling it on xr_v2. I'll do a PR shortly

I'm mildly -1 on this. (-0.5?)
A lot of our users push performance to the limit. Gaining performance when we switch to xr is a good thing. Is this the best thing to spend it on?
If it's the default, how easy is it for people to switch back? How many will even think of switching back?
There's a bunch of things disabled going from PC to Quest (shadows, bloom after a certain complexity) that we could think about reenabling instead of this.

https://github.com/godotengine/godot/pull/67179#issue-1402767733 Just wanting to note that the PR to Godot to add https://registry.khronos.org/OpenXR/specs/1.0/html/xrspec.html#XR_FB_display_refresh_rate suggests that it's supported on SteamVR as well! We could make a cross-platform implementation of this.


Add Covariance models

Codecov Report
Attention: 2 lines in your changes are missing coverage. Please review.

Comparison is base (e72081f) 84.69% compared to head (68044cb) 84.49%.

Files
Patch %
Lines

src/covariance.jl
60.00%
2 Missing :warning:

Additional details and impacted files
@@            Coverage Diff             @@
##           master      #96      +/-   ##
==========================================
- Coverage   84.69%   84.49%   -0.20%
==========================================
  Files          25       26       +1
  Lines         614      619       +5
==========================================
+ Hits          520      523       +3
- Misses         94       96       +2

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


[Do not merge][Management Plane][Azure Search] Adding new API version 2021-01-04

MSFT employees can try out our new experience at OpenAPI Hub  - one location for using our validation tools and finding your workflow.

Note : This is copy of PR 13355. Which was merged early and needed to be reverted .
Actual PR : https://github.com/Azure/azure-rest-api-specs/pull/13355
PR to revert : https://github.com/Azure/azure-rest-api-specs/pull/13595
Changelog
Please ensure to add changelog with this PR by answering the following questions.

What's the purpose of the update?

[ ] new service onboarding
[ ] new API version
[ ] update existing version for new feature
[ ] update existing version to fix swagger quality issue in s360
[x] Other, please clarify

When you are targeting to deploy new service/feature to public regions? Please provide date, or month to public if date is not available yet.
04-30-2021 (They are rolling out as we speak)
When you expect to publish swagger? Please provide date, or month to public if date is not available yet.
04-30-2021
If it's an update to existing version,  please select SDKs of specific language and CLIs that require refresh after swagger is published.

[ ] SDK of .NET (need service team to ensure code readiness)
[ ] SDK of Python
[ ] SDK of Java
[ ] SDK of Js
[ ] SDK of Go
[ ] PowerShell
[ ] CLI
[ ] Terraform
[X] No, no need to refresh for updates in this PR

Contribution checklist:

[X] I commit to follow the Breaking Change Policy of "no breaking changes"
[X] I have reviewed the documentation for the workflow.
[X] Validation tools were run on swagger spec(s) and errors have all been fixed in this PR. How to fix?

If any further question about AME onboarding or validation tools, please view the FAQ.
ARM API Review Checklist

[x] Ensure to check this box if one of the following scenarios meet updates in the PR, so that label “WaitForARMFeedback” will be added automatically to involve ARM API Review. Failure to comply may result in delays for manifest application. Note this does not apply to data plane APIs, all “removals” and “adding a new property” no more require ARM API review.

Adding new API(s)
Adding a new API version
[ ] Ensure to copy the existing version into new directory structure for first commit (including refactoring) and then push new changes including version updates in separate commits. This is required to review the changes efficiently.
Adding a new service

[X] Please ensure you've reviewed following guidelines including ARM resource provider contract and REST guidelines. Estimated time (4 hours). This is required before you can request review from ARM API Review board.

[ ] If you are blocked on ARM review and want to get the PR merged with urgency, please get the ARM oncall for reviews (RP Manifest Approvers team under Azure Resource Manager service) from IcM and reach out to them.

Breaking Change Review Checklist
If there are following updates in the PR, ensure to request an approval from Breaking Change Review Board as defined in the Breaking Change Policy.

[ ] Removing API(s) in stable version
[ ] Removing properties in stable version
[ ] Removing API version(s) in stable version
[ ] Updating API in stable or public preview version with Breaking Change Validation errors
[ ] Updating API(s) in public preview over 1 year (refer to Retirement of Previews)

Action: to initiate an evaluation of the breaking change, create a new intake using the template for breaking changes. Addition details on the process and office hours are on the Breaking change Wiki.
Please follow the link to find more details on PR review process.

This PR has already been reviewed by ARM team in #13355.

Closing this PR, as these changes are no longer needed to be merged,


Use isinstance(_obj, _type) instead of type(_obj) == _type

type(_obj) == _type can only recognize the exact type, while isinstance(_obj, _type) is able to pick up all the subclasses as well
For example, with type(_obj)==dict the formatter cannot recognize collections.OrderedDict object. it will be treated as a simple node and formatted in a inline style, no matter how long and how complex it is. I also noticed serious performance issue when formatting a large list of long ordereddict (~13 seconds with type and 0.5 second with isinstance).

Oh I just merged some other fixes into this branch by mistake. I'll edit the post to add explanation for them


Windows or Linux ?

I find that rpy2 3.xx is not support to windows, I want to know if this project must be running on linux? Or other method that makes it run on windows?

I find that rpy2 3.xx is not support to windows, I want to know if this project must be running on linux? Or other method that makes it run on windows?

You can use colab, this is my example : https://drive.google.com/drive/folders/1fkZZgXp-lQpWVbQi3HsHuoR3GeSLaGjp

I find that rpy2 3.xx is not support to windows, I want to know if this project must be running on linux? Or other method that makes it run on windows?

You can use colab, this is my example : https://drive.google.com/drive/folders/1fkZZgXp-lQpWVbQi3HsHuoR3GeSLaGjp

thx, I'll try it.


Application - List (aka Dashboard)

User Story
As an Applicant
I want to view my applications on one page,
So I know what applications I have created
Research & Design
https://www.figma.com/file/nhOquOVmWD1P3BxEY0KIh5/CCBC-Intake?node-id=804%3A5187
Acceptance Criteria
Given that an applicant successfully logs in
when they are a new user
then they will see a dashboard with an empty table
and they will see a button for creating a project
Given that an applicant is on the dashboard page
when they click on create project
then they will be directed to the first page of the application form (Organization profile)
Given that an applicant is on the dashboard page and they have a project in the table
when they click on edit
then they are directed to the first page of the respective application
Given that an applicant is on the dashboard page and they have a project in the table
when they click on the kebab (•••) in the other column
then a field will appear with the link to withdraw the application
Given that an applicant is on the dashboard page and they have a project in the table
when they click on withdraw
then an alert will appear that says, "Are you sure that you would like to withdraw this application?" with Yes and No buttons.

@elliottSlee , I rewrote the acceptance criteria below. What do you think?

[ ] Scenario: Visualize my applications
Given I am a logged applicant
And I didn't create an application
When I open the dashboard page
Then I see an empty list of applications

[ ] Scenario: Visualize my applications
Given I am a logged applicant
And I have created at least one application
When I open the dashboard page
Then I see a list of my applications

[ ] Scenario: Action - Redirect to the application
Given I can see the list of my applications
When I try to edit an application
Then I am redirected to the first page of the respective application

[ ] Scenario: Visualize New Application button
Given I am a logged applicant
When I open the dashboard page
Then I see the New Application button

[ ] Scenario: Action - Redirect to the new application form
Given I am visualizing the New Application button
When I click on it
Then I am redirected to the first page of the application form

@Skip @Not_included
Scenario: Action - Withdraw an application
Given I can see the list of my applications
When I try to withdraw an application
Then a confirm message "Are you sure that you would like to withdraw this application?" with "Yes" and "No" buttons
When I select "Yes"
Then the status of the application is changed to "Withdraw"

@eazeredo Looks good. I think there may be a typo in there where you tagged someone @ Skip. You may want to remove that.

@eazeredo I edited the first scenario, when the applicant logs in instead of seeing an empty application list, they should see the text "Start a new application, applications can be edited until the intake closes on MM/DD/YYYY"
--- Design reasoning ---
The reason why we took out the empty application list is that we want to avoid information that distracts the applicant from the key action on the page which is to start a new application. By letting them know that applicants can be still edited, it sets the expectation that they don't need to complete applications in one go.

The status is listed but not correct, all applications show as draft despite some of them being complete or submitted

#92 is the card where we change the status. When 92 is ready, we will see applications with status = "Submitted".

@elliottSlee @zoeyli-46  were we thinking that the list of applications would be ordered with newest application at top or bottom?  and does the edit date play into the ordering at all?

Great question. We don't have any insight from research for the applicant view and we're currently exploring that question for analysts.
Personally, I feel CCBC ID would be a good default order (same as date created). Do you think we'll have the opportunity to include sorting & filtering during release 1?

@elliottSlee I don't think we will have time to include filtering, but this ticket included sorting by last edited.  Only submitted applications will have a CCBC ID so I'm not sure if that would work.  since we are not providing a 'created on' date and 'last edited' date on the dashboard, I kinda feel that most recently created should be on top, this will give them a list that is a bit more static in it's ordering and not shift around everytime they edit one.   Making it more predictable for them where to find which application in the list.  We could test this out in our user research.

that's a good point too! :)

@AntBush can we please have the list of applications on the dashboard sorted by newest creatd at top?


libbitcoin-client: 3.4.0 -> 3.5.0

Semi-automatic update generated by https://github.com/ryantm/nix-update tools. These checks were done:

built on NixOS
Warning: no binary found that responded to help or version flags. (This warning appears even if the package isn't expected to have binaries.)
found 3.5.0 with grep in /nix/store/gmwvkr4gj2n0ak2ppxwmhakqsr8ihxhc-libbitcoin-client-3.5.0
directory tree listing: https://gist.github.com/afab2c737b7764c7fb6ea2f0bc8b9ee8

cc @chris-martin for review

Success on x86_64-linux (full log)
Attempted: libbitcoin-client
Partial log (click to expand)
 /nix/store/qrxs7sabhqcr3j9ai0j0cp58zfnny0jz-coreutils-8.29/bin/install -c -m 644 libbitcoin-client.pc '/nix/store/gmwvkr4gj2n0ak2ppxwmhakqsr8ihxhc-libbitcoin-client-3.5.0/lib/pkgconfig'
make[1]: Leaving directory '/tmp/nix-build-libbitcoin-client-3.5.0.drv-0/source'
post-installation fixup
shrinking RPATHs of ELF executables and libraries in /nix/store/gmwvkr4gj2n0ak2ppxwmhakqsr8ihxhc-libbitcoin-client-3.5.0
shrinking /nix/store/gmwvkr4gj2n0ak2ppxwmhakqsr8ihxhc-libbitcoin-client-3.5.0/lib/libbitcoin-client.so.0.0.0
strip is /nix/store/fzcs0fn6bb04m82frhlb78nc03ny3w55-binutils-2.28.1/bin/strip
stripping (with command strip and flags -S) in /nix/store/gmwvkr4gj2n0ak2ppxwmhakqsr8ihxhc-libbitcoin-client-3.5.0/lib
patching script interpreter paths in /nix/store/gmwvkr4gj2n0ak2ppxwmhakqsr8ihxhc-libbitcoin-client-3.5.0
checking for references to /tmp/nix-build-libbitcoin-client-3.5.0.drv-0 in /nix/store/gmwvkr4gj2n0ak2ppxwmhakqsr8ihxhc-libbitcoin-client-3.5.0...
/nix/store/gmwvkr4gj2n0ak2ppxwmhakqsr8ihxhc-libbitcoin-client-3.5.0

Success on x86_64-darwin (full log)
Attempted: libbitcoin-client
Partial log (click to expand)
 /nix/store/s28xb9v7xf6axvf4a3av2mnczws2hsdg-coreutils-8.29/bin/mkdir -p '/nix/store/0x0x6y1ynwbzmnhpv00llr6w87bxcpmy-libbitcoin-client-3.5.0/include/bitcoin/client'
 /nix/store/s28xb9v7xf6axvf4a3av2mnczws2hsdg-coreutils-8.29/bin/install -c -m 644 include/bitcoin/client/dealer.hpp include/bitcoin/client/define.hpp include/bitcoin/client/obelisk_client.hpp include/bitcoin/client/proxy.hpp include/bitcoin/client/socket_stream.hpp include/bitcoin/client/stream.hpp include/bitcoin/client/version.hpp '/nix/store/0x0x6y1ynwbzmnhpv00llr6w87bxcpmy-libbitcoin-client-3.5.0/include/bitcoin/client'
 /nix/store/s28xb9v7xf6axvf4a3av2mnczws2hsdg-coreutils-8.29/bin/mkdir -p '/nix/store/0x0x6y1ynwbzmnhpv00llr6w87bxcpmy-libbitcoin-client-3.5.0/lib/pkgconfig'
 /nix/store/s28xb9v7xf6axvf4a3av2mnczws2hsdg-coreutils-8.29/bin/install -c -m 644 libbitcoin-client.pc '/nix/store/0x0x6y1ynwbzmnhpv00llr6w87bxcpmy-libbitcoin-client-3.5.0/lib/pkgconfig'
make[1]: Leaving directory '/private/tmp/nix-build-libbitcoin-client-3.5.0.drv-0/source'
post-installation fixup
strip is /nix/store/vb6mgjqgd9h11nbv60fvrp1ls9nxck2y-cctools-binutils-darwin/bin/strip
stripping (with command strip and flags -S) in /nix/store/0x0x6y1ynwbzmnhpv00llr6w87bxcpmy-libbitcoin-client-3.5.0/lib
patching script interpreter paths in /nix/store/0x0x6y1ynwbzmnhpv00llr6w87bxcpmy-libbitcoin-client-3.5.0
/nix/store/0x0x6y1ynwbzmnhpv00llr6w87bxcpmy-libbitcoin-client-3.5.0

Success on aarch64-linux (full log)
Attempted: libbitcoin-client
Partial log (click to expand)
 /nix/store/c8bwnx988ckbw2igggv41s1mbd0v743m-coreutils-8.29/bin/install -c -m 644 libbitcoin-client.pc '/nix/store/sic06ybp5s1km3xakhgy8dlginzvgrdc-libbitcoin-client-3.5.0/lib/pkgconfig'
make[1]: Leaving directory '/build/source'
post-installation fixup
shrinking RPATHs of ELF executables and libraries in /nix/store/sic06ybp5s1km3xakhgy8dlginzvgrdc-libbitcoin-client-3.5.0
shrinking /nix/store/sic06ybp5s1km3xakhgy8dlginzvgrdc-libbitcoin-client-3.5.0/lib/libbitcoin-client.so.0.0.0
strip is /nix/store/3zq400fri5dv7d30lpxlqm2v9y1iis6j-binutils-2.28.1/bin/strip
stripping (with command strip and flags -S) in /nix/store/sic06ybp5s1km3xakhgy8dlginzvgrdc-libbitcoin-client-3.5.0/lib
patching script interpreter paths in /nix/store/sic06ybp5s1km3xakhgy8dlginzvgrdc-libbitcoin-client-3.5.0
checking for references to /build in /nix/store/sic06ybp5s1km3xakhgy8dlginzvgrdc-libbitcoin-client-3.5.0...
/nix/store/sic06ybp5s1km3xakhgy8dlginzvgrdc-libbitcoin-client-3.5.0


Add a method to disable link modes

With the version 2 the option to upload a file and automatically set the link was added, but there is no option to disable this feature.
This PR adds a method disableLinkModes() that hides the buttons url and file upload in the LinkButton component.

Hi @andrerei - could you please enable "edits by maintainers"?
There are some things that need to be done before merging this commit.
Thanks!

Hey there, I am already working with "imageSettings" and "fileSettings" methods to be a bit more flexible, so instead of your "disableLinkMode" method I now added a "linkSettings" method, where you can pass a boolean "withFileUpload" parameter. I also like the default to be that the File Upload is visible not hidden.
That is mainly what my changes to you PR are about. I will have to work over the Readme to add Explanations for this and also for a lot of other things, then I will tag a new version to include this change.
Thanks again for your PR.

Awesome, I agree, it makes more sense like you did.
Thanks

This is now implemented in v2.1.0


Add drag and drop to move items in FileTreeView

Todo:

Handle move errors.

Add support for moving to root directory.

Add tests

I have not added the ability to move the items to the root directory. I have problems in mixing native DOM events and react events since the projectTreeContainer is not a react element. I have filed a issue at react here regarding the correct way of handling it. So I need help with it. And I do not know if my way of adding styles is correct. So need feedback on it.
@swmitra @nethip @saurabh95 Please review and provide feedback

Really good stuff @boopeshmahendran!
Some preliminary things:

I think this falls under "Handle move errors", but trying to drop folder on itself brings up this:

I think it would make sense just to ignore that without showing any user errors.

When dragging and dropping files, it would make sense to uncollapse folders that are closed while dragging so that you can access deeply nested subfolders by just dragging. As in drag a file over a closed folder -> the folder uncollapses.

Not sure if you should be able to drop folders in top of the files too to move them. It's how Right click -> new folder works so it might make sense

@petetnt Thanks for reviewing. I'll address these comments.

@petetnt I have addressed your comments. Please review.


Fix needless_u_specifier inside of strings by adding util.in_string

Fixes #10.

Coverage increased (+0.08%) to 96.667% when pulling 3febf353754382eed17ee78ba6904ddf2084b1c3 on evhub:fix_u_at_end_of_string into e6cfa29e78131d757df931aec9c23ef662e3e487 on Yelp:master.

Coverage increased (+0.09%) to 96.674% when pulling 2be9cf96cd7768416411483a443c7f8263ad10d5 on evhub:fix_u_at_end_of_string into e6cfa29e78131d757df931aec9c23ef662e3e487 on Yelp:master.

Coverage increased (+0.09%) to 96.674% when pulling 5aafcd3b671ce3a7d38a8c26a345cb02fce81912 on evhub:fix_u_at_end_of_string into e6cfa29e78131d757df931aec9c23ef662e3e487 on Yelp:master.

Coverage increased (+0.09%) to 96.674% when pulling 661f7d1e7071d48d3e04f0a9eb0d13e99d146735 on evhub:fix_u_at_end_of_string into e6cfa29e78131d757df931aec9c23ef662e3e487 on Yelp:master.

Coverage increased (+0.1%) to 96.699% when pulling a4cf48e0a27fdaae960ae31d94d8d0faf96127c6 on evhub:fix_u_at_end_of_string into e6cfa29e78131d757df931aec9c23ef662e3e487 on Yelp:master.

ship it!


simplify flare requests for system-probe

What does this PR do?
Changes any flare requests to system-probe to use the simpler client.
Motivation
Split PR from https://github.com/DataDog/datadog-agent/pull/30936
Describe how to test/QA your changes
Tested manually and on staging.
Possible Drawbacks / Trade-offs
Additional Notes
Stacked PR on top of #31254

/merge


URL helper plugins can't manage "+" character

When using : $this->url('myRoute', array(), array('query' => array('q' => 'test+'))))
Result is "http://mydomain/path/?q=test+" instead of "http://mydomain/path/?q=test%2B"

Is this still an issue?

This issue has been closed as part of the bug migration program as outlined here - http://framework.zend.com/blog/2016-04-11-issue-closures.html


[pulsar-broker] Fix: Topic loading fails without any error when replicator init fails

Motivation
Right now, topic creation tries to create replicator and if that fails due to any reason (one of the reasons blank TLS URL cluster URL) then broker doesn't catch exception, doesn't log error and topic loading gets stuck.
Modification
Handle replicator creation failure so, broker can load the topic again and broker can log the message.

already cherry-picked by #10674


HIVE-24522: Support the Kudu DATE and VARCHAR column type

This patch updates the Kudu version to the latest and adds
support for the new DATE and VARCHAR column types.

@granthenke , there seem to be some relevant test failures. Could you address those? Thanks

@jcamachor I took a brief look this morning and couldn't find enough logs to get to the bottom of the issues. I can't reproduce locally, I suspect the issue is something related to using the kudu MiniCluster on the CI infra.


[Bug]: Minor Typo in Installation Guide

LumexUI Version
Minor Typo in Installation Guide
Description
Instillation guide has
builder.Services.AddLumexService();
it means to have
builder.Services.AddLumexServices();
Steps to reproduce
Folllowing guide at present will get an error message
'IServiceCollection' does not contain a definition for 'AddLumexService' and no accessible extension method 'AddLumexService' accepting a first argument of type 'IServiceCollection' could be found (are you missing a using directive or an assembly reference?)
Expected behavior
with AddLumexServices project works as expected
Notes
Simple typo i will submit a PR in a sec

create https://github.com/LumexUI/lumexui/pull/147


Allow tasks to continue running in Mesos even after swarm manager crashes

By default, when a framework fails, Mesos will terminate any tasks started by a framework This parameter allows the tasks to continue running for this number of seconds after the swarm manager dies. (default 0)
If Swarm manages to reconnect with the same mesos task ID it had before then tasks will be reassigned to it.
Signed-off-by: Guillermo Rodriguez<EMAIL_ADDRESS>

The base support for this parameter is already in the mesos scheduler classes.
Tested in a cluster with 40 nodes with tasks running for several hours. All run as expected. Killed the master a few times. My tasks are now set to run for 3 days after the master dies.

Hi @Spritekin, thanks for adding this, can you please update https://github.com/docker/swarm/blob/master/cli/help.go as well?

Added a commit I was still testing, the ability to specify a mesos framework id. Together with the failovertimeout flag allows swarm to crash and the jobs will continue running. When the service starts again using the same ID mesos will reassign the jobs to swarm. No losses incurred.
If not specified mesos will assign an ID as usual.
What I still find unstable is running in an HA replication mode. The services start but the redundant service crash... maybe is the way I'm doing the health checks from marathon. Anyway that's another story.

Just a mention, I have left it running on my test environment. 15k jobs run, 0 jobs failed, 0 jobs killed. Way better than before.

Please sign your commits following these rules:
https://github.com/docker/docker/blob/master/CONTRIBUTING.md#sign-your-work
The easiest way to do this is to amend the last commit:
$ git clone -b "master" git@github.com:Spritekin/swarm.git somewhere
$ cd somewhere
$ git rebase -i HEAD~5
editor opens
change each 'pick' to 'edit'
save the file and quit
$ git commit --amend -s --no-edit
$ git rebase --continue # and repeat the amend for each commit
$ git push -f

Ammending updates the existing PR. You DO NOT need to open a new one.

@Spritekin so did you test  this approach of bringing up a new manager with the same framework ID when the master failed is working ?   How did you detect the Manager failure  in order to trigger the new one ?

@ezrasilvera
I registered a service health check in marathon. The health check runs a curl command (hence the inclusion of curl in the image) from within the container against the swarm service running a hello-world. If the command fails for 3 times the service restarts. Note this failure is relatively common.
So marathon fails the service and restarts it. Without this flags when the swarm crashes (or is shutdown), mesos immediately kills any framework related job. When it restarts mesos assigns another random framework id.
If we add the failovertimeout then mesos won't kill the jobs but leave them running waiting for the framework to reconnect. By using the framework id as an env param, marathon restarts with exactly the same id so mesos picks that id and reattaches the jobs to that framework.
Here is my marathon service if interested:
{
  "id": "swarm",
  "cpus": 1,
  "mem": 512,
  "ports": [2376,3375],
  "requirePorts": true,
  "instances": 1,
  "acceptedResourceRoles": [ "*" ],
  "container": {
    "type": "DOCKER",
    "docker": {
      "image": "docker-registry.aws.cmcrc.com:5000/cmcrc/swarm:1.2.0-rc1-2.1",
      "network": "HOST"
    }
  },
  "env": {
      "SWARM_MESOS_FRAMEWORKID": "b2853a78-7cba-455a-99c7-d73bb5cbda95-0024",
      "ZK_HOST": "mesos-zk.aws.cmcrc.com",
      "ZK_PORT": "2181",
      "SWARM_MESOS_USER": "root",
      "SWARM_MESOS_TASK_TIMEOUT": "180s",
      "SWARM_MESOS_OFFER_TIMEOUT": "15s"
  },
  "healthChecks": [
        {
            "protocol": "HTTP",
            "path": "/info",
            "gracePeriodSeconds": 10,
            "intervalSeconds": 30,
            "portIndex": 0,
            "timeoutSeconds": 10,
            "maxConsecutiveFailures": 3
        },
        {
            "protocol": "COMMAND",
            "command": {"value": "curl -i -H \"\\\"\"Accept: application/json\"\\\"\" -H \"\\\"\"Content-Type: application/json\"\\\"\" -X POST -d '{\"\\\"\"Image\"\\\"\": \"\\\"\"docker-registry.aws.cmcrc.com:5000/cmcrc/hello-world\"\\\"\", \"\\\"\"HostConfig\"\\\"\": {\"\\\"\"CpuShares\"\\\"\": 10}}' http://$HOST:2376/containers/create?name=SwarmHealthCheck"},
            "gracePeriodSeconds": 60,
            "intervalSeconds": 60,
            "timeoutSeconds": 30,
            "maxConsecutiveFailures": 2
        }
    ]
}

Luck!

LGTM

@jimenez @Spritekin What is the status of this patch?  We need this change as well.

@ezrasilvera , @jimenez
Hi,
I thought nobody wanted this :)
I think there have been too many changes in the code since I did this. Should I stop this PR and redo it again to avoid any problems?
I have been running this for a couple months in production and I can positively say that they are a must.
Will redo and resubmit.

I have created a new PR just for adding curl to the main image. Is a very small change and helps a lot with health checks for marathon when using mesos.
https://github.com/docker/swarm/pull/2344
This is done in order to separate the main change (resilience in mesos to swarm termination) from the change to the dockerfile so they can be merged independently.

Created a second PR just to handle the mesos parameters.
https://github.com/docker/swarm/pull/2345
This PR can be closed.


⚠ Fortnite has degraded performance

In d88755b, Fortnite (https://fortnite.com) experienced degraded performance:

HTTP code: 200
Response time: 1552 ms

Resolved: Fortnite performance has improved in 8e7bd04.


Rigbits: eye and lips rigger: Json file should store a key:value dictionary and not a plain list

From @miquelcampos on May 18, 2018 8:55
This will make the file more human readable
Copied from original issue: mgear-dev/mgear#209

was done in the new facial rigger


Add japanese address

I didn't find Japanese address FFaker in the list, so I implemented FFaker::AddressJA and its test.
This FFaker generates postal codes, streets, cities, etc specific to the Japanese address format.
Note that there are three main address formats in Japan: one for special destricts in Tokyo, one for large rural cities, and one for the rest.

The CI tests are still failing, but this is due to test_name_ar.rb and not Address::JA files.

Thanks!


feat: add react-native-edge-to-edge

Summary
added react-native-edge-to-edge to uniform look on both platforms:

ios
android

Test plan
n/a

@okwasniewski I've tried setting translucent to false but it doesn't seem to work, is this a known issue?

will change the transulenct bar on iOS in a seperate PR 👍


EmptyView: Possible to provide even an error image?

It would be great to have the option to set an error image.

Do you mean an error view with customizable layout ?

I just added an error custom view. The referenced issue above is not the correct one. Check 4c7da621f36f1233e26dd05493a2aeee7d19c8d5

Like here https://github.com/xiprox/ErrorView

I understand and agree.


25 - Reblogging post

Closes #25
Reblogging/resteeming posts

Don't look at yet. Need to add list of posts to see what to reblog

@roboza 13_ folder name I chose for stream blockchain operations #79

@relativityboy Updated is requested


feat: Adding ability to specify imagePullSecrets for pipelines

This PR solves #183. I didn't add any tests or examples using it or docs. What do you think we should add for it? I tested it locally to confirm it's working.

I think we want this, but my question is - would you want the same secret for all pipelines? Or do you need it for each pipeline? If it the they former, we could have an env var to define it.

Hmm that's a good question. I tried to mimic what Argo-Workflows is doing, and as far as I can see, out there it is done on a per workflow basis. So I thought the same might be applicable here.
Having said that, in my particular use-case, I would just need one imagePullSecret that I could use globally in Argo-Dataflow. So in my case it would make sense to have an environment variable that allows doing it. But to be honest, I'm not sure if I would go that way, or if I would just provide imagePullSecrets on my pipelines directly... I think doing the latter is more explicit, telling everyone who would like to use such a pipeline, that it requires a special secret.
To sum up, I'm happy to provide an environment variable for it, as it might be helpful to have it as a global setting, but I would still prefer to use it on Pipeline/Step objects.

Let’s go with a default value for MVP. We can always add one later.

I'm not sure what you mean by that...

How's this for ability to specify ImagePullSecrets as:

Environment variable,
Property on a Pipeline Spec,
Property on a Step Spec,

At the moment each of those settings defines an absolute value of imgePullSecrets. So if imagePullSecrets is defined on a Step Spec, it will override any value set in Pipeline Spec or env var. I'm wondering if it should extend previous values, rather than override them?
So if env var is set to secret1,secret2, PipelineSpec.ImagePullSecrets is set to [{Name: "secret3"}] and StepSpec.ImagePullSecrets is set to [{Name: "secret4"}], the final pod spec will use just [{Name: "secret4"}]. I'm wondering, if instead it should merge all of those values and use [{Name: "secret1"}, {Name: "secret2"}, {Name: "secret3"}, {Name: "secret4"}]?

I guess my question is - do you think people will use the ability to specify it at pipeline or step level?

Hmm, I'm not sure... You have more experience with it through other Argo projects, so if you think there's no need for it, I can remove it.
But my thinking was, that if someone is running Argo-Dataflow as a cluster-wide service, and sysadmins are responsible for maintaining it, while developers are actual users, then developers don't need sysadmins to specify ImagePullSecrets. I just like that freedom...

That seems reasonable. How about then just specifying it on the pipeline, not the step?

Sure, I'll make a change. How about overriding values vs merging them? What do you think should happen if both ARGO_DATAFLOW_IMAGE_PULL_SECRETS env var & PipelineSpec.imagePullSecrets are specified? Should the second one override the first one, or merge with it?

Hmm, actually... I think I would still need to pass that value from PipelineSpec to StepSpec somehow... I'm looking at the Reconcile function in step_controller.go and I don't see any reference to PipelineSpec there. So to pass the value from PipelineSpec to PodSpec, I think I would need to pass it via the StepSpec anyway, right?
Or am I missing something here?

Good point.Pipelines don't know about pods. In that case, only the step should have the field.

Ok, ImagePullSecrets can now be specified as:

Environment variable ARGO_DATAFLOW_IMAGE_PULL_SECRETS on the dataflow-controller,
as imagePullSecrets in StepSpec,

If it is defined in StepSpec, it will override anything set by the env var.

LGTM!


hledger-* 1.4

megaparsec-6.2.0 (Mark Karpov<EMAIL_ADDRESS>@mrkkrp) is out of bounds for:

[ ] hledger-1.4 (>=5.0 && < 6.2). Simon Michael<EMAIL_ADDRESS>@simonmichael. @simonmichael. Used by: library
[ ] hledger-lib-1.4 (>=5.0 && < 6.2). Simon Michael<EMAIL_ADDRESS>@simonmichael. @simonmichael. Used by: library, test-suite
[ ] hledger-ui-1.4 (>=5.0 && < 6.2). Simon Michael<EMAIL_ADDRESS>@simonmichael. @simonmichael. Used by: executable
[ ] hledger-web-1.4 (>=5.0 && < 6.2). Simon Michael<EMAIL_ADDRESS>@simonmichael. @simonmichael. Used by: library, executable, test-suite

I have published new revisions on hackage, and this time will also commit the new bounds, sorry about that.


Complete rebuild of adapter code and new features added and New React UI

Hi Pix,
I have rebuilt the complete adapter code to TypeScript and worked out some issues. I have also rebuilt the admin UI completely in React.
Since the migration from the old config was unfortunately not possible, the old config is no longer compatible, when updating you should delete the adapter before and reinstall it, otherwise problems will occur.
Also, now the js-controller >=3.0.0 and admin >=5.3.3 is a requirement.

Hello Issi, many thanks for contributing or even rebuilding this adapter in accordance to the new regulatiosn for adapters under the latest versions of admin and js-controller. I really appreciate your work.

I use the adapter myself and saw that there were still some issues with feature request open and thought I'll rebuild the same to the latest state and install the things.
Have you ever thought about adding the adapter to the ioBroker community, then you can react faster to the problems?

I think given the little time I can put into development that would be best. How do we proceed?

here is a guide how to do it https://github.com/iobroker-community-adapters/info#how-to-become-a-member

@Pix--- the conflicts should be fixed now

@Apollon77 I've fixed all the conflicts you can look at the revised adapter and if everything fits merge and maybe add Sentry


Overworld generating as normal Overworld despite Following instructions

Minecraft version
1.20.1
LibX version
1.20.1-5.0.12
Skyblock Builder version
1.20.1-5.1.7
Forge version
47.2.32
The latest.log file
https://gist.github.com/bangplaysgames/4b8fc4f72436bbb5ce6cf6ddd60bf291
Issue description
When trying to create a skyblock, currently in singleplayer, the world is being generated regardless of what options I choose.
Things I've tried:
Create world manually selecting:  World Type:  Skyblock
Create world manually selecting:  World Type:  Default
Use "DefaultWorldType" Mod while specifying "skyblockbuilder:skyblock" in the config, restarting client, and then:
Create world manually selecting:  World Type:  Skyblock
Create world manually selecting:  World Type:  Default
All of these result in just a normal overworld being generated.  When I select customize in the Skyblock button,  I can see the default skyblock island as the only option to select.
Steps to reproduce
No response
Other information
No response

Could you zip your SkyblockBuilder config and send it to me? Maybe I find the issue or can at least reproduce the issue.

skyblockbuilder.zip
Sorry it took a bit,  life's busy for me.  Here's my config.

It's weird. I now tried with your config. I couldn't reproduce the problem. When looking at your log, it never even mentions the try to generate a skyblock world. Could you send me your level.dat file of the world? Maybe it's some other mod changing something. Maybe I find that out looking at level.dat.
Alternatively, you could make binary search which mod causes it (if it works for you with Skyblock Builder only).

level.zip
I figured it was probably another mod causing issues, but I'm not seeing anything indicating what it would be.  I will say,  I also tried spinning the pack up as a server, and putting level-type=skyblockbuilder:skyblock in the server.properties, and it generated normal overworld still.

Okay... Could you export your pack (just the mods)? I'll check the mods. I'm way too lazy to create that pack by hand :D

Magitech Factory.zip

The problem is Terralith. It overrides the overworld in datapack, the same as Skyblock Builder does. You need to choose: Skyblock Builder or Terralith.


Core endpoints

Description
Please explain the changes you made here.
Checklist

[ ] Created tests which fail without the change (if possible)
[ ] All tests passing
[ ] Extended the documentation, if necessary

Please explain objectives of this PR.


Dark theme: too low contrast for scrollbar

When using dark theme on not so bright display with large collection the scrollbar is easy to get lost because it blends with the background. Can you change it for some more distinct color? (take hint from Play Midnight for Google Play Music™ dark theme)

Personally, I am proud of that issue close time 😆

(I actually had this in a stash somewhere, just needed to go find it 👍 )

Thank you! This was really annoying me.


Error updating RGB10

It's giving an error while updating. I click on update and an error message appears, it says that you are not connected to the internet. But I have internet working. RGB10

Are you able to scrape your games or download cores through retroarch?

I have the same issue trying to update a Gameforce Chi and RG351MP

I've updated all three devices on my end without issue.  Has this (https://github.com/christianhaitian/arkos/issues/448) been already completed to get to the December 2021 update?

I think I see the issue.  The main CDN provider is having intermittent connectivity issues, just keep trying to update and it should eventually switch to one of the backup update locations.

I have v2.0 (23/12/2021) Updated perfectly here!
Now in v2.0 (21/01/2022) it is giving error. It says it is not connected to the internet.
Now by RetroArch I can update normally and run the games. But, the RetroArch update is a little slow compared to the last times I updated. And there was a moment that the update froze, I had to cancel and come back again.

Yea see my previous response to the issue.  Just keep trying.

It worked!

Yep. :)  Just the internet being funny today.


How to use KV-cache with PyTorch

The JAX api for TransformerLayer includes an inference mode optimized for faster autoregressive decoding use a key value cache:
decode (bool,default = False) – Indicate whether to prepare and use an autoregressive cache in Multi-head attention (MHA).

Is there no such option for PyTorch inference?

There is a method to do this using the inference_params argument in the forward pass. You can look at Megatron-LM's example at how to generate that argument here.


Incomplete documentation

Hello,
Thanks for this awesome package. However, how do we initiate a subscription plan?

@Hubertformin  Please, can you elaborate on what you're trying to do?

If this is about making subscription payments, see my reply #99.


not support for flutter 3.24.3

Resolving dependencies...
Note: intl is pinned to version 0.19.0 by flutter_localizations from the flutter SDK.
See https://dart.dev/go/sdk-version-pinning for details.
Because bruno 3.4.3 depends on intl ^0.18.0 and every version of flutter_localizations from sdk depends on intl 0.19.0, bruno 3.4.3 is incompatible with flutter_localizations from sdk.
So, because kdcfpassenger depends on both flutter_localizations from sdk and bruno 3.4.3, version solving failed.

+1，这已经超过一年都没发版了，没人管了么

希望能够升级🙏🙏🙏


Use HDF5 collective metadata operations if available.

In HDF5-1.10 and later, the group implemented collective metadata operations. The rationale and discussion is at https://support.hdfgroup.org/HDF5/docNewFeatures/NewFeaturesCollectiveMetadataIoDocs.html
Another discussion showing some CGNS timings is at https://hdfgroup.org/wp/2015/08/parallel-and-large-scale-simulation-enhancements-to-cgns/
We have also noticed the slow file open and close times with exodus when running on processor counts exceeding 1024. As an example, with a run on 32,768 processors, the time to open the files was 827.7 seconds.  With the changes in this pull request implemented, the time dropped to 15 seconds.  The time seems to increase as num_proc^2 at large num_proc without these changes.
The changes to CMakeLists.txt include the changes from hdf5 to ${HDF5_C_LIBRARY} which were rejected in a previous pull request.  I am fine with those not being included, but without them the building of a parallel netcdf doesn't work for a user-specified hdf5 library (unless I am doing somehting wrong).
I have tested the cmake changes quite a bit and they seem to work correctly.  I have only tested the configure changes in one build, so hopefully they are correct.

Awesome! We have also been seeing slow performance, so I hope this helps!

We are still seeing some slowdowns when exiting define mode that we are trying to track down. I had hoped the collective metadata would solve those, but no luck yet.

Thanks for the pull request! Working my way through now.  Had to merge these into a branch so that I could resolve a conflict introduced in a recent bug fix, but assuming that the tests pass (as I assume they will) this will be merged shortly. The working branch in netcdf-c is ghpull-335.

it has been merged, but looks like I need to manually close the pull request.  I'll do that now.  Maybe because there was a conflict I had to manually resolve? Thanks again in any case, the pull request has been merged!

Greg Thanks for this fix!
Ward what is the next release, which will include this performance improvement?

4.4.2 is the next release, hopefully soon. Now that I've shaved the yak for
this pull request, I'm going to have to focus on #319; it has languished
for too long.  Once that's in, we should be within striking distance of the
4.4.2 release as well as updated fortran and C++ releases.
On Tue, Jan 31, 2017 at 1:24 PM, Imperial Fleet Commander Tarth <
<EMAIL_ADDRESS>wrote:

Greg Thanks for this fix!
Ward what is the next release, which will include this performance
improvement?
—
You are receiving this because you modified the open/close state.
Reply to this email directly, view it on GitHub
https://github.com/Unidata/netcdf-c/pull/335#issuecomment-276481182, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AEH-UhtyPeUmORmeDlzyiHWY-LJgkjOxks5rX5iJgaJpZM4LB3_e
.

Thanks.
On Tue, Jan 31, 2017 at 3:22 PM Ward Fisher<EMAIL_ADDRESS>wrote:

it has been merged, but looks like I need to manually close the pull
request. I'll do that now. Maybe because there was a conflict I had to
manually resolve? Thanks again in any case, the pull request has been
merged!
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/Unidata/netcdf-c/pull/335#issuecomment-276480470, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AA2xDiWemZ27Iu8iKpv__SfK88t3JVnZks5rX5fsgaJpZM4LB3_e
.


Added default_listen_port to the default-site.erb

I added the ability to change the default-site listen port.  This will allow non-standard ports to be used, flexibility of use.  This required the  default_site_enabled to be true to be used.

Superseded by #219


Make session public

This enables setting and testing session attributes.

@cfcosta Merged, thank you! :+1:


Adds latest version of 3rd party log reader DSLOG Reader 2.2

https://www.chiefdelphi.com/t/dslog-reader-2-2-driver-station-log-viewer-with-more-features/405040

I appreciate this - but I'm not sure how to feel about a 3rd party tool to do something (arguably much better) than the base version of the DS software.
Is this something that a CSA would commonly use? Or is this something that's more targeted at a longer than typical support time at an event?
Just curious what the use case/flow is.

I was not aware of this log viewer prior to seeing this PR, but I think I would use this when I CSA in the future. I always carry my USB, so if I'm dealing with DSlogs, I'd rather use this than the official one. I use the official one all the time, but it is full of bugs (looks like click-and-type-speedrun is fixed, but scrolling is still broken).