UI: Update VirtualizedPropertyGrid styles to accomodate iTwinUI-react components

As a part of iTwinUI adoption, existing ExpandableBlock, which was used by the property grid, was deprecated and replaced with an equivalent component from iTwinUI-react package. This caused a number of layout issues in property grid as the new component has completely different appearance.
This change restyles the property grid to match its new expandable block component and makes it easier to reason about the property grid node layout by eliminating most of the overlap between elements.

@DanEastBentley, I think there're more styling problems related to switching to itwinui-react components:

I see some colors have been changed (e.g. blue text in expanded category blocks has become dark grey), but maybe that's fine.
Information density has substantially dropped, and that's probably not fine:

Our test app has several Select boxes at the top. Turns out one of them now comes from itwinui-react and others from ui-components. Here's the difference:

Notice how the imodel picker has much more padding compared to others that come from ui-components.

Similar problem in property grid:
Before:

After:

Is this expected? Is there any way to increase information density in these components?

@DanEastBentley, I think there're more styling problems related to switching to itwinui-react components:

I see some colors have been changed (e.g. blue text in expanded category blocks has become dark grey), but maybe that's fine.

Information density has substantially dropped, and that's probably not fine:

Our test app has several Select boxes at the top. Turns out one of them now comes from itwinui-react and others from ui-components. Here's the difference:

Notice how the imodel picker has much more padding compared to others that come from ui-components.
Similar problem in property grid:
Before:

After:

Is this expected? Is there any way to increase information density in these components?

@grigasp I put some styling overrides here for apps using ui-framework: https://github.com/imodeljs/imodeljs/blob/ui-components/property-grid-expandable-block/ui/framework/src/ui-framework/configurableui/configurableui.scss#L80. Perhaps there's a better place for these overrides.

@grigasp I put some styling overrides here for apps using ui-framework: https://github.com/imodeljs/imodeljs/blob/ui-components/property-grid-expandable-block/ui/framework/src/ui-framework/configurableui/configurableui.scss#L80. Perhaps there's a better place for these overrides.

Because ui-components lack these style overrides, property grid will have different appearance depending on whether ui-framework is used. Perhaps they should be moved to a different package?


Invoke gcspypi using service account?

I would like to access own repositories in an automated deployment context or docker setup. For that I need a way to authenticate with the GCS without involving logging in as a user with the browser. Is there a way to authenticate using a service account?

I re-opened this issue after testing and confirming that this package does not work with service accounts. Try the following procedure to confirm:

Create a service account with storage admin rights in IAM
Create a key and download it (let's call it my-secret.json for now.
In your terminal, call gcloud auth application-default revoke and confirm to make sure you are logged out
Try to list your GCS repository using gcspypi --repository "my-rep" -v list. Result: an error message: failed connecting
Activate the above service account: gcloud auth activate-service-account --key-file=my-secret.json
List your GCS repository: gcspypi --repository "my-rep" -v list.
=> Expected: repository lists ok
=> What happens instead: error message: failed connecting

Only after logging in once and then logging out again it would work correctly.


I accidentally a word

Most reviewed PR in history

VSCode Extension Installation Instructions

Download the extension at https://azuresdkreleasepreview.blob.core.windows.net/azd/vscode/pr/2524/azure-dev-0.7.0.vsix
Extract the extension from the compressed file
In vscode
a. Open "Extensions" (Ctrl+Shift+X)
b. Click the ...\ menu at top of Extensions sidebar
c. Click "Install from VSIX"
d. Select location of downloaded file


._glyph does not exists anymore, go for the new _getGlyphAndOffset() …

…callback
this will not be backwards compatible with older fontTools...
@jenskutilek

You should not use those internal attrs/methods at all. It was previously wrong, and this PR doesn't fix it. Do not use internal stuff.
If you need access to a glyph object from the glyf table, you should get it from the glyf table.

And probably you should raise the fonttools dependency in setup to fontTools>=4.37.3

Just do this:
def extractGlyphPrograms(source, destination):
    """
    Extract the TrueType pre-program to the font lib.
    """
    if "glyf" not in source:
        return
    glyph_table = source["glyf"]
    for name in glyph_table.keys():
        glyph = glyph_table[name]
        dest_glyph = destination[name]
        if glyph.isComposite():
            # Extract composite flags
            _extractCompositeFlags(glyph, dest_glyph)
        if not hasattr(glyph, "program"):
            continue

        hash_pen = HashPointPen(dest_glyph.width, destination)
        dest_glyph.drawPoints(hash_pen)
        lib = dest_glyph.lib[TRUETYPE_INSTRUCTIONS_KEY] = {
            "formatVersion": "1",
            "id": hash_pen.hash,
        }
        lib["assembly"] = _byteCodeToTtxAssembly(glyph.program)

font.getGlyphSet() is an abstraction to extract outline data, not a way to get at raw `glyf glyphs.

I was probably under the impression that the glyphset was the preferred way of getting at the glyphs because getGlyphSet() is so high up in the module ...

And probably you should raise the fonttools dependency in setup to fontTools>=4.37.3

With @justvanrossum’s suggestion, the dependency can of course stay as it was.

thanks @justvanrossum

I was probably under the impression that the glyphset was the preferred way of getting at the glyphs because getGlyphSet() is so high up in the module ...

But using attrs starting with underscores should trigger all alarm bells...
font.getGlyphSet() is high up because it implements drawable glyphs for both glyf and CFF  (*), and abstracts away their differences where possible. If you need to access the glyf table, you should access the glyf table, and not try to sneak your way through a higher level abstraction.
*) And since recently (related to the refactoring that triggered this PR) it supports glyf + gvar and CFF2, via the location argument of font.getGlyphSet().


There seems to be a bug in this browse

I installed this extension in Orion browser, clicking on the extension gets stuck here, but I can click on the translation page from the context menu to translate normally, but if the extension's page doesn't appear that means I can't set up automatic translation!
This is the api supported by this browser, which supports running the extension on Mac or ios systems
https://browser.kagi.com/WebExtensions-API-Support.html

Wow, you run a browser extension on iOS, it surprises me, you are really software enthusiast Thanks for report.
At first sight, this browser may not fully support the web extensions API, like MessageSender.frameId, so background script cannot to exchange messages with client script properly.
I will investigate your report and will come back

@xiaoyuhaoge elaborate please what you mean under "the interface gets stuck like in the picture"?
It seems all fine according to the counters. Some texts in queue for translate, most of text been translated.


Branching command does not work correctly

During a release cow broke when it encountered
"graphql": "3.x-dev || 4.x-dev"
Cow said that it needed a caret "^"
Priority wise, it's really not hard to create 30 or so minor branches every 6 months (exactly 29 for CWP 2.7.0-rc1 release), and we need to do this manually for all the 11 non-core recipes any way since they need pull-requests created for their composer.json updates before we could run the cow branching command anyway, so I see fixing this feature as extremely low priority.

Not a problem anymore


Distributed training

I am using the following code to use distributed training with azure [GPU - 2 x NVIDIA Tesla V100]. So during the training process both the available  GPU  is working and the training time is also less compared with single GPU.
My question is whether the data is divided among each GPU ( 16 samples per GPU or 32 samples per GPU since I have given the batch_size as 32). Also when batch_size is 64 it results in resource exhausted error. The model input shape is 256x256
batch_size = 32
dist_data_train = tf.data.Dataset.from_tensor_slices((X_train, y_train)).batch(batch_size)
dist_data_val = tf.data.Dataset.from_tensor_slices((X_test, y_test)).batch(batch_size)
strategy = tf.distribute.MirroredStrategy()
print('Number of devices: {}'.format(strategy.num_replicas_in_sync))
Create a distributed model
with strategy.scope():
model = get_model(img_size, num_classes)
distributed_model = model
distributed_model.compile(optimizer = tf.keras.optimizers.Adam(lr = 0.001), loss = ['sparse_categorical_crossentropy'], metrics=['accuracy'])
checkpoint = ModelCheckpoint(model_name,
monitor="val_loss",
mode="min",
save_best_only = True,
verbose=1)
early = EarlyStopping(monitor="val_loss", mode="min", patience=15)
callbacks=[early, checkpoint]
num_epochs= 200
#modelunet=distributed_model.fit(train_gen, epochs=num_epochs, validation_data=val_gen, callbacks=callbacks)
model=distributed_model.fit(dist_data_train, epochs=num_epochs, validation_data=dist_data_val, callbacks=callbacks)

@DNJ-JINI Could you please share the complete standalone code to reproduce this issue?
Thank you!

####MNist
import tensorflow as tf
from tensorflow import keras
import random
import matplotlib.pyplot as plt
def get_compiled_model():
# Make a simple 2-layer densely-connected neural network.
inputs = keras.Input(shape=(784,))
x = keras.layers.Dense(256, activation="relu")(inputs)
x = keras.layers.Dense(256, activation="relu")(x)
outputs = keras.layers.Dense(10)(x)
model = keras.Model(inputs, outputs)
model.compile(
optimizer=keras.optimizers.Adam(),
loss=keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=[keras.metrics.SparseCategoricalAccuracy()],
)
return model
def get_dataset():
batch_size = 32
num_val_samples = 10000
# Return the MNIST dataset in the form of a [`tf.data.Dataset`](https://www.tensorflow.org/api_docs/python/tf/data/Dataset).
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()

# Preprocess the data (these are Numpy arrays)
x_train = x_train.reshape(-1, 784).astype("float32") / 255
x_test = x_test.reshape(-1, 784).astype("float32") / 255
y_train = y_train.astype("float32")
y_test = y_test.astype("float32")

# Reserve num_val_samples samples for validation
x_val = x_train[-num_val_samples:]
y_val = y_train[-num_val_samples:]
x_train = x_train[:-num_val_samples]
y_train = y_train[:-num_val_samples]
print("111111111111111111111",len(x_train))
return (
    tf.data.Dataset.from_tensor_slices((x_train, y_train)).batch(batch_size),
    tf.data.Dataset.from_tensor_slices((x_val, y_val)).batch(batch_size),
    tf.data.Dataset.from_tensor_slices((x_test, y_test)).batch(batch_size),
)

Create a MirroredStrategy.
strategy = tf.distribute.MirroredStrategy()
print("Number of devices: {}".format(strategy.num_replicas_in_sync))
Open a strategy scope.
with strategy.scope():
# Everything that creates variables should be under the strategy scope.
# In general this is only model construction & compile().
model = get_compiled_model()
Train the model on all available devices.
train_dataset, val_dataset, test_dataset = get_dataset()
model.fit(train_dataset, epochs=20, validation_data=val_dataset)
Test the model on all available devices.
model.evaluate(test_dataset)
Please clarify the following question
Here batch size is 32 so  each GPU will take 16 samples or 32 samples for batch training.
If 32 samples are taken by each GPU in total 64 samples of data can be processed at single epoch utilizing both GPU.

Hi @DNJ-JINI ,
This is the concept of Data Parallelism. That means given batch of data equally sliced into available GPUs. Suppose If you have batch_size=32 and 2 nos of GPUs then each GPU will get 16 data points and if having 4 GPUs then Each GPU will get 8 data points for btach_size=32.
You might have observed that with single GPU suppose batch_size=32 in model.fit(x,y,batch_size = 32) .The batch_size can be increased if we have multiple GPUs using Distribution Training and you can pass model.fit(x,y,batch_size = 32*No of GPUs).
Please refer to the attached Official Video Tutorial for more details of this concept.

Thanks for the detail.
I am trying to apply distributed training on my custom dataset but I am getting this error
ValueError: Layer "model" expects 1 input(s), but it received 2 input tensors. Inputs received: [<tf.Tensor 'cond/Identity:0' shape=(None, 256, 256, 3) dtype=float32>, <tf.Tensor 'cond/Identity_1:0' shape=(None, 256, 256, 1) dtype=int32>]
###thirdtrial#####
from sklearn.model_selection import train_test_split
images = [load_img(path, target_size=img_size, color_mode="rgb") for path in input_img_paths[0:100]]
print("00000000")
masks = [load_img(path, target_size=img_size, color_mode="grayscale") for path in target_img_paths[0:100]]
image_dataset = np.stack(images, axis=0)
image_dataset = image_dataset.astype('float32')
#image_dataset =image_dataset/255.0
#print(".....",np.unique(image_dataset))
print("1111")
mask_dataset = np.stack(masks, axis=0)
mask_dataset = np.expand_dims(mask_dataset, axis=-1)
mask_dataset = mask_dataset.astype('uint8')
mask_dataset = np.where(mask_dataset == 0, 0, np.where(mask_dataset == 128, 1, 2))
print(".....",np.unique(mask_dataset))
print("22222")
X_train, X_test, y_train, y_test = train_test_split(image_dataset, mask_dataset, test_size = 0.20, random_state = 42)
print("333333")
augmentation_train = ImageDataGenerator(
rotation_range=10,
width_shift_range=0.1,
height_shift_range=0.1,
shear_range=0.1,
zoom_range=0.1,
horizontal_flip=True,
vertical_flip=False,
fill_mode='nearest'
)
augmentation_test = ImageDataGenerator(
fill_mode='nearest'
)
X_train_augmented = augmentation_train.flow(X_train, batch_size=32)
y_train_augmented = augmentation_train.flow(y_train, batch_size=32)
X_test_augmented = augmentation_test.flow(X_test, batch_size=32)
y_test_augmented = augmentation_test.flow(y_test, batch_size=32)
train_augmented = zip(X_train_augmented, y_train_augmented)
test_augmented = zip(X_test_augmented, y_test_augmented)
train_ds = tf.data.Dataset.from_generator(
lambda: train_augmented,
output_types=((tf.float32, tf.int32), tf.int32),
output_shapes=(([None, *X_train.shape[1:]], [None, *y_train.shape[1:]]), [None, *y_train.shape[1:]])
)
test_ds = tf.data.Dataset.from_generator(
lambda: test_augmented,
output_types=((tf.float32, tf.int32), tf.int32),
output_shapes=(([None, *X_test.shape[1:]], [None, *y_test.shape[1:]]), [None, *y_test.shape[1:]])
)
strategy = tf.distribute.MirroredStrategy()
train_ds_distributed = strategy.experimental_distribute_dataset(train_ds)
test_ds_distributed = strategy.experimental_distribute_dataset(test_ds)
print(train_ds_distributed,test_ds_distributed)
print(train_ds,test_ds)
num_replicas =2
Calculate the number of batches
train_steps_per_epoch = len(X_train) // batch_size
train_steps_per_epoch = train_steps_per_epoch // num_replicas
with strategy.scope():
#model = get_model(img_size, num_classes) #mobilenet,basicmodel

img_size =256 #xception
num_classes =3 #xception
model = get_model(num_classes,input_shape=(img_size,img_size,3)) #xception
distributed_model = model
distributed_model.compile(optimizer = tf.keras.optimizers.Adam(lr = 0.001), loss = ['sparse_categorical_crossentropy'], metrics=['accuracy'])

checkpoint = ModelCheckpoint(model_name,
monitor="val_loss",
mode="min",
save_best_only = True,
verbose=1)
early = EarlyStopping(monitor="val_loss", mode="min", patience=15)
callbacks=[early, checkpoint]
num_epochs= 200
#modelunet = distributed_model.fit(train_ds_distributed, epochs=num_epochs, steps_per_epoch=train_steps_per_epoch,validation_data=test_ds_distributed, callbacks=callbacks)
modelunet=distributed_model.fit(train_ds, epochs=num_epochs, validation_data=test_ds, callbacks=callbacks)
steps_per_epoch=train_steps_per_epoch
summarize history for accuracy
plt.plot(modelunet.history['accuracy'])
plt.plot(modelunet.history['val_accuracy'])
plt.title('Model accuracy')
plt.ylabel('accuracy')
plt.xlabel('epoch')
plt.legend(['train', 'val'], loc='upper left')
plt.grid(True)
plt.show()
summarize history for loss
plt.plot(modelunet.history['loss'])
plt.plot(modelunet.history['val_loss'])
plt.title('Model loss')
plt.ylabel('loss')
plt.xlabel('epoch')
plt.legend(['train', 'val'], loc='upper left')
plt.grid(True)
plt.show()

Hi @DNJ-JINI ,
Could you please share the code snippet in the form of a gist which can contain the outputs and logs. That helps us debugging the issue. I am not sure at what point the error is getting raised. You can run the code in Google colab with minimal data that is required for replication of the error and share it as a gist.
From the error you mentioned it seems the input arguments not defined properly. It seems your model expecting 1 input but its getting 2 Tensors as input.Model seems not configured properly.Providing more details along with colab gist can help us to look into the issue.
Thank you!

Hi @DNJ-JINI ,
As I don't have access to the dataset I can't reproduce the issue. Its nice if you can provide a dummy data set and also only minimal code required to reproduce the issue.
The error is related to the line distributed_model.fit(train_ds,...). As for my understanding the train_ds  generated was not matching to the input that actually model was expecting at this step get_model(num_classes,input_shape=(img_size,img_size,3)).But in contrast the train_ds is actually generating two separate input Tensors, one of shape=(None, 256, 256, 3) dtype=float32 and other of shape=(None, 256, 256, 1) dtype=int32.
It seems the error is at below code which seems wrongly configured.
train_ds = tf.data.Dataset.from_generator(
    lambda: train_augmented,
    output_types=((tf.float32, tf.int32), tf.int32),
    output_shapes=(([None, *X_train.shape[1:]], [None, *y_train.shape[1:]]), [None, *y_train.shape[1:]])
)

Can you go through this once again and explain this to me.
Also can you confirm whether this runs without any distribution strategy. I am eager to know how this is related to distribution strategy.Can you share the code that works without any distribution strategy.
Thanks!


Run lsp as the injected formatter

Did you check existing requests?

[X] I have searched the existing issues

Describe the feature
I would like to format a toml codeblock in markdown with taplo (a toml lsp).
example markdown file:
bla bla bla

```toml
            badly_formatted="yep"
```

blablabla

Provide background
relevant neovim setup code:
vim.keymap.set({ "n", "v" }, "<leader>f", function()
	conform.format({
		lsp_fallback = true,
		async = false,
		timeout_ms = 1000,
	})
end, { desc = "Format file or range" })

I don't have an entry for toml inside formatters_by_ft:
formatters_by_ft = {
    markdown = { "injected" },
},

I do have an lsp set up that is able to handle formatting:
lspconfig["taplo"].setup({ capabilities = capabilities })

What is the significance of this feature?
nice to have
Additional details
I tried a custom lsp fallback setting like you suggested in https://github.com/stevearc/conform.nvim/issues/129#issuecomment-1757918884, but that obviously didn't work as I used the buffer filetype for that setting, so it picked whatever markdown was set to.
And even if I set markdown to "always", it still didn't apply the taplo lsp formatter as it wasn't currently running.

Oh geez I just found https://github.com/stevearc/conform.nvim/blob/master/lua/conform/formatters/taplo.lua
So I guess I'll force that to run only for the injected formatter when a toml filetype is found.
Solution used right now:
Adding
require("conform").formatters.injected = {
  options = {
    ignore_errors = true,
    lang_to_formatters = {
      toml = { "taplo" },
    },
  },
}

I guess I'll go ahead and close this :)


Messages are sent multiple times.

Something is going wrong while sending messages. (may be with outbox). Sometimes it is sending multiple times and still indicator is showing.

https://chat.zulip.org/#narrow/stream/test.20here/topic/v1.2E0.2E18.20.E2.9D.A4.EF.B8.8F

Maybe @kunall17 has any idea?

And incorrect selection of message component (messageFull or

messageBreif)

Hmm, never saw this on local dev :(
@timabbott Is it safe to assume that the message is sent and can be removed from the outbox state if I receive a success on POST request of a send message ('api/v1/message') call?
As this seems to be a problem here, the app attempts to send a message and waits for the message fetch event which has the local message id?

Yes, you can actually assume the message is sent if it receives a success on the POST request, OR you receive it back from the event queue.
https://github.com/zulip/zulip/blob/master/static/js/sent_messages.js and its callers sorta implement such a protocol in the webapp (though we're not altogether happy with how some of the details work).

Ok thanks, will be sending a PR soon for this! 👍


Remove slider package in its entirety

https://github.com/gchq/gaffer-tools/issues/850#issuecomment-1032350151 identifies that slider relies on a withdrawn package and is incompatible with the recent hadoop versions to which Gaffer will migrate.
The originator @ctas582 doesn't use it any more and its removal has been announced in https://github.com/gchq/gaffer-tools/discussions/967.
Remove the slider package from Gaffer 2.0 branch.

Closed by #977


In app purchase gives BillingResponse.itemAlreadyOwned without PurchaseStatus.purchased

I use in_app_purchase Flutter plugin for Android in app purchases in my Flutter application.
I buy using _iap.buyConsumable(purchaseParam: purchaseParam)(so, autoConsume = true)
and connect using _iap.purchaseUpdatedStream.listen for incoming purchases. If purchase has PurchaseStatus.purchased status then I send it to the server and register this purchase. But if purchase has PurchaseStatus.pending(it's Google test "Slow test card. Declines after a few minutes") then I do nothing and wait for another _iap message, but no other message about this purchase comes, but I see in Google console that this purchase is declined.
But this is not the main problem. Main problem is that if user tries to buy the same product after pending purchase message, the he can't buy it due to error BillingResponse.itemAlreadyOwned. So, it's stuck.
I thought that I can call this function after each app restart:
final QueryPurchaseDetailsResponse response = await _iap.queryPastPurchases();

response.pastPurchases.forEach((pd) => _iap.consumePurchase(pd) );

this gives:

Error consuming purchase with token. Response code: 8

After this user can buy the same item again.
But I'm not sure - is it safe scenario or just dirty fix for this issue?
Also, how can I correctly wait for this pending purchases?

Now I can't even consumePurchase because it's pending (according to the app), but Google console shows it as cancelled.

Hi @don-prog
can you please provide your flutter doctor -v and flutter run --verbose?
Also, to better address the issue, would be helpful if you could post a minimal code sample to reproduce the problem
Thank you

@don-prog it seems that there is a bug in billing module itself:

https://issuetracker.google.com/issues/149668311
https://issuetracker.google.com/issues/73982566

Hi @don-prog
Without additional information we are unfortunately not sure how to resolve this issue.
We are therefore reluctantly going to close this bug for now.
Please don't hesitate to comment on the bug if you have any more information for us; we will reopen it right away!
Thanks for your contribution.


NSMI API (LUIS Replacement) - NLP

Good afternoon Olga/Serhii,
As discussed, we are planning to disconnect the LUIS API and replace with the NSMI API developed by David Colarruso at Suffulk Univ.
Here are the details:
API documentation. https://app.swaggerhub.com/apis-docs/suffolklitlab/spot/0.0.1/
You'll need a Bearer Token if you want to kick the tires. So here it is:
1e1035e9ca1928c296e6f500422648b6de2164562875e4a7a0cc5addae59b0b2
Please let me know if you require additional information or if for some reason the link is not working as expected.
Regards,
Kellye

Completed in DEV and PROD.  Will remain open until Spot is returning desired results.


[Vision] fix duplicate class mapping

Issue #, if available:
https://github.com/awslabs/autogluon/pull/1168
Description of changes:
Fix a bug when tuning_data is not specified, the validation acc will always be 0. This doesn't affect the trained model, nor the final test accuracy, but the searching metric will be messed since the searcher will always get 0 as feedback.
This is caused by applying validation to the (already) validated tuning_data split from train_data
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

Job PR-1197-1 is done.
Docs are uploaded to http://autogluon-staging.s3-website-us-west-2.amazonaws.com/PR-1197/1/index.html


Azbl/665 Make Before and After Text on Image Actual Text

This addresses issue #665 and builds off previous PR #721 (which was closed after inactivity).

Replaces beforeAfter.png that included "Before" and "After" as part of the image to one that doesn't include this.
Compressed the image  reducing size by 72%.
Added aria-labelledby to the Image component.
Added caption: "A Philadelphia lot before a clean up and the same lot, filled with trees and greenery after a clean up." in a p tag.
Ensured no large gap between caption and image by removing gap on container div.
Made caption text regular font weight  (was bold).

@bacitracin @CodeWritingCow @marvieqa

@AZBL The compressed image looks the same as the original image, yet its file size is much smaller. That's awesome! What tool did you use for the image compression?

@AZBL The compressed image looks the same as the original image, yet its file size is much smaller. That's awesome! What tool did you use for the image compression?

@CodeWritingCow I used tinypng.com to compress it. I actually did it originally because I kept getting this error when I tried to push,
error: RPC failed; HTTP 400 curl 22 The requested URL returned error: 400
send-pack: unexpected disconnect while reading sideband packet

but compressing it still didn't work, so I entered
git config http.postBuffer 524288000

and pushed again and it worked.


NistDataMirror.java has hardcoded Windows file separators

Lines 289 and 293 have hardcoded Windows file separators that are causing dependency check jobs to fail on OSX and Linux environments.

The bug was introduced 8 days ago in this PR - https://github.com/stevespringett/nist-data-mirror/pull/108/files

Removed the file seperators & created PR


MP at DevSum

Name of the speakers: Mads Opheim and Rustam Mehmandarov
Name of the session: IoT powered by MicroProfile - microservices in practice
Links
https://twitter.com/madsopheim
https://twitter.com/rmehmandarov
https://github.com/mehmandarov/microprofile-iot
https://www.devsum.se/sessions/iot-powered-by-microprofile-microservices-in-practice/
Location
DevSum: Stockholm, May 23rd
Description:
We are going to show you what happens when the management lets enterprise Java developers and architects decide how we can control the IoT devices in our new office. While it’s easy to figure out why Microprofile is cool, it’s harder to see how to get in into your project.
By the end of this talk, you will be introduced into the patterns and software in the enterprise world of Java explaining how to build a build a secure, stable, modular, and integrated system on an example of a completely over-engineered IoT solution to control the lights and plant’s well-being in the new office.
Fear not if your system is more complex than controlling light bulbs and plants! This talk will show you how easily you can design a good production-ready Java full-stack system based on the Enterprise stack with Microprofile combined with good continuous deployment infrastructure patterns.
There be code, demos, and (buzzword) dragons.

hey, :) hola #usualsuspects!
please submit 3 issues, each for each event to enable processing and thanks!

hey, :) hola #usualsuspects!
please submit 3 issues, each for each event to enable processing and thanks!

Hehe, guilty as charged there 😃
I've now splitted this into this, #67 and #68

@madsop can you please write a tweet for your session and then I will create and image and Promote it on the MP twitter handle.

Ping^  @madsop

Thanks for following up, @rstjames ! Just tweeted: https://twitter.com/MadsOpheim/status/1123872960228601861

@madsop all set for2 tweets to go out


Fix ddu#commands#complete() emits errors

ddu#commands#complete() emits errors because the const variable _ is later modified by filter().

Thanks.


Namespace: Changes memoize tests to use number instead of strings ( due to empty namespace )

Signed-off-by: Jytesh<EMAIL_ADDRESS>

Pull Request Test Coverage Report for Build<PHONE_NUMBER>

5 of 5 (100.0%)  changed or added relevant lines in 2 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage increased (+1.7%) to 90.985%

Totals

Change from base Build<PHONE_NUMBER>:
1.7%

Covered Lines:
278

Relevant Lines:
286

💛  - Coveralls


Files with sample data

It would be great to have files with sample data included in repo.
It doesn't have to be real data, but it would be helpful to making Clairvoyant up and running with my own data (e.g. I don't know if it should be minute data, or daily OHLCV).

Should be daily data. I'll upload some sample datasets!

@anfederico thanks for the awesome work! Did you ever get around to adding sample data sets? I couldn't find any in the repo.


express-validator.d.ts updates

Changes

Added checkBody, checkParams, checkQuery, checkHeader, checkFiles, filter, check, validate to RequestValidation
Split internal/external modules apart because...
This now extends Express.Request to add on ExpressValidation.RequestValidation.
Since there was not a test file, I added a very basic test for now that handles the Express Request object and a a few of the sanitize/validate interface pieces.

Let me know if there are any concerns or something I missed.  Thanks!

express-validator/express-validator.d.ts
to authors(@axefrog @dreampulse). could you review this PR?
:+1: or :-1:?
check list

[ ] pass the Travic-CI test?

@vvakame How do I proceed from here?  It doesn't look like @axefrog @dreampulse have weighed in.
Also, in the time that this has been sitting a different PR went through and made some of the same updates -- https://github.com/borisyankov/DefinitelyTyped/pull/4168 -- I've merged that in and fixed the conflicts.  I feel this branch still provides value since it adds the interface on to the Express.request, allowing you to use multiple express middlewares.  Thanks!

@EricByers okey, I decided to merge this PR.
if @axefrog @dreampulse and @JacobDanton has any improvement. please send a new PR.

Sorry, i'm a little bit late. But the PR seems fine to me


ledc pwm output specifies the number of pulses (idf5.1) (IDFGH-10620)

Is your feature request related to a problem?
I want use ledc_pwm output specifies the number of pulses (idf5.1) or How did I implement it by myself
Describe the solution you'd like.
output specifies the number of pulses (idf5.1)
Describe alternatives you've considered.
No response
Additional context.
No response

I don't think the ledc_pwm has such a feature. But RMT can do this. See the doc especially pay attention to the rmt_transmit_config_t::loop_count part. IDF has an example that use the RMT to generate fixed number of pulses to drive the stepper motor. See https://github.com/espressif/esp-idf/tree/master/examples/peripherals/rmt/stepper_motor


bug,generate two same function

version

``

Your own screenshot shows that your API controller is decorated with both GET and POST verbs so it has generated you a method for GET and a method for POST. If you don't want the POST method then remove it from your API controller.


Centralize logging configuration for acquiring

Reverts dcaribou/transfermarkt-datasets#152

It will be addressed on a different PR.
See #149.


chore: moved schema components and misc files out

Cleaned up the repo

From now on avid-db will only host raw report and vuln files that are published or in review
moved misc docs, notebooks, and scripts to ../.github (private repo)
moved schema components to ../avid-schema

Q: should I upload public facing markdown files to our gitbook to retain visibility? (Re: project_overview.md)

I consolidated parts of it into the gitbook doc (backend and editorial).
Feel free to add edits to that.
The mission-vision-values part is in https://avidml.org/arva/.
The HF spaces part needs a home, probably in githbook.
On Mon, Jun 26, 2023 at 5:58 PM Nathan Butters @.***>
wrote:

Q: should I upload public facing markdown files to our gitbook to retain
visibility? (Re: project_overview.md)
—
Reply to this email directly, view it on GitHub
https://github.com/avidml/avid-db/pull/12#issuecomment-1608545608, or
unsubscribe
https://github.com/notifications/unsubscribe-auth/ABNYO4TTRAYD7HMNDJEUI7TXNIV4HANCNFSM6AAAAAAZU3AZQI
.
You are receiving this because you authored the thread.Message ID:
@.***>

--
Subho Majumdar, PhD
President, AI Risk and Vulnerability Alliance
subhomajumdar.com http://subhomajumdar.com
I may trust in God; all others must bring data.

Okay, I'll take a look tonight and update tasks I had made.


Twitter Digits wrong example code / not working

I am trying to get Twitter Digits login working. The login via Twitter Digits is working so far, but i can not login to Quickblox, because the documentation in https://quickblox.com/developers/SimpleSample-users-android#Signing_In_with_Twitter_Digits is using not existing code. It uses the method QBUsers.signInUsingTwitterDigits() which does not exist in the class QBUsers.
I am using the Q-Municate source code https://github.com/QuickBlox/q-municate-android.
Does anyone have the same issue? Or have a solution for me?

I found out, that the app is using an old version of the sdk quickblox-android-sdkcore-2.4.jar. The QuickBlox Android SDK has the newer version 2.6.1. So i need to update the sdk in the app somehow.

hello @moritzm, in new Q-municate release we plan to update QuickBlox Android SDK to version 2.6.1 and add  Twitter Digits login functionality


dgram: make DATAGRAM an optional feature

This change makes the DATAGRAM extension an optional feature of
quiche. Conditional compilation of the library code and API is
controlled by two features "quic-dgram" and "h3-dgram". These
can be enabled when building quiche with e.g.
cargo build --features "quic-dgram h3-dgram".
Since the features are optional, I've moved the dgram-client and
dgram-server example applications to their own crate "tools/dgram".
This crate enables the required features by default so it can just
be build with cargo build.

@xanathar please take a look.
This is generally how the optional features would look, might requires some tweaks later when we attempt to get it mainlined.

Apart from the nitpick comment above about style, looks fine to me!

weird I though I tried unssucessfully, but I tried it again and it worked, so I updated the PR and will merge


Problem with compile

Hello
I have problem with compile with xbstrap
make[1]: Wejście do katalogu '/home/japiotr123/hdd/managarm/build/tool-builds/system-gcc/isl' CDPATH="${ZSH_VERSION+.}:" && cd /home/japiotr123/hdd/managarm/build/../src/ports/gcc/isl && /bin/sh /home/japiotr123/hdd/managarm/src/ports/gcc/isl/missing aclocal-1.15 -I m4 /home/japiotr123/hdd/managarm/src/ports/gcc/isl/missing: 81: /home/japiotr123/hdd/managarm/src/ports/gcc/isl/missing: aclocal-1.15: not found WARNING: 'aclocal-1.15' is missing on your system.          You should only need it if you modified 'acinclude.m4' or          'configure.ac' or m4 files included by 'configure.ac'.          The 'aclocal' program is part of the GNU Automake package:          <http://www.gnu.org/software/automake>          It also requires GNU Autoconf, GNU m4 and Perl in order to run:          <http://www.gnu.org/software/autoconf>          <http://www.gnu.org/software/m4/>          <http://www.perl.org/> make[1]: *** [Makefile:1202: /home/japiotr123/hdd/managarm/build/../src/ports/gcc/isl/aclocal.m4] Błąd 127 make[1]: Opuszczenie katalogu '/home/japiotr123/hdd/managarm/build/tool-builds/system-gcc/isl' make: *** [Makefile:6166: all-isl] Błąd 2 xbstrap: Action compile-tool of tool stage ('system-gcc', 'compiler') failed
I would be grateful for help

Have you installed all the deps as outlined in README.md?
As far as i can see the deps you're missing is autotools but it's also noting about m4 and perl so it might be worth it to install those too

This seems to be a problem with building GCC. It does not find the aclocal binary. We're building automake ourselfs and it should be part of that package (?). Can you post the full build log (e.g., as a gist), preferably in English (export LANG=en_US.UTF8 or similar)?

Hello
Previously I had version 1.6 when xbstrap want to use 1.5. I complile 1.5 version and added to path and it helps.


Cryptographic APIs misuses

I'm a PhD student interested in finding security vulnerabilities in open source projects.
We found a total of 7  warnings (indicating potential vulnerabilities) when running the CogniCrypt static analyzer (*) on dcraddrscanner (or its library dependencies). We documented each one of these issues in private gists for the sake of confidentiality (non-disclosure).
Can you please let us know whether we can share these gists with you? We are eager to evaluate the perception of developers (e.g. severity of these warnings) and improve dcraddrscanner's security, and the quality of the reports of static analysis tools.
(*) https://github.com/CROSSINGTUD/CryptoAnalysis

Yes please share.
On Sat, Dec 18, 2021, 6:07 AM Luis Guilherme @.***>
wrote:

I'm a PhD student interested in finding security vulnerabilities in open
source projects.
We found a total of 7 warnings (indicating potential vulnerabilities) when
running the CogniCrypt static analyzer (*) on dcraddrscanner (or its
library dependencies). We documented each one of these issues in private
gists for the sake of confidentiality (non-disclosure).
Can you please let us know whether we can share these gists with you? We
are eager to evaluate the perception of developers (e.g. severity of these
warnings) and improve dcraddrscanner's security, and the quality of the
reports of static analysis tools.
(*) https://github.com/CROSSINGTUD/CryptoAnalysis
—
Reply to this email directly, view it on GitHub
https://github.com/decred/dcraddrscanner/issues/32, or unsubscribe
https://github.com/notifications/unsubscribe-auth/AILARIIFNGOZN2TYZ5VDCU3URORA3ANCNFSM5KJW2V7A
.
You are receiving this because you are subscribed to this thread.Message
ID: @.***>

Hello @JoeGruffins,
From the 7 warnings that CogniCrypt reported, we randomly selected 5 gists to share with you. If you are interested, we can share the reports of the remaining warnings.
Gist 01 - MessageDigest
Gist 02 - MessageDigest
Gist 03 - TrustManagerFactory
Gist 04 -SLLContext
Gist 05 - SSLContext
For any doubts, you can comment directly in the gists and we can clarify the issues.
Best regards,

Hi @JoeGruffins and @dnldd,
How should I proceed with this issue? Are you interested in discussing these warnings? How do you perceive their value?
Thanks a lot for your collaboration.


Support API calls via backend

Planning to work on a backend supported set of methods similar to all the ones we have inside useGitHub() hook. Keeping a hook for all the methods will be a handy thing in frontend, but for server-side modules and SSR, it will not work in such cases.
As a solution, we should have a class-based implementation supported as well. Which can have a DX something like,
const gh = utiliseGitHubRestAPI();
const userInfo = gh.getUserInfo(); // returns the user info on function call
const repos = gh.getRepositories(); // returns the user repositories on function call

These methods will perform the same actions as the functions inside useGitHub(). Also, these methods will be shared across both hooks and classes, considering the better coding patterns.

can we discuss this on this love to work on this issue

Good to have you here @Akshaygore1 - I would like to discuss this improvement project with you. I have couple of initial questions before starting, that will be helpful for leading the discussion.

What are the current limitations you see in the current developer experience + the methods present inside the hook.
Can you please also share a POC / Pseudo-code version of how the current hook methods will have their similar getter-methods, respectively.

Thanks very much!

@yashsehgal  Can I work on this issue

Hey @yashsehgal
implemented the class like implementations for the apis
`import axios from "axios";
import {
IGitHubUserInfo,
IGitHubRepo,
ProgrammingLanguage,
LanguageDistribution,
} from "./interfaces.js";
const GITHUB_REST_URL: string = "https://api.github.com" as const;
const GITHUB_GRAPHQL_URL: string = "https://api.github.com/graphql" as const;
const GITHUB_RAW_CONTENT_URL: string =
"https://raw.githubusercontent.com" as const;
class GitHubService {
private username: string;
private personalAccessToken: string | null;
constructor(username: string, personalAccessToken: string | null = null) {
this.username = username;
this.personalAccessToken = personalAccessToken;
}
// Fetch GitHub User Info
async getUserInfo(): Promise<IGitHubUserInfo | null> {
if (!this.username) return null;
try {
  const response = await axios.get(
    `${GITHUB_REST_URL}/users/${this.username}`
  );
  return response.data as IGitHubUserInfo;
} catch (error) {
  console.error("Error while fetching GitHub user info:", error);
  return null;
}

}
// Fetch repositories
async getRepositories(): Promise<IGitHubRepo[]> {
if (!this.username) return [];
try {
  const response = await axios.get(
    `${GITHUB_REST_URL}/users/${this.username}/repos?per_page=100&sort=updated`
  );
  return response.data.map((repo: any) => ({
    ...repo,
    language: repo.language
      ? (repo.language.toLowerCase() as ProgrammingLanguage)
      : null,
  })) as IGitHubRepo[];
} catch (error) {
  console.error("Error while fetching repositories:", error);
  return [];
}

}
// Fetch pinned repositories via GitHub GraphQL API
async getPinnedRepositories(): Promise<IGitHubRepo[]> {
if (!this.username || !this.personalAccessToken) return [];
const query = `
  query {
    user(login: "${this.username}") {
      pinnedItems(first: 6, types: REPOSITORY) {
        nodes {
          ... on Repository {
            id
            name
            description
            url
            stargazerCount
            forkCount
            primaryLanguage {
              name
            }
          }
        }
      }
    }
  }
`;

try {
  const response = await axios.post(
    GITHUB_GRAPHQL_URL,
    { query },
    {
      headers: {
        Authorization: `Bearer ${this.personalAccessToken}`,
      },
    }
  );

  return response.data.data.user.pinnedItems.nodes.map((repo: any) => ({
    id: repo.id,
    name: repo.name,
    description: repo.description,
    html_url: repo.url,
    stargazers_count: repo.stargazerCount,
    forks_count: repo.forkCount,
    language: repo.primaryLanguage
      ? (repo.primaryLanguage.name.toLowerCase() as ProgrammingLanguage)
      : null,
  })) as IGitHubRepo[];
} catch (error) {
  console.error("Error while fetching pinned repositories:", error);
  return [];
}

}
// Fetch followers
async getFollowers(): Promise<IGitHubUserInfo[]> {
if (!this.username) return [];
try {
  const response = await axios.get(
    `${GITHUB_REST_URL}/users/${this.username}/followers?per_page=100`
  );
  const followerPromises = response.data.map((follower: { url: string }) =>
    axios.get(follower.url)
  );
  const followerResponses = await Promise.all(followerPromises);
  return followerResponses.map(
    (response) => response.data as IGitHubUserInfo
  );
} catch (error) {
  console.error("Error while fetching followers:", error);
  return [];
}

}
// Fetch followings
async getFollowings(): Promise<IGitHubUserInfo[]> {
if (!this.username) return [];
try {
  const response = await axios.get(
    `${GITHUB_REST_URL}/users/${this.username}/following?per_page=100`
  );
  const followingPromises = response.data.map(
    (following: { url: string }) => axios.get(following.url)
  );
  const followingResponses = await Promise.all(followingPromises);
  return followingResponses.map(
    (response) => response.data as IGitHubUserInfo
  );
} catch (error) {
  console.error("Error while fetching followings:", error);
  return [];
}

}
// Fetch README content from profile
async getProfileReadme(): Promise<string | null> {
if (!this.username) return null;
try {
  const response = await axios.get(
    `${GITHUB_RAW_CONTENT_URL}/${this.username}/${this.username}/main/README.md`
  );
  return response.data;
} catch (error) {
  console.error("Error while fetching profile README:", error);
  return null;
}

}
// Calculate language distribution
calculateLanguageDistribution(repos: IGitHubRepo[]): LanguageDistribution[] {
const languageCounts: { [key in ProgrammingLanguage]?: number } = {};
let totalCount = 0;
repos.forEach((repo) => {
  if (repo.language) {
    languageCounts[repo.language] =
      (languageCounts[repo.language] || 0) + 1;
    totalCount++;
  }
});

return Object.entries(languageCounts).map(([language, count]) => ({
  language: language as ProgrammingLanguage,
  percentage: count! / totalCount,
}));

}
}
export default GitHubService;
`
working fine for now

Hi @Akshaygore1 - Great efforts, thanks for spending time on this one. This class-based implementation looks promising and I think we can start adding these updates and you can create a PR for the same.
Also, before you create the PR, we can discuss how we are going expose and utilise these methods.
For eg., I was thinking of exposing the class itself with name GitHubService or GitHubRestAPI (we can discuss on the class name later for sure) and let the user call the individual methods by their respective getter-functions.
Also, would you like to work on it's documentation as well. In #2 there's work going on related to docs Migration, we can discuss about the docs part there, if you're willing to take up that part.
Thanks you so much! Excited for the PR 🎉

Hey @yashsehgal,

Where should I implement this? Should I create a folder for the module, and how will we expose these getter functions?
I'll also work on the documentation.


[aliyun-oss-cpp-sdk] Change to find package config mode

Related https://github.com/microsoft/vcpkg/pull/40597.
Change include(...) to find_package(... CONFIG REQUIRED).
Checklist

[x] Changes comply with the maintainer guide.
[x] SHA512s are updated for each updated download.
[ ] ~The "supports" clause reflects platforms that may be fixed by this new version.~
[ ] ~Any fixed CI baseline entries are removed from that file.~
[ ] ~Any patches that are no longer applied are deleted from the port's directory.~
[ ] ~When updating the upstream version, the "port-version" is reset (removed from vcpkg.json).~
[x] The version database is fixed by rerunning ./vcpkg x-add-version --all and committing the result.
[x] Only one version is added to each modified port's versions file.

Test
The port usage tests pass with the following triplets:

x64-linux

This PR might also fix this port failing in the most recent CI, but maybe I'm just dreaming:
CMake Error at sdk/CMakeLists.txt:19 (configure_file):
  No such file or directory

-- Configuring incomplete, errors occurred!

This PR might also fix this port failing in the most recent CI, but maybe I'm just dreaming:
CMake Error at sdk/CMakeLists.txt:19 (configure_file):
  No such file or directory

-- Configuring incomplete, errors occurred!

I apparently was dreaming because it already fixed itself? 🤷

Thanks for the fix!

I apparently was dreaming because it already fixed itself? 🤷

No, it is just a race with parallel configure writing to CMAKE_CURRENT_SOURCE_DIR
https://github.com/aliyun/aliyun-oss-cpp-sdk/blob/0632d336ac861816669a1b0eecac30fb8ff71abb/sdk/CMakeLists.txt#L19

race with parallel configure writing to CMAKE_CURRENT_SOURCE_DIR

Thanks for your explanation, it's my fault for not noticing this. In view of there are lots of relative references to Config.h upstream, we would mitigate the race via the option DISABLE_PARALLEL_CONFIGURE.


Empty lists in xml.

If root element has two empty lists, parser doesn't recognize second list. Just returns first list.
For example,

Expected :{"B":[],"C":[]}
Actual  :{"B":[]}

Thanks!


Support rectangular or arbitrary shapes in geo location filtering

Is your feature request related to a problem? Please describe.
Need to filter documents by geo areas with shapes different from circles.
E.g. filter all documents from California.
Describe the solution you'd like
Define area using rectangular box coordinates or using a polygon (sequence of points)
Describe alternatives you've considered
Use multiple geoLocation conditions combined using OR.

Have you considered storing the location names/logical id in a separate field, used for filtering, and then use Geo search ranking features for ranking?
Ranking from a position match

Thanks, this is another alternative, though it's still more convenient to have support of arbitrary shapes here as logical IDs may come from multiple different map scales and quickly become unmanagable in our use case.


Use CardanoWsClient in Lace

Checklist

[x] JIRA - <link>
[ ] Proper tests implemented
[ ] Screenshots added.

Proposed solution
Conditionally use the CardanoWsClient on Lace to improve performance.

Closing in favor of #1469


Track, Agree Upon, and Document Breaking Semantic Changes

Below is a list of the breaking semantic changes to the Spin runtime that will be coming in Spin 3.0. Before we release, we should ensure that we are all of with these changes, and then we should document them.

[ ] HttpRequestDenied used to be returned from wasi:http/outgoing-handler#handle but are now returned from wasi:http/types/future-incoming-response#get
[ ] https://github.com/fermyon/spin/pull/2723
[ ] https://github.com/fermyon/spin/issues/2552
[ ] https://github.com/fermyon/developer/issues/1371
[ ] https://github.com/fermyon/developer/issues/1376
[ ] Changes to the on-disk format for AI models

@radu-matei @karthik2804 - are there documentation changes for the llm-factor breaking changes we need to add to this list?

@rylev and SDK folks: do you know if/how:

HttpRequestDenied used to be returned from wasi:http/outgoing-handler#handle but are now returned from wasi:http/types/future-incoming-response#get

would affect developers using the SDKs, as opposed to programming directly against wasi-http?  It seems like it would still manifest as an error in whatever async "send request" wrapper they use, just internally it would be in a slightly different part of the promise/future/task/whatever.  Does that sound right?

would affect developers using the SDKs, as opposed to programming directly against wasi-http? It seems like it would still manifest as an error in whatever async "send request" wrapper they use, just internally it would be in a slightly different part of the promise/future/task/whatever. Does that sound right?

For example, for users of the Rust SDK, this shouldn't really make a difference as both API points are wrapped up in the executor::outgoing_request_send function and so it should look the same to the Rust SDK user no matter where the error surfaces. I've not looked at other SDKs, but we'd had to see if any of them don't abstract this away from the users. Of course, for those using the wasi:http/outgoing-handler API directly, they will be exposed to this difference.
Re: the authority header:
You can see the full logic here - the logic changed a bit in https://github.com/fermyon/spin/pull/2747. The authority is determined by the host header or the URL authority (and they much match if both are present).
Specifically, for a "self" request, the host header is always set (meaning that the host header will be responsible for the authority the guest will see), and it is set here to the listener address of the running Spin server.
I'm actually not sure what the authority is set to in self requests in Spin 2.x - we should investigate that and document it.
Does this clarify things?

Thanks for the confirmation re the HTTP error.  I'll double check other SDKs but I think they all hide this (and yep, understood for folks working at the WASI level).
Thanks for the link to the authority code.  Unfortunately the low-level fragment hasn't really gotten me confident I have my head around what this means for application developers, but let me have another crack at some wording:

Spin now infers the authority property of an incoming request from either the request URL or the HTTP Host header. (If the request includes both, then they must agree.) This will not usually result in any change of behaviour for "normal" requests from HTTP clients.

(I recognise that "normal" is handwavey here!)

Spin now adds an HTTP Host header on self requests (those made using a path only). The value of the header is the listener address of the Spin HTTP server. Consequently, the component receiving the self request will always see the URL authority as that of the Spin HTTP server, just as if the request had come from an external client.

Does that correctly capture the effect at guest level of these changes?  Thanks!

These summaries seem largely good to me.

This will not usually result in any change of behaviour for "normal" requests from HTTP clients.

This part, however, doesn't really track. Previously the authority was always set to the Spin server's listener address (much like is done now for self requests), and now it's based on the host header. So unless the client was making a direct against the listener address (instead of requesting for example against a DNS name that ultimately gets routed to the listener), the authority will change.

Aha!  This is the missing piece.  Let me word it back to check I now have it right:

Spin now infers the authority property of an incoming HTTP request from either the request URL or the HTTP Host header. (If the request includes both, then they must agree.)  This means that when a client makes the request through a DNS name, the authority will be that DNS name, rather than the Spin server's listener address.

(and, thus, modifying the text in self-requests about "as if the request had come from an external client")
Thanks!

This means that when a client makes the request through a DNS name, the authority will be that DNS name, rather than the Spin server's listener address.

I think this is largely correct enough. There are more precise ways to formulate this, but for the purposes of change logs this might be the best balance between correctness and terseness.

By now we've had plenty of chance to disagree on the breaking changes linked above.  @itowlson's docs PR appears to cover the documentation front.  Are we good in considering https://github.com/fermyon/developer/pull/1396 closes this issue?

From my side, we can close this.


terminal proxy

The idea is to have another websocket that receives a stream from a terminal and simply relays it to everyone connected.
Consider separating the application into two parts, one being just the relay and the other the transmitter. The transmitter captures data from the local terminal to the relay, which forwards it to all connected clients.
This way, anyone with the transmitter and the API key can send the terminal to the relay.
Requirements:

The transmission is protected by an API key.
The use of websocket and not another communication layer is to allow it to easily pass through firewalls.

I'm a bit puzzled here, say we have 3 systems on different IP addresses: server.compterm, proxy.compterm and client.someISPfaraway.
Server.compterm spawns /bin/bash shared over compterm.
Proxy.compterm runs a compterm server that spawns a CLI client which is shared over its own compterm server process.
Client runs compterm-client (over web or CLI, however the end users feels like).
Supposing that we have a fully working compterm TUI/CLI client, is there anything that would stop the show?

I did not understand your question.
The current version already works; this is just a new feature.
I want to start an instance of compterm in a VSP; I will configure this instance not to launch a shell. Instead, it will receive the shell's output through a port and relay it to the connected clients.
Another instance of compterm running on a local machine will load the shell and send the output to the instance running on the VSP instead of itself receiving the connection from clients and relaying the shell output.
This feature does not replace what we already have in the current version. It's just a better way for those who don't have a home server, their ISP doesn't allow incoming connections, they're behind a firewall, or they don't want to expose their internet connection directly.
This new feature also allows you to use the client you prefer. You can use the web client, CLI, or any other. But instead of connecting directly with the machine running the shell, you will connect with this instance that is doing relay.

Goes like this: Imagine we have a program which is a compterm client using console/text/CLI interface. (We do have such client, don't we? Not sure if it's working/not)
Let's say such program is "client.go" and resides atop of compterm's directory and takes an IP/hostname as the single required argument, ok?

At the moment you can't.
Compterm does not have an input port at the moment, it only relays the executable that it itself loaded and captured stdin/out.

Tbh most people won't use duplex communication from what I can tell, and as long as all clients connected to the proxy are read-only why would the proxy need to send its input?
Either way, imho it would be best to implement authentication (even better if we could do it via command line arguments in the client to help it act as proxy) + duplex communication and the relay stuff will most likely solve itself.
That's just my 2 cents, if anyone thinks it's still a good idea to chase I'm leaving the space here open for further commenting. Ciao.


Fixed non-UTF characters.

Summary
Fixes some non-UTF characters that are not displaying properly on my system.
Impact
N/A
Testing
N/A

BTW, this is how our CI checks for invalid characters:
cvt2utf convert -i h c --nobak .

if [ -n "$(git status -s)" ]; then
	exit 1
else
	exit 0
fi

This is very simple, it could be added in NuttX CI.

BTW, this is how our CI checks for invalid characters:
cvt2utf convert -i h c --nobak .

if [ -n "$(git status -s)" ]; then
	exit 1
else
	exit 0
fi

This is very simple, it could be added in NuttX CI.

could you integrate the check to https://github.com/apache/nuttx/blob/master/tools/checkpatch.sh? So, we don't fix the same problem again.

BTW, this is how our CI checks for invalid characters:
cvt2utf convert -i h c --nobak .

if [ -n "$(git status -s)" ]; then
	exit 1
else
	exit 0
fi

This is very simple, it could be added in NuttX CI.

could you integrate the check to https://github.com/apache/nuttx/blob/master/tools/checkpatch.sh? So, we don't fix the same problem again.

Yes I will do.
However, it requires cvt2utf to be installed with:
pip install cvt2utf

How/where can I install this to the CI image?

you can install here:
https://github.com/apache/nuttx/blob/master/tools/ci/docker/linux/Dockerfile#L282
https://github.com/apache/nuttx/blob/master/tools/ci/cibuild.sh#L286


MM-16695 Update mattermost-redux to add additional null check

Ticket Link
https://mattermost.atlassian.net/browse/MM-16695
Related PRs

https://github.com/mattermost/mattermost-redux/pull/874

@hmhealey Shouldn't this point to the merged commit?

@crspeller Updated this to point to the merged commit

@hmhealey remember to point to the release branch commit on cherry-pick


EP Bot v5 doesn't log me in

I basically did everything right, it opened the browser but stays on the logging screen :/ Do i need to sign out of my account first on my other browser or smth>?

yea nah this is rly outdated
a lot of it is broken
working on a new version soon
but might be a while lol

Oh thanks for letting me know :)


Ncp: Ensure to always send the "end of scan" indicator spinel message

This commit changes the way we send out the "end of scan" indicator message to ensure that it is always sent out and not dropped. If there is no buffer space available when scan finishes, we remember and send it out when buffer space becomes available later.

👍
Good catch

LGTM 👍


Ways To View Subtrees -- Hoisting

Please Select if your Request is Either something new or an Enhancement

[ ] Enhancement of an existing Feature.
[x] Request of a new feature.
[x] Conceptual request.

Please select the area your request applys to. (Multiple selections are Possible)

[ ] Onboard. Initial vault setup and import/export pods
[ ] Create. Note creation, lookup, snippets and templates
[x] Retrieve. Backlinks, references, graph view
[ ] Structure. Refactoring, multi-vault and schemas
[ ] Publish. Sharing your repo with the world
[ ] Misc (Choose this if your not sure)

Is your feature request related to a problem? Please describe
This is more of a conceptual request than a feature request because it depends on the form Dendron takes as time goes on. Basically, it would be nice to have the ability to focus on different levels and subtrees -- see Trilium's hoist feature.
I would consider this very low priority, but it's notable that this feature would give Dendron an edge over other apps that support bidrectional/wiki [[links]]: If there is no hierarchy, there is no hoisting. (I suppose one could probably generate sub-graphs tho...So maybe I'm wrong on this...🤔)

Hey,
I like the sound of that idea, but to clarify, do you mean the hosting for the dendron tree view only?
Or do you want this hoisting to do more than to be a UI thing changing what gets shown.
Secondly, as far as I Understand, this hoisting / soloing would be a way to focus on one hierarchy and its children?
So it would act like an easy-to-access filter the UI part.

But based on this, we could do more, like the following:
You have a project hierarchy and multiple Projects. Now you Hoist a Specific project (projects.dendron).
If you open the lookup now, should the lookup have  projects.dendron. be prefilled and editable?
Or should it show projects.dendron. but not let you change it? (So you would need to exit the Hoist to look up something from a different Project.)
Or should it hide the hoisted Hierarchie assuming you know your hoisted and want to create or look up a note inside the hoisted hierarchy?

Hoisting is arguably the best feature of Workflowy (and Dynalist) and seeing something like it in Dendron would be wonderful:

@flammehawk, I think it should do both: filter the hierarchy tree and restrict the lookup to the currently hoisted hierarchy. However, for the lookup restriction to work properly, ^ should be allowed in lookup regex expressions. Right now, projects.dendron., will match both projects.dendron.todo and archive.projects.dendron.todo with the latter being from a different, not hoisted hierarchy. Actually, maybe supporting carets could be a separate, smaller request since it's not directly related to hoisting.
Another use case for hoisting would be working with a multi-vault setup where you want to focus on a single vault and filter results from other vaults from the lookup. The lookup could use the same format as cross-vault links for consistency (although this is a bit verbose and having a shortcut would be nice) dendron://$vaultName/projects.dendron to hoist/filter a specific vault.
There is an outstanding request to consolidate file trees in a multi-value environment (https://github.com/dendronhq/dendron/issues/399), so if the same hierarchy structure is used across all vaults, the visual tree will group notes from different vaults together. If this is implemented, hoisting vaults could be a useful feature to slice through the consolidated tree and work with original hierarchies. Or there could be simply a command to un-merge visual trees 🙂.

If you open the lookup now, should the lookup have projects.dendron. be prefilled and editable?

I would prefer to have it prefilled and editable to lower friction--no need to specifically un-hoist a hierarchy when you want to go back. So, you would have something like a Dendron: Hoist command where you type the name of a hierarchy to focus on. This will automatically filter the Dendron tree view and prefill the lookup with ^projects.dendron (similar to how Go down command works actually only without caret support at the moment). And if you change the hoisted part of the lookup, the focus could revert to the full view. There also could be Dendron: Un-hoist command, just to cover everything.
The Dendron tree view needs a visual indicator to show that a hierarchy is hoisted and probably some UI controls for hoisting/un-hoisting hierarchies for people preferring mouse over keyboard for navigation.

I used to be a big workflowy user and being able to hoist hierarchies would be super. we are going to be updating the sidebar next month so that'll be a good time to update the hiearchy view to support hoisting.
I like @aleksey-rowan suggestion about the hoisting implementation. it might be implemented as a lookup modifier instead of a command, something akin to the directChildOnly filter

@kevinslin

... the hoisting implementation. it might be implemented as a lookup modifier instead of a command, something akin to the directChildOnly filter

As long as the modifier can be enabled via keyboard without having to tab a bunch of time, I'll be happy 🙃 What if you add keybindings to toggle specific modifiers and scope them under inQuickOpen context, so they are only active when the lookup panel is open?


AUR Build is failing

OS: Arch Linux
PKGBUILD
Build is failing with:
ERROR Missing dependencies:
	setuptools>=40.9.0
	jaraco.text -> inflect -> pydantic>=1.9.1 -> typing-extensions>=4.2.0
==> ERROR: A failure occurred in build().
    Aborting...

while all these dependencies are installed with latest version

@metaory Which Python version are you using?

@metaory Don't mix local and system Python packages.

Closing due to inactivity. Can reopen later.


Shape_array returns random numbers

Minimum reproducible example
import mxnet as mx
x = mx.sym.Variable('x', shape=(2, 3, 4), dtype='float32')
print(x, x.infer_shape(), x.infer_type())
shape = x.shape_array()
print(shape, shape.infer_shape(), shape.infer_type())

x_computed = x.bind(mx.cpu(), args={x.name: mx.nd.zeros((2, 3, 4), dtype='float32')})
print('x_computed', x_computed.outputs)

# this last one is the only that looks absolutely wrong
shape_computed = shape.bind(mx.cpu(), args={x.name: mx.nd.zeros((2, 3, 4), dtype='float32')})
print('shape_computed', shape_computed.outputs)

Output
<Symbol x> ([(2, 3, 4)], [(2, 3, 4)], []) ([<class 'numpy.float32'>], [<class 'numpy.float32'>], [])
<Symbol shape_array4> ([(2, 3, 4)], [(3,)], []) ([<class 'numpy.float32'>], [<class 'numpy.int64'>], [])

x_computed [
[[[0. 0. 0. 0.]
  [0. 0. 0. 0.]
  [0. 0. 0. 0.]]

 [[0. 0. 0. 0.]
  [0. 0. 0. 0.]
  [0. 0. 0. 0.]]]
<NDArray 2x3x4 @cpu(0)>]

shape_computed [
[57812800 60809616        0]
<NDArray 3 @cpu(0)>]

Environment info (Required)
----------Python Info----------
Version      : 3.6.6
Compiler     : GCC 8.0.1 20180414 (experimental) [trunk revision 259383
Build        : ('default', 'Sep 12 2018 18:26:19')
Arch         : ('64bit', 'ELF')
------------Pip Info-----------
Version      : 9.0.1
Directory    : /home/axelr/py36/lib/python3.6/site-packages/pip
----------MXNet Info-----------
/home/axelr/py36/lib/python3.6/site-packages/h5py/__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.
  from ._conv import register_converters as _register_converters
Version      : 1.3.0
Directory    : /home/axelr/py36/lib/python3.6/site-packages/mxnet
Commit Hash   : b3be92f4a48bce62a5a8424271871c2f81c8f7f1
----------System Info----------
Platform     : Linux-4.15.0-34-generic-x86_64-with-Ubuntu-18.04-bionic
system       : Linux
node         : axelr-mi
release      : 4.15.0-34-generic
version      : #37-Ubuntu SMP Mon Aug 27 15:21:48 UTC 2018
----------Hardware Info----------
machine      : x86_64
processor    : x86_64
Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
CPU(s):              8
On-line CPU(s) list: 0-7
Thread(s) per core:  2
Core(s) per socket:  4
Socket(s):           1
NUMA node(s):        1
Vendor ID:           GenuineIntel
CPU family:          6
Model:               142
Model name:          Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
Stepping:            10
CPU MHz:             2898.701
CPU max MHz:         3400,0000
CPU min MHz:         400,0000
BogoMIPS:            3600.00
Virtualization:      VT-x
L1d cache:           32K
L1i cache:           32K
L2 cache:            256K
L3 cache:            6144K
NUMA node0 CPU(s):   0-7
Flags:               fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb invpcid_single pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp flush_l1d
----------Network Test----------
Setting timeout: 10
Timing for MXNet: https://github.com/apache/incubator-mxnet, DNS: 0.1668 sec, LOAD: 1.3190 sec.
Timing for Gluon Tutorial(en): http://gluon.mxnet.io, DNS: 0.3223 sec, LOAD: 1.1982 sec.
Timing for Gluon Tutorial(cn): https://zh.gluon.ai, DNS: 0.3219 sec, LOAD: 0.8873 sec.
Timing for FashionMNIST: https://apache-mxnet.s3-accelerate.dualstack.amazonaws.com/gluon/dataset/fashion-mnist/train-labels-idx1-ubyte.gz, DNS: 0.5142 sec, LOAD: 0.8523 sec.
Timing for PYPI: https://pypi.python.org/pypi/pip, DNS: 0.0851 sec, LOAD: 2.0172 sec.
Timing for Conda: https://repo.continuum.io/pkgs/free/, DNS: 0.0953 sec, LOAD: 0.7958 sec.

@arogozhnikov Thanks for reporting this issue. We will look into this.
@mxnet-label-bot [Python, Bug, Operator]

I think until and unless you call forward() method on executor, it's output is not supposed to be populated.
shape_computed = shape.bind(mx.cpu(), args={x.name: mx.nd.zeros((2, 3, 4), dtype='float32')})
shape_computed.forward()
print('shape_computed', shape_computed.outputs)
This gives desired result.

print(shape_computed.outputs)
[
[2 3 4]
<NDArray 3 @cpu(0)>]

@Vikas89 thanks, that indeed works.
I'm closing the issue, but for those trying to use shape_array or size_array: it is disappointing, you can't even use it for reshaping or to create sym.arange, almost everything requires passing integers.


Bicep CLI displays irrelevant warning when deploying Azure Container Apps

Hi everyone!
I report a little inaccuracy of the Bicep engine. When I deploy my Bicep template defining a Azure Container Apps, the CLI displays a warning. Hereafter are the Bicep template and the warning. It seems that it is an error because if I remove this poperty from the template the deployment fails.
Here is the Bicep template:
param location string
param uniqueSeed string
param containerAppsEnvironmentName string = 'containerappenv-${uniqueString(uniqueSeed)}'
param logAnalyticsWorkspaceName string = 'loganalytics-${uniqueString(uniqueSeed)}'

resource logAnalyticsWorkspace 'Microsoft.OperationalInsights/workspaces@2020-03-01-preview' = {
  name: logAnalyticsWorkspaceName
  location: location
  properties: any({
    retentionInDays: 30
    features: {
      searchVersion: 1
    }
    sku: {
      name: 'PerGB2018'
    }
  })
}

resource containerAppsEnvironment 'Microsoft.Web/kubeEnvironments@2021-02-01' = {
  name: containerAppsEnvironmentName
  location: location
  properties: {
    type: 'Managed'
    internalLoadBalancerEnabled: false
    appLogsConfiguration: {
      destination: 'log-analytics'
      logAnalyticsConfiguration: {
        customerId: logAnalyticsWorkspace.properties.customerId
        sharedKey: logAnalyticsWorkspace.listKeys().primarySharedKey
      }
    }
  }
}

output containerAppsEnvironmentId string = containerAppsEnvironment.id
output containerAppsEnvironmentDomain string = containerAppsEnvironment.properties.defaultDomain

Here is the warning:

Thanks for reporting.
If you are interested, you can use the #disable-next-line directive to disable the warning like so:
  ...
  properties: {
    #disable-next-line BCP037
    type: 'Managed'
  ...

The #disable-next-line directive will be useful as this warning causes my Github workflow to fail.
Thank you!

I get the same error on bicep 0.5.6 - is this fixed yet?

The Container Apps namespace has moved, so you may need to make some changes described here:
https://github.com/microsoft/azure-container-apps/issues/109
I believe all the latest types under the microsoft.app provider are in the latest version of bicep.

@alex-frankel the issue is still there with Microsoft.App/managedEnvironments@2022-01-01-preview


UI is unresponsive in narrow browser window

A lot of times I'd like to use adminMongo in split screen, but when my browser get narrow enough to take up half my screen the ui layout changes to be responsive (which is awesome) and I'm unable to click many ui buttons or select text in records. It's specifically a problem in this screen where I'm unable to click the back or save buttons, and also I can't select any of the text.

I have the same issue

Same issue here. It is not responsive only on the record box part. Cant scroll and select whatsoever. Buttons and menu still working.


Fix LinearGradientBrush validation

Requires https://github.com/mono/mono/pull/5672
(Will fail until then)

@hughbe,
Thanks for having already signed the Contribution License Agreement. Your agreement was validated by .NET Foundation. We will now review your pull request.
Thanks,
.NET Foundation Pull Request Bot


generatevpnclientpackage doesn't work

https://github.com/Azure/azure-cli/issues/2569
https://github.com/Azure/azure-rest-api-specs/issues/1093
The call is supposed to return a URL to a VPN client download package (but not, presumably the bits of the package itself).  This command is implemented in Powershell, so there's some question as to whether there is an issue with the Swagger spec or possibly something in the Python autorest conversion of the Swagger spec.

Laurent - who is supposed to look into the Python autorest conversion for this functionality?

The last time I talked with @tjprescott about this, we conclude it was a RestAPI issue.

@lmazuel but you do have this open for another reason yes?  It had to do with receiving the text "null" from the service?

If I remember correctly, the Swagger is saying "str" as a return type.
        "responses": {
          "202": {
            "description": "VPN client package URL.",
            "schema": {
              "type": "string"
            }
          }
        }

So when I receive "null", I parse it like a string and not an empty JSON (so the string "null" in four characters). So I don't think there is a reason to keep this issue open actually.

Feel free to close then :)


Bump snarky

This PR pulls in the latest changes from snarky.
Checklist:

[ ] Modified the current draft of release notes with details on what is completed or incomplete within this project
[ ] Document code purpose, how to use it

Mention expected invariants, implicit constraints

[ ] Tests were added for the new behavior

Document test purpose, significance of failures
Test names should reflect their purpose

[ ] All tests pass (CI will check this if you didn't)
[ ] Serialized types are in stable-versioned modules
[ ] Does this close issues? List them

This bump was done as part of the 4.14 changes :grin: Closing.


Add image for FirstProgram Lab

Image shows how to pick which .NET version to use.

Perfect, thanks, I somehow never succeeded in reproducing that on my windows machine.


Defender threat hunt .csv file failing to parse in WDAC wizard

Discussed in https://github.com/MicrosoftDocs/WDAC-Toolkit/discussions/363

Originally posted by bldm0202 April 17, 2024
Hi everyone, this is my first time on Github and I'm not the most technical of persons.
I am hoping someone can provide some advice about why my Defender Advanced Threat Hunt outputs are not successfully parsing in the WDAC wizard.
I have followed the threat hunt query template outlined here:
https://github.com/MicrosoftDocs/WDAC-Toolkit/blob/main/WDAC-Policy-Wizard/docs/using/advanced-hunting.md
I've ensured my .csv output has all the data fields.
However, in the WDAC wizard policy editor I am not able to parse the threat hunting events and receive an error message. At a loss as to how to troubleshoot further.
Would appreciate any advice you may have.
The issue seems very similar to that reported in https://github.com/MicrosoftDocs/WDAC-Toolkit/issues/336; however I can confirm all the data fields are in the csv, including AuthenticodeHash field (though all fields are empty for this).
Many thanks!

The AppData log shows an error but does not indicate cause.
2024-04-17T01-49-27 [INFO]: WDAC Policy Wizard Version # <IP_ADDRESS>
2024-04-17T01-49-27 [INFO]: Session ID:<PHONE_NUMBER>49946775
2024-04-17T01-49-28 [INFO]: **********************************************************************
2024-04-17T01-49-28 [INFO]: Workflow -- Edit Policy Selected
2024-04-17T01-49-28 [INFO]: **********************************************************************
2024-04-17T01-49-28 [INFO]: ==== Edit Workflow Page Initialized ====
2024-04-17T01-49-32 [ERROR]: No Advanced Hunting Records parsed
2024-04-17T01-49-32 [INFO]: **********************************************************************
2024-04-17T01-49-32 [INFO]: Event Parsing Workflow -- DONE
2024-04-17T01-49-32 [INFO]: **********************************************************************

When reviewing the file that I'm attempting to parse compared with the file in previous case https://github.com/MicrosoftDocs/WDAC-Toolkit/issues/336; the one thing I notice is variances in the date format.
My file:

The file from case https://github.com/MicrosoftDocs/WDAC-Toolkit/issues/336; (which uploads fine if you include AuthenticodeHash column):

So this could be the issue; however, unclear to me why the native export from Defender Threat Hunting would differ.

Hi,
After seeing your issue, I compared my MDE Advanced Hunting logs from ~2 months ago with ones I just collected and the timestamp format has changed, but they are still valid DateTime object types
"2024-03-07T21:09:58.8275833Z" -as [System.DateTime]
"Apr 15, 2024 11:09:27 AM" -as [System.DateTime]

Hi, After seeing your issue, I compared my MDE Advanced Hunting logs from ~2 months ago with ones I just collected and the timestamp format has changed, but they are still valid DateTime object types
"2024-03-07T21:09:58.8275833Z" -as [System.DateTime]
"Apr 15, 2024 11:09:27 AM" -as [System.DateTime]

Hi HotCakeX, thanks. My Defender threat hunt export failed to parse, but when I took the dates from columns in the spreadsheet provided in the previous case 336, the parsing then worked fine. Must be something to do with the DateTime object that is exporting from my Defender threat hunt exports - the attached example.
Uploading Book2.csv…

Hi, After seeing your issue, I compared my MDE Advanced Hunting logs from ~2 months ago with ones I just collected and the timestamp format has changed, but they are still valid DateTime object types
"2024-03-07T21:09:58.8275833Z" -as [System.DateTime]
"Apr 15, 2024 11:09:27 AM" -as [System.DateTime]

Hi HotCakeX, thanks. My Defender threat hunt export failed to parse, but when I took the dates from columns in the spreadsheet provided in the previous case 336, the parsing then worked fine. Must be something to do with the DateTime object that is exporting from my Defender threat hunt exports - the attached example. Uploading Book2.csv…

Hi, thank you but i think the file wasn't completely uploaded, can you please upload it again

Book2.csv

The log messages indicate an issue with use of substring method. There are two substring calls in AdvancedHunting.cs
WDAC-Policy-Wizard\app\src\AdvancedHunting.cs:385:            return string.CompareOrdinal(timestampA.Substring(0, TIMESMP_LNG),
WDAC-Policy-Wizard\app\src\AdvancedHunting.cs:386:                                  timestampB.Substring(0, TIMESMP_LNG)) == 0;

These correlate with the two messages in the log file.
What appears to be occurring is a string comparison of the first 22 (TIMESMP_LNG) digits of the time stamp. As the new time stamp format is less than 22 characters long, it throws the error message.

This is why I love open source! Thanks for the investigations, @AlvinOnTech, @bldm0202 and @HotCakeX!
I'm going to chat with the Advanced Hunting team but if the default timestamp has been updated from ISO 8601 (UTC timestamps), I'll have to update some logic here. The precision of the ISO 8601 timestamps were nice to perform the correlation between block/audit events and signature events, since AH is still not picking up WDAC log correlation IDs which would make the correlation trivial

@jgeurten Anytime ^^
This is how I parse the old and new timestamp format:
https://github.com/HotCakeX/Harden-Windows-Security/blob/74094b710f3ff2ec658e12d51ecdacee58d64406/WDACConfig/WDACConfig Module Files/XMLOps/Compare-CorrelatedData.psm1#L71
And I believe EtwActivityId in the AH output is the same as correlation IDs
https://github.com/HotCakeX/Harden-Windows-Security/blob/74094b710f3ff2ec658e12d51ecdacee58d64406/WDACConfig/WDACConfig Module Files/XMLOps/Compare-CorrelatedData.psm1#L52C8-L52C10

@jgeurten @AlvinOnTech @HotCakeX @bldm0202 @AArnott
Hello experts,
Greeting.
I'm support from MDE service. Our cx is facing the issue as well that the timestamp format caused failure to upload Advanced hunting data to WDAC.
Advanced hunting date format:
https://learn.microsoft.com/en-us/answers/questions/387479/timestamp-format-in-ms-atp
MM/DD/YYYY HH:MM:SS
WDAC:
2023-12-11T14:42:09.7617248Z
May I double confirm what is currently recommended solution for cx side？

@bunnymeng please don't spam folks to get attention to an issue. I for one have nothing to do with this repo and can't help you.

Hello Andrew,
This is not spam folks but I'm MDE support with facing same date format issue. Sorry if my question disturb you.
So may I double confirm if there is any expert here to advise current recommended workaround if available？

Hello experts，
May I know if there is any advice about currently recommended solution on the inconsistent date format between MDE and WDAC?

@BunnyMeng while I fix the bug, you can direct the customer to convert these timestamps to ISO 8601 standard


Make a console output in form of a table

Make console output of gathered data in form of a table

Implemented in https://github.com/vdmitriyev/pymultissher/commit/e3ce37a3c8085fc48b2997a3c7eb2c7dd10c51a6


Add Group Filter

This PR adds the capability to limit access to members of a defined LDAP or AD Group.
If the config key is empty, access is not limited.

lgtm