New data reduction procedure for Spectralon calibration imagery

Description
The new hyperspectral imagery calibration procedure (#281) uses dedicated calibration imagery of Spectralon reflectors taken at multiple zenith angles (and possibly one day under both clear and overcast skies). This necessitates changes to the current reduction procedure, and subsequent use of, the Spectralon reflectance imagery.
Completion Criteria

[x] #208 Take Spectralon calibration imagery on clear sky day
[ ] #208 Take Spectralon calibration imagery on cloudy sky day
[ ]  Convert new spectralon calibration images to netCDF
[ ]  Visually inspect then hyperslab images to contain only spectralon panels
[ ]  Detect any systematic spatial, spectral, or angular biases in spectralon images
[ ]  Reduce (i.e., average) imagery to minimal rank/size that preserves systematic features
[ ]  Compute zenith angle for each image time (necessary for xps_wht not xps_drk)
[ ]  Annotate reduced images with zenith angles, store in HS extractor directory

The VNIR is currently completely out of service. A recent software update to implement x-axis scanning broke the data writing, LemnaTec is working on it now. I have the script ready for the calibration run so I'm hoping it can happen soon.

@smarshall-bmr is VNIR back up and running?

Now up and running in predawn mode for calibration

VNIR is writing data again. We are working on fixing this 10,000 line scan limit right now, calibration is up next on my priority list.

@solmazhajmohammadi @dlebauer The recent calibration images brought to my attention that the SWIR naming convention has diverged from the VNIR. SWIR files now have an extra date string (right after the UUID) in their names, and also are missing an underscore before the english suffix. Was there a good reason for changing the naming convention? It would be helpful if SWIR used the same convention as VNIR. Otherwise we need to re-write the extractors to handle both conventions and be backwards compatible, etc.
zender@cg-gpu01:~/nco$ ls -l /projects/arpae/terraref/sites/ua-mac/raw_data/SWIR/2017-04-15/2017-04-15__11-59-12-426
total 481696
-rw-r--r-- 1 dlebauer grp_202     55123 Apr 15 12:03 f130c910-7887-49b0-97bb-db49e8c85e63_2017_04_15_12_05_11frameIndex.txt
-rw-r--r-- 1 dlebauer grp_202     27533 Apr 15 12:03 f130c910-7887-49b0-97bb-db49e8c85e63_2017_04_15_12_05_11image.jpg
-rw-r--r-- 1 dlebauer grp_202 493129728 Apr 15 12:03 f130c910-7887-49b0-97bb-db49e8c85e63_2017_04_15_12_05_11raw
-rw-r--r-- 1 dlebauer grp_202      3503 Apr 15 12:03 f130c910-7887-49b0-97bb-db49e8c85e63_2017_04_15_12_05_11raw.hdr
-rw-r--r-- 1 dlebauer grp_202       869 Apr 15 12:03 f130c910-7887-49b0-97bb-db49e8c85e63_2017_04_15_12_05_11settings.txt
-rw-r--r-- 1 dlebauer grp_202      3561 Apr 15 12:03 f130c910-7887-49b0-97bb-db49e8c85e63_metadata.json

~6 minute discrepancy between SWIR directory and filename stub:
zender@cg-gpu01:~/nco$ ls -l /projects/arpae/terraref/sites/ua-mac/raw_data/VNIR/2017-04-15/2017-04-15__11-56-59-902/
total 5204960
-rw-r--r-- 1 dlebauer grp_202      40591 Apr 15 12:00 ca045a19-7b12-4627-b700-9f51f5829b64_frameIndex.txt
-rw-r--r-- 1 dlebauer grp_202      69299 Apr 15 12:00 ca045a19-7b12-4627-b700-9f51f5829b64_image.jpg
-rw-r--r-- 1 dlebauer grp_202       3605 Apr 15 12:00 ca045a19-7b12-4627-b700-9f51f5829b64_metadata.json
-rw-r--r-- 1 dlebauer grp_202<PHONE_NUMBER> Apr 15 12:02 ca045a19-7b12-4627-b700-9f51f5829b64_raw
-rw-r--r-- 1 dlebauer grp_202      10257 Apr 15 12:01 ca045a19-7b12-4627-b700-9f51f5829b64_raw.hdr
-rw-r--r-- 1 dlebauer grp_202        872 Apr 15 12:02 ca045a19-7b12-4627-b700-9f51f5829b64_settings.txt

IMHO the best way to proceed here is to remove the extra date string recently introduced into (some of) the SWIR filenames, i.e., "2017_04_15_12_05_11" in the above example, in all but the metadata.json file. That way the VNIR and SWIR will have the same naming convention. Otherwise we need to re-write the filename handling in the SWIR workflow to handle both conventions. @dlebauer should we wait for a sysadmin to change the names or start to re-write the SWIR filename handling and accept both old and new conventions?

Wait on sysadmin. If you send me the appropriate command I can run it.
On Mon, Apr 24, 2017 at 5:56 PM Charlie Zender<EMAIL_ADDRESS>wrote:

IMHO the best way to proceed here is to remove the extra date string
recently introduced into (some of) the SWIR filenames, i.e.,
"2017_04_15_12_05_11" in the above example, in all but the metadata.json
file. That way the VNIR and SWIR will have the same naming convention.
Otherwise we need to re-write the filename handling in the SWIR workflow to
handle both conventions. @dlebauer https://github.com/dlebauer should
we wait for a sysadmin to change the names or start to re-write the SWIR
filename handling and accept both old and new conventions?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/terraref/computing-pipeline/issues/289#issuecomment-296844803,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAcX57V9G7OXzf4-bHQRmI12DUBlHCjDks5rzSiggaJpZM4MYdQC
.

This should work for a sufficiently priveleged user:
yyyymmdd='2017-04-15'
drc_top="/projects/arpae/terraref/sites/ua-mac/raw_data/SWIR/${yyyymmdd}"
cd ${drc_top}
for drc_sub in `ls -d ${yyyymmdd}*` ; do
   echo "Renaming in directory ${drc_sub}..."
   cd ${drc_top}/${drc_sub}
   for fl in `ls *raw` ; do
       dt_sng=`expr match "${fl}" '.*\([0-9][0-9][0-9][0-9]_[0-9][0-9]_[0-9][0-9]_[0-9][0-9]_[0-9][0-9]_[0-9][0-9]\)\.*'`
       uuid_sng=${fl:0:36}
   done # !fl
   echo "uuid=${uuid_sng}, dt=${dt_sng}"
   for sfx in frameIndex.txt image.jpg raw raw.hdr settings.txt ; do
      mv_cmd="/bin/mv ${uuid_sng}_${dt_sng}${sfx} ${uuid_sng}_${sfx}"
      echo "/bin/mv ${uuid_sng}_${dt_sng}${sfx} ${uuid_sng}_${sfx}"
      eval ${mv_cmd}
   done # !sfx
done # !drc_sub

As shown it just does the calibration day. However, all SWIR data since 2016-11-08 appear to use this new convention. @solmazhajmohammadi @LTBen is there a reason for the new convention? If not will Lemnatec please revert to the original (and current VNIR) convention? I do not understand how the hyperspectral extractor ever worked on SWIR files since 2016-11-08. AFAICT it should have reported an error. @max-zilla, I gather that the SWIR extractor was not run this whole time? I hope if it was run that it failed and gave a reasonable error message...
Running the above will suffice to unblock progress on calibration. To rename every SWIR file since 2016-11-08, auto-generate the dates with ls -d 2016-11-0[89] 2016-11-[123]? 2016-12-?? 2017-??-?? from /projects/arpae/terraref/sites/ua-mac/raw_data/SWIR and run the above script on each date...

@czender I think everything worked. I added looping over dates
#!/bin/bash

cd /projects/arpae/terraref/sites/ua-mac/raw_data/SWIR/
for d in `ls -d 2016-11-0[89] 2016-11-[123]? 2016-12-?? 2017-??-??`; do
    yyyymmdd=$d

    drc_top="/projects/arpae/terraref/sites/ua-mac/raw_data/SWIR/${yyyymmdd}"
    cd ${drc_top}
    for drc_sub in `\ls -d ${yyyymmdd}*` ; do
	echo "Renaming in directory ${drc_sub}..."
	cd ${drc_top}/${drc_sub}
	for fl in `\ls *raw` ; do
	    dt_sng=`expr match "${fl}" '.*\([0-9][0-9][0-9][0-9]_[0-9][0-9]_[0-9][0-9]_[0-9][0-9]_[0-9][0-9]_[0-9][0-9]\)\.*'`
	    uuid_sng=${fl:0:36}
	done # !fl
	echo "uuid=${uuid_sng}, dt=${dt_sng}"
	for sfx in frameIndex.txt image.jpg raw raw.hdr settings.txt ; do
	    mv_cmd="/bin/mv ${uuid_sng}_${dt_sng}${sfx} ${uuid_sng}_${sfx}"
	    echo "/bin/mv ${uuid_sng}_${dt_sng}${sfx} ${uuid_sng}_${sfx}"
	    eval ${mv_cmd}
	done # !sfx
    done # !drc_sub
done # !d

Let me know if it looks okay.

@LTBen and @markus-radermacher-lemnatec can you please confirm that this will be fixed?

The reason for different naming lays in different headwall software. LemnaTec software is only adding prefix to the file name.
I am in touch with headwall costumer support to see if it is an easy fix in the software.

Next step: @max-zilla will run SWIR extractor this week.  April 15 is the priority date. @czender will modify the workflow after that.

@czender @dlebauer  it is fixed now

@czender I just pulled the latest hyperspectral code and queued 4/15 for VNIR (first) then SWIR. we'll see how things go over the weekend.

@max-zilla - please update


WIP beginning_of_seconds and end_of_seconds

These are two functions I found useful in my work, where I needed to "round" some datetimes to the nearest hour. They seems to fit in with functions like end_of_month, etc.
This is WIP, as it needs to be split up into protocol implementations. But I wanted to see if you like the idea before doing that.
Summary of changes
I'll review the commits, so I mostly want to understand the "why" rather than the "what"
Checklist

[ ] New functions have typespecs, changed functions were updated
[ ] Same for documentation, including moduledocs
[ ] Tests were added or updated to cover changes
[ ] Commits were squashed into a single coherent commit

Coverage decreased (-0.2%) to 69.816% when pulling 54400d56fc64e2fa03a5e868ecfb2335006149cc on nathanl:nathanl/beginning-and-end-of-seconds into 4711f9bc9fc1a51b399cf6928b34e8bc0eec8b0a on bitwalker:master.

My feeling is that we'd be better off adding Timex.round/2 which rounds to the nearest granularity (as seen in other APIs, like compare/3). A Timex.round/3 variant could take an argument which indicates the rounding direction. Alternatively, we could do Timex.ceil/2 and Timex.floor/2 which act like their mathematical counterparts, but take a granularity like the proposed round/2 function. Thoughts?


Any way to have it skip over errors?

We have multiple Jamf instances.  I'll occasionally have a list of computers that are NOT broken out by which Jamf instance they belong to.  If I try to run the list through MUT, it stops and exits as soon as it hits something it doesn't find  "Error: Unable to match computer "  No record of WHICH machine it didn't find.  Would be far more effective if it could simply log the missing machine and continue processing the rest.  I could run the list against each of our Jamf instances and know that everything was captured. (and could cross-check the logs to confirm)

Is this for updating groups or prestage scopes?
If updating computer records, it should indeed just skip over the errors. For the rest, it does everything in a block for now.
You can check out MUT Classic, which is on the App Store, and uses a different method to update groups. (I don't believe it supports prestage updates though).
I have plans to update MUT v5.x to use the same methods as MUT Classic for group updates. They're significantly slower, but it works more in the way you're describing.

Thanks - in the case I ran into the issue, it was for updating groups.  I'll give MUT classic a try and see how it deals with it!. Thanks for the reminder!

Sounds great. Basically, MUT Classic is just rebranded mut v4, and the only reason I keep it out there is because it uses a far less efficient method to update groups--which can be used to work around issues like you're seeing here.
MUT v5 updates the entire group in one go, so even if you're switching 1000 devices, it's just one API call. MUT classic makes separate API calls for every single device, so it's a bit harder on the server, and takes longer, but lines that error out don't stop the whole thing from working.
Good luck, and as always, try a small test file first just to be sure--I haven't tested MUT classic in a while.

It’s frustrating that the api is so unforgiving for device group updates. I wish MUT had a way to toggle between uploading device changes all at once versus in series (a la classic MUT). That seems a reasonable fallback option when it’s not clear which device is causing the command failure.

I wish MUT had a way to toggle between uploading device changes all at once versus in series (a la classic MUT).

This is actually exactly what I’m working on for v6. :)
The update is slow in coming, as we have a new baby girl, but I usually get a lot of time to work on things around thanksgiving/Christmas (historically, this is when most major updates happen).
So the plan is to basically either have a toggle switch to toggle between the new, more efficient method, or the old, “legacy” method—or to possibly simply auto-detect failures and switch?
I know that doesn’t help a ton right now.. but it’s good to know the user base likes the idea as well.

Just replied to another thread about this. Thank you for working on feature requests like this. I will patiently wait for the update.
Going back to MUT Classic, I searched around for where to add the Static Group ID but can't find it.

@TaylorArmstrongB1 @jfiliceatcsumb @PDLCIII
I think you'll be excited to know I just released MUT v6, which has this exact feature. Check it out, and let me know how it works! https://github.com/mike-levenick/mut/releases/tag/v6.0.0
You can read more about Classic Mode updates here: https://github.com/mike-levenick/mut#classic-mode-groupprestage-updates
As always with MUT, I strongly recommend trying out a small, test run of just a few devices before doing a massive update to your entire fleet. MUT is a very powerful tool, and while I've done plenty of testing, it is good to be careful, especially with a change as massive as this.


Can't get specs with update_index to pass

I'm following this tutorial to a tee: https://www.toptal.com/ruby-on-rails/elasticsearch-for-ruby-on-rails-an-introduction-to-chewy
But i'm having trouble getting
describe EntertainmentIndex do
  # No need to cleanup Elasticsearch as requests are
  # stubbed in case of `update_index` matcher usage.
  describe 'Tag' do
    # We create several books with the same tag
    let(:books) { create_list :book, 2, tag_list: 'tag1' }

    specify do
      # We expect that after modifying the tag name...
      expect do
        ActsAsTaggableOn::Tag.where(name: 'tag1').update_attributes(name: 'tag2')
      # ... the corresponding type will be updated with previously-created books.
      end.to update_index('entertainment#book').and_reindex(books,
                                                            with: {tags: ['tag2']})
    end
  end
end

specs to pass:
Expected index `entertainment#book` to be updated, but it was not
       Expected document with id `113` to be reindexed, but it was not

in initializers/chewy.rb I have Chewy.use_after_commit_callbacks = !Rails.env.test? and in
spec_helper.rb I am requiring chewy/rspec and have the following:
config.before(:suite) do
   Chewy.strategy(:bypass)
end

I have the same ActsAsTaggableOn::Tag/Taggable.class_eval code in initializers/acts_as_taggable_on.rb, it and successfully updates the index in Rails console but not in my test environment. Anything else I'm missing?

Note that from the example code, ActsAsTaggableOn::Tag.where(name: 'tag1').update_attributes(name: 'tag2') should actually be ActsAsTaggableOn::Tag.where(name: 'tag1').first.update_attributes(name: 'tag2')

Try to put Chewy.use_after_commit_callbacks = false in the spec helper. higher is better. It might occur that models are already initialized by this time.


Updated npm dependencies because several were considered 'outdated'

Hopefully this might fix some of the issues I'm having with tile-cover. Let's see what travis thinks...

Well, that didn't work.


Emit file

Does this plugin emit the generated manifest.json? This way I could read it from my stats.json and include it in the HTML source (we're using React instead of HtmlWebpackPlugin).
Thanks for the great work!

Oh, the plugins emits the files but without a chunk name. Because of that, webpack-manifest-plugin doesn't catch them. Has anyone been through that?

Can you explain what's going on and what do you want to achieve, please?
Maybe we can work on that.

I'm closing this ticket since the author didn't give the information needed in more than a month.

I face a similar issue. I would like to reference the generated manifest from the output of https://github.com/ztoben/assets-webpack-plugin. The key in the generated asset manifest (from the assets-plugin) is simply "". I assume because there is no chunck name. Would it be possible to add a setting to specify that in the config?


KeyError: 'loss/total'

[12/12/2023 10:27:28 gluefactory INFO] Starting epoch 0
/home/user0/.local/lib/python3.8/site-packages/torch/utils/checkpoint.py:429: UserWarning: torch.utils.checkpoint: please pass in use_reentrant=True or use_reentrant=False explicitly. The default value of use_reentrant will be updated to be False in the future. To maintain current behavior, pass use_reentrant=True. It is recommended that you use use_reentrant=False. Refer to docs for more details on the differences between the two variants.
warnings.warn(
[12/12/2023 10:27:30 gluefactory INFO] [E 0 | it 0] loss {total 6.668E+00, last 5.244E+00, assignment_nll 5.244E+00, nll_pos 8.672E+00, nll_neg 1.815E+00, num_matchable 2.530E+02, num_unmatchable 2.575E+02, confidence 5.922E-01, row_norm 1.768E-01}
[12/12/2023 10:27:30 gluefactory INFO] [Validation] {}
Traceback (most recent call last):
File "/usr/lib/python3.8/runpy.py", line 194, in _run_module_as_main
return _run_code(code, main_globals, None,
File "/usr/lib/python3.8/runpy.py", line 87, in _run_code
exec(code, run_globals)
File "/home/user0/workspace/Training/glue-factory/gluefactory/train.py", line 691, in
main_worker(0, conf, output_dir, args)
File "/home/user0/workspace/Training/glue-factory/gluefactory/train.py", line 628, in main_worker
training(rank, conf, output_dir, args)
File "/home/user0/workspace/Training/glue-factory/gluefactory/train.py", line 547, in training
if results[conf.train.best_key] < best_eval:
KeyError: 'loss/total'
train.py, line 69
"best_key": "loss/total",  # key to use to select the best checkpoint
I am running into KeyError: 'loss/total' when trying to run the command for training superpoint-open+lightglue.
Does anyone have a fix for this KeyError: 'loss/total' ?

I meet the same error

if results[conf.train.best_key] < best_eval:
KeyError: 'loss/total'

Please check that your "val_loader" is empty

I also encountered this issue. Did you solve it? Can you help me with it? I would be very grateful.


VisibleOnScreenNotifier2D not working properly in Godot 4.0.3

Godot version
4.0.3
System information
Windows 10
Issue description
I tried to use VisibleOnScreenNotifier2D node on my TileMap. When the screen_exited signal was emitted, the tilemap will hide but when the node is not visible, the screen_entered signal doesn't emit, thus my TileMap doesn't show. It seems to me that signals do not work when the node is not visible. Does this work as intended? I think this design defeats the purpose of VisibleOnScreenNotifier.

Steps to reproduce

Create a TileMap
Add VisibleOnScreenNotifier2D an
Connect the signal and Add the above script to the node.

Minimal reproduction project
N/A

Please provide a minimal reproduction project so we can rule out a configuration issue.

Yes it's intended. The notifier takes advantage of visibility culling, which also requires the node to be visible and have modulate alpha above 0. It's mentioned in the docs.


Added mypy pre-commit hook

Description
Added mypy pre-commit hook
Checklist:

[X] I've made sure that tests/test_cookiecutter_generation.py is updated accordingly (especially if adding or updating a template option)
[X] I've updated the documentation or confirm that my change doesn't require any updates

Rationale
Adding mypy as another pre-commit hook will have the following benefits:

Compile time errors can be discovered while developing locally.
Compile time errors can be discovered faster

I'm against this change since mypy cannot fix the problems it encounters. Some typing problems are hard to solve and this would block the user from commiting which would disadvantage beginners.


Will not sort alphanumeric combinations

First of all thanks for this. Unless I missed something, I used your example for emails and reversed the display. Where it list the email( has fuzzy text) first and then the name. My sql query checks to see if the name or email matches the term. Have tested the query and it works but it will only display up until it reaches a number in the email address.

I'm trying to create same example as you've describe, but I'm somehow  not able to do it. I mean, for me your example works fine. I guess, I'm not recreating it to match your case. Can you paste some of your code:

plugin options,
sample data - json/xml.


Gatsby v1 ie fix pull request

Some important CSS isn't being loaded properly for the documentation pages

Some important CSS isn't being loaded properly for the documentation pages

I'm pretty sure that has to do with not including Uncontrolled Collapse and whatever is inside it. Also inside MarkdownTemplate.js I just copied what was there. Perhaps we should use reactstrap layouts like { Row, Col }?


Remove scan numbers

Praise the lord as he has taken the burden of boxing and unboxing scan numbers from us.
This PR removes the use of scan numbers - we use references to scans now.
Tested:

Raw data import
project import
mass detection, chromatogram building, deconvolution

This is the memory difference when we run Chromatogram building on 3 files with around 8000 features total: (I will upload a comparison to the old scan numbers mzmine later):

I still need to rename some methods / variables from scanNumbers to scans but I did not want to rename too much to not break your stuff

I still need to rename some methods / variables from scanNumbers to scans but I did not want to rename too much to not break your stuff

Oh I actually have it here:
Old version with scan numbers

New version without scan numbers --> scans

Oh I actually have it here:
Old version with scan numbers

New version without scan numbers --> scans


Storing sessions? Detecting closed session?

I want to keep track of which user is on which session, and persist that across browser refresh. How would you recommend I go about this? I could store it in an object. Should I use something like express-session?
Example:
import express from 'express'
import { createSession } from 'better-sse'

const app = express()

app.use(express.static('./public'))

app.get('/sse', async (req, res) => {
    const session = await createSession(req, res)
    session.state.id = Math.random().toString().slice(5)
    res.sse = session
})

app.get('/send-me-my-id', async (req, res) => {
    console.log({ 'res-sse': res.sse }) // undefined!!
    res?.sse?.push(res.sse?.state?.id, 'id')
})

app.listen(8080)

Can the server be notified when the client has stopped listening? I could poll isConnected, but something like .onDisconnect(...) would be nice.
Great library btw!!

Can the server be notified when the client has stopped listening? I could poll isConnected, but something like .onDisconnect(...) would be nice.

Session extends from EventEmitter and emits the disconnected event when the connection is closed.

I want to keep track of which user is on which session, and persist that across browser refresh. How would you recommend I go about this? I could store it in an object. Should I use something like express-session?

There's a bit of overlapping terminology here which may be a bit confusing. From the getting started guide in the context of Better SSE, a session is simply a single open connection between a client and server, it does not persist between browser refreshes or different pages so you'll need to use your own mechanism for that.
In some libraries that use Better SSE, for example, I have seen a pattern of creating a map (just a simple object or Set) with the user ID for the key and a dedicated Channel as the value. Then whenever a user connects you lookup if there is a channel for their ID and then simply register the session with that channel.
This allows you to track whether the user is currently connected at all (simply check that Channel#activeSessions is more than one (1)) and also works if the user opens multiple tabs at once as they can have multiple sessions for themselves in that one channel.
This is probably the way I'd go about it too, and yes, you'd need some way to track the session with a cookie or some other method which express-session seems to be designed for.

Thank you I'll try this


Code Coverage Report

This adds code coverage reporting, both as a Leiningen alias, as well as via codecov.io.

Codecov Report

:exclamation: No coverage uploaded for pull request base (master@d8bd656). Click here to learn what that means.
The diff coverage is n/a.

@@            Coverage Diff            @@
##             master      #13   +/-   ##
=========================================
  Coverage          ?   90.05%
=========================================
  Files             ?       11
  Lines             ?      583
  Branches          ?       20
=========================================
  Hits              ?      525
  Misses            ?       38
  Partials          ?       20

Continue to review full report at Codecov.

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


Performance Concerns For Test Discovery

The adapter tends to perform slowly when discovering tests from a CMake generated solution which contains around 200 projects in total, of which approximately 50 of them are Boost.Test modules.
Investigate the performance of the driver in an attempt to improve the situation is possible.

Think this is the same issue as #207. Think this "CMake issue" means:

many big projects
many unit tests per project

(nothing to do with CMake)

Closing as being duplicated as of #207.


Add a space to the Flutter SDK path on Travis

Ensures we don't regress https://github.com/flutter/flutter/issues/6577.

Hit unhappiness on host build. Will give another go once it's patched :)

Fix is out in https://fuchsia-review.googlesource.com/c/topaz/+/121856

Replaced by #14613


[Bug] Vertical Thumb style broken on mac

The custom vertical thumb style does not working on mac, if I select Automatically based on mouse or trackpad option in System Preference -> General -> Show scroll bars on mac.
It works well if I select Alway option.
Could you please help me?
Thanks

Hi @RobPethick
The issue is still present.
Can I take on the task of resolving this issue?


How to handle same Apple ID but different emails for subscriptions?

Version of react-native-iap
5.1.3
Version of react-native
0.63
Problem statement
I want to discuss a situation that may arise - a user subscribes to my app on Apple ID 'A' with email (app credentials) 'eA'. Then, their friend also tries to subscribe to my app with same Apple ID 'A' and email 'eB'. We don't want to let this happen, and want to show the second user an error and tell them to login with email 'eA'.
Attempted solutions

First, I used getAvailablePurchases to check if user has an active subscription to my app on their Apple ID. If they do, and they don't have a subscription on their current app credentials, I tell them to logout. However, this method causes the user to be prompted to Sign In, which is not a good experience for the user. Hence, I ditched this.
I then tried to use getPurchaseHistory to achieve the same goal. However, this method was super slow. Sometimes, getPurchaseHistory takes as long as 10 minutes, and then requestSubscription takes another ten minutes. This was true for both development version and testflight version of the app. We're yet to publish the app to AppStore so I can't talk about the performance in that environment.
Finally, I noticed that sometimes the rn-iap error update listener would be triggered when user tries to subscribe and they already have a subscription, but it doesn't always trigger.

Help wanted with
Any of the following solutions would work for me:

Getting no sign-in prompt with getAvailablePurchases
Getting getPurchaseHistory to work faster
Getting an error more consistently in the error listener if user is already subscribed.

Environment
Sandbox (development and testflight)

Looks like this is great one to open up a discussion. May you create one here?
https://github.com/dooboolab/react-native-iap/discussions
Closing this issue since I'd like to organize an issue board on the bug only to manage the threads.


Authentication - Use DB Users

Remove the in-memory users table, and fetch username details from the DB.
Closes #5

would be better to update README file

Good point. Let me do that before this PR is merged
On Wed, 1 Nov, 2023, 13:13 Prajwal prakash, @.***>
wrote:

would be better to update README file
—
Reply to this email directly, view it on GitHub
https://github.com/IEEE-RVCE/reforseti/pull/16#issuecomment-1788543286,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ADX32PEQTXOVJJLOGMIJ253YCH4STAVCNFSM6AAAAAA6USPPJOVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTOOBYGU2DGMRYGY
.
You are receiving this because you authored the thread.Message ID:
@.***>

Expanded the scope of the PR to allow:

Added repo tests. This will test some of the scenarios we have and also indirectly add coverage of the entities.
Added config for repository tests. An in-memory H2 db is used to run theses tests to ensure our written functionality is working well.


feat(isArray): make angular.isArray support Array subclasses

What kind of change does this PR introduce? (Bug fix, feature, docs update, ...)
feature
What is the current behavior? (You can also link to an open issue here)
Angular doesn't recognise objects prototypically inherited from Array.prototype as arrays.
See #15533
What is the new behavior (if this is a feature change)?
In particular, this change gets Angular to play nicely with MobX observable arrays.
Does this PR introduce a breaking change?
Yes. angular.isArray is used throughout Angular. In particular, after this change, angular.copy will use the array-cloning logic for objects prototypically inherited from Array.prototype whereas now it uses the object-cloning logic for them. This, in turn, affects deep watchers and other parts of the framework that use angular.copy.
Please check if the PR fulfills these requirements

[x] The commit message follows our guidelines: https://github.com/angular/angular.js/blob/master/CONTRIBUTING.md#commit-message-format
[x] Tests for the changes have been added (for bug fixes / features)
[x] Docs have been added / updated (for bug fixes / features)

Please consider merging this into the 1.5 branch too.

Please consider merging this into the 1.5 branch too.

1.5? I am even skeptical about 1.6. This is a BC, I'm afraid.

BTW, in anyone wanted to use an evil and totally not recommended hack for 1.5/1.6, they could surround the angular.js script with code that modified Array.isArray, let Angular store it locally, then restore the original method (bad bad demo).

Could you expand the BC notice

Here in PR? Or in the commit message?

BTW, in anyone wanted to use an evil and totally not recommended hack

I'm just patching angular.js locally :)

I'm just patching angular.js locally :)

I know :wink:

@thorn0 the BC change message still needs to be updated as @gkalpak has requested for this to land in 1.7.0

@Narretz done

Cool! Can you please add that this change also affects angular.merge, angular.forEach, and angular.equals?

@Narretz done. Travis' error messages are irrelevant.

LGTM. Is that okay for you @gkalpak ?

I would like to see a more explicit mention of how the implementation changed/what "objects that weren't previously recognized as arrays [...] are now recognized as such". Just a brief notice that objects that prototypally inherit from Array are now recognized as arrays.

Tweaked the commit message, added some more tests and landed.
Thx for working on this, @thorn0 👍


Use render helpers in existing new-style services [apm cdnjs gemversion]

This refactors the render methods in these services to use the new helper functions.

Warnings

:warning:

This PR modified service code for apm but not its test code. That's okay so long as it's refactoring existing code.

:warning:

This PR modified service code for cdnjs but not its test code. That's okay so long as it's refactoring existing code.

:warning:

This PR modified service code for gem but not its test code. That's okay so long as it's refactoring existing code.

Messages

:book:

:sparkles: Thanks for your contribution to Shields, @paulmelnikow!

  Generated by :no_entry_sign: dangerJS

Thanks for reviewing!


#198 - Museo Sans Font-Weight Support

Museo only uses numbers to describe its font-weight.

Perfect, thank you. Will merge it later.

Pull Request Test Coverage Report for Build<PHONE_NUMBER>

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage remained the same at 77.886%

Totals

Change from base Build<PHONE_NUMBER>:
0.0%

Covered Lines:
478

Relevant Lines:
606

💛  - Coveralls


how to reload checkout total?

Hello,
My client want to to remove tax class based on customer field, i already implement but not i want to reload the checkout total without pageload.
Is there any way to possible to reload total using js code?

Hi @sunilit42, would you mind providing more context: which tax class are you removing from which entity? Thanks!

Hi @sunilit42, currently we don't have a way for you to reload the checkout using js without a hard browser refresh.
We are open to consider making checkout reload possible without a full browser refresh in a future release.

@bc-charlesho

just listen event into checkout js and we can fire event for update total, i think quick think possible and very good useful

Basically a way to trigger a state reload from outside checkout-js

@bc-0dp can you please me how to do it?

Well that's the thing, you can't. You'd have to move away from Optimized One Page Checkout and implement your logic into your own checkout-js fork.

i already did b2b Optimized One Page Checkout fork, but not able to do it

Firstly, since it's async I believe you need await.
Secondly, I am not sure if updateCheckout is the right function, instead you might need loadCheckout

Hello @bc-0dp
document.addEventListener("reload-checkout", function() { // (1)                 console.log(that)                 that.props.loadCheckout(that.props.checkoutId, {                     params: {                         include: [                             'cart.lineItems.physicalItems.options',                             'cart.lineItems.digitalItems.options',                             'customer',                             'customer.customerGroup',                             'payments,promotions.banners',                             'consignments.availableShippingOptions'                         ] as any, // FIXME: Currently the enum is not exported so it can't be used here.                     },                 })             });
i want to first reload but it is just getting data

I would have to dig more around to understand how it's implemented.

One more thing i found
https://developer.bigcommerce.com/docs/storefront/cart-checkout/guide/consignments
i m using this API, to update tax but if i m passing same request it does not update total, even i remove tax class
BigCommerce need to update total, seems like they are doing caching of that, is same request then don't update it

Thought I'd add a comment in here as I recently encountered a similar issue, not with tax but currency. We change the currency in checkout but there is no way to refresh the state of SDK so we were presented with the mini cart showing the original currency and a message saying we will be charged in the new currency. It would be great if we could own the state and then refresh this as required. I managed to get around this by reloading the checkout with the new currency id in the query param (setCurrencyId).
I would've thought that calling loadCheckout() and passing in the new cart ID would resolve this but it was unsuccessful


Westend runtime upgrade issue

We observe that during executing of block https://westend.subscan.io/block/18293991 KAGOME is getting stuck.
After node restart everything works.
To reproduce the issue:

Download the snapshot (https://drive.google.com/file/d/17tfnVflDwacZwqtV_K4Iv5KFvFFWktg0/view?usp=drive_link)
Run KAGOME: kagome --chain westend --base-path westend-node-1 --name kagome-mac --wasm-execution Compiled --unsafe-cached-wavm-runtime

Observe the error during block execution

Couldn't reproduce


Feature_request: Define Unit_of_Measurement for sensor

Trying to implement my SNMP bandwith montoring sensors but cant figure out how to customize my code to get it to work. Would be nice to be able to define this for sensors
https://www.home-assistant.io/components/sensor.snmp/
{
   position: [7, 2],
   width: 2,
   height: 1,
   title: '',
   id: {}, // since we are binding each list item to different sensor, so we simply use an empty object
   type: TYPES.TEXT_LIST,
   state: false,
   list: [
      {
         title: 'Internet Speed IN',
         icon: 'mdi-speedometer',
         value: '&sensor.internet_speed_in.state'
      },
	  {
         title: 'Internet Speed OUT',
         icon: 'mdi-speedometer',
         value: '&sensor.internet_speed_out.state'
      },
	  {
         title: 'WAN Download Average',
		 icon: 'mdi-download',
         value: '&sensor.wan_traffic_in_mean.attributes.unit_of_measurement',
	  },
	  {
         title: 'WAN Upload Average',
         icon: 'mdi-upload',
         value: '&sensor.wan_traffic_out_mean.state'
      },
      ]
},

This is already implemented. You can define it with the unit field.

Could you give me an example how to input it in my config example

There you go:
      {
         title: 'Internet Speed IN',
         icon: 'mdi-speedometer',
         value: '&sensor.internet_speed_in.state',
         unit: 'Mbps',
      },

You can also reference state or attributes of the sensor i.e. '&sensor.internet_speed_in.attributes_unit_of_measurement' but in this case it will always be Mbps so why bother :)

Thank you. Works fine.


Decomposition discussion

I'm opening this issue to discuss leveraging Dask/Distributed to approach decomposition problems probably using or borrowing from scikit-learn. Have noticed the work on Dask-GLM, which may have some applicability. Initially am trying to figure out if there is interest in this topic. Once we figure that out, it would be good to hammer out a vision of where this lives and how this looks.

@jakirkham can you explain more about what information you're looking for?  What do you mean by "decomposition problems"?  This phrase may mean a different things to different communities.

I would also find it interesting to hear what your objectives are and what you would be interested in working on.

Is there an active question or comment here?  Can this be closed?

By decomposition, I'm thinking of matrix factorization problems.
ref: http://scikit-learn.org/stable/modules/decomposition.html

Have you seen the work currently in dask.array.linalg?  Did you want to propose something specific?
More generally I think I get confused by issues of the form "this issue is for the discussion of topic X" without any further discussion of that topic by the person who raised the issue.  If you would like to propose something specific then I encourage you to do so.  I would not be surprised to find that people come by and respond.  However if you're waiting for someone else to research your topic and propose things then you might be in for a long wait.

Maybe this is the sort of thing for which a mailing list would be useful if we had one.

Have you seen the work currently in dask.array.linalg?

So that may be useful in implementing things I want to solve. Though the types of matrix factorization problems I'm referring to are not classical matrix factorization. Instead they are approximate matrix factorization problems where an exact factorization won't work. However something that is in some sense optimal can be approached.

Did you want to propose something specific?

For me personally, I'm interested in the possibility of doing dictionary learning with Dask as a near term goal. Though some other techniques like K-SVD and NMF have merits as well. Some of the other things that fall under decomposition may be of interest for other applications (e.g. PCA and ICA).
It would be nice if we could reuse scikit-learn to accomplish this task. However I don't know how feasible this would be.

Yeah, if I were you I would start by doing some research on parallel algorithms for dictionary learning.  Perhaps a google scholar search?  Or if you find a sequential algorithm that can be written only with bulk numpy operations then you might try naively implementing it with dask.array and see how it performs.

Yeah, implementing these is mainly a matter of having some way of doing linear algebra (i.e. BLAS, LAPACK). FWICT this should be possible with current Dask implementations of these operations. Though it is always possible there is some linear algebra operation we are missing.
That said, it will just be a bit of work to implement and could benefit from additional eyes for review. Was hoping by opening this issue, I could connect with some like-minded individuals to collaborate with on this problem.
Plus if there are some pieces of this work that already exist (e.g. LASSO, LARS), which can be reused, that would be helpful to know before embarking on this.

If there are lower level components then maybe start with those?  They might be able to attract more broad interest.  cc @moody-marlin and @marianotepper in case this interests them.

I wonder if this should be moved to dask-ml maybe? Seems like it would be more in scope there, but I don't want to overstep. Thoughts @TomAugspurger?

Have raised related issues over at dask-ml for DictionaryLearning ( https://github.com/dask/dask-ml/issues/95 ), NMF ( https://github.com/dask/dask-ml/issues/96 ), ICA ( https://github.com/dask/dask-ml/issues/97 ), and FA ( https://github.com/dask/dask-ml/issues/98 ). It looks like PCA and TruncatedSVD were already addressed in issue ( https://github.com/dask/dask-ml/issues/22 ). Closing this as relevant discussions can now occur under those issues (and any others deemed relevant by others).


NoBrokersAvailable exceptions during Kafka sends and receives

Ignition-based drivers running in an OCP (Openshift) environment sometimes generate a NoBrokersAvailable exception.

Short term fixed by #85


Driver for ST LPS28DFW Pressure Sensor

Is your feature request related to a problem? Please describe.
We need a driver to get pressure samples from the ST LPS28DFW pressure sensor.
Describe the solution you'd like
I plan to develop the driver, based on the ST HAL "stmemsc", similar to the existing LPS22hh driver. The driver could support I2C and I3C. SPI is not supported by the LPS28DFW sensor. Currently, I only have a board to test I2C.
Describe alternatives you've considered

Use the ST HAL or not? When looking in recent driver contributions for ST Sensors I saw that most are build on top of the ST HAL.
There are 11 different ST pressure sensors, all similar. Zephyr currently supports 3 of them (LPS22hh, LPS22hb, LPS25hb) via individual drivers. I was considering if a unified driver is feasible for this sensor family. Since the sensors are similar but not register compatible, I dropped this idea.

Additional context
Register comparison of some ST pressure sensors.

@avisconti ^^

@jremmert-phytec-iot
I think you can start from lps22df in #62028 (24a0a8e34349c46ced077a3e909dd85989b8080a), and substitute the APIs with the 28dfw one. I think it is better to replicate here.

Thanks for the pointer @avisconti! Somehow I missed this open PR.
lps28dfw has no SPI but has dual full-scale. There is one extra register to implement the dual full-scale setting, otherwise they look register compatible. Once my sample hardware reached, I will test and open a PR.

I'm going to overwrite that PR anyway with one containing only lps22df in order to speed up the review/merging. I'm not changing the lps22df code though.


numbers with other kinds of digits becoming acceptable

Mathjax has an option to introduce to it our own number patterns through regex. Here, @dpvc kindly modified some codes from mhchem for it to adapt with another number pattern /^(?:[\d۰-۹]+(?:[,٬'][\d۰-۹]{3})*(?:[\.\/٫][\d۰-۹]*)?|[\.\/٫][\d۰-۹]+)/. In response to my request here regarding publishing the modifications to find their way up to the mainstream version of mhchem, @dpvc directed me to open an issue here and ask if it is possible to make number patterns configurable in mhchem, as is configurable in the TeX input jax?
thanks

That sounds very interesting. I haven't seen this anywhere before when going through the different international standards for chemical typography. Could you please point me to an authoritative example for notation with Persian numbers? For example, a standard text book at Google Books or Amazon preview?

Sure, attached is an extract from a text book of Iranian high school chemistry book. A university textbook can also be found here.
029-058-C289-1.pdf


back merge from default branch to 'develop'

Closes #24

implemented in https://github.com/hoangvvo/gitflow-workflow-action/pull/41


P2P_NETWORK variable needs to be set for docker

Celestia Node version
v0.10.0
OS
Linux
Install tools
docker run -e NODE_TYPE=light -e P2P_NETWORK=arabica ghcr.io/celestiaorg/celestia-node:v0.10.0 celestia light start --core.ip https://limani.celestia-devops.dev --gateway --gateway.addr <IP_ADDRESS> --gateway.port 26659 --p2p.network arabica

vs
docker run -e NODE_TYPE=light ghcr.io/celestiaorg/celestia-node:v0.10.0 celestia light start --core.ip https://limani.celestia-devops.dev --gateway --gateway.addr <IP_ADDRESS> --gateway.port 26659 --p2p.network arabica

Others
No response
Steps to reproduce it
When running the container without the variable P2P_NETWORK set, it will always set mocha as a default network and not consider the --p2p.network configuration from the command.
Expected result
Only need to set --p2p.network and not P2P_NETWORK as well.
Actual result
Need to set P2P_NETWORK to run in a different network than mocha.
Relevant log output
# docker run -e NODE_TYPE=light ghcr.io/celestiaorg/celestia-node:v0.10.0 celestia light start --core.ip https://limani.celestia-devops.dev --gateway --gateway.addr <IP_ADDRESS> --gateway.port 26659 --p2p.network arabica
Initializing Celestia Node with command:
celestia light init --p2p.network mocha
2023-05-25T08:12:32.249Z	INFO	node	nodebuilder/init.go:28	Initializing Light Node Store over '/home/celestia/.celestia-light-mocha'
2023-05-25T08:12:32.258Z	INFO	node	nodebuilder/init.go:60	Saved config	{"path": "/home/celestia/.celestia-light-mocha/config.toml"}
2023-05-25T08:12:32.258Z	INFO	node	nodebuilder/init.go:62	Accessing keyring...
2023-05-25T08:12:32.262Z	WARN	node	nodebuilder/init.go:191	Detected plaintext keyring backend. For elevated security properties, consider using the `file` keyring backend.
2023-05-25T08:12:32.262Z	INFO	node	nodebuilder/init.go:206	NO KEY FOUND IN STORE, GENERATING NEW KEY...	{"path": "/home/celestia/.celestia-light-mocha/keys"}
2023-05-25T08:12:32.276Z	INFO	node	nodebuilder/init.go:211	NEW KEY GENERATED...
2023-05-25T08:12:32.276Z	INFO	node	nodebuilder/init.go:69	Node Store initialized

NAME: my_celes_key
ADDRESS: celestia1c8ucfxdntfn6f92dqxtq62chhcdcswkt66gyym
MNEMONIC (save this somewhere safe!!!):
pelican glide upgrade image clock carbon grain glory allow cry similar soap hard news decade key since woman finger dice share balcony grief load

Starting Celestia Node with command:
celestia light start --core.ip https://limani.celestia-devops.dev --gateway --gateway.addr <IP_ADDRESS> --gateway.port 26659 --p2p.network arabica

Error: fslock: error opening file: open /home/celestia/.celestia-light-arabica-6/lock: no such file or directory

vs
# docker run -e NODE_TYPE=light -e P2P_NETWORK=arabica ghcr.io/celestiaorg/celestia-node:v0.10.0 celestia light start --core.ip https://limani.celestia-devops.dev --gateway --gateway.addr <IP_ADDRESS> --gateway.port 26659 --p2p.network arabica
Initializing Celestia Node with command:
celestia light init --p2p.network arabica
2023-05-25T08:13:05.906Z	INFO	node	nodebuilder/init.go:28	Initializing Light Node Store over '/home/celestia/.celestia-light-arabica-6'
2023-05-25T08:13:05.907Z	INFO	node	nodebuilder/init.go:60	Saved config	{"path": "/home/celestia/.celestia-light-arabica-6/config.toml"}
2023-05-25T08:13:05.907Z	INFO	node	nodebuilder/init.go:62	Accessing keyring...
2023-05-25T08:13:05.909Z	WARN	node	nodebuilder/init.go:191	Detected plaintext keyring backend. For elevated security properties, consider using the `file` keyring backend.
2023-05-25T08:13:05.918Z	INFO	node	nodebuilder/init.go:206	NO KEY FOUND IN STORE, GENERATING NEW KEY...	{"path": "/home/celestia/.celestia-light-arabica-6/keys"}
2023-05-25T08:13:05.930Z	INFO	node	nodebuilder/init.go:211	NEW KEY GENERATED...
2023-05-25T08:13:05.930Z	INFO	node	nodebuilder/init.go:69	Node Store initialized

NAME: my_celes_key
ADDRESS: celestia1m462v6f4aaxyvg03eaw8mufalr4kh5jt87pztn
MNEMONIC (save this somewhere safe!!!):
order afford machine lucky true legal muscle seed door boring twist canoe orange bind economy family know green destroy practice engine initial tooth educate

Starting Celestia Node with command:
celestia light start --core.ip https://limani.celestia-devops.dev --gateway --gateway.addr <IP_ADDRESS> --gateway.port 26659 --p2p.network arabica

2023-05-25T08:13:05.979Z	INFO	node	nodebuilder/module.go:22	Accessing keyring...
2023-05-25T08:13:05.987Z	INFO	module/state	state/keyring.go:40	constructed keyring signer	{"backend": "test", "path": "/home/celestia/.celestia-light-arabica-6/keys", "key name": "my_celes_key", "chain-id": "arabica-6"}
2023-05-25T08:13:05.988Z	WARN	module/gateway	gateway/module.go:25	Gateway is enabled, however gateway endpoints are not authenticated. Use with caution!
2023-05-25T08:13:06.023Z	INFO	badger	v2@v2.2007.4/levels.go:183	All 0 tables opened in 0s

2023/05/25 08:13:06 failed to sufficiently increase receive buffer size (was: 208 kiB, wanted: 2048 kiB, got: 416 kiB). See https://github.com/quic-go/quic-go/wiki/UDP-Receive-Buffer-Size for details.
2023-05-25T08:13:06.292Z	INFO	module/header	header/config.go:58	No trusted peers in config, initializing with default bootstrappers as trusted peers
2023-05-25T08:13:06.295Z	INFO	header/p2p	p2p/exchange.go:84	client: starting client	{"protocol ID": "/arabica-6/header-ex/v0.0.3"}
2023-05-25T08:13:06.295Z	INFO	fraudserv	fraudserv/helpers.go:29	joining topic	{"id": "/arabica-6/fraud-sub/badencoding/v0.0.1"}
2023-05-25T08:13:06.295Z	INFO	fraudserv	fraudserv/service.go:97	starting fraud proof service	{"protocol ID": "/arabica-6/fraud/v0.0.1"}
...

### Notes

_No response_

Actually the /opt/entrypoint.sh does not allow any modifications except the network.
#!/bin/bash

set -e

if [ "$1" = 'celestia' ]; then
    echo "Initializing Celestia Node with command:"

    if [[ -n "$NODE_STORE" ]]; then
        echo "celestia "${NODE_TYPE}" init --p2p.network "${P2P_NETWORK}" --node.store "${NODE_STORE}""
        celestia "${NODE_TYPE}" init --p2p.network "${P2P_NETWORK}" --node.store "${NODE_STORE}"
    else
        echo "celestia "${NODE_TYPE}" init --p2p.network "${P2P_NETWORK}""
        celestia "${NODE_TYPE}" init --p2p.network "${P2P_NETWORK}"
    fi

    echo ""
    echo ""
fi

echo "Starting Celestia Node with command:"
echo "$@"
echo ""

exec "$@"

When modifying the entrypoint to override the parameter of the Dockerfile, it cannot start with all the parameters. It first need to run the init and then can start the container.

Because of the entrypoint.sh, we cannot reuse the parameter for the start of the init. This was added to support a 'run one command and node initializes and starts'.
You could override the entrypoint, so that entrypoint.sh is not executed, but then you need to manually initialize the directory.

Yes I am overriding entrypoint of the docker at the moment. Not ideal, but I see #2279 should fix this and run init automatically if the node is not initialized yet.

closing as solution appears to in #2279


Update README for Code Pattern

README Updates

Added Code Pattern Title
Added Code Pattern Overview
Added Code Pattern Goals
Added Flow and Architecture Diagram rough draft
Added Steps ToC
Added (Optional) API Step
Updated icons README with License
Made small text and formatting updates

Code Pattern Documentation to be added to wiki
Code Pattern Long Name (wiki: Short Description)
Use an open source object detector deep learning model to display and filter objects recognized in an image in a web application
Code Pattern Description (wiki: Introduction)
The IBM Model Asset eXchange (MAX) has given application developers without data science experience easy access to prebuilt machine learning models. This code pattern shows how to create a simple web application to visualize the text output of a MAX model. The web app uses the Object Detector from MAX and creates a simple web UI that displays bounding boxes around detected objects in an image and lets you filter the objects based on their label and probable accuracy given by the model.

I'll being writing the remaining sections tomorrow but I wanted feedback on what I have.
Feel free to give feedback on any part of the README (even the merged parts) in this PR. This PR will contain the remaining README updates prior to submitting a code pattern proposal and cutting the v1.0 release of the web app.
@MLnick and @djalova I want your input the most on this.
@ptitzler and @gdequeiroz feel free to give input as well.
Also remember this will continue to be updated and edited during the code pattern process so we don't need to perfect everything here, I just want to make sure it doesn't have any errors and makes sense.

I've written up the two descriptive parts for the code pattern that don't go in the readme. If everyone could also take a look at these before I put them in the wiki. I'll also update the PR description with them. Also note that I based these on the ones from the previous web app code pattern (like copy-paste and update to match the differences in the models and web apps).
Code Pattern Long Name (wiki: Short Description)
Use an open source object detector deep learning model to display and filter objects recognized in an image in a web application
Code Pattern Description (wiki: Introduction)
The IBM Model Asset eXchange (MAX) has given application developers without data science experience easy access to prebuilt machine learning models. This code pattern shows how to create a simple web application to visualize the text output of a MAX model. The web app uses the Object Detector from MAX and creates a simple web UI that displays bounding boxes around detected objects in an image and lets you filter the objects based on their label and probable accuracy given by the model.

I just pushed the overview paragraph as well as a handful of other minor changes. I also updated the icons README with the icons' License. I've updated the PR title and description to match these changes and moved this out of WIP.
I hope to merge this by EoD Monday, no later than lunchtime Tuesday, and would appreciate reviews before then. I'll also be submitting the code pattern proposal tonight.

@ptitzler I fixed the capitalization issues and responded to you other comments.


'WaitToSeeElement' is not working as expected.

Hi.
I'm trying to wait until an element with specific text exists on a page, but specbind doesn't seem to wait and acts as if the element exists.
How to reproduce:
Add the following to .\specbind\src\SpecBind.CodedUI.IntegrationTests\Features\WaitingTests.feature
Scenario: Wait for element
	Given I navigated to the Home page
	 And I chose New Information
	 And I was on the Information page
	When I choose Alert Box
	 And I see an alert box and select Ok
	Then I wait to see You Pressed Ok

Add the following to .\specbind\src\SpecBind.CodedUI.IntegrationTests\Pages\InformationPage.cs
        [ElementLocator(Text = "You pressed OK!")]
        public HtmlDiv YouPressedOk { get; set; }

Run the WaitForElement test and notice that the test passes without error.
This is unexpected because what is actually displayed on the page is "Alert Cleared" and "You Pressed OK!" is never displayed on the page.
("You Pressed OK!" is only displayed when the "Confirm Box" button is clicked, and not the "Alert Box".)
Any ideas?
Thank you!

Text locators are not primary locators on the page so it most likely responded to something else on the page existing. If you look at element location doc, Microsoft suggests not using text as a primary element locator.


COSBETA-190: Updates to copy across the service

Leaving this in draft state for now. Will change to review once the remaining changes have been made.

Covered by #876.


Improve code documentation

Shall we create issue templates as an interaction documentation? I found that we need information such as toolchain, library version for investigation, for example, in #87.

that would be great @imWildCat I was finding it hard to gather info.

Sounds good. Would you start with a minimal tempalte?

@icodesign Sure! Will do that in this week.


OCPBUGS-4197: Handle error responses from upgrade graph server

/jira refresh

/cc @pixelsoccupied @fontivan

Tried on a live cluster too, error is now handled correctly.
Just for my knowledge (first time reviewing this project's PR) -- we are not expecting any unit test for this fix or getImageForVersionFromUpdateGraph in general?

/approve

Tried on a live cluster too, error is now handled correctly.
Just for my knowledge (first time reviewing this project's PR) -- we are not expecting any unit test for this fix or getImageForVersionFromUpdateGraph in general?

In general, yes. For this function though, it would require mocking an http response. I will see if I can find some examples and add it later.

/approve

/lgmt

/lgtm

/cherrypick release-4.12


humanize delta_file_sizes

The delta_file_sizes function is a nice wrapper over the DeltaTable.detail() method.
Before this PR, the value that delta_file_sizes gave over detail() was to do some simple division and rounding.
This PR is a bit opinionated, as it asserts that the delta_file_sizes function should be used for the purpose of humans, not machines. We keep the dividing and rounding functionality while "humanizing" the outputs by converting the units and adding commas to large numbers.

@christophergrant - I like this.  Can we add it as a separate method?  I think the existing implementation is good, but you're is also great.  @robertkossendey @souvik-databricks - feel free to chime in here.

I agree with @MrPowers we should split that into two methods. The reason that the current implementation does not have human readable output is that users might want to take the output and process it programatically afterwards.
Idea from my side: The human readable could also only print instead of return.

@christophergrant - are you interested in adding a PR with a separate show_delta_file_sizes method that prints the result as @robertkossendey suggested?  We'd love to add your contribution.  Let us know!

Created an issue for this work: https://github.com/MrPowers/mack/issues/62
Feel free to open a new PR if you'd like to grab this work.


Grafana cloud refuses to reset Zabbix API token

Versions

Grafana
Zabbix
Grafana-Zabbix Plugin

Cloud
6.4.12
4.4.5

The issue
I have a Grafana Cloud instance with a Zabbix plugin installed.
I have configured the Zabbix data-source and it worked fine.
Now, I need to change the Zabbix API token, but Grafana won't reset the token.
It shows the token as configured, but the reset button does nothing.

I was able to reconfigure the Zabbix data-source with a user and password, but the API token just won't to reset.
What could be wrong?

Expectations
A correct token reset.

@zoltanbedi, I'm still unable to reset the token. Nothing happens when I click the reset button.

@diasdmhub sorry this is not yet released. I'll cut a release today.

@zoltanbedi, I'm still unable to reset the token. Any news?

@diasdmhub have you updated the plugin to 4.4.6?

After updating the plugin and updating the Grafana instance, I was able to reset the token.
Thank you.

Thanks for letting us know @diasdmhub and also reporting it in the first place.


GSD Request

--- GSD JSON ---
{
  "vendor_name": "Linux",
  "product_name": "Kernel",
  "product_version": "versions from  to before v4.14.257",
  "vulnerability_type": "unspecified",
  "affected_component": "unspecified",
  "attack_vector": "unspecified",
  "impact": "unspecified",
  "credit": "",
  "references": [
    "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=c5c8a26c0dc69a400553245e92d741fe55f91095"
  ],
  "extended_references": [
    {
      "type": "commit",
      "value": "c5c8a26c0dc69a400553245e92d741fe55f91095",
      "note": "fixed"
    }
  ],
  "reporter": "joshbressers",
  "reporter_id": 1692786,
  "notes": "",
  "description": "perf hist: Fix memory leak of a perf_hpp_fmt\n\nThis is an automated ID intended to aid in discovery of potential security vulnerabilities. The actual impact and attack plausibility have not yet been proven.\nThis ID is fixed in Linux Kernel version v4.14.257 by commit c5c8a26c0dc69a400553245e92d741fe55f91095. For more details please see the references link."
}
--- GSD JSON ---

This issue has been assigned GSD-2021-1002394


TypeError: PushNotification.init is not a function (iOS, plugin v1.5.3)

Hey folks,
We've just begun to transition over to this push plugin from the old PushPlugin. Unfortunately because we have a business requirement to continue supporting iOS 7 for a little while yet, we're stuck with cordova-ios 3.9.2 and therefore phonegap-plugin-push 1.5.3.
We were able to transition our Android builds over to this plugin without issue, but the same code on iOS is giving us trouble. It seems like the plugin hasn't properly loaded. There are no errors in the CLI when we add the plugin, or in xcode when we build, so from that side it looks like things should work.
On an iOS simulator (iOS 9.3), we're seeing:
window.device.available
> true
var push = PushNotification.init();
> TypeError: PushNotification.init is not a function
typeof PushNotification
> "function"

While on Android:
window.device.available
> true
typeof PushNotification
> "object"

I understand that the plugin doesn't work correctly on simulators, so I'm not sure if this is the expected result. That said, our physical iOS devices are also failing to register for push notifications.
I imagine that you don't want to support old versions of this plugin anymore, but do you have any ideas for debugging steps we could try?
Thanks!
Expected Behaviour
var push = PushNotification.init({
    ios: {
        alert: "true",
        badge: "true",
        sound: "true"
    }
});

push.on('registration', function(data) { console.log(data.registrationId); });

> "<registration id>"

Actual Behaviour
TypeError: PushNotification.init is not a function

Reproduce Scenario (including but not limited to)
We've got a fairly complicated build process so it's difficult for me to extract a minimal test case right now, but I can do it if required.
Steps to Reproduce
(See above)
Platform and Version (eg. Android 5.0 or iOS 9.2.1)
iPhone 6 simulator, iOS 9.3
iPad, iOS 9.2.1
Cordova CLI version and cordova platform version
> cordova --version
6.2.0
> cordova platform version ios
3.9.2

Plugin version
> cordova plugin version | grep phonegap-plugin-push
1.5.3

Sample Push Data Payload
N/A - can't even register
Sample Code that illustrates the problem
We've tried running these commands from the Safari debugger while debugging the Cordova webview:
window.device.available
> true
var push = PushNotification.init();
> TypeError: PushNotification.init is not a function
typeof PushNotification
> "function"

Logs taken while reproducing problem
Haven't created any - where can I find these?

Hey, me again. After a thorough investigation, it looks like this was caused with an issue in our custom build process. We had a problem where the plugin's push.js was not being properly included into our final application. Once that was properly added in, the issue disappears. I'll close the issue.


Add "URL Authorization Rules" details under "Allow Anonymous requests (no action)" section

This blog discusses the ability to customize the authorization of an App Service's subdomains. Would it be possible to include information from that blog onto this page or redirect to a page that discusses the URL authorization rules if it exists?

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

ID: 75e17529-8b8a-1d67-f0e1-840d1d3ca990
Version Independent ID: 265645df-ef21-4631-1744-7014b3ee681a
Content: Authentication and authorization - Azure App Service
Content Source: articles/app-service/overview-authentication-authorization.md
Service: app-service
GitHub Login: @cephalin
Microsoft Alias: cephalin

@WilliamXieMSFT Thanks for the feedback. We are actively investigating and will get back to you soon.

@WilliamXieMSFT Thanks for the valuable feedback! I have assigned the issue to the content author to review further and update the document as appropriate.

@cgillum confirmed that there's no plan to officially support the feature shown in that blog. No action for docs. #please-close


Use offical ENet repository as a submodule

Since ENet is supporting itself CMake we shouldn't be in need of a fork of ENet anymore.
https://github.com/lsalzman/enet/commit/c8fa0aeea46d8ac00b2402f5ab7f09770837124a
We are using currently https://github.com/Theintercooler/enet

:+1:
Agree, it shouldn't be much work anyways.

reason for closing and "wontfix"?

(16:22:46) Fohlen: isn't that solved as well by relying to the enet library installed on the system (or a dll on windows) ?
(16:22:52) Fohlen: afaik
(16:29:17) a_teammate: true

https://github.com/inexor-game/code/commit/1a79b552f2f17d190f3b205fd8b4dffe0b1788e5


Instructions for Blazor

I am a Blazor developer.  You give instructions here for JavaScript and Angular but not for Blazor.

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

ID: 686d6ca6-916e-3039-a840-b9d02f7dbba8
Version Independent ID: dd40f329-27f7-9a46-43c5-b239a6fd7534
Content: Build single-page app calling a web API - Microsoft identity platform
Content Source: docs/identity-platform/scenario-spa-call-api.md
Service: active-directory
Sub-service: develop
GitHub Login: @OwenRichards1
Microsoft Alias: owenrichards

@carolynlschroeder
Thanks for your feedback! We will investigate and update as appropriate.

@carolynlschroeder
Thanks for bringing this to our attention.
I'm going to assign this to the document author so they can take a look at it accordingly.
@OwenRichards1
Can you please check and add your comments on this doc update request as applicable.

I certainly will.
On Mon, Jan 22, 2024 at 1:28 AM Saibaba Balapur Hireka <
@.***> wrote:

@carolynlschroeder https://github.com/carolynlschroeder
Thanks for bringing this to our attention.
I'm going to assign this to the document author so they can take a look at
it accordingly.
@OwenRichards1 https://github.com/OwenRichards1
Can you please check and add your comments on this doc update request as
applicable.
—
Reply to this email directly, view it on GitHub
https://github.com/MicrosoftDocs/entra-docs/issues/216#issuecomment-1903403517,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ABDKJXBUZ6LMBJKPNZWJQ7LYPYIIXAVCNFSM6AAAAABCALGEICVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTSMBTGQYDGNJRG4
.
You are receiving this because you were mentioned.Message ID:
@.***>

--
Carolyn Schroeder
@.***
(913) 217-8875

@carolynlschroeder Thanks for the valuable feedback - i've recently undertaken work to freshen up and update our Blazor WebAssembly samples to .NET 8.
The sample is located here.
I will be updating our documentation to support this sample, however seeing as you requested sample I thought I'd provide you the repo in the meantime!
I'll be closing this issue for now, but feel free to re-open or submit any other feedback you may have.
Thanks again for your contribution.
#pleaseclose

@carolynlschroeder Thanks for the valuable feedback - i've recently undertaken work to freshen up and update our Blazor WebAssembly samples to .NET 8.
The sample is located here.
We are currently updating our documentation to support this sample, however seeing as you requested a sample I thought I'd provide you the repo in the meantime!
I'll be closing this issue for now, but feel free to re-open or submit any other feedback you may have.
Thanks again for your contribution.
#please-close

Just a few comments on your code:
I do not understand the need for this in Program.cs
builder.RootComponents.Add("#app");
builder.RootComponents.Add("head::after");
Also in Index.razor
@JsonSerializer.Serialize(graphApiResponse, new JsonSerializerOptions { WriteIndented = true })
is iffy unless browser can interpret "Language-js"
Thanks for your contribution


Ensure no non-mongo integration tests have regressed in next-major

Following are the non-mongo integration tests that are passing on master but not passing on next-major.
Couchbase:

[ ] demo/timeSeriesAggregation.test

MarkLogic XML:

[ ] different-flattens.test
[ ] unifyFlattenedFieldsWithUnflattened.test

MarkLogic JSON:

[ ] unifyFlattenedFieldsWithUnflattened.test

Spark:

[ ] different-flattens.test
[ ] orderedWildcardWithProjection.test
[ ] sortWildcardOnExpression.test
[ ] unifyFlattenedFieldsWithUnflattened.test
[ ] demo/nestedSelectWithReduce.test
[ ] demo/timeSeriesAggregation.test

For posterity, compiled these lists using
$ ag -l '(\"spark_local\":[ \t]*\"pending)|(\"spark_local\":[ \t]*\"skip)|(\"spark_local\":[ \t]*\"timeout)' it/src/main/resources/tests/*.test it/src/main/resources/tests/*/*.test

and then diffing the results against master using grep -Fvf.

Removing the topic: CI (Travis) label since these failures don't have anything to do with Travis. They are legitimate regressions in tests against various connectors.

There's going to be quite a few mimir tests regressing without an implementation of #2681.  I would propose that we consider such tests to be out of scope for the next-major merge, since they will come back to life with the resolution of that issue.

@djspiewak I just navigated to this issue to make exactly that same comment. So :+1:.


Unable to resolve dependency tree

Description of the bug:

When following https://cdk8s.io/docs/latest/getting-started there is a error when running cdk8s init typescript-app
Reproduction Steps:

C:\dev\misc\cdk_test>npm -g list
C:\Users\almenon\AppData\Roaming\npm
`--<EMAIL_ADDRESS>

C:\dev\misc\cdk_test>node --version
v16.14.2

C:\dev\misc\cdk_test>npm install -g cdk8s-cli

added 154 packages in 6s

15 packages are looking for funding
  run `npm fund` for details

C:\dev\misc\cdk_test>ls -la
total 8
drw-rw-rw-   2 almenon 0 4096 2023-02-21 21:50 .
drw-rw-rw-  10 almenon 0 4096 2023-02-21 21:41 ..

C:\dev\misc\cdk_test>cdk8s init typescript-app

Error Log:

Initializing a project from the typescript-app template
npm ERR! code ERESOLVE
npm ERR! ERESOLVE unable to resolve dependency tree
npm ERR!
npm ERR! While resolving<EMAIL_ADDRESS>npm ERR! Found<EMAIL_ADDRESS>npm ERR! node_modules/constructs
npm ERR<EMAIL_ADDRESS>from the root project
npm ERR!   peer constructs@"^10" from<EMAIL_ADDRESS>npm ERR!   node_modules/cdk8s
npm ERR<EMAIL_ADDRESS>from the root project
npm ERR!     peer<EMAIL_ADDRESS>from<EMAIL_ADDRESS>npm ERR!     node_modules/cdk8s-plus-25
npm ERR<EMAIL_ADDRESS>from the root project
npm ERR!
npm ERR! Could not resolve dependency:
npm ERR! peer<EMAIL_ADDRESS>from<EMAIL_ADDRESS>npm ERR! node_modules/cdk8s-plus-25
npm ERR<EMAIL_ADDRESS>from the root project
npm ERR!
npm ERR! Fix the upstream dependency conflict, or retry
npm ERR! this command with --force or --legacy-peer-deps
npm ERR! to accept an incorrect (and potentially broken) dependency resolution.
npm ERR!
npm ERR!
npm ERR! For a full report see:
npm ERR! C:\Users\almenon\AppData\Local\npm-cache\_logs\2023-02-22T05_50_33_070Z-eresolve-report.txt

npm ERR!      C:\Users\almenon\AppData\Local\npm-cache\_logs\2023-02-22T05_50_33_070Z-debug-0.log
Error: error during project initialization: Error: Command failed: npm install<EMAIL_ADDRESS><EMAIL_ADDRESS><EMAIL_ADDRESS>    at checkExecSyncError (node:child_process:828:11)
    at execSync (node:child_process:902:15)
    at installDeps (C:\Users\almenon\AppData\Roaming\npm\node_modules\cdk8s-cli\templates\typescript-app\.hooks.sscaff.js:44:3)
    at Object.exports.post (C:\Users\almenon\AppData\Roaming\npm\node_modules\cdk8s-cli\templates\typescript-app\.hooks.sscaff.js:15:3)
    at executePostHook (C:\Users\almenon\AppData\Roaming\npm\node_modules\cdk8s-cli\node_modules\sscaff\lib\sscaff.js:81:37)
    at sscaff (C:\Users\almenon\AppData\Roaming\npm\node_modules\cdk8s-cli\node_modules\sscaff\lib\sscaff.js:48:15)
    at async Object.handler (C:\Users\almenon\AppData\Roaming\npm\node_modules\cdk8s-cli\lib\cli\cmds\init.js:55:13)
STDOUT:
undefined
STDERR:
undefined
    at Object.handler (C:\Users\almenon\AppData\Roaming\npm\node_modules\cdk8s-cli\lib\cli\cmds\init.js:59:19)

Environment:

Framework Version: latest
OS: Windows (and yes, I have ls on Windows cmd, it's via https://github.com/bmatzelle/gow)

Other:

This is :bug: Bug Report

It looks like as a result of this the package.json is generated without any packages installed. No node_modules directory is present.
{
  "name": "cdk_test",
  "version": "1.0.0",
  "main": "main.js",
  "types": "main.ts",
  "license": "Apache-2.0",
  "private": true,
  "scripts": {
    "import": "cdk8s import",
    "synth": "cdk8s synth",
    "compile": "tsc --build",
    "watch": "tsc --build -w",
    "test": "jest",
    "build": "npm run compile && npm run test && npm run synth",
    "upgrade": "npm i cdk8s@latest cdk8s-cli@latest",
    "upgrade:next": "npm i cdk8s@next cdk8s-cli@next"
  }
}

Running npm i cdk8s@latest --save works without issue.

@sumupitchayan
when will I run command? : npm i cdk8s@latest --save
npm install -g cdk8s-cli
// <- here?
mkdir hello
cd hello
cdk8s init typescript-app
// <- here?

I refer to the article below
https://cdk8s.io/docs/latest/getting-started/#prerequisites

@eno-conan Can you try doing it before initializing the cdk8s app?
npm install -g cdk8s-cli

npm i cdk8s@latest --save

mkdir hello
cd hello
cdk8s init typescript-app

@sumupitchayan
tried doing
npm install -g cdk8s-cli

npm i cdk8s@latest --save

mkdir hello
cd hello
cdk8s init typescript-app

but the same result
$ cdk8s init typescript-app
Initializing a project from the typescript-app template
npm ERR! code ERESOLVE
npm ERR! ERESOLVE unable to resolve dependency tree
npm ERR!
npm ERR! While resolving<EMAIL_ADDRESS>npm ERR! Found<EMAIL_ADDRESS>npm ERR! node_modules/constructs
npm ERR<EMAIL_ADDRESS>from the root project
npm ERR!   peer constructs@"^10" from<EMAIL_ADDRESS>npm ERR!   node_modules/cdk8s
npm ERR<EMAIL_ADDRESS>from the root project
npm ERR!     peer<EMAIL_ADDRESS>from<EMAIL_ADDRESS>npm ERR!     node_modules/cdk8s-plus-25
npm ERR<EMAIL_ADDRESS>from the root project
npm ERR!
npm ERR! Could not resolve dependency:
npm ERR! peer<EMAIL_ADDRESS>from<EMAIL_ADDRESS>npm ERR! node_modules/cdk8s-plus-25
npm ERR<EMAIL_ADDRESS>from the root project
npm ERR!
npm ERR! Fix the upstream dependency conflict, or retry
    at sscaff (C:\Users\eno-conan\AppData\Roaming\npm\node_modules\cdk8s-cli\node_modules\sscaff\lib\sscaff.js:48:15)
    at async Object.handler (C:\Users\eno-conan\AppData\Roaming\npm\node_modules\cdk8s-cli\lib\cli\cmds\init.js:55:13)
STDOUT:
undefined
STDERR:
undefined
    at Object.handler (C:\Users\eno-conan\AppData\Roaming\npm\node_modules\cdk8s-cli\lib\cli\cmds\init.js:59:19)

Highly bizarre..what happens here is that npm thinks it needs to install two different versions of the constructs library:

10.2.0 (Pinned direct)
^10.2.1 (Caret transitive)

These two cannot co-exist. Fro posterity, we can reproduce this by running:
npm install<EMAIL_ADDRESS><EMAIL_ADDRESS><EMAIL_ADDRESS>
The weird thing is though that the init template always uses carets, so the command should always be:
npm install<EMAIL_ADDRESS><EMAIL_ADDRESS><EMAIL_ADDRESS>
Which does succeed. The fact both this issue as well as its duplicate use windows, makes me think the problem here is with some shell escaping when we run the command

Also see https://github.com/pnpm/pnpm/issues/4940

@sumupitchayan We can fix this by removing the need to run npm install <library>, and instead just write the correct versions in the package.json file, and run npm install.

Thanks!


Need perf alerts via js for DOMReady or similar.

We can add things to the page that don't increase server time much but increase TTI a lot.

Google Analytics gives us a very broad start here.
It currently rates us as "Good" though which feels a bit kind considering the amount of time it takes to render /cards/ in the browser and so on.
https://developers.google.com/web/updates/2017/06/user-centric-performance-metrics has stuff on measuring TTI but it's not trivial.

I also tried minifying html as suggested by Google. It gets a lot smaller but then most of the benefits get lost in gzip. (/cards/ gets 1MB smaller in HTML but only 10KB smaller in gzip, and the django minifier took 850ms.)

Google gives average load times for each path on the site which is as much as we need. Not sure how to set up alerting from that, though.

I set up an alert in Google Analytics for when page load time goes over 20s on average. Not a very high bar to start ...


Feature idea: Download rate for Chrome Dev Tools Network Monitor

In the network monitor in Chrome's Developer tools, if would be nice to have an optional column for the download rate (B/s or Mb/s).
This is not simply the file size column divided by time column, since the time column also includes waiting times. It would rater be the "file size" divided by "content download time".
Rationale: The download rate would be good to find bottlenecks in the network infrastructure (e.g. when parts of the web page come from different servers).
Page Affected: https://developers.google.com/web/tools/chrome-devtools/network-performance/
What needs to be done?
In the Network pane in Chrome Dev Tools, add an optional column for Download rate (B/s), which equals to Size divided by content download time.

[ ] Appropriate type-something label has been added.
[ ] Appropriate section-something label has been added.

Please send this feature request to Chromium Bugs.


Log files for unittests need to be prefixed with MTGT

@JudTown17 just noticed this the log files for the unittests are coming out with an SGT prefix instead of MTGT prefix. Should be a quick fix for this one...

This is fixed with PR #46.


feat(provider): Add batching for JSON-RPC requests

The BatchRequest struct is added and it allows for sending multiple JSON-RPC requests in a single batch.

Motivation
ethers-rs is currently lacking batching of multiple JSON-RPC requests. There are many use-cases for such functionality and hereby an implementation is proposed.

Solution
A new struct, namely, BatchRequest, is introduced.  BatchRequest acts a simple, generic, container of JSON-RPC requests.
Batches are created as follows:
use ethers::prelude::*;
// Creates a new, empty, batch.
let batch = BatchRequest::new();

If the user already knows the number of requests it is going to send, BatchRequest::with_capacity can be used instead:
use ethers::prelude::*;
// Creates a new, empty, batch, with a pre-allocated capacity of 10.
let batch = BatchRequest::with_capacity(10);

BatchRequest is agnostic of the underlying requests, both in terms of parameters and return types, as long as they can be serialised and deserialised. Adding JSON-RPC requests to batches is as simple as:
use ethers::prelude::*;

let address1: Address = "0xd5a37dC5C9A396A03dd1136Fc76A1a02B1c88Ffa".parse()?;
let address2: Address = "0x4d7450da3abc67663c6C3989B4c84F35e5D0B5fC".parse()?;

let pos = H256::from_low_u64_be(8);

let mut batch: BatchRequest = BatchRequest::with_capacity(2);
// All kinds of JSON-RPC requests can go here.
batch.add_request("eth_getStorageAt", (address1, pos, BlockNumber::Latest))?;
batch.add_request("eth_getStorageAt", (address2, pos, BlockNumber::Latest))?;

Furthermore, batches created with BatchRequest can be executed by providers. The same batch can be executed by manyfold providers, as shown in the following example:
use ethers::prelude::*;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let address1: Address = "0xd5a37dC5C9A396A03dd1136Fc76A1a02B1c88Ffa".parse()?;
    let address2: Address = "0x4d7450da3abc67663c6C3989B4c84F35e5D0B5fC".parse()?;

    let pos = H256::from_low_u64_be(8);

    let mut batch = BatchRequest::with_capacity(2);
    batch.add_request("eth_getStorageAt", (address1, pos, BlockNumber::Latest))?;
    batch.add_request("eth_getStorageAt", (address2, pos, BlockNumber::Latest))?;

    let http_client = Provider::<Http>::try_from("https://api.avax.network/ext/bc/C/rpc")?;
    let ws_client = Provider::<Ws>::connect(
        "wss://speedy-nodes-nyc.moralis.io/bdc23feb8c3bd2b3e8d6a716/avalanche/mainnet/ws",
    )
    .await?;

    let mut ws_responses: BatchResponse = ws_client.as_ref().execute_batch(&mut batch).await?;
    let mut http_responses: BatchResponse = http_client.as_ref().execute_batch(&mut batch).await?;

    while let Some(Ok(storage)) = ws_responses.next_response::<H256>() {
        println!("{storage:?}")
    }

    while let Some(Ok(storage)) = http_responses.next_response::<H256>() {
        println!("{storage:?}")
    }

    Ok(())
}

out:
0x6298ae7d00000000399dcf6078402dab87ab000000000000000000050ae7bd47
0x6298af7d0000000000d41171d7825e495f8e00000421fcd185b36af97a5abe6e
0x6298ae7d00000000399dcf6078402dab87ab000000000000000000050ae7bd47
0x6298af7d0000000000d41171d7825e495f8e00000421fcd185b36af97a5abe6e

As shown, batches can be re-used and cached.
The user gets back a BatchResponse struct, which implements the next_response method. Responses are retrieved and deserialised, as also shown.
I implemented a .execute_batch() method for the Provider struct, more precisely, such method is implemented for 3 transports: http, ws and icp. I did not put it in the JsonRpcClient trait, as to proceed in that direction I felt that someone else's opinion was needed.
Transports implementation needed only minor modifications to accommodate such change.
Request and response ids
To match requests and responses in the transport layer, and to preserve the order of issued responses with respect to requests, the following solution is adopted, in order:

The provider's id is incremented by the length of the batch and fetched.
BatchRequest sequentially populates the ids of the inner requests starting from the latter id.
Such id is then attached to the batch instruction, which is sent by the provider to the inner transport.
BatchResponse sorts the responses in descending order with respect to their ids.
The id of the first response in the batch is used to uniquely determine the channel to send the response into in the transport layer.

It's important to note that we forbid the user from sending empty batches by raising BatchError::EmptyBatch.

PR Checklist

[x] Added Tests
[x] Added Documentation
[x] Updated the changelog

@mattsse I have yet to look at #1267.

As a process point, let's please open an issue + discuss the design before getting into opening a PR :) These are low level features, and it's unclear how they'd integrate with the higher level provider + middlewares. How would we integrate this with e.g. higher level abstractions @frjnn?

I thought a bit about this issue, looking at it through the lens of #1267 (which I am still working on btw).
The solution by @frjnn looks generally workable, but suffers from a lot of duplication due to the  way the current JsonRpcClient trait is structured. It does also look a bit inconvenient to use, as the caller has to basically insert raw RPC requests and then manually select the correct response type when iterating over each batch response (the ordering by id is clever though!)
The JSON-RPC spec for batches is pretty permissive, though, and some edge cases seem to be not handled (off the top of my head):

The server may send a single error response instead of an array of responses
The server may respond with fewer response objects than sent request objects

Anyways, the revised Connection trait will probably need an additional method for sending batch requests. How this will look like depends on what the end user API will look like.
Also, here are some alternative approaches:
1. Middleware
I personally hate the Middleware trait but this looks like a legit use case for it. It would require a ton of duplication and be cumbersome to implement (basically reimplement every RPC call to put it into a batch first) but be a bit more type-safe.
Response parsing would likely still have to be done by hand.
2. "Meta" Connection
This is similar to the design in rust-web3. There would have to be a separate batch connection wrapper, which intercepts any requests from the higher-level Provider API and stores them in a batch first. Would look roughly like this:
let provider = Provider::connect("http://localhost:8545").await?;
let provider: Provider<Batch<_>> = Batch::wrap(provider);

let a = batch.get_block_by_number("earliest".into()); // no await!
let b = provider.get_block_by_number("latest".into());

// calling `a.await` before `provider.send_batch` would either block
// (potentially deadlock) or panic
provider.send_batch().await?

let res_a = a.await?; // both awaits resolve instantly
let res_b = b.await?;

Fully type-safe, but with a potential footgun, as the caller must not await any request futures before calling send_batch.
3. Batch trait and intermediate RpcCall type
This one is the most involved tbh. Under the current revised API Provider methods look like this:
pub async fn get_block_by_hash(
    &self,
    hash: &H256,
) -> Result<Option<Block<H256>>, Box<ProviderError>> {
    self.send_request("eth_getBlockByHash", (hash, false)).await
}

This does not allow to externally access the raw request after the call. Instead, all methods could return a struct like
pub struct RpcCall<'a, C, R> {
    connection: &'a C,
    raw_request: (u64, Box<RawValue>),
    _marker: PhantomData<fn() -> R>,
}

This could then be either called and awaited directly or put into a batch like this:
let a = provider.get_block_by_hash(&hash1);
let b = provider.get_block_by_hash(&hash2);

let (a, b) = provider.send_batch((a, b)).await?;

Where Provider::send_batch takes a generic Batch, which would be implemented for tuples with a certain length (2-16 or so) of RpcCalls. The right types for the returned a and b would be selected automatically, although they probably would still have to be wrapped in an Option or a Result (or both...).

Thanks for the articulate review. I will quote some extracts.

"(...) suffers from a lot of duplication due to the way the current JsonRpcClient trait is structured"

I fully agree. I am very much open to integrate it in #1267, should it be ok for you and for everyone here. From what I was able to seen in the actual transport implementation, the redundancy came from the way ethers-rs handles requests and responses.

"It does also look a bit inconvenient to use, as the caller has to basically insert raw RPC requests and then manually select the correct response type when iterating over each batch response."

I agree, nonetheless, that's as abstract as  the JsonRpcClient API allows things to be done right now. By calling request the user is performing the very same action, just only one method at a time. I do believe though that the BatchRequest struct would allow for some pretty dope higher level API.

The JSON-RPC spec for batches is pretty permissive (...).

Thank you ver much for pointing this out, I am not very familiar with the caveats of the JSON-RPC protocol. Referring to this specs, to my understanding, the server will return a single error response, without id (i.e. null id) when the batch is either malformed or empty. The implementation in this PR covers both such events.
Quoting the spec I linked, I notice it says "A Response object SHOULD exist for each Request object (...)" are you referring to this? If so, how can we address this issue?
Also I would not suggest to stick with the Middleware trait neither. Out of the solutions you proposed, the one I like the most and that I think provides the user with the better experience is the number 2.

I fully agree. I am very much open to integrate it in #1267, should it be ok for you and for everyone here. From what I was able to see in the current transport implementation, the redundancy came from the way ethers-rs handles requests and responses.

I am not entirely sure how this would be organized, but I think you could do a PR-in-PR if I gave you access to my fork of the repo and it eventually all gets merged as #1267. 🤔

Thank you ver much for pointing this out, I am not very familiar with the caveats of the JSON-RPC protocol. Referring to this specs, to my understanding, the server will return a single error response, without id (i.e. null id) when the batch is either malformed or empty. The implementation in this PR covers both such events. Quoting the spec I linked, I notice it says "A Response object SHOULD exist for each Request object (...)" are you referring to this? If so, how can we address this issue?

Sorry, I must have overlooked this, if it is already handled. But your summary sounds basically correct. I think it could make sense to let the entire batch operation fail, if any of them fail, so as to make handling the happy case nice and easy. So a batch error could either be list of JsonRpcErrors (collecting all error responses), a IncompleteError, if any of the requests is missing a response or just a single JsonRpcError.

Also I would not suggest to stick with the Middleware trait neither. Out of the solutions you proposed, the one I like the most and that I think provides the user with the better experience is the number 2.
Edit: also number 3 looks good, but I would get rid of the limit of 16, which would not be of much usefulness in my opinion. If you think about id, it's very similar to what I proposed, and such intermediate objects would also greatly simplify the logic behind BatchRequest.

The more I think of it, I like option 3 the most. The intermediate RpcCall objects add some flexibility for the caller and they can implement Future directly and easily, so there is no additonal call method required. The arbitrary limit for the tuple length is because rust doesn't have variadic generics, so these trait implementations would have to be made by hand (macro), or do you mean something else? Additionally, impls for Vecs, arrays and slice can also be made for requests with the same output type. Ordering by ID would no longer be possible, though, because requests could be added to the batch in any order and the output order would have to match the input order.

(Recommend we move the design discussion to an issue about what the right way to implement this is :D)


Webpack repo fails lint out of the box on windows

Lint fails on the CR in EOL of files on windows. I tried cloning the repo on linux and things worked as expected.
I tried with git's core.autocrlf set to true and set to false and they both failed. My analysis is that this happens because .gitattributes has * text=auto which is equivalent to having autocrlf to true all the time.
On windows, this means that EOLs will be CRLF, which fails lint.
Options to solve this problem

Set * text eol=lf in .gitattributes
Add *.js eol=lf below * text=auto in .gitattributes

Talked to @TheLarkInn briefly about this issue.

It is expected, core.autocrlf is an option for this (and you should use it), many of OSS repos use * text=auto:

https://github.com/facebook/react/blob/main/.gitattributes#L1
https://github.com/microsoft/vscode/blob/main/.gitattributes#L1

Can list more if you want, set core.autocrlf to input, your IDE should read .editorconfig (most of IDE can do it) and we have end_of_line = lf

I'm going to add a todo for myself add a note about this in our contributing guide. It should be there.

For what it's worth, I too ran into this issue when cloning the webpack repo, and having Prettier immediately complain about the carriage returns:

It was not obvious to me how to fix it (and fiddling with git settings didn't seem to help, though I'll admit it was my first time encountering something like this, so I may have missed the obvious). I eventually did find a solution, albeit a somewhat awkward one:

If node_modules is already created, delete it (e.g., rimraf node_modules). That will make the script run much faster.
Open the folder in Windows Explorer
Right click and open Git Bash
Run find . -name "*.js" -exec dos2unix {} \;
Commit the resulting file changes in my clone/branch/fork. (It's OK, they don't show up in the eventual PR into Webpack).

(Steps inspired by https://superuser.com/a/1252691)
It took several minutes for the script to scan through all the files, but it did do the trick once it was done.
@TheLarkInn , would definitely be good to have the definitive steps in the contributing guide, and hopefully simpler ones than what I ended up doing :-). And ideally, to have things "just work" out of the box if that's feasible.


Playlist ?

Is it possible to use with playlist? I want to allow skip to next , etc.

playlist is not supported out of the box, but you can easily build a control script using the api.

If so easy then where is the "easy example"?

https://codepen.io/moay/pen/LNwGbX


test: add another ABI encode test

https://github.com/foundry-rs/foundry/issues/7280

clippy?

Missed, fixed in https://github.com/alloy-rs/core/pull/548


Add time limit for stm tests.

(Code from picos)
Add a time limit to stm tests.

Note that some of the STM tests are skipped on some architectures.  With the time limits it should be possible to enable those tests on all of the architectures.

It seems on ❌ debian-12-5.2_arm32_opam-2.2 (failed: Failed: Build failed) there was a more serious failure:
File "test/michael_scott_queue/dune", line 58, characters 7-30:
58 |  (name stm_michael_scott_queue)
            ^^^^^^^^^^^^^^^^^^^^^^^
(cd _build/default/test/michael_scott_queue && ./stm_michael_scott_queue.exe)

Usually the output looks like that when there is a segmentation fault.

Thanks for noticing ! If it is unrelated to the PR itself, should I merge ?

Yes, I believe the segfaults are not caused by code in this PR. There are at least a couple of known issues in 5.2 that can cause segfaults. One of them has been fixed and will be in 5.3.


[ParseableInterface] Include "import Swift" in swiftinterface files

Otherwise we've got a problem with modules that use -parse-stdlib but aren't the stdlib themselves. Ideally we'd only print this in that case, but we don't have that information at this point in the pipeline and I'm not sure it would be a good idea to include it in the set of options we pass through.

@swift-ci Please smoke test


[Doc] Modules Update

This pull request has automatically created by PinpointAutoBot
Updated Item : [cxf-rt-rs-client, grpc-stub] has been updated
*Updated item list may differ if this PR is updated*

Codecov Report

Merging #7025 into master will increase coverage by 0.01%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master    #7025      +/-   ##
==========================================
+ Coverage   38.95%   38.96%   +0.01%
==========================================
  Files        3235     3235
  Lines       94414    94414
  Branches    11852    11852
==========================================
+ Hits        36775    36792      +17
+ Misses      54686    54669      -17
  Partials     2953     2953

Impacted Files
Coverage Δ

...vercorp/pinpoint/web/vo/ApplicationAgentsList.java
66.66% <0.00%> (-2.57%)
:arrow_down:

...navercorp/pinpoint/rpc/common/SocketStateCode.java
82.92% <0.00%> (-2.44%)
:arrow_down:

.../pinpoint/rpc/client/PinpointClientHandshaker.java
66.42% <0.00%> (+6.42%)
:arrow_up:

...rc/main/java/com/navercorp/pinpoint/test/Item.java
73.33% <0.00%> (+6.66%)
:arrow_up:

...rp/pinpoint/rpc/control/ControlMessageDecoder.java
78.57% <0.00%> (+14.28%)
:arrow_up:

Continue to review full report at Codecov.

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


Reindexing banner does not show up on staging

This code is not deployed to staging. On the next AZUL deploy to staging we will deploy this update.

Thanks for the explanation. This works on integration. Since I prematurely promoted to staging, you might want to do the same.


chore: Remove whitespace in settings example file

Issue #, if available:
Description of changes:
Remove whitespace in settings example file so users don't accidentally make the mistake of not deleting them
Checklist:

[x] Have you successfully deployed to an AWS account with your changes?
[x] Have you linted your code locally prior to submission?

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

The pnpm lock file update appeared after I ran a deployment. Tried deleting the lock file and deploy again, the changes still exist. I assumed it was probably left off from a commit earlier. Please correct me if I'm mistaken here.


Add an event for default rule "Launch Package Management Process In Container"

Motivation
To Add an event for default rule "Launch Package Management Process In Container"

Feature

Alternatives

Additional context

/assign


refactor: simplify Value::validate_type()

Most of the match case in function Value::validate_type() in core/src/data/value/mod.rs file can be simplified.

Pull Request Test Coverage Report for Build<PHONE_NUMBER>
Details

1 of 1 (100.0%)  changed or added relevant line in 1 file are covered.
No unchanged relevant lines lost coverage.
Overall coverage decreased (-0.001%) to 98.343%

Totals

Change from base Build<PHONE_NUMBER>:
-0.001%

Covered Lines:
54483

Relevant Lines:
55401

💛  - Coveralls


Refactor input error-state outline color to Red

Trello Card
This refactors the outline color of an input with an error.
Before

After

Pull Request Test Coverage Report for Build 2032

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage remained the same at 100.0%

Totals

Change from base Build 2023:
0.0%

Covered Lines:
7642

Relevant Lines:
7642

💛  - Coveralls

@ItsJonQ oops...sigh...I'll be here all week. On it.