Response from table update is incompatible with Google's Python SDK

What happened?
When table schema is updated, it calls BigQuery.updateTable with PATCH method. With bigquery-emulator, it is returning the updated schema, however, google-cloud-bigquery plugin expects tableReference with tableId in the response. Link to the plugin function.
What did you expect to happen?
To have [tableReference][tableId] in the response.
How can we reproduce it (as minimally and precisely as possible)?
Install the python plugin: $ pip install google-cloud-bigquery (tested on latest version, 3.20.1, and old version 2.34.3).
Execute the following code:
from google.auth.credentials import AnonymousCredentials
from google.cloud import bigquery

client = bigquery.Client(client_options={"api_endpoint": "http://<IP_ADDRESS>:9050"}, credentials=AnonymousCredentials())

# change project id, dataset name and table name
table_ref = ".".join([GCP_PROJECT_ID, DATASET_NAME, TABLE_NAME])
table = client.get_table(table_ref)

# slightly modify `table.schema`
table = client.update_table(table, ["schema"])

It will give the following error:
KeyError: 'Resource lacks required identity information:["tableReference"]["tableId"]'
Anything else we need to know?
No response

It seems to me that the PATCH /projects/{project]/datasets/{dataset}/tables/{table} endpoint has numerous problems.
We currently decode the request body into a bigquery.Table. For example, if we are updating the description, we'd end up with a bigquery.Table with only the description set.
The newTable metadata is then passed along to metadata.Table.Update, but is unused, resulting in a no-op.
The response for the request handler only contains the contents of r.newTable, so in this case it'd be only be the description, no other fields.
As an aside, its worth noting that the emulator does not currently support updating a table's schema.


cmr-6899 - readme improvement

While testing, some confusing text in the README was found.

Codecov Report

Merging #30 (1263303) into master (9588d25) will increase coverage by 9.67%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master      #30      +/-   ##
==========================================
+ Coverage   73.72%   83.40%   +9.67%
==========================================
  Files          16        7       -9
  Lines        1119      500     -619
==========================================
- Hits          825      417     -408
+ Misses        294       83     -211

Impacted Files
Coverage Δ

CMR/python/test/cmr/__init__.py

CMR/python/test/cmr/auth/test_token.py

CMR/python/docit.py

CMR/python/test/cmr/search/test_search.py

CMR/python/test/cmr/search/test_granule.py

CMR/python/test/cmr/util/test_network.py

CMR/python/setup.py

CMR/python/test/cmr/util/test_common.py

CMR/python/test/cmr/search/test_common.py

Continue to review full report at Codecov.

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


Write --profile output using the .cpuprofile format in Wasmtime

Feature
Enable wasmtime to output CPU profiles in the VS Code-compatible .cpuprofile format.
Benefit
Right now wasmtime can take guest profiles using the --profile=guest flag, but these profiles are stored in Firefox profiler's .json format. VS Code can natively render CPU profiles, but only using the .cpuprofile format. This is a JSON-based format, which shouldn't be too different from Wasmtime's existing output - but it would be neat if Wasmtime profiling support directly integrated with VS Code.
The flow I have in mind here is that we would add support for some --profile flag to language native toolchains. So that you could run e.g. cargo test --profile, or maybe even hit the profile button in VS Code - and then that outputs a performance profile which can be directly visualized in VS Code like so:

Implementation
Ideally we'd just switch over the existing profile format to .cpuprofile. That seems better than adding additional config - and I believe the Firefox profiler can already load those. I also don't think there is any loss of information if we do that?
If we can't do that, adding a flag could be another option. But it seems better to not add more config if we can help it. I think this should mostly just be a different way we encode the same information, so I imagine the change here should be fairly self-contained within Wasmtime.
Alternatives
The main alternative here would be to handle this in the language-native tooling, taking the existing output and rewriting it to the .cpuprofile format. But since I believe the .cpuprofile is equivalent to what Wasmtime outputs already, and also already appears to be supported by the Firefox profiler, it might be better to make this change directly in Wasmtime.
References

.cpuprofile schema (Chrome devtools)
JS .cpuprofile reference schema
analyzing profiles in VS Code (VS Code docs)
firefox profiler

It is not clear to me how the cpuprofile format would represent profiling multiple threads at the same time. I also can't find anything to encode events/markers (instants in time where something happened like the exact moment an http request was received by wasi-http)

Ooff yeahh; what I wrote above includes this load-bearing sentence:

I also don't think there is any loss of information if we do that?

Completely agreed that if we in fact lose information by switching to .cpuprofile, then yeah we shouldn't switch over the base wasmtime output. There could potentially be value in integrating it with language-native tooling. But that's beyond the scope of this issue.

Even if we don't switch the default I think it's reasonable to support. The --profile option already supports --profile guest,other-path.json,10ms and we could extend that to something like --profile guest-vscode or --profile guest,vscode or something like that.


Destroy link reports when a step is deleted

Trello: https://trello.com/c/CcC66wRE
Link reports belong to a step.
Adding this dependancy fixes the Foreign Violation that occurs when you try to delete a step:
Cannot delete or update a parent row: a foreign key constraint fails (`collections_publisher_development`.`link_check_reports`, CONSTRAINT `fk_rails_ae2309ed25` FOREIGN KEY (`step_id`) REFERENCES `steps` (`id`))

Error in Sentry

@sihugh I've added tests for deleting steps. Cheers!


Can't list deployments

I'm cross-posting this issue from the Code Push repo, as I'm having issues with both CLI tools: https://github.com/microsoft/code-push/issues/675
Version
AppCenter CLI version 2.3.0
What is affected
appcenter codepush deployment list --app [app]

We're seeing a very high error rate when trying to list our deployments from the App Center CLI. We used to be able to retry a few times and get it to work, but now we only hit the message:
Error: Failed to get list of deployments for the app

Perhaps a dupe of #698

If you pass the command --debug you can see the actual API requests and responses. The error is in the metrics API. It is throwing a Redis out of memory error.
/ Getting CodePush deployments metrics...Response status code: 400
Body: {"message":"OOM command not allowed when used memory > 'maxmemory'."}

Hey, we're aware of the issue and looking into it now. We'll let you know when we have more information. Thanks for reporting this issue!

Didn't hear anyone posting here but it seems we are back!!! 🎉 🎉 At least Checking here everything seems fine again. Could someone else confirm please ?

@ribamarsantos Yes. We just resolved an issue with our Redis cache. Please let us know if there are any other issues!

❤ Working really well. Thank you!

Getting this same error currently. I assume I should just wait for it to be resolved?

+1

If you pass the command --debug you can see the actual API requests and responses. The error is in the metrics API. It is throwing a Redis out of memory error.
/ Getting CodePush deployments metrics...Response status code: 400
Body: {"message":"OOM command not allowed when used memory > 'maxmemory'."}

is that the "code-push" cli? cause when i try passing --debug it says that this option does not exists.

+1 facing the same error here, but when try to release an app.


chore: v2.5.4

Codecov Report

Merging #51 into master will not change coverage.
The diff coverage is n/a.

@@         Coverage Diff          @@
##           master   #51   +/-   ##
====================================
  Coverage      94%   94%
====================================
  Files          15    15
  Lines         484   484
  Branches      105   105
====================================
  Hits          455   455
  Misses         23    23
  Partials        6     6

Continue to review full report at Codecov.

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


Error computed side-effects error when accessing getter

When attempting to write a getter which consolidates a nested object, signals throws an error.
Reproduction:
const state = deepSignal({
  x: {
    a: 1,
    b: 2,
  },
  get y() {
    return Object.values((state.x as RevertDeepSignal<typeof state.x>) ?? {});
  },
});

console.log(state.y);

Error:
Error: Computed cannot have side-effects
      at mutationDetected (node_modules/.pnpm/@preact+signals-core@1.3.1/node_modules/@preact/signals-core/src/index.ts:5:8)
      at value (node_modules/.pnpm/@preact+signals-core@1.3.1/node_modules/@preact/signals-core/src/index.ts:314:4)
      at Object.values [as ownKeys] (node_modules/.pnpm/deepsignal@1.3.3_react@18.2.0/node_modules/deepsignal/core/src/index.ts:120:29)
      at Function.values (<anonymous>)

Interesting. It should be easy to fix. I just need to find another way to trick the minifier into thinking that the access to the .value shouldn't be removed in this line.
Thanks for the report!

PR with the fix:

https://github.com/luisherranz/deepsignal/pull/33

Thanks for taking a look at this so quickly! I'll try it out once it's released.

@luisherranz I'm getting back from some vacation earlier this week. Hoping I'll be able to try this out next week and I'll let you know if it resolves the issue I was seeing.

@luisherranz I can confirm that I'm able to run the above code now without it crashing :+1: my apologies for the delay

Cool, thanks 🙂


Make and AUR and I'll test the butter out of it :)

I am using our own TROMjaro.com operating system and I got sick of these .files especially since I test hundreds of applications for our distribution. If you make an AUR for it so I can easily install and manage it (updates and all) I will test this a lot, since I am installing a ton of applications to test for our distro :).
Could be very useful for this little app to get some proper testing.
Thanks a lot for doing this!

That is a good idea. I am currently looking for something that will distribute the releases to multiple distribution but I might start with AUR and Brew for starters. I will try to get to this this week.

Awesome. I'll test it a lot. ;)

Btw I have it packaged for kiss linux - you can view the package at https://github.com/jedahan/kiss-repo/tree/main/antidot .

Thanks. I am afraid I am not that knowledgeable to do this. Will see if I can do it. If you release this as AUR post an update please. Cheers!

Someone already beat me to it: https://aur.archlinux.org/packages/antidot-bin/

@tiotrom please let me know if the package works correctly when you are available for it. Thanks!

The AUR does not build I reported it to the AUR.

@tiotrom thanks I fixed the URL and I will also push a fix to the CI

Hi. I apologize I was busy with other things. I looked more into this today and perhaps I misunderstood what it does. I thought that it automatically puts the .dot folders into something like .config folder and allows programs to use the folders from there. But I am not sure it does that. Plus, I thought users do not have to run it via a terminal to clean the system from such .dot folders.
So I was unable to properly understand how to use it. I need to look more into it.

The main goal of this application is to clean your home directory from dotfiles. It will do so by moving them to the appropriate location (e.g. a config file to $XDG_CONFIG_HOME). But, in order for the application to still work correctly some environment variables or aliases should be declared (depending on the app). These are done by antidot while running the clean command. The only thing left to do is to add eval "$(antidot init) in your .bashrc.

Ok perhaps this is way too complicated for me so I apologize for saying that I will test it a lot. And perhaps no one from our tromjaro team, who would know how to test it, has time at the moment. Maybe if this was more "magical" in nature and one would install it and did all of the magic in the background, would be something I'd love to test and see if applications work with it. I will close this for now and I apologize again, I honestly thought this is a matter of installing antidot and then simply test many applications to see if all works correctly.

I thought about this direction but came to the conclusion I wouldn't want to move these files without confirmation. Right now all you need to do is run antidot clean once and add eval "$(antidot init)" to .bashrc. Not that much of work.
I appreciate the intention. I hope you will find antidot useful in the future.

antidot clean - I did this.

add eval "$(antidot init)" to .bashrc

This I did not. Before I'll try to do that, what is this doing? Basically move all of the .files to .config? Including new ones from applications users will install on their system?

antidot clean - I did this.

add eval "$(antidot init)" to .bashrc

This I did not. Before I'll try to do that, what is this doing? Basically move all of the .files to .config? Including new ones from applications users will install on their system?

When you run antidot clean you are moving files and creating aliases and exporting environment variables. In order to have these aliases and vars set in your shell you need to add eval "$(antidot init)" to your .bashrc. You can run antidot init and see the shell script that will run. It basically just ensures XDG variables are set and sources the aliases and vars files.

When you run antidot clean you are moving files and creating aliases and exporting environment variables. In order to have these aliases and vars set in your shell you need to add eval "$(antidot init)" to your .bashrc. You can run antidot init and see the shell script that will run. It basically just ensures XDG variables are set and sources the aliases and vars files.


Wrong PyPI package name.

nova is already taken so running pip install nova will install a wrong package...

Latest commit fixes this.


bug: "transaction underpriced" when deploying anything to Base Goerli

Is there an existing issue for this?

[X] I have looked through the existing issues

Current Behavior
When I try to deploy any of my contracts to Base Goerli, I get a ProviderError: transaction underpriced.
Expected Behavior
Contracts deploy to Base Goerli.
Steps To Reproduce
Change defaultNetwork to "baseGoerli" in hardhat.config.ts or use yarn deploy --network baseGoerli
Here is the deploy script which is failing:
https://github.com/FarmshareCSA/Farmshare/blob/dev-zerodev-login/packages/hardhat/deploy/02_deploy_registry_contracts.ts
Anything else?
yarn deploy
(node:42813) ExperimentalWarning: stream/web is an experimental feature. This feature could change at any time
(Use `node --trace-warnings ...` to show where the warning was created)
Nothing to compile
No need to generate any newer typings.
deploying "UserRegistry"transaction underpriced {"name":"ProviderError","_stack":"ProviderError: transaction underpriced\n    at HttpProvider.request (/home/webthethird/Ethereum/Farmshare/packages/hardhat/node_modules/hardhat/src/internal/core/providers/http.ts:88:21)\n    at processTicksAndRejections (node:internal/process/task_queues:96:5)","code":-32000,"_isProviderError":true} ProviderError: transaction underpriced
    at HttpProvider.request (/home/webthethird/Ethereum/Farmshare/packages/hardhat/node_modules/hardhat/src/internal/core/providers/http.ts:88:21)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
An unexpected error occurred:

Error: ERROR processing /home/webthethird/Ethereum/Farmshare/packages/hardhat/deploy/02_deploy_registry_contracts.ts:
ProviderError: transaction underpriced
    at HttpProvider.request (/home/webthethird/Ethereum/Farmshare/packages/hardhat/node_modules/hardhat/src/internal/core/providers/http.ts:88:21)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at DeploymentsManager.executeDeployScripts (/home/webthethird/Ethereum/Farmshare/packages/hardhat/node_modules/hardhat-deploy/src/DeploymentsManager.ts:1229:19)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async DeploymentsManager.runDeploy (/home/webthethird/Ethereum/Farmshare/packages/hardhat/node_modules/hardhat-deploy/src/DeploymentsManager.ts:1059:5)
    at async SimpleTaskDefinition.action (/home/webthethird/Ethereum/Farmshare/packages/hardhat/node_modules/hardhat-deploy/src/index.ts:438:5)
    at async Environment._runTaskDefinition (/home/webthethird/Ethereum/Farmshare/packages/hardhat/node_modules/hardhat/src/internal/core/runtime-environment.ts:333:14)
    at async Environment.run (/home/webthethird/Ethereum/Farmshare/packages/hardhat/node_modules/hardhat/src/internal/core/runtime-environment.ts:166:14)
    at async SimpleTaskDefinition.action (/home/webthethird/Ethereum/Farmshare/packages/hardhat/node_modules/hardhat-deploy/src/index.ts:584:32)
    at async Environment._runTaskDefinition (/home/webthethird/Ethereum/Farmshare/packages/hardhat/node_modules/hardhat/src/internal/core/runtime-environment.ts:333:14)
    at async Environment.run (/home/webthethird/Ethereum/Farmshare/packages/hardhat/node_modules/hardhat/src/internal/core/runtime-environment.ts:166:14)
    at async SimpleTaskDefinition.action (/home/webthethird/Ethereum/Farmshare/packages/hardhat/node_modules/hardhat-deploy/src/index.ts:669:5)

Hey @webthethird, As I can see you guys are using blastApi as RPC provider in hardhat.configt.ts but you didn't put any api key at the end of URL :
    baseGoerli: {
-      url: `https://base-goerli.public.blastapi.io`,
+     url: `https://base-goerli.public.blastapi.io/<YOUR_API_KEY>`,
      accounts: [deployerPrivateKey],
      chainId: 84531,
      gasPrice:<PHONE_NUMBER>
    },

Actually this issue was resolved by your suggestion in the Telegram chat to add the gasPrice! Just forgot to close it here.


Dear Professor, I'd like to know how to output the visualization result of FAST.Farm which not only includes the flow but also the turbines models.Im  a new learner,plz forgive my ignorance.Thanks!

Is your feature request related to a problem? Please describe.

Describe the solution you'd like

Describe alternatives you've considered

Additional context

Dear @TeenZhou,
You should be able to output the wind turbine VTK files for visualization within each OpenFAST model as you would with visualizing wind turbines in standalone OpenFAST, uncoupled from FAST.Farm via the settings in the VISUALIZATION section of the OpenFAST primary (.fst) input file(s).
Best regards,


Load port power

Hello again John, this is not a bug, it is more of a question to implement a new sensor or calculate it.  I would like to know what would be the sensor that gives the exact measurement of the power in the physical load port of the inverter, normal sensors do not change if the inverter is connected as a grid inverter or as an isolated one, however the deye cloud application identifies the data from UPS power.  Can you think of how to calculate it?  thank you

Today there are some calculated sensors - or MathSensors - see https://github.com/kellerza/sunsynk/blob/655ce5c0a2a5fe8edd6139398ee02a4ccb6156b0/src/sunsynk/definitions.py#L100 for some examples
Of you want to build a new one, try to view all the interested registers at the same time to see how they are related. This works really nice in the template developer tools once you’ve added the individual sensors (or even dev tools - states, if you can filter on a similar name)

ok, thank you very much, I'm going to try and see if I can figure it out, I'll add them in mysensors.py, right?  Greetings and Merry Christmas!

Yes, add them in mysensors, as an example:
SENSORS += [
Sensor(175, "register 175", WATT),
Sensor(169, "register 169", WATT),
Sensor(166, "register 166", WATT),
]

Then also make sure your schedule for WATT reads often,- i.e. every second or 2 - https://kellerza.github.io/sunsynk/reference/schedules
Then you can play with templates to do a calc until you find the combination that works. Once you find it create a MathSensor or create you own custom sensor to do the calc between the registers if this is more than + & -

Ok thanks!!

You will have to look at the code. Sensors.py likely
the mathsensor simply adds registers together. Some + some -, depending on the sign of the factor

Ah ok only + or -  are possible


Issue with Slack API Token for Acceptance Tests

On running acceptance tests for the provider with the new version of the slack tf provider, we not get this error
    slack:index:Conversation (acc-test):
      error: 1 error occurred:
      	* api user could not join conversation: missing_scope

I can't find any details on how to regenerate a new API Token for the provider

I'll take care of it, for future reference details are in our password manager.


ApplicationJob class extension

to include the possibility of jobs not being resubmitted after failure.
The request sequence and request time should give the total number of resubmissions.

Extension:

re-submission factor should be removed from the Runtime parameters
request_time and request_sequence need to be merged into one parameter
application ID should be set by the runtime (or the simulation class)


Move deploy scripts to Python

The complexity limit for legible and reasonable Bash has been about reached.

Merging, as build #166 worked just fine in Travis


0.5.0 Package fails to install on El Capitan

Installing from the JSSImporter-0.5.0.pkg gives:
This package is incompatible with this version of OS X and may fail to install. Installing this package may damage your system, and the installation may fail. To stop the program and the installation, click “Cancel Installation”.
Naturally, I click on "Install Anyway" :-)
Get: "There were errors with the installation. You may want to try installing" then it gets cut off. Dialog says, "The Installation failed. The Installer encountered an error that caused the installation to fail. Contact the software manufacturer for assistance."
Maybe it's a problem with SIP?
Console shows:
18/9/2015 3:40:07.791 PM UserEventAgent[51]: Failed to send message because the port couldn't be created.
18/9/2015 3:40:07.000 PM kernel[0]: Sandbox: shove(20268) System Policy: deny(1) file-write-create /usr/share/jssimporter
18/9/2015 3:40:08.430 PM UserEventAgent[51]: Failed to send message because the port couldn't be created.
18/9/2015 3:40:08.739 PM Installer[20128]: The Installer encountered an error that caused the installation to fail. Contact the software manufacturer for assistance.
Running GM version of OS X 10.11
James.

Thanks for the heads up. I'll look into it on our test machine.
I thought /use/share was supposed to be allowed with sip? Time to read up!

I thought /use/share was supposed to be allowed with sip?
I don't know - it was just a guess!

Only /usr/local is accessible with SIP. So, /usr/local/share would work, but not /usr/share.
https://developer.apple.com/library/prerelease/ios/documentation/Security/Conceptual/System_Integrity_Protection_Guide/FileSystemProtections/FileSystemProtections.html

Alright!


[openshift-3.11] Bug 1925486: Upgrade Jenkins to 2.263.3

/retest

/bugzilla refresh

Closing as Jenkins on 3.11 is already 2.263.3


Update UG

Pull Request Test Coverage Report for Build 345

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

Totals

Change from base Build 343:
0.0%

Covered Lines:
2149

Relevant Lines:
2473

💛  - Coveralls


test on range of browsers... just in case

Hoping Sophy can do this.

Print CSS doesn’t work the same way across browsers. Very likely that we won’t be able to make it look nice on Safari.

Tested with latest versions of browsers on devices:

MacOS

Chrome
Firefox
Safari

iOS

Chrome
Safari

Android

Chrome

Tested with Chrome’s inspector (this mostly tests for viewport size):

Moto G4 (really small viewport...)
Pixel 2
iPhone X
iPad
iPad Pro

TODO

[ ] https://infrastructure.sparcopen.org/about: portraits overflow
[ ] https://infrastructure.sparcopen.org/roadmap-for-action/what-do-we-mean-by-data-and-data-infrastructure: anchor link is displayed by default; should only appear on hover, focus, & active
[ ]  https://infrastructure.sparcopen.org/roadmap-for-action/what-do-we-mean-by-data-and-data-infrastructure: previous/next pagination needs some margin in between
[ ] https://infrastructure.sparcopen.org/roadmap-for-action/what-do-we-mean-by-data-and-data-infrastructure: should not display print post button on mobile or tablet
[ ] https://infrastructure.sparcopen.org//roadmap-for-action/three-categories-of-action: related box shouldn’t fall below the footer
[ ] Print doesn’t look the same on MacOS Firefox & Safari
[ ] Print on MacOS Safari: <header> has its own cover page; the rest of the text is in a narrow column which doesn’t look too awful
[ ] Print on MacO Firefox: a lot of white space around <header>; blank page
[ ] https://infrastructure.sparcopen.org//landscape-analysis/wiley: iPad portrait and landscape + iPad Pro portrait: second and third col (Related) are too narrow
[ ] https://infrastructure.sparcopen.org/landscape-analysis/wiley: iPhone + iPad: About Us button doesn’t appear

PDFs generated with CSS @media print:
MacOS, Chrome
MacOS-Chrome.pdf

MacOS, Safari
MacOS-Safari.pdf
copen/infrastructure/files/4798614/MacOS-Chrome.pdf)

MacOS, Firefox
MacOS-Firefox.pdf

I've hidden about us button for now, which is why it isn't coming up.
That's intended.
On Thu, Jun 18, 2020, 1:48 PM Sophy<EMAIL_ADDRESS>wrote:

Tested with latest versions of browsers on devices:

MacOS

Chrome
Firefox
Safari

iOS

Chrome
Safari

Android

Chrome

Tested with Chrome’s inspector (this mostly tests for viewport size):

Moto G4 (really small viewport...)
Pixel 2
iPhone X
iPad
iPad Pro

TODO

https://infrastructure.sparcopen.org/about: portraits overflow

https://infrastructure.sparcopen.org/roadmap-for-action/what-do-we-mean-by-data-and-data-infrastructure:
anchor link is displayed by default; should only appear on hover, focus, &
active
https://infrastructure.sparcopen.org/roadmap-for-action/what-do-we-mean-by-data-and-data-infrastructure:
previous/next pagination needs some margin in between
https://infrastructure.sparcopen.org/roadmap-for-action/what-do-we-mean-by-data-and-data-infrastructure:
should not display print post button on mobile or tablet
https://infrastructure.sparcopen.org//roadmap-for-action/three-categories-of-action:
related box shouldn’t fall below the footer

Print doesn’t look the same on MacOS Firefox & Safari
Print on MacOS Safari:  has its own cover page; the rest of
the text is in a narrow column which doesn’t look too awful
Print on MacO Firefox: a lot of white space around ; blank
page
https://infrastructure.sparcopen.org//landscape-analysis/wiley: iPad
portrait and landscape + iPad Pro portrait: second and third col (Related)
are too narrow
https://infrastructure.sparcopen.org/landscape-analysis/wiley:
iPhone + iPad: About Us button doesn’t appear

—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/sparcopen/infrastructure/issues/20#issuecomment-645995492,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ABFZMZ6KREWY5BKK5SLSL6LRXIELFANCNFSM4NOT3ITQ
.

Ah just noticed it now. Will still fix the small issue related to the About page on mobile.


Extract API creds to ENVs.

Defaults to preview testnet for local development.
Not super robust but it could be a step towards a solution such as ConfigContext in RoundTable.

Thanks!


Feature/K08 Get Composite Schedule

Describe your changes
This PR contains the complete support for the K08 requirement within the OCPP 2.0.1 standard. In includes the follow work:

Migration of the new Composite Schedule algorithm from v1.6 to v2.0.1.
Added support for Charging Station External Constraints Profiles, which are new in 2.0.1.
Added a message handler for GetCompositeScheduleRequest.

Core Composite Schedule Algorithm
This PR is for the core algorithm for calculating an individual Composite Schedule from a selection of Profiles within a given time range. This code is a refactoring of the code recently updated for the 1.6 version of the standard.
NOTE: As a part of this PR we have decided to keep the same names for methods to match the 1.6 version even though we felt there might be an opportunity to refactor them to clearly distinguish the different parts of the process of generating a Composite Schedule.
Here is the flow for the code in question:
sequenceDiagram
    ChargePoint->>+SmartChargingHandler: calculate_composite_schedule()
    note right of SmartChargingHandler: Determine profiles that
apply to the given range
    SmartChargingHandler->>SmartChargingHandler: get_valid_profiles()

    SmartChargingHandler->>+EVSEManager: get_valid_profiles()
    EVSEManager-->>-SmartChargingHandler: profiles in range
    SmartChargingHandler->>+Profile: calculate_profile(profiles)
    Profile-->>-SmartChargingHandler: periods
    note right of SmartChargingHandler: Calculate Composite Schedule
for charge_point_max
tx_default
charge_point_external_constraints
and tx profiles
    SmartChargingHandler->>+Profile: calculate_composite_schedule(charge_point_external_constraints)
    Profile-->>-SmartChargingHandler: charge_point_external_constraints composite_schedule
    SmartChargingHandler->>+Profile: calculate_composite_schedule(cp_max_periods)
    Profile-->>-SmartChargingHandler: charge_point_max composite_schedule
    SmartChargingHandler->>+Profile: calculate_composite_schedule(tx_default_periods)
    Profile-->>-SmartChargingHandler: tx_default composite_schedule
    SmartChargingHandler->>+Profile: calculate_composite_schedule(tx_periods)
    Profile-->>-SmartChargingHandler: tx composite_schedule
    SmartChargingHandler->>+Profile: calculate_composite_schedule(all three composite schedules)
    Profile-->>-SmartChargingHandler: consolidated composite_schedule
    SmartChargingHandler-->>-ChargePoint: composite_schedule

NOTE: A big change between this and the original 1.6 version of the code is the way we are testing the code in question, as well as adding existing tests that were written against the early version of the 1.6 code, that include ones that were failing before, but are now happily fixed with the earlier 1.6 update.
Here are the major refactorings in question:

Using raw Profile JSON files that are serialized within the test suite instead of instantiating them in code, allowing for a clearer understanding of the actual OCPP messages that will be used to create the Composite Schedule.
Support grouping of Profiles into scenario folders, so that one can clearly see how they relate and act with each other.
Use parameterized based testing where possible to simplify the tests.
Added smart_charging_test_utils.hpp that include methods to simplify the creation of DateTime objects used for creating test ranges.
Isolate all Composite Schedule tests in the test_composite_schedule.cpp test suite.

Message handler for GetCompositeScheduleRequest
Adds a message handler for GetCompositeScheduleRequest and associated
tests within test_charge_point.cpp.
Due to the core functionality being tested within test_composite_schedule.cpp,
we primarily test that get_valid_profiles() and calculate_composite_schedule()
are being called within the right contexts:

We calculate a composite schedule from a list of valid profiles
We do not calculate a composite schedule when the EVSE ID is unknown
We do not calculate a composite schedule when the chargingRateUnit
sent in the request is not configured.

Issue ticket number and link
Checklist before requesting a review

[X] I have performed a self-review of my code
[ ] I have made corresponding changes to the documentation
[x] If OCPP 2.0.1: I have updated the OCPP 2.0.1 status document
[X] I read the contribution documentation and made sure that my changes meet its requirements

FYI, I brought up the Codacy markdown linting issues in today's EVerest Cloud Communication Working Group meeting, and they indicated that they would file an issue on this.

@folkengine note that my name has an 'i' at the end. Although I prefer having the task in the appropriate column rather than a tag anyway since tags can get lost in the flow of email.

Oh no, I'm so sorry. You'd think I'd have mastered copy and paste by now.

Quick update on progress: I am currently at 54/70 files, although some of the files left are the more complex ones. I anticipate finishing this up tomorrow (Monday, Aug 19)

Quick update on progress: I am currently at 54/70 files, although some of the files left are the more complex ones. I anticipate finishing this up tomorrow (Monday, Aug 19)

Thank you @shankari

Rebased with latest code from main.

@shankari & @james-ctc I will have to respectively disagree with your comments concerning operators against Domain entities that are only used in unit tests should also be placed under the testing directory.
I come from the school that sees these elements as part of the general contract for the entities. Since this is a library, and we want to support using this library for things other than itself, these would be considered a standard part of what Joshua Block calls "their general contracts". I, for one, would much rather not have to write them for utilities such as appenzell.

ALTHOUGH Object is a concrete class, it is designed primarily for extension. All of its nonfinal methods (equals, hashCode, toString, clone, and finalize) have explicit general contracts because they are designed to be overridden. It is the responsibility of any class overriding these methods to obey their general contracts; failure to do so will prevent other classes that depend on the contracts (such as HashMap and HashSet) from functioning properly in conjunction with the class.

-- Joshua Bloch, Chapter 3 Effective Java 3 Edition
Please forgive me for citing a Java book, but it is one of my favorites, and had a massive impact on my craft as a developer.
Nevertheless, in the spirit of Git-R-Done I am going to move them and table this discussion until a later date.
Thanks for the feedback.

I will have to respectively disagree with your comments concerning operators against Domain entities that are only used in unit tests being placed under the testing directory...

My programming background is firmware in safety critical systems where different approaches are common. MISRA compliance is often a requirement.
There are a number of things to consider.

in Java everything is a class, C++ supports other things as well
structures are used rather than classes. Those structures have no methods, if it were as below then I would agree:

class ChargingSchedulePeriod {
public:
    bool operator==(const ChargingSchedulePeriod &);
    int32_t startPeriod;
    float limit;
    std::optional<CustomData> customData;
    std::optional<int32_t> numberPhases;
    std::optional<int32_t> phaseToUse;
};

the comparison and string operators are not part of the structure's interface
in security, unreachable code is generally considered bad
MISRA guidelines also prohibit unused code: "There shall be no unreachable code"
comparisons are never used within libocpp - there is never a need to compare. Unit tests need a compare to check that the results of a test are what was expected, an alternative would be:

  ChargingSchedulePeriod a;
  ChargingSchedulePeriod b;
  ...
  EXPECT_EQ(a.startPeriod, b.startPeriod);
  EXPECT_EQ(a.limit, b.limit);
  ...

Using the out of class definition operator== simplifies the unit tests.

I will have to respectively disagree with your comments concerning operators against Domain entities that are only used in unit tests being placed under the testing directory...

My programming background is firmware in safety critical systems where different approaches are common. MISRA compliance is often a requirement.
There are a number of things to consider.

in Java everything is a class, C++ supports other things as well
structures are used rather than classes. Those structures have no methods, if it were as below then I would agree:

class ChargingSchedulePeriod {
public:
    bool operator==(const ChargingSchedulePeriod &);
    int32_t startPeriod;
    float limit;
    std::optional<CustomData> customData;
    std::optional<int32_t> numberPhases;
    std::optional<int32_t> phaseToUse;
};

the comparison and string operators are not part of the structure's interface
in security, unreachable code is generally considered bad
MISRA guidelines also prohibit unused code: "There shall be no unreachable code"
comparisons are never used within libocpp - there is never a need to compare. Unit tests need a compare to check that the results of a test are what was expected, an alternative would be:

  ChargingSchedulePeriod a;
  ChargingSchedulePeriod b;
  ...
  EXPECT_EQ(a.startPeriod, b.startPeriod);
  EXPECT_EQ(a.limit, b.limit);
  ...

Using the out of class definition operator== simplifies the unit tests.

Very informative. That makes total sense, and completely changes my mind. Thanks!

OCTT test case results:
TC_K_39_CS Get Composite Schedule - No ChargingProfile installed on Charging Station: ✔
TC_K_40_CS Get Composite Schedule - Stacking ChargingProfiles: ✔
TC_K_41_CS [Beta] Get Composite Schedule - Combining chargingProfilePurposes: 🚫
TC_K_42_CS Get Composite Schedule - chargingRateUnit not supported: ✔
TC_K_47_CS Get Composite Schedule - Unknown EVSEId: ✔

@Pietfried we have created an issue for TC_K_41_CS on our board to isolate if this is an issue with the test or with this code. Thank you for the information.

A good set of changes and I like how the approach is similar to 1.6 giving the opportunity in the future to have common scheduling processing and just the to/from JSON being different between the two. With OCPP 2.1 coming this is good to see and a great starting point.
Some general points:

not all files have the correct license header
some files are missing a blank line at the end
I think there is a possibility of making profile code common perhaps with inheritance to cover the multiple schedules in OCPP 2.0.1 (perhaps a separate PR)
some unit test only code is included in the main library code. I recommend separating that code out and keeping it with the test code. Having dead code in a library file is not recommended. (an alternative would be to use conditional compilation, #ifdef UNIT_TEST but I think it is cleaner to move it)

when I run the unit tests I'm getting a segfault in ChargePointFixture.K01FR02_CallbacksValidityChecksIfOptionalVariableChangedCallbackIsNotSetOrNotNull
[2024-08-23 10:59:31.266123] [0x00007a3c379a7740] [info]    Disconnecting websocket...
[2024-08-23 10:59:31.266127] [0x00007a3c379a7740] [info]    Closing websocket:
[2024-08-23 10:59:31.266138] [0x00007a3c379a7740] [info]    stop()
[2024-08-23 10:59:31.266167] [0x00007a3c04a006c0] [info]    There are 1 messages in the normal message queue.
[2024-08-23 10:59:31.266182] [0x00007a3c04a006c0] [info]    There are 124 messages in the transaction message queue.
[2024-08-23 10:59:31.266188] [0x00007a3c04a006c0] [info]    Message queue stopped processing messages
[2024-08-23 10:59:31.266224] [0x00007a3c379a7740] [info]    stop() notified message queue
[2024-08-23 10:59:31.266282] [0x00007a3c02c006c0] [info]    Closed websocket of NetworkConfigurationPriority: 1 which is configurationSlot 1
[2024-08-23 10:59:31.266307] [0x00007a3c054006c0] [info]    Triggered authorization cache cleanup
[2024-08-23 10:59:31.266373] [0x00007a3c02c006c0] [info]    pause()
[2024-08-23 10:59:31.266383] [0x00007a3c02c006c0] [info]    pause() notified message queue
Segmentation fault (core dumped)

looks to be related to ocpp::common::DatabaseConnection::close_connection_internal
Core was generated by `./libocpp_unit_tests'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x00007a3c380a8354 in sqlite3VdbeMemSetNull () from /lib/x86_64-linux-gnu/libsqlite3.so.0

@james-ctc is it possible for you to create an issue on the US-JOET fork of libocpp?
Details of the system you are using to run the tests, and anything else that you might think would be helpful to isolate the issue would be most welcome.

There isn't an issues tab available to me

more details on the core dump (which occurs in different places)
System:
- Linux mint 22 (based on Ubuntu 24.04)
- g++ (Ubuntu 13.2.0-23ubuntu4) 13.2.0

$ cmake -B build -DBUILD_TESTING=ON -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX="./dist"
$ ninja -C build
$ ninja -C build install

commit 9a0411340d084802240e111b71e265754f72dfa2 (HEAD -> feature/k08-get-composite-schedule-squashed, US-JOET/feature/k08-get-composite-schedule-squashed)
Author: Christoph<EMAIL_ADDRESS>Date:   Wed Aug 28 07:20:33 2024 -0700

when run:
~/code/everest/workspace/libocpp/build/tests$ ./libocpp_unit_tests
...
[ RUN      ] ChargePointFixture.K01FR02_CallbacksValidityChecksIfResetCallbackExists
...
GMOCK WARNING:
Uninteresting mock function call - returning directly.
    Function call: Call(@0x7ffe3e24aab0 StartupOfTheDevice, @0x7ffe3e24aae0 (Charging Station powered up! Firmware version: 1.0))
NOTE: You can safely ignore the above warning unless this call should not happen.  Do not suppress it by blindly adding an EXPECT_CALL() if you don't mean to enforce the call.  See https://github.com/google/googletest/blob/master/docs/gmock_cook_book.md#knowing-when-to-expect for details.
[2024-08-29 14:16:50.014981] [0x00007c902c2fc740] [info]    Disconnecting websocket...
[2024-08-29 14:16:50.014988] [0x00007c902c2fc740] [info]    Closing websocket:
[2024-08-29 14:16:50.015007] [0x00007c902c2fc740] [info]    stop()
[2024-08-29 14:16:50.015036] [0x00007c8ffa8006c0] [info]    There are 1 messages in the normal message queue.
[2024-08-29 14:16:50.015056] [0x00007c8ffa8006c0] [info]    There are 13 messages in the transaction message queue.
[2024-08-29 14:16:50.015066] [0x00007c8ffa8006c0] [info]    Message queue stopped processing messages
[2024-08-29 14:16:50.015087] [0x00007c8ff8a006c0] [info]    Closed websocket of NetworkConfigurationPriority: 1 which is configurationSlot 1
[2024-08-29 14:16:50.015112] [0x00007c902c2fc740] [info]    stop() notified message queue
[2024-08-29 14:16:50.015190] [0x00007c8ffb2006c0] [info]    Triggered authorization cache cleanup
[2024-08-29 14:16:50.015216] [0x00007c8ff8a006c0] [info]    pause()
[2024-08-29 14:16:50.015230] [0x00007c8ff8a006c0] [info]    pause() notified message queue
[2024-08-29 14:16:50.015774] [0x00007c902c2fc740] [info]    Successfully closed database: "file::memory:?cache=shared"
Segmentation fault (core dumped)

Stack trace from core (gdb)
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `./libocpp_unit_tests'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x00007c902c9bc7c7 in sqlite3Init () from /lib/x86_64-linux-gnu/libsqlite3.so.0
[Current thread is 1 (Thread 0x7c8ff8a006c0 (LWP 181995))]
(gdb) bt
#0  0x00007c902c9bc7c7 in sqlite3Init () from /lib/x86_64-linux-gnu/libsqlite3.so.0
#1  0x00007c902c9bc8bf in sqlite3ReadSchema () from /lib/x86_64-linux-gnu/libsqlite3.so.0
#2  0x00007c902c933ba0 in sqlite3LocateTable () from /lib/x86_64-linux-gnu/libsqlite3.so.0
#3  0x00007c902c9dbc91 in ?? () from /lib/x86_64-linux-gnu/libsqlite3.so.0
#4  0x00007c902ca061be in sqlite3WalkSelect () from /lib/x86_64-linux-gnu/libsqlite3.so.0
#5  0x00007c902c9de803 in sqlite3SelectPrep () from /lib/x86_64-linux-gnu/libsqlite3.so.0
#6  0x00007c902c9df8d8 in sqlite3Select () from /lib/x86_64-linux-gnu/libsqlite3.so.0
#7  0x00007c902c9b5992 in sqlite3Parser () from /lib/x86_64-linux-gnu/libsqlite3.so.0
#8  0x00007c902c9e50a6 in sqlite3RunParser () from /lib/x86_64-linux-gnu/libsqlite3.so.0
#9  0x00007c902c9b9063 in ?? () from /lib/x86_64-linux-gnu/libsqlite3.so.0
#10 0x00007c902c9b94df in ?? () from /lib/x86_64-linux-gnu/libsqlite3.so.0
#11 0x00007c902c9b95ce in sqlite3_prepare_v2 () from /lib/x86_64-linux-gnu/libsqlite3.so.0
#12 0x00005d9849400b61 in ocpp::common::SQLiteStatement::SQLiteStatement (this=0x7c902400a8a0, db=0x5d984a639bb8, query="SELECT ID FROM VARIABLE WHERE COMPONENT_ID = ? AND NAME = ? AND INSTANCE IS ?")
    at /home/james/code/everest/workspace/libocpp/lib/ocpp/common/database/sqlite_statement.cpp:12
#13 0x00005d98493e4614 in std::make_unique<ocpp::common::SQLiteStatement, sqlite3*&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&> () at /usr/include/c++/13/bits/unique_ptr.h:1070
#14 0x00005d98493e19c6 in ocpp::common::DatabaseConnection::new_statement (this=0x5d984a609d30, sql="SELECT ID FROM VARIABLE WHERE COMPONENT_ID = ? AND NAME = ? AND INSTANCE IS ?")
    at /home/james/code/everest/workspace/libocpp/lib/ocpp/common/database/database_connection.cpp:130
#15 0x00005d984959d3dd in ocpp::v201::DeviceModelStorageSqlite::get_variable_id (this=0x5d984a5e0640, component_id=..., variable_id=...) at /home/james/code/everest/workspace/libocpp/lib/ocpp/v201/device_model_storage_sqlite.cpp:79
#16 0x00005d984959e3cb in ocpp::v201::DeviceModelStorageSqlite::get_variable_attributes (this=0x5d984a5e0640, component_id=..., variable_id=..., attribute_enum=std::optional = {...})
    at /home/james/code/everest/workspace/libocpp/lib/ocpp/v201/device_model_storage_sqlite.cpp:185
#17 0x00005d984959e2b8 in ocpp::v201::DeviceModelStorageSqlite::get_variable_attribute (this=0x5d984a5e0640, component_id=..., variable_id=..., attribute_enum=@0x7c8ff89ffb44: ocpp::v201::AttributeEnum::Actual)
    at /home/james/code/everest/workspace/libocpp/lib/ocpp/v201/device_model_storage_sqlite.cpp:173
#18 0x00005d9849584093 in ocpp::v201::DeviceModel::request_value_internal (this=0x5d984a6b1870, component_id=..., variable_id=..., attribute_enum=@0x7c8ff89ffb44: ocpp::v201::AttributeEnum::Actual, value="", allow_write_only=true)
    at /home/james/code/everest/workspace/libocpp/lib/ocpp/v201/device_model.cpp:236
#19 0x00005d98490e2429 in ocpp::v201::DeviceModel::get_value<int> (this=0x5d984a6b1870, component_variable=..., attribute_enum=@0x7c8ff89ffb44: ocpp::v201::AttributeEnum::Actual)
--Type <RET> for more, q to quit, c to continue without paging--c
    at /home/james/code/everest/workspace/libocpp/include/ocpp/v201/device_model.hpp:156
#20 0x00005d984948c2ec in operator() (__closure=0x5d984a664138) at /home/james/code/everest/workspace/libocpp/lib/ocpp/v201/charge_point.cpp:1119
#21 0x00005d98494b78c4 in std::__invoke_impl<void, ocpp::v201::ChargePoint::init_websocket()::<lambda()>&>(std::__invoke_other, struct {...} &) (__f=...) at /usr/include/c++/13/bits/invoke.h:61
#22 0x00005d98494b55c2 in std::__invoke_r<void, ocpp::v201::ChargePoint::init_websocket()::<lambda()>&>(struct {...} &) (__fn=...) at /usr/include/c++/13/bits/invoke.h:111
#23 0x00005d98494b30b4 in std::_Function_handler<void(), ocpp::v201::ChargePoint::init_websocket()::<lambda()> >::_M_invoke(const std::_Any_data &) (__functor=...) at /usr/include/c++/13/bits/std_function.h:290
#24 0x00005d9848ed7ef6 in std::function<void ()>::operator()() const (this=0x5d984a664138) at /usr/include/c++/13/bits/std_function.h:591
#25 0x00005d98496fb95d in operator() (__closure=0x5d984a6421e0) at /home/james/code/everest/workspace/libocpp/lib/ocpp/common/websocket/websocket.cpp:76
#26 0x00005d98496fce7c in std::__invoke_impl<void, ocpp::Websocket::register_disconnected_callback(const std::function<void()>&)::<lambda()>&>(std::__invoke_other, struct {...} &) (__f=...) at /usr/include/c++/13/bits/invoke.h:61
#27 0x00005d98496fc9c4 in std::__invoke_r<void, ocpp::Websocket::register_disconnected_callback(const std::function<void()>&)::<lambda()>&>(struct {...} &) (__fn=...) at /usr/include/c++/13/bits/invoke.h:111
#28 0x00005d98496fc2b0 in std::_Function_handler<void(), ocpp::Websocket::register_disconnected_callback(const std::function<void()>&)::<lambda()> >::_M_invoke(const std::_Any_data &) (__functor=...)
    at /usr/include/c++/13/bits/std_function.h:290
#29 0x00005d9848ed7ef6 in std::function<void ()>::operator()() const (this=0x5d984a6421e0) at /usr/include/c++/13/bits/std_function.h:591
#30 0x00005d9849705283 in operator() (__closure=0x7c8ff89ffda0) at /home/james/code/everest/workspace/libocpp/lib/ocpp/common/websocket/websocket_libwebsockets.cpp:828
#31 0x00005d984970ce6a in std::__invoke_impl<void, ocpp::WebsocketTlsTPM::close(ocpp::WebsocketCloseReason, const std::string&)::<lambda()>&>(std::__invoke_other, struct {...} &) (__f=...) at /usr/include/c++/13/bits/invoke.h:61
#32 0x00005d984970c606 in std::__invoke_r<void, ocpp::WebsocketTlsTPM::close(ocpp::WebsocketCloseReason, const std::string&)::<lambda()>&>(struct {...} &) (__fn=...) at /usr/include/c++/13/bits/invoke.h:111
#33 0x00005d984970bc03 in std::_Function_handler<void(), ocpp::WebsocketTlsTPM::close(ocpp::WebsocketCloseReason, const std::string&)::<lambda()> >::_M_invoke(const std::_Any_data &) (__functor=...)
    at /usr/include/c++/13/bits/std_function.h:290
#34 0x00005d9848ed7ef6 in std::function<void ()>::operator()() const (this=0x7c8ff89ffda0) at /usr/include/c++/13/bits/std_function.h:591
#35 0x00005d984970b2f0 in ocpp::WebsocketTlsTPM::handle_deferred_callback_queue (this=0x5d984a642030) at /home/james/code/everest/workspace/libocpp/lib/ocpp/common/websocket/websocket_libwebsockets.cpp:1388
#36 0x00005d9849719408 in std::__invoke_impl<void, void (ocpp::WebsocketTlsTPM::*)(), ocpp::WebsocketTlsTPM*> (
    __f=@0x5d984a66a9f0: (void (ocpp::WebsocketTlsTPM::*)(ocpp::WebsocketTlsTPM * const)) 0x5d984970b1f0 <ocpp::WebsocketTlsTPM::handle_deferred_callback_queue()>, __t=@0x5d984a66a9e8: 0x5d984a642030)
    at /usr/include/c++/13/bits/invoke.h:74
#37 0x00005d984971935b in std::__invoke<void (ocpp::WebsocketTlsTPM::*)(), ocpp::WebsocketTlsTPM*> (
    __fn=@0x5d984a66a9f0: (void (ocpp::WebsocketTlsTPM::*)(ocpp::WebsocketTlsTPM * const)) 0x5d984970b1f0 <ocpp::WebsocketTlsTPM::handle_deferred_callback_queue()>) at /usr/include/c++/13/bits/invoke.h:96
#38 0x00005d98497192bb in std::thread::_Invoker<std::tuple<void (ocpp::WebsocketTlsTPM::*)(), ocpp::WebsocketTlsTPM*> >::_M_invoke<0ul, 1ul> (this=0x5d984a66a9e8) at /usr/include/c++/13/bits/std_thread.h:292
#39 0x00005d984971922c in std::thread::_Invoker<std::tuple<void (ocpp::WebsocketTlsTPM::*)(), ocpp::WebsocketTlsTPM*> >::operator() (this=0x5d984a66a9e8) at /usr/include/c++/13/bits/std_thread.h:299
#40 0x00005d98497191d0 in std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (ocpp::WebsocketTlsTPM::*)(), ocpp::WebsocketTlsTPM*> > >::_M_run (this=0x5d984a66a9e0) at /usr/include/c++/13/bits/std_thread.h:244
#41 0x00007c902c766bb4 in ?? () from /lib/x86_64-linux-gnu/libstdc++.so.6
#42 0x00007c902c3f0a94 in start_thread (arg=<optimised out>) at ./nptl/pthread_create.c:447
#43 0x00007c902c47dc3c in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:78

I did a clean rebuild and got a segfault in test [ RUN      ] ChargePointFixture.K01FR02_CallbacksValidityChecksIfOptionalAllConnectorsUnavailableCallbackIsNotSetOrNotNull
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `./libocpp_unit_tests'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x0000787ddfbae354 in sqlite3VdbeMemSetNull () from /lib/x86_64-linux-gnu/libsqlite3.so.0
[Current thread is 1 (Thread 0x787dac0006c0 (LWP 187344))]
(gdb) bt
#0  0x0000787ddfbae354 in sqlite3VdbeMemSetNull () from /lib/x86_64-linux-gnu/libsqlite3.so.0
#1  0x0000787ddfb9ba1e in ?? () from /lib/x86_64-linux-gnu/libsqlite3.so.0
#2  0x0000787ddfbaad47 in sqlite3_column_int () from /lib/x86_64-linux-gnu/libsqlite3.so.0
#3  0x00005eacf0341776 in ocpp::common::SQLiteStatement::column_int (this=0x787dd008bba0, idx=1) at /home/james/code/everest/workspace/libocpp/lib/ocpp/common/database/sqlite_statement.cpp:124
#4  0x00005eacf04de60d in ocpp::v201::DeviceModelStorageSqlite::get_variable_attributes (this=0x5eacf22cb850, component_id=..., variable_id=..., attribute_enum=std::optional = {...})
    at /home/james/code/everest/workspace/libocpp/lib/ocpp/v201/device_model_storage_sqlite.cpp:210
#5  0x00005eacf04de2b8 in ocpp::v201::DeviceModelStorageSqlite::get_variable_attribute (this=0x5eacf22cb850, component_id=..., variable_id=..., attribute_enum=@0x787dabfffb44: ocpp::v201::AttributeEnum::Actual)
    at /home/james/code/everest/workspace/libocpp/lib/ocpp/v201/device_model_storage_sqlite.cpp:173
#6  0x00005eacf04c4093 in ocpp::v201::DeviceModel::request_value_internal (this=0x5eacf228caf0, component_id=..., variable_id=..., attribute_enum=@0x787dabfffb44: ocpp::v201::AttributeEnum::Actual, value="", allow_write_only=true)
    at /home/james/code/everest/workspace/libocpp/lib/ocpp/v201/device_model.cpp:236
#7  0x00005eacf0022429 in ocpp::v201::DeviceModel::get_value<int> (this=0x5eacf228caf0, component_variable=..., attribute_enum=@0x787dabfffb44: ocpp::v201::AttributeEnum::Actual)
    at /home/james/code/everest/workspace/libocpp/include/ocpp/v201/device_model.hpp:156
#8  0x00005eacf03cc2ec in operator() (__closure=0x5eacf22c3a78) at /home/james/code/everest/workspace/libocpp/lib/ocpp/v201/charge_point.cpp:1119
#9  0x00005eacf03f78c4 in std::__invoke_impl<void, ocpp::v201::ChargePoint::init_websocket()::<lambda()>&>(std::__invoke_other, struct {...} &) (__f=...) at /usr/include/c++/13/bits/invoke.h:61
#10 0x00005eacf03f55c2 in std::__invoke_r<void, ocpp::v201::ChargePoint::init_websocket()::<lambda()>&>(struct {...} &) (__fn=...) at /usr/include/c++/13/bits/invoke.h:111
#11 0x00005eacf03f30b4 in std::_Function_handler<void(), ocpp::v201::ChargePoint::init_websocket()::<lambda()> >::_M_invoke(const std::_Any_data &) (__functor=...) at /usr/include/c++/13/bits/std_function.h:290
#12 0x00005eacefe17ef6 in std::function<void ()>::operator()() const (this=0x5eacf22c3a78) at /usr/include/c++/13/bits/std_function.h:591
#13 0x00005eacf063b95d in operator() (__closure=0x5eacf232c1b0) at /home/james/code/everest/workspace/libocpp/lib/ocpp/common/websocket/websocket.cpp:76
#14 0x00005eacf063ce7c in std::__invoke_impl<void, ocpp::Websocket::register_disconnected_callback(const std::function<void()>&)::<lambda()>&>(std::__invoke_other, struct {...} &) (__f=...) at /usr/include/c++/13/bits/invoke.h:61
#15 0x00005eacf063c9c4 in std::__invoke_r<void, ocpp::Websocket::register_disconnected_callback(const std::function<void()>&)::<lambda()>&>(struct {...} &) (__fn=...) at /usr/include/c++/13/bits/invoke.h:111
#16 0x00005eacf063c2b0 in std::_Function_handler<void(), ocpp::Websocket::register_disconnected_callback(const std::function<void()>&)::<lambda()> >::_M_invoke(const std::_Any_data &) (__functor=...)
    at /usr/include/c++/13/bits/std_function.h:290
#17 0x00005eacefe17ef6 in std::function<void ()>::operator()() const (this=0x5eacf232c1b0) at /usr/include/c++/13/bits/std_function.h:591
#18 0x00005eacf0645283 in operator() (__closure=0x787dabfffda0) at /home/james/code/everest/workspace/libocpp/lib/ocpp/common/websocket/websocket_libwebsockets.cpp:828
#19 0x00005eacf064ce6a in std::__invoke_impl<void, ocpp::WebsocketTlsTPM::close(ocpp::WebsocketCloseReason, const std::string&)::<lambda()>&>(std::__invoke_other, struct {...} &) (__f=...) at /usr/include/c++/13/bits/invoke.h:61
--Type <RET> for more, q to quit, c to continue without paging--c
#20 0x00005eacf064c606 in std::__invoke_r<void, ocpp::WebsocketTlsTPM::close(ocpp::WebsocketCloseReason, const std::string&)::<lambda()>&>(struct {...} &) (__fn=...) at /usr/include/c++/13/bits/invoke.h:111
#21 0x00005eacf064bc03 in std::_Function_handler<void(), ocpp::WebsocketTlsTPM::close(ocpp::WebsocketCloseReason, const std::string&)::<lambda()> >::_M_invoke(const std::_Any_data &) (__functor=...)
    at /usr/include/c++/13/bits/std_function.h:290
#22 0x00005eacefe17ef6 in std::function<void ()>::operator()() const (this=0x787dabfffda0) at /usr/include/c++/13/bits/std_function.h:591
#23 0x00005eacf064b2f0 in ocpp::WebsocketTlsTPM::handle_deferred_callback_queue (this=0x5eacf232c000) at /home/james/code/everest/workspace/libocpp/lib/ocpp/common/websocket/websocket_libwebsockets.cpp:1388
#24 0x00005eacf0659408 in std::__invoke_impl<void, void (ocpp::WebsocketTlsTPM::*)(), ocpp::WebsocketTlsTPM*> (
    __f=@0x5eacf2394ae0: (void (ocpp::WebsocketTlsTPM::*)(ocpp::WebsocketTlsTPM * const)) 0x5eacf064b1f0 <ocpp::WebsocketTlsTPM::handle_deferred_callback_queue()>, __t=@0x5eacf2394ad8: 0x5eacf232c000)
    at /usr/include/c++/13/bits/invoke.h:74
#25 0x00005eacf065935b in std::__invoke<void (ocpp::WebsocketTlsTPM::*)(), ocpp::WebsocketTlsTPM*> (
    __fn=@0x5eacf2394ae0: (void (ocpp::WebsocketTlsTPM::*)(ocpp::WebsocketTlsTPM * const)) 0x5eacf064b1f0 <ocpp::WebsocketTlsTPM::handle_deferred_callback_queue()>) at /usr/include/c++/13/bits/invoke.h:96
#26 0x00005eacf06592bb in std::thread::_Invoker<std::tuple<void (ocpp::WebsocketTlsTPM::*)(), ocpp::WebsocketTlsTPM*> >::_M_invoke<0ul, 1ul> (this=0x5eacf2394ad8) at /usr/include/c++/13/bits/std_thread.h:292
#27 0x00005eacf065922c in std::thread::_Invoker<std::tuple<void (ocpp::WebsocketTlsTPM::*)(), ocpp::WebsocketTlsTPM*> >::operator() (this=0x5eacf2394ad8) at /usr/include/c++/13/bits/std_thread.h:299
#28 0x00005eacf06591d0 in std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (ocpp::WebsocketTlsTPM::*)(), ocpp::WebsocketTlsTPM*> > >::_M_run (this=0x5eacf2394ad0) at /usr/include/c++/13/bits/std_thread.h:244
#29 0x0000787ddf917bb4 in ?? () from /lib/x86_64-linux-gnu/libstdc++.so.6
#30 0x0000787ddf5a1a94 in start_thread (arg=<optimised out>) at ./nptl/pthread_create.c:447
#31 0x0000787ddf62ec3c in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:78

There isn't an issues tab available to me.

Me neither :facepalm: @james-ctc thanks, this is very helpful. I've added an issue on our board.

@james-ctc is it possible for you to run the tests against the main EVerest/libocpp? I'm curious if you are getting the same error against K01FR02_CallbacksValidityChecksIfOptionalVariableChangedCallbackIsNotSetOrNotNull there. Thanks!

There isn't an issues tab available to me

The reason that there is no issues tab in this repo is that all the issues for this project are supposed to be in https://github.com/everest/everest
@folkengine since this looks like it happens even on main, I would suggest filing the issue in the everest repo, so that other developers can see it as well

core dump with test [ RUN ] ChargePointFixture.K01FR02_CallbacksValidityChecksIfOptionalEvseEffectiveOperativeStatusChangedCallbackIsNotSetOrNotNull  from commit
commit 2bc64f07c2981c5bb3e7d7c186073035d66392c4 (HEAD -> main, tag: v0.16.2, origin/main, origin/HEAD, US-JOET/main)
Author: Kai Hermann<EMAIL_ADDRESS>Date:   Tue Aug 27 19:18:51 2024 +0200

@shankari 'Tis done.

I want to start by appreciating the detailed documentation and sequence diagram in this PR. It really helped a lot with the review.
My top level comment is that this doesn't seem to support tariffs, either in the data structure (https://github.com/EVerest/libocpp/pull/745/files#diff-8d323d412965fe8a0e36a81391917726636742ca099cad43402ed5ef9171bb85R25) or in the examples (https://github.com/EVerest/libocpp/pull/745/files#diff-6db7040d530e9d5fecf07cd97aef7c865c9529a781150ed2576dc111c26d5d2aR9 and similar). I understand that the tariffs are optional, but they are part of the spec, and in all conversations I have had, they are expected to be a more popular mode of control than hard limits. I am fine with deferring this to a subsequent PR, but I would like to see an issue filed to track this gap before we merge this PR, so that we don't forget to make the changes.
Note also that I did not carefully validate the expected outputs of the tests. For example, the numbers (2000, 1, 1, 0) seem resonable but I have not done the math to verify them. I assume that the community review will check this with a fine-tooth comb.
    ASSERT_EQ(period_01.limit, 2000);
    ASSERT_EQ(period_01.numberPhases, 1);
    ASSERT_EQ(period_01.stackLevel, 1);
    ASSERT_EQ(period_01.startPeriod, 0);

Detailed comments follow...

I want to start by appreciating the detailed documentation and sequence diagram in this PR. It really helped a lot with the review.
My top level comment is that this doesn't seem to support tariffs, either in the data structure (https://github.com/EVerest/libocpp/pull/745/files#diff-8d323d412965fe8a0e36a81391917726636742ca099cad43402ed5ef9171bb85R25) or in the examples (https://github.com/EVerest/libocpp/pull/745/files#diff-6db7040d530e9d5fecf07cd97aef7c865c9529a781150ed2576dc111c26d5d2aR9 and similar). I understand that the tariffs are optional, but they are part of the spec, and in all conversations I have had, they are expected to be a more popular mode of control than hard limits. I am fine with deferring this to a subsequent PR, but I would like to see an issue filed to track this gap before we merge this PR, so that we don't forget to make the changes.
Note also that I did not carefully validate the expected outputs of the tests. For example, the numbers (2000, 1, 1, 0) seem resonable but I have not done the math to verify them. I assume that the community review will check this with a fine-tooth comb.
    ASSERT_EQ(period_01.limit, 2000);
    ASSERT_EQ(period_01.numberPhases, 1);
    ASSERT_EQ(period_01.stackLevel, 1);
    ASSERT_EQ(period_01.startPeriod, 0);

Detailed comments follow...

Hey @shankari , I wanted to just note some of the things we talked about on Thursday last week with regard to Composite Schedule.
The CompositeScheduleType within OCPP 2.0.1 does not include any tariff information (see page 390-391 of OCPP 2.0.1 Part 2 - Specification). This is because Composite Schedule is solely meant to share the charging level, max power or amperage, of all the applicable profiles at a point in time.
Remarks for section K08 on page 262: "The Composite Schedule that will guide the charging level is a combination of the prevailing Charging Profiles of the different chargingProfilePurposes.
This Composite Schedule is calculated by taking the minimum value for each time interval."
Tariffs only come in to play when running a smart charging session with ISO 15118 (sections K15-K17). Figure 115, on page 275, shows that a unique charging profile must sent from the CSMS to the EVSE that will include the tariff information. This unique charging profile must be sent for every new session (and renegotiations) attempting to negotiate through 15118.
The confusing part comes when we ask "how do these unique charging profiles (that include overlapping charging schedules and overlapping charging schedule periods) affect the composite schedule?" Now my brain already hurts just asking the question. Would love to hear your take on it. We are working with the community as well on how we should handle these situations.

The confusing part comes when we ask "how do these unique charging profiles (that include overlapping charging schedules and overlapping charging schedule periods) affect the composite schedule?" Now my brain already hurts just asking the question. Would love to hear your take on it. We are working with the community as well on how we should handle these situations.

@Giavotto agree that this is confusing. I would suggest creating an issue with this comment as the description in the public everest/everest repo, and we can continue the conversation there. This PR is going to be merged soon, and is not a good candidate for long-term discussion.

There currently is another issue with the test cases in the CI in addition to this. We are currently looking into it. I'll merge this once we sorted it out.

There currently is another issue with the test cases in the CI in addition to this. We are currently looking into it. I'll merge this once we sorted it out.

The issue has been fixed with: https://github.com/EVerest/libocpp/pull/771 . Can you please resolve the conflicts? @folkengine

The DCO is now failing

The DCO is now failing

@Pietfried resolved

There currently is another issue with the test cases in the CI in addition to this. We are currently looking into it. I'll merge this once we sorted it out.

The issue has been fixed with: #771 . Can you please resolve the conflicts? @folkengine

@Pietfried This build is passing on our REPO


How to setup two cameras both with audio?

I have two Ezviz cameras setup with WebRTC, both working fine.
What I noticed is that the audio button is visible or on one camera, or in the other, but never on both.
Am I maybe doing something wrong?
Thank you for any help

Check status icon https://github.com/AlexxIT/WebRTC#status-icons

Availability of audio depends on the stream codec and selected streaming technology


pages not showing up, 404 error

I tried to use Comfortable mexican sofa in my existed application.
I add domain for site (b.-----.com), add page for //b.-----.com/abouts/ and try to go to http://b.****.com/abouts/ but i get 404 error.
routes says this:
                    sidekiq_web                   /sidekiq                                                                      Sidekiq::Web
                    comfy_cms_render_css GET      /cms-css/:site_id/:identifier(/:cache_buster)(.:format)                       comfy/cms/assets#render_css
                    comfy_cms_render_js GET       /cms-js/:site_id/:identifier(/:cache_buster)(.:format)                        comfy/cms/assets#render_js
                    comfy_cms_render_page GET     /(*cms_path)(.:format)                                                        comfy/cms/content#show
                    websocket GET                 /websocket(.:format)                                                          websocket_rails

Could websocket_rails make it stop working, shall i test disable websocket rails? this is not anything i set manually.

I don't see why the page wouldn't load. Watch the log and you'll see what's getting hit.
Also that websocket path is not accessible anymore. Globbing route has to be last.
Actually that gem is appending routes instead of prepending: https://github.com/websocket-rails/websocket-rails/blob/master/lib/websocket_rails/engine.rb#L10 That's wrong and needs to be fixed.

okay, i have test around a bit and now i can make it work on the test environment but not in production, so i am probably doing some settings wrong here. It goes to right path, but it goes not to CMS.

Okay, i tested reset the db and run migration again, and magically that worked. Pretty weird if you ask me.
Thanks for the help anyway and for a amazing CMS!


Feat: Close on esc

I think it would be very useful to be able to close syspower by pressing the escape key

@justDeeevin Consider your wish granted!


Build failing on master.

See my comments on #541 (unrelated, but I discovered the problem there)

This is a bug/change in jasmine-core equal methods (released yesterday). Works in 2.1.x but not in 2.2.0. We'll investigate this as a low priority fix.

Looking at the changelog for 2.2.0 and the changelog for 2.2.1, it looks like there were some changes to some Jasmine equality checks. Looking at the newly failing test, the two sides are identical. So there must be a bug in the jasmine-core stuff. I'll put a PR together which pins us to the earlier version of jasmine-core so that these stop failing.

I think this item from the jasmine-core 2.2.0 changelog is the issue:

Check custom properties on Arrays when computing equality

Fix coming in hot.


Form component for static text

Summary
The old forms had a static input option to show plain text in the flow of a form. This is basically allowing for text in place of a text input but retaining formatting. The main question is what is the styling of the text in this case.
Use case
This is used in cases where content may not be editable but still show up in a form and to match the layout.
Examples
https://vmware.github.io/clarity/documentation/v0.11/forms
Workarounds
You can put a span inside of the CSS structure manually to get the layout, but it is not supported with Angular components.

  Label

    My static text

Styling exists in this form elements file which matches the styling of the current forms:
https://www.figma.com/file/W2gCMtLUgR2BicLus4anti/forms?node-id=0%3A1

Need to clarify which example is the correct design for static text.

@gnomeontherun I will excerpt the specific design from the existing spec and add it to this issue as the static text design spec.

@colinreedmiller

The workaround above is not enough. You also need to add this style:
.clr-span {
  color: #000;
  font-size: .541667rem;
}

Then add the style to the span.

Hopefully some day this could be added to clarity. We keep needing this everywhere.

You can also use a readonly input to display this. However, with Clarity Core this is possible and now documented through #5572. Closing as resolved.


Repo description not provided

There is no description, no attached links and no tags in the "about" section

ADDED , see and let me know if everything added ! the website link might not work ! but i will setup that soon !

@PraveenMalethia it is okey 👍🏼


Search SDK: Cannot merge null values using Index/IndexAsync

After more investigation, I found that the client serializer is overriding my NullValueHandling variable by setting it to Ignore.
This is highly problematic as if I try to do "IndexAsync" with null values, they simply do not go to the index! This is for the case or MergeOrUpload.
Basically, an upload with property set to null not being sent is fine. But the merge is not. I need to send the null!

One workaround would be to use Document instead of your own model type to merge changes. Not ideal, but if you're really stuck it is an alternative. In the meantime we'll think about how best to fix this.

@brjohnstmsft I think using a Document will do the same.
It ends up calling CreateSerializerSettings which will override the NullValueHandling.

It should work; we have test coverage for the Document case. See CanMergeDynamicDocuments in this file: https://github.com/Azure/azure-sdk-for-net/blob/AutoRest/src/Search/Search.Tests/Tests/IndexingTests.cs

@brjohnstmsft My apology, it is working yes. I thought Document was using a dynamic, but it is a Dictionary so it's treated a little different.
Here is some code for people who wants to convert their <T> into a Document
`
private Document GetDocument(T obj)
{
var doc = new Document();
foreach (var m in typeof(T).GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance))
{
doc.Add(m.Name, m.GetValue(obj, null));
}
        return doc;
    }

`

I did some testing and found a way to get the right merge semantics, at least on a per-field basis. The trick is to specify [JsonProperty(NullValueHandling = NullValueHandling.Include)] on any properties for which this should apply. See the referenced PR for examples.
We looked at more comprehensive ways of fixing this (e.g. -- introducing some type of Delta<T> class that knows when its properties have been set) and they all had fairly ugly tradeoffs. We're closing this for now unless we get more feedback that this is causing a lot of problems for people.

@brjohnstmsft Thanks for the update. This is exactly how I wanted to treat my null values, but back when I opened the bug, your serializer was somehow overriding my settings... maybe this changed, or I wasn't aware of this contract serializer.

@jsgoupil Nothing changed in the implementation, I just found a way to override NullValueHandling on a per-property basis instead of globally. It does require changes to the model class to add the [JsonProperty] attribute though.

@brjohnstmsft  I found it finally, I'm not familiar with your code structure on github (it seems that most of the code is generated), but I found this by decompiling the DLL.
// Microsoft.Azure.Search.DocumentsOperations
public Task<AzureOperationResponse> IndexWithHttpMessagesAsync(IndexBatch batch, SearchRequestOptions searchRequestOptions = null, Dictionary<string, List> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken))
{
...
JsonSerializerSettings settings = JsonUtility.CreateDocumentSerializerSettings(this.Client.SerializationSettings);
And this line overrides the NullValueHandler.
So instead of having to set this JsonProperty everywhere, if this code was not overriding the SerializationSettings, we could have it set at only one spot.

Yes, the behavior of CreateDocumentSerializerSettings is intentional and we need it to be the default for a couple reasons:

For very wide indexes, we don't want to serialize many, many nulls. This would greatly increase the size of batches, consuming bandwidth and server resources.
For merges where you forget to set a nullable property, it is much safer for the default behavior to be "ignore this field" instead of "overwrite this field with null".

Point 2 is especially important. That's why it's better to explicitly opt in to NullValueHandling.Include. I looked for a way to do this globally via SerializationSettings, but that isn't possible because Include is the default, so CreateDocumentSerializerSettings has no way of knowing whether it was set explicitly or not. That leaves the current workaround of setting it on a per-property basis via [JsonProperty].

@brjohnstmsft I am not sure I see the scenario... Let me explain this scenario.
Imagine you have this saved in Azure Search
class A {     public int? Z     public int? Y     public string X     public string V }
If I load a bunch of A from the search, do some manipulation on the properties, including setting some to NULL, my intent is definitely to propagate the correct data to the service. In your current case, you are saying I should have this heavy JsonProperty on every single nullable properties. I would never set a property to NULL because I don't want it to be updated on the server or improve performance. It makes no sense.
Now the scenario I think you are trying to cover is if I do a "Select" in the Search Parameter. In this case, if I request Z and Y, obviously I don't have X and V so them being sent with NULL would be incorrect. However, if I'm about to request only Z and Y, I should have another class so I don't carry null properties around in my app. So I would have
class APrime {     public int? Z     public int? Y }
In this case, once again, if I change Z to be null, and Y to be another integer, my intent is pretty clear what I'm trying to do.
This is why I'm proposing that if I set this NullValueHandling.Include globally, I am well aware of what I am doing. I can handle your points 1 and 2 by having my prime classes. I don't think the SDK should forbid me from doing this.
This null value handling is such a big deal for your SDK, you should not rely solely on JSON.net for deciding of this behavior. I propose that you should have your own setting for controlling such thing.
All properties on Azure Search are Nullable. Which means if I decide to have all my properties Nullable in my concrete class, it means I expect that I can set these values to NULL. I can't code a class with Nullable that I give to my developer and expect them to know that they are NOT ALLOWED to set it to NULL, because NULL actually means "performance". If my intent is to NOT have nullable properties, then I'll have a normal "int". Then if I want to control what is being sent to Azure, I will have prime classes like above.

@jsgoupil Your analysis is ignoring one important dimension: Merge versus Upload. If your intent is to set every single property to some value including possibly null, then you can do that today: Just use Upload instead of Merge.
The problem with Merge and NullValueHandling.Include would happen when somebody does this:
// I want to change the values of Z and X, but leave Y and V unchanged.
doc.Z = "new value";
doc.X = 123;

client.Documents.Index(IndexBatch.Merge(new[] { doc }));

// If we use NullValueHandling.Include, then Y and V get clobbered and data is lost.

To recap, if you want to set all the properties, use Upload. If you want to set only some properties, use Merge. If you need to set some of those properties explicitly to null, either use the untyped overload of Index/IndexAsync or use [JsonProperty] on your model class.
I agree that these options are not perfect, and that some way to override the NullValueHandling setting globally would be better. However, every scenario is at least possible today.
Other than this thread, we haven't had any customers report this as an issue. Right now we're focused on shipping a new preview version of the SDK that will include new features; It's unlikely we're going to add a global way to override NullValueHandling any time soon. That said, this is open source, so if you want you can contribute a PR. Let me know if you're interested in doing that, and if so I'll re-open the issue.
Likewise, if more customers let us know that this is a real pain point, we'll re-open this.

@brjohnstmsft I appreciate your time. I will start using Upload starting from now then. In my case, I was mistakenly using MergeOrUpload... I didn't know that MergeOrUpload would behave like Merge and not Upload (since it has both word in it.) My thought was that Upload would fail if it's already in the index. Not true... This is why I was using MergeOrUpload.
In the example that you wrote above. This is performing only "faster" if you actually loaded the doc without V and X. It is a bit confusing, but I see that all scenarios seem to be supported.
Thanks again :+1:


Connect buttons to switch to the second screen

[ ] Transfer the text from input page to the audio player page
[ ] Get rid of the buttons to switch between screens

#35


503 page, misspelling, and wrong redirect

On the 503 page, please change
Well Bee with your shortly.....
to read
We'll Bee with you shortly.....
Also, when the page redirects, it should redirect back to https://<host>/share/page/dologin rather than https://<host>/index.html

done


ConvexHullGenerationException for simple square

I believe I have found a very simple case for which a delaunay triangulation cannot be calculated. The points used are:
(-1, -1),
(-1, 1),
(1, -1),
(1, 1)
I believe any square across (0, 0) will cause a ConvexHullGenerationException to be thrown when calling DelaunayTriangulation<...>.Create(..);

Yes, this is a special case that David and I talked about years ago. I think there is a solution, but I think the code will need to be cleaned up first to discover the best place to put it. One solution was to add noise to the points which give the system robustness since equal and opposite coordinates seem to cause issue.

Hi Matt, thank you for your reply. Are there any plans to patch this soon?

I stumbled on another similar example:
(-1, 0), (0, 1), (1, 0), (0, -1)
Throws a general exception somewhere in FindInitialPoints().

I've got some discovered that this extends to any regular polygon centered on (0,0) for which the points can be represented exactly.
Also, perhaps this is a related issue but a different case, these points:
(0,0)
(0,50)
(5000,0)
(5000,50)
Do not throw an exception, but return a triangulation with 0 triangles.

Hello,
stumbled upon the same problem while upgrading from nuget <IP_ADDRESS>4 to <IP_ADDRESS>9.
Will revert to the previous version for now, but would happily test any fix.
Cheers

Hello,
I seem to have found additional weirdness with simple squares. Using d5f3a77489f7f6c29ad954b29bfeaf8e4f4b646b (Oct 19, 2019) I get a similar exception about it being degenerate using these points:
(100, 100)
(100,<PHONE_NUMBER>9999996)
(438, 100)
(438,<PHONE_NUMBER>9999996)
This seems to be in ConvexHullAlgorithm.FindInitialPoints() where it detects a negligible volume.
Interestingly enough, if I instead use the following (just use MakeGrid(2, vs) instead of (10, vs) in Project 4) it generates an invalid triangulation (3 triangles where one overlaps the other 2):
(0, 0)
(0,<PHONE_NUMBER>9999996)
(538, 0)
(538,<PHONE_NUMBER>9999996)
Also, if I update to the newest version (241b1179e63d12e80ea689436bc37045553a53eb) from  July 12, 2020 then the first set of points no longer give an exception and instead generate 2 triangles but they are still invalid as they half-way overlap. The second set of numbers continue to generate 3 triangles that overlap. Not sure if any of that helps narrow down the issue.
Thanks so much for this useful library!

Hello,
I seem to have found additional weirdness with simple squares. Using d5f3a77489f7f6c29ad954b29bfeaf8e4f4b646b (Oct 19, 2019) I get a similar exception about it being degenerate using these points:
(100, 100)
(100,<PHONE_NUMBER>9999996)
(438, 100)
(438,<PHONE_NUMBER>9999996)
This seems to be in ConvexHullAlgorithm.FindInitialPoints() where it detects a negligible volume.
Interestingly enough, if I instead use the following (just use MakeGrid(2, vs) instead of (10, vs) in Project 4) it generates an invalid triangulation (3 triangles where one overlaps the other 2):
(0, 0)
(0,<PHONE_NUMBER>9999996)
(538, 0)
(538,<PHONE_NUMBER>9999996)
Also, if I update to the newest version (241b1179e63d12e80ea689436bc37045553a53eb) from  July 12, 2020 then the first set of points no longer give an exception and instead generate 2 triangles but they are still invalid as they half-way overlap. The second set of numbers continue to generate 3 triangles that overlap. Not sure if any of that helps narrow down the issue.
Thanks so much for this useful library!

The following 2D points also generate ConvexHullGenerationException exception in Triangulation.CreateDelaunay:
(0, 0),
(0, -2),
(-0.71, -1.5),
(-0.71, -0.5)

The following 2D points also generate ConvexHullGenerationException exception in Triangulation.CreateDelaunay:
(0, 0),
(0, -2),
(-0.71, -1.5),
(-0.71, -0.5)


In a gap-fill with "sort answers" enabled, the gaps should be sorted by expected answer

It's not obvious that the gaps need to be in order of expected answer. For example, if you have two number entry gaps with expected answers of 3 and 1, no ordering of answers will be marked correct because the lowest student answer will be marked against the first gap, whose expected answer is 3.
The gaps should be sorted by expected answer, so the first item in the sorted list of student's answers is marked against the gap whose expected answer sorts before the rest.

The difficulty is that there's no generic means of getting the expected answer as a JME token.
In fact, there are difficult cases even in just the number entry type: if the gaps are as follows:

between 1 and 100
between 30 and 40

how should the expected answers be sorted?
I think the "sort answers" option is misconceived, and there should instead be something like "try every permutation of the answers and take the highest credit"


Fixes for gcc 10.3.0

These changes fix issues with gcc 10.3.0:

"ignoring return value of ... declared with attribute ‘warn_unused_result’". Fixed by negating the unused return value according to comment 34 on https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66425#c34
"accessing 1 byte at offsets x and y may overlap 1 byte at offset y" in filepath.ccp. Looks as if the affected method Filepath::Make is never called, so I just removed it.
"climits" has to be included for the LLONG_MAX definition

Note that I stumbled upon these issues when cross-compiling on Ubuntu 21.04.

Thank you very much for the pull request @uweseimet !!!! Please let me know if you disagree with any of my suggestions.


AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY for S3 access

updated deployment.yaml and values.yaml to accept params access_id and access_secret for AWS S3

@larribas I made a revision to accommodate S3 credentials


MMConnect is not working in EU due to EU CareLink service changes (28.06.2020)

Hi!
There was a major upgrade in EU CareLink services (28.06.2020) and since then MMConnect module is not working anymore in EU.
Login changed
https://carelink.minimed.eu/patient/j_security_check?j_username=&j_password= throws HTTP 400
EU CareLink seems to using now the following service for logins:
https://mdtlogin.medtronic.com/mmcl/auth/oauth/v2/authorize/login
Dataservice changed
https://carelink.minimed.eu/patient/connect/ConnectViewerServlet?cpSerialNumber=NONE&msgType=last24hours&requestTime= throws HTTP 404
EU CareLink connect webapplication seems to be using the following service to fetch SGV values:
https://carelink.minimed.eu/patient/connect/data?cpSerialNumber=NONE&msgType=last24hours&requestTime=
The returned SGV data seems to be the very same JSON as earlier
lastSensorTSAsString
bgunits
lastSensorTS
...
lastSGTrend
lastSG{}
lastAlarm{}
activeInsulin{}
sgs[]
limits[]
markers[]
Could you please change the MMConnect module to support the new EU CareLink Connect services?
Thank you!

Yes, let's see what we can do.

Were you able to see if the cookie name is the same, or if there is possibly a different token used?  If I post to a branch/fork somewhere are you able to test?

FWIW I'm potentially available to help with any final end-end testing - I'm running a herokuapp for my data through the eu minimed site.

FWIW I'm potentially available to help with any final end-end testing - I'm running a herokuapp for my data through the eu minimed site.

Hi @raferg, I tried deploying your solution to my Nightscout installation but I get the following error when attempting to get data from Carelink:
2020-07-02T09:58:08.422869+00:00 app[web.1]: Thu Jul 02 2020 09:58:08 GMT+0000 (Coordinated Universal Time) Logging in to CareLink
2020-07-02T09:58:08.423034+00:00 app[web.1]: Thu Jul 02 2020 09:58:08 GMT+0000 (Coordinated Universal Time) POST https://mdtlogin.medtronic.com/mmcl/auth/oauth/v2/authorize/login
2020-07-02T09:58:08.774776+00:00 app[web.1]: MiniMed Connect error: Error [ERR_TLS_CERT_ALTNAME_INVALID]: Hostname/IP does not match certificate's altnames: Host: carelink.minimed.eu. is not in the cert's altnames: DNS:mdtlogin.medtronic.com, DNS:mdtsts.medtronic.com

Is there anything that can be done about this?

@idowolf follow the https://github.com/nightscout/minimed-connect-to-nightscout/pull/1 link those solutions do work

Please see https://github.com/nightscout/cgm-remote-monitor/pull/5725 for getting hotfix for cgm-remote-monitor.


[hi] Add README file for Hindi

This is a simple Hindi readme file.

/retitle [hi] Add README file for Hindi

/hold
Apply hold on this PR to avoid accidental merge.
There is already README.md file present for Hindi (here).


Added a note on ambiguous tracks

Should I also add a link to the code Anton and I wrote to reassociate ambiguous tracks to the collision with smallest DCA ? As an example of how to reassociate them ? (https://github.com/AliceO2Group/O2Physics/blob/master/PWGMM/Mult/TableProducer/trackPropagation.cxx)

Should I also add a link to the code Anton and I wrote to reassociate ambiguous tracks to the collision with smallest DCA ? As an example of how to reassociate them ? (https://github.com/AliceO2Group/O2Physics/blob/master/PWGMM/Mult/TableProducer/trackPropagation.cxx)

I think it would be a very worthwhile addition! Can you please take care, @sarahherrmann ? Thanks!


Sometimes packages are missing when using the new linkable

Error: Did not find package @k8slens/react-testing-library-discovery in lockfile, please use 'add' command to add it explicitly.

Sometimes happens when removing node_modules

Fixed by https://github.com/lensapp/lens/pull/7800


[feature] @OneToMany(type, (type)=> type.property)

@OneToMany(type => Thing, thing => thing.foo, {nullable: true})
Using this syntax is more type safe than {mappedBy: 'foo'}

Can this be really type checked? I guess then it's required to use multiple parameters instead of just one object hash...
But yes, if it's possible I am all for better type checks :]

I like the way that typeorm defines things better... https://typeorm.io/#/many-to-one-one-to-many-relations
Strings are ugly.

Strings are ugly.

Well, string itself is not a problem, strings can be type checked too via keyof :]

Yes, but likely an IDE can't refactor it as easily.

Sure, I am fine with proposed syntax as well, will take a look into this later and let you know. Adding new and more strict way to define entities is always welcome.

Available for testing in 3.0.0-alpha.13 (not yet pushed to git, will finalize and add docs tomorrow). Includes all relationship decorators, adds type checking for current options version (via keyof) as well as adds the proposed syntax.
  @OneToOne(() => FooBaz, baz => baz.bar, { owner: true, orphanRemoval: true })
  baz: FooBaz ;

This seems working, so close whenever you want.

Also added relationships section into docs: https://github.com/mikro-orm/mikro-orm/blob/dev/docs/relationships.md

just tested it... works great!


How to ignore FormData?

I have a fetch method in our production code that creates new FormData()
I suspect this is the reason I keep getting Unmatched POST to [url] error.
How do I ignore the body? I've tried matchPartialBody: true in the options, but that does not work.

Sorry, this is not enough information to understadn the issue. Please reopen with more information if still needed


Cannot open display browser:99, error 1. browser:99: I/O error

when i run webdriver.Remote() in my program for some times ,the first few times success,after 3 or more times，errors as follows:
program error:
selenium.common.exceptions.SessionNotCreatedException: Message: wait: http://<IP_ADDRESS>:4444/ does not respond in 1m0s
selenoid contaioner logs:
2022/03/09 04:17:55 [948] [SERVICE_STARTUP_FAILED] [wait: http://<IP_ADDRESS>:4444/ does not respond in 1m0s]
video_record container logs:
Sleeping before next attempt...
Sleeping before next attempt...
ffmpeg version 4.3 Copyright (c) 2000-2020 the FFmpeg developers
built with gcc 9.3.0 (Alpine 9.3.0)
configuration: --prefix=/usr --enable-avfilter --enable-gpl --enable-libx264 --enable-libpulse --enable-static --enable-small --disable-ffplay --disable-ffprobe --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages --disable-w32threads --disable-alsa --disable-audiotoolbox --disable-cuda --disable-cuvid --disable-d3d11va --disable-dxva2 --disable-nvenc --disable-vaapi --disable-vdpau --disable-videotoolbox --disable-librtmp --disable-devices --enable-indev=xcbgrab --enable-indev=pulse --disable-debug
libavutil      56. 51.100 / 56. 51.100
libavcodec     58. 91.100 / 58. 91.100
libavformat    58. 45.100 / 58. 45.100
libavdevice    58. 10.100 / 58. 10.100
libavfilter     7. 85.100 /  7. 85.100
libswscale      5.  7.100 /  5.  7.100
libswresample   3.  7.100 /  3.  7.100
libpostproc    55.  7.100 / 55.  7.100
[x11grab @ 0x7ff23a8633c0] Cannot open display browser:99, error 1.
browser:99: I/O error
need help,thanks a lot

@EzrealerQAQ need browser container logs.

@EzrealerQAQ probably your cluster is just overloaded.

@vania-pooh deploy stand alone by docker,ram 200G+ left，cpu 1.7 used ，storage 5T left, i'll try to deploy in a new server

but it seems the reson of error is about ffmpeg or x11grap as
[x11grab @ 0x7ff23a8633c0] Cannot open display browser:99, error 1.
browser:99: I/O error

@EzrealerQAQ video recorder is unable to access X server because it does not start for some reason. X server is anyway started in browser container. These messages Waiting X server... should take 1-2 seconds maximum. Probably you are also running Selenoid in some restricted environment.

@vania-pooh thank you very much,i can't find what to prevent X server from start,maybe a new clear server would work...

@EzrealerQAQ we are testing everything under Ubuntu. in case of using CentOS probably turning off SELinux can help.

@vania-pooh i use centos7,
[root@ezrealer selenoid]# getenforce
Disabled
and anthor new clear server also don't work...

@vania-pooh
i add try as follows:
while True:
try:
driver = webdriver.Remote(command_executor=command_executor,
desired_capabilities=capabilities, options=self.options)
break
except Exception as e:
print(e)
time.sleep(1)
every try could  success,so strange...

i add try to my program
        while True:
            try:
                driver = webdriver.Remote(command_executor=command_executor,
                                          desired_capabilities=capabilities, options=self.options)

                break
            except Exception as e:
                print(e)
                time.sleep(1)

every try could success,so strange....

@EzrealerQAQ try under Ubuntu is possible.


Turn on dependabot?

https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuring-dependabot-version-updates

probably a good idea, i'll look into this soon.

It's actually on, I think has been for a while. Closing.


PoloySharp blocked by windows path length (260) limit

Description (optional)
If Project foder path legth is larger then 72, Generating file might fail due to path is longer then 260.
Reproduction Steps

Create a csproj in folde like
C:\Users\dummy\project\dummyrepor\dotnetbackend\dummyrepo.somebasementrepo\
Import PolySharp
Build

Expected Behavior
Build success.
Actual Behavior
Got Build Error:
CS0016	could not write to output“C:\Users\dummy\project\dummyrepor\dotnetbackend\dummyrepo.somebasementrepo\obj\Debug\netstandard2.0\generated\PolySharp.SourceGenerators\PolySharp.SourceGenerators.PolyfillsGenerator\System.Runtime.CompilerServices.InterpolatedStringHandlerArgumentAttribute.g.cs” ........
System info

PoloySharp Version: PackageVersion Include="PolySharp" Version="1.14.1"
Operating System: Windows 11 Professional 23H2
dotnet version 8.0.400
Visual studio version 17.11.4

Additional context (optional)
Can we remove the repeated PolySharp.SourceGenerators in the path to reduce path length ?

Hey, if you are using Windows 10 or 11, you can enable "Long Paths" using Group Policies or the Registry.


Better explain how the nodeKey function is related to WidgetKey

Hello, this is a minor correction on the document 06-composite.md. It is a clarification between the relationship between WidgetKey, WidgetId and Path.
Changes

Specify that  WidgetKey is the user facing key we attach to a node. Relate it to WidgetId and Path which are internal identifiers.
Say that the nodeKey function sets a custom WidgetKey that is stable between merges. This is apart from the other widgetKey related functions.

@RubenAstudillo thank you!


Updated Validations.py Closes: #1

Fixes #<issue_number_goes_here>

It's a good idea to open an issue first for discussion.

[ ] Tests pass
[ ] Appropriate changes to README are included in PR @marga-google

@googlebot I signed it!


Update Globals “nav”

Automatically generated by Netlify CMS

👷 Deploy Preview for benevolent-muffin-215770 processing.

Name
Link

🔨 Latest commit
5c1e532e55d8cb6ccdaf0819ab627b6a4825e3de

🔍 Latest deploy log
https://app.netlify.com/sites/benevolent-muffin-215770/deploys/6284246bd083be000857617b


The slice pitch for 1D array image corresponds to a 1D array slice, but the test was computing it as 2D resulting in an incorrect slice pitch after aligning to the slice pitch alignment.

Merging as discussed in the March 28th teleconference.


[TB] Deploy Theme Builder through FINOS

Problem/Concern
We currently have a version of Theme Builder, using local storage for storing themes, running on Netlify (https://main--loquacious-biscuit-2083c6.netlify.app/).  This issue is to track the effort to achieve the same ends using FINOS infrastructure.  @maoo said that FINOS usually achieves this using GitHub actions to deploy the static content.
Proposed Solution

If possible, we should achieve this by All Things Open, to further emphasize that we are a FINOS project.

Hi @aaronreed708 ! I've configured Netlify as follows....

However the build fails, I've uploaded logs on https://gist.github.com/maoo/fdb1867297c232da50f4cd5d81b97302
Note that Node version is v18.18.0 (npm v9.8.1) - see https://gist.github.com/maoo/fdb1867297c232da50f4cd5d81b97302#file-gistfile1-txt-L19
Could you try to reproduce the issue using your personal (free) Netlify account?

Hey Mao, it looks like the issue are these lines in the log:
10:15:41 AM: Treating warnings as errors because process.env.CI = true.
10:15:41 AM: Most CI servers set it automatically.
10:15:41 AM:
10:15:41 AM: Failed to compile.
I'm guessing that this is because of a difference in your configuration vs ours?  I don't own our deployment, and Bryce is on vacation until Monday.  I'll try to see if I can get this running tonight without these errors.

https://stackoverflow.com/questions/62663451/treating-warnings-as-errors-because-process-env-ci-true-failed-to-compile has a post about how to turn off CI env var on Netlify.
Does CI need to be on for FINOS or is this something we can turn off until we fix the issues?

@aaronreed708 - we can probably set environment variables at build level, should not be a problem.
Before trying different options on our build, I'd ask you to reproduce the issue on your own Netlify free account, which is free for open source projects.
Could you please sign up to netlify.com, import the project from GitHub and configure the build as mentioned above?
This would allow you to tweak the build as needed and find the right configuration that works for your project. At that point I'll just have to copy your settings.
Please let me know if you have problems with this approach, thanks!

@maoo I signed up for Netlify and tried to deploy my github repo.  It failed with the same build issue you saw.  I added CI=false to the environment and that fixed the build issue.  I then tried to import a design system from my laptop and it failed.  So I had to also set REACT_APP_STORAGE=local and now everything works well and I can import and save design systems.  So please set these in your Netlify environment:
CI=false
REACT_APP_STORAGE=local

Thank you @aaronreed708 , that worked! Please access the deployment on https://main--dapper-ganache-45a60b.netlify.app/
Which CNAME shall we use for this website? What about try.a11y-theme-builder.finos.org ?

Hi @maoo, we are good with try.a11y-theme-builder.finos.org. Thanks!

@aaronreed708 , it's done! http://try.a11y-theme-builder.finos.org/ - it may take few more minutes to enforce https
Feel free to close the issue if you there's nothing else pending.

Worked for me, closing.