Custom content references

New features for VIZ_IMAGE() plus new content references VIZ_CSV(), VIZ_PDF(), and VIZ_LINK()

When publishing VizAlertsDemo.twb, Tableau looks for file references that live on your personal DropBox account. You can get around that by telling it not to embed credentials, but that's a bit confusing because one of the requirements to subscribe to a View is that the connection use embedded credentials. Any way to make the publishing process easier? Maybe keep all the files local in the Demo folder?

I ran the Advanced Alerts Stress Test on VizAlertsDemo after changing the To / From parameters, and found that it sent me three error emails, with the following content in the body:
Alert was triggered, but unable to process arguments to a content reference with error Found an invalid or non-allowed separator in filename: bar\foo for content reference VIZ_CSV(VizAlertsDemo/Overview|filename=bar\foo)
Alert was triggered, but encountered a failure getting data/image references: Found an invalid or non-allowed separator in filename: bar\foo for content reference VIZ_CSV(VizAlertsDemo/Overview|filename=bar\foo)
VizAlerts was unable to process this view due to the following error: Found an invalid or non-allowed separator in filename: bar\foo for content reference VIZ_CSV(VizAlertsDemo/Overview|filename=bar\foo)
Is this expected? Getting three error emails from a single Advanced Alert test is a bit confusing. It would be my preference that for all errors we can detect up front, we consolidate all of them in a single email and let the owner know about all of them at once. This is done for any issues found with invalid Recipients in the current VizAlerts implementation. That one will use an HTML table to describe each issue and the line in the CSV where it was found, and it'll also attach the CSV in question. This could do the same thing for invalid characters found (though I don't think it should have to do the same for a bad content reference that required exporting Tableau Server content--I say we bail on the first failed attempt for that category of error).

When I run the Advanced Alerts Stress Test on VizAlertsDemo.twb with the To / From parameters reflecting domains that are not allowed by the config file whitelist, VizAlerts logs that it is trying to send the Admin and view Owner a failure email, but it never actually does so. Instead, it logs this error when it tries to send the email:
2016-03-29 08:16:18 - [ERROR] - send_email - Email failed to send: string indices must be integers
2016-03-29 08:16:18 - [ERROR] - view_failure - Unknown error sending exception alert email: string indices must be integers

re: the Dropbox reference. I'd tried to have everything in the same folder but failed, obviously. I can fix that.
re: three emails on failure. I'd seen it and forgotten about it, and then just noticed that the other day, it has something to do with how exceptions are raised vis-a-vis the "email the admin on failure" code that I don't understand. I'll have to spend some quality time with the code (and maybe learn more about exception handling in Python).
re: stress test emails. Which one was being sent? The way I tested that was to filter the view for one at a time because a) they are designed to fail and b) when Tableau generates the trigger view CSV it does its own sort.
Jonathan

Ah, I see--I had been running the entire block of stress tests as a single alert. Sounds like that's not the way to run it properly. In that particular case, I had used Email Sort Order to sort by Test #, so you can repro by doing the same and test_alert-ing the entire view.
One other thing I noticed about the failure emails in another test I did is that the footer, which lists the View URL, is actually listing the URL of the view to be embedded by the VIZ_IMAGE() content reference, rather than the trigger view itself. The two symptoms may be related, I'm not sure, but both should be fixed.

I notice that I can pass characters into the |filename parameter that are not normally valid in a file, such as ":". The character gets preserved in the email format itself, but I notice that Outlook normalizes the name to an OS-friendly filename. As an example, if I attach two of the same files like so:
VIZ_IMAGE(Book4/AccountTotalSpend|filename=testfile:name)
VIZ_IMAGE(Book4/AccountTotalSpend|filename=testfilename)
These don't cause VizAlerts to complain, nor my test mail client PaperCut. If I open the same email in Outlook, I noticed that now both attachments have duplicate filenames. When you then try to "download all attachments", it complains about the file already existing.
Thinking about it, I'm not totally sure we should incorporate logic that tests for invalid filename characters and fail if any are included...since that would probably be a worse outcome than simply having to save each attachment individually. Just wanted to note this behavior because I find that it's interesting. In your testing with other email clients, do you know if they can handle attachments with duplicate filenames?

This isn't a complaint or question, I just wanted to note another use case that is solved by your new code, Jonathan--embedding arbitrary hosted images. I have an alert that uses an HTML  tag and references an image that I host publicly on my Dropbox account. But it's a pain because many folks don't load externally hosted images by default. But if I do host them internally, then users connecting to email without being on the VPN can't access them!
The way this code solves my problem is this: I can now author a Tableau Server view that contains the image I need to "host", then simply reference that in my Advanced Alert! Now the actual image is no longer a simple reference to an image somewhere on the Internet--it's embedded as a PNG, so everyone can see it in all situations. Booyah! :)

re: allowed characters in filenames/dup filenames - There's actually code to prevent duplicate filenames and I'd missed that test case, I hadn't realized the mail program or OS would try to be that smart. I think I want to add a check for allowed characters, I don't think there's much sense in users being able to create something that isn't accurate, and even more so I think it helps avoid potential problems with users trying to do something sneaky with a filesystem. One of the reasons why I like using | as a delimiter is that it prevents pipe problems. I'm thinking of disallowing `~!@#$%^&*()=[]{};:'",<>?/., so the allowed characters for filenames would be any alpha or numeric, -_+, space, and period.
re: the stress tests. a) I'll have to document how to use the Other Tests/stress tests. b) The Email Sort order field doesn't do anything unless Email Consolidate is also used, so either you'll need to hunt through logs or duplicate the error for me to be able to better figure out the problem. (I'll also test on my end when I can). The reason why the Sort Order doesn't do anything w/out consolidation is because there's no way we can control the order of delivery due to caching by email servers, so the only applicable use of sorting is to make sure consolidation happens in the order that we want.
re: failure emails. I'll have to look at that, I agree that the default footer should only be rendering a link to the trigger view.
re: embedding arbitrary hosted images. Have you tried that out yet? I seem to remember something about URL objects not being included in downloaded PNG or PDFs, while image objects are included. I just did a quick test and verified that is the behavior.

re: embedding arbitrary hosted images, I wasn't meaning that Tableau Server would act as a sort of proxy for images hosted on the Internet, but rather that by publishing a view referencing an image included with the workbook, you had a way you could (manually) host images on Tableau Server and therefore physically embed them in your alert. MyImagesWorkbook\cat, MyImagesWorkbook\dog, MyImagesWorkbook\confetti can now be embedded in any alert you like, and the images will always show up for people in their mail client.

Ok, that makes sense.
On Tue, Mar 29, 2016 at 4:50 PM, Matt<EMAIL_ADDRESS>wrote:

re: embedding arbitrary hosted images, I wasn't meaning that Tableau
Server would act as a sort of proxy for images hosted on the Internet, but
rather that by publishing a view referencing an image included with the
workbook, you had a way you could (manually) host images on Tableau Server
and therefore physically embed them in your alert. MyImagesWorkbook\cat,
MyImagesWorkbook\dog, MyImagesWorkbook\confetti can now be embedded in any
alert you like, and the images will always show up for people in their mail
client.
—
You are receiving this because you authored the thread.
Reply to this email directly or view it on GitHub
https://github.com/jdrummey/VizAlerts/pull/2#issuecomment-203096193

re: failure emails: So, I believe this is occurring because view_failure is called each time we're raising an exception in find_viz_refs. That function sends an email each time it's called, so we're sending basically the same email multiple times as the error is being passed back up the stack. I'm testing a change on my local version of your branch that might fix this.
re: string indices must be integers error in send_email: This is when a recipient is invalid (doesn't match domain whitelist, doesn't look like a proper email address, etc). We're trying to attach the CSV of the trigger view so that users can figure out what line(s) caused the issue and caused the alert to fail. Line 643 is passing the csvpath as the Inline attachments, not the appended attachments.

re: failure emails: I made some changes to the error handling that fixed the multiple-emails problem. If you want, I can send them to you, or else I'll just accept the pull request then submit my own changes on that branch of the main repo.
re: string indices must be integers error in send_email: If you don't pass in the attachment on line 643, it works fine. So we just need to find the right way to pass a generic CSV attachment to send_email when it's not really a vizref. I'm going to let you figure that one out.
I'm thinking about building some Python classes for the next release to help improve the readability and coherency of the code. Just thoughts right now, but I'll send you what I have after I think I have something workable.

re: failure emails: Thanks for figuring it out! If you want to accept the
pull request that's probably fastest right now, then the corrections I make
(likely this weekend) can be new requests on the main branch.
re: string indices: I'll figure that one out, I'm betting it's a change in
one line: Based on past experience with this error I'm either passing a
dict that needs to be a list or send_email is expecting a list when it
should be expecting a list.
re: Python classes. I'm not quite seeing how that would work, I don't know
enough about OO. If you think it would make the code more readable I'm all
for it, tho!
On Wed, Mar 30, 2016 at 4:13 PM, Matt<EMAIL_ADDRESS>wrote:

re: failure emails: I made some changes to the error handling that fixed
the multiple-emails problem. If you want, I can send them to you, or else
I'll just accept the pull request then submit my own changes on that branch
of the main repo.
re: string indices must be integers error in send_email: If you don't pass
in the attachment on line 643, it works fine. So we just need to find the
right way to pass a generic CSV attachment to send_email when it's not
really a vizref. I'm going to let you figure that one out.
I'm thinking about building some Python classes for the next release to
help improve the readability and coherency of the code. Just thoughts right
now, but I'll send you what I have after I think I have something workable.
—
You are receiving this because you authored the thread.
Reply to this email directly or view it on GitHub
https://github.com/jdrummey/VizAlerts/pull/2#issuecomment-203613152

re: stress tests email failure: I have a fix for that...to get the attachments to work the attachment code in send_email() requires that each attachment be represented by a dictionary where the minimal dict is {'imagepath': [path to downloaded file to attach']}.
The error was being caused by the send_email() code looking for a dictionary and getting a string because I hadn't updated the view_failure() for the change. I've updated the view_failure() code and added more details to the send_email code.

re: Dropbox references. I deleted the references from the VizAlertsDemo.twb file. However as far as i can tell anytime the twb changes Tableau automatically inserts the exact references so we'll need to keep track of that.
re: filenames. I added the code to only allow alphanumeric, underscore, hyphen, space, period, and plus sign. The regex uses the the $L locale argument to support accented characters in other locales.
I'll be deleting this pull request and creating a new one in a minute.


Remove AppID from Key Transparency (#1077)

Applications can define their own structure for UserID if needed.
Changes authz policies to be per-domain only; supporting finer-grained authz per UserID prefix can be added later if needed.
Also removes all PGP-specific logic for the "pgp" AppID. The application or frontend app server that uses Key Transparency can enforce its own constraints on key formats and serialization.

This is worth another brainstorming chat. I'm trying to keep the following principles in mind:

List collections should end on a plural resourceID. ie. ListRevisions should end on .../revisions.
There's a missing API for fetching a user at a particular revision. ie. .../revisions/{revision_id}
We will probably want to have multiple path segments as part of user_id.
a. formats
b. identifiers
c. kinds

I wonder if we can square some of these circles by pre-determining the number of segments that can go into user_id. ie.
/v1/directories/{directory_id}/users/{user_id=*/*/*}/revisions/{revision_id}
concretely:
/v1/directories/{directory_id}/users/e164/{e164 number}/keys/revisions/{revision_id}

Good points Gary. Rather than pre-determining the number of segments in user_id, I'm leaning towards not allowing forward slashes in user_id and keeping the current URI structure (minus app_id of course).
We can make the change from /history to /revisions in a follow-up PR if desired.


Install Issue

Stuck on page 3/6.
Once I submit the third page I get internal 500 hundred error.

Happy new year @jordan3250!
Could you open _install/data/logs/php_error.log and let me know what you see in there?

It could not generate an error log. Maybe shell_exec isn't functioning properly.

I am using a local host do I need a host name to continue?

https://pastebin.com/dl/Khm8yCW6 Has my php configuration.
Happy new year as well.

So sorry, I really can't help you for that one. I might need more information in order to help you. I can suggest you trying to install pH7CMS on another web hosting... hopefully, it will work next time 🤞


Fixes issues of Topology page breaking when ownerRef is absent

Bug 2266313

/lgtm

/cherry-pick release-4.16

/cherry-pick release-4.16-compatibility


Generated image is defferent than generated on Windows

Hi,
I migrated an application with .NET Core 3.1 from App Service (OS Windows) to docker container (OS linux) in Azure. After it I noticed my application generate other image (QR Code) than earlier.
I didn't change anything in my code, so I think a problem is with your library (System.Drawing.Common is not avalaible on linux).
Windows:

Linux:

I used TT Norms Heavy font family (file with extension ttf).
This is my code in c#
const int _emSize = 120;

            using var qrCodeImage = await GeneratePlainQrCode(model);

            var footerTextHeight = 67;
            var headerTextHeight = 110;
            var leftMargin = 0;
            var textMargin = 0;
            var qrCodeMargin = 10;

            var sizeX = qrCodeImage.Width;
            var sizeY = qrCodeImage.Height + headerTextHeight + footerTextHeight + qrCodeMargin;
            var footerPositionY = headerTextHeight + qrCodeImage.Height + qrCodeMargin;
            var textPositionX = leftMargin + textMargin;
            var bitmap = new Bitmap(sizeX + 2 * leftMargin, sizeY);

            using var graphics = Graphics.FromImage(bitmap);
            using var brush = new SolidBrush(LabelsHelper.DarkBlueColor);
            using var headerStringFormat = new StringFormat { LineAlignment = StringAlignment.Center, Alignment = StringAlignment.Center };
            using var footerStringFormat = new StringFormat { LineAlignment = StringAlignment.Center, Alignment = StringAlignment.Center };
            using var fontCollection = new PrivateFontCollection();

            Rectangle headerRectangle;
            Rectangle mainFooterRectangle;

headerRectangle = new Rectangle(0, 0, bitmap.Size.Width, headerTextHeight);
                graphics.FillRectangle(brush, headerRectangle);
                mainFooterRectangle = new Rectangle(textPositionX, footerPositionY, sizeX, footerTextHeight);

            graphics.FillRectangle(Brushes.Transparent, mainFooterRectangle);

            fontCollection.AddFontFile(LabelsHelper.TTnormsHeavyFontFilePath);

            graphics.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;

            using var font = new Font(fontCollection.Families[0], _emSize, FontStyle.Regular, GraphicsUnit.Pixel);
            using var headerFont = LabelsHelper.FindFont(graphics, model.HeaderText, headerRectangle.Size, font);
            using var mainFooterFont = LabelsHelper.FindFont(graphics, model.MainFooterText, mainFooterRectangle.Size, font);

            LabelsHelper.DrawHeaders(graphics, headerRectangle, headerFont, headerStringFormat, Brushes.White, model);
            LabelsHelper.DrawQrCode(graphics, qrCodeImage, leftMargin, headerTextHeight + qrCodeMargin);
            LabelsHelper.DrawFooters(graphics, model, mainFooterRectangle, mainFooterFont, footerStringFormat, brush);

            return bitmap;

Aside from the issue with font the text is also different (char -> charr). Are you sure the font files are deployed correctly to the right path?

yes, in other case I could get an exception because of it

Text is different because I have 2 environments and compere them

Can you confirm the version of libgdiplus installed in the Docker environment?

Yes, I will do it tomorrow morning.
I noticed that all imported fonts have the same name 'TT Norms' without Bold, Extra Heavy etc.
Maybe this is a problem?

this is my command which install libgdiplus in container
RUN apt-get update
&& apt-get install -y --no-install-recommends libgdiplus libc6-dev
&& apt-get clean
&& rm -rf /var/lib/apt/lists/*

That's really old one. It had a bug with loading custom fonts.

could you send me proper command to install the latest?

The newer package is available only on Debian sid or through Mono package repositories. I suppose you would need to follow the instructions at https://www.mono-project.com/download/stable/#download-lin-debian.

thanks, it fixed my issue :)


Move tcod-rs from std::{old_io, old_path} -> std::{io, path}

Seeing as Cargo and various other prominent projects have begun the migration onto the new IO and Path libraries, it seems like a good time for us to do the same.
I was as careful as I could be, but it'd be great if you could have a quick look over.
This is also a breaking change for our users - our public API takes old_path::Path objects so users will need to migrate onto the newer path API also.

Brilliant! It looks fine and appears to be correct in my testing. Merging :-)


Fix Tree's background focus outline displaying behind section headings

This partially addresses https://github.com/godotengine/godot/issues/48575.
Preview

This also fixes the issue with the text itself:

I don't know if this is safe enough to cherrypick for 3.3, it might be considered breaking compat for Tree if some users expect the original behavior as a feature.

I don't know if this is safe enough to cherrypick for 3.3, it might be considered breaking compat for Tree if some users expect the original behavior as a feature.

This is a minor bug, so it's fine to cherry-pick this only for 3.x if you want.

Thanks!

Cherry-picked for 3.4.


fix: airplane animation

I have read the CONTRIBUTING.md file.
YES
What kind of change does this PR introduce?
fix
What is the new behavior?

svg tag remove animation, path (airplane) add animation x,y,scale (scale is newly added, because if only x,y changes, the airplane path will be partially blocked)
use viewBox="0 0 24 24", i think we should not change this attribute. the viewBox width height attributes of the most of icons's svg tag  should be fixed. there are only two icons that are exceptions now, flask and syringe, they are viewBox="0 0 512 512".
change animation direction of line by pathOffset
use animate and normal key name

love it, thanks for fixing this up!


Consistency of provider specs

A provider of a limited volume (like an Hdf5Source) should map VolumeType to a Roi in ProviderSpec.volume_rois. If an unlimited volume is provided (like in RandomLocation or Pad with infinite padding), ProviderSpec.volume_rois should map VolumeType to None.
Same goes for point_rois.
Check that this is done for all geometry changing nodes:

[ ] caffe.Train
[ ] caffe.Process
[ ] AddGtAffinities
[ ] Chunk
[ ] DvidSource
[ ] ElasticAugment
[ ] ExcludeLabels
[ ] Hdf5Source
[ ] Pad
[ ] RandomLocation
[ ] RandomProvider (Provide intersection of upstream ROIs)
[ ] SimpleAugment

This issue became obsolete as of 37565ae5f08144d49baf2f19e5cf5d0474bd16dc.


sf project retrieve start not working with NavigationMenu metadata type

Summary
I have a simple package.xml file that contains the NavigationMenu metadata type with a wildcard. I get an error when I try to retrieve when the package.xml file specifies any version greater than 53.0. It works with 53.0.
Steps To Reproduce

Use a package.xml file with the following contents to retrieve. You can change the version to any valid version greater than 53.0 and it will fail.

<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">

    <types>
        <name>NavigationMenu</name>
        <members>*</members>
    </types>

    <version>54.0</version>

</Package>

Get an error:

sf project retrieve start -x ./manifest/package.xml
Retrieving v54.0 metadata from<EMAIL_ADDRESS>using the v60.0 SOAP API
Preparing retrieve request... Failed
Error (1): An unexpected error occurred. Contact Salesforce Customer Support for help.

Change the package xml file's version to 53.0 and repeat the retrieve command and see that it succeeded.

sf project retrieve start -x ./manifest/package.xml
Retrieving v53.0 metadata from<EMAIL_ADDRESS>using the v60.0 SOAP API
Preparing retrieve request... Succeeded

Retrieved Source

Expected result
The expectation is that it works with versions greater than 53.0.
Actual result
It does not work with versions greater than 53.0.
System Information
On a mac, with bash from the VS Code terminal:
ps $$
  PID   TT  STAT      TIME COMMAND
29232 s002  Ss     0:00.26 /bin/bash --init-file /Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/contrib/terminal/browser/me

{
  "architecture": "darwin-arm64",
  "cliVersion"<EMAIL_ADDRESS>  "nodeVersion": "node-v20.11.1",
  "osVersion": "Darwin 22.1.0",
  "rootPath": "/Users/peter.knolle/.local/share/sf/client/2.32.8-aa146b8",
  "shell": "bash",
  "pluginVersions": [
    "@oclif/plugin-autocomplete 3.0.12 (core)",
    "@oclif/plugin-commands 3.2.0 (core)",
    "@oclif/plugin-help 6.0.17 (core)",
    "@oclif/plugin-not-found 3.0.14 (core)",
    "@oclif/plugin-plugins 4.3.2 (core)",
    "@oclif/plugin-search 1.0.20 (core)",
    "@oclif/plugin-update 4.2.0 (core)",
    "@oclif/plugin-version 2.0.14 (core)",
    "@oclif/plugin-warn-if-update-available 3.0.13 (core)",
    "@oclif/plugin-which 3.1.3 (core)",
    "@salesforce/cli 2.32.8 (core)",
    "apex 3.0.26 (core)",
    "auth 3.3.21 (core)",
    "data 3.1.7 (core)",
    "deploy-retrieve 3.2.27 (core)",
    "info 3.0.28 (core)",
    "limits 3.1.13 (core)",
    "marketplace 1.0.26 (core)",
    "org 3.4.1 (core)",
    "packaging 2.1.11 (core)",
    "schema 3.1.7 (core)",
    "settings 2.0.31 (core)",
    "sobject 1.1.17 (core)",
    "source 3.1.18 (core)",
    "telemetry 3.1.15 (core)",
    "templates 56.0.21 (core)",
    "trust 3.3.16 (core)",
    "user 3.3.1 (core)"
  ]
}

Additional information
Right clicking on the navigationMenus folder in VS code and retrieving from the org works.
I also deleted all local XML files under navigationMenus and attempted to run the command again and it still did not work.
The metadata retrieve command does not work either with versions above 53.0.
sf project retrieve start --metadata NavigationMenu
Retrieving v60.0 metadata from<EMAIL_ADDRESS>using the v60.0 SOAP API
Preparing retrieve request... Failed
Error (1): An unexpected error occurred. Contact Salesforce Customer Support for help.

If I change the sfdx-project.json to 53.0 the --metadata NavigationMenu does work.

If you run the command appending --json it will include a stack trace that we can use to look up the server side error.  Customer support is better equipped to handle this though so I would contact them.  This is a server side issue versus a CLI issue.

{
  "status": 0,
  "result": {
    "done": true,
    "errorMessage": "An unexpected error occurred. Contact Salesforce Customer Support for help.",
    "errorStatusCode": "UNKNOWN_EXCEPTION",
    "id": "09S1m000001SjWVEA0",
    "status": "Failed",
    "success": false,
    "fileProperties": [],
    "messages": [],
    "files": []
  },
  "warnings": []
}

OK. I'll open a support case. Thanks for the insight.

server side issue


simple_trainer_mcmc.py doesn't reproduce the evaluation results on Mip360 dataset

Hi, I wanted to reproduce the evaluation results as stated in this commit, https://github.com/nerfstudio-project/gsplat/commit/1cc3d22d2e5455988b06e1fc8b7c00e3ea5f32f2, on Mip360 data. But I cannot reproduce them.
Right now, the metrics for the 7 scenes of Mip360 are as follows.

MCMC looks a lot worse than Splatfacto.
I am simply using the simple_trainer_mcmc.py with default settings (I didn't change any config params) and my command is shown below:
python simple_trainer_mcmc.py \
    --data_dir mipnerf360_data/${scene}/ --data_factor 4 \
    --result_dir mipnerf360_data/${scene}/3dgsmcmc_4x \
    --test_every 8 \
    --disable_viewer

Could you point to me how I can reproduce the results? Thank you!
Here are some example rendering comparisons between Splatfacto (left) and MCMC (right).

Script to run benchmark. I can also make this into a PR if you want.
# Benchmark script

import glob
import os
import time
from concurrent.futures import ThreadPoolExecutor
from dataclasses import dataclass, field

import GPUtil

@dataclass
class BenchmarkConfig:
    """Benchmark config"""

    # trainer to run
    trainer: str = "simple_trainer.py"
    # path to data
    data_dir: str = "data/360_v2"
    # scenes to run
    scenes: set = (
        "bicycle",
        "bonsai",
        "counter",
        "garden",
        "stump",
        "kitchen",
        "room",
    )
    # downscale factors
    factors: set = (4, 2, 2, 4, 4, 2, 2)
    # exclude gpus
    excluded_gpus: set = field(default_factory=set)
    # result directory
    result_dir: str = "results/baseline"
    # dry run, useful for debugging
    dry_run: bool = False
    # extra model specific configs
    model_configs: dict = field(default_factory=dict)

# Configurations to run
baseline_config = BenchmarkConfig()
absgrad_config = BenchmarkConfig(
    result_dir="results/absgrad",
    model_configs={"--absgrad": "", "--grow_grad2d": 0.0006},
)
antialiased_config = BenchmarkConfig(
    result_dir="results/antialiased", model_configs={"--antialiased": ""}
)
mcmc_config = BenchmarkConfig(
    trainer="simple_trainer_mcmc.py",
    result_dir="results/mcmc",
)

configs_to_run = [
    baseline_config,
    mcmc_config,
    # absgrad_config,
    # antialiased_config,
]

def train_scene(gpu, scene, factor, config):
    """Train a single scene with config on current gpu"""
    # additional user set model configs
    model_config_args = " ".join(f"{k} {v}" for k, v in config.model_configs.items())

    # train without eval
    cmd = f"OMP_NUM_THREADS=4 CUDA_VISIBLE_DEVICES={gpu} python {config.trainer} --eval_steps -1 --disable_viewer --data_factor {factor} --data_dir {config.data_dir}/{scene} --result_dir {config.result_dir}/{scene} {model_config_args}"

    print(cmd)
    if not config.dry_run:
        os.system(cmd)

    # eval and render for all the ckpts
    ckpts = glob.glob(f"{config.result_dir}/{scene}/ckpts/*.pt")
    for ckpt in ckpts:
        cmd = f"OMP_NUM_THREADS=4 CUDA_VISIBLE_DEVICES={gpu} python {config.trainer} --disable_viewer --data_factor {factor} --data_dir {config.data_dir}//{scene} --result_dir {config.result_dir}/{scene} --ckpt {ckpt} {model_config_args}"
        print(cmd)
        if not config.dry_run:
            os.system(cmd)

    return True

def worker(gpu, scene, factor, config):
    """This worker function starts a job and returns when it's done."""
    print(f"Starting {config.trainer} job on GPU {gpu} with scene {scene}\n")
    train_scene(gpu, scene, factor, config)
    print(f"Finished {config.trainer} job on GPU {gpu} with scene {scene}\n")

def dispatch_jobs(jobs, executor, config):
    future_to_job = {}
    reserved_gpus = set()  # GPUs that are slated for work but may not be active yet

    while jobs or future_to_job:
        # Get the list of available GPUs, not including those that are reserved.
        all_available_gpus = set(
            GPUtil.getAvailable(order="first", limit=10, maxMemory=0.1, maxLoad=0.1)
        )
        available_gpus = list(all_available_gpus - reserved_gpus - config.excluded_gpus)

        # Launch new jobs on available GPUs
        while available_gpus and jobs:
            gpu = available_gpus.pop(0)
            job = jobs.pop(0)
            future = executor.submit(
                worker, gpu, *job, config
            )  # Unpacking job as arguments to worker
            future_to_job[future] = (gpu, job)
            reserved_gpus.add(gpu)  # Reserve this GPU until the job starts processing

        # Check for completed jobs and remove them from the list of running jobs.
        # Also, release the GPUs they were using.
        done_futures = [future for future in future_to_job if future.done()]
        for future in done_futures:
            job = future_to_job.pop(
                future
            )  # Remove the job associated with the completed future
            gpu = job[0]  # The GPU is the first element in each job tuple
            reserved_gpus.discard(gpu)  # Release this GPU
            print(f"Job {job} has finished., releasing GPU {gpu}")
        # (Optional) You might want to introduce a small delay here to prevent this loop from spinning very fast
        # when there are no GPUs available.
        time.sleep(5)

    print("All jobs have been processed.")

def main():
    """Launch batch_configs in serial but process each config in parallel (multi gpu)"""

    for config in configs_to_run:
        # num jobs = num scenes to run for current config
        jobs = list(zip(config.scenes, config.factors))

        # Run multiple gpu train scripts
        # Using ThreadPoolExecutor to manage the thread pool
        with ThreadPoolExecutor(max_workers=8) as executor:
            dispatch_jobs(jobs, executor, config)

if __name__ == "__main__":
    main()

I think hardcoding the data-factor as 4 is wrong. The data-factors should be (4, 2, 2, 4, 4, 2, 2) for scenes "bicycle","bonsai", "counter", "garden", "stump", "kitchen", "room" respectively.

@maturk Thank you very much for your prompt response and providing the benchmark script! I did get the same results using the above benchmark script.


How to keep embedded dashboard up-to-date?

I have an application that allows users to embed a Power BI dashboard. I've noticed that some changes, such as moving tiles, are automatically reflected in the embedded dashboard, but others, like removing a tile, are not. Is there a method to ensure the embedded dashboard stays in sync with the Power BI version, including all changes?
Thank you!

Use reload() API and it reloads the embed using the existing configuration.
Refer to powerbi-client-dashboard-reload.

Thanks. Is there any documentation somewhere about what is synced automatically, without calling reload? Like the thing I mentioned, moving around tiles are reflected without a reload

Changes like moving tiles usually synced automatically in the embedded dashboard without needing to call reload(). However, more significant updates, such as adding or removing tiles, usually require calling the reload() API to reflect those updates in the embedded dashboard. As for the specific details—there's no documentation that lists which changes sync automatically and which require a reload.


SHA256 and more?

Can you add the SHA256 support?
Please note:

RFC7376: Problems with Session Traversal Utilities for NAT (STUN) Long-Term Authentication for Traversal Using Relays around NAT (TURN): https://tools.ietf.org/html/rfc7376
RFC7635: Session Traversal Utilities for NAT (STUN) Extension for Third-Party Authorization: https://tools.ietf.org/html/rfc7635
RFC8489: Session Traversal Utilities for NAT (STUN): https://tools.ietf.org/html/rfc8489
RFC8760: The Session Initiation Protocol (SIP) Digest Access Authentication Scheme: https://tools.ietf.org/html/rfc8760
https://msdn.microsoft.com/en-us/library/dd949398(v=office.12).aspx

SHA-256
SHA-512/256

Do you have a business need for all these asks where such extensions would enable a deployment that is otherwise impossible?  Or is this more of a "it would cool if you did this"?


No operation on a Netgear R7000 router?

I assume the subject is the problem? Since there is evidence the app works. But not for me on either my Pixel LS or an Asus C200, both connected WirelssAC. No share name will be resolved period, The "rope"/search returns nothing, etc. I have AndSMB on an Android phone for which my 4 Windows computers and their shares plus the Netgear Readyshare NAS (a HDD in a USB enclosure connected USB 3.0) are available everything to everybody, so I must understand something about how this works?Definition of Host Name, Share Name, Computer Name, Log-on Credentials,etc. I thought until now!
DES

@des421 Could you check a debug log output on the console tab of the DevTools by using the steps? https://github.com/yoichiro/chromeos-filesystem-cifs/wiki/How-to-Capture-the-Console-Log-of-DevTools

The example shown is for the
      "File System for Dropbox".

      My problem is with the SMB/CIFS/Windows(R) extension, which
      includes no such "background page" link?

      Once just now SMB did Find the "R7000" and display it's IP
      address, but would not accept the Router's Logon info used to
      access it's setup. I'm trying to access the Readyshare NAS, a
      USB 3.0 connected HDD, that has no Logon credentials, is just
      seen as an open network share. In repeated tries SMB has only
      even found the R7000 once, with 4 other Windows computers with
      shares on the network that have never been discovered?

      DES

On 8/8/2015 11:51 PM, Yoichiro Tanaka
  wrote:

  @des421 Could you check a debug log
    output on the console tab of the DevTools by using the steps? https://github.com/yoichiro/chromeos-filesystem-cifs/wiki/How-to-Capture-the-Console-Log-of-DevTools
  —
    Reply to this email directly or view
      it on GitHub.

@des421 The way to check the debug log is the same as the Dropbox app. I cannot understand your issue, therefore, you should provide the log to me.

I'm learning... you've left out a "small" step. To be able to supply the
log you want requires the Chromebook to be in Developer's Mode. To put the
Chromebook in Developer's Mode requires resetting it, clearing all user
data, and is apparently unsupported by Google. Thanks, but no thanks. I'll
wait for something that works.
DES
On Sun, Aug 9, 2015 at 4:15 PM, Yoichiro Tanaka<EMAIL_ADDRESS>wrote:

@des421 https://github.com/des421 The way to check the debug log is the
same as the Dropbox app. I cannot understand your issue, therefore, you
should provide the log to me.
—
Reply to this email directly or view it on GitHub
https://github.com/yoichiro/chromeos-filesystem-cifs/issues/81#issuecomment-129241090
.

I cannot fix your issue without a detail information. Close this issue. If you can get some information (ex. DevTools Console log), please a new issue with them.

@des421: Like you, my Chromebook is NOT in Developers Mode, and I'd strongly prefer to avoid Developers Mode.
That said, I can capture the DevTools console output just fine, following the instructions from @yoichiro. I'm curious why it's not working for you. From my experience, following those instructions does NOT require the Chromebook to be in Developers Mode.
When I browse chrome://extensions, and find the SMB/CIFS extension, it shows it's at version 1.5.0 and there is a "background page" link, as shown in the screenshot in the instructions from @yoichiro.
Is the extension version 1.5.0 for you? Is there definitely no "background page" link? Can you share a screenshot of that portion of the Extensions settings page so we can see what you're seeing?

I have 2 Chromebooks, An Asus C200 and a Pixel LS*, *which both behave
exactly the same. If a check block "Developer mode" at the top of the
Extensions page is checked then a "background page (inactive)" link is
shown for SMB/CIFS (and other extensions). Which when clicked shows a new
window including the "Console" tab which is totally empty, as would be
expected with the "inactive" indication. I suggest your Chromebook is
actually in Developer's Mode?
DES
On Thu, Aug 13, 2015 at 5:27 PM, David Kewley<EMAIL_ADDRESS>wrote:

@des421 https://github.com/des421: Like you, my Chromebook is NOT in
Developers Mode, and I'd strongly prefer to avoid Developers Mode.
That said, I can capture the DevTools console output just fine, following
the instructions from @yoichiro https://github.com/yoichiro. I'm
curious why it's not working for you. From my experience, following those
instructions does NOT require the Chromebook to be in Developers Mode.
When I browse chrome://extensions, and find the SMB/CIFS extension, it
shows it's at version 1.5.0 and there is a "background page" link, as shown
in the screenshot in the instructions from @yoichiro
https://github.com/yoichiro.
Is the extension version 1.5.0 for you? Is there definitely no "background
page" link? Can you share a screenshot of that portion of the Extensions
settings page so we can see what you're seeing?
—
Reply to this email directly or view it on GitHub
https://github.com/yoichiro/chromeos-filesystem-cifs/issues/81#issuecomment-130866120
.

@des421 : Ah, it appears there are two different senses of "Developer Mode". There's Developer Mode for the Chromebook as a whole, which as you wrote earlier, wipes your data, is unsupported, etc. Like you, I want to avoid this.
Then there's the "Developer Mode" checkbox on the Extensions page, which is named the same but is entirely different, it appears to me.
I have the DM checkbox on the Extension page checked, just as you suggested I did. I've had it checked so long, I forgot it existed. :) Perhaps @yoichiro should add an item to his instructions pointing out that this needs to be checked if it isn't already. I hadn't realized it must be checked in order to follow his debug log instructions.
But checking that box did not wipe my data, and does not give me the scary boot time warning that full Chrome OS DM would give according to my reading. It seems perfectly safe for you to use, dunno if you agree.

I was suggesting your
      Chromebook was "actually" in Developer's Mode. Not that the
      Developer Mode check box on the Extensions page was checked
      (which it would have to be to get the background page link
      displayed). Two different things. As I said, the background
      page link indicated "inactive" for me because I am not actually
      in DM, only the check box was checked. The results of opening
      the background page link when inactive are zero, blank, no
      logs, etc.

On 8/13/2015 8:53 PM, David Kewley
  wrote:

  @des421 : Ah, it appears there are
    two different senses of "Developer Mode". There's Developer Mode
    for the Chromebook as a whole, which as you wrote earlier, wipes
    your data, is unsupported, etc. Like you, I want to avoid this.
  Then there's the "Developer Mode" checkbox on the Extensions
    page, which is named the same but is entirely different, it
    appears to me.
  I have the DM checkbox on the Extension page checked, just as
    you suggested I did. I've had it checked so long, I forgot it
    existed. :) Perhaps @yoichiro
    should add an item to his instructions pointing out that this
    needs to be checked if it isn't already. I hadn't realized it
    must be checked in order to follow his debug log instructions.
  But checking that box did not wipe my data, and does not give
    me the scary boot time warning that full Chrome OS DM would give
    according to my reading. It seems perfectly safe for you to use,
    dunno if you agree.
  —
    Reply to this email directly or view
      it on GitHub.

My Chromebook is NOT in full Developer Mode. Here's why I'm confident that's the case: a) I never put it in Developer Mode (it requires very specific, non-obvious, warning-laden steps that I have never executed), and b) from my reading about Developer Mode, I'd see a boot-time warning if my Chromebook was in Developer Mode, but I don't see any such warning. So being in DM is NOT the reason why it works for me but not for you. Something else is going on.
I agree that checking the "Developer Mode" checkbox on the Extensions page is necessary to see the "background page" link. I hadn't realized that before -- thanks for pointing that out.
I agree that the link will say "background page (inactive)" instead of "background page" if you have no active mount at that time. And I agree that if you click on "background page (inactive)", then go to the Console tab, there will be no logs there, since it's inactive.
But, you can click on "background page (inactive)", open up the (presently empty) Console tab, then make an SMB/CIFS mount attempt -- after you click the "MOUNT" button in the SMB/CIFS extension's dialog box, you should see logs appear in the Console. This is what I see happen.
If you do all that and still don't see the logs, then I'm curious why it works for me but not for you.

And you're correct, "stuff"
      appears (if you get things in the right order)! Both on the
      background page link and a new windows.html (whatever that is)
      link.  OK, on the console tab is only a couple lines that
      pretty much agree with the unable to mount message but there's
      all kinds of whatever on the other tabs. How does one Save all
      this, or what's wanted, for submission? He closed my issue and
      I've deleted the directions in frustration. We have a
      translation problem here that reminds me of talking with some
      Penguins about Ubuntu back at v6.0.

      I freely admit to not knowing what's going on here. The app
      has only ever once recognized an entity "R7000" which
      apparently was the HTML router logon for configuration.
      Otherwise it can't serch out anything on this network. The
      router has a USB 3.0 connected HDD by the name of Readyshare,
      which is open, no credentials, and shows up on all the Windows
      computers network discovery (XP, W7, & W8.1). Each of 4
      computers has at least one network share which all of the
      other 3 can see without any problem. And SMB/CIFS can't find
      anything on the LAN period? I even have an Android app on my
      phone, AndSMB, that sees all of this without problem? I keep
      hoping it's just something dumb I'm missing? Does it actually
      work for you?

      DES

On 8/14/2015 2:59 PM, David Kewley
  wrote:

  My Chromebook is NOT in full Developer Mode. Here's why I'm
    confident that's the case: a) I never put it in Developer Mode
    (it requires very specific, non-obvious, warning-laden steps
    that I have never executed), and b) from my reading about
    Developer Mode, I'd see a boot-time warning if my Chromebook was
    in Developer Mode, but I don't see any such warning. So being in
    DM is NOT the reason why it works for me but not for you.
    Something else is going on.
  I agree that checking the "Developer Mode" checkbox on the
    Extensions page is necessary to see the "background page" link.
    I hadn't realized that before -- thanks for pointing that out.
  I agree that the link will say "background page (inactive)"
    instead of "background page" if you have no active mount at that
    time. And I agree that if you click on "background page
    (inactive)", then go to the Console tab, there will be no logs
    there, since it's inactive.
  But, you can click on "background page (inactive)", open up the
    (presently empty) Console tab, then make an SMB/CIFS mount
    attempt -- after you click the "MOUNT" button in the SMB/CIFS
    extension's dialog box, you should see logs appear in the
    Console. This is what I see happen.
  If you do all that and still don't see the logs, then I'm
    curious why it works for me but not for you.
  —
    Reply to this email directly or view
      it on GitHub.

@des421 : Sorry the following is so long. I tried to keep it as short and organized as I could.
Stepping back from how to get the troubleshooting logs (more on that further below), let's take a look at your original issue.
If I understand correctly, I think that your main original issue is that magnifying glass in this app (Search for SMB servers on the local network) doesn't work for you. Is that right?
Indeed, I found today that the Search / magnifying glass wasn't working for me -- my NAS did not show up in the search results. Then I rebooted my Chromebook, and now Search shows my NAS.
For this failure of the magnifying glass, followed by success after reboot, I suspect the root cause is in Chrome, not the SMB/CIFS app. I think it'll be fixed in Chrome 45, coming out soon. I don't think there's anything @yoichiro can do until Chrome 45 is released in the Stable channel. See the indented gray text at the bottom for some technical details.
I suggest you try the following: Reboot your Chromebook, then very soon after reboot, try the Search (magnifying glass), and see if your servers show up now.
If that fails, try to find the IP address for one (or more) of your servers using some other method, enter it manually in the "Server Host Name / IP Address" field, and make sure you fill in a valid User Name and Password for that server. Filling in these three fields (plus the already filled in Server Port Number field = 445) works for me against my NAS.
If you already tried this before, try it again at least once, just to see if it works this time. If it still doesn't work, then maybe something else is going on, and it may be worthwhile to capture debug logs like we've been discussing.
Could you let us know whether the Search functionality works after rebooting your Chromebook, and whether manually entering the IP address (and username and password) for one of your servers works?
If you'd like to capture logs for further troubleshooting, here are some suggestions.
Take a new look at @yoichiro's instructions, particularly step 3:
https://github.com/yoichiro/chromeos-filesystem-cifs/wiki/How-to-Capture-the-Console-Log-of-DevTools
Also, when he closed this bug, he said that if you can get further diagnostic info (e.g. a text copy or screenshot of the Console screen, as in Step 3 of the above link), you can open a new issue and provide that new diagnostic data, e.g. paste the text or attach the screenshot in your issue-opening comment. I suspect he won't be following this closed issue.

More technical description follows:
I suspect that the underlying root cause of the magnifying glass failure that I'm seeing is fixed in this Chrome patch for the ``chrome.mdns``` API:
https://chromium.googlesource.com/chromium/src/+/261ed0511eea1e3d10c5daa4dce563d1dfc7b5fc
See also this bug report, which this patch says it addresses -- it seems to describe behavior similar to what I'm seeing:
https://code.google.com/p/chromium/issues/detail?id=504477
From what I can see, this patch is applied in Chrome version 45 (and 46), but not version 44. So once v45 goes Stable, I suspect the SMB/CIFS app's magnifying glass may work more reliably.
I'm not sure, but it might help if if @yoichiro adds functionality for the new forceDiscovery method documented here: https://developer.chrome.com/apps/mdns, which appears in v45.
In order to see the chrome.mdns API in use in this SMB/CIFS app, I needed to first disable then re-enable this app in the chrome://extensions page, then click on the background page link, then open the console tab. Now there are one or more log entries regarding chrome.mdns at the top of the console.
Now when I do this, I see that chrome.mdns is reporting my NAS to the app (and indeed it shows up when I click the magnifying glass):

Before the reboot, I was only seeing the "Array[0]" line, not the "Array[1]" line, which indicates that chrome.mdns was not reporting to the app that my NAS was announcing itself using mDNS. In fact the NAS has been reporting its presence the whole time using mDNS, it's just that chrome.mdns wasn't telling the SMB/CIFS app about it. Again, I suspect this is fixed in Chrome 45.

After re-booting the
      Chromebook the SMB/CIFS Search then finds only the "R7000",
      not the attached NAS or any of the Windows computers shares
      online at the time. The router setup is below. The router is
      at <IP_ADDRESS> with a Username of "admin" and a known
      non-default password, but none of that applies to the
      connected shares. Trying to connect to it via it's IP &
      credentials gets closer in that at least "something" happens,
      but results in an "NT- Access-Denied" error. Any of the below
      share associated names just can't be resolved. Not too
      surprisingly as neither are they discoverable. Windows XP has
      a direct connection to "\\Readyshare\T_Drive" as it was setup
      that way initially, it allows manual pointing to network
      shares. Windows 7 & 8.1 just discover "Readyshare"
      themselves with "T_Drive" as a subfolder. I appreciate your
      continued support, and will probably further diddle with this
      later. But am not too enthused with having to work at it. The
      whole idea behind the Chromebooks is "not" to have play
      Windows with them. All this is supposedly a work in progress
      inside Chrome OS anyway. As a result of this I have discovered
      how to Copy & Paste (in both Chrome OS and Android) now,
      and more. I'll get there. Thanks.

              Network/Device Name :

              Workgroup :

              Enable
              Access Method
              Link
              Port

              Network
                Connection
              \\readyshare
              -

              HTTP
              http://readyshare.routerlogin.net/shares
              80

              HTTPS
                (via internet)
              https://<IP_ADDRESS>/shares

              FTP
              ftp://readyshare.routerlogin.net/shares
              21

              FTP (via
                internet)
              ftp://<IP_ADDRESS>/shares

      Available
            Network Folders

              Share
                  Name
              Read
                  Access
              Write
                  Access
              Folder
                  Name
              Volume
                  Name
              Total
                  Space
              Free
                  Space

              \\readyshare\T_Drive
              All
                - no password
              All
                - no password
              T:\
              NAS
              298.1G
              193.6G

              Edit

On 8/15/2015 1:58 AM, David Kewley
  wrote:

  @des421 : Sorry the following is so
    long. I tried to keep it as short and organized as I could.
  Stepping back from how to get the troubleshooting logs (more on
    that further below), let's take a look at your original issue.
  If I understand correctly, I think that your main original
    issue is that magnifying glass in this app (Search for SMB
    servers on the local network) doesn't work for you. Is that
    right?
  Indeed, I found today that the Search / magnifying glass wasn't
    working for me -- my NAS did not show up in the search results.
    Then I rebooted my Chromebook, and now Search shows my NAS.
  For this failure of the magnifying glass, followed by success
    after reboot, I suspect the root cause is in Chrome, not the
    SMB/CIFS app. I think it'll be fixed in Chrome 45, coming out
    soon. I don't think there's anything @yoichiro
    can do until Chrome 45 is released in the Stable channel. See
    the indented gray text at the bottom for some technical details.
  I suggest you try the following: Reboot your Chromebook, then
    very soon after reboot, try the Search (magnifying glass), and
    see if your servers show up now.
  If that fails, try to find the IP address for one (or more) of
    your servers using some other method, enter it manually in the
    "Server Host Name / IP Address" field, and make sure you fill in
    a valid User Name and Password for that server. Filling in these
    three fields (plus the already filled in Server Port Number
    field = 445) works for me against my NAS.
  If you already tried this before, try it again at least once,
    just to see if it works this time. If it still doesn't work,
    then maybe something else is going on, and it may be worthwhile
    to capture debug logs like we've been discussing.
  Could you let us know whether the Search functionality works
    after rebooting your Chromebook, and whether manually entering
    the IP address (and username and password) for one of your
    servers works?
  If you'd like to capture logs for further troubleshooting, here
    are some suggestions.
  Take a new look at @yoichiro's
    instructions, particularly step 3:
  https://github.com/yoichiro/chromeos-filesystem-cifs/wiki/How-to-Capture-the-Console-Log-of-DevTools
  Also, when he closed this bug, he said that if you can get
    further diagnostic info (e.g. a text copy or screenshot of the
    Console screen, as in Step 3 of the above link), you can open a
    new issue and provide that new diagnostic data, e.g. paste the
    text or attach the screenshot in your issue-opening comment. I
    suspect he won't be following this closed issue.

    More technical description follows:
    I suspect that the underlying root cause of the magnifying
      glass failure that I'm seeing is fixed in this Chrome patch
      for the chrome.mdns` API:
    https://chromium.googlesource.com/chromium/src/+/261ed0511eea1e3d10c5daa4dce563d1dfc7b5fc
    See also this bug report, which this patch says it addresses
      -- it seems to describe behavior similar to what I'm seeing:
      https://code.google.com/p/chromium/issues/detail?id=504477
    From what I can see, this patch is applied in Chrome version
      45 (and 46), but not version 44. So once v45 goes Stable, I
      suspect the SMB/CIFS app's magnifying glass may work more
      reliably.
    I'm not sure, but it might help if if @yoichiro adds functionality for
      the new forceDiscovery method documented here: https://developer.chrome.com/apps/mdns,
      which appears in v45.
    In order to see the chrome.mdns API in use in
      this SMB/CIFS app, I needed to first disable then re-enable
      this app in the chrome://extensions page, then click on the
      background page link, then open the console tab. Now there are
      one or more log entries regarding chrome.mdns at
      the top of the console.
    Now when I do this, I see that chrome.mdns is
      reporting my NAS to the app (and indeed it shows up when I
      click the magnifying glass):

    Before the reboot, I was only seeing the "Array[0]" line, not
      the "Array[1]" line, which indicates that chrome.mdns
      was not reporting to the app that my NAS was announcing itself
      using mDNS. In fact the NAS has been reporting its presence
      the whole time using mDNS, it's just that chrome.mdns
      wasn't telling the SMB/CIFS app about it. Again, I suspect
      this is fixed in Chrome 45.

  —
    Reply to this email directly or view
      it on GitHub.

OK @des421 let's let this rest for now. If you speak up on this Github issue again, I'll hear it and do my best to respond.
One thing I'm realizing today: this SMB/CIFS app is using mDNS to find SMB shares, and this works both for your R7000-based NAS functionality, and my Synology NAS. Both of those SMB servers announce themselves using mDNS. But apparently Windows doesn't announce its SMB shares using mDNS (at least by default), so this app is not discovering those Windows shares. I see this (mis)behavior as well. No surprise it doesn't work, in retrospect. The Chrome 45 fix I mentioned won't fix this, since it's simply a fix to mDNS.
I'm not super clear on the details, but Windows has its own ages-old protocol for announcing and finding shares, and this app doesn't use that method. This is why we're not seeing our Windows shares. But you should still be able to connect to those shares by manually specifying the server IP address. This works for me to my Windows 7 box using this app.
In all cases, unless the share allows anonymous connection (and I'm not clear on how that works), you'll need a valid username and password that are allowed to use the shares. I suppose something is funny in this area with your attempts to connect to your R7000 share, though I'm not sure what exactly.
As for the R7000 versus ReadyNAS names, I wouldn't worry about that too much. I believe that's a difference in the name announced via mDNS versus the name announced by the Windows protocols. For the sake of this SMB/CIFS app, all that matters is that when you select "R7000", it fills in the correct IP address, which it sounds like does indeed happen.
Glad to hear the app's Search functionality found your R7000 (temporarily?) immediately after a reboot. It's nice to get verification I'm not the only one seeing this behavior. I still am hopefully that Chrome 45 will make this work more persistently, not just immediately after reboot.


Print preview only shows 2 pages

When I try to print the "Print Site" of my TMD, viewed in Firefox via mkdocs serve, I see only 2 pages (the 2nd is blank) in the print preview, unless I click the option to "Simplify Page". However, that strips a lot of the nice formatting, including all tables.

I'm having trouble reproducing this bug. I tried safari and firefox (+ macOS).
Some questions:

Are you using the latest version of this plugin?
Does the print page render fully?
Do you see any javascript error on the print page (in chrome: right click > inspect > console)

I removed some experimental CSS features which I will release shortly, which might also solve this issue.

Can you give https://github.com/timvink/mkdocs-print-site-plugin/releases/tag/v0.8.2 a try?

@rchaves33 any follow-up on this one?

Cannot reproduce.. closing issue. Please re-open if you have additional info.


Error when running on Android

Stack Trace:
E/flutter (27136): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: MissingPluginException(No implementation found for method getAll on channel plugins.flutter.io/package_info)
E/flutter (27136): #0      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:157:7)
E/flutter (27136):
E/flutter (27136): #1      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:332:12)
E/flutter (27136): #2      MethodChannel.invokeMapMethod (package:flutter/src/services/platform_channel.dart:359:49)
E/flutter (27136): #3      PackageInfo.fromPlatform (package:package_info/package_info.dart:43:25)
E/flutter (27136): #4      main (package:InvictMe/main.dart:30:47)
E/flutter (27136):
E/flutter (27136): #5      _runMainZoned.. (dart:ui/hooks.dart:231:25)
E/flutter (27136): #6      _rootRun (dart:async/zone.dart:1190:13)
E/flutter (27136): #7      _CustomZone.run (dart:async/zone.dart:1093:19)
E/flutter (27136): #8      _runZoned (dart:async/zone.dart:1630:10)
E/flutter (27136): #9      runZonedGuarded (dart:async/zone.dart:1618:12)
E/flutter (27136): #10     _runMainZoned. (dart:ui/hooks.dart:223:5)
E/flutter (27136): #11     _startIsolate. (dart:isolate-patch/isolate_patch.dart:301:19)
E/flutter (27136): #12     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:168:12)
E/flutter (27136):
Usage:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
String deviceUUID = await DeviceId.getID;
PackageInfo packageInfo = await PackageInfo.fromPlatform();
final Config config = Config(deviceUUID: deviceUUID, appVersion: packageInfo.buildNumber);
await getDatabasePath().then((value) {
print(value);
});
runApp(InvictMeApp(config));
}

@jaredgreener have you figured out what was the problem?


Update Dapps.swift, Add das.la tool

If bug:
Fixes #
If not a bug:
Closes #
1-liner summary:
Details if any (this should probably be in the commit message too):
Screenshots of Before PR and After PR if it's applicable (sometimes this make it much faster/easier to review):
Anything particular to test:

Thank you all the same.
At 2021-09-14 15:15:55, "Hwee-Boon Yar" @.***> wrote:
@hboon approved this pull request.
Thanks for contributing.
Unfortunately the app store forbade us from listing dapps, so this list is not currently used. It is still maintained in this repo, but in the meantime this will not be visible in the app.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub, or unsubscribe.
Triage notifications on the go with GitHub Mobile for iOS or Android.


feature: Create edgeManifest CRD

Feature Description
we need a way to store, via concatenation, all individual yaml content from individual workload items dropped off in the WDS.  Once in an edgeManifest object in the KubeStellar namespace, the KubeStellar syncer can pull and apply contents of edgeManifest.  This reduces complexity of the internal workflow for KubeStellar.  This also eliminates the MBS.  One fewer workspace to manage and maintain.  Removing the MBS and using the KubeStellar namespace is also a more scalable solution.
Proposed Solution
create the edgeManifest CRD which is capable of containing all individual yaml definitions for a workload that is destined for a specific location(s).
Want to contribute?

[ ] I would like to work on this issue.

Additional Context
No response

Is this intended to preserve the option for 1:many distribution? If so, how does this reduce complexity of the internal workflow for KubeStellar?

Another feature of the current design is supporting many:1 distribution. An example use case would be where an organization has a base layer of functionality they want distributed to every WEC, plus some more specialized applications that each goes to a subset of the WECs. That can be served by one EdgePlacement that directs the base layer to all the WECs, and an EdgePlacement for each specialized application.
Is the design revision here intended to keep that functionality?

We already limit the privileges of each syncer in the core, to its mailbox space. It is easy to limit privileges according to space, by namespace, and to individually configured object (changing that configuration is done by changing RBAC objects typically but there are other authorization customization techniques available such as webhooks).
If we preserve 1:many distribution and many:1 distribution then it might be easiest for the placement translator to produce one EdgeManifest object per (EdgePlacement,WEC). That would involve multiple EdgeManifest objects per WEC, that is multiple per syncer, in general --- with the collection varying dynamically. The easiest way to get the privileges limited per syncer would to put each syncer's collection in a distinct namespace.

Changing name of CRD to edgeDeployment to map back to the mental model of what a standard Kube deployment does.  This helps the user understand why this mechanism exists and how it might operate.  Our doc will satisfy details on top of that existing mental model.
As for your comments @MikeSpreitzer.  It is fine to suggest multiple namespaces. That sounds more scalable and secure.  great suggestion

@yana1205 this is what we talked about over lunch.  This would be the kubestellar equivalent to manifestwork.  The edgeDeployment CRD would hold any and all objects that are matched by the edgeplacement object

@nirrozenbaum this is the KubeStellar Syncer interface for the new pluggable placement translator you are working on.  Please work with @yana1205 to include his definition for the edgeDeployment CRD as 1 type of output that PT will support.  The other output is manifestWork.

added pluggable-transport label since this should be aligned with the pluggable transport and is very much related.


Display of Chinese characters in link card

Describe the bug
In the link card, Chinese characters turn into random symbols
To Reproduce
https://bsky.app/profile/yilinwriter.bsky.social/post/3k4kioo3z2j2q
Expected behavior
Readable display

Came across this by coincidence

It's something about the cardyb service and charsets, I think. Here's the fetch for the above post:
https://cardyb.bsky.app/v1/extract?url=http://www.mingpaocanada.com/van/htm/News/20230809/vas1h_r.htm
The page uses charset "big5-hkscs".
Here are two other fetches for sites with Chinese characters:
https://cardyb.bsky.app/v1/extract?url=https://world.taobao.com/ (uses utf8)
https://cardyb.bsky.app/v1/extract?url=https://www.thepaper.cn/ (uses utf8)

@Jacob2161 looks like this is a cardyb issue


NewFile alfred workflow: Cannot create files if names of directories contain spaces (could in previous versions of the workflow)

Workflow name: NewFile
Workflow version: 1.2.3
Alfred version: 3.7
macOS version: 10.13.6
Command that failed: nfo
Debugger output:
touch: /Users/[redacted]/Test%Directory/test.txt: No such file or directory
The file  /Users/[redacted]/Test%Directory/test.txt does not exist.

Open the [debugger](http://support.alfredapp.com/workflows:debugger), set the log output to “All Information”, and post the output here, replacing this text but keeping the backticks.

Thank you for the report. It’s been fixed in version 1.2.4.


story(storage): support couchbase for recording events

Description
As an end user, I want evrys to record events to Couchbase, so that I can deploy evrys in a cloud agnostic way.
Acceptance Criteria

[ ] Implement PutEvent interface for Couchbase
[ ] Implement integration tests
[ ] Add couchbase to readme
[ ] No auth required

Related Issues
No response

Couchbase is not easily deployable. Even in docker, it requires manual configuration of the cluster via a web portal. This is not conducive to automated testing. For now, couchbase will be moved back to the backlog


POC: use scss/css variable to make easier to switch color.

related to https://github.com/LycheeOrg/Lychee-front/issues/268

Sorry forgot to start the approving process for the CI.

Once the colors are fixed and are the same as currently on master, then it will be possible to merge it.
I fixed the bugs, formatting and syntax. Now someone need to fix the colors.


Remove manifest that no longer works for BitPay version 4.8.1

[x] Have you signed the Contributor License Agreement?
[x] Have you checked that there aren't other open pull requests for the same manifest update/change?

Microsoft Reviewers: Open in CodeFlow

/AzurePipelines run

/AzurePipelines run


Updated relatedLinks tag to correct namespace

The official document from Microsoft says the relatedLinks tag is in the maml namespace as opposed to the command namespace (https://msdn.microsoft.com/en-us/library/bb736334(v=vs.85).aspx).

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


Category filter lets you enter empty values

The pf-filter widget lets you press enter without typing anything, which adds an empty keyword filter.

@dtaylor113 I don't know if this requires changes upstream, but if it's a small fix, would be good to target for 3.6
@jwforres FYI

@spadgett, I could do some jQuery to add some minLength validation for the filter input field, but that seems overly complex.  It's a simple fix upstream in the a-pf filter component.  I'll add it there.
Thanks,
Dave

@dtaylor113 In the filterChange callback, check the appliedFilters and if a filter is blank, remove it from the list of appliedFilters.

@jeff-phillips-18, thanks!  That did the trick.  I'll put up a PR.


Multiple clean ng-model value

I am trying to use the ui-select and the component is cleaning my array.
Example:
{{ vm.staff_hotels }}
<ui-select multiple ng-model="x" theme="bootstrap">
    <ui-select-match placeholder="Not selected">{{$item.name}}</ui-select-match>
    <ui-select-choices repeat="hotel.id as hotel in vm.hotels | filter: {active: true} | filter: $select.search">

    </ui-select-choices>
</ui-select>

My variable "vm.staff_hotels" value on screen is [1,2].
{{ vm.staff_hotels }}
<ui-select multiple ng-model="vm.staff_hotels" theme="bootstrap">
    <ui-select-match placeholder="Not selected">{{$item.name}}</ui-select-match>
    <ui-select-choices repeat="hotel.id as hotel in vm.hotels | filter: {active: true} | filter: $select.search">

    </ui-select-choices>
</ui-select>

but, if I use the variable in ng-model my value change to [null,null].

Closing due to lack of info and repro.
If you believe this issue is still relevant please update with a plunkr (or similar) against the latest version of ui-select (currently v0.16.0)


3.1.4 Strange behaviour of blocks

Hello!
I'm using AA but I'm guessing though this issue belongs here. :) I'm trying to build a nested form (if that's important), put a select input there with localized enum. Here is how it looks:
lecture_material_form.input :kind, as: :select, collection: LectureMaterial.kinds.keys.map{ |k| [I18n.t("lecture_material_kinds.#{k}"), k] }
Here is the output:
`
Видео
Слайды
Статья
Исходный код
Другое`
I'm omitting select tag because the problem is not there. So far so good, but it's a long line and I want to split it, so I use multiline block and by convention I do it with do...end, like this:
lecture_material_form.input :kind,                                       as: :select,                                       collection: LectureMaterial.kinds.keys.map do |k|                                         [I18n.t("lecture_material_kinds.#{k}"), k]                                       end
And the output:
`
video
presentation
article
repo
other`
Notice that it didn't translate enum (option text). Basically it stops working as soon as I swap {} with do/end. What's going on?
It's ruby 2.3.1 by the way and sorry for indentation, I'm not good at Markdown.
Thanks in advance

Welp, I know what's the case. It seems that {} and do/end have different priority or something. Using () around input parameters solved the problem. Sorry for bothering.


Refactor Box<dyn System> to BoxedSystem

I was tinkering with bevy_ecs, and felt like Box<dyn System<In = (), Out = ()>> deserved a more concise name.

Seems reasonable to me!

Seems reasonable to me!


Add support for Paystack's check authorization feature

The Paystack 'check authorization' feature allows advance checks on cards to know if they have enough funds for payment (mostly for a later period).

Thank you for the feature request @egbinola. I am afraid it won't be supported on this plugin since it requires the secret key to implement. This feature is better suited for the backend of your mobile application.

Okay. Thank you.


[Help wanted] Real-time speech recognition from a microphone

TODO (Python)

[x] Follow https://github.com/k2-fsa/sherpa-ncnn/blob/master/python-api-examples/speech-recognition-from-microphone.py
support microphone in Python (fixed in #46)

TODO( C++)

[x] Follow https://github.com/k2-fsa/sherpa-ncnn/blob/master/sherpa-ncnn/csrc/sherpa-ncnn-microphone.cc to support PortAudio
[x] Follow https://github.com/k2-fsa/sherpa-ncnn/blob/master/sherpa-ncnn/csrc/sherpa-ncnn-alsa.cc to support ALSA

Closing as it is finished.


document how to use existing debug extensions for notebooks

Nodebook: https://github.com/microsoft/vscode-nodebook

The extension's readme.md contains a first cut of "Debugging in a JavaScript Notebookl" .


OnServerConnect is never called

For some reason the function in UnityNetworkServer:
private void OnServerConnect(NetworkMessage netMsg)
is never called before:
private void OnReceiveAuthenticate(NetworkMessage netMsg)
So for any request from the client _connections is empty and all requests to the server fail.
UnityEditor.log

Please see pull request with fix for this issue.

thanks for that @CrHasher, I'll take a look early next week and let you know!

Looking at the sample a bit more seems like Mirror is used only for communication/transport. Mirror as far as I know is for compiling client/server from the same source/project. This sample uses Mirror to send data in a reliable way and maybe async IO, but was this intentional or is there a benefit for using Mirror other than communication?
Another thing I noticed is this is most likely a single threaded server, meaning all handlers like OnReceiveAuthenticate are called from the main thread, any large delay will delay all clients, am I right? I will test this soon, will add a sleep/delay in OnReceiveAuthenticate and run multiple clients.

This sample was written over a year ago using UNET libraries. We did the migration to Mirror a couple of months ago. From what I understand, the original intention of separating client/server was to isolate the client and server API calls to make GSDK usage more clear. So, yes, the original use of UNET was just to have a Unity proof of concept. There has been an alternative sample created by our community here that has client and server into one project. Personally, I'd like to keep this sample as simple as possible for developers new to PlayFab and (maybe?) new to Mirror, we're happy to see any feedback towards this direction.

Another thing I noticed is this is most likely a single threaded server, meaning all handlers like OnReceiveAuthenticate are called from the main thread, any large delay will delay all clients, am I right? I will test this soon, will add a sleep/delay in OnReceiveAuthenticate and run multiple clients.

Correct. Let us know when we can review and merge the PR. Thanks a lot for the contribution so far!

Closing because of #18


core[minor]: Add graph functionality to Runnable base

Description

Adds Graph class port over from Python's Graph implementation here
Adds getGraph to base Runnable to allow constructing graph representation of the Runnable. This should be exact port of this function in python

Failing test case
(Use `node --trace-warnings ...` to show where the warning was created)
@langchain/core:test: FAIL src/runnables/tests/runnable_graph.test.ts
@langchain/core:test:   ● Test graph sequence
@langchain/core:test:
@langchain/core:test:     expect(received).toBe(expected) // Object.is equality
@langchain/core:test:
@langchain/core:test:     - Expected  - 18
@langchain/core:test:     + Received  +  2
@langchain/core:test:
@langchain/core:test:     @@ -17,20 +17,11 @@
@langchain/core:test:             "target": 3,
@langchain/core:test:           },
@langchain/core:test:         ],
@langchain/core:test:         "nodes": Array [
@langchain/core:test:           Object {
@langchain/core:test:     -       "data": Object {
@langchain/core:test:     -         "properties": Object {
@langchain/core:test:     -           "name": Object {
@langchain/core:test:     -             "title": "Name",
@langchain/core:test:     -             "type": "string",
@langchain/core:test:     -           },
@langchain/core:test:     -         },
@langchain/core:test:     -         "title": "PromptInput",
@langchain/core:test:     -         "type": "object",
@langchain/core:test:     -       },
@langchain/core:test:     +       "data": Object {},
@langchain/core:test:             "id": 0,
@langchain/core:test:             "type": "schema",
@langchain/core:test:           },
@langchain/core:test:           Object {
@langchain/core:test:             "data": Object {
@langchain/core:test:     @@ -49,11 +40,10 @@
@langchain/core:test:             "data": Object {
@langchain/core:test:               "id": Array [
@langchain/core:test:                 "langchain",
@langchain/core:test:                 "llms",
@langchain/core:test:                 "fake",
@langchain/core:test:     -           "llm",
@langchain/core:test:                 "FakeLLM",
@langchain/core:test:               ],
@langchain/core:test:               "name": "FakeLLM",
@langchain/core:test:             },
@langchain/core:test:             "id": 2,
@langchain/core:test:     @@ -71,17 +61,11 @@
@langchain/core:test:             },
@langchain/core:test:             "id": 3,
@langchain/core:test:             "type": "runnable",
@langchain/core:test:           },
@langchain/core:test:           Object {
@langchain/core:test:     -       "data": Object {
@langchain/core:test:     -         "items": Object {
@langchain/core:test:     -           "type": "string",
@langchain/core:test:     -         },
@langchain/core:test:     -         "title": "CommaSeparatedListOutputParserOutput",
@langchain/core:test:     -         "type": "array",
@langchain/core:test:     -       },
@langchain/core:test:     +       "data": Object {},
@langchain/core:test:             "id": 4,
@langchain/core:test:             "type": "schema",
@langchain/core:test:           },
@langchain/core:test:         ],
@langchain/core:test:       }
@langchain/core:test:
@langchain/core:test:       33 |   // expect(Object.keys(graph.nodes).length).toBe(5);
@langchain/core:test:       34 |
@langchain/core:test:     > 35 |   expect(graph.toJson()).toBe({
@langchain/core:test:          |                          ^
@langchain/core:test:       36 |     nodes: [
@langchain/core:test:       37 |       {
@langchain/core:test:       38 |         id: 0,
@langchain/core:test:
@langchain/core:test:       at Object.toBe (src/runnables/tests/runnable_graph.test.ts:35:26)
@langchain/core:test:

This is because the implementation of base Runnable is still TBD. Specifically here  (same for the last node)
The solution to this requires the base Runnable to be fully implemented
Fixes #4582

Hey sorry about the delay - will spend some time with this tomorrow and hopefully ship it!

Thank you very much for your patience and the great work @albertpurnama!


Remove feature status labels from Identity server console

Describe the issue:

Feature labels are present in following places.

[x] Visual editor - Sign-in methods

[x] Branding section - custom text

Verified in Alpha release


[BUG] Exception running sync GetBlobs perf test

Library name and version
12.13.0, main
Describe the bug
When running a perf test with parameters GetBlobs --count 500 --parallel 32 --sync, we often (but not always) see the following exception.  This only repros when running the sync tests, it does not repro with async.  It repros on both 12.13.0 and main (only versions I've tested).
Unhandled exception. Unhandled exception. Unhandled exception. Unhandled exception.Unhandled exception.  Unhandled exception. Unhandled exception. Unhandled exception. System.NotSupportedException:  The ReadAsync method cannot be called when another read operation is pending.
   at System.Net.Security.SslStream.ReadAsyncInternal[TReadAdapter](TReadAdapter adapter, Memory`1 buffer)
   at System.Net.Security.SslStream.Read(Byte[] buffer, Int32 offset, Int32 count)
   at System.Net.Http.HttpConnection.Fill()
   at System.Net.Http.HttpConnection.ChunkedEncodingReadStream.Read(Span`1 buffer)
   at System.Net.Http.HttpBaseStream.Read(Byte[] buffer, Int32 offset, Int32 count)
   at Azure.Core.Pipeline.ResponseBodyPolicy.CopyTo(Stream source, Stream destination, CancellationTokenSource cancellationTokenSource)
...
   at Azure.Storage.Blobs.ContainerRestClient.ListBlobFlatSegment(String prefix, String marker, Nullable`1 maxresults, IEnumerable`1 include, Nullable`1 timeout, CancellationToken cancellationToken) in /home/mharder/net/sdk/storage/Azure.Storage.Blobs/src/Generated/ContainerRestClient.cs:line 1309
   at Azure.Storage.Blobs.BlobContainerClient.GetBlobsInternal(String marker, BlobTraits traits, BlobStates states, String prefix, Nullable`1 pageSizeHint, Boolean async, CancellationToken cancellationToken) in /home/mharder/net/sdk/storage/Azure.Storage.Blobs/src/BlobContainerClient.cs:line 2599
   at Azure.Storage.Blobs.Models.GetBlobsAsyncCollection.GetNextPageAsync(String continuationToken, Nullable`1 pageSizeHint, Boolean async, CancellationToken cancellationToken) in /home/mharder/net/sdk/storage/Azure.Storage.Blobs/src/Models/GetBlobsAsyncCollection.cs:line 71
   at Azure.Core.Pipeline.TaskExtensions.EnsureCompleted[T](ValueTask`1 task) in /home/mharder/net/sdk/core/Azure.Core/src/Shared/TaskExtensions.cs:line 53
   at Azure.Storage.StorageCollectionEnumerator`1.StoragePageable.GetEnumerator()+MoveNext() in /home/mharder/net/sdk/storage/Azure.Storage.Common/src/Shared/StorageCollectionEnumerator.cs:line 103
   at Azure.Storage.Blobs.Perf.Scenarios.GetBlobs.Run(CancellationToken cancellationToken) in /home/mharder/net/sdk/storage/Azure.Storage.Blobs/perf/Azure.Storage.Blobs.Perf/Scenarios/GetBlobs.cs:line 38

Example: https://dev.azure.com/azure-sdk/internal/_build/results?buildId=1887558&view=logs&j=42ded549-05ee-5cdb-7ba7-7a948a0cc056&t=49e32a0b-4245-531b-0723-9d45113ffbd3&l=8753
Expected behavior
No exception
Actual behavior
Exception
Reproduction Steps

Create an Azure VM matching our perf agents

Size: D4ds_v5
OS: Ubuntu 20.04
Accelerated Networking: Enabled

In the same region, create a storage account

Kind: BlockBlobStorage
SKU: Premium_LRS

Run perf test on VM

Clone repo
Set env vars
cd sdk/storage/Azure.Storage.Blobs/perf/Azure.Storage.Blobs.Perf
dotnet run -c release -f netcoreapp3.1 -- GetBlobs --count 500 --parallel 32 --sync
Re-run test until it fails with exception

Environment
No response

I've encountered the same exception with GetBlobsAsync in 12.13.0. Not in the perf tests, but using this client to list blobs with different prefixes in parallel.

@hpaul-osi: Thanks for the report.

Can you share code and instructions to reproduce what you are seeing?
Does it repro consistently or intermittently?
Is this impacting a real-world scenario for you?

The code gets a count of most recent snapshots in a storage container, so it lists with GetBlobsAsync. The blobs all start with a hex prefix, so the listing of snapshots is done in parallel for each possible first character prefix with Parallel.ForEachAsync.
These listings are done for several storage accounts, and we consistently see it for only one of those accounts which has 64 containers with approximately 50000 blobs in each, so your count may be to low to trigger it with your async performance tests.
6.0.11
The scenario is real, but we caught this issue in dev environments, so it is not affecting production.

@hpaul-osi: I would like to try to reproduce your issue.  I can create 64 containers with 50k blobs each.  But can you share a code snippet showing how you are making the parallel calls to GetBlobsAsync()?  Is there a certain pattern to the container and blob names I should follow?
Coincidentally, we do run a performance test that creates a container with 50k blobs, and calls GetBlobsAsync() in 32 parallel threads.  We have never hit this exception in this test.  Only in our sync tests.  But I suspect this bug is a race condition so it might require specific circumstances to repro.
You said you caught this in dev but it's not impacting production.  Do you have a workaround for the issue in production?  Or is it that you just haven't hit this issue yet in production?

I would like to strip it down to the minimum to reliably reproduce the issue to share; I just haven't had time to produce the distilled case and verify it still reproduces the issue yet.
The issue is not impacting production because we detected this in lower environments before pushing the problematic code to production.

Thanks, no rush from our side.  We can already repro the exception reliably, so we might not need another repro.  But it's interesting that we can only repro with the sync api while you can repro with async.

We believe this can happen when any sync request is cancelled.
Simplified repro: https://github.com/mikeharder/get-blobs-cancel
We believe the bug is our code can call Dispose() concurrently with Read():
https://github.com/Azure/azure-sdk-for-net/blob/785c355bde40ae4b59d922611666f52b16074e6e/sdk/core/Azure.Core/src/Pipeline/Internal/ResponseBodyPolicy.cs#L80
Which can cause the "nested read" exception to be thrown:
https://github.com/dotnet/runtime/blob/6ddd06c023574f298f21f4acde58bf4af337d309/src/libraries/System.Net.Security/src/System/Net/Security/SslStream.IO.cs#L55-L59
https://github.com/dotnet/runtime/blob/6ddd06c023574f298f21f4acde58bf4af337d309/src/libraries/System.Net.Security/src/System/Net/Security/SslStream.IO.cs#L766-L769

Root cause: https://github.com/Azure/azure-sdk-for-net/issues/32577
Once the root cause is fixed, we should see if this still repros.

@hpaul-osi: So far, we have only been able to repro this exception by calling the sync API GetBlobs(CancellationToken), and having the CancellationToken expire during the call.  We understand this issue (#32577) and will be making a fix.
We have not been able to repro this when calling the async API GetBlobsAsync(CancellationToken), even if the CancellationToken expires during the call.  It may be possible to repro with the async API, but the race window might be much smaller.  We do believe the repro requires the request to be cancelled somehow, either programmatically or by hitting the NetworkTimeout (or perhaps a service/network error could trigger this).
So we would still be interested in your repro code, if you are able to repro using the async API.  Otherwise, once we fix #32577, you could try a pre-release build of Azure.Core to see if it fixes your issue.

I was unable to reproduce at all with a simple console app using the same listing logic. The dev environment with the service deployed still consistently fails. Reviewing the logs shows, these NotSupportedException exceptions are always accompanied by timeout cancellations, so it does appear likely it is the same issue, with a tighter window.


Fix outlining

This PR turns on outlining and adds a test that triggers the outlining. Previous tests all would not trigger outlining and therefore did not discover this problem earlier.
This PR is expected to fail before https://github.com/arkworks-rs/snark/pull/331 is merged.
This closes #56.

It turns out that the current test is also compiled with --release which disables assert!. This would be unable to catch the error that the outer check fails (which is an assertion). The change to the ci.yml removes the --release option.

It turns out that the current test is also compiled with --release which disables assert!. This would be unable to catch the error that the outer check fails (which is an assertion). The change to the ci.yml removes the --release option.

Hmm only debug_asserts are disabled in release mode, not normal asserts; which one of these is this check?

You are right. It is a debug assert.
https://github.com/arkworks-rs/marlin/blob/master/src/ahp/mod.rs#L181
So, I will go through the debug_asserts in this repo and change it to asserts if appropriate.
And the ci.yml would still use --release since it would be faster :)

The change to ci.yml has been reversed.
I didn't change the two debug_assert. However, we may want to delete them---currently, for a wrong proof, the verifier would panic (if in the debug mode), but the verifier should just return an error. (This would likely be changed in another PR.)
So, instead, I augment the test to also call the verifier, which would be able to capture the error.

This LGTM, but if you could add some comments about what the test is doing that'd be great =)

Added some comments on the test.
We will examine this one later after https://github.com/arkworks-rs/snark/pull/331 is done.

I think this needs to be updated to match the new ark-snark?

Done!


hashing is part unimplemented, part incorrect

Test:
using Test, Infinities

@testset "hash versus floating-point infinity" begin
    @testset "one argument" begin
        @test hash(Inf) === hash(∞)
    end
    @testset "two arguments" begin
        for h ∈ rand(UInt, 256)
            @test hash(Inf, h) === hash(∞, h)
        end
    end
end

Result:
Test Summary:                       | Fail  Error  Total   Time
hash versus floating-point infinity |    1    256    257  22.4s
  one argument                      |    1             1   1.6s
  two arguments                     |         256    256  20.9s
ERROR: Some tests did not pass: 0 passed, 1 failed, 256 errored, 0 broken.

The proper fix is to implement the two-argument hash method by simply delegating to hash(::Float32, ::UInt) (Float64 would work, too, but I guess hashing Float32 is faster than hashing Float64?).
NB: I plan on fixing this indirectly by:

creating a package TypeDomainRealInfinities, implementing negative and positive infinity as singleton types correctly
getting the new package under JuliaMath
getting Infinities to depend on the package and redefining Infinity

I don't see why creating new packages is needed for fixing hash.
Note Infinity represents a broader concept then a positive real infinity. For example if the real line or complex plane are compactified then Infinity would be fine to represent the infinity. But that said, originally Infinity was the same as InfiniteCardinality{0}, that is, it was a subtype of Integer. And so there was a lot of discussion that ended up with the current setup.

why creating new packages is needed for fixing hash

It's not. I just want a package with a clear and more narrow scope to depend on, so I thought I'd fix existing bugs while at it.

Note Infinity represents a broader concept then a positive real infinity.

But it's equal to floating-point Inf, so the hashes must be equal, too.
julia> using Infinities

julia> isequal(Inf, ∞)
true

julia> hash(Inf) == hash(∞)
false

Are they not supposed to be equal?

Yes they are meant to be equal to each other. You'd have to go back to old discussion to understand why we wanted Infinity <: Number.... not sure I actually remember.


[Static Linux SDK] Enable gzipping of the tarball.

Seems I missed off a z from the tar command.

@swift-ci Please test


Add memory consumption estimation for models in profile API.

Description
Add CPU/GPU memory consumption estimation for DL models in profile API. An example is as following,
{
"nodes" : {
"jJA5JA5ES1CG71Yugpc84g" : {
"models" : {
"FMtWfYcB6ZKIXgDcq6sw" : {
"model_state" : "DEPLOYED",
"predictor" : "org.opensearch.ml.engine.algorithms.text_embedding.TextEmbeddingModel@253a6c05",
"target_worker_nodes" : [
"jJA5JA5ES1CG71Yugpc84g"
],
"worker_nodes" : [
"jJA5JA5ES1CG71Yugpc84g"
],
"mem_size_estimation_cpu" : 105529143,
"mem_size_estimation_gpu" : 105529143
},
"p1hsfIcBSHStRf2jiLu6" : {
"model_state" : "DEPLOYED",
"predictor" : "org.opensearch.ml.engine.algorithms.text_embedding.TextEmbeddingModel@76d713a3",
"target_worker_nodes" : [
"jJA5JA5ES1CG71Yugpc84g"
],
"worker_nodes" : [
"jJA5JA5ES1CG71Yugpc84g"
],
"mem_size_estimation_cpu" : 148025802,
"mem_size_estimation_gpu" : 148025802
}
}
}
}
}
Issues Resolved
Check List

[ ] New functionality includes testing.

[ ] All tests pass

[ ] New functionality has been documented.

[ ] New functionality has javadoc added

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

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

Codecov Report

Merging #853 (15b99eb) into 2.x (036bda0) will decrease coverage by 0.14%.
The diff coverage is 73.68%.

:mega: This organization is not using Codecov’s GitHub App Integration. We recommend you install it so Codecov can continue to function properly for your repositories. Learn more
@@             Coverage Diff              @@
##                2.x     #853      +/-   ##
============================================
- Coverage     84.81%   84.67%   -0.14%
- Complexity     1628     1631       +3
============================================
  Files           135      135
  Lines          6079     6116      +37
  Branches        596      601       +5
============================================
+ Hits           5156     5179      +23
- Misses          666      674       +8
- Partials        257      263       +6

Flag
Coverage Δ

ml-commons
84.67% <73.68%> (-0.14%)
:arrow_down:

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files
Coverage Δ

...n/java/org/opensearch/ml/model/MLModelManager.java
79.44% <0.00%> (-0.19%)
:arrow_down:

...java/org/opensearch/ml/profile/MLModelProfile.java
62.50% <60.00%> (-0.47%)
:arrow_down:

...va/org/opensearch/ml/model/MLModelCacheHelper.java
90.06% <77.27%> (-2.19%)
:arrow_down:

...ain/java/org/opensearch/ml/model/MLModelCache.java
86.76% <100.00%> (+0.40%)
:arrow_up:

...va/org/opensearch/ml/rest/RestMLProfileAction.java
94.73% <100.00%> (+0.11%)
:arrow_up:

... and 1 file with indirect coverage changes
Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.