makeCoHost twice, the 2nd time causes a Companion module error

Here are the steps I take...

Select a participant that is not currently a co-host
Execute makeCoHost, everything is fine
Execute revokeCoHost, everything is fine
With the same selected participant
Execute makeCoHost (this is the 2nd time), the Companion modules generates errors and has to reset

Here is the Companion module log data...
debug: M1MacMini, user role 1
debug: Jeff Widgren | Overland Park, KS, user role 3
debug: Jeff Widgren | Overland Park, KS, user role 3
debug: vMix Laptop, user role 2
debug: vMix Laptop, user role 2
debug: MacbookPro, user role 2
debug: MacbookPro, user role 2
debug: iMacDesktop, user role 3
debug: iMacDesktop, user role 3
debug: iPad, user role 3
debug: iPad, user role 3
error: Module registration failed Error: Call timed out
at t.IpcWrapper.sendWithCb (/Applications/__apps/Companion 3.0/Companion.app/Contents/Resources/bundled-modules/zoom-osc-iso/main.js:2:458803)
at /Applications/__apps/Companion 3.0/Companion.app/Contents/Resources/bundled-modules/zoom-osc-iso/main.js:2:451884
Starting up module class: u
Sentry disabled
info: Welcome, Zoom module is being initialized
info: changing config!
info: Listening to ZoomOSC on port: 1234
debug: ZISO_2.0.6_pro_MAC Pro
debug: M1MacMini, user role 1
debug: M1MacMini, user role 1
debug: Jeff Widgren | Overland Park, KS, user role 3
debug: Jeff Widgren | Overland Park, KS, user role 3
debug: vMix Laptop, user role 2
debug: vMix Laptop, user role 2
debug: MacbookPro, user role 2
debug: MacbookPro, user role 2
debug: iMacDesktop, user role 3
debug: iMacDesktop, user role 3
debug: iPad, user role 3
debug: iPad, user role 3
debug: M1MacMini, user role 1
debug: M1MacMini, user role 1
debug: Jeff Widgren | Overland Park, KS, user role 3
debug: Jeff Widgren | Overland Park, KS, user role 3
debug: vMix Laptop, user role 2
debug: vMix Laptop, user role 2
debug: MacbookPro, user role 2
debug: MacbookPro, user role 2
debug: iMacDesktop, user role 3
debug: iMacDesktop, user role 3
debug: iPad, user role 3
debug: iPad, user role 3
error: Module registration failed Error: Call timed out
at t.IpcWrapper.sendWithCb (/Applications/__apps/Companion 3.0/Companion.app/Contents/Resources/bundled-modules/zoom-osc-iso/main.js:2:458803)
at /Applications/__apps/Companion 3.0/Companion.app/Contents/Resources/bundled-modules/zoom-osc-iso/main.js:2:451884
Starting up module class: u
Sentry disabled
Module-host accepted registration
info: Welcome, Zoom module is being initialized
info: changing config!
info: Listening to ZoomOSC on port: 1234
debug: ZISO_2.0.6_pro_MAC Pro
debug: M1MacMini, user role 1
debug: M1MacMini, user role 1
debug: Jeff Widgren | Overland Park, KS, user role 3
debug: Jeff Widgren | Overland Park, KS, user role 3
debug: vMix Laptop, user role 2
debug: vMix Laptop, user role 2
debug: MacbookPro, user role 2
debug: MacbookPro, user role 2
debug: iMacDesktop, user role 3
debug: iMacDesktop, user role 3
debug: iPad, user role 3
debug: iPad, user role 3
debug: M1MacMini, user role 1
debug: M1MacMini, user role 1
debug: Jeff Widgren | Overland Park, KS, user role 3
debug: Jeff Widgren | Overland Park, KS, user role 3
debug: vMix Laptop, user role 2
debug: vMix Laptop, user role 2
debug: MacbookPro, user role 2
debug: MacbookPro, user role 2
debug: iMacDesktop, user role 3
debug: iMacDesktop, user role 3
debug: iPad, user role 3
debug: iPad, user role 3

Confirming the build? Latest?

ZoomISO Version 2.0.6 (2<IP_ADDRESS>.12)
Companion Version (3.0.0+5765-beta-6f1e5e4e)

@JeffreyDavidsz will investigate

I had this same issue today.  I took a look at the ZoomGroupData[0] and found the issue.  When you remove a co-host, it makes the attendee position the ZoomGroupData[0] data structure null so that when it tries to do a .ZoomId null it is not able to do it.
Details:
Here is the error message that I got that gives a bit more details.  I am also running the code for the https://github.com/bitfocus/companion-module-zoom-osc-iso/pull/91
ZoomOSC 4.2
Companion v3.0.0+5780-beta-bb541a1a
error: C:\Work\repos\companion-module-dev\companion-module-zoom-osc-iso\dist\osc.js:297
                                const index = this.instance.ZoomGroupData[0].users.findIndex((id) => id.zoomID === zoomId);
                                                                                ^

TypeError: Cannot read properties of undefined (reading 'zoomID')
    at C:\Work\repos\companion-module-dev\companion-module-zoom-osc-iso\dist\osc.js:297:105
    at Array.findIndex (<anonymous>)
    at OSC.processData (C:\Work\repos\companion-module-dev\companion-module-zoom-osc-iso\dist\osc.js:297:84)
    at osc.UDPPort.<anonymous> (C:\Work\repos\companion-module-dev\companion-module-zoom-osc-iso\dist\osc.js:71:18)
    at osc.UDPPort.emit (node:events:513:28)
    at osc.UDPPort.emit (node:domain:489:12)
    at osc.firePacketEvents (C:\Work\repos\companion-module-dev\companion-module-zoom-osc-iso\node_modules\osc\src\osc-transports.js:25:18)
    at p.decodeOSC (C:\Work\repos\companion-module-dev\companion-module-zoom-osc-iso\node_modules\osc\src\osc-transports.js:85:17)
    at osc.UDPPort.emit (node:events:513:28)
    at osc.UDPPort.emit (node:domain:489:12)

Node.js v18.14.2

The error happens in the osc.ts file in the processData method for the roleChanged switch statement.
Code that causes the error is the first line in the if user role is host or co-host.
const index = this.instance.ZoomGroupData[0].users.findIndex((id) => id.zoomID === zoomId);

full code:
case 'roleChanged':
    // this.instance.log('debug', 'receiving:' + JSON.stringify(data))
    if ((0, utils_1.userExist)(zoomId, this.instance.ZoomUserData)) {
        this.instance.ZoomUserData[zoomId].userRole = data.args[4].value;
    }
    if (data.args[4].value === UserRole.Participant) {
        const index = this.instance.ZoomGroupData[0].users.findIndex((id) => id.zoomID === zoomId);
        delete this.instance.ZoomGroupData[0].users[index];
        this.updateLoop = true;
    }
    else if (data.args[4].value === UserRole.Host || data.args[4].value === UserRole.CoHost) {
        const index = this.instance.ZoomGroupData[0].users.findIndex((id) => id.zoomID === zoomId);
        if (index === -1) {
            this.instance.ZoomGroupData[0].users.push({
                zoomID: zoomId,
                userName: data.args[1].value,
            });
            this.instance.log('debug', `added host: ${data.args[1].value}`);
        }
        this.updateLoop = true;
    }
    this.instance.UpdateVariablesValues();
    break;


Release tmt-1.19.0

Follow the steps below to create a new major or minor release:

[x] Run the full test coverage using tmt -c how=full run
[x] Use git log --oneline --no-decorate x.y-1.. to generate the changelog
[x] Update README with new contributors since the last release
[x] Add a Release tmt-x.y.0 commit with the specfile update
[ ] Create a pull request with the commit, ensure tests pass

Release a new package to Fedora and EPEL repositories:

[ ] Move the fedora branch to point to the new release
[ ] Create a source rpm using the make srpm command
[ ] Enable Fedora kerberos kinit<EMAIL_ADDRESS>[ ] Change to the fedora rpms git or fedpkg clone tmt
[ ] Check out the rawhide branch git checkout rawhide
[ ] Import the srpm using fedpkg import /path/to/the/srpm
[ ] Restore any files removed by fedpkg if necessary
[ ] Ensure the proposed changes are ok and commit them
[ ] Create a pull request against rawhide from your fork
[ ] After tests pass, merge the pull request to rawhide
[ ] Build the package for rawhide fedpkg build --nowait
[ ] Build package for all active releases
[ ] Create a bodhi update for each release

Finally, if everything went well:

[ ] Tag the commit with x.y.0, push tags git push --tags
[ ]  Manually merge the original release pull request on github (to avoid rebase)
git checkout main && git merge --ff-only <release_branch> && git push origin main
[ ] Create a new github release__ based on the tag above
[ ] If the automation triggered by publishing the new github release
was not successful, publish the fresh code to the pypi__
repository manually using make wheel && make upload
[ ]  Once the copr build__ is completed, move the quay branch to
point to the release commit as well to build fresh container
images.
[ ] Close the corresponding release milestone

I'll continue tomorrow. Locally tests/full one failure on /plans/provision/virtual (likely VM in VM in VM timeouts)


Release 2.5.0

This is a draft of changelog for the 2.5.0 release.
Here you can find all related translations changes: 2.4.0...master.

⚠ Do not merge this pull request manually ⚠
You should approve this pull request instead. After approving, I will automatically update it (release date needs to be adjusted), merge, and tag a new release. You can read more about the process on forum.

Show release notes preview
2.5.0

Added support for new extensions:

clarkwinkelmann/flarum-ext-discussion-bookmarks

Updated translations for extensions:

clarkwinkelmann/flarum-ext-anonymous-posting

All changes: 2.4.0...2.5.0.

Success! Now you can announce new release on forum:
## Version [`2.5.0`](https://github.com/flarum-lang/hebrew/releases/tag/2.5.0)

**Added support for new extensions**:

* [`clarkwinkelmann/flarum-ext-discussion-bookmarks`](https://github.com/clarkwinkelmann/flarum-ext-discussion-bookmarks)

**Updated translations for extensions**:

* [`clarkwinkelmann/flarum-ext-anonymous-posting`](https://github.com/clarkwinkelmann/flarum-ext-anonymous-posting)

All changes: [2.4.0...2.5.0](https://github.com/flarum-lang/hebrew/compare/2.4.0...2.5.0).

In order to update run these commands:

```console
composer update flarum-lang/hebrew
php flarum cache:clear
```


[SD CHANGE] <IP_ADDRESS>.1 formatting

What is the change request for the SD? Please describe.
The table in the TSS section has odd fonts compared to the rest of the document, it looks odd to read. Also, the line after the table has a hanging indent at the left page margin instead of the normal indent of all lines.
Describe the solution you'd like
correct the formatting, use a consistent table set of fonts.

Resolved with asciidoc migration.


Add copy atom & functionality for codeblocks

What should this PR do?
Resolves DEVED-228 by adding a CopyToClipboard atom to be used with our code blocks. When clicked, this component enables code copying via the Clipboard API.
Why are we making this change?

We would like users to have a delightful experience learning on our site, and being able to copy code for learning purposes will aid this goal.

What are the acceptance criteria?

Code in codeblocks should be copied when the copy icon is clicked.
The icon should have a hover color change.
Code output should not have a copy button.

How should this PR be tested?

Check out the branch, and ensure that the above criteria are met in a given tutorial.

Pull request process
Reviewers:

Test functionality using the criteria above.
Offer tips for efficiency, feedback on best practices, and possible alternative approaches and things that may not have been considered.
For shorter, "quick" PRs, use your best judgement on #2.
Use a collaborative approach and provide resources and/or context where appropriate.
Provide screenshots/grabs where appropriate to show findings during review.

Reviewees:

Prefer incremental and appropriately-scoped changes.
Leave a comment on things you want explicit feedback on.
Respond clearly to comments and questions.

Button:

Hover:

Success message:

)

Will bring this up to date once #361 is in.


Extend support for modifier keys (.cmd, .cmdOrCtrl)

What do you think about extending the modifier keys by these:
.cmd - only for macOS and represents the command key
.cmdOrCtrl - represents command key on macOS and control key on Linux/Windows
The second one (cmdOrCtrl) is a widely used concept in Electron apps to create shortcuts in a more natural way for users of specific systems.
Personally, I have a custom textarea component which implements custom key bindings i.e. cmd/ctrl + ← to move the caret to the beginning of textarea. I would love to make this work by using a single, OS-aware modifier.

Isn't this what .meta does? https://vuejs.org/v2/guide/events.html#Modifier-Keys

Not exactly.
.meta responds to Windows key on Windows/Linux and command key on Mac. The same modifier is called "Super" in Electron.
.cmdOrCtrl (or any better name) could respond to control key on Windows/Linux and command key on Mac. This is more common situation from the UX point of view than .meta as Windows/Linux users generally use control key for the same things that Mac users use command key (ctrl+v vs cmd+v, ctrl+z vs cmd+z etc.).
The current solution requires something like this:
<template>
  <textarea @keydown.meta.left="fooOnMac" @keydown.ctrl.left="fooOnWindowsOrLinux"></textarea>
</template>

<script>
export default {
  methods: {
    foo() {
      // ...
    },
    fooOnMac () {
      // ...
      if (mac) {
        this.foo()
      }
    },
    fooOnWindowsOrLinux () {
      // ...
      if (windows || linux) {
        this.foo()
      }
    }
  }
}
</script>

With the new modifier, you could limit that to:
<template>
  <textarea @keydown.cmdOrCtrl.left="foo"></textarea>
</template>

<script>
export default {
  methods: {
    foo() {
      // ...
    }
  }
}
</script>

The problem is that Vue as a front-end library runs not only in Electron - when running in browsers, we cannot consistently detect what OS the app is running in, so we can't perform the platform checks as you did in your first example inside the library itself. You will have to do it in userland code anyway.
Instead, I'd suggest creating a reusable function wrapper:
function checkCmdOrCtrl (fn) {
  return function (e) {
    if ((mac && e.metaKey) || ((windows || linux) && e.ctrlKey)) {
      return fn.apply(this, arguments)
    }
  }
}

Then in components that need this functionality:
<template>
  <textarea @keydown.left="foo"></textarea>
</template>

<script>
export default {
  methods: {
    // wrap the function
    foo: checkCmdOrCtrl(function () {
      // ...
    })
  }
}
</script>

Yeah, I thought about browsers and using navigator.platform but you are right. It's getting out of the framework scope and more like an idea for a plugin. Basic wrappers for KeyboardEvent properties are enough for the most of the cases.

On the other hand, is this expected behavior of modifiers or should be considered as a bug?
JSFiddle Demo: https://jsfiddle.net/qzdt20ya/
<template>
  <input @keydown.meta.left="logCmd" @keydown.meta.shift.left="logCmdShift">
</template>

<script>
export default {
  methods: {
    logCmd () {
      console.log('cmd + left pressed')
    },
    logCmdShift () {
      console.log('cmd + shift + left pressed')
    }
  }
}
</script>

What is expected?
Log for pressing cmd + ←:
cmd + left pressed

Log for pressing cmd + shift + ←:
cmd + shift + left pressed

Log for pressing shift + ←:

What is actually happening?
Log for pressing cmd + ←:
cmd + left pressed

Log for pressing cmd + shift + ←:
cmd + left pressed
cmd + shift + left pressed

Log for pressing shift + ←:

@bkzl I'd say that's expected behavior. .meta.left doesn't rule out other modifier keys being pressed at the same time.

I would suggest adding a modifier to .none as well.
Following the same idea to capture only keys pressed but without CTRL SHIF ALT or META pressed.
<template>
  <input @keydown.left="logAllLeftCmd" @keydown.none.left="logOnlyLeftCmd">
</template>

<script>
export default {
  methods: {
    logOnlyLeftCmd () {
      console.log('only left pressed')
    },
    logAllLeftCmd () {
      console.log('left pressed with or without modifiers')
    }
  }
}
</script>

Closing since the original suggestion involves platform sniffing which can be quite tricky. This is probably something that's better dealt with in userland.

This makes a lot of sense. For a lot of shortcuts, ctrl in Windows is replaced by cmd on macOS. Think of multiple file selections (ctrl/cmd + click) for example.

I agree that this is something that would be super useful. Ctrl is replaced by Cmd on MacOS.

Also agree that it would be useful, but I understand the arguments made above.
Suggestion: we could call it ctrlOrMeta. That way we wouldn’t have to sniff platforms, and both would work. It would be explicit enough not to confuse people too much either.

So.. what happened with ctrlOrMeta? Will it be implemented, or will this require a workaround in the future, too?

My workaround :
@click.exact="primary()"
@click.meta="secondary()"
@click.ctrl="secondary()"
@contextmenu.prevent


Creationpane layout

You call this branch css-basics, but htis is no basics anymore. Please keep PR a LOT smaller than this.


Exec tachikoma update<PHONE_NUMBER>0145

:hamster::hamster::hamster:   Strategy none
Powered by Interval Pull Request as a Service - Tachikoma.io

Coverage remained the same at % when pulling 86bb408bacd29c937fcd245888817ab24954506e on tachikoma/update-20150129160145 into ddf31327ec9d3097b29bd6c49c1071d946319912 on master.


Test out action work after role update

#663  👈
main

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

Join @RajatPawar and the rest of your teammates on  Graphite


Thumbprint need semicolon

[Enter feedback here]
The Certificate Thumbprint value copied under step 8 of Paragraph Configure Azure AD SSO needs to be adjusted to have semicolons to be accepted in step 7 under Configure Meraki Dashboard SSO
E.g. default Thumbprint copied from Azure Portal = 1A2B3C
Meraki Dashboard expects 1A:2B:3C

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

ID: e25502b7-432c-e8ff-2dde-f21e8ba6b4db
Version Independent ID: ab9b51a1-d5c9-050b-ef67-0f1820eaf910
Content: Tutorial: Azure Active Directory single sign-on (SSO) integration with Meraki Dashboard
Content Source: articles/active-directory/saas-apps/meraki-dashboard-tutorial.md
Service: active-directory
Sub-service: saas-app-tutorial
GitHub Login: @jeevansd
Microsoft Alias: jeedes

@JohnMoor Thank you for pointing it out. We will have this reviewed and update the documentation as required.

@JohnMoor Thank you for pointing it out. We will have this reviewed and update the documentation as required.

@v-hagamp Can you please get this article updated with the right instructions? That way customers can add semicolon and then add that in the Meraki configuration?

@v-hagamp Can you please get this article updated with the right instructions? That way customers can add semicolon and then add that in the Meraki configuration?


Ruby .rb files are not considered to be libraries

As seen in:
https://github.com/Homebrew/brew/blob/master/Library/Homebrew/formula_cellar_checks.rb#L62
    valid_extensions = %w[.a .dylib .framework .jnilib .la .o .so
                          .jar .prl .pm .sh]

When creating a formula for a multi-file Ruby application, you get:
$ brew audit --new-formula app
  * Non-libraries were installed to "/usr/local/opt/app/lib"
    Installing non-libraries to "lib" is discouraged.
    The offending files are:
      /usr/local/opt/app/lib/app.rb

This is correct, we don't consider Ruby files (or Python files or Perl files) to be libraries like this. Install them to libexec or share instead.

Ok so my formula should rename the lib directory of the ruby app and inreplace the loadpath?

That's what I ended up doing.


Pusher Channels already initialized

hello
I want to use pusher-websocket-react-native in my react native project
my project is Quiz-english word game and I want to use pusher to create game between two player
first i create presence channel and this my code on react native and server ,
this is my server code

import { pusher } from "../../../util/lib";
import { user } from "../../../util/user";

export default async function handler(req, res) {
  const { socket_id, channel_name } = req.body;

  const randomString = Math.random().toString(36).slice(2);

  const presenceData = {
    user_id: randomString,
    user_info: { name: `user ${randomString}` },
  };

  try {
    const authResponse = pusher.authorizeChannel(
      socket_id,
      channel_name,
      presenceData
    );
    res.send(authResponse);
  } catch (err) {
    console.error(err);
  }
}

this is my react native code :
import React, {Component, useEffect, useState, user} from 'react';
import {
  ImageBackground,
  StyleSheet,
  Text,
  View,
  Image,
  ActivityIndicator,
  Dimensions,
  TouchableOpacity,
  BackHandler,
} from 'react-native';
import {AnimatedCircularProgress} from 'react-native-circular-progress';
import ParentConnect from '../../HOC/Container';
import {
  Pusher,
  PusherMember,
  PusherChannel,
  PusherEvent,
} from '@pusher/pusher-websocket-react-native';

const ChoosePlayerScreen = (props) => {
  const [members, onChangeMembers] = React.useState([]);

  const pusher = Pusher.getInstance();

  const connect = () => {
    //create pusher connector
    try {
      pusher.init({
        apiKey: '27ba431a698b22a56e47',
        cluster: 'mt1',
        authEndpoint: 'http://<IP_ADDRESS>:3000/api/auth/pusher',
        onSubscriptionSucceeded,
        onEvent,
      });
      pusher.connect();
      pusher.subscribe({
        channelName: 'presence-gamestart',
      });
    } catch (error) {}
  };

  const sendmsg = async (msg) => {
    // await pusher.trigger('zabanbazi', 'my-event', 'hello-client');
  };

  const onEvent = (event) => {
    console.log(`onEvent: ${event}`);
  };

  const onSubscriptionSucceeded = (channelName, data) => {
    console.log(
      `onSubscriptionSucceeded: ${channelName} data: ${JSON.stringify(data)}`,
    );
    const channel = pusher.getChannel(channelName);
    const me = channel.me;
    onChangeMembers([...channel.members.values()]);
    console.log(`Me: ${me}`);
  };

  useEffect(() => {
    // props.makeonline(true);

    connect();
    return () => {
      pusher.unsubscribe({channelName: 'presence-gamestart'});
    };
  }, []);

  return (
    <View style={{flex: 1}}>
      <ImageBackground
        source={require('../../assets/Picture/backChoose.png')}
        style={{
          height: Dimensions.get('window').height,
          width: Dimensions.get('window').width,
        }}>
        <View
          style={{
            width: '34%',
            alignSelf: 'center',
            backgroundColor: '#e6c529',
            padding: 8,
            borderRadius: 80,
            position: 'absolute',
            top: '7%',
          }}>
          <View></View>
          <AnimatedCircularProgress
            size={120}
            width={10}
            fill={0}
            rotation={360}
            style={{
              backgroundColor: '#f6e077',
              borderRadius: 80,
              alignSelf: 'center',
            }}
            tintColor="#c14747"
            backgroundColor="white">
            {(fill) => (
              <Text
                style={{
                  fontFamily: 'tahoma',
                  fontSize: 40,
                  color: 'white',
                  textAlign: 'center',
                  alignSelf: 'center',
                  fontWeight: 'bold',
                }}>
                0
              </Text>
            )}
          </AnimatedCircularProgress>
        </View>
        <View
          style={{
            width: '100%',
            flexDirection: 'column',
            bottom: 55,
            position: 'absolute',
            alignSelf: 'center',
            alignItems: 'center',
            left: 15,
          }}>
          <View style={{flexDirection: 'row'}}>
            <TouchableOpacity
              onPress={() => props.navigation.navigate('SearchPlayer')}
              style={{flex: 1, alignItems: 'flex-end'}}>
              <View style={{flex: 1, alignItems: 'flex-end'}}>
                <Image
                  style={{height: 150, width: 150}}
                  source={require('../../assets/Picture/SearchName.png')}
                />
              </View>
            </TouchableOpacity>
            <TouchableOpacity onPress={() => sendmsg()} style={{flex: 1}}>
              <View style={{flex: 1}}>
                <Image
                  style={{height: 150, width: 150}}
                  source={require('../../assets/Picture/ComputerPlayer.png')}
                />
              </View>
            </TouchableOpacity>
          </View>
          <View>
            <TouchableOpacity
              onPress={() => props.navigation.navigate('Invite')}
              style={{alignItems: 'center'}}>
              <View style={{alignItems: 'center'}}>
                <Image
                  style={{height: 150, width: 250}}
                  source={require('../../assets/Picture/invite.png')}
                />
              </View>
            </TouchableOpacity>
          </View>
        </View>
      </ImageBackground>
    </View>
  );
};

export default ParentConnect(ChoosePlayerScreen);

const styles = StyleSheet.create({});

when i return back to game page I see this error
E:\Project\zabanbazi\app\ZabanBazi\node_modules\react-devtools-core\dist\backend.js:32 Possible Unhandled Promise Rejection (id: 0):
Error: Pusher Channels already initialized.
Error: Pusher Channels already initialized.
    at Object.promiseMethodWrapper [as initialize] (http://localhost:8081/index.bundle?platform=android&dev=true&minify=false:2246:36)
    at Pusher.init (http://localhost:8081/index.bundle?platform=android&dev=true&minify=false:164128:43)
    at connect (http://localhost:8081/index.bundle?platform=android&dev=true&minify=false:221546:16)
    at http://localhost:8081/index.bundle?platform=android&dev=true&minify=false:221585:7
    at commitHookEffectListMount (http://localhost:8081/index.bundle?platform=android&dev=true&minify=false:19632:32)
    at commitPassiveHookEffects (http://localhost:8081/index.bundle?platform=android&dev=true&minify=false:19667:19)
    at Object.invokeGuardedCallbackImpl (http://localhost:8081/index.bundle?platform=android&dev=true&minify=false:9188:16)
    at invokeGuardedCallback (http://localhost:8081/index.bundle?platform=android&dev=true&minify=false:9282:37)
    at flushPassiveEffectsImpl (http://localhost:8081/index.bundle?platform=android&dev=true&minify=false:22011:15)
    at unstable_runWithPriority (http://localhost:8081/index.bundle?platform=android&dev=true&minify=false:47225:18)

As far as I know routing to a new screen does not unmount the current screen.
return () => {
    // check if the channel is unsubscribed here
    pusher.unsubscribe({channelName: 'presence-gamestart'});
};

As far as I know routing to a new screen does not unmount the current screen.
return () => {
    // check if the channel is unsubscribed here
    pusher.unsubscribe({channelName: 'presence-gamestart'});
};

my question is not refer on changing screen
my question is why pusher tell me [Pusher Channels already initialized]

The 1.1.1 version allows for re-initialization does this solve the issue?

closing this as there has been no response since October. If you need further support please contact us at https://support.pusher.com/hc/en-us/requests/new


Optimize kamino RPC calls

Optimize kamino-sdk RPC calls:

add get strategies share data batch fetch method that uses fetchMultiple where possible
refactored a lot of the code to batch fetch where possible
replaced findProgramAddress deprecated method with findProgramAddressSync

Looks good, big change, do we have tests that would catch if anything breaks?

Yep, most of the methods are covered by integration tests, thanks to @silviutroscot! I actually caught one issue and fixed it because of the tests.


wallet/beta.102

Will merge this once I’ve had a chance to update the dapp 👍 Do you know why that node_modules/.yarn-integrity file was suddenly created?

Will merge this once I’ve had a chance to update the dapp 👍 Do you know why that node_modules/.yarn-integrity file was suddenly created?

Recently updated yarn to 1.22.19 likely a new feature (as far as I can tell it tags which system I installed on i.e. apple's arm)


Typescript: how to handle arrays or toMany relations

Hey,
while I was working on an Angular generator I noticed that the current implementation of the typescript interface generator does not take into account toMany relations (or simple arrays as well).
I had a look at the fields property inside resource, however I can't seem to find any difference between single fields and array fields. I hoped that the maxCardinality property would help me, but it seems properly populated only for reference types.
Here is an example of what I mean:
Resource definition
    /**
     * @ORM\Column(type="text", nullable=true)
     * @Groups({"producerRead","userRead"})
     */
    private $name;

    /**
     * @ApiSubresource()
     * @ORM\OneToMany(targetEntity="App\Entity\Product", mappedBy="producer", orphanRemoval=true)
     * @Groups({"producerRead","userRead"})
     */
    private $products;

    /**
     * @ORM\OneToOne(targetEntity="App\Entity\Picture", cascade={"persist", "remove"})
     * @Groups({"producerRead","producerWrite"})
     */
    private $mainPicture;

    /**
     * @var array
     * @Groups({"producerRead","producerWrite"})
     */
    public $test;

Dump of resource.fields (part of id) inside the generate function
     Field {
       name: 'products',
       id: 'http://localhost:8080/api/docs.jsonld#Producer/products',
       range: 'http://localhost:8080/api/docs.jsonld#Product',
       reference: [Resource],
       required: false,
       description: '',
       maxCardinality: null,
       deprecated: false },
     Field {
       name: 'name',
       id: 'http://localhost:8080/api/docs.jsonld#Producer/name',
       range: 'http://www.w3.org/2001/XMLSchema#string',
       reference: null,
       required: false,
       description: '',
       maxCardinality: null,
       deprecated: false },
     Field {
       name: 'mainPicture',
       id: 'http://localhost:8080/api/docs.jsonld#Producer/mainPicture',
       range: 'http://localhost:8080/api/docs.jsonld#Picture',
       reference: [Resource],
       required: false,
       description: '',
       maxCardinality: 1,
       deprecated: false },
     Field {
       name: 'test',
       id: 'http://localhost:8080/api/docs.jsonld#Producer/test',
       range: null,
       reference: null,
       required: false,
       description: '',
       maxCardinality: null,
       deprecated: false },

In the swagger docs the property test is correctly picked up as a string array, however I can't seem to replicate the same thing for the typescript interfaces.
If we look at maxCardinality, it seems it is correct (if we assume null means 'collection') for reference fields (mainPicture is a OnetoOne and products is a ToMany), however this is not the case for name (string) and test  (string array).
I'm asking here because there might be another field that helps me find out if I'm dealing with a collection or not and I'm missing it, but this issue might be related to doc-parser as well.
I'll gladly create a PR for the typescript generator if we find out how to fix this. Thanks!

Upon further inspection, I reached DocumentationNormalizer.php in api-platform/core
https://github.com/api-platform/core/blob/master/src/Hydra/Serializer/DocumentationNormalizer.php#L469
It seems to me that if we change the if condition from
if (null !== $type && !$type->isCollection() && (null !== $className = $type->getClassName()) && $this->resourceClassResolver->isResourceClass($className)) {
            $propertyData['owl:maxCardinality'] = 1;
        }

To
if (null !== $type && !$type->isCollection()) {
            $propertyData['owl:maxCardinality'] = 1;
        }

We should obtain a correct population of the maxCardinality property: null for collections and 1 for scalar values/objects, even if they are primitive types.
If this is the case, we should probably move this issue to the core  repo.


Adding a footer at the bottom of the page

I'd like to give it a shot

sure

I got as far as cloning the directory and creating a new branch but I'm not sure what to do afterwards. I opened the index file in vscode but I'm not sure if there is where the footer should be.

there isnt a footer yet.
u could make a component and place it at the bottom of the container
 <Container className="pawhub">
          <Switch>
            {" "}
            <Route path="/animal/:id">
              {token && <PetInfo token={token} />}
            </Route>
            <Route path="/pets/:type">
              {token && <PetType token={token} />}
            </Route>
            <Route path="/pets">{token && <Pets token={token} />}</Route>
            <Route path="/">
              <Home />
            </Route>
          </Switch>
// insert footer here  <Footer/>
        </Container>
// or here

And then u could create the Footer.js  in the folder layout if u want or its separate folder
and maybe add links in to the footer and (c) redxzeta 2020
react bootstrap docs


Breaks Angular templates

I followed this guide: https://medium.com/lacolaco-blog/enjoyable-webworkers-in-angular-41cfeb0e6519
When I open my app it boots Angular and immediately fails accessing template files (Failed to load failed-foo.component.html, app.com/foo.component.html 404 (Not Found))
Commenting out the new WorkerPlugin line solves this, although of course it fails trying to access the workers. The build always passes successfully with no errors, even with --verbose; and when WorkerPlugin is configured it seems to be building a worker chunk.
Any clue what might be causing this? I don't even know what kind of informative log I can send. Very confusing.

Hmm - are you using the latest version of Angular CLI?  If so, it ships with this plugin included by default. Perhaps two of them is causing the issue?
If not, try updating to the latest Angular CLI. Since they shipped it by default, I can't imagine it would have this issue.


refactor(frontend): simplify bind_columns_from_source

I hereby agree to the terms of the RisingWave Labs, Inc. Contributor License Agreement.
What's changed and what's your intention?
motivation: to make code--
Can review commit by commit, so the correctness might be more easy to verify.

Checklist

[ ] I have written necessary rustdoc comments
[ ] I have added necessary unit tests and integration tests
[ ] I have added test labels as necessary. See details.
[ ] I have added fuzzing tests or opened an issue to track them. (Optional, recommended for new SQL features #7934).
[ ] My PR contains breaking changes. (If it deprecates some features, please create a tracking issue to remove them in the future).
[ ] All checks passed in ./risedev check (or alias, ./risedev c)
[ ] My PR changes performance-critical code. (Please run macro/micro-benchmarks and show the results.)

[ ] My PR contains critical fixes that are necessary to be merged into the latest release. (Please check out the details)

Documentation

[ ] My PR needs documentation updates. (Please use the Release note section below to summarize the impact on users)

Release note
If this PR includes changes that directly affect users or other significant modifications relevant to the community, kindly draft a release note to provide a concise summary of these changes. Please prioritize highlighting the impact these changes will have on users.

Oops

Why nexmark-backwards-compact failed? It should not be related with this. 🤡

For main-cron, only background_ddl recovery test (deterministic simulation) failed, but it seems also to fail in daily pipeline, so I will ignore this..

BTW, Backwards compatibility test failed in PR pipeline, but succeeded in main-cron pipeline...

-   1000	1001	10465998	2015-07-15 00:00:22.005
+   1000 1001 10465998 2015-07-15 00:00:22.005
+   1000 1001 10465998 2015-07-15 00:00:22.005

It seems it's delete not handled correctly.

It seems include ./delete.slt.part is not included..?

-   1000	1001	10465998	2015-07-15 00:00:22.005
+   1000 1001 10465998 2015-07-15 00:00:22.005
+   1000 1001 10465998 2015-07-15 00:00:22.005

It seems it's delete not handled correctly.

Oops, I thought it was all about spacing.
But the logic here does not involve handling delete

I think it's sqllogictest (https://github.com/risinglightdb/sqllogictest-rs/pull/203) or the backwards-compat-tests's problem. But I don't know why only my PR triggered it 🤔

I've reproduced this https://github.com/risingwavelabs/risingwave/pull/14354 🤣


⚠ SkipTheCommericals has degraded performance

In 5e4c4ee, SkipTheCommericals ($STC) experienced degraded performance:

HTTP code: 200
Response time: 9425 ms

Resolved: SkipTheCommericals performance has improved in 7e2ce03.


Added new initializer for Notification.Settings

Added the ability to create a setting with the selected status.
It will help create a mock setting for testing.

@ekamalov thanks for the PR! Notification.Settings is already public, so it doesn't prevent from such single-use helper methods to be declared in your own code. Is setting/mocking the authorisation status is your main use case?

Hi @ekamalov, thanks for opening the PR. Like @andreyz raised, I also think that this could be extended on your side.
The issue I also see is that the Settings initializer is implizitly using the UserNotificationCenter. I am not sure if this would be the right place.


Adjust for new container and testbed network specifics

Adjustments to new container image and testbed network specifics

Out of date.


add PkgCompiler to root env, not package environment

When building a docker image for a project that is also a package, resolve fails on step 4/6, complaining about missing the src/MyPackage.jl file.  I think this is caused by the fact that the base image ONLY contains the project.toml/manifest.toml file and nothing else.  This PR works around this error by adding PkgCompiler to the global environment, rather than to the project environment.  Since we're now only copying out the .so from this image, teh global environment is a throwaway.

Modified the Dockerfile CI tests to test for this scenario. Validated it failed in https://github.com/beacon-biosignals/julia_pod/pull/71


feat: accept abbreviation customization

:tada: This issue has been resolved in version 1.9.0 :tada:
The release is available on:

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


FFMPEG autorotates source images without user control

FFMPEG autorotates images with Orientation EXIF tag. It happens automatically without user control during the first usage of FFMPEG.
In many cases, this does not influence data processing (because of the behavior described below).  We need to have ways to control this behavior.
This behavior can give more issues and unexpected results, especially for data import (RealityCapture as an example)
Note: FFMPEG autorotates images with the Orientation EXIF tag only the first time. All images that are already saved with FFMPEG have removed part of the EXIF tags including the Orientation tag. So it does not autorotate already saved images.
The current behavior in the case of using source images :

Currently we use FFMPEG  for all folders we created with ns-process-data  (all created folders: images. images_2, images_4, images_8). This is normal behavior for image downscaling. For the original size folder (images) that don't require border pixel cropping, we do not expect to use FFMPEG. But we always use it because of the bug described below.
In process_data.py we have bug here .

        # Current code
        num_frames = len(copy_images_list(image_paths, image_dir, verbose))
        # Should be:
        num_frames = len(copy_images_list(image_paths, image_dir, verbose=verbose))

This bug forces to use FFMPEG here with crop_border_pixels=0  in copy_images_list.  This is not expected behavior. BUT this is a "lucky" bug that prevents nerfsudio data processing to be broken :) If we just fix it we can get data inconsistency (different image orientation) between the original and downscaled folders. At the current moment all are consistent because we use FFMPEG with the original image in any case.
3. We need  to fix the bug above and decide how to control autorotation
4. I made several tests but unfortunately don't find any practical way to switch off autorotation in FFMPEG for images (tested in Windows).  Please give me an idea of how to switch autorotation off if anybody have success with this.
5. As a possible option we can control Orientation EXIF tag. We can add a function to remove this tag in copied images. And also  function to check Orientation EXIF tag status. PIL can read EXIF or we can use exiftool utility for this as a subprocess.

Supposedly there is an option for recent ffmpeg -noautorotate -- does that help?

For some reason, I don't see this -noautorotate option in my Windows ffmpeg.
Instead, I see:
-autorotate         automatically insert correct rotate filters

Ok , I see in doc:
-autorotate
Automatically rotate the video according to file metadata. Enabled by default, use -noautorotate to disable it.

Can you try #1261?

(Feel free to reopen if PR fix fails in your case.)


metrics: do not restart proxy any more

We no longer have a global cc proxy systemd service, so do not
try to restart it during metrics system initialisation.
Fixes: #952
Signed-off-by: Graham whaley<EMAIL_ADDRESS>

lgtm

lgtm


[CI] [Cypress] Add E2E tests to Deploy Applications/Filters/Patterns Configuration through Meshery UI

Description
This PR fixes #4826 (partially)
No E2E tests that cover Meshery's Service Mesh Configuration Management functionality (Applications/Filters/Patterns) to Deploy Configuration Changes.

[x] Add generic data-cy attributes for MesheryApplications, Filters, MesheryPatterns & Header components to enable cypress test code reuse for page titles, table grid, table grid rows, File Upload input,  & Deploy ArrowIcon buttons.
[x] Add fixtures /configuration/service-mesh-atterns-samples folder with bookInfoPattern & IstioFilterPattern yaml files named with 8 first characters of commit hash as an attempt to "version" test data files being used.
[x] Add fixtures /configuration/wasm-filters-v0.1.2 folder with http-auth-envoy yaml file (folder named with layer5io/wasm-filters repo latest releaste name to "version" test data file being used).
[x] Add /cypress/integration/e2e/service_mesh_configuration_management_spec.js file where "/configuration/*" E2E tests for Applications, Filters & Patterns BETA Pages (no mocks, requests made from Meshery UI served by Meshery Server itself)
[x] Add configurationTestTemplate function that receives configurationTests array with an object per test in spec file mentioned above to reuse configuration E2E cypress tests defined in it.
[x] Add configurationTests array that defines pseudo-standard testData for filter, pattern & application itemType
[x] Add Deploys ${itemType} test template deploy test that opens Meshery UI through actual browser, navigates to respective page, uploads file, clicks deploy arrow button & ensures deployment is successful.
[x] Test Data for Deploy Filter test with 'wasm-filters-v0.1.2/http-auth-envoy.yaml'
[x] Commented Out Test Data for failing Deploy Pattern test with 'service-mesh-patterns-samples/IstioFilterPattern-commit-b23b219.yaml'
[x] Commented Out Test Data for failing Deploy Application test with 'service-mesh-patterns-samples/bookInfoPattern-commit-5eb2369.yaml'

Notes for Reviewers

I've added integration tests for Filters GET & POST from /api/filter endpoint, still needs some more work but I'd like to receive any feedback about overall approach before moving forward and implementing more tests.
Commented tests will be uncommented until necessary changes are done in necessary places in order for those tests to pass (either Meshery Server and/or UI that causes current “invalid workload definition” and 'rpc error: code = Unknown desc = no matches for kind "EnvoyFilter" in version "networking.istio.io/v1alpha3"\n')

Signed commits

[ X] Yes, I signed my commits.

Codecov Report

Merging #4717 (2887755) into master (a26377a) will decrease coverage by 6.97%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master    #4717      +/-   ##
==========================================
- Coverage   32.83%   25.86%   -6.98%
==========================================
  Files          61       61
  Lines        5107     5107
==========================================
- Hits         1677     1321     -356
- Misses       2991     3457     +466
+ Partials      439      329     -110

Flag
Coverage Δ

gointegrationtests
?

unittests
25.86% <ø> (ø)

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

Impacted Files
Coverage Δ

mesheryctl/internal/cli/root/system/start.go
1.11% <0.00%> (-58.52%)
:arrow_down:

mesheryctl/internal/cli/root/system/restart.go
2.50% <0.00%> (-47.50%)
:arrow_down:

mesheryctl/internal/cli/root/system/status.go
0.00% <0.00%> (-47.44%)
:arrow_down:

mesheryctl/internal/cli/root/system/update.go
1.05% <0.00%> (-34.74%)
:arrow_down:

mesheryctl/internal/cli/root/system/stop.go
1.78% <0.00%> (-23.22%)
:arrow_down:

mesheryctl/internal/cli/root/system/check.go
1.39% <0.00%> (-22.38%)
:arrow_down:

mesheryctl/internal/cli/root/system/logs.go
3.29% <0.00%> (-20.88%)
:arrow_down:

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 3b3186a...2887755. Read the comment docs.

@leecalcote @ramrodo @MarioArriaga92  Considering the cypress intergration tests, should it run without server?
because server is one that loads capabilities, actually uploads files and perform operations. Although we can mock server but the UI is highly dependent on the server for all the things it shows. e.g. Patterns/filters/applications should not open without logging in with providers/none-provider.
currently, We are able to open patterns/filters/application endpoint in the UI without the servers, that is a bug?

@Abhishek-kumar09 I think we can create a branch in Meshery/Meshery repo so multiple contributers can work on related changes, can you guys confirm this is the usual approach? @leecalcote @navendu-pottekkat @utkarsh-pro @DelusionalOptimist?

@Abhishek-kumar09  @leecalcote @navendu-pottekkat @utkarsh-pro @DelusionalOptimist Reason for above suggestion is that while #4582's scope is just for "/configuration" frontend route the actual test scope (Applications, Patterns & Filters) might be as big enough for two or more contributors to collaborate on and multiple PRs might make sense in order to tackle it. Especially if both "integration" and "e2e" tests are to be considered for each page along with CRUD for each use case

Actually, let me discuss with @Abhishek-kumar09 about cypress effort strategy. We should be able to reduce scenarios to just the most important ones but need to go over testing spreadsheet & some brainstorming

@MarioArriaga92 Creating an "epic" issue with a bunch of "child" issues under it would be the way to go.
Merging each PR can close the child issues and the epic issue can stay open. This makes it easy to track progress of each area as well as the overall goal of writing integration tests.
We generally don't branch out unless it is absolutely necessary. And since these integration tests wouldn't affect any functionality, we can keep merging to master.

@MarioArriaga92 Great work! No comments so far. You're mocking the responses well and describing/adding good comments in some tests. The GET & POST tests look good to me.

@leecalcote @ramrodo @MarioArriaga92 Considering the cypress intergration tests, should it run without server? because server is one that loads capabilities, actually uploads files and perform operations. Although we can mock server but the UI is highly dependent on the server for all the things it shows. e.g. Patterns/filters/applications should not open without logging in with providers/none-provider.

@Abhishek-kumar09 thanks for pointing it out but the Integration tests should be run without running the backend/server. If we want to test both and the whole function as a user, we need to create E2E tests. This article of Static vs Unit vs Integration vs E2E Testing for Frontend Apps explains the different types of tests.

@MarioArriaga92 Probably we can merge this PR and get things done in parts. The changes and tests looks good and maybe you can open it for merging?

@leecalcote @ramrodo @Abhishek-kumar09 @navendu-pottekkat
In order to account for recent discussions & general decision to choose a more broad e2e testing approach, I've repurposed this PR (Just updated the Description) to solve new issue opened (#4826 ) which scopes Deploying Configuration changes on all 3 pages.
Approach for test code in /cypress/integration/e2e/service_mesh_configuration_management_spec.js is basically create a testTemplate function & pass configurationTests array in which each object represents an area to test. Further tests can/should be added inside this testTemplate function defined in this file
Subsequent child issues based on umbrella issue #4582 will be created for Editing, Deleting & any other critical E2E workflow (upload file > Edit > Deploy scenario, etc.) as we agree its fit.
Still working on fixing some 500's being thrown on both Applications & Patterns as well as adding a couple of missing assertions against Meshery UI to check deployment is successful (besides checking POST /api/{itemType}/deploy endpoint responses are '200' which is already scripted)

🚀 Preview for commit 14e21a5a021b875c683ddae027470093b8eaa7ae at: https://61c60a96b5f4a27f946c7d5c--meshery-docs-preview.netlify.app

Uh-oh, you might need to sync your local fork, so that only files you've changed are included in this PR. Instructions on syncing your fork - https://github.com/meshery/meshery/blob/master/CONTRIBUTING-gitflow.md

🚀 Preview for commit b6600deb475d3ad1471d5b45fa5f227f0225133c at: https://61c61380fd45e08cfff68766--meshery-docs-preview.netlify.app

@leecalcote I did follow steps to fetch upstream, merge upstream/master to fork's master & rebased ci/marrioarriaga92/4582 branch onto master.. multiple times between pushing & pulling from local lol

I'll look at instructions more closely np @leecalcote

🚀 Preview for commit 0f2eae4a92fa108c3f3029e4c3d7962e51fc6cc9 at: https://61c62420f3060d954228c6a6--meshery-docs-preview.netlify.app

I had accidentally did a merge instead of rebase so I had to push --force to undo merge

Pattern deploy has the problems...

Try the simpler pattern like an application pattern.

@MarioArriaga92 any chance that you might merge the completed tests, so that the project can start benefiting now without awaiting finalization of all tests?

beat me to it @leecalcote

30 seconds is an impressive margin all considering. 🙂

Thanks @leecalcote, @warunicorn19 wasn't aware that "warunicorn19" and "Aditya Chatterjee" was the same person lol


FMODStudioCache causing deserialisation exceptions when Resource.LoadAll() is used in a build.

Because the FMODStudioCache uses editor-only classes, it might cause errors if it is still present in a build, when unity tries to load and deserialize it.
This could happen when a script uses Resources.LoadAll("").
A solution to this problem would be to move the FMOD studiocache into an Editor folder.
So when looking at FMODUnity.EventManager in EventManager.cs changing the path on line 17 to:
const string CacheAssetFullName = "Assets/Plugins/FMOD/Editor/Resources/" + CacheAssetName + ".asset";
would fix the issue.
This will result in the asset not being included in a build.

Thank you very much for the input, I have raised a task to fix this in an upcoming release.


Add conclude event and allow multiple calls to conclude

I've added a simple Conclude Event that we can listen for in the app.
I've also changed Conclude so that if it's called after the game is expired nothing happens. I'm not sure if this is the best approach but it was a quick way for now to work on the conclusion workflow. Perhaps this should be handled in a ConcludeAndWithdraw method?

I'm not completely sure about what the behaviour of conclude should be. It seems like maybe you should expect a revert if you call conclude on a channel that's already concluded.
We should definitely have a concludeAndWithdraw method - and it seems somehow nice for conclude and withdraw to continue with the withdraw even if the conclude has been done already (that way you avoid a race condition when both parties are trying to withdraw at the same time). It might be worth creating some internal _conclude and _withdraw functions to help with this.

I've added a simple concludeAndWithdraw method that concludes the game if running and then withdraws


Implement service: queue

Implement a service which could be used for queue-related tasks:

sending jobs to a queue
receiving jobs from a queue and dispatching them to registered workers

Ideally, the backend would be configurable, but at the very least we should support a Redis backend.

Some progress here: https://github.com/strvcom/atlas.js/compare/package/queue


Add linting and security libraries

A few changes here:

Add rubocop, a ruby linting library
Add rails_best_practices, a rails linting library
Add brakeman, a static security code checker; add a thing to our CI configs that will fail builds if it finds vulnerabilities
Add bundler-audit, a vulnerability checker; add a thing to our CI configs that will fail builds if it finds vulnerabilities

Before I :shipit: I'll make it a point to set up rubocop configs and turn off settings we don't use, and to do a dry run of rails best practices and rubocop so we can start tidying up this codebase.
cc @curtismorales

Two code changes here to get Brakeman to pass CI:

Rewrote the single-rule API call to avoid constantize, which has a RCE risk
Eliminated unnecessary secret_key in secrets.rb, unnecessary since this is a stateless API

Also ran a bundle update rails to get bundler-audit to chill. Wound up ignoring a security flaw in the mail gem, but since there's no mailers in here it should be cool.
@curtismorales I'll do the low-hanging fruit of rubocop and rails_best_practices in a separate PR, since just installing these libraries took a turn. Probably best to keep these things ISO'd.

Thanks for putting this together! I'll test again locally just to verify, then merge


Use the upgrade tests in the specific commit 44aebb6 for serving repo

Proposed Changes

This PR pins to a specific commit ID 44aebb6 for serving repo to run the upgrade tests, because release 0.19 uses an obsolete unstable upgrade test.

/test pull-knative-operator-integration-tests


Game pauses when EventBroadcastingQueue is full

Here's what I did:
-Added a function TimeControlStop() that will pause the game in GameEnvironmentServer, exposed in IEnvironmentServer.
-Changed Add() to return a boolean; true if the event was added to the queue without problem else false (the queue is full).

I merged the current development branch back so this PR is mergable.
For me it looks like this should work, but I was not able to get the queue up (I even limited it to 5, still only reached a max of 1...) so I could not really test it.


.server for arbitrary modules

It would be cool if any module could use the .server file-naming scheme to signify "use this module in SSR".

Yea I really like these .server suffixes, which I borrowed from React's Server Component design.
In your mind, how would a .server module behave differently from a non-.server module?

Are you asking what my use case is? I would use it mostly for stubs (eg: for client-only React hooks).

I see.
So far I didn't stumble upon a situation where I needed this (React already ignores hooks when doing SSR).

I would

Let's see if this turns into a "I need" :-).

If I get the request here right, I'd like to have components fetch their own data during SSR, I think ^^

@CanRau This will soon be supported by view frameworks. For example React Suspense, although I'm not sure yet how hydration would work with suspense.

Yeah true 😃👌 looking forward to all the new exciting features 😍


Update settings.gradle

@Lucia-jay Please sign the Contributor License Agreement!
Click here to manually synchronize the status of this Pull Request.
See the FAQ for frequently asked questions.

Hi @Lucia-jay .  I don't believe this change is required to build the project.  I'd like to keep this guide basic and similar to the gradle files provided by start.spring.io.  If there is an issue that requires this change please submit an issue for consideration.  Thanks!


Uri.parse() loses information for leading ./

Uri.parse("./foo").toString() returns "foo". While it's true that these are considered the same URL, in practice many systems use the leading ./ to distinguish a relative URL from a URL that should be looked up on some sort of global load path. Also, in general, I'd expect Uri.parse(X).toString() to return X for any valid URL.
What's worse, there doesn't seem to be any way to represent a Uri object with path ./foo. This means that any application that cares about this distinction must completely avoid using this class, which is a huge pain.

The Uri class is normalizing, so it does indeed remove the unnecessary leading "./" from a relative path.
The two relative URI references ./foo and foo are equivalent as URIs. URIs are not an unstructured storage for strings, so if foo and ./foo are going to be handled differently, they are not URIs and should probably be kept as strings until the distinction has been made. A URI is not just an abstract "path" implementation.
You don't have to avoid using URIs, but you do have to avoid using URIs for something that semantically aren't actually URIs.
Being normalizing is why the == operation works. Otherwise you would have to manually normalize before comparing, which is definitely a possibility, but also a very breaking change.

I understand that ./foo and foo are considered normalization-equivalent. Similarly, the Unix path ./foo refers to the same file as the path foo. But in practice these are meaningfully distinct—some systems will treat the path ./foo but not foo as an invocation, and some systems will subject the URL foo to global resolution but not ./foo. Always normalizing is a reasonable default, but refusing to let this class work with those systems entirely is user-hostile.
Even the Uri class itself says it's reasonable to use it to represent non-normalized URLs: it has a normalizePath() method that says "the default implementation of Uri always normalizes paths". Because the class isn't extensible, it's not practical to create an implementation other than the default implementation, so we should extend it to support this use-case.
I propose we add a {bool normalize: false} flag to new Uri() and a static Uri.parseNonNormalized() method that doesn't normalize. I also propose that Uri.== call normalizePath() before comparing equality, and that normalizePath() eagerly exit for URLs that are auto-normalized.

If we change behavior of the Uri class in the Dart 2 library update, then it's likely that it will be become non-normalizing by default.

Sorry, I mistyped above; I meant to write {bool normalize: true}. Normalizing by default is great, I just want a way to opt out.


fullDelete API with HTTPS protocol causes unreadable Infotons in massive ingests

// Ok, this is kind of exciting; it is the first issue Data Consistency Crawler found for us 👍
We witnessed in some cases, multiple values ("d","o") for the Type system field:
Inconsistency found: Duplicated system fields! field [type] has too many values [d,o] for
command in location [persist_topic, partition: 19, offset: 164542945].
Original command: WriteCommand(ObjectInfoton([path-of-an-infoton],[dc-id],None,[lastModified],None,,Some(https)),None,None)

Which was preceded by a DeletePathCommand on the same path with same lastModified.
This was reproducedable in "pe" using:
seq 2048 | parallel -j32 'curl -s localhost:9000/_in?format=ntriples --data-binary "
<https://exmaple.org/reuters-news-tag-{}> <cmwell://meta/sys#fullDelete> \"true\" ." '

Findings:

5 of those 2048 ingested Infotons were 404 after that ingest, (i.e. "cas none" in x-info).
All others became "Skeletons" (i.e. ObjectInfotons with no data fields).
Expected results should be to do nothing - deleting non-existing Infotons is only {"success":true} as vacuous truth...

How to fix:

The problem is with Protocol system field implementation: in case it differs from default protocol (e.g. "https", given the default of "http") it will yield an ObjectInfoton even in case there are no data fields. And when the ingest is massive (even a little bit) - the two commands (DeletedInfoton + ObjectInfoton) collide into same millisecond in WS, which causes BG to write them into same uuid in Cassandra.
This is indeed an issue in BG as well, but

it can be prevented in WS altogether, and
it can be addressed during BG Simplification tasks next Q.

@Ivan-Shestakov please check