code simplification of thread joining + code rearrangements

First of I apologize for not separating concerns properly with this PR, in hindsight I should have probably split the rearrangement and the simplification into two parts.
I found the arrangement of the code quite frustrating and not well ordered, so I went ahead and rearranged it in (hopefully) a logical and consistent way:

Public/More important components are now at the top of the file (the scope function, Scope struct, etc).
Private/Less important components are now at the bottom of the file (FnBox trait for instance).
Structs and impls are now right behind each other.
Trait impls are arranged around the definition/implementation of a struct (Drop, Debug after the impl, Send + Sync before the struct, etc.)
ScopedThreadBuilder and ScopedJoinHandle are now arranged in that order.

The other thing I did was simplify the scope function.
The panics vector wasn't really necessary, since only the last panic was returned anyway (the vector was just popped once). So I removed it and simply made the join_all function return the last panic.
Since the scope function uses a catch_unwind call I figured it should now be exception-safe and removed the Drop impl, which allowed me to simplify the join_all function in the first place.

Oh, one more important thing.
We should remove the Default implementation for Scope, otherwise we can get UB:
{
    let s = "foo".to_string();
    let scope = mem::ManuallyDrop::new(Scope::default());
    let handle = scope.spawn(|| {
        thread::sleep_ms(100);
        println!("{}", s);
    });
}
let _ = "bar".to_string();
thread::sleep_ms(1000);

This prints "bar" on my machine, which indicates UB.

Oh, one more important thing.
We should remove the Default implementation for Scope, otherwise we can get UB:
{
    let s = "foo".to_string();
    let scope = mem::ManuallyDrop::new(Scope::default());
    let handle = scope.spawn(|| {
        thread::sleep_ms(100);
        println!("{}", s);
    });
}
let _ = "bar".to_string();
thread::sleep_ms(1000);

This prints "bar" on my machine, which indicates UB.

Good catch, I hadn't considered that deriving Default would give Scope a public constructor.
I have addressed all the issues you've commented, but I should note that except the Default derive none of those were introduced by me, so this will broaden the scope of this PR even more. I guess I could rename it to some general refactoring/fixing.
Are you OK with the removal of the panics vector? After filing the PR I also considered maybe returning all occurring panics as Vector (or boxed slice) of errors, instead of only returning the first one. Though this would require further allocation and the return type would be less ergonomic (Result<R, Vec<Box<Any>> probably).

After filing the PR I also considered maybe returning all occurring panics as Vector (or boxed slice) of errors, instead of only returning the first one. Though this would require further allocation and the return type would be less ergonomic (Result<R, Vec<Box<Any>> probably).

Hmm. I'd probably prefer to keep returning thread::Result<R> for consistency and ergonomics.
Here's an idea. We could collect all panics (i.e. Err variants in those thread::Results), store them in a Vec<Box<Any + Send + 'static>>, box that final Vec to turn it into a Box<Any + Send + 'static>, and return it as Err from scope().
This way we can package all panics in a thread::Result<R> without changing the actual type. :)

Ok, I've just pushed a new commit to this PR. So the idea is that if any thread panicked we just return Err(Box::new(results)).
Now we can "pretend" that function f passed to scope is a thread itself that returns R. Function f also implicitly joins all spawned threads and calls panic!(join_results) if any of the threads failed. Otherwise, it returns its result of type R.

I am not quite sure what the difference is, except that panics in the scope function now take precedence over panics in any scoped thread.
My initial approach was unnecessarily complex, so its better in that regard, however I think the join results have to be filtered, otherwise Ok(_) results of non-panicked threads would be returned as well in the case that at least one thread panics (this also lets us avoid iterating again FWIW).
        let result = panic::catch_unwind(panic::AssertUnwindSafe(|| f(&scope)));

        let panics = self.joins
            .into_inner()
            .into_iter()
            .map(|join| join.call_box())
            .filter(|res| res.is_err())
            .collect::<Vec<_>>();

        result.and_then(|res| {
            if panics.is_empty() {
                Ok(())
            } else {
                Err(Box::new(panics)
            }
        })

If scope panics do not have to take precedence over the thread panics, I feel like the early error return (as before) is cleaner.

however I think the join results have to be filtered, otherwise Ok(_) results of non-panicked threads would be returned as well in the case that at least one thread panics (this also lets us avoid iterating again FWIW).

Good idea, let's do this. 👍

If scope panics do not have to take precedence over the thread panics, I feel like the early error return (as before) is a bit clearer.

My intuition for why scope panics take precedence is because f (the scope) is executed before joining threads. So scope panics in that sense happen earlier than the ones received from .join().

however I think the join results have to be filtered, otherwise Ok(_) results of non-panicked threads would be returned as well in the case that at least one thread panics (this also lets us avoid iterating again FWIW).

Good idea, let's do this. +1

Great, I'll commit the changes later today.

If scope panics do not have to take precedence over the thread panics, I feel like the early error return (as before) is a bit clearer.

My intuition for why scope panics take precedence is because f (the scope) is executed before joining threads. So scope panics in that sense happen earlier than the ones received from .join().

In terms of internal evaluation this may be so. But going by the contents of f, it's a bit different.
Consider the following example:
scope(|scope| {
    scope.spawn(|| panic!("thread"));
    panic!("scope");
});

In terms of code arrangement, the thread panic occurs "first" (which actually occurs first is undetermined ofc), but the second panic would still be given precedence, which may be counter-intuitive.
scope(|scope| {
    panic!("scope");
    scope.spawn(|| panic!("thread"));
});

In this example it is alright, the scope panics first and this is reflected by the result.
However, in this case, the second panic can never occur, so the Vec of thread panics would be empty and the scope panic would be returned, even if the thread panics get evaluated first, like before.
These are the most simple examples, with more complex cases things might be less clear cut.

Summary of the latest commits:

both scope function and thread panics are returned in a vector (unified return type), if any
scope function panics come first, then thread panics

Awesome, thanks so much for pushing this PR to completion! :)


Camera Plugin Crash - when the session doesn't end properly ... maybe

App Crashes in Release Mode
1- Installed the release apk
2- Camera was BLACK
3- Tried to restart it multiple times
4- At last the error below appers
5- I close the app from task manager
6- Now error is gone
camera: ^0.4.2
03-25 22:02:35.850 18924-18924/? E/AndroidRuntime: FATAL EXCEPTION: main
                                                   Process: ir.yabco.flutter.goggles, PID: 18924
                                                   java.lang.IllegalStateException: Session has been closed; further changes are illegal.
                                                       at android.hardware.camera2.impl.CameraCaptureSessionImpl.checkNotClosed(CameraCaptureSessionImpl.java:606)
                                                       at android.hardware.camera2.impl.CameraCaptureSessionImpl.setRepeatingRequest(CameraCaptureSessionImpl.java:227)
                                                       at io.flutter.plugins.camera.CameraPlugin$Camera$7.onConfigured(CameraPlugin.java:748)
                                                       at java.lang.reflect.Method.invoke(Native Method)
                                                       at android.hardware.camera2.dispatch.InvokeDispatcher.dispatch(InvokeDispatcher.java:39)
                                                       at android.hardware.camera2.dispatch.HandlerDispatcher$1.run(HandlerDispatcher.java:65)
                                                       at android.os.Handler.handleCallback(Handler.java:751)
                                                       at android.os.Handler.dispatchMessage(Handler.java:95)
                                                       at android.os.Looper.loop(Looper.java:154)
                                                       at android.app.ActivityThread.main(ActivityThread.java:6776)
                                                       at java.lang.reflect.Method.invoke(Native Method)
                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1496)
                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1386)

[√] Flutter (Channel master, v1.3.14-pre.69, on Microsoft Windows [Version 6.3.9600], locale en-US)
    • Flutter version 1.3.14-pre.69 at M:\flutter
    • Framework revision 9bc85d7e54 (53 minutes ago), 2019-03-25 09:42:57 -0700
    • Engine revision dcc72c7176
    • Dart version 2.2.1 (build 2.2.1-dev.2.0 None)

https://github.com/google/cameraview/issues/11

@bparrishMines
https://github.com/google/cameraview/issues/11
https://github.com/ewolfox/cameraview/commit/dbc58af51097262ba0329a323a37555280d0990d
https://stackoverflow.com/questions/42749056/camera2-api-and-java-lang-illegalstateexception

now even if I close the app from the task manager,
the same error appears.

another case:
1- Force Close App
2- The next time App Crashes
this is the line no. 748
cameraCaptureSession.setRepeatingRequest(captureRequestBuilder.build(), null, null);

I had no more crashes after the https://github.com/flutter/plugins/pull/1393 fix and other testers (my team) agree too.


Make Button not emit press when container is scrolled

This fixes the problem described in #13996 in a proper way.
This also adds "deadzone" property to ScrollContainer. It can be used
on mobile, where taps are not as precise as mouse clicks. Player could
slightly move their finger when tapping, in which case we still want
the button to be pressed rather than the container to be scrolled.

I DO like this PR. :)

Updated based on the comment from @reduz.

Thanks!

cherry picked into 3.0.3


Electric fails to connect to the database if another instance of Electric is already running

The error looks like this in the log output:
2024-01-18T11:12:44.580068439Z ▓ ┌────────────────────┐
2024-01-18T11:12:44.580106777Z ▓ │  CONNECTION ERROR  │
2024-01-18T11:12:44.580113567Z ▓ ┕━━━━━━━━━━━━━━━━━━━━┙
2024-01-18T11:12:44.580118544Z ▓
2024-01-18T11:12:44.580125387Z ▓ Failed to establish replication connection to Postgres:
2024-01-18T11:12:44.580133704Z ▓   replication slot "electric_replication_out_defaultdb" is active for PID 38381
2024-01-18T11:12:44.580140172Z ▓
2024-01-18T11:12:44.580144738Z ▓ Another instance of Electric appears to be connected to this database.
2024-01-18T11:12:44.580318925Z 11:12:44.579 pid=<0.2795.0> origin=postgres_1 [error] PostgresConnectorSup failed to start child :postgres_producer with reason: {:bad_return_value, {:error, {:error, :error, "55006", :object_in_use, "replication slot \"electric_replication_out_defaultdb\" is active for PID 38381", [file: "slot.c", line: "516", routine: "ReplicationSlotAcquire", severity: "ERROR"]}}}.
2024-01-18T11:12:44.580413865Z 11:12:44.579 pid=<0.2795.0> origin=postgres_1 [info] schedule retry: 2000

This can happen on some hosting platforms where a configuration change in an already deployed instance of Electric will cause a new instance to be started to use the update config. The new instance will not be able to establish a replication connection to the database until the old instance shuts down.
The reason there can only be one Electric instance connected to a database at any given time is that Electric uses a replication connection to listen for changes originating in Postgres. Supporting multiple instances running simultaneously requires careful design and development to ensure that consistency is preserved and that the load is split evenly between all instances.
Until we address the underlying limitation, we suggest using one of these workarounds:

stop the running instance of Electric before starting a new one
use a TCP health check (as opposed to an HTTP health check for /api/status) when deploying Electric to a hosting platform

👋 we've been working the last month on a rebuild of the Electric server over at a temporary repo https://github.com/electric-sql/electric-next/
You can read more about why we made the decision at https://next.electric-sql.com/about
We're really excited about all the new possibilities the new server brings and we hope you'll check it out soon and give us your feedback.
We're now moving the temporary repo back here. As part of that migration we're closing all the old issues and PRs. We really appreciate you taking the time to investigate and report this issue!


b3sum: 1.4.0 -> 1.4.1

Automatic update generated by nixpkgs-update tools. This update was made based on information from https://github.com/BLAKE3-team/BLAKE3/releases.
meta.description for b3sum is: BLAKE3 cryptographic hash function
meta.homepage for b3sum is: https://github.com/BLAKE3-team/BLAKE3/
meta.changelog for b3sum is: https://github.com/BLAKE3-team/BLAKE3/releases/tag/1.4.1
Updates performed

Rust version update

To inspect upstream changes
Impact

Checks done (click to expand)

built on NixOS
The tests defined in passthru.tests, if any, passed
found 1.4.1 with grep in /nix/store/xsiw7vc8iwv6qr454hspgz2fxihjf1yz-b3sum-1.4.1
found 1.4.1 in filename of file in /nix/store/xsiw7vc8iwv6qr454hspgz2fxihjf1yz-b3sum-1.4.1

Rebuild report (if merged into master) (click to expand)

1 total rebuild path(s)

1 package rebuild(s)

First fifty rebuilds by attrpath
b3sum

Instructions to test this update (click to expand)

Either download from Cachix:
nix-store -r /nix/store/xsiw7vc8iwv6qr454hspgz2fxihjf1yz-b3sum-1.4.1 \
  --option binary-caches 'https://cache.nixos.org/ https://nix-community.cachix.org/' \
  --option trusted-public-keys '
  nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=
  cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=
  '

(The Cachix cache is only trusted for this store-path realization.)
For the Cachix download to work, your user must be in the trusted-users list or you can use sudo since root is effectively trusted.
Or, build yourself:
nix-build -A b3sum https://github.com/r-ryantm/nixpkgs/archive/ab78ab62131d1bf22f3eb1519d97568bf5bab1a9.tar.gz

After you've downloaded or built it, look at the files and if there are any, run the binaries:
ls -la /nix/store/xsiw7vc8iwv6qr454hspgz2fxihjf1yz-b3sum-1.4.1
ls -la /nix/store/xsiw7vc8iwv6qr454hspgz2fxihjf1yz-b3sum-1.4.1/bin

Pre-merge build results
We have automatically built all packages that will get rebuilt due to
this change.
This gives evidence on whether the upgrade will break dependent packages.
Note sometimes packages show up as failed to build independent of the
change, simply because they are already broken on the target branch.
Result of nixpkgs-review run on x86_64-linux 1

1 package built:

b3sum

Maintainer pings
cc @fpletz @ivan for testing.

Result of nixpkgs-review pr 242768 run on aarch64-darwin 1

1 package built:

b3sum


driver: itim: npcx: check ITEN bit to prevent return fake error.

During polling ITEN bit to make sure ITIM timer is enabled, we might
have the chance that npcx_itim_evt_enable() return fake error when
timeout expired but ITEN bit is set already if CONFIG_ZERO_LATENCY_IRQS
is enabled. (Since SVCall's interrupt priority is not the highest, the
other interrupts with IRQ_ZERO_LATENCY flag could preempt CPU resource
at this moment.)
In order to prevent return fake error code, this CL adjusts the check
conditions for ITEN bit and timeout.
Signed-off-by: Mulin Chao<EMAIL_ADDRESS>

The original timeout mechanism exists a logical leak. Since the condition 'npcx_itim_get_sys_cyc64() - cyc_start > NPCX_ITIM_EN_TIMEOUT_CYCLES' might be false at the beginning, we will jump out of the while loop without checking ITEN bit. Fixed it in the current version.


[2.0] resolveAsyncComponent for es6 module

When we use asyncComponent as an es6 module, it can't be resolved automatically now for the following reason:
The module exported from es6 is now something like
{
  __esModule: true.
  default: Component
}

so we must resolve asyncComponent by ourselves like that:
export default new VueRouter({
  mode: 'hash',
  routes: [
    {
      path: '',
      component: function (resolve) {
        require(['../App'], function (Component) {
          resolve(Component.default);
        });
      }
    }
  ]
});

Maybe we should provide a Syntactic sugar to prevent repetitive tasks in the resolveAsyncComponent function like:
if(res.__esModule && res.default && 1 === Object.keys(res).length) {
    res = res.default;
}

This is a userland issue. Also with Webpack 2 you can just do:
component: resolve => System.import('../App').then(resolve)

component: resolve => System.import('../App').then(resolve)

It doesn't work with the argument of callback is still like
{
  __esModule: true.
  default: Component
}

My test code:
export default new VueRouter({
  mode: 'hash',
  routes: [
    {
      path: '',
      component: resolve => System.import('../App').then(function (Component) {
        console.log(Component);
        resolve(Component);
      })
    }
  ]
});

You need to use babal-preset-es2015-webpack to avoid ES6 module syntax being transpiled. vue-loader currently still has some issues with Webpack 2, but what I showed is what eventually should work.

Actually it seems even with the webpack preset it still returns the object with default. I guess you just have to do that for any System.imported modules in Webpack 2.

Yep, it still doesn't work and that makes import asyncComponent becoming something foolish. :(

Just updated vue-loader. Now this works:
component: resolve => System.import('../App').then(m => resolve(m.default))

// or

component: resolve => require(['../App'], m => resolve(m.default))

What's the difference with the previous solution?
We still must resolveesModule.default by ourselves not by vue nor vue-loader.
My point is that we could provide a solution to prevent it.
Anyway, maybe I should do it in my own code like that:
import VueRouter from 'vue-router';

const resolveAsyncComponent = resolve => m => {
  m.__esModule && Object.keys(m).length === 1 && (m = m.default || m);
  resolve(m);
};

export default new VueRouter({
  mode: 'hash',
  routes: [
    {
      path: '',
      component: resolve => require(['../App'], resolveAsyncComponent(resolve))
    },
      ...otherRoutesWithAsyncComponent
  ]
});

This is build-system specific and easy enough to do in userland with a single function. I don't think it needs to be in Vue itself.


Add transparencyMode property to StandardMaterial

See issue #7758.
I have added transparencyMode to the Material base class so that it can also be used by StandardMaterial (was only available for PBRMaterial until now).
See accompanying sample: https://popov72.github.io/BabylonDev/showSample.html?sample=transparency
I have updated OptionsLineComponent to be able to deal with null values, as transparencyMode can be null.
StandardMaterial and PBRMaterial work about the same when using transparencyMode, except:

When alpha test is enabled (transparencyModeis Alpha Test or Alpha Test+Blend) and Use alpha from texture is unchecked.

In that case, PBRMaterial still uses the alpha from the texture, contrary to StandardMaterial. I think PBRMaterial is wrong here, but as it is how it works now and changing this would be a breaking change, I kept it => I didn't want to change how transparencyMode is behaving for PBRMaterial in this PR, but see strictTransparencyMode below

Odd behaviour (share by both materials):

select Alpha Test and make sure that Use alpha from texture is checked

the spheres display correctly:

now change Mesh visibility to something different from 1: spheres no longer do alpha testing but alpha blending instead:

that's because the code switches automatically to alpha blending for the rendering to honor the mesh visibility setting. The problem is that now the value for transparencyMode does not match what we are seing...

There are other cases like that, for eg. when choosing Opaque and changing Mesh visibility.
Sometimes I find it hard to understand what's going on depending on your choices for the different properties, that's why I have added a strictTransparencyMode which strictly (hence the name) applies the choice of the user for the transparencyMode and useAlphaFromDiffuseTexture / useAlphaFromAlbedoTexture properties.
You can use the sample to test this, by checking the Strict transparency mode checkbox. I do think that in this mode everything is behaving as expected, depending on your choices.
Let me know what you think about this and how we can going on - I don't mind throwing this to the bin, so don't hesitate to comment :)

I think we should remove the strictTransparencyMode as it is adding extra complexity we do not need so far.
Visibility is meant to force alpha blending as it is the way to slowly fade models.
All the rest looks ok to me.

strictTransparencyMode has been removed.

Perfect thanks a lot.


Upgrade to 1.7.1

Maybe I write too early and can not wait :-)
I have today refreshed my version 1.7.0 to 1.7.1.
I bought an identical SD card and flashed the image 1.7.1.
After a short start with the newly flashed SD card I got the message whether I want to upgrade. Then I came to the input of the password A.
Now I see in my terminal since about 15min.
"Upgrade/Recover/Provision
----> Setup System ..."
Run "tail -f ./raspiblitz.log" in new terminal to follow install logs.

When I open a new terminal, I get back to the same screen. How do I get into the user input so that I can type tail -f ./raspiblitz.log?
CTRL -c or ctrl -x did nothing and I can't get into the input.
I am logged in as admin.

I receive the following message
admin@raspberrypi:~ $ tail -f ./raspiblitz.log
### BASIC SYSTEM SETTINGS ###
# Optimizing log files: rotate daily, keep 2 weeks & compress old days
Setting lightning alias: zeroBaseFee
Copy HDD content for user admin
### PREPARE LND
*** Make backup of LND directory
FAIL: Backup was not successful
Files /mnt/hdd/lnd/data/graph/mainnet/channel.db and /mnt/hdd/backup_lnd/data/graph/mainnet/channel.db differ
removing backup dir to prevent false override

which backup dir do i need to remove?
What to do after that?

The SD card with 1.7.1 started, but it remains for about 4h at the following message.

Same here, waiting for about 30 mins already. Will leave it for a few hours just in case it resolves by itself

This seems to be related to this part of the _provision_.sh script:
https://github.com/rootzoll/raspiblitz/blob/5e074d0ccaeac8c6f1a54fc4bb12750244801bcf/home.admin/_provision_.sh#L163
looking why this backup was created was because of issue #324 - it was to keep tls certs the same on backup. so basically copy everything in the lnd directory might be overkill anyway - especially large files like the channel.db can delay and waste HDD/SSD space.
When looking thru the code the only this files are used from that backup directoy. Those could even be copied /var/cache/raspiblitz.
@openoms can you see any other reason why we should keep that full backup copy of the lnd directory during and after provision? I would recommend to slim that part down to just the TLS files.


Migrate Napari Hub Service(s) From Current AWS Region

Summary
Per the incident: https://czi-sci.slack.com/archives/C56QRGLRJ/p1664387467312159, the napari hub website was completely down for roughly 1 hour.
Intended Outcome
In order to mitigate this issue, it would make sense to migrate at least some of the napari hub services away from AWS region US-WEST-2, so that we can diversity where our services are hosted, and avoid napari hub website being completely down and heavily dependent on said AWS region. This incident may have been 1 hour, but we don't know if there would one in the future that takes longer in time, so this action item is an effort to tackle the issue.

There is no guarantee for any specific region to not go down completely. So, moving to another region doesn't provide a guarantee of 100% uptime. So,  this might not be the best solution for this problem.


Add voluptuous validation to template sensor.

Description:
This adds voluptuous validation to the template sensor.
My first attempt to use voluptuous - so happy to change, add more tests etc as required.
Once this works OK - I'll add to the the binary_sensor.template and switch.template
Related issue (if applicable): fixes #
Pull request in home-assistant.io with documentation (if applicable): home-assistant/home-assistant.io#
Example entry for configuration.yaml (if applicable):

Checklist:
If user exposed functionality or configuration variables are added/changed:

[ ] Documentation added/updated in home-assistant.io

If code communicates with devices, web services, or a:

[ ] Local tests with tox run successfully. Your PR cannot be merged unless tests pass
[ ] New dependencies have been added to the REQUIREMENTS variable (example).
[ ] New dependencies are only imported inside functions that use them (example).
[ ] New dependencies have been added to requirements_all.txt by running script/gen_requirements_all.py.
[ ] New files were added to .coveragerc.

If the code does not interact with devices:

[ ] Local tests with tox run successfully. Your PR cannot be merged unless tests pass
[ ] Tests have been added to verify that the new code works.

@balloob @fabaff Could use some help on what I've done wrong
I have a failing test in my voluptuous PR. It's checking than an invalid entity name fails - this works fine in a real config file (and fails the cv.slug validation) - but for some reason the entity gets created in the test! Grateful for any thoughts! The tests have been around for a while - the voluptuous is new.
SENSOR_SCHEMA = vol.Schema({
    cv.slug: vol.Schema({
        vol.Required(CONF_VALUE_TEMPLATE): cv.template,
        vol.Optional(ATTR_FRIENDLY_NAME): cv.string,
        vol.Optional(ATTR_UNIT_OF_MEASUREMENT): vol.Coerce(str),
        vol.Optional(ATTR_ENTITY_ID): cv.entity_ids})
    })

PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
    vol.Required(CONF_SENSORS, default={}): vol.All(dict, SENSOR_SCHEMA),
})

The code that's not working in the test is cv.slug
And here is the test:-
    def test_invalid_name_does_not_create(self):
        """Test invalid name."""
        assert sensor.setup(self.hass, {
            'sensor': {
                'platform': 'template',
                'sensors': {
                    'test INVALID sensor': {
                        'value_template':
                            "{{ states.sensor.test_state.state }}"
                    }
                }
            }
        })
        assert self.hass.states.all() == []

The other similar test do what I'd expect.
If I put a breakpoint on cv.slug I can see it isn't being run in the test suite! (but it works fine with a real config file).

@balloob Could use some help with the failing test. Basically the test quoted above isn't calling the cv.slug validation (which is called in the real test).
Should I be calling some sort of wrapper rather than setup directly?

@balloob Investigating a bit more:-
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
    vol.Required(CONF_SENSORS): {cv.slug: SENSOR_SCHEMA},
})

Doesn't cause invalid slugs to fail. An exception is thrown by cv.slug - but that doesn't result in an error.
So a sensor name of solar INVALID angle will create a sensor of solar_invalid_angle.
I guess that's fine if that's the design intent. So I could just drop the test (which doesn't even call cv.slug the way I have it mocked - which also seems wrong - but perhaps doesn't matter!).

Looks like
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
    vol.Required(CONF_SENSORS): vol.Schema({cv.slug: SENSOR_SCHEMA}),
})

Fixes the validation issues.
So just the testing issue to resolve.

The test is failing because the config validations only run when using bootstrap.setup_component. Use this:
bootstrap.setup_component(self.hass, 'sensor', {
    'sensor': {
        'platform': 'template',
        …
    }
})

I'm so sorry, you're so right. It was correct. My bad. Merging 🐬


docs: update reproduction instructions

Get rid of executing_syzkaller_programs.md as it now mostly overlaps with reproducing_crashes.md.
Update the instructions on building the kernel with syzbot compilers.
Update the links throughout the documentation.

Thanks for the review!
Fixed the comments. PTAL.


feature request: move to icloud

Is there a way to move the "On My iPhone" feeds and starred items to iCloud?
So I can access them as well from the MacOS Desktop application?
I couldn't find this in documentation (or overlooked it).
Thanks for this App.

Yes. Export feeds first, then import feeds to cloud.  Simple workaround.

Thanks. But do I keep my starred items in that way?


Can't make it work

When i build it on unity, there's a script saying fragsurf was not found. When I fix that, the console display no more errors but there are a lot of gameobjects with missing scripts.

Yep, you're right, sorry about that. Something must've went wrong when I was pushing files, and I didn't double check that all the files were correct and in place. I'm am currently not at the computer where my main files are. I will be back at my computer in about a week. I will try to fix the issue then.

@raulseixasbr I have fixed the branch. Let me if there are any more issues. Thank you again for bringing this issue to my attention!

Thank you!


add 'napari-xpra' target to dockerfile

Description
Add a new Docker target to our dockerfile that extends the existing image with a set of layers implementing a preconfigured Xpra server. This allows users to run X on the guest image and forward the display to a browser tab under localhost:9876 with full OpenGL compatibility.
This is a solution for users experiencing OpenGL/X issues when forwarding DISPLAY directly to the host. Performance is not stellar but at least it works! It's also useful for developers who want to debug issues on Linux.

Type of change

[ ] Bug-fix (non-breaking change which fixes an issue)
[X] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
[X] This change requires a documentation update

References

Closes #2014
Related issues: #3387 (might close this one), #886
How has this been tested?

[ ] The docker CI passes successfully
[ ] The commands mentioned in the documentation work as expected

Final checklist:

[X] My PR is the minimum possible work for the desired functionality
[X] I have commented my code, particularly in hard-to-understand areas
[X] I have made corresponding changes to the documentation
[ ] I have added tests that prove my fix is effective or that my feature works
[ ] If I included new strings, I have used trans. to make them localizable.
For more information see our translations guide.

Note: Images at dockerhub haven't been updated in a while. Images in the Github Packages Registry are private. We might want to make them public?

napari package is still private. If it is impossible to change this it looks like we should change to docker hub or another provider.

docker hub or another provider.

Docker has a rate limit of monthly downloads (unclear we would hit it, but who knows). We can also use quay.io. But the easiest would be to mark the GHCR images as public. We might need to adjust how often an image is published though (or how they are labeled).

Docker has a rate limit of monthly downloads

For pulling person. Not for docker image. So it affects people who download too many images, not the repository.

But the easiest would be to mark the GHCR images as public.

Totally agree.

Let me re-run the CI one last time to make sure everything's in place!

Great! Looks like this is ready to go, I will merge now - thanks!!


Nested method call with parameters auto-corrected wrongly

Given the input
def example
  a(
    b: :c,
    d: e(
      f: g
    ), h: :i)
end

I get the message
example.rb:6:8: C: [Corrected] Align the elements of a hash literal if they span more than one line.
    ), h: :i)
       ^^^^^

and the correction
def example
  a(
    b: :c,
    d: e(
      f: g
    h: :i)
end

Notably, it breaks the nested function call, and causes a syntax error.
Clearly this is being parsed as a hash literal rather than function parameters
and it doesn't know about nested function calls.
I tried to dig around, but I'm not quite sure where to start.

Seems i can do the same with a hash
{ a: :b,
  c: {
    d: :e
  }, f: {
    g: :h
  }
}

becomes
{ a: :b,
  c: {
    d: :e
  f: {
    g: :h
  }
}

That fix looks good @jonas054. Thanks.


[feature request] continued accerelate ConstructHistogram

ConstructHistogram (in src\io\**_bin.hpp and src_io\dataset.cpp) is the most time-consuming part of LightGBM.
The speed here is mainly bounded by the memory bandwidth.
There are two construction algorithms:

col-wise, which scans columns and constructs its corresponding histogram one-by-one

Pros: better scalability in multi-threading. smaller memory consumption.
Cons: redundancy memory access for gradients and hessians for each column needs one pass of them.

row-wise, which scans the rows one-by-one, and constructs all feature histograms at once.

Pros: sparse-aware and no redundancy memory access for gradients and hessians.
Cons: poor scalability in multi-threading. larger memory consumption.

Currently, LightGBM implements them both, and automatically choose the faster one during run-time.
Maybe there is a better algorithm and we can continue to explore it.

Closed in favor of being in #2302. We decided to keep all feature requests in one place.
Welcome to contribute this feature! Please re-open this issue (or post a comment if you are not a topic starter) if you are actively working on implementing this feature.

ConstructHistogram (in src\io\**_bin.hpp and src_io\dataset.cpp) is the most time-consuming part of LightGBM.
The speed here is mainly bounded by the memory bandwidth.
There are two construction algorithms:

col-wise, which scans columns and constructs its corresponding histogram one-by-one

Pros: better scalability in multi-threading. smaller memory consumption.
Cons: redundancy memory access for gradients and hessians for each column needs one pass of them.

row-wise, which scans the rows one-by-one, and constructs all feature histograms at once.

Pros: sparse-aware and no redundancy memory access for gradients and hessians.
Cons: poor scalability in multi-threading. larger memory consumption.

Currently, LightGBM implements them both, and automatically choose the faster one during run-time.
Maybe there is a better algorithm and we can continue to explore it.

Thank you for saying so.Now, if you have a problem with termux then you can show us the error.

#3522 reduces the memory overhead for dense row-wise histograms, besides, it adjusts the block size and achieves a better speed-up.


LibPcap not installed or jnetpcap.dll cannot be found

Hi everyone,
I've ever installed EnergyBox before and didnt run well.
I've installed WinPcap, tried to put jnetpcap.dll in System and System32 folder, but still not work. There is Error said "LibPcap not installed or jnetpcap.dll cannot be found".
So I tried to back again to this site and there is so many commit and new informations in Readme.me.
Im still newby and really have no idea about how to run this app well. My Error still not resolved.
I believe there are something wrong about how I install it.
I really need some help here.
Hope You dont mind to show the step by step installing/run EnergyBox.
Thanks before.
note :
I used Windows 8 Pro and Netbeans 8.0.2

Should be solved by #16


feat(avm): pedersen ops

Please read contributing guidelines and remove this line.

#6765  👈
master

This stack of pull requests is managed by Graphite. Learn more about stacking.

Join @IlyasRidhuan and the rest of your teammates on  Graphite

Benchmark results
Metrics with a significant change:

protocol_circuit_simulation_time_in_ms (public-kernel-setup): 680 (-20%)
app_circuit_proving_time_in_ms (Token:transfer): 47,543 (-18%)
protocol_circuit_proving_time_in_ms (private-kernel-inner): 39,597 (-20%)
protocol_circuit_proving_time_in_ms (private-kernel-tail): 37,105 (-19%)
protocol_circuit_proving_time_in_ms (base-rollup): 64,892 (-19%)
protocol_circuit_proving_time_in_ms (public-kernel-app-logic): 38,353 (-17%)
protocol_circuit_proving_time_in_ms (root-parity): 33,759 (-20%)
protocol_circuit_proving_time_in_ms (root-rollup): 19,580 (-20%)

Detailed results
All benchmarks are run on txs on the Benchmarking contract on the repository. Each tx consists of a batch call  to create_note and increment_balance, which guarantees that each tx has a private call, a nested private call, a public call, and a nested public call, as well as an emitted private note, an unencrypted log, and public storage read and write.
This benchmark source data is available in JSON format on S3 here.
Proof generation
Each column represents the number of threads used in proof generation.

Metric
1 threads
4 threads
16 threads
32 threads
64 threads

proof_construction_time_sha256_ms
5,742
1,549 (-1%)
709
744 (-2%)
770

proof_construction_time_sha256_30_ms
11,584 (+2%)
3,057
1,371
1,425
1,460 (+1%)

proof_construction_time_sha256_100_ms
43,830
11,872 (+1%)
5,441 (+1%)
5,396 (+1%)
5,339

proof_construction_time_poseidon_hash_ms
79.0 (+1%)
34.0
34.0
57.0 (-2%)
88.0

proof_construction_time_poseidon_hash_30_ms
1,519
416
199 (-1%)
222 (+1%)
269 (-1%)

proof_construction_time_poseidon_hash_100_ms
5,766 (+1%)
1,562 (-1%)
719 (-1%)
784 (+2%)
792 (-1%)

L2 block published to L1
Each column represents the number of txs on an L2 block published to L1.

Metric
8 txs
32 txs
64 txs

l1_rollup_calldata_size_in_bytes
1,412
1,412
1,412

l1_rollup_calldata_gas
9,464
9,440
9,476

l1_rollup_execution_gas
616,105
616,081
616,117

l2_block_processing_time_in_ms
1,281
4,787
9,492

l2_block_building_time_in_ms
43,200 (-1%)
171,126
342,094

l2_block_rollup_simulation_time_in_ms
43,019 (-1%)
170,454
340,763

l2_block_public_tx_process_time_in_ms
37,441 (-1%)
165,949 (+2%)
335,028 (-1%)

L2 chain processing
Each column represents the number of blocks on the L2 chain where each block has 16 txs.

Metric
3 blocks
5 blocks

node_history_sync_time_in_ms
9,441
14,384

node_database_size_in_bytes
14,475,344
21,364,816

pxe_database_size_in_bytes
18,071
29,868

Circuits stats
Stats on running time and I/O sizes collected for every kernel circuit run across all benchmarks.

Metric
1 leaves
16 leaves
64 leaves
128 leaves
512 leaves
1024 leaves
2048 leaves
4096 leaves
32 leaves

batch_insert_into_append_only_tree_16_depth_ms
10.5 (+1%)
17.0
N/A
N/A
N/A
N/A
N/A
N/A
N/A

batch_insert_into_append_only_tree_16_depth_hash_count
16.7
31.8
N/A
N/A
N/A
N/A
N/A
N/A
N/A

batch_insert_into_append_only_tree_16_depth_hash_ms
0.607 (+1%)
0.521
N/A
N/A
N/A
N/A
N/A
N/A
N/A

batch_insert_into_append_only_tree_32_depth_ms
N/A
N/A
48.6
76.0
245 (-1%)
476
927
1,840 (+1%)
N/A

batch_insert_into_append_only_tree_32_depth_hash_count
N/A
N/A
95.9
159
543
1,055
2,079
4,127
N/A

batch_insert_into_append_only_tree_32_depth_hash_ms
N/A
N/A
0.497
0.467
0.445 (-1%)
0.444
0.439
0.439
N/A

batch_insert_into_indexed_tree_20_depth_ms
N/A
N/A
58.3
112
354
700
1,383
2,753
N/A

batch_insert_into_indexed_tree_20_depth_hash_count
N/A
N/A
106
208
692
1,363
2,707
5,395
N/A

batch_insert_into_indexed_tree_20_depth_hash_ms
N/A
N/A
0.504
0.503
0.480
0.480
0.478
0.477
N/A

batch_insert_into_indexed_tree_40_depth_ms
N/A
N/A
N/A
N/A
N/A
N/A
N/A
N/A
62.6

batch_insert_into_indexed_tree_40_depth_hash_count
N/A
N/A
N/A
N/A
N/A
N/A
N/A
N/A
107

batch_insert_into_indexed_tree_40_depth_hash_ms
N/A
N/A
N/A
N/A
N/A
N/A
N/A
N/A
0.555

Miscellaneous
Transaction sizes based on how many contract classes are registered in the tx.

Metric
0 registered classes
1 registered classes

tx_size_in_bytes
84,050
665,267

Transaction size based on fee payment method
| Metric |  |
| - |  |


feat!: Added missing capabilities and fixed tests

Allowed multiple role bindings
fixed #4
Moved to GA provider
Allow max GA provider 6.X

/gcbrun


Adding is_base64(const char*, size_t) API

A similar implementation can be
static constexpr bool is_base64(std::string_view input) {
  auto last_idx = input.find_last_of(';');
  if (last_idx != std::string_view::npos) {
    // TODO(@anonrig): Trim input
    auto res = input.substr(last_idx + 1);
    return res.size() == 6 && (res[0] | 0x20) == 'b' && (res[1] | 0x20) == 'a' &&
          (res[2] | 0x20) == 's' && (res[3] | 0x20) == 'e' && (res[4] == '6') && (res[5] == '4');
  }
  return false;
}

cc @lemire

@anonrig That's a great idea. I wonder if we couldn't do something better: validate and return the exact size of the inputs (minus white spaces).
Do you have an application in mind?

Workerd has a similar usage.
    // Determine if the data is base64 encoded
    kj::Array<kj::byte> decoded = nullptr;
    if (isBase64(unparsed)) {
      unparsed = unparsed.first(KJ_ASSERT_NONNULL(unparsed.findLast(';')));
      decoded = kj::decodeBase64(strip(jsg::Url::percentDecode(data.asBytes())).asChars());
    } else {
      decoded = jsg::Url::percentDecode(data.asBytes());
    }

@anonrig Oh! So you actually want to decode base64 data that has been percent encoded? So spaces are likely not relevant in this context because you'd probably not do percent encoding with the spaces (why do it?).
Your code example suggests also that percent decoding could be added to simdutf... :-/

I think improving Ada's performance might be a better place than adding it to simdutf

I think improving Ada's performance might be a better place than adding it to simdutf

Granted. This being said, transcoding with replacement might be even more critical. 🚤


[Question] Best performance

Hi Oliver,
thank you for the great lib! I have a performance question.
Task: Create several canvas with icon on it - Canvas and icons have not the same ratio.
Ideas:
a) Loop icons, create canvas, resize icons, paste icons to canvas
b) Create canvas once / loop icons, resize canvas, paste icons to canvas
c) Create canvas once, paste icon once / loop icons, resize canvas, crop canvas
Which one should have the best performance?
Regards,
Dennis

They will all have similar performance.


Question: How to redirect to Login page after session timeout

Hello,
In my app, when frontegg session ends, a blank page is currently being displayed to the user.
The expected behaviour is that the user will be redirected to frontegg login page so I wanted to know if the SDK provides a way of doing it?
Thanks.

Hi there,
Can you please send us an email with the details of your implementation to<EMAIL_ADDRESS>(hosted / embedded, version of frontegg/react)? Otherwise, you can also join our community slack and the team will help you out there with any questions.


Cannot ponify more than 20 files

hay_say_ui-1                   |     output_value = func(*func_args, **func_kwargs)  # %% callback invoked %%
hay_say_ui-1                   |   File "/home/luna/hay_say/hay_say_ui/main.py", line 396, in update_playback
hay_say_ui-1                   |     hash_raw = reverse_lookup[selected_file]
hay_say_ui-1                   | KeyError: '1111.wav'
hay_say_ui-1                   | announcements_file
hay_say_ui-1                   | /home/luna/hay_say/hay_say_ui/running as server/announcements.json
After some amount of ponified audio samples there is no possibility to add new file, only to select from already used ones.
And there is no option to clear file cache inside the program to fix it or simply clear the list.

Oh wow, so you can't even add new files after about 20 or so? Can you tell me what operating system and browser you are using? I am unable to replicate that behavior on Linux/Chrome.
After 25 files, the cache management system is supposed to delete the oldest file whenever you upload a new file, to prevent the number of files getting too crazy. But it's not supposed to prevent you from uploading a new file at all.
A button to clear the file cache sounds like a good idea and should be fairly simple to implement. I'll put it in the next update and I'll try to remember to let you know.

@vadimfedulov035 I have added a button for clearing all uploaded audio files.

Note: It works on my local installation, but for some reason, it's not working on https://haysay.ai/. You can always just refresh the page to clear your uploads on the live website, though.

I have found and fixed the root cause of the issue on haysay.ai. The "delete all uploaded files" button works now.


Maintenance > Cleanup Images: Wording is ambiguous

The option „Ignore images in revisions“ has an ambiguous meaning in my opinion. It can both mean

a)„ignore the images in earlier versions of the pages, so leave them untouched and do NOT delete them“ and

b) „don't give a sh*t about these images and earlier versions of the pages, just delete them, regardless to what that means, when one wants/needs to revert to an earlier page version!“ (which is what this option actually does)

In order to make this option less ambiguous, I would retitle it to: „Also delete images only found in previous page revisions“ (or in german: „Bilder, die nur in vorherigen Seiten-Versionen vorkommen, ebenfalls löschen“)

Thanks again for reporting @Wookbert.
I totally agree, My wording here it terrible. Marked to be changed for next release.

I wonder if this „Delete Images from previous page versions“ option should/could be a bit smarter, e.g. so that one can revert to at least a/the last version with images still in tact. Would require a bit of thinking...

Now updated in 4e82d93350c28bb8667f9cac262c4103b7345e62 ready for next release so will therefore close. Thanks again @Wookbert.

I wonder if this „Delete Images from previous page versions“ option should/could be a bit smarter, e.g. so that one can revert to at least a/the last version with images still in tact. Would require a bit of thinking...

That could be a smart idea, probably best to do it based on time (Revisions in the last x days rather than last revision) but I think that'd be optimizing a corner of the system that has little traffic.


Apple M1 support

Its adding support for Apple M1 in build scripts. Could be that I missed something like a docker build or something like this.

/ok-to-test
Thanks for this @simonoff! Can you please sign the CLA so we can get this merged in?

@rjbez17 I have signed it already.

/assign @adrianludwin
/assign @rjbez17

@simonoff  we are in a transition period moving away from the Linux Foundation CLA -> Easy CLA. However, Easy CLA isn't fully rolled out yet (and wont for a bit yet). If you wouldn't mind signing the linux foundation CLA, it would speed things up.
You can follow along with the EasyCLA rollout here: https://github.com/kubernetes/org/issues/3068

/check-cla

hm... i have changed and an email and other things. But still not accepted by CLA.

Does the email in your git commit match what you signed the CLA with?

@rjbez17 yes, i have made a force commit. and github user name and email were added there.

Sorry just looking into this now.
I think you may need to add a Signed-off-by: Name <email> to the commit message. E.g. see https://github.com/kubernetes-sigs/hierarchical-namespaces/commit/04df75b9d27143a48545f7fa9da3bb7cfd8992d9. See if that works?

Fixes #113

EasyCLA went live over the weekend. Lets hope a retest fixes this.

/lgtm

Cool thanks!


Removing internal JIRA links

Proposed changes
Removed the internal JIRA links (leaving just the ENGORC-## as the reference).

Deploy preview for docsdocker ready!
Built with commit a15d1d1cd39b1f57c2fffe86b72a8bef54d9edc3
https://deploy-preview-8639--docsdocker.netlify.com

@darwin-traver Thank you!


Fix where transitioning: error is not removed on next transition

We reloaded the instance before saving the modified transitioning
fields.

https://github.com/rancher/rancher/issues/7587


Update README.rst

as stated in https://github.com/Tivix/django-rest-auth/issues/568 , the package django-rest-auth is not maintained any more.

django-rest-auth has a newer fork by @jazzband https://github.com/jazzband/dj-rest-auth
It was added to DRF docs too https://github.com/encode/django-rest-framework/pull/7227


release version 3.1.0

We've kept get_engine until 3.2 to make the transition for Flask-Migrate users a little smoother. See https://github.com/miguelgrinberg/Flask-Migrate/pull/526 as well.


Consider if we can make point-of-view components optional in dataframe queries

How much work would it be?
The idea here would be to:

By default, the POV-components is None
Without a POV-component, you just return all rows (one row per RowId)

This means by default we show all the data.
(Both in GUI and in Python queries)
Or even: skip POV at all in this first release

FWIW, the pov-less, all the rows version is what 0.18's range dataframe view implemented (albeit with entities as rows instead of columns).
Implementation-wise, this should be addressed at re_dataframe-level, so technically not a "dataframe view" beyond the related query UI adjustment.

Incorporated into: https://github.com/rerun-io/rerun/issues/7455


[FEATURE REQUEST] Please add MP3 to AT3 conversion

It will help a lot, my whole collection is mp3.

If you want to convert mp3, you need to convert it to wave once on the tool.
You need to use 'Tool'->'AudioConverter'->'Audio to WAVE' to convert, and then convert the wave to at3 or at9.
In the future, we plan to implement a function to convert directly to at3 or at9.

With this update, the following formats can be read directly.
(mp3, m4a, aac, flac, alac, aiff, wma, ogg, opus)
Thus, the need to convert from an 'Tool'->'AudioConverter' has been eliminated.
After loading, a conversion window will appear and you can convert according to your target console. After that, the converted Wave will be loaded directly.
Enjoy :D

Wow, thanks a lot  XyLe-GBP!
One question: I drag n drop an mp3 file, choose psp, convert ... wav is created and loaded, but psp format isn*t chosen. I have to choose one more time.
Bonus question: why is portable version 4 times smaller?

Thanks for the report.
This will be fixed in the next update.
The reason the portable version has less space is because it does not incorporate the net6 runtime.
The lack of the runtime will result in a smaller footprint.
The portable version requires the net6 runtime to be installed from Microsoft's page instead of the smaller capacity. (In the portable version, the application itself cannot be launched without the runtime installed.)
The release version is larger but does not require the net6 runtime to be installed.

Thanks for the report.
This will be fixed in the next update.
The reason the portable version has less space is because it does not incorporate the net6 runtime.
The lack of the runtime reduces the size of the application.
The portable version requires the net6 runtime to be installed from the Microsoft page. (In the portable version, the application itself cannot be launched without installing the runtime.)
The release version has a larger capacity than the portable version, but does not require the net6 runtime to be installed because the runtime is already embedded in the application. In other words, instead of being larger, the release version does not require the net6 runtime to be installed on the PC in order to run.
If you already have the net6 runtime installed, it is worth using the portable version to save space.

This update corrects the file so that the appropriate console is selected when the file is converted.
If you have problems, please leave a comment again.


forName in Python API

Could we have the forName method in the Python API?
Main motivation: I have to pass the path through my code a lot, I would like to use the table name instead.

We are working on it. Its currently blocked on having the testing framework set up for Python tests with metastore tables and @brkyvz is actively working on it. Soon we will have it.

Great, thank you! I'll keep an eye out here and for 0.7.0.

This has been added to master - https://github.com/delta-io/delta/blob/master/python/delta/tables.py#L321


fix(release): remove skip ci to execute GH pages build

Unfortunately, we execute more workflows than needed this way. But without having a build for the prepare commit, we do not get the latest documentation that is ready for copy and paste with correct versions for the remote bases.

:tada: This PR is included in version 0.17.3 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


Remove deprecated things in psa/crypto_compat.h

There are a number of deprecated types and constants in include/psa/crypto_compat.h which seem to be for compatibility with previous version and should be removed. (For a list, search for DEPRECATED in that file.)

@gilles-peskine-arm Can you double-check that this makes sense? Also, I see that scripts/generate_psa_constant.py has provisions for skipping deprecated constants - can these be removed once the deprecated things in psa/crypto_compat.h or should support remain in the script?

Yes, we should remove everything from crypto_compat.h in 3.0. We might as well remove that header file altogether.
There are two kinds of things in crypto_compat.h: old constants, and support for open/close.
Old constants can just go away, removing any reference to them in tests.
Removing open/close means removing more tests and code and there's a requested feature (https://github.com/ARMmbed/mbedtls/issues/4218) that may reuse some of the code that's currently specific to open/close, so I suggest deferring that: just remove the declarations of psa_open_key and psa_close_key and supporting macros/funtions from public APIs, but keep the code and tests until after the 3.0 release.
I recommend not touching generate_psa_constants.py. I'm heavily refactoring it as part of my work to generate test cases for storage format stability; the code is now in scripts/mbedtls_dev/macro_collector.py, and it's just 3 lines of code: not worth the trouble of merge conflicts.

The issue has been fixed by: "Remove deprecated things from crypto_compat.h and dependent tests. #4344" so I'm closing it.


Logo upload & readme update

Thanks for accepting my contribution to your good project Sir..

Thanks for all @Tobaloidee

You are very welcome @narsenico  Goodluck to the project! :)


Maintainance?

Is someone actually maintain this tool? It's super useful, but missing features and seems pretty dead for almost a year now...

@uded If you're willing to take care of it with me, I'd be willing to.

@biesbjerg I am using this tool as well for various projects and I would like to start contributing. Could you reach out to me and we could discuss the options of becoming a contributor?
Thanks so much,
Sebastian

I'm working on an update and have already fixed quite a few bugs and added new features.
FYI: I'm considering changing the license to be free for personal / non-profit use, but paid for commercial use.
That would give me an incentive to keep fixing bugs, adding new/requested features and do support.

Well you could still allow contributions and let others help. I’m against changing licensing of already published software as it prevents people from using it.  But that is up to you (I would most likely fork the latest version which was still public to use and keep updating that one).


Cannot archive MSRC CVE publications.  Need option for delay?

As a test, I'm trying to archive https://msrc.microsoft.com/update-guide/vulnerability/CVE-2023-36884, however none of the archiving methods work.
Chrome > singleFile and Chrome > HTML return Snapshot [number] exists in DB, but resource [number]/singlefile.html does not exist in snapshot dir yet.
Chrome > PDF  and Chrome > Screenshot shows multiple pages of a spinning circle, indicating that the page hasn't loaded yet.
The first problem seems like perhaps Chrome didn't finish what it was doing in time?
And the second problem seems like ArchiveBox thought the page was done before it actually was?  Which may be evidence of a poorly-designed web page, but so be it.
Is there anything I can do to address either of these problems?

OK, so I've determined that the first bug is due to missing quotes in singlefile.py.  I'll file a normal bug report for that.
Which I suppose leaves the problem of the screenshot/pdf archives seemingly being before the page has completely loaded.

Have you tried increasing TIMEOUT=60 to a higher value?

Thanks for the tip.
Yeah, I did increase the TIMEOUT value to a higher value, and that led to it just reporting a SingleFile was not able to archive the page error. However sometimes it does work, so it may simply require further testing to see what's the difference between a working invocation and one that fails. It could be as simple as my VM being too anemic to reliably run all of the required components reliably.
FWIW, as for the screenshots and PDFs being taken too soon, I've noticed that adding '--virtual-time-budget=10000', to the cmd in both pdf.py and screenshot.py seems to address the problem.  At least for this MSRC page.  Oddly, the --timeout command-line option seems to be ignored, as the resulting invocation (at least via single-file) always returns in the same amount of time.  i.e. there is no noticeable delay.   🤷♂

Thanks for debugging further!
If you open a PR that changes the screenshot, pdf, and dom extractors to remove the old ignored --timeout=... CLI flag and add --virtual-time-budget=..., I'd be happy to review it!

In my brief testing I've found https://msrc.microsoft.com/update-guide/vulnerability/CVE-2023-36884 to be a bit nondeterministic in how it behaves with ArchiveBox.  Sometimes SingleFile works, and sometimes it fails.  Sometimes PDF and screenshots are of the loading progress indicator, and sometimes it's of the loaded document.  I'll see if I can get something to behave consistently (or at least explainably) before reporting back.


Is PNG Support still working?

When downloading the file i get project.tar than unpacks to project.tar.cpgz with nothing inside. Longer movies have 0 bytes or fail completely. JPG export works fine.
OSX 10.12, Chrome 53

Yes, it should work. I've just tried it, no issues. OSX 10.12, Chrome 53. Have you tried the sample page? https://www.clicktorelease.com/code/conway3d_ccapture


Have entity informed of the closing of the reconnect window

Currently in Ehcache, with state split between client and server, we end up having weird behaviours due to the entity never knowing when the reconnect window closes.
See ehcache/ehcache3#1626.
So could we discuss the pros and cons of having such an event exposed to entities? Either as part of the entity API or through a specific interface that entities could implement if that event interests their instances.

fixed in https://github.com/Terracotta-OSS/terracotta-apis/blob/master/entity-server-api/src/main/java/org/terracotta/entity/ActiveServerEntity.java#L121


Add a deprecation warning to the Modus Table

When we release the new modus-data-table, we must warn users not to use modus-table(renamed because it used to be modus-data-table) component and it will be deprecated soon.
Note: the branch will not merge to main branch directly until data table is available.
Fixes #693
Type of change

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

How Has This Been Tested?
Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration
Checklist

[ ] My code follows the style guidelines of this project
[ ] I have performed a self-review of my own code
[ ] I have commented my code, particularly in hard-to-understand areas
[ ] I have made corresponding changes to the documentation (including CHANGELOG updates)
[ ] My changes generate no new warnings
[ ] I have added tests that prove my fix is effective or that my feature works
[ ] New and existing unit tests pass locally with my changes
[ ] Any dependent changes have been merged and published in downstream modules
[ ] I have checked my code and corrected any misspellings

Ryan is good with the changes.


identify() doens't change the DistinctID of events on the server

Hi there,
upon calling
MixpanelAPI.getInstance(context, clientId).identify(ourUserUUID)

after login, we still see the events following this sent with something else than ourUserUUID, resulting in non-merged stream with the backend events that set the distinctID to ourUserUUID. Is that a but in the MP Android lib, since it works as expected on iOS?

hi @peterneubauer ! I went ahead and downloaded your app to test out the signup flow and it appears there are two issues here:

you correctly call alias() when a user signs up, at which point what happens is Mixpanel creates a 1:1 mapping between the ID you provide (ourUserUUID) and the automatically assigned distinct ID on the device. this means whenever you send an update with ourUserUUID it will actually be recorded in Mixpanel with the automatically assigned distinct ID this value maps back to -- this is why you are seeing events sent with a different distinct ID, which is not a problem.

there is an issue where you are calling alias() on the client and sending an update from your server simultaneously, resulting in a race condition. essentially, the call from the client to tie the IDs together is resolving after the call from your server to create a profile and send events, resulting in these immediate server-side calls recording with a different distinct ID. you can resolve this by sending these immediate calls with the mixpanel distinct ID (can get this using getDistinctId()) or by introducing a delay to ensure the alias resolves before the call goes out from your server.

let me know if you have questions regarding the above or if this can be better discussed over email regarding the specifics of your situation!

So, all our different clients (web, iOS, Android) should only call alias (btw, why are there different API calls for alias with one resp. two parameters on JS and Android/iOS?)?
Also, the server is sending with the ourUserUUID as distinctID. Should the server instead send a random distinctID and instead also call alias so all 4 MP clients have the same setup and we don't get a race condition since there is no stream with ourUserUUID in the system?
/peter

The problem is this use case:

User browses web, you track some events using an random distint_id (generated by MP).
User downloads app, launches app. You track some events using an another random distint_id (generated by MP).
User creates account from app using a server (tracked server side, and a new random distint_id is generated by MP), all the events from the web/app/server should be gathered to the same MP account, and the ID of this user should be ourUserUUID, not any of the three random distint_id´s used before.

How is this possible to solve with just one alias?

Hi @peterneubauer and @millenbop :
No matter the platform, the usage pattern follows that you alias a user once (typically when they sign up) and then you identify them on all future logins. So, for JS/iOS/Android, you should call alias with ourUserUUID when a user signs up -- this will tie your unique identifier to the the randomized distinct_id on the current platform.
(Side note for @peterneubauer -- the alias methods all actually accept 2 arguments of the form (newID, oldID) but in JS we populate oldID with the distinct_id automatically if it is not provided. In your case the (newID, oldID) would take the form (ourUserUUID, distinct_id))
On any future platform, once you call identify with ourUserUUID, all activity from this user will be merged with the previous activity as it ties back to the distinct_id. This will miss any non-authenticated activity for the user on other platforms, however, it will cause any activity after authentication to be linked together cross platform.
In the usage case you outlined, the step to analyze in detail is step 3. At the point of creating an account from the app, you should call alias on this user with ourUserUUID -- this will ensure the previous calls from the device with distinct_id and the new calls from your server with ourUserUUID will be tied to the same user. Again, this will miss the web activity until the user logs in, but there is not a good way to "know" a user on multiple platforms is the same until they log in.
You can find a detailed explanation of cross platform identity tracking here. Does the above solve the usage case you outlined?

Ok,
SI we should call alias from the server event that creates the account, and
only do identify from all platforms then. One thing is the timing, but
possibly we can delay the calls after login a bit.
I ta strange though that there is now way to link the old events before
identify to the right user - we know that they belong there but there is no
way of telling that mix panel? It's not great since we can't follow a
user's on boarding journey then - part of the point of the whole system
IMHO?
On Mar 31, 2016 7:57 PM, "Ryan Seams"<EMAIL_ADDRESS>wrote:

Hi @peterneubauer https://github.com/peterneubauer and @millenbop
https://github.com/millenbop :
No matter the platform, the usage pattern follows that you alias a user
once (typically when they sign up) and then you identify them on all
future logins. So, for JS/iOS/Android, you should call alias with
ourUserUUID when a user signs up -- this will tie your unique identifier
to the the randomized distinct_id on the current platform.
(Side note for @peterneubauer https://github.com/peterneubauer -- the
alias methods all actually accept 2 arguments of the form (newID, oldID)
but in JS we populate oldID with the distinct_id automatically if it is
not provided. In your case the (newID, oldID) would take the form (ourUserUUID,
distinct_id))
On any future platform, once you call identify with ourUserUUID, all
activity from this user will be merged with the previous activity as it
ties back to the distinct_id. This will miss any non-authenticated
activity for the user on other platforms, however, it will cause any
activity after authentication to be linked together cross platform.
In the usage case you outlined, the step to analyze in detail is step 3.
At the point of creating an account from the app, you should call alias
on this user with ourUserUUID -- this will ensure the previous calls from
the device with distinct_id and the new calls from your server with
ourUserUUID will be tied to the same user. Again, this will miss the web
activity until the user logs in, but there is not a good way to "know" a
user on multiple platforms is the same until they log in.
You can find a detailed explanation of cross platform identity tracking
here
https://mixpanel.com/blog/2015/09/21/community-tip-maintaining-user-identity.
Does the above solve the usage case you outlined?
—
You are receiving this because you were mentioned.
Reply to this email directly or view it on GitHub
https://github.com/mixpanel/mixpanel-android/issues/341#issuecomment-204054245

@peterneubauer You can call alias from the server, however, this will require you pass the distinct_id to your server before an alias call can be made. As mentioned in my previous reply the form of your alias arguments would be (newID, oldID) and since the oldID is not stored on your server you would need to pass it along before you can make the alias call. You can find some further info on this process here, or you can just make the alias call from the client side.
As for the events, calling alias when a user signs up and then identify whenever they login will link the old events before a user signed up to the new events after a user signed up. The case this does not cover is events when a user is unauthenticated on a new platform -- until this user signs in there is no way to know this is the same user who signed up on another device. You should be able to follow a user's on-boarding journey without issues.

Hi there,
now we have changed the signup flow to do the alias upon signup, and after that only use identify. However, if we log in/log out multiple times, the streams are still not merged in MP into one People. Can you please try http://android-releases.mapillary.io/app-release_184-MP.apk and let us know if this is the right flow of events?

Bump?

Hi @peterneubauer I went ahead and tested the version of the app you sent over. Are you sure you are calling alias on the username when signing up? I am not seeing an alias created in Mixpanel, and my profile is breaking upon sign up within the app as identify is definitely being called with my username:

The distinct ID of a user should remain consistent across all interactions with the app and it does not appear to be happening here since alias is not called.

well, this is the exact code that is being called (I can get you access to our repo if you need):
            MixpanelAPI instance = MixPanel.instance(SignUpActivity.this);
            data.putString(AccountManager.KEY_ACCOUNT_NAME, email);
            data.putString(AccountManager.KEY_ACCOUNT_TYPE, MapillaryAccountConstants.AUTHTOKEN_TYPE_FULL_ACCESS);
            data.putString(AccountManager.KEY_AUTHTOKEN, tokens[0]);
            data.putString(PARAM_UPLOAD_TOKEN, tokens[1]);
            data.putString(PARAM_USERNAME, tokens[2]);
            String mail = tokens[3];
            data.putString(PARAM_EMAIL, mail);
            Utils.saveProjects(SignUpActivity.this, tokens[4]);
            String user_uuid = tokens[5];
            instance.alias( user_uuid, instance.getDistinctId());
            instance.identify(user_uuid);
            instance.getPeople().set("Registered via", "Android");
            instance.getPeople().set("$email", mail);
            instance.getPeople().set("Date created account", new Date());

So alias is called before identify. Not sure why that is not honored? Do you have any possibility to track an ALIAS call in the MixPanel backend?

I checked on our backend and the value ryanseamsmp was never aliased to the automatically assigned distinct ID in the screenshot. Is it possible to turn on debug logging on this build so I can watch the calls go out from the device?
As for the issue with $email never showing up, you will need to make one more call to instance.getPeople().identify(user_uuid) to flush the people updates to our servers. Without the call to getPeople().identify() the calls will be queued on the device until this method is called.

Thanks @ryanseams  for the debug hint - I think things are working correctly now!

Thanks @peterneubauer and @ryanseams for your endless help!


Possible to bring modal into the interaction space after initiating via onLongPress?

Hi @raynor85.  Thanks a ton for this project.  It's made modals super easy to implement.
The last thing I'm trying to do is initiate a modal via onLongPress and, with the finger still on the screen, interact with the modal.
Do you use instagram?  If so, go to your profile section to view all the photos you've posted. Tap and hold one a photo thumbnail.  The photo will pop up in a modal and you can then drag your finger to a few buttons on the bottom to take actions on the photo.
This is what I'm trying to implement, without success so far.
I'm not sure it's possible but I thought I'd ask.
Thanks!!
Jeremy

I personally never coded a draggable component using react native, but
there are many examples and modules available on the Internet. I don't
understand why you should need a draggable moral box in the first place, it
seems you just need the draggable component.
Ps: about instagram, are you referring at the 3D Touch on ios?
On Thu, 15 Jun 2017 at 17:45, GollyJer<EMAIL_ADDRESS>wrote:

Hi @raynor85 https://github.com/raynor85. Thanks a ton for this
project. It's made modals super easy to implement.
The last thing I'm trying to do is initiate a modal via onLongPress and,
with the finger still on the screen, interact with the modal.
Do you use instagram? If so, go to your profile section to view all the
photos you've posted. Tap and hold one of the photos in the list. The photo
will pop up in a modal and you can then drag your finger to a few buttons
on the bottom to take actions on the photo.
This is what I'm trying to implement, without success so far.
I'm not sure it's possible but I thought I'd ask.
Thanks!!
Jeremy
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/raynor85/react-native-modal-wrapper/issues/8, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AFjD9ejF-dIVOSHvG9ITc7FG2tnCZiXYks5sEV-tgaJpZM4N7eKt
.

Hey! Thanks for the response.
It's not a draggable component. I guess it's hard to explain if you haven't seen it. I'm using Instagram on android and it works via tap and-hold.
I'll take a video when I get a chance.

Hi @raynor85. I was able to get a quick video of the Instagram interaction.
Take a look!

As an iPhone owner, that popup is activated using the 3D touch capability of iOS modern devices. This gesture is replicated for Android users with a longer press which is totally unrelated of the intensity of the pressure (more info: https://www.theverge.com/2015/12/8/9871248/apple-3d-touch-on-android-instagram-limited-update)
Now that we are in the same page, according to the article I posted above this is a very specific gesture for a very specific use case. Feel free to fork my project and try to play with the code, it's very simple and well documented, as the current API are limited to click gestures of opening and closing. You probably need to add a PanResponder or even go more in depth in order to detect the touchup event to close the modal
https://facebook.github.io/react-native/docs/gesture-responder-system.html


version 0.1.3 is not on npm (did this ever publish to npm ?, is this a dead repo?)

Is this officially a dead repo, there are so many clones on npm.
https://www.npmjs.com/package/rison, this package goes somewhere else.
Which tells me rison package name doesn't even belong to this repo even though package.json has the name rison.

This seems like a duplicate of https://github.com/Nanonid/rison/issues/25
There's a link to an updated fork I made in that issue as well.


Moved main classes to .net Standard library.  Added Nuget Package.

Hey Alex,
I needed your code for my project but I wanted to extend it a bit.  I wanted a Nuget package so I created one.  Just for more universal support, moved the classes to a .net standard library and then had your .NetCore3.1 SDK project to it.   Then just let the exe test project still point at the sdk.  Still works ok, but The SKD project it not really needed now (as you can make symbol nuget instead).

let me know if you would like me to publish it on Nuget for you.


Add misssing 'roundf32' and 'roundf64' intrinsics

Looks good, but please add a testcase (or rather, extend the existing FP testcase)

@RalfJung: Updated

Thanks!
@bors r+

:pushpin: Commit 4c11c6b73729f7b573eab102efb9856b37951532 has been approved by RalfJung

:hourglass: Testing commit 4c11c6b73729f7b573eab102efb9856b37951532 with merge 96adbf65bc0b450d9889ee43bf744f80c466864a...

:sunny: Test successful - checks-travis, status-appveyor
Approved by: RalfJung
Pushing 96adbf65bc0b450d9889ee43bf744f80c466864a to master...


build(mocha-test-setup): Stop building api docs

This package has a single exported object that is undocumented. It's an infrastructure package that we use internally, and it's not useful outside of our repo (I think).
We've observed that sometimes a local build will produce a change to the API report for this package -- removing the reference mocha types at the top of the file -- which then causes CI to fail. Multiple people have reported this, and it seems to be related to local build artifacts interfering with future builds.
We've investigated the problem, but it's intermittent. This is the only package we've ever had this problem with, so I disabled the API report output to sidestep the problem and bring stability to the CI system.

Thanks for the review, @ssimic2!


Default sort order

Having reviewed all the switchers available for Obsidian, yours is the best. It has so many options for opening files and the header navigation is very useful.
But one flaw for me is that the selection on opening is not recent files. There is nothing there useful to me until I start to type :e for recent items.
Would it be possible to set a custom search as the default? Or have another option for setting default?

I realised that I was starting with the wrong command. There is a Recent Search command for this plugin.


A convient way to test a single feature

I might scrap the whole @focus hackery if the -test.run flag works like @zregvart mentioned. Moving to draft.


Added delete marker in replication rules

Description
Added "delete_marker_replication_status " in replication rules
Motivation and Context
In some cases, delete marker is mandatory in v2 replication scenarios, for example saving data that overlaps.
In v3.50 of AWS provider they added:
resource/aws_s3_bucket: Add the delete_marker_replication_status argument for V2 replication configurations (#19323)
This change only includes a new rule lookup and fallback to null. Also it implies an upgrade to 3.50 provider version.
Breaking Changes
N/A
How Has This Been Tested?
Updated in our infraestructure and changes goes from:
 + rules {
              + id       = "REDACTED"
              + priority = 10
              + status   = "Enabled"
              + destination {
                  + bucket = "arn:aws:s3:::REDACTED"
                }
              + filter {
                  + prefix = "REDACTED"
                }
            }
 - rules {
              - delete_marker_replication_status = "Enabled" -> null
              - id                               = "REDACTED" -> null
              - priority                         = 10 -> null
              - status                           = "Enabled" -> null
              - destination {
                  - bucket = "arn:aws:s3:::REDACTED- -> null
                }
              - filter {
                  - prefix = "REDACTED" -> null
                  - tags   = {} -> null
                }
            }

to no change when we add this option.

@jayolmos Can the PR be fixed so this can get merged in?

Oh sorry, maybe it just needs an approval.


Fix Path docs

The Path docs are currently not very helpful: https://crystal-lang.org/api/0.28.0/Path.html.

This is done in #7718 now.


Fix filter issue for terms and condition

@race-of-sloths please include this PR

⏰ PR is already merged
It's too late to include us now. Include us before the merge next time!


Cache-control integration ?

I was wondering if it would be wise to add Cache-control(client-side) to gridfs-stream ?
What we basically need to do is add Pragma, Accept-Ranges, Cache-Control, ETag, Last-Modified, Content-Type and Content-Length headers, and set the statusCode to 304 before sending the file to client.
Then for each ulterior call to this file by a client we do the same thing again but this time without sending Content-Type and Content-Length.
It would be necessary to check for some change from the request header, to verify if file must be resend.

Hi @healiha ,
Wont the client just request the file based on the cache settings sent by the http server? So gridfs-stream does not know anything about the cache - it just stream data if requested.
I have done a simple cache implementation in meteor-file-collection (just x amount of time if specified in url) here https://github.com/riaan53/meteor-file-collection/blob/master/http_access_server.coffee#L148 . So the client wont request an image or video again if it was cached.
Is this want you mean?
Regards,
Riaan

Hi @riaan53 ,
That it. I already started an implementation here https://github.com/healiha/gridfs-stream/blob/master/lib/index.js#L163-L204 .
The only differences are that I use the ETag header instead of Content-MD5 and Cache-Control set to public, max-age=0.
It's still incomplete though. Would be easier to use if exported to a new dependencie with pipe supports.
Regards,
Lilian.

I see no profit of adding headers manipulation into gfs stream, because that's already covered in fresh and other packages.
See example:  https://github.com/nodeca/nodeca.core/blob/master/lib/autoload/hooks/server_bin/gridfs.js
Also, i'd recommend to look into send src to learn how to work with headers properly.


Refactor rescale_magnitude, add localvariography and correct bugs

Refactor rescale_magnitude (see #28)
The unconventional localvariography was addded (see #17)
Corrected some bugs

Codecov Report

Merging #33 (8959e90) into master (83a0db6) will decrease coverage by 0.80%.
The diff coverage is 45.94%.

@@            Coverage Diff             @@
##           master      #33      +/-   ##
==========================================
- Coverage   67.98%   67.18%   -0.81%
==========================================
  Files          16       17       +1
  Lines         681      713      +32
==========================================
+ Hits          463      479      +16
- Misses        218      234      +16

Impacted Files
Coverage Δ

src/estimators/variograms.jl
97.29% <ø> (+15.47%)
:arrow_up:

src/parametrization/recipes.jl
0.00% <0.00%> (ø)

src/parametrization/variograms.jl
0.00% <0.00%> (ø)

src/estimators/kriging.jl
92.43% <50.00%> (+1.38%)
:arrow_up:

src/parametrization.jl
58.82% <50.00%> (-3.40%)
:arrow_down:

src/parametrization/conversions.jl
73.07% <66.66%> (+1.07%)
:arrow_up:

src/parametrization/utilities.jl
40.57% <75.00%> (+14.26%)
:arrow_up:

src/parametrization/interpolation.jl
95.45% <100.00%> (+0.10%)
:arrow_up:

src/spacetransforms/deformation.jl
50.00% <100.00%> (ø)

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 83a0db6...8959e90. Read the comment docs.


fix data handling of skills and show them in ui

addresses https://github.com/SR5-FoundryVTT/Foundry-SR5-Hud/issues/17

@shadows-eye if this works for you, you can merge it


Collision Fixes for world geometrys

As u see this fence collision is a part of bridge collision file. but is you try to colide from that side u will be able to go through but from other side u will collide there are lot of collision issues in different model in different places. this script should work perfectly for now.
Tell me if this script need any improvement.
`using SanAndreasUnity.Importing.Collision;
using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using Object = UnityEngine.Object;
namespace SanAndreasUnity.Importing.Conversion
{
public class CollisionModel
{
private static UnityEngine.Vector3 Convert(Vector3 vec)
{
return new UnityEngine.Vector3(vec.X, vec.Z, vec.Y);
}
    private static Mesh Convert(IEnumerable<Face> faces, IEnumerable<Vertex> vertices)
    {
        var mesh = new Mesh
        {
            vertices = vertices.Select(x => Convert(x.Position)).ToArray(),
            subMeshCount = 1
        };

        var indices = faces.SelectMany(x => x.GetIndices()).ToArray();

        mesh.SetIndices(indices, MeshTopology.Triangles, 0);

        for (int m = 0; m < mesh.subMeshCount; m++)
        {
            int[] triangles = mesh.GetTriangles(m);
            int[] trians = triangles;
            triangles = new int[trians.Length * 2];
            trians.CopyTo(triangles, 0);
            for (int i = 0; i < trians.Length; i += 3)
            {
                int temp = trians[i + 0];
                trians[i + 0] = trians[i + 1];
                trians[i + 1] = temp;
            }
            trians.CopyTo(triangles, trians.Length);
            mesh.SetIndices(triangles, MeshTopology.Triangles, m);
        }

        return mesh;
    }

    private static Mesh Convert(FaceGroup group, IEnumerable<Face> faces, IEnumerable<Vertex> vertices)
    {
        return Convert(faces.Skip(group.StartFace).Take(1 + group.EndFace - group.StartFace), vertices);
    }

    private static GameObject _sTemplateParent;

    private static readonly Dictionary<string, CollisionModel> _sLoaded
        = new Dictionary<string, CollisionModel>();

    public static void Load(string name, Transform destParent, bool forceConvex = false)
    {
        Load(name, null, destParent, forceConvex);
    }

    public static void Load(CollisionFile file, Transform destParent, bool forceConvex = false)
    {
        Load(file.Name, file, destParent, forceConvex);
    }

    private static void Load(string name, CollisionFile file, Transform destParent, bool forceConvex)
    {
        CollisionModel col;

        if (_sLoaded.ContainsKey(name))
        {
            col = _sLoaded[name];
            if (col == null) return;

            col.Spawn(destParent, forceConvex);
            return;
        }

        file = file ?? CollisionFile.FromName(name);
        if (file == null || (file.Flags & Flags.NotEmpty) != Flags.NotEmpty)
        {
            _sLoaded.Add(name, null);
            return;
        }

        col = new CollisionModel(file);
        _sLoaded.Add(name, col);

        col.Spawn(destParent, forceConvex);
    }

    private readonly GameObject _template;
    private readonly Dictionary<SurfaceFlags, Transform> _flagGroups;

    private void Add<TCollider>(Surface surface, Action<TCollider> setup)
        where TCollider : Collider
    {
        if (!_flagGroups.ContainsKey(surface.Flags))
        {
            var group = new GameObject(string.Format("Group {0}", (int)surface.Flags));
            group.transform.SetParent(_template.transform);

            _flagGroups.Add(surface.Flags, group.transform);
        }

        var type = typeof(TCollider);
        var obj = new GameObject(type.Name, type);
        obj.transform.SetParent(_flagGroups[surface.Flags]);

        setup(obj.GetComponent<TCollider>());
    }

    private CollisionModel(CollisionFile file)
    {
        if (_sTemplateParent == null)
        {
            _sTemplateParent = new GameObject("Collision Templates");
            _sTemplateParent.SetActive(false);
        }

        _template = new GameObject(file.Name);
        _template.transform.SetParent(_sTemplateParent.transform);

        _flagGroups = new Dictionary<SurfaceFlags, Transform>();

        foreach (var box in file.Boxes)
        {
            Add<BoxCollider>(box.Surface, x =>
            {
                var min = Convert(box.Min);
                var max = Convert(box.Max);

                x.center = (min + max) * .5f;
                x.size = (max - min);
            });
        }

        foreach (var sphere in file.Spheres)
        {
            Add<SphereCollider>(sphere.Surface, x =>
            {
                x.center = Convert(sphere.Center);
                x.radius = sphere.Radius;
            });
        }

        if (file.FaceGroups.Length > 0)
        {
            foreach (var group in file.FaceGroups)
            {
                Add<MeshCollider>(file.Faces[group.StartFace].Surface, x =>
                {
                    x.sharedMesh = Convert(group, file.Faces, file.Vertices);
                });
            }
        }
        else if (file.Faces.Length > 0)
        {
            Add<MeshCollider>(file.Faces[0].Surface, x =>
            {
                x.sharedMesh = Convert(file.Faces, file.Vertices);
            });
        }

        // TODO: MeshCollider
    }

    public void Spawn(Transform destParent, bool forceConvex)
    {
        var clone = Object.Instantiate(_template.gameObject);

        clone.name = "Collision";
        clone.transform.SetParent(destParent, false);

        //	Debug.Log ("Setting parent (" + destParent.name + ") for " + clone.name);

        if (!forceConvex) return;

        foreach (var collider in clone.GetComponentsInChildren<Collider>())
        {
            var meshCollider = collider as MeshCollider;

            collider.gameObject.layer = 2;

            if (meshCollider != null)
            {
                meshCollider.convex = true;
            }
        }
    }
}

}`

Heh, I think you got kinda lost here... :smile:
So, first of all, I guess, you should try to get to know git and how it works.  Maybe take a look at this guide. So, in short, you should probably do something like this:

fork the GTA-ASM Repo to your own account
clone your personal fork onto your local computer
apply the changes you want to make, the part you pasted in the description box on GitHub, above
create a commit
push your changes to your fork
open a pull request from your fork to the GTA-ASM Repo

I'm no longer really actively working on this project, so I can't really do anything useful with your Pull Request here.
And sadly I also can't really help you in regards to a code review, I really have not much knowledge about this project.
Sorry. Hope this helps getting you started. Thank you very much for your contribution anyway! Please don't let this stop you from continuing in the open source world :)


Conditional Access Support for Storage Explorer

Could you confirm if Conditional Access support has been added to Storage Explorer ? As per this article, CA is not supported.

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

ID: 7f1c7f52-873b-e4c1-cd82-90acb5059eb2
Version Independent ID: 6558eee1-6893-9508-007b-6cbe1446abfc
Content: Azure Storage Explorer troubleshooting guide
Content Source: articles/storage/common/storage-explorer-troubleshooting.md
Service: storage
GitHub Login: @Deland-Han
Microsoft Alias: delhan

@RamlingaReddy Thanks for your comment. We are actively investigating and will get back to you shortly.

"Conditional Access
Because of a limitation in the Azure AD Library used by Storage Explorer, Conditional Access isn't supported when Storage Explorer is being used on Windows 10, Linux, or macOS."
As per the article conditional access is not yet supported. However, few users are reporting that they were able sign-in to their azure subscription until recently. Please confirm.

@RamlingaReddy No, it is not currently supported. You may leave your Uservoice/Feedback here
All the feedback you share in these forums will be monitored and reviewed by the Microsoft engineering teams responsible for building Azure.
We will now proceed to close this thread. If there are further questions regarding this matter, please tag me in your reply. We will gladly continue the discussion and we will reopen the issue.


Feature request: Seed continuous view on creation

On creating a continuous view one have to wait as long as the max_age to become usable. If one have to alter the query in the continuous view, or there's a disruption in the stream, than a considerable amount of time is needed to recover.
Streams should have a setting, where one can define a further retention for the events. Also it's only possible if arrival_timestamp could be overridden somehow. For example Flume uses an Avro schema to enable this. See FlumeEventAvroEventSerializer.java

@tothandor, you can use any timestamp type column in place of arrival_timestamp. However, you can't use max_age for that, you'll have to use the explicit condition: WHERE <ts_column> > clock_timestamp() - interval '1 hour'. This allows you to back fill the continuous view as well because now you control the time axis for the sliding window. Should this resolve your issue?

Sorry for reacting so late and thanks for you explanation! I did not realized until your reply, that other conditions could also influence retention. Thus there's no need to override arrival_timestamp.

I don't we have that documented, so there's no way you could've known :). I'll update the docs.


Bridge Improvements #1

Summary of changes

Change the walletConnectionState payload to pass more info
Handle Metamask connect wallet error more gracefully
Remove the eventsWatcher check when filtering the relayer
Parse the relayer error message and display on the bridge dApp
Add executorWithTimeout to execute a promise with timeout to prevent handling on the bridge
Use newer library to detect Metamask extension
Initialize the API config with on-chain data after Metamask pop-up

Proposed area of change
Put an x in the boxes that apply.

[x] apps/bridge-dapp
[ ] apps/stats-dapp
[ ] apps/webbsite
[ ] apps/faucet
[ ] apps/tangle-website
[x] libs/webb-ui-components

Reference issue to close (if applicable)

Closes https://github.com/webb-tools/webb-dapp/issues/1203

Screen Recording
https://github.com/webb-tools/webb-dapp/assets/60747384/93bd494d-f756-4146-8285-374fe606ea04

The issue of hanging when calling eth_requestAccounts still persists at times. In order to fix this, we have to refresh the browser. I've opened an issue (https://github.com/MetaMask/metamask-extension/issues/19112) to get insight from the Metamask team.


Invalid schema is silently accepted

I'm using json_schemer (0.2.11) in the project and couldn't help but notice some unexpected behaviour.
Is it expected that no errors are being raised when an invalid schema is provided to the .schema method?
I noticed it when I was debugging a schema that looked correct at a glance, but proved invalid upon closer inspection:
{
      "type" => "object",
      "properties" => {
        "type" => "array",
        "items" => {
          "type" => "object",
          "properties" => {...some properties...}
        }
      }
    }

The above is invalid, because the nested array value has no property name that would act as a key for the object type.
I digged a little deeper, and it seems like JSONSchemer doesn't care about schema validity at all.
For instance:
[5] pry> JSONSchemer.schema("potato cheese pierogi" => "Margaret Thatcher").valid?({ "some" => "json data" })
=> true

For contrast, an online json schema validator I found offers a following error in such a case:
[ {
  "level" : "fatal",
  "message" : "invalid JSON Schema, cannot continue\nSyntax errors:\n[ {\n  \"level\" : \"error\",\n  \"schema\" : {\n    \"loadingURI\" : \"#\",\n    \"pointer\" : \"/properties/type\"\n  },\n  \"domain\" : \"syntax\",\n  \"message\" : \"JSON value is of type string, not a JSON Schema (expected an object)\",\n  \"found\" : \"string\"\n} ]",
  "info" : "other messages follow (if any)"
}, {
  "level" : "error",
  "schema" : {
    "loadingURI" : "#",
    "pointer" : "/properties/type"
  },
  "domain" : "syntax",
  "message" : "JSON value is of type string, not a JSON Schema (expected an object)",
  "found" : "string"
} ]

Would it make more sense to raise a similar error in the described case? Either on .schema call or on #valid? call?

Is it expected that no errors are being raised when an invalid schema is provided to the .schema method?

That is expected (to me at least :)). I initially wrote JSONSchemer because json-schema was surprisingly slow (and didn't support draft 7), so I wanted to avoid the extra work of validating the schema itself. I do think people would find it useful to offer schema validation, though.

Would it make more sense to raise a similar error in the described case? Either on .schema call or on #valid? call?

I'd probably add that as a separate method, something like JSONSchemer.schema(schema).valid_schema? or JSONSchemer.valid_schema?(schema). That way people that know their schemas are valid don't have to deal with the overhead.

That is expected (to me at least :)). I initially wrote JSONSchemer because json-schema was surprisingly slow (and didn't support draft 7), so I wanted to avoid the extra work of validating the schema itself. I do think people would find it useful to offer schema validation, though.

I see.
Agreed, I reckon it makes sense to make it an opt-in behaviour then. I'll try too cook something up.

any updates on this?  Would love to have this as an option!

any updates on this? Would love to have this as an option!

No updates on my end. I don't think a valid_schema? implementation would be too complicated, if anyone feels like contributing. I believe we could ship the meta-schemas (eg, draft 7) and run a regular validation. Could also cover https://github.com/davishmcclurg/json_schemer/issues/41.

v1.0.0 added support for validating schemas:
JSONSchemer.valid_schema?(schema)
JSONSchemer.validate_schema(schema)
JSONSchemer.schema(schema).valid_schema?
JSONSchemer.schema(schema).validate_schema

These work the same way as the data validation methods: valid? (returns boolean) and validate (returns error enumerator).