Bad generated mesh for lego

Dear authors,
Thanks a lot for your great work! I have tried to use the lego data to train and the results seems really bad as the attached image shows, do you have any idea to debug it? The training data and conf file is downloaded from issue #9 .

Thank you very much!
Best,
Yuchen

@yuchenrao Maybe you can solve this by increasing the mesh resolution

@yuchenrao Maybe you can solve this by increasing the mesh resolution

Could you please tell me what resolution is used when evaluating mesh in the paper?


Event synchronization

The backend currently loads all events at once using a queryFilter call. This will break after a few hundred events exist for a topic. I solved this problem in zkopru by starting at the block where the contract was created (or the block of the latest event in the DB) and then loading events for a batch of 1000 blocks, then ingesting, then repeat. Once I reach the head block I start a subscription listener. You can see it here. I think we should use a similar strategy for this backend.

@vimwitch can we close this issue? it seems already completed.

Won't fix due to sunsetting the project.


Make JFPJC ingestion pipeline BRAM usage FPGA agnostic

Some basic notes:

More flexibility will be achieved if - instead of thinking of having a set of frontbuffers and backbuffers - we think of having a set of NUM_BUF continuous buffers.
An entire line needs to be stored at once, so a minimum of IMAGE_WIDTH * 8 bytes are needed for storage per line buffer.
In the worst-case scenario, MCU_SIZE * 2 * ceil(MCU_WIDTH / NUM_BUF) bytes are needed in each buffer.  They don't need to be dual-port.


How can I mock setter for a property?

syntax like whenever(instance.property).doReturn(TEST_RESULT) works for getters only

Ok, seems I got it. Leave the answer, just in case
doAnswer {
        // invocation on any interaction with setter
        }.whenever(instance).property = any()

This is explained just fine in the wiki.

This is explained just fine in the wiki.

That doesn't answer the question at all

Ok, seems I got it. Leave the answer, just in case
doAnswer {
        // invocation on any interaction with setter
        }.whenever(instance).property = any()

I didn't get your solution at the first time, so I add example for those who like me
// Mock android View
val view = mock<View>()

// Stub `setVisibility` of `View` for `any()` parameter is given for parameter
doNothing().whenever(view).visibility = any()

// The stubbed `doNothing()` executed for statement below
view.visibility = View.GONE


Last step seems forced to only macOS

PS D:\_CODE\_JS\JS 2022\popeye> yarn electron-build
yarn run v1.22.19
$ yarn electron-build-mac
$ yarn build && cp ./public/entitlements.mac.plist ./dist && electron-builder -m -c.extraMetadata.main=dist/electron.js
$ vite build  --base=./
vite v3.0.4 building for production...
✓ 11422 modules transformed.
dist/index.html                  0.74 KiB
dist/assets/index.6d606818.css   0.01 KiB / gzip: 0.03 KiB
dist/assets/index.efef8aa3.js    1185.48 KiB / gzip: 339.21 KiB

(!) Some chunks are larger than 500 KiB after minification. Consider:
- Using dynamic import() to code-split the application
- Use build.rollupOptions.output.manualChunks to improve chunking: https://rollupjs.org/guide/en/#outputmanualchunks
- Adjust chunk size limit for this warning via build.chunkSizeWarningLimit.
  • electron-builder  version=23.1.0 os=10.0.19044
  • loaded configuration  file=package.json ("build" field)
  • description is missed in the package.json  appPackageFile=D:\_CODE\_JS\JS 2022\popeye\package.json
  • author is missed in the package.json  appPackageFile=D:\_CODE\_JS\JS 2022\popeye\package.json
  • writing effective config  file=dist\builder-effective-config.yaml
  ⨯ Build for macOS is supported only on macOS, please see https://electron.build/multi-platform-build
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

can you try yarn electron-build-win
https://github.com/thomasgeissl/popeye/blob/master/package.json#L15

it compiled.
It creates that exe:
D:_CODE_JS\JS 2022\popeye\dist\win-unpacked\popeye.exe
But the cam image is not appearing.
should I must run the other steps / PowerShell windows be opened too?
Or just to run that exe?
--
I tried to run
yarn dev #to start the frontend dev process

the exe and it's the same.

--
If I run on two different PowerShell windows:
yarn dev #to start the frontend dev process
yarn electron-dev #to start the electron dev process

It works.
--
The compilation log:
PS D:\_CODE\_JS\JS 2022\popeye> yarn electron-build-win
yarn run v1.22.19
$ yarn build && electron-builder -w -c.extraMetadata.main=dist/electron.js
$ vite build  --base=./
vite v3.0.4 building for production...
✓ 11422 modules transformed.
dist/index.html                  0.74 KiB
dist/assets/index.6d606818.css   0.01 KiB / gzip: 0.03 KiB
dist/assets/index.efef8aa3.js    1185.48 KiB / gzip: 339.21 KiB

(!) Some chunks are larger than 500 KiB after minification. Consider:
- Using dynamic import() to code-split the application
- Use build.rollupOptions.output.manualChunks to improve chunking: https://rollupjs.org/guide/en/#outputmanualchunks
- Adjust chunk size limit for this warning via build.chunkSizeWarningLimit.
  • electron-builder  version=23.1.0 os=10.0.19044
  • loaded configuration  file=package.json ("build" field)
  • description is missed in the package.json  appPackageFile=D:\_CODE\_JS\JS 2022\popeye\package.json
  • author is missed in the package.json  appPackageFile=D:\_CODE\_JS\JS 2022\popeye\package.json
  • writing effective config  file=dist\builder-effective-config.yaml
  • packaging       platform=win32 arch=x64 electron=19.0.10 appOutDir=dist\win-unpacked
  • downloading     url=https://github.com/electron/electron/releases/download/v19.0.10/electron-v19.0.10-win32-x64.zip size=88 MB parts=8
  • downloaded      url=https://github.com/electron/electron/releases/download/v19.0.10/electron-v19.0.10-win32-x64.zip duration=11.21s
  • default Electron icon is used  reason=application icon is not set
  • downloading     url=https://github.com/electron-userland/electron-builder-binaries/releases/download/winCodeSign-2.6.0/winCodeSign-<IP_ADDRESS>z size=5.6 MB parts=1
  • downloaded      url=https://github.com/electron-userland/electron-builder-binaries/releases/download/winCodeSign-2.6.0/winCodeSign-<IP_ADDRESS>z duration=3.859s
  • building        target=nsis file=dist\popeye Setup 0.0.0.exe archs=x64 oneClick=true perMachine=false
  • downloading     url=https://github.com/electron-userland/electron-builder-binaries/releases/download/nsis-<IP_ADDRESS>/nsis-<IP_ADDRESS>.7z size=1.3 MB parts=1
  • downloaded      url=https://github.com/electron-userland/electron-builder-binaries/releases/download/nsis-<IP_ADDRESS>/nsis-<IP_ADDRESS>.7z duration=1.419s
  • downloading     url=https://github.com/electron-userland/electron-builder-binaries/releases/download/nsis-resources-3.4.1/nsis-resources-<IP_ADDRESS>z size=731 kB parts=1
  • downloaded      url=https://github.com/electron-userland/electron-builder-binaries/releases/download/nsis-resources-3.4.1/nsis-resources-<IP_ADDRESS>z duration=1.321s
  • building block map  blockMapFile=dist\popeye Setup 0.0.0.exe.blockmap
Done in 100.56s.

yarn dev #to start the frontend dev process
yarn electron-dev #to start the electron dev process

these are the steps for starting the dev process. i havent fixed it to only execute one command.
maybe there is an issue with permissions. or i fucked it up when i tried to integrate the device chooser.
can you try removing the videoConstraints in MPose and MHands. maybe that fixes it, it should use then the default camera.
i will have a look later.

https://github.com/thomasgeissl/ofxPopeye/commit/6ad2975190ea9f26e1e66b2855647794c2dbbdcb#commitcomment-79984339

i just tested with an external camera and it seems to work.
the only strange thing i encountered was that the image is not updating when no pose is recognized. if the camera is not user facing it stays white. i guess the overlay with the drawn landmarks only gets updated on change.


GPL-930 Housekeeping - Legacy data with plate barcodes and rna_id with trailing whitespaces

Describe the Housekeeping
We have some samples from last year where the rna_id and plate barcode are starting with a whitespace:
``
select * from lighthouse_sample where rna_id like ' %'
We would like to update the databases that have this legacy data:

[ ] Mongodb
[ ] mlwh
[ ] dart

**Blocking issues**
Describe any other issues or tickets that may be blocking this change.

**Additional context**

Mail on March 8th, 16:30

Dealt with as part of https://github.com/sanger/crawler/issues/267


Clique - add warning to not use in production

We don't recommend Clique for use in production networks - see https://besu.hyperledger.org/en/stable/HowTo/Configure/Consensus-Protocols/Clique/#migrate-from-clique-to-another-consensus-protocol
Add a warning to besu logs when using clique to say
"We recommend Clique for use in development and test networks only. If you are running in production, please use QBFT."

Decided to leave as is.


Add Ruby 2.4 to CI

Ruby 2.4 support is coming with new versions of the grpc, google-protobuf, and google-gax gems. Add Ruby 2.4  to the CI environments when this happens.

Right now we have configured the library with 4 nodes on CircleCI. Ruby 2.4 would require a 5th node. However, we may want to rewrite the build script so that we can deal with an arbitrary number of CircleCI nodes, and an arbitrary number of Ruby versions.

See https://circleci.com/docs/parallel-manual-setup/#env-splitting

We can't add Ruby 2.4 to the build just yet. We have a development dependency on Rails 4, and unfortunately Rails 4 won't support Ruby 2.4 until Rails 4.2.8 is released.
We may also have to unpin rubocop in order to support Ruby 2.4. So this change may end up being larger than we had hoped.

Rails 4.2.8 landed on Feb 21.
I've been able to run test, doctest, and rubocop across all libraries on Ruby 2.4.0, so I think we're okay without having to pin rubocop for now. Rainbow 2.1.0 is giving a Ruby 2.4 warning, but it's not fatal. I haven't tried acceptance tests yet.

Yeah, I was originally thinking that we would have to upgrade to Rake 12, since it ships with Ruby 2.4, but this doesn't seem to be a problem as long as we bundle exec all the build calls. I've run the full build on Ruby 2.4 locally, including acceptance tests. But I would still like to update the build to use an arbitrary number of CircleCI nodes.
We do need to stay on the technology treadmill though, I don't like depending on non-current versions of other libraries, even if it is only for development.


Add abstract web controller class

Within this PR you can find the AbstractWebController (as used in SHOGun) to provide the getModelMapSuccess() and getModelMapError() methods.

This is a must, thank you, merging!


Add additional tests for admin-client

Description
As a follow-up of https://github.com/keycloak/keycloak/issues/31869, we need to add more tests for the admin-client from this package of keycloak repository to this package of keycloak-client repository.
With #36, AdminClientTest, RealmTest, RealmRolesTest, and ClientTest were already added.
The idea is to add the most important test classes to cover the most important use-cases and the CRUD operations of the basic admin objects.
What tests to add
maybe UsersTest and UserTest
also some tests from authentication package: https://github.com/keycloak/keycloak/tree/main/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/admin/authentication
the client package for client scopes, sessions, client roles: https://github.com/keycloak/keycloak/tree/main/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/admin/client (edited)
maybe the GroupTest
Discussion
No response
Motivation
No response
Details
No response
### Tasks
- [ ] https://github.com/keycloak/keycloak-client/issues/41
- [ ] https://github.com/keycloak/keycloak-client/issues/42
- [ ] https://github.com/keycloak/keycloak-client/issues/43
- [ ] https://github.com/keycloak/keycloak-client/issues/44
- [ ] https://github.com/keycloak/keycloak-client/issues/58

Closing as all the subtasks were finished.
@graziang Thanks for the great work!


[Bug] Compile Audit-SDK and report TestNGException

What happened
When I use "mvn clean package install" to compile the project, I find that the Audit-SDK module reports TestNGException,
For details, see:
audit-sdk.error.txt
What you expected to happen
no exception report
How to reproduce
use "mvn clean package install" to compile the project
Environment
windows
InLong version
master
InLong Component
Other for not specified component
Are you willing to submit PR?

[ ] Yes, I am willing to submit a PR!

Code of Conduct

[X] I agree to follow this project's Code of Conduct

I fix it

ok, @doleyzi


Icon request: Farmad

URL for the brand / site / app
https://farmad.be
Logo resources for the icon
https://www.farmad.be/wp-content/themes/typografics/dist/assets/images/logo_farmad.svg
Anything else?

It's in dutch, but basically it is asking for the 2FA TOTP code.
Confirmation

[X] I have read and followed the issue guidelines.

Here you go!
https://github.com/aegis-icons/aegis-icons/blob/master/SVG/Farmad.svg

:question: How to add icon(s) to Aegis?
:star: Support this project by giving a star! Just adding like to this comment is also appreciated.


[feat] adding typescript to the package

Add : Typings for typecript support whithout changing original files
Test : Passes all 138 test cases with mocha
Note : only added spport for using this package in typescript if required changes can be done each changes has been in [filename].d.ts

Thanks for the contribution.
I've been hesitant to add typescript support so far (for reasons discussed in other threads), but I think I'd be happy to merge this since it doesn't try to solve the tricky problem of type safety with OCPP-specific calls.
Would you have time to label the private class members first? Any property or method beginning with a _ ought to be labelled as private. If you don't have time, let me know and I'll find time to do it at some point.
Thanks again.

thanks for the consideration, i will push the update today itself after adding private access identifier to all data-members which starts with _

Hi @mikuso, I have added labeling of access identifiers to all class member starts with '_' as required either private or protected as needed the server passes all tests with mocha. Please consider merging this.
Thanks once again, and thanks to Sunday national holiday in 'India' for the time.

Thanks for the contribution. Version 2.1.0 now published in npm.


chore: modify the registeruser usecase to comply with the dip principle

Hey Harvic, first of all, amazing template man, really appreciate all the time you took to develop nodetskeleton, all of the *-tsk libraries are really time saving.
Just made some tiny adjustments on the registeruser use case to comply with the dependency inversion principle, maybe a little overkill, don't know if its 100% correct or if it is even useful.
Thanks again man.

Hi @PedroMiotti, first of all, thank you very much for your interest in this hobby project and thank you for taking the time and the intention to contribute to improve this project.
As for your proposal, I like it, it is a very good practice to decouple the core of an application from external libraries and packages, especially if these dependencies implement some communication protocol behind the scenes, however there are certain dependencies (packages and libraries) in which the inversion of control through the architecture of ports and adapters is not a good practice or at least it is not the best way to do it because you could have many contracts injected to a use case unit and this would make it impractical and in the long term it could become complicated to manage these dependencies without mentioning the amount of mocks that you would have to implement in the tests, and more if they are libraries and packages of code units that compute bytes without the consumption of external services that imply the use of some communication protocol.
Therefore for the intention you have in my humble opinion I would recommend the use of a less traumatic abstraction pattern that brings practicality, agility, mental health, less complexity and better handling of those contracts, that ideal pattern in this particular case, would be the facade pattern.
Why the facade pattern and not an adapter?

It fulfills the purpose of decoupling by not having a dependency scattered all over your application layer and adapters.
It brings agility to the development of your tests without the need to implement a large number of mocks.
You can handle it in your application layer as part of the shared utilities as a concrete entity that implements an interface (your contract) and, obviously, our capital sin, that library or package that does the heavy lifting for us.
If tomorrow you need to change that package or library, you only need to touch one unit of code, and the same if it were an adapter, however the management of the latter becomes more complicated in the long run for the reasons I have already explained.

Finally, when I have to make a decision like this, I check if my dependency uses or not the consumption of external services, different from the language's own APIs such as access to services of the computing machine such as Date and Time, Telemetry, processes, among other resources provided naturally by the language.
What do you think about it?
Remember that "the sophisticated is the enemy of the simple".
I look forward to your comments because I learn every day.
Greetings!

It makes total sense !!! Thanks for taking the time to explain, learned so much just by reading your comment.
When you say, to use the facade pattern, you mean a facade class that imports all the external dependencies ?
For example :
import { DateTime } from "luxon";
import { v4 } from "uuid";

export class DependencyFacade implements IProvider{
  getDateNow(): string {
    return DateTime.local().toISO();
  }

  generateUUID(): string {
    return v4();
  }
}

... something like this ??
And also, if its not to much to ask (please don't feel obligated to respond, i know it will take some time). I have been having trouble on how to handle database errors (like Error: ER_NO_SUCH_TABLE: Table 'ownstoretest.usercd' doesn't exist for example ),  i would like to handle the error on the adapter/provider layer, this is what i am currently doing :
login(user: UserLoginDto): Promise<User> {
  return UserModel.login(user)
    .then((user) => {
      return user
    }).catch((e) => {
      throw new ApplicationError(
          e.message,
          e.code || applicationStatus.INTERNAL_ERROR,
          JSON.stringify(e),
      );
  });
}

if there is an error, the model rejects the promise. When i throw the applicationError shouldn't pass to the error handling middleware ? Instead it continues to the usecase (don't feel like it would be the best practice to handle a database like error on the application layer).
Appreciate all the help @harvic3,  and again please don´t fell obligated to respond, i know i already abused  😀    .
Looking forward to hearing from you, have a good one !

Hi @PedroMiotti, when I mentioned a facade pattern I meant something like this, because we can't mix things up, remember the single responsibility principle (SRP).
Now why with a contract?, because you can't use that unit of code inside the domain layer directly, you must inject it by constructor or by method based on your domain contract (utilityContracts), but in the application layer or adapters layer there is no problem to use it directly.

I will upload the two examples (DateTimeUtils and GuidUtils) in the next commit in case you want to review the implementation and make your contributions and improvements if necessary.
Regarding the error handling of the adapter layer (providers and repositories, even the application layer) you must take into account that a common and wild user does not care about a message of the type you mention in the example, the user is interested in a message like "Oh sorry, something went wrong" even mentioning the action that the user was trying to execute, and the error must be sent somehow to a centralized error log, either a repository or a system like Sentry or Loggly to handle that technical information internally.
Now, a Throw is an action that cuts the flow of a request when it is launched and this will end up in the error handler of your application, so if you want to avoid this, then you must give a different handling to the error control in the flow of a request, for example you can do the following:
  // Adapter unit
  async login(user: UserLoginDto): Promise<User> {
    return UserModel.login(user)
      .then((user) => {
        return user;
      })
      .catch((error) => {
        Promise.resolve(logProvider.log("Error message", error));
        return Promise.reject(
          this.resources.get(this.resourceKeys.INVALID_USER_OR_PASSWORD),
          this.applicationStatusCode.INTERNAL_ERROR,
        );
      });
  }

And in the Application layer, into execute method of your useCase something like:
// Into execute method of your useCase
    const user = await this.authProvider.login(loginDto).catch((err) => {
      console.log("Do something with this error, for example send a Log centralized system", err);
      return null;
    });
    if (!user) {
      result.setError(
        this.resources.get(this.resourceKeys.SOMETHING_WENT_WRONG),
        this.applicationStatus.INTERNAL_ERROR,
      );
      // Manage error through of a Throw or return result
      // In this case the error will be handled by the error handler
      this.handleResultError(result);
      // In this case the error will be handled by the response strategy
      return result;
    }
    result.setData(message, this.applicationStatus.SUCCESS);
    return result;

Let me know if this resolves your concerns.
Greetings!!!

Hey @harvic3, very nice solution, its much cleaner than what i did before.
Regarding the error handling, you are completely right, the user does not care about the database error. Created a logger and now the flow of the application its much better.
Thank you very much for all your help, and the work you put into this project.
Have a nice one !!


Opinionated fork

Hello,
First, cheers on such a great project! I have learned a ton just from reading the terraform structure y'all have created.
I have created a customized fork for my own needs. I want to make sure I do everything on the up and up licensing wise. I believe the main requirement is to keep your original Licence.md at the root of my repository, and maintain any copyright notices that you have (I'm not sure what these would be, I haven't come across any yet).
Additionally, I have given attribution at the top of my README, as I am very appreciative of the work y'all have done with this project.
Am I missing anything else?
Thanks!

Note IANAL, but I think that should cover it! That's awesome too, we'd love to check it out if you have a link.

I think this is it https://github.com/likwid/layercake

I might back my modifications out and just use stack, but customize my
module imports, but I wanted to get a handle on the structure.
I plan to use consul and nomad instead of ECS, as I have set that up
previously.
Yep Achille, that is the correct link! Thanks again for all y'alls hard
work on this, it's really great.
On Fri, Jul 1, 2016 at 2:01 AM Achille<EMAIL_ADDRESS>wrote:

I think this is it https://github.com/likwid/layercake
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/segmentio/stack/issues/31#issuecomment-229870390, or mute
the thread
https://github.com/notifications/unsubscribe/AAf8jye8YI3623E5NDYo_S3l4ChWcNJ3ks5qRLtNgaJpZM4JCvyQ
.


Improve the docs on https://kubevela.io/docs/contributor/code-contribute/

Move kustomize binary to your KubeVela repo folder the repo is what you clone using git clone git@github.com:kubevela/kubevela.git which is mentioned below in the doc. And also have to create the bin directory in the repo folder after cloning if you have not built it before

I would like to work on this


Linear Gradient not working on IOS

The linear gradient is not woking on IOS. It's only shows one color and it's not even close to the gradient I want. On android it's showing the right colors.
react: 16.0.0
react-native: 0.50.4
react-native-linear-gradient: ^2.3.0
IOS:

Android:

Kind regards,
gwesseling

@gwesseling For me it works on ios but on Android I get Native component for BVLinearGradient does not exist. I've done  react-native link also manually added on android how it says. How did you make it work on Android?

@muresanandrei I used react-native link for linking the gradient. You could try to unlink it an relink it to Android (react-native unlink "package-name"). Or you could try to reinstall the package. On Android it works for me every single time. but it doesn't seem to work for me on IOS.

@gwesseling Can you give me your gradient code to check on my side see if I can help you since it works on ios on my side.

yeah sure, here's the code I'm using for the background.
'
import React, { Component } from 'react';
import { View, Text, Image, Dimensions } from 'react-native';
import LinearGradient from 'react-native-linear-gradient';
class Splash extends Component {
render() {
    return(
        <View style={ styles.container }>
            <LinearGradient
                style={ styles.linearGradient }
                colors={['#F99F01', '#DB3069']}
                locations={[0,5]}
                start={{x: 0.0, y: 0}}
                end={{x: 0.5, y: 1.0}}
            />
            <LinearGradient
                style={ [styles.arch, { right: Dimensions.get('window').width / 2}] }
                colors={['#F5900E', '#DC3565']}
                locations={[0,5]}
                start={{x: 0.0, y: 0}}
                end={{x: 0.5, y: 1.0}}
            />
            <LinearGradient
                style={ [styles.arch, { left: Dimensions.get('window').width / 2}] }
                colors={['#F07F1E', '#DB3069']}
                locations={[0,5]}
                start={{x: 0.0, y: 0}}
                end={{x: 0.5, y: 1.0}}
            />
        </View>
    );
}

}
const styles = {
container: {
flex: 1
}
arch: {
height: Dimensions.get('window').height - 230,
width: Dimensions.get('window').width / 2 + 25,
position: 'absolute',
top: 230,
opacity: 0.5,
borderTopLeftRadius: 100,
borderTopRightRadius: 100
},
linearGradient: {
flex: 1,
},
};
export default Splash;
`

Found the reason why it looks so different on IOS. Location is working different on IOS. After removing the location prop my gradient is not showing one color anymore.

Can someone close this issue. I found my mistake and it has been fixed. Thanks!

Hey @gwesseling , can you let me know how you fixed it? I am facing the same issue.


Not all Shapes implement PartialEq

As of the 0.7 release:
2D Shapes that implement PartialEq:

Ball
Cuboid
Segment
Triangle
HalfSpace

2D Shapes that don't implement PartialEq:

Capsule
TriMesh
Polyline
HeightField
Compound
ConvexPolygon
RoundCuboid
RoundTriangle
RoundConvexPolygon

3D Shapes that implement PartialEq:

Ball
Cuboid
Segment
Triangle
HalfSpace
ConvexPolyhedron
Cylinder
Cone

3D Shapes that don't implement PartialEq:

Capsule
TriMesh
Polyline
HeightField
Compound
RoundCuboid
RoundTriangle
RoundCylinder
RoundCone
RoundConvexPolyhedron

I don't understand why some of these shapes don't implement PartialEq<Self>. Is there any particular reason for this?
Compound would be harder because of SharedShape, but the rest mostly seem like they could derive it.
RoundShape could implement it with the following:
impl<S: Shape + PartialEq> PartialEq for RoundShape<S> {
  fn eq(&self, other: &Self) -> bool {
    self.border_radius == other.border_radius && self.base_shape == other.base_shape
  }
}

Can anyone comment on the feasibility of this?
I'm working on rollback networking, and pretty much all my components I need to rollback are PartialEq except my struct Collider(parry::SharedShape).
Is there any reason why SharedShape couldn't be made PartialEq, if I put in the work to impl PartialEq for the remaining shapes, like the RoundShape example above? What are the likely pitfalls?
thanks!

Is there any update as to why the PR #162 hasn't been merged?


Issue: Enable python integration tests with github actions

Change log description
(2-3 concise points about the changes in this PR. When committing this PR, the committer is expected to copy the content of this section to the merge description box)
Purpose of the change
(e.g., Fixes #666, Closes #1234)
What the code does
(Detailed description of the code changes)
How to verify it
(Optional: steps to verify that the changes are effective)

Codecov Report

Merging #190 (5f1a75c) into master (730b392) will increase coverage by 2.90%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master     #190      +/-   ##
==========================================
+ Coverage   76.50%   79.40%   +2.90%
==========================================
  Files          23       50      +27
  Lines        4864     9775    +4911
==========================================
+ Hits         3721     7762    +4041
- Misses       1143     2013     +870

Impacted Files
Coverage Δ

wire_protocol/src/client_connection.rs
94.25% <0.00%> (-3.71%)
:arrow_down:

wire_protocol/src/wire_commands.rs
90.27% <0.00%> (-0.45%)
:arrow_down:

shared/src/naming_utils.rs
96.33% <0.00%> (-0.13%)
:arrow_down:

src/reactor/reactors.rs
73.23% <0.00%> (ø)

src/segment_metadata.rs
56.02% <0.00%> (ø)

src/table_synchronizer.rs
79.73% <0.00%> (ø)

src/stream/position.rs
95.91% <0.00%> (ø)

src/error.rs
11.42% <0.00%> (ø)

src/transaction/pinger.rs
75.34% <0.00%> (ø)

src/raw_client.rs
93.84% <0.00%> (ø)

... and 32 more

The reason why this is timing out is because pravega-standalone does not start correctly inside the GitHub runner. Simulated this issue using https://github.com/nektos/act and realized that the Standalone never comes up on the GitHub runner.


Unable to install branch-cordova-sdk following instructions

I'm using Ionic 3 and am trying to transition to branch for deeplinks.
I've put the plugin spec in my config.xml, but every time that a build or cordova prepare is run, I see this:
Discovered plugin "branch-cordova-sdk" in config.xml. Adding it to the project
...
Failed to restore plugin "branch-cordova-sdk" from config.xml. You might need to try adding it again. Error: Failed to fetch plugin<EMAIL_ADDRESS>via registry.
Probably this is either a connection problem, or plugin spec is incorrect.
Check your connection and plugin name/version/URL.
Failed to get absolute path to installed module

This happens every time I build or prepare, so it looks like it's just not able to get it to install. Not sure what the problem is here. I'm using cordova-cli 7.1.0.

And then just now after another attempt I get this error:
Failed to restore plugin "branch-cordova-sdk" from config.xml. You might need to try adding it again. Error: Cannot find plugin.xml for plugin "symbol-observable". Please try adding it again.

Hello @c0bra,
Were you able to get Branch install? It appears you are getting Check your connection and plugin name/version/URL. You want to make sure you have an internet connection when installing the Branch  SDK. Our SDK depends on some node modules from NPM when being installed.
Additionally, it appears you are having issues with symbol-observable (https://github.com/benlesh/symbol-observable). This plugin is unrelated to Branch, but could be failing to install because of a similar issue.
Make sure your config.xml is valid, your computer has a network connection, and make sure you are following the integration guide correctly (https://github.com/BranchMetrics/cordova-ionic-phonegap-branch-deep-linking#test-deep-link-ios).
Let me know how it goes.
Thanks,

Congrats! I'll remember --nofetch in case this issue comes up again.

I'm facing this issue now with cordova 8 and cordova does not allow the --nofetch flag anymore ...


Can we use Ansible script to update SAS software from one LTS to other ?

Can we use Ansible script to update SAS software from one LTS to other ?

Yes, there should be no issues. As long as you adjust your ansible-vars.yaml file with the updated order the new kustomization.yaml and site.yaml file that would be applied into the running cluster. I would also check the official documentation as some of the underlying elements of the cluster have changed since the last LTS release which might require other items, like your ingress-nginx, to be updated. If that's the case you'd need to scale down your SAS Viya software, and update the baseline, then scale SAS Viya back up and apply the newest LTS.  You'll definitely need to reference this document published by SAS.


Single Project Page

Finish dynamically loading and styling single project page.

[x] Change styling (spacing, sizing, and borders) to more accurately reflect Figma design: https://www.figma.com/file/attWQWKwed1XSaaaMuzM5m/Open-Websites?type=design&node-id=292-576&mode=design&t=nKpvVXHRcRyTqUTk-0

[x] Update styling to adapt to devices with small screens

[ ] Dynamically load Roadmap Progress Indicators to reflect Figma design:

[ ] Change blank Link component href for Get Started button in singleProjectsSectionStart.jsx to direct to appropriate webpage

I started an issue for the dynamic roadmap timeline functionality #75.


Made weather card component and changed styling

Changes made

Moved weather card from App.js to dedicated component to clean up code.
Changed styling of search bar to better fit the design language of the page.

Preview

@suraj-singh127  @yashika51 please review.

Looks great!

The UI is really looking amazing!!


Can't rewrite to empty string

Please see here for a workaround.
Describe the bug
I have a VirtualService connected to a Gateway to allow traffic into my cluster.
I want to remove /service-a from the URL, so that http://site/service-a hits / on service-a, http://site/service-a/metrics hits /metrics, etc.
Works, but not completely
This VirtualService works for all cases except, of course, http://site/service-a (without trailing slash)
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: service-a
spec:
  hosts:
  - "hostname.example.org"
  gateways:
  - hostname-gateway
  http:
  - match:
    - uri:
        prefix: "/service-a/"
    rewrite:
      uri: "/"
    route:
    - destination:
        port:
          number: 8080
        host: service-a

Doesn't work
http:
  - match:
    - uri:
        prefix: "/service-a"
    rewrite:
      uri: ""

Passes to the envoy on the client and then returns a 404 for /service-a (a handler the service doesn't have)
curl -D- http://hostname.example.org/service-a
HTTP/1.1 404 Not Found
x-powered-by: Express
content-security-policy: default-src 'self'
x-content-type-options: nosniff
content-type: text/html; charset=utf-8
content-length: 148
date: Mon, 20 Aug 2018 15:50:21 GMT
x-envoy-upstream-service-time: 1
server: envoy

<!DOCTYPE html>

<meta charset="utf-8">
<title>Error</title>

Cannot GET /service-a

Tried "", ~ or '' as the empty string.  The empty string seems to be persisted:
$ kubectl get virtualservice/service-a -ojson
        "http": [
            {
                "match": [
                    {
                        "uri": {
                            "prefix": "/service-a"
                        }
                    }
                ],
                "rewrite": {
                    "uri": ""
                },

Matching the prefix works if the replacement string is something
  - match:
    - uri:
        prefix: "/service-a"
    rewrite:
      uri: "/"

Results in error Cannot GET //
  - match:
    - uri:
        prefix: "/service-a"
    rewrite:
      uri: " "

Results in 400
  http:
  - match:
    - uri:
        prefix: "/service-a/"
    rewrite:
      uri: ""

Version
GitRevision: 6f9f420f0c7119ff4fa6a1966a6f6d89b1b4db84
User: root@48d5ddfd72da
Hub: docker.io/istio
GolangVersion: go1.10.1
BuildStatus: Clean

Client Version: version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.0", GitCommit:"91e7b4fd31fcd3d5f436da26c980becec37ceefe", GitTreeState:"clean", BuildDate:"2018-06-27T22:29:25Z", GoVersion:"go1.10.3", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"10+", GitVersion:"v1.10.5-gke.4", GitCommit:"6265b9797fc8680c8395abeab12c1e3bad14069a", GitTreeState:"clean", BuildDate:"2018-08-04T03:47:40Z", GoVersion:"go1.9.3b4", Compiler:"gc", Platform:"linux/amd64"}```

(No, I haven't tested 1.0)
Is Istio Auth enabled or not?
No
Environment
GKE

@costinm @andraxylia, PTAL.

Adding another match uri accomplishes what you're looking for, though a bit more verbose
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: echoserver
spec:
  hosts:
  - "example.com"
  gateways:
  - example-gateway
  http:
  - match:
    - uri:
        prefix: "/echo/"
    - uri:
        prefix: "/echo"
    rewrite:
      uri: "/"
    route:
    - destination:
        host: echoserver
        port:
          number: 8080

@buckhx awesome, thanks man!

@craigbox I think we can close the issue if resolved.

It feels like a bug that there's no way to the empty string, so I would like it to stay open to track please.

Sure, I was just moving across the issues and thought it was fixed as per @buckhx response, but yes will look at this case.
    - uri:
        prefix: "/service-a"
    rewrite:
      uri: "/"

I have the same problem, and the solution of @buckhx does not work for me.
Istio 1.0.4
Kubernetes 1.11.3 in Azure (AKS)
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: iv
  namespace: istio-system
spec:
  gateways:
  - istio-https-k8s-ingress
  hosts:
  - xxx.westeurope.cloudapp.azure.com
  http:
  - match:
    - uri:
        prefix: /domain-api
    route:
    - destination:
        host: da.poc.svc.cluster.local
        port:
          number: 80
  - match:
    - uri:
        prefix: /api
    rewrite:
      uri: /
    route:
    - destination:
        host: bff.poc.svc.cluster.local
        port:
          number: 80
  - match:
    - uri:
        prefix: /api/
    rewrite:
      uri: /
    route:
    - destination:
        host: bff.poc.svc.cluster.local
        port:
          number: 80
  - match:
    - uri:
        prefix: /
    route:
    - destination:
        host: spa.poc.svc.cluster.local
        port:
          number: 80

(If I put the 2 prefix in the same match, the website does not respond. No specific logs in ingress or pilot)
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: istio-https-k8s-ingress
  namespace: istio-system
spec:
  selector:
    istio: ingressgateway
  servers:
  - hosts:
    - '*'
    port:
      name: http
      number: 80
      protocol: HTTP
  - hosts:
    - '*'
    port:
      name: https
      number: 443
      protocol: HTTPS
    tls:
      mode: SIMPLE
      privateKey: /etc/istio/ingressgateway-certs/tls.key
      serverCertificate: /etc/istio/ingressgateway-certs/tls.crt

The SPA is working, but any call to https://xxx.westeurope.cloudapp.azure.com/api/yyy get a 404. I can see in the ingress logs that it wants to redirect to the BFF, but does not seem to rewrite to / so that the BFF is called with /yyy instead of /api/yyy :
[2018-12-03T09:59:58.142Z] "GET /api/inspection-validation/inspections/HTTP/2" 404 - 0 174 0 0 "10.xxx.1.1" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36" "2dfc455a-ac72-4e6d-9014-1406958a08a2" "xxx.westeurope.cloudapp.azure.com" "10.xxx.1.116:80" outbound|80||bff.poc.svc.cluster.local - 10.xxx.1.120:443 10.xxx.1.1:4977

Any idea ?

@mleneveut you aren't doing it the way @buckhx described it
The matches are ordered. The first one to match is going to be executed. Thus you need to match the more specific prefix first.
Let's say you call /api/inspection-validation, having the following match defined
- match:
    - uri:
        prefix: "/api"
    - uri:
        prefix: "/api/"
    rewrite:
      uri: /

It's going to rewrite the path to //inspection-validation, the emphasis lies on the leading //.
That's what's causing the weird behaviour you encountered. Just change the order ;)

Yeah guys. Still doesn't work with @buckhx 's solution. The rewrite doesn't even happen...

I was having the same problem (double forward slash).
Got it working with this:
  http:
  - match:
    - uri:
        prefix: /example
    rewrite:
      uri: " "
    route:
    - destination:
        host: example-backend.default.svc.cluster.local
        port:
          number: 3001

I've just replaced the uri parameter with a whitespace.
I tought it would throw me a configuration error but I guess it just strips of the whitespace when rewriting (I don't know if this behavior is intended though).

I was having the same problem (double forward slash).
Got it working with this:
  http:
  - match:
    - uri:
        prefix: /example
    rewrite:
      uri: " "
    route:
    - destination:
        host: example-backend.default.svc.cluster.local
        port:
          number: 3001

I've just replaced the uri parameter with a whitespace.
I tought it would throw me a configuration error but I guess it just strips of the whitespace when rewriting (I don't know if this behavior is intended though).

you are cracking magician if I am able to do the same in my case

Oh my goodness. I have wasted 4 hours of my day trying to diagnose this. Wonderful find @RafaelMarquesRodrigues .
My initial problem was that I thought the rewrite wasn't working at all, so I compared traffic logs from envoy sidecar in my deployment and the proxy in the default ingressgateway deployment. The paths were exactly the same.
I had to go deeper and check the logs of the webserver running in my deployment before I found that rewrite.url: / was resulting requests being rewritten like: mysite.com/api/resource/ ==> mysite.com//resource. I truly hope using a space is intended behavior and they don't break my application future by changing that.

Could we please just make it work the way we expect?

I wish I knew how and where to make the changes for a pull request. The thought of maintainers later changing the behavior worries me enough.
Browsers and operating systems automatically ignore/remove duplicate slashes.
In my opinion, the sensible approach here:

A slash is truncated where there are duplicates
An empty string (not whitespace) is an accepted rewrite.uri value (and then the above applies for the resulting path)

Preferably the null identifier or nothing even

Any reasons you can think of why these would be a bad idea or not work?

Odd. A " " value was in the OP and claimed to not work.

Unfortunately, I don't believe using prefix: /example and a single space works unless your request ends in a /. That works great for requests to /example/ but not /example. Setting the rewrite to / does the opposite... it works for /example but if you have anything after it (starting with another /) you end up with the // problem.
The only way I see that actually solves this is the two-rule setup that @buckhx posted.
By having a rule that matches /path/ followed by another rule for /path, with both getting replaced with / prevents the // problem by making sure both get captured when they're present.

I have something like it
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: greeting-virtual-service
spec:
  hosts:
    - "*"
  gateways:
    - gateway
  http:
    - match:
      - uri:
          exact: "/api"
      - uri:
          prefix: "/api/"
      rewrite:
        uri: "/"
      route:
        - destination:
            host: java-greeting-service

the "/api" and "/api/" go to java-greeting-service "/"

As far as I know we cannot distinguish between unset and "", so there isn't a feasible way to support this

@GregHanson I know you made a somewhat similar API change recently, do you know if it is backwards compatible to change this from a string to something we can distinguish from nil and empty (StringWrapper?)

@howardjohn Why not use the approach of reducing duplicate /? Intuitively, if I set
    - uri:
        prefix: /example-svc/
    rewrite:
      uri: "/"

Then I expect
http://XXX[/example-svc/]v1/something
to become
http://XXX[/]v1/something

This is a problem for us too. Empty space in a re-write goes to the API and route cannot be resolved. /token and /token/ rewrite do not work either.

Looks like this can solve your problem
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: service-a
spec:
  hosts:
  - "hostname.example.org"
  gateways:
  - hostname-gateway
  http:
  - match:
    - uri:
        prefix: "/service-a/"
    rewrite:
      uri: "/"
    route:
    - destination:
        port:
          number: 8080
        host: service-a

hostname.example.org/service-a/xxxxxxx ======>  hostname.example.org/xxxxxxx
Hope to help you!

That doesn't address the case where you hit just http://hostname.example.org/service-a (with no trailing slash or path components).

For those just coming in, the solution by @buckhx is the one that works for now until this is better supported: https://github.com/istio/istio/issues/8076#issuecomment-427057691

The same issue, but any solution is not working...

I am fairly sure envoy doesn't actually support the rewrite to "", so the change would likely need to live there

@ClareChu  solution works perfectly

Got it working
  - match:
    - uri:
        prefix: /example/
    - uri:
        exact: /example
    rewrite:
      uri: /
    route:
    - destination:
        host: example-svc
        port:
          number: 80

Got it working
  - match:
    - uri:
        prefix: /example/
    - uri:
        exact: /example
    rewrite:
      uri: /
    route:
    - destination:
        host: example-svc
        port:
          number: 80

I tried all the above solutions, and none worked for me because I'm trying to redirect to an aws s3 bucket website... so here's mine that partially work (got some css issues with it):
  http:
  - match:
    - uri:
        prefix: /
    rewrite:
      authority: some-website.s3-website-ap-something-2.amazonaws.com
      uri: /?
    route:
    - destination:
        host: some-website.s3-website-ap-something-2.amazonaws.com

this "works" because it happens the original url to "?" which makes it a query part..
Hope this does NOT help anyone, because it's really an ugly workaround

The solution is, should configured 2 below match rules in kind: VirtualService

The corresponding envoy config like below, just a example

Note: the /foo/a -> / should be the first order, /foo -> / should be the second order.
I tested as below using below command
curl http://xxxx.xxx.xxx.xxx:$port/foo
curl http://xxxx.xxx.xxx.xxx:$port/foo/header

The backend server's access logs as below
# python3 -m http.server 8888
Serving HTTP on <IP_ADDRESS> port 8888 (http://<IP_ADDRESS>:8888/) ...

<IP_ADDRESS> - - [25/Aug/2022 17:41:29] "GET / HTTP/1.1" 200 -                       # the first request

<IP_ADDRESS> - - [25/Aug/2022 17:42:09] code 404, message File not found             # the second request
<IP_ADDRESS> - - [25/Aug/2022 17:42:09] "GET /header HTTP/1.1" 404 -

Adding another match uri accomplishes what you're looking for, though a bit more verbose
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: echoserver
spec:
  hosts:
  - "example.com"
  gateways:
  - example-gateway
  http:
  - match:
    - uri:
        prefix: "/echo/"
    - uri:
        prefix: "/echo"
    rewrite:
      uri: "/"
    route:
    - destination:
        host: echoserver
        port:
          number: 8080

The above fix by @buckhx works nicely and I was using it for quite a while... Until I've found a weakness in it !
Say, you create another VirtualService (called 'echotwo') behind the same gateway.
Now if you request:
example.com/echotwo
the gateway will rote it to 'echo' not 'echotwo'  VirtualService, because:
prefix: "/echo"
matches everything:
/echo
/echo/whattever
/echotwo
/echotwo/whatever
The fix is simple. Just replace:
prefix: "/echo"
with:
exact: "/echo"
it will prevent overzealous match, and both VirtualServices will work correctly.
So, the fixed example is:
kind: VirtualService
metadata:
  name: echoserver
spec:
  hosts:
  - "example.com"
  gateways:
  - example-gateway
  http:
  - match:
    - uri:
        prefix: "/echo/"
    - uri:
        exact: "/echo"
    rewrite:
      uri: "/"
    route:
    - destination:
        host: echoserver
        port:
          number: 8080```

Have I done enough for Istio that someone can just fix this already? 🤣


DocUpdate/Add bash header to validator startup script

Problem
Without the #!/bin/header the systemctl will not launch the process.
Summary of Changes
Add #!bin/bash to the suggested validator.sh startup script in the doc.
Fixes #

Yup, tripped me up too. Need the whole shebang 😂

Thanks! But fyi I'm going to merge this PR instead since it adds a few more fixes https://github.com/anza-xyz/agave/pull/846


[IDEA] Chapter 8 - Reduce dimensionality for datasets with categorical features

Hello
In this book its not covered how to handle dimensionality reduction for datasets with categorical features too.
How would you handle these situations?
Thank you in advance
Regards

Hi @marcio1191,
That's an interesting question! You could simply one-hot encode the categorical features and apply the dimensionality reduction algorithm after that. If you're training a neural network, you could apply the dimensionality reduction algorithm on the dataset excluding the categorical features, then add the categorical features as trainable embeddings.
Hope this helps.

Thanks @ageron for answering so quickly.
The problem with one-hot encode is that for visualization and data reduction techniques, like t-SNE and PCA, there is no "distance/variance" meaning associated with that kind of encoding. The algorithm will work, however, there is no meaning associated with those features.
https://stackoverflow.com/questions/40795141/pca-for-categorical-features

Thanks @marcio1191 , it seems I answered too quickly! 😅 You're right, if you choose the first option (using one-hot encoding followed by dim reduction), you have to be careful to use a clustering algorithm compatible with binary values (PCA definitely isn't). I haven't looked into this question very closely, but it seems that Multiple Component Analysis should work.
A couple other approaches you could try:

Of course you can try replacing the categorical feature with meaningful data before dim reduction. For example, suppose you're trying to predict a person's life satisfaction, and the training set contains a "city" categorical feature, then you could replace this "city" feature with one or more numerical features such as the city's mean income, crime rate, average rainfall per year, mean commute time, and other things about the city that may affect the life satisfaction of its inhabitants.
If you have access to pretrained embeddings (or if you can generate them using a separate neural net trained on related data), then you could replace the categorical features with the pretrained embeddings and then apply dim reduction.

Hope this helps.

@ageron,
Thank you for your help.
Regards
Marcio Fernandes

Hello,
In this case, maybe encoding methods like Target Encoding or CatBoost encoding may help.
There are multiple category encoders in http://contrib.scikit-learn.org/category_encoders/.
Kind Regards
Guillermo Fonseca


Unable to convert value of type System.String to OData type [Edm.Guid Nullable=True]

Hi,
My User class is like below when I try to update record using below query it gives me exception.
public class User
{
public User();
    public Guid Id { get; set; }
    public virtual Language Language { get; set; }
    public Guid? LanguageId { get; set; }
    public virtual City City { get; set; }
    public Guid? CityId { get; set; }
}

 var city = userData.FirstOrDefault();
            Guid cityId = city.Id;
 await myClient.For< User >()
                                                            .Filter(t=>t.CityId == cityId)
                                                            .Set(new { LanguageId = languageId  })
                                                            .UpdateEntryAsync();

Hi,
Impossible to say anything without knowing your service metadata and what kind of exception you are getting.

Fixed, will be released in 4.20.


Crash with Random Patches

When using Bits and Chisels 2.0.1, Random Patches 2.2.1, and Fabric API 0.30.3 the game crashes on start up. Random Patches and Bits and Chisels work went they are by them selfs with Fabric API.
log.txt

fixed in Random Patches 5fe4341ae5368eb7d2a7249a045fea40f3d8b5c8


Adding proxy to stack

This diff is a bit messy right now but it is working if you have access to the proxy repo
running docker-compose up -d should get this up and running the other yml files I'm not using right now and need to update
this should create two lite nodes in the NODES.json file that we can then use for testing
still some work to do like decoupling the proxy part from everything else but the base is here
I've been testing with this test on relay
npx ava src/tests/controllers/chatPayment.test.ts --verbose --serial --timeout=2m

ok updated the alts/proxy.yml file so now running
docker-compose -f alts/proxy.yml --project-directory . up -d
will get it up and running

wooooottt!!! any blockers or things that aren't working currently?

wooooottt!!! any blockers or things that aren't working currently?

The only issues I can see coming up is when trying to build proxy as it is a private repo and also some of the tests will fail since lite users can't make tribes and ect.
So there might be some custom logic need when we run tests with lite users

proxy users should be able to make tribes, its just blocked in the app. its a scaling issue, not a fundamental issue for proxy.
How about proxy->proxy messages, is that working now?

let me try more tests didn't realize that it was just restricted in the app

just tried this test @Evanfeenstra and it worked!
npx ava src/tests/controllers/tribe.test.ts --verbose --serial --timeout=2m

I think this is good now, I'ma merge it


Blank screen is displaying in user onboarding tab

Data is not displaying in user onboarding tab in courses program

Fixed


Criminal & Guard Problem.

First of all, I apologize for writing a message with translation. My English is not very good.
SphereX penalty system is different from old version emulators (like 56b).
For example; there are two blue players. One of them orders his followers to kill and attack the other blue player. At this point, the attacking player becomes a criminal and when the injured player calls GUARDS, a guard comes to the attacking player. BUT! If the followers ordered to attack are BLUE/GREY and they harm the player, they are not guilty. Their name is now GRAY and I have memory_sawcrime on me, but when I call a guard, the guard doesn't come or the guards around don't attack. Because they are only GRAY but not GUILTY. For example, if a player attacks a vendor (banker etc) where city guards are active, he dies, but the followers (attacker) do not die. The guard comes for the follower and does not attack the follower :) It only attacks if the follower is in PK state. The setting in Sphere.ini says that if the owner is guilty, the follower is also guilty. There is a logic error here. Each character should be guilty with their own memory. Can't a PK player ride a BLUE mount?
If this is not seen as a bug, a setting should be introduced in sphere.ini.
Translated with [DeepL.com]

see also #1040

I wanted to make a video on this topic, but the size is too big to embed it here directly. Video link : HERE


Remove the concurrency metric

It's possible to get the same metric just by looking into the _exec metric, so remove this one.
cc @wikimedia/services

Coverage decreased (-0.3%) to 89.457% when pulling 70e3a433c32dbb8f5b5ab6546e14e75bb0491687 on Pchelolo:remove_concurrency_metric into aafc2d83eda28cecc004a8836208f76eaeddcc96 on wikimedia:master.


Implement api

The api endpoint currently does nothing, needs to be filled out. Entrypoint is here: https://github.com/MichaelPachec0/nodejs-project-night/blob/25c23338f65ffc950ec4b468a13331199524f017/server.js#L17-L19 We need to decide on what we want to return in consideration on what our node app will be.

Since we are most likely going for a memory game with pokemon cards I have a few pokemon card API's I have been looking at I would like to tackle this issue if you don't mind.

Glad to hear it. I'd be more than happy to assign this to you.
But before that make sure you write a proposal of what you want to do as part of a comment in #7, this way everyone can reference it now and in the  future. Issues that are solved will be closed and wont be easy to reference and so i want to keep a central place where all proposals are kept to be able to easily access. Compared to other issues I've brought up, this is a bit more complicated, and so i would like at least someone other than me to chime in (since the readme references @jericashall as project leader, i would at the very least want the ok from her to start work on this.)

I think the idea for a proposal to outline how you're going to set up the api is great. I'd love to hear what your thoughts are.

@jericashall thanks! i listed a more detailed proposal in #7. If you could take a look that would be great!

@r-Dev03 I left a comment in that channel outlining some of my thoughts. Let me know if you agree or have other ideas.

Update on API Implementation, with some help from @MichaelPachec0 we got the API up and running, returned the proper data we need, and formatted package.json. I also had implemented a randomizing function in a new API.js file that essentially chooses a new page on each request to the API, so this will help with getting a new set of unique cards each game, I also changed the query parameters to make sure each page is 8 pokemon cards with their respective properties and images. The final thing I need to finish up is just parsing the data into an array that will be randomized as @jericashall said, I will be working on this tomorrow.

This is going to be a doozy. here more a less examples and what the code returns, in case you want to see all the data returned by the api, click the raw json arrow for more information.

Raw json
//start game
const URL = "http://localhost:8000/api?startgame=1"
try{
    let a = await (await fetch(URL)).json()
}
catch(e){
    //bad response
}
if (!a){
    // empty return
}

for (const [index, pokePos] of a.index.entries()){
    // pokePos can used for the 2 spots the poke will be in
    console.log(pokePos, index)
    // id can used comparision, according to the api, it should be unique
    console.log(a.data.data[index].id)
    // name in case front-end devs want to use it
    console.log(a.data.data[index].name)
    // in case you want to use images, theres both a large and small versions to
    // display
    console.log(a.data.data[index].images)
}
console.log(a.score)

//output
[ 14, 11 ] 0
pop4-6
Combusken
{
  small: 'https://images.pokemontcg.io/pop4/6.png',
  large: 'https://images.pokemontcg.io/pop4/6_hires.png'
}
[ 12, 10 ] 1
gym2-7
Giovanni's Nidoking
{
  small: 'https://images.pokemontcg.io/gym2/7.png',
  large: 'https://images.pokemontcg.io/gym2/7_hires.png'
}
[ 7, 13 ] 2
sm6-2
Alolan Exeggutor
{
  small: 'https://images.pokemontcg.io/sm6/2.png',
  large: 'https://images.pokemontcg.io/sm6/2_hires.png'
}
[ 8, 2 ] 3
sm12-6
Tangrowth
{
  small: 'https://images.pokemontcg.io/sm12/6.png',
  large: 'https://images.pokemontcg.io/sm12/6_hires.png'
}
[ 4, 9 ] 4
sm5-7
Turtwig
{
  small: 'https://images.pokemontcg.io/sm5/7.png',
  large: 'https://images.pokemontcg.io/sm5/7_hires.png'
}
[ 0, 5 ] 5
ex13-5
Deoxys δ
{
  small: 'https://images.pokemontcg.io/ex13/5.png',
  large: 'https://images.pokemontcg.io/ex13/5_hires.png'
}
[ 6, 1 ] 6
col1-6
Groudon
{
  small: 'https://images.pokemontcg.io/col1/6.png',
  large: 'https://images.pokemontcg.io/col1/6_hires.png'
}
[ 3, 15 ] 7
bw4-6
Pansage
{
  small: 'https://images.pokemontcg.io/bw4/6.png',
  large: 'https://images.pokemontcg.io/bw4/6_hires.png'
}
0

// choice should use id, because its a short string, can also use
// 'https://images.pokemontcg.io/bw4/6.png' from images.small but its a longer string
// should limit to the bare minimum of what we need to send to achive the outcome
//

// score has already been initialized as score
const param = encodeURIComponent(JSON.stringify([{id:"bw4-6"}, {id:"bw4-6"}]))
const URL = `http://localhost:8000/api?choice=${param}`
try{
    let addScore = await (await fetch(URL)).json()
}
catch(e){
    //bad response
}
if (!a){
    // empty return
}
// output
// addScore is 1 in this case
score += addScore

{
    "index": [
        [
            4,
            11
        ],
        [
            8,
            1
        ],
        [
            12,
            0
        ],
        [
            7,
            9
        ],
        [
            2,
            5
        ],
        [
            14,
            3
        ],
        [
            6,
            10
        ],
        [
            13,
            15
        ]
    ],
    "data": {
        "data": [
            {
                "id": "swsh1-2",
                "name": "Roselia",
                "supertype": "Pokémon",
                "subtypes": [
                    "Basic"
                ],
                "hp": "70",
                "types": [
                    "Grass"
                ],
                "evolvesTo": [
                    "Roserade"
                ],
                "attacks": [
                    {
                        "name": "Absorb",
                        "cost": [
                            "Grass"
                        ],
                        "convertedEnergyCost": 1,
                        "damage": "10",
                        "text": "Heal 10 damage from this Pokémon."
                    }
                ],
                "weaknesses": [
                    {
                        "type": "Fire",
                        "value": "×2"
                    }
                ],
                "retreatCost": [
                    "Colorless"
                ],
                "convertedRetreatCost": 1,
                "set": {
                    "id": "swsh1",
                    "name": "Sword & Shield",
                    "series": "Sword & Shield",
                    "printedTotal": 202,
                    "total": 216,
                    "legalities": {
                        "unlimited": "Legal",
                        "standard": "Legal",
                        "expanded": "Legal"
                    },
                    "ptcgoCode": "SSH",
                    "releaseDate": "2020/02/07",
                    "updatedAt": "2020/08/14 09:35:00",
                    "images": {
                        "symbol": "https://images.pokemontcg.io/swsh1/symbol.png",
                        "logo": "https://images.pokemontcg.io/swsh1/logo.png"
                    }
                },
                "number": "2",
                "artist": "sowsow",
                "rarity": "Common",
                "flavorText": "Its flowers give off a relaxing fragrance. The stronger its aroma, the healthier the Roselia is.",
                "nationalPokedexNumbers": [
                    315
                ],
                "legalities": {
                    "unlimited": "Legal",
                    "standard": "Legal",
                    "expanded": "Legal"
                },
                "regulationMark": "D",
                "images": {
                    "small": "https://images.pokemontcg.io/swsh1/2.png",
                    "large": "https://images.pokemontcg.io/swsh1/2_hires.png"
                },
                "tcgplayer": {
                    "url": "https://prices.pokemontcg.io/tcgplayer/swsh1-2",
                    "updatedAt": "2022/05/31",
                    "prices": {
                        "normal": {
                            "low": 0.01,
                            "mid": 0.1,
                            "high": 1,
                            "market": 0.06,
                            "directLow": 0.04
                        },
                        "reverseHolofoil": {
                            "low": 0.15,
                            "mid": 0.25,
                            "high": 1,
                            "market": 0.21,
                            "directLow": 0.2
                        }
                    }
                },
                "cardmarket": {
                    "url": "https://prices.pokemontcg.io/cardmarket/swsh1-2",
                    "updatedAt": "2022/05/31",
                    "prices": {
                        "averageSellPrice": 0.05,
                        "lowPrice": 0.02,
                        "trendPrice": 0.05,
                        "reverseHoloSell": 0.37,
                        "reverseHoloLow": 0.06,
                        "reverseHoloTrend": 0.32,
                        "lowPriceExPlus": 0.02,
                        "avg1": 0.02,
                        "avg7": 0.05,
                        "avg30": 0.05,
                        "reverseHoloAvg1": 0.69,
                        "reverseHoloAvg7": 0.29,
                        "reverseHoloAvg30": 0.24
                    }
                }
            },
            {
                "id": "sm75-1",
                "name": "Charmander",
                "supertype": "Pokémon",
                "subtypes": [
                    "Basic"
                ],
                "hp": "70",
                "types": [
                    "Fire"
                ],
                "evolvesTo": [
                    "Charmeleon"
                ],
                "attacks": [
                    {
                        "name": "Fire Fang",
                        "cost": [
                            "Fire",
                            "Colorless"
                        ],
                        "convertedEnergyCost": 2,
                        "damage": "20",
                        "text": "Your opponent's Active Pokémon is now Burned."
                    }
                ],
                "weaknesses": [
                    {
                        "type": "Water",
                        "value": "×2"
                    }
                ],
                "retreatCost": [
                    "Colorless",
                    "Colorless"
                ],
                "convertedRetreatCost": 2,
                "set": {
                    "id": "sm75",
                    "name": "Dragon Majesty",
                    "series": "Sun & Moon",
                    "printedTotal": 70,
                    "total": 80,
                    "legalities": {
                        "unlimited": "Legal",
                        "expanded": "Legal"
                    },
                    "ptcgoCode": "DRM",
                    "releaseDate": "2018/09/07",
                    "updatedAt": "2018/10/01 21:54:00",
                    "images": {
                        "symbol": "https://images.pokemontcg.io/sm75/symbol.png",
                        "logo": "https://images.pokemontcg.io/sm75/logo.png"
                    }
                },
                "number": "1",
                "artist": "tetsuya koizumi",
                "rarity": "Common",
                "flavorText": "From the time it is born, a flame burns at the tip of its tail. Its life would end if the flame were to go out.",
                "nationalPokedexNumbers": [
                    4
                ],
                "legalities": {
                    "unlimited": "Legal",
                    "expanded": "Legal"
                },
                "images": {
                    "small": "https://images.pokemontcg.io/sm75/1.png",
                    "large": "https://images.pokemontcg.io/sm75/1_hires.png"
                },
                "tcgplayer": {
                    "url": "https://prices.pokemontcg.io/tcgplayer/sm75-1",
                    "updatedAt": "2022/05/31",
                    "prices": {
                        "normal": {
                            "low": 0.74,
                            "mid": 1.25,
                            "high": 4.99,
                            "market": 1.04,
                            "directLow": 1.24
                        },
                        "reverseHolofoil": {
                            "low": 6.17,
                            "mid": 10.29,
                            "high": 35,
                            "market": 8.13,
                            "directLow": 6.48
                        }
                    }
                },
                "cardmarket": {
                    "url": "https://prices.pokemontcg.io/cardmarket/sm75-1",
                    "updatedAt": "2022/05/31",
                    "prices": {
                        "averageSellPrice": 1,
                        "lowPrice": 0.1,
                        "trendPrice": 0.88,
                        "reverseHoloLow": 2.7,
                        "reverseHoloTrend": 12.53,
                        "lowPriceExPlus": 0.1,
                        "avg1": 1.9,
                        "avg7": 1.47,
                        "avg30": 1.04,
                        "reverseHoloAvg1": 0.48,
                        "reverseHoloAvg7": 9.42,
                        "reverseHoloAvg30": 12.72
                    }
                }
            },
            {
                "id": "ex10-1",
                "name": "Ampharos",
                "supertype": "Pokémon",
                "subtypes": [
                    "Stage 2"
                ],
                "hp": "120",
                "types": [
                    "Lightning"
                ],
                "evolvesFrom": "Flaaffy",
                "abilities": [
                    {
                        "name": "Energy Connect",
                        "text": "As often as you like during your turn (before your attack), you may move a basic Energy card attached to 1 of your Benched Pokémon to your Active Pokémon. This power can't be used if Ampharos is affected by a Special Condition.",
                        "type": "Poké-Power"
                    }
                ],
                "attacks": [
                    {
                        "name": "Miraculous Thunder",
                        "cost": [
                            "Lightning",
                            "Colorless",
                            "Colorless"
                        ],
                        "convertedEnergyCost": 3,
                        "damage": "50",
                        "text": "You may discard all Lightning Energy attached to Ampharos. If you do, the Defending Pokémon is now Burned and Confused."
                    }
                ],
                "weaknesses": [
                    {
                        "type": "Fighting",
                        "value": "×2"
                    }
                ],
                "resistances": [
                    {
                        "type": "Metal",
                        "value": "-30"
                    }
                ],
                "retreatCost": [
                    "Colorless",
                    "Colorless"
                ],
                "convertedRetreatCost": 2,
                "set": {
                    "id": "ex10",
                    "name": "Unseen Forces",
                    "series": "EX",
                    "printedTotal": 115,
                    "total": 145,
                    "legalities": {
                        "unlimited": "Legal"
                    },
                    "ptcgoCode": "UF",
                    "releaseDate": "2005/08/01",
                    "updatedAt": "2020/08/14 09:35:00",
                    "images": {
                        "symbol": "https://images.pokemontcg.io/ex10/symbol.png",
                        "logo": "https://images.pokemontcg.io/ex10/logo.png"
                    }
                },
                "number": "1",
                "artist": "Kyoko Umemoto",
                "rarity": "Rare Holo",
                "nationalPokedexNumbers": [
                    181
                ],
                "legalities": {
                    "unlimited": "Legal"
                },
                "images": {
                    "small": "https://images.pokemontcg.io/ex10/1.png",
                    "large": "https://images.pokemontcg.io/ex10/1_hires.png"
                },
                "tcgplayer": {
                    "url": "https://prices.pokemontcg.io/tcgplayer/ex10-1",
                    "updatedAt": "2022/05/31",
                    "prices": {
                        "holofoil": {
                            "low": 11.98,
                            "mid": 15.81,
                            "high": 22.04,
                            "market": 12.8,
                            "directLow": 22.04
                        },
                        "reverseHolofoil": {
                            "low": 9.87,
                            "mid": 11.99,
                            "high": 18.95,
                            "market": 13.05,
                            "directLow": 10.08
                        }
                    }
                },
                "cardmarket": {
                    "url": "https://prices.pokemontcg.io/cardmarket/ex10-1",
                    "updatedAt": "2022/05/31",
                    "prices": {
                        "averageSellPrice": 4.2,
                        "lowPrice": 1,
                        "trendPrice": 5.39,
                        "reverseHoloSell": 13,
                        "reverseHoloLow": 2,
                        "reverseHoloTrend": 9.24,
                        "lowPriceExPlus": 2,
                        "avg1": 1.49,
                        "avg7": 4.91,
                        "avg30": 5.95,
                        "reverseHoloAvg1": 13,
                        "reverseHoloAvg7": 7.33,
                        "reverseHoloAvg30": 5.72
                    }
                }
            },
            {
                "id": "bw6-1",
                "name": "Hoppip",
                "supertype": "Pokémon",
                "subtypes": [
                    "Basic"
                ],
                "hp": "30",
                "types": [
                    "Grass"
                ],
                "evolvesTo": [
                    "Skiploom"
                ],
                "attacks": [
                    {
                        "name": "Flail Around",
                        "cost": [
                            "Grass"
                        ],
                        "convertedEnergyCost": 1,
                        "damage": "10×",
                        "text": "Flip 3 coins. This attack does 10 damage times the number of heads."
                    }
                ],
                "weaknesses": [
                    {
                        "type": "Fire",
                        "value": "×2"
                    }
                ],
                "resistances": [
                    {
                        "type": "Water",
                        "value": "-20"
                    }
                ],
                "retreatCost": [
                    "Colorless"
                ],
                "convertedRetreatCost": 1,
                "set": {
                    "id": "bw6",
                    "name": "Dragons Exalted",
                    "series": "Black & White",
                    "printedTotal": 124,
                    "total": 128,
                    "legalities": {
                        "unlimited": "Legal",
                        "expanded": "Legal"
                    },
                    "ptcgoCode": "DRX",
                    "releaseDate": "2012/08/15",
                    "updatedAt": "2018/03/04 10:35:00",
                    "images": {
                        "symbol": "https://images.pokemontcg.io/bw6/symbol.png",
                        "logo": "https://images.pokemontcg.io/bw6/logo.png"
                    }
                },
                "number": "1",
                "artist": "Kouki Saitou",
                "rarity": "Common",
                "flavorText": "It drifts on winds. It is said that when Hoppip gather in fields and mountains, spring is on the way.",
                "nationalPokedexNumbers": [
                    187
                ],
                "legalities": {
                    "unlimited": "Legal",
                    "expanded": "Legal"
                },
                "images": {
                    "small": "https://images.pokemontcg.io/bw6/1.png",
                    "large": "https://images.pokemontcg.io/bw6/1_hires.png"
                },
                "tcgplayer": {
                    "url": "https://prices.pokemontcg.io/tcgplayer/bw6-1",
                    "updatedAt": "2022/05/31",
                    "prices": {
                        "normal": {
                            "low": 0.05,
                            "mid": 0.25,
                            "high": 1,
                            "market": 0.21
                        },
                        "reverseHolofoil": {
                            "low": 0.25,
                            "mid": 0.41,
                            "high": 3.85,
                            "market": 0.48,
                            "directLow": 0.37
                        }
                    }
                },
                "cardmarket": {
                    "url": "https://prices.pokemontcg.io/cardmarket/bw6-1",
                    "updatedAt": "2022/05/31",
                    "prices": {
                        "averageSellPrice": 0.1,
                        "lowPrice": 0.02,
                        "trendPrice": 0.12,
                        "reverseHoloSell": 0.2,
                        "reverseHoloLow": 0.25,
                        "reverseHoloTrend": 0.46,
                        "lowPriceExPlus": 0.02,
                        "avg1": 0.02,
                        "avg7": 0.14,
                        "avg30": 0.11,
                        "reverseHoloAvg1": 0.2,
                        "reverseHoloAvg7": 0.44,
                        "reverseHoloAvg30": 0.33
                    }
                }
            },
            {
                "id": "ex11-5",
                "name": "Flareon δ",
                "supertype": "Pokémon",
                "subtypes": [
                    "Stage 1"
                ],
                "hp": "70",
                "types": [
                    "Fire",
                    "Metal"
                ],
                "evolvesFrom": "Eevee",
                "rules": [
                    "This Pokémon is both Fire Metal type."
                ],
                "attacks": [
                    {
                        "name": "Delta Search",
                        "cost": [
                            "Colorless"
                        ],
                        "convertedEnergyCost": 1,
                        "damage": "10",
                        "text": "Search your deck for a Holon Energy card and attach it to Flareon. Shuffle your deck afterward."
                    },
                    {
                        "name": "Return Burn",
                        "cost": [
                            "Fire",
                            "Metal",
                            "Colorless"
                        ],
                        "convertedEnergyCost": 3,
                        "damage": "50",
                        "text": "You may return an Energy card attached to Flareon to your hand. If you do, the Defending Pokémon is now Burned."
                    }
                ],
                "weaknesses": [
                    {
                        "type": "Water",
                        "value": "×2"
                    }
                ],
                "retreatCost": [
                    "Colorless"
                ],
                "convertedRetreatCost": 1,
                "set": {
                    "id": "ex11",
                    "name": "Delta Species",
                    "series": "EX",
                    "printedTotal": 113,
                    "total": 114,
                    "legalities": {
                        "unlimited": "Legal"
                    },
                    "ptcgoCode": "DS",
                    "releaseDate": "2005/10/31",
                    "updatedAt": "2020/05/01 16:06:00",
                    "images": {
                        "symbol": "https://images.pokemontcg.io/ex11/symbol.png",
                        "logo": "https://images.pokemontcg.io/ex11/logo.png"
                    }
                },
                "number": "5",
                "artist": "Kouki Saitou",
                "rarity": "Rare Holo",
                "nationalPokedexNumbers": [
                    136
                ],
                "legalities": {
                    "unlimited": "Legal"
                },
                "images": {
                    "small": "https://images.pokemontcg.io/ex11/5.png",
                    "large": "https://images.pokemontcg.io/ex11/5_hires.png"
                },
                "tcgplayer": {
                    "url": "https://prices.pokemontcg.io/tcgplayer/ex11-5",
                    "updatedAt": "2022/05/31",
                    "prices": {
                        "holofoil": {
                            "low": 18,
                            "mid": 39.99,
                            "high": 59.99,
                            "market": 40.01
                        },
                        "reverseHolofoil": {
                            "low": 55.95,
                            "mid": 75,
                            "high": 124.99,
                            "market": 102.49
                        }
                    }
                },
                "cardmarket": {
                    "url": "https://prices.pokemontcg.io/cardmarket/ex11-5",
                    "updatedAt": "2022/05/31",
                    "prices": {
                        "averageSellPrice": 22.85,
                        "lowPrice": 4.49,
                        "trendPrice": 24.52,
                        "reverseHoloSell": 59.98,
                        "reverseHoloLow": 7.5,
                        "reverseHoloTrend": 33.57,
                        "lowPriceExPlus": 15,
                        "avg1": 25,
                        "avg7": 24.98,
                        "avg30": 21.21,
                        "reverseHoloAvg1": 89.99,
                        "reverseHoloAvg7": 42.55,
                        "reverseHoloAvg30": 46.44
                    }
                }
            },
            {
                "id": "sm12-3",
                "name": "Gloom",
                "supertype": "Pokémon",
                "subtypes": [
                    "Stage 1"
                ],
                "hp": "80",
                "types": [
                    "Grass"
                ],
                "evolvesFrom": "Oddish",
                "evolvesTo": [
                    "Vileplume",
                    "Bellossom"
                ],
                "attacks": [
                    {
                        "name": "Sleep Powder",
                        "cost": [
                            "Grass"
                        ],
                        "convertedEnergyCost": 1,
                        "damage": "20",
                        "text": "Your opponent's Active Pokémon is now Asleep."
                    }
                ],
                "weaknesses": [
                    {
                        "type": "Fire",
                        "value": "×2"
                    }
                ],
                "retreatCost": [
                    "Colorless",
                    "Colorless"
                ],
                "convertedRetreatCost": 2,
                "set": {
                    "id": "sm12",
                    "name": "Cosmic Eclipse",
                    "series": "Sun & Moon",
                    "printedTotal": 236,
                    "total": 272,
                    "legalities": {
                        "unlimited": "Legal",
                        "expanded": "Legal"
                    },
                    "ptcgoCode": "CEC",
                    "releaseDate": "2019/11/01",
                    "updatedAt": "2021/09/01 05:37:00",
                    "images": {
                        "symbol": "https://images.pokemontcg.io/sm12/symbol.png",
                        "logo": "https://images.pokemontcg.io/sm12/logo.png"
                    }
                },
                "number": "3",
                "artist": "sui",
                "rarity": "Uncommon",
                "flavorText": "Smells incredibly foul! However, around one out of a thousand people enjoy sniffing its nose-bending stink.",
                "nationalPokedexNumbers": [
                    44
                ],
                "legalities": {
                    "unlimited": "Legal",
                    "expanded": "Legal"
                },
                "images": {
                    "small": "https://images.pokemontcg.io/sm12/3.png",
                    "large": "https://images.pokemontcg.io/sm12/3_hires.png"
                },
                "tcgplayer": {
                    "url": "https://prices.pokemontcg.io/tcgplayer/sm12-3",
                    "updatedAt": "2022/05/31",
                    "prices": {
                        "normal": {
                            "low": 0.03,
                            "mid": 0.22,
                            "high": 1.19,
                            "market": 0.15
                        },
                        "reverseHolofoil": {
                            "low": 0.18,
                            "mid": 0.36,
                            "high": 1,
                            "market": 0.35,
                            "directLow": 0.42
                        }
                    }
                },
                "cardmarket": {
                    "url": "https://prices.pokemontcg.io/cardmarket/sm12-3",
                    "updatedAt": "2022/05/31",
                    "prices": {
                        "averageSellPrice": 0.05,
                        "lowPrice": 0.02,
                        "trendPrice": 0.03,
                        "reverseHoloSell": 0.4,
                        "reverseHoloLow": 0.05,
                        "reverseHoloTrend": 0.41,
                        "lowPriceExPlus": 0.02,
                        "avg1": 0.09,
                        "avg7": 0.05,
                        "avg30": 0.06,
                        "reverseHoloAvg1": 0.49,
                        "reverseHoloAvg7": 0.36,
                        "reverseHoloAvg30": 0.31
                    }
                }
            },
            {
                "id": "ex3-5",
                "name": "Golem",
                "supertype": "Pokémon",
                "subtypes": [
                    "Stage 2"
                ],
                "hp": "120",
                "types": [
                    "Fighting"
                ],
                "evolvesFrom": "Graveler",
                "attacks": [
                    {
                        "name": "Rock Vengeance",
                        "cost": [
                            "Fighting",
                            "Colorless",
                            "Colorless"
                        ],
                        "convertedEnergyCost": 3,
                        "damage": "20+",
                        "text": "Does 20 damage plus 10 more damage for each damage counter on all of your Active Pokémon."
                    },
                    {
                        "name": "Rock Slide",
                        "cost": [
                            "Fighting",
                            "Fighting",
                            "Colorless",
                            "Colorless",
                            "Colorless"
                        ],
                        "convertedEnergyCost": 5,
                        "damage": "60",
                        "text": "Does 20 damage to 2 of your opponent's Benched Pokémon (1 if there is only 1). (Don't apply Weakness and Resistance for Benched Pokémon.)"
                    }
                ],
                "weaknesses": [
                    {
                        "type": "Water",
                        "value": "×2"
                    }
                ],
                "retreatCost": [
                    "Colorless",
                    "Colorless",
                    "Colorless",
                    "Colorless"
                ],
                "convertedRetreatCost": 4,
                "set": {
                    "id": "ex3",
                    "name": "Dragon",
                    "series": "EX",
                    "printedTotal": 97,
                    "total": 100,
                    "legalities": {
                        "unlimited": "Legal"
                    },
                    "ptcgoCode": "DR",
                    "releaseDate": "2003/09/18",
                    "updatedAt": "2019/01/28 16:44:00",
                    "images": {
                        "symbol": "https://images.pokemontcg.io/ex3/symbol.png",
                        "logo": "https://images.pokemontcg.io/ex3/logo.png"
                    }
                },
                "number": "5",
                "artist": "Hisao Nakamura",
                "rarity": "Rare Holo",
                "nationalPokedexNumbers": [
                    76
                ],
                "legalities": {
                    "unlimited": "Legal"
                },
                "images": {
                    "small": "https://images.pokemontcg.io/ex3/5.png",
                    "large": "https://images.pokemontcg.io/ex3/5_hires.png"
                },
                "tcgplayer": {
                    "url": "https://prices.pokemontcg.io/tcgplayer/ex3-5",
                    "updatedAt": "2022/05/31",
                    "prices": {
                        "holofoil": {
                            "low": 9.99,
                            "mid": 13.12,
                            "high": 29.95,
                            "market": 17.4,
                            "directLow": 12.89
                        },
                        "reverseHolofoil": {
                            "low": 6.65,
                            "mid": 9.52,
                            "high": 17.05,
                            "market": 8.22,
                            "directLow": 17.05
                        }
                    }
                },
                "cardmarket": {
                    "url": "https://prices.pokemontcg.io/cardmarket/ex3-5",
                    "updatedAt": "2022/05/31",
                    "prices": {
                        "averageSellPrice": 3.94,
                        "lowPrice": 1,
                        "trendPrice": 6.43,
                        "reverseHoloSell": 3.29,
                        "reverseHoloLow": 1,
                        "reverseHoloTrend": 3.25,
                        "lowPriceExPlus": 3.99,
                        "avg1": 2.75,
                        "avg7": 5.9,
                        "avg30": 5.17,
                        "reverseHoloAvg1": 5.5,
                        "reverseHoloAvg7": 3.15,
                        "reverseHoloAvg30": 4.46
                    }
                }
            },
            {
                "id": "pl1-5",
                "name": "Dialga",
                "supertype": "Pokémon",
                "subtypes": [
                    "Basic"
                ],
                "level": "72",
                "hp": "100",
                "types": [
                    "Metal"
                ],
                "abilities": [
                    {
                        "name": "Reverse Time",
                        "text": "Once during your turn, when you put Dialga from your hand onto your Bench, you may search your discard pile for up to 3 in any combination of Pokémon (excluding Pokémon LV.X) and basic Energy cards. Show them to your opponent and put them on top of your deck in any order.",
                        "type": "Poké-Power"
                    }
                ],
                "attacks": [
                    {
                        "name": "Time-Space Traveling",
                        "cost": [
                            "Metal",
                            "Colorless",
                            "Colorless"
                        ],
                        "convertedEnergyCost": 3,
                        "damage": "50",
                        "text": "Draw cards until you have 7 cards in your hand."
                    }
                ],
                "weaknesses": [
                    {
                        "type": "Fire",
                        "value": "×2"
                    }
                ],
                "resistances": [
                    {
                        "type": "Psychic",
                        "value": "-20"
                    }
                ],
                "retreatCost": [
                    "Colorless",
                    "Colorless",
                    "Colorless"
                ],
                "convertedRetreatCost": 3,
                "set": {
                    "id": "pl1",
                    "name": "Platinum",
                    "series": "Platinum",
                    "printedTotal": 127,
                    "total": 133,
                    "legalities": {
                        "unlimited": "Legal"
                    },
                    "ptcgoCode": "PL",
                    "releaseDate": "2009/02/11",
                    "updatedAt": "2020/08/14 09:35:00",
                    "images": {
                        "symbol": "https://images.pokemontcg.io/pl1/symbol.png",
                        "logo": "https://images.pokemontcg.io/pl1/logo.png"
                    }
                },
                "number": "5",
                "artist": "Mitsuhiro Arita",
                "rarity": "Rare Holo",
                "flavorText": "It has the power to control time. It appears in Sinnoh-region myths as an ancient deity.",
                "nationalPokedexNumbers": [
                    483
                ],
                "legalities": {
                    "unlimited": "Legal"
                },
                "images": {
                    "small": "https://images.pokemontcg.io/pl1/5.png",
                    "large": "https://images.pokemontcg.io/pl1/5_hires.png"
                },
                "tcgplayer": {
                    "url": "https://prices.pokemontcg.io/tcgplayer/pl1-5",
                    "updatedAt": "2022/05/31",
                    "prices": {
                        "holofoil": {
                            "low": 5.12,
                            "mid": 12.4,
                            "high": 39.97,
                            "market": 16.19
                        },
                        "reverseHolofoil": {
                            "low": 4.33,
                            "mid": 5.25,
                            "high": 7.99,
                            "market": 4.99
                        }
                    }
                },
                "cardmarket": {
                    "url": "https://prices.pokemontcg.io/cardmarket/pl1-5",
                    "updatedAt": "2022/05/31",
                    "prices": {
                        "averageSellPrice": 2.35,
                        "lowPrice": 0.3,
                        "trendPrice": 4.44,
                        "reverseHoloSell": 1.23,
                        "reverseHoloLow": 0.3,
                        "reverseHoloTrend": 1.53,
                        "lowPriceExPlus": 1.99,
                        "avg1": 0.5,
                        "avg7": 3.55,
                        "avg30": 2.84,
                        "reverseHoloAvg1": 1.99,
                        "reverseHoloAvg7": 1.23,
                        "reverseHoloAvg30": 2.25
                    }
                }
            }
        ],
        "page": 23,
        "pageSize": 8,
        "count": 8,
        "totalCount": 12619
    },
    "score": 0
}


Support crc32c

Fix https://github.com/TeofilC/digest/issues/17
The following changes may result in a potentially breaking change

Explicitly specify the cabal-version to 2.4
Explicitly specify the min version of base to 4.12
Upgrade the min version of bytestring to 0.10

Some other improvements may be worth considering

All advanced cpu features are disabled by default to make the library more portable. However, maybe we can auto detect the features and try to enable them while building.
Add macos and windows ci
Add a benchmark suite
Add a test suite to test the library by simply running cabal test

This looks great thanks! I'll cut a new release soon


Upstream changes

These 2 patches come from clean up work I did to prepare the TCG2 protocol patches to be upstreamed.

Will update based on the feedback in a new pull request.  Closing this one.


Adding toLowerCase() into the accelerator rules.

Adding toLowerCase() into the accelerator rules.
It's to make sure that artifactId is always lower case. Docker and Kubernetes expect lower case only.

Thanks for the PR, good suggestion. Rebased and merged.


Add GNMT sentence length distribution to the repository

For the cloud scenario, batching logic wants to predict the marginal latency cost to currently queued queries of waiting for the next inbound request. For the CV benchmarks this can be calculated from just the Poisson rate parameter, but for GNMT the distribution of sequence lengths is also needed.

@DilipSequeira need sentence length distribution from the training dataset to help determine whether to wait for the next sentence in batching strategy.

Bumping this for review in the next WG meeting.

@DilipSequeira  will work on the calibration set. WG agreed on this proposal of using calibration dataset.
@tjablin will update the rules saying the statistical property needs to be from the calibration set.

What's percentage of dataset used? @nvmbreughe