How to achieve Autlogin

How to use the plugin achive an autologin for the user.
I mean now after the login I take the userId and the token. I send them to my server and I save them to my localStorage. Ok now the user closes the app and opens it again. Now I just send a new token that is generated from the server. I cannot find a workaround to reauthorize the user. The reauthorize() method do not work but still I cannot understand what is the right flow.
Can anyone suggest a flow for this ?. I cannot find something about that.
I use Ionic 5, Capacitor 4 and Angular 13

I think you must do this kind of operation via backend, store the token and in your app check if the user has that token, in that case you can grant the access.

@ciccilleju But with everylogin is a different token. If I store the token in localStorage and send it to my backend How Will I know if this token is valid? The user must login again to check if the token that sends to me is the same. But as I said the token may change after some logins.

no, that's not how it works.
this is the flow:

you call facebook's api getting a token and check if everything's fine in your backend (server side)
you store that token in your database
you send a "ok, this is the token, this token is good," to your client (your app) and you store it in locale storage.
when you access the app, you do a "get the token " from your local storage and send it to your backend, if the token is good->access the app, otherwise redirect to login page

@ciccilleju Oh now I understand. Ok thank you for the detailed answer and the steps. This was very helpful 👍

no problems! :) glad to be helpful


Improve getNotifications API

Applying changes for PR https://github.com/typescriptlibs/tsl-mastodon-api/pull/10

@mindlapse
Please let me know, if this is working for your implementation.

Hello @mindlapse, thank you for testing and your contribution.


Improved CS model, including HTS (high temperature superconductor)

In GitLab by @mkovari on Sep 21, 2016, 08:45
The model for the Central Solenoid could be made more sophisticated.  This might enable the pulse length to be extended.

[ ]  There is no good reason to apply an upper limit to the radial thickness ohcth.
[ ]  I don't know how the mutual inductance of the CS coil with the plasma is calculated - it doesn't seem to be in either of the PROCESS papers, or in the "full documentation" files.  We should check that the method used is valid for thick coils.
[ ]  The self-inductance seems to be incorrect and should be fixed - although this won't have much effect on the results.  Issue #396
[ ]  The peak field is described in the PROCESS physics paper.  The data are from M. Wilson, Superconducting Magnets (shelved at 621.318 W2 - see eq. 3.2 and fits to graph 3.3).  Note that the approximations used are only accurate if
outer radius /inner radius < 2, which may not apply. This may need to be fixed.  Also I believe the formulae only apply for homogenous magnets - it may be necessary to include corrections for discrete cables.
[ ]  There should be an option to divide the coil into two or more concentric sub-coils, with different current densities.  The field is lower on the outside of the coil so the superconductor in this region can have a bigger current density.
[ ]  Calculations involving the CS seem to generate error messages rather frequently (@jmorris-uk):

74     3   INDUCT: Negative square root imminent; raise ohcth or its upper limit

[ ]  As requested by EUROfusion, a High Temperature Superconductor (HTS) option based on REBCO conductor should be included. (See IDM)  This will require data from Klaus Weiss at KIT, and should be coordinated with the SYCOMORE team at CEA.  This will have to wait until the HTS TF coil model is finished.

Some of these points have been dealt with in other issues and some points can be spun out into separate issues.

We currently have a upper limit of 1m for the CS thickness. We know PROCESS will in some situation find machines with small bore and thick solenoids.
Agreed this poorly documented and this being looked at.
I think the mutual induction calculation is incorrect. This is being looked at currently, see here https://github.com/ukaea/PROCESS/discussions/3064
See https://github.com/ukaea/PROCESS/issues/1883
This is still currently not possible. Is this a high priority request?
See https://github.com/ukaea/PROCESS/issues/423
This is done.

I would recommend closing this issue and splitting any remaining tasks into other issues.

Based on @ajpearcey comments above I will close this issue and split up the remaining tasks into new issues.

Point 5 is now covered by #3259.


bug in _alloca() sample code - wrong logic leads to wrong result

Sample code on this _alloc() page is wrong
// If the stack overflows, use this function to restore.
errcode = _resetstkoflw();
if (errcode)

the Windows AP function _resetstkoflw() returns 0 when it fails.
Therefore the logic above if (errcode) is wrong
Please reference your own api documentation https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/resetstkoflw
Correct code would be
// If the stack overflows, use this function to restore.
errcode = _resetstkoflw();
if (!errcode)

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

ID: c271cd44-4e0d-ec43-387c-b4503515b1fb
Version Independent ID: ddc53d5e-b70e-0055-0f75-69138b2fa0ed
Content: _alloca
Content Source: docs/c-runtime-library/reference/alloca.md
Product: visual-cpp
Technology: cpp-ucrt
GitHub Login: @TylerMSFT
Microsoft Alias: twhitney

@diablodale, thank you for catching this. I've fixed the code sample and it should be live by tomorrow afternoon (1/6/2022)

LGTM


docs: translate content/docs/thinking-in-react.md and other related

Hi @elrmndo, I have updated this PR based on your comments, pls have a look again. thanks

Hi @elrmndo done with the suggestions again. Although the vercel deployment failed. Is there a manual way to trigger the deployment?

Hi @elrmndo done with the suggestions again. Although the vercel deployment failed. Is there a manual way to trigger the deployment?

I'm not really sure why build on vercel failed since I have no directly access on it, anws I have merged this PR. Thanks! @warrenca


Icons lose "inherited" color upon prop changing RN 0.63.2

[x] Review the documentation: https://github.com/oblador/react-native-vector-icons
[x] Search for existing issues (including closed issues): https://github.com/oblador/react-native-vector-icons/issues

Environment
Dev OS: MacOS
RN: 0.63.2
Target: Android
Version: 7.0.0 (also exists in 6.6.0)

Description
If you render one of the icon components like in this simple example:
import MuiIcon from 'react-native-vector-icons/MaterialIcons';

export default function ExampleComponent(props) {
  let myColorVariable = '#ffffff';
  if (props.someIndicator)
    myColorVariable = null; // this also behaves poorly with `undefined`
  return <MuiIcon name={"help"} color={myColorVariable} />
}

If the icon is rendered with the color prop specified as something non-null, and then a later render passes color={null} or color={undefined}, the icon "disappears". Presumably, this is because after the color has been specified once, it has trouble reverting to the "inherited" color. The icon works as expected going the other direction: unspecified color -> color prop changes and the icon renders with the new color.
This used to work just fine on at least RN <= 0.61.0, but after I upgraded to RN 0.63.2 this behavior began. Sorry I don't have info on exactly which version created the problem, but I figured I'd report nonetheless.

I'm pretty sure this is a change/regression in React Native itself. Can you double check that this also occurs with undefined as this is the default value.

@oblador it definitely does, as I mentioned. I tried both, curious if ‘undefined’ would work where ’null’ did not, but still the same results.

I did read your message but when I tried using 7.0.0 and RN 0.63.2 and they both show as black for me when using undefined but transparent when using null on Android (iOS is fine with both). Please double check or provide a repo demonstrating the issue with undefined.

@oblador Sorry for the delay, I haven't got around to testing this in isolation.
I did however (as I was working on some other things) notice the "regression" in React Native itself as you described. I had the same experience with a Text component (color going from "something" -> null made it disappear). Even with the Text component using undefined had the same affect for me sadly.
I know you're not able to reproduce the behavior with undefined, but it does seem like this confirms that it's an RN problem at least.

if i pass null to tintColor my icon is disappeared any solution?

this is my temporary solution
// typography.js
// https://ospfolio.com/two-way-to-change-default-font-family-in-react-native/
import React from 'react'
import { Text, StyleSheet } from 'react-native'
import { getColor } from 'tailwind'

export const typography = () => {
  const oldTextRender = Text.render
  Text.render = function(...args) {
    const origin = oldTextRender.call(this, ...args)
    // **fix issue #1212**
    const propStyle = [].concat(origin.props.style).reduce((o, style) => Object.assign(o, style), {})
    if (propStyle.color == null) {
      // remove null color
      delete propStyle.color
    }
    return React.cloneElement(origin, {
      style: [styles.defaultText, propStyle],
    })
  }
}
const styles = StyleSheet.create({
  defaultText: {
    fontFamily: 'Mulish',
    color: getColor('black-light')
  }
})


FTFY

I'll admit, I laughed. Thanks for that :stuck_out_tongue:

@mbrookes not cool. I really appreciate the hard work that the npm people put into making a fantastic package manager. For any of its faults, it made many important decisions well beyond what other pkg mgrs did.

@jbenet It was clearly a joke. Get over yourself.


Adds support to call cross-platform shell commands in NPM scripts

Leverages shx library to enable cross-platform commands in NPM scripts

Repoman Generation Results
Repoman pushed changes to remotes for the following projects:
Project: todo-csharp-cosmos-sql
Remote: azure-samples-staging
Branch: pr/1852
You can initialize this project with:
azd init -t Azure-Samples/todo-csharp-cosmos-sql -b pr/1852

View Changes | Compare Changes

Project: todo-csharp-sql-swa-func
Remote: azure-samples-staging
Branch: pr/1852
You can initialize this project with:
azd init -t Azure-Samples/todo-csharp-sql-swa-func -b pr/1852

View Changes | Compare Changes

Project: todo-csharp-sql
Remote: azure-samples-staging
Branch: pr/1852
You can initialize this project with:
azd init -t Azure-Samples/todo-csharp-sql -b pr/1852

View Changes | Compare Changes

Project: todo-java-mongo-aca
Remote: azure-samples-staging
Branch: pr/1852
You can initialize this project with:
azd init -t Azure-Samples/todo-java-mongo-aca -b pr/1852

View Changes | Compare Changes

Project: todo-java-mongo
Remote: azure-samples-staging
Branch: pr/1852
You can initialize this project with:
azd init -t Azure-Samples/todo-java-mongo -b pr/1852

View Changes | Compare Changes

Project: todo-nodejs-mongo-aca
Remote: azure-samples-staging
Branch: pr/1852
You can initialize this project with:
azd init -t Azure-Samples/todo-nodejs-mongo-aca -b pr/1852

View Changes | Compare Changes

Project: todo-nodejs-mongo-aks
Remote: azure-samples-staging
Branch: pr/1852
You can initialize this project with:
azd init -t Azure-Samples/todo-nodejs-mongo-aks -b pr/1852

View Changes | Compare Changes

Project: todo-nodejs-mongo-swa-func
Remote: azure-samples-staging
Branch: pr/1852
You can initialize this project with:
azd init -t Azure-Samples/todo-nodejs-mongo-swa-func -b pr/1852

View Changes | Compare Changes

Project: todo-nodejs-mongo
Remote: azure-samples-staging
Branch: pr/1852
You can initialize this project with:
azd init -t Azure-Samples/todo-nodejs-mongo -b pr/1852

View Changes | Compare Changes

Project: todo-nodejs-mongo-terraform
Remote: azure-samples-staging
Branch: pr/1852
You can initialize this project with:
azd init -t Azure-Samples/todo-nodejs-mongo-terraform -b pr/1852

View Changes | Compare Changes

Project: todo-python-mongo-aca
Remote: azure-samples-staging
Branch: pr/1852
You can initialize this project with:
azd init -t Azure-Samples/todo-python-mongo-aca -b pr/1852

View Changes | Compare Changes

Project: todo-python-mongo-swa-func
Remote: azure-samples-staging
Branch: pr/1852
You can initialize this project with:
azd init -t Azure-Samples/todo-python-mongo-swa-func -b pr/1852

View Changes | Compare Changes

Project: todo-python-mongo
Remote: azure-samples-staging
Branch: pr/1852
You can initialize this project with:
azd init -t Azure-Samples/todo-python-mongo -b pr/1852

View Changes | Compare Changes

Project: todo-python-mongo-terraform
Remote: azure-samples-staging
Branch: pr/1852
You can initialize this project with:
azd init -t Azure-Samples/todo-python-mongo-terraform -b pr/1852

View Changes | Compare Changes


[Bug]:

General Info

[X] I am running a modpack
[ ] I can reproduce this issue consistently in single-player
[X] I can reproduce this issue consistently in multi-player
[X] I have searched for this issue previously and it was either (1) not previously reported, or (2) previously fixed and I am having the same problem.
[ ] I am crashing and can provide my crash report(s)
[X] I am using the latest version of the mod

Loader version
fabric 0.15.11
Minecraft version
1.21
Mod version
1.6.0
Java version
java 8 update 51
Issue Description
Sheep squeak works on a server but does not produce the noise! i have hit several sheep and no noise. this works just fine on single player.
Additional Information
No response

Do the sheep you hurt still have their wool and do you hit with an empty hand? Else it won't play the sound

As I'm unable to reproduce this issue on a server

Yes they still have their wool its very odd. If you want to test it with the mods I have on the server, I made the pack frisky business blockheads. That pack is the one I'm using that is showing the issue. It may be a conflict with another mod but for some reason it's only in single player that the squeaks work.


Finish the TOML support started in #699

On top of what @RazerM did in #699, this:

Provides error messages for trying to use TOML when toml isn't installed.
Tests the no-toml-installed scenarios.
Expands environment variables in all TOML settings.

Codecov Report

Merging #865 into master will increase coverage by 0.03%.
The diff coverage is 91.62%.

@@            Coverage Diff             @@
##           master     #865      +/-   ##
==========================================
+ Coverage    92.2%   92.23%   +0.03%
==========================================
  Files          85       87       +2
  Lines       11416    11629     +213
  Branches     1150     1176      +26
==========================================
+ Hits        10526    10726     +200
- Misses        746      756      +10
- Partials      144      147       +3

Impacted Files
Coverage Δ

coverage/cmdline.py
90.39% <ø> (ø)
:arrow_up:

coverage/config.py
98.36% <100%> (+0.02%)
:arrow_up:

coverage/backward.py
96.92% <100%> (+0.14%)
:arrow_up:

tests/test_config.py
100% <100%> (ø)
:arrow_up:

tests/test_testing.py
100% <100%> (ø)
:arrow_up:

coverage/optional.py
100% <100%> (ø)

coverage/tomlconfig.py
85% <85%> (ø)

coverage/control.py
88% <0%> (+0.28%)
:arrow_up:

... and 2 more

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 1c06204...4a00e45. Read the comment docs.


Why is the background page in persistent mode?

The code I see doesn't really justify a permanent background page as there is no on-going stream and an event background page would open if instagram.com is opened or if the content script sends a message.

@kurtextrem The background page is persistent so React Chrome Redux (https://github.com/tshaddix/react-chrome-redux/) can persist the Redux Store.
I can look into saving the state to the local storage instead of using a persistent background page as mentioned here: https://github.com/tshaddix/react-chrome-redux/issues/8


Add testnet reset dates for 2024

Problem
The testnet reset dates for 2024 are not published yet.
Solution
Add the 2024 anticipated testnet reset dates.
Alternatives
No response

Jan 25, 2024
April 25, 2024
July 25, 2024
Oct 31, 2024

https://docs.hedera.com/hedera/networks/testnet#test-network-resets


The video frame rate is not normal

Note: Please read FAQ before file an issue, see #2716

Description
Please description your issue here

SRS Version: 5 (This is about starting RTC to RTMP, DVR in a Docker environment)

SRS Log:

No abnormalities

SRS Config:

listen              1935;
max_connections     1000;
daemon              off;
srs_log_tank        console;
http_server {
enabled         on;
listen          8080;
dir             ./objs/nginx/html;
}
http_api {
enabled         on;
listen          1985;
}
stats {
network         0;
}
rtc_server {
enabled on;
listen 8000; # UDP port
# @see https://github.com/ossrs/srs/wiki/v4_CN_WebRTC#config-candidate
candidate $CANDIDATE;
}
vhost defaultVhost {
rtc {
enabled     on;
rtmp_to_rtc on;
rtc_to_rtmp on;
pli_for_rtmp 0.5;
}
dvr {
enabled         on;
dvr_path        ./objs/nginx/html/dvr/[timestamp].flv;
}
}
Replay
Please describe how to replay the bug?
Step 1: Add a canvas

Step 2: Draw the animation
setInterval(() => {
var canvas = document.getElementById('canvasId');
var canvasRenderingContext2D = canvas.getContext("2d");
canvasRenderingContext2D.clearRect(0, 0, 800, 500);
canvasRenderingContext2D.font = "20px Arial";
canvasRenderingContext2D.fillStyle = "black";
canvasRenderingContext2D.fillRect(0, 0, 800, 500);
canvasRenderingContext2D.fillStyle = "white";
canvasRenderingContext2D.fillText(new Date().toString(), 150, 240);
}, 1000/30);
Step 3: Replace the video track with WebRTC
self.constraints = {
audio: true,
// video: {
//     width: {ideal: 320, max: 576}
// }
};
var mediaStreamTrack = document.getElementById('canvasId').captureStream(30).getTracks()[0];
self.pc.addTrack(mediaStreamTrack);
self.ontrack && self.ontrack({track: mediaStreamTrack});
Expect
The VLC player is playing an RTMP stream at a frame rate of 1000, and the recorded video file also shows a frame rate of 1000 in VLC. If the recording length is ten minutes, you might not be able to drag the progress bar when playing it with flvjs.
TRANS_BY_GPT4

这是添加的 canvas，

这是添加的 canvas<canvas id='canvasId' width='800px' height='500px'></canvas>

players.zip


internal: Move mismatched arg count diagnostic to inference

This means we only need to handle legacy const generics in one place, and it fits there especially since there will be more diagnostics coming.

bors r+


Add global installation option

Adds an option to install dotnet at the global location (C:\Program Files\dotnet on Windows, /usr/local/share/dotnet on Mac, /usr/share/dotnet on Linux), and updates the global paths for each OS.
Have only been able to test on Mac so far, but seems to work there.
Works for me on all platforms now, but haven't tested extensively.

Overall very supportive, but global install is much trickier because of two things: we need to make sue to respect/write the appropriate /etc/dotnet/install files or registry keys, and for Windows at least we need to make sure that we aren't mangling an existing installation. We also might want to do something to check against an existing installation.
Curious how you ran into this -- is there something in particular that makes you want a global installation? Was it broken apphosts?

Yeah, I think ideally we might want to use the installer -- although I see a lot of value in managing the install ourselves.
I'm fine with merging. It's not like anyone will do this accidentally since it requires root.
Next item on my list is getting some tests, though.


[BUG]  audit log entries are written twice to the console for sample lineage connector

Existing/related issue?
No response
Current Behavior
Using the following configuration to define the Sample Lineage connector, log entries are written twice.
I tried removing the repositoryServicesConfig section, but this is invalid. I assume there is a default log and the one that is specified in the config. I do not know how t configure so that audit log entries are not duplicated.
{
"class": "OMAGServerConfig",
"versionId": "V2.0",
"localServerId": "02defb10-528c-4707-8049-ae7d82b88310",
"localServerName": "lineagesample1",
"localServerType": "Integration Daemon",
"localServerURL": "https://localhost:9443",
"localServerUserId": "OMAGServer",
"maxPageSize": 1000,
"integrationServicesConfig": [
{
"class": "IntegrationServiceConfig",
"integrationServiceId": 606,
"integrationServiceDevelopmentStatus": "IN_DEVELOPMENT",
"integrationServiceContextManagerClass": "org.odpi.openmetadata.integrationservices.lineage.contextmanager.LineageIntegratorContextManager",
"integrationServiceName": "Lineage Integrator",
"integrationServiceFullName": "Lineage Integrator OMIS",
"integrationServiceURLMarker": "lineage-integrator",
"integrationServiceDescription": "Manage capture of lineage from a third party tool.",
"integrationServiceWiki": "https://egeria-project.org/services/omis/lineage-integrator/overview/",
"integrationServicePartnerOMAS": "Asset Manager OMAS",
"defaultPermittedSynchronization": "FROM_THIRD_PARTY",
"integrationServiceOperationalStatus": "ENABLED",
"integrationConnectorConfigs": [
{
"class": "IntegrationConnectorConfig",
"connectorId": "ba6dc870-2303-48fc-8611-d50b49706f48",
"connectorName": "LineageIntegrator",
"metadataSourceQualifiedName": "TestMetadataSourceQualifiedName",
"connection": {
"class": "VirtualConnection",
"headerVersion": 0,
"qualifiedName": "Egeria:IntegrationConnector:Lineage:OpenLineageEventReceiverConnection",
"connectorType": {
"class": "ConnectorType",
"headerVersion": 0,
"connectorProviderClassName": "org.odpi.openmetadata.adapters.connectors.integration.lineage.SampleLineageEventReceiverIntegrationProvider"
},
"embeddedConnections": [
{
"class": "EmbeddedConnection",
"headerVersion": 0,
"position": 0,
"embeddedConnection": {
"class": "Connection",
"headerVersion": 0,
"qualifiedName": "Kafka Open Metadata Topic Connector for sample lineage",
"connectorType": {
"class": "ConnectorType",
"headerVersion": 0,
"connectorProviderClassName": "org.odpi.openmetadata.adapters.eventbus.topic.kafka.KafkaOpenMetadataTopicProvider"
},
"endpoint": {
"class": "Endpoint",
"headerVersion": 0,
"address": "legacyLineage"
},
"configurationProperties": {
"producer": {
"bootstrap.servers": "localhost:9092"
},
"local.server.id": "lineagesample1",
"consumer": {
"bootstrap.servers": "localhost:9092"
}
}
}
}
]
},
"refreshTimeInterval": 0,
"usesBlockingCalls": false
}
],
"omagserverName": "cocoMDS1",
"omagserverPlatformRootURL": "https://localhost:9443"
}
],
"repositoryServicesConfig": {
"class": "RepositoryServicesConfig",
"auditLogConnections": [
{
"class": "Connection",
"headerVersion": 0,
"qualifiedName": "Console- default",
"displayName": "Console",
"connectorType": {
"class": "ConnectorType",
"headerVersion": 0,
"type": {
"typeId": "954421eb-33a6-462d-a8ca-b5709a1bd0d4",
"typeName": "ConnectorType",
"typeVersion": 1,
"typeDescription": "A set of properties describing a type of connector."
},
"guid": "4afac741-3dcc-4c60-a4ca-a6dede994e3f",
"qualifiedName": "Egeria:AuditLogDestinationConnector:Console",
"displayName": "Console Audit Log Destination Connector",
"description": "Connector supports logging of audit log messages to stdout.",
"connectorProviderClassName": "org.odpi.openmetadata.adapters.repositoryservices.auditlogstore.console.ConsoleAuditLogStoreProvider",
"connectorFrameworkName": "Open Connector Framework (OCF)",
"connectorInterfaceLanguage": "Java",
"connectorInterfaces": [
"org.odpi.openmetadata.repositoryservices.connectors.stores.auditlogstore.OMRSAuditLogStore"
],
"recognizedConfigurationProperties": [
"supportedSeverities"
]
},
"configurationProperties": {
"supportedSeverities": [
"",
"Information",
"Event",
"Decision",
"Action",
"Error",
"Exception",
"Security",
"Startup",
"Shutdown",
"Asset",
"Types",
"Cohort"
]
}
},
{
"class": "Connection",
"headerVersion": 0,
"type": {
"typeVersion": 0
},
"guid": "5390bf3e-6b38-4eda-b34a-de55ac4252a7",
"qualifiedName": "DefaultAuditLog.Connection.lineagesample1",
"displayName": "DefaultAuditLog.Connection.lineagesample1",
"description": "OMRS default audit log connection.",
"connectorType": {
"class": "ConnectorType",
"headerVersion": 0,
"type": {
"typeVersion": 0
},
"guid": "4afac741-3dcc-4c60-a4ca-a6dede994e3f",
"qualifiedName": "Console Audit Log Store Connector",
"displayName": "Console Audit Log Store Connector",
"description": "Connector supports logging of audit log messages to stdout.",
"connectorProviderClassName": "org.odpi.openmetadata.adapters.repositoryservices.auditlogstore.console.ConsoleAuditLogStoreProvider"
},
"endpoint": {
"class": "Endpoint",
"headerVersion": 0,
"type": {
"typeVersion": 0
},
"guid": "836efeae-ab34-4425-89f0-6adf2faa1f2e",
"qualifiedName": "DefaultAuditLog.Endpoint.samplelineage1.auditlog",
"displayName": "DefaultAuditLog.Endpoint.samplelineage1.auditlog",
"description": "OMRS default audit log endpoint.",
"address": "samplelineage1.auditlog"
}
}
]
}
}
Expected Behavior
the sample lineage integration connector log should be able to be configured so there is only one console audit log message destination.
Steps To Reproduce
run the sample lineage connector
Environment
- Egeria:
- OS:
- Java:
- Browser (for UI issues):
- Additional connectors and integration:

Any Further Information?
No response

This behaviour is completely reasonable since it is configured to do so - the configuration shows two auditLogConnections defined - both to write to the console - therefore each will write each audit log record - resulting in 2 copies of each record on the console.
If you only want one copy of each message on the console then I suggest having only one auditLogConnection.
Details of how to configure the audit logs are in the administration guide.  Here is a link:
https://egeria-project.org/guides/admin/servers/configuring-an-integration-daemon/#configure-the-audit-log
When an integration daemon is defined, a console audit log destination is added by default.  You can add new destinations, with different severity lists.  If you want to delete the default console audit log destination then use the delete method before adding the ones you want.

If this documentation does not answer your question - please make changes to it so it is better for the next person.

Can this be closed or are you going to transfer it to egeria-docs to make the changes to the documentation?

@mandy-chessell thanks for your comments they are really helpful. I want to understand how we got audit log entries first then will move to egeria-docs or close as required.

Interestingly if I submit a single config.

with both audit log connections I get duplicate log entries as expected
If I supply a config only with the second log entry , I get no log entries
If I supply a config only with the first log entry , I get 1 log  log entry as expected

I have produced a set of rest calls to configure an integration server. I do

set the server type as an Integration Daemon
2)I set an audit log using lineagesample1/audit-log-destinations/connection
I configure the integration deamon  /{{serverName}}/integration-services/{{integration service name}}

If I query the configuration it has 2 audit logs.
If I miss out step 2 the server will not start as there are no repository services defined
In the logic to set the audit log in OMAGServerAdminServices addAuditLogDestination I see
  public VoidResponse addAuditLogDestination(String                userId,
                                               String                serverName,
                                               Connection            auditLogDestination)
        final String methodName = "addAuditLogDestination";

      ...
            if (auditLogDestination != null)
            {
                OMAGServerConfig serverConfig     = configStore.getServerConfig(userId, serverName, methodName);
                ...
                RepositoryServicesConfig repositoryServicesConfig = serverConfig.getRepositoryServicesConfig();

                if (repositoryServicesConfig == null)
                {
                    OMRSConfigurationFactory configurationFactory = new OMRSConfigurationFactory();

                    repositoryServicesConfig = configurationFactory.getDefaultRepositoryServicesConfig();
                }

                List<Connection>  auditLogDestinations = repositoryServicesConfig.getAuditLogConnections();

                if (auditLogDestinations == null)

So in my case there is a supplied auditLogDestination connection , and repositoryServicesConfig == null so we create a
repositoryServicesConfig which contains a default audit log destination. We then add the one that has been requested, so we end up with 2 audit log destinations.

@juergenhemelt fyi I have fixed the double log issue we both saw.

@davidradl This fix need to be reversed as it is not correct behaviour. The original behaviour was correct.

I would expect audit log configurations to be in place the way I configured them. So if one configures explicitly a console audit log there should be only that one. A default audit log should be in place only if there is no other configured. I found it always strange that one has to configure a (default) audit log before configuring a connector. So I think the implementation of @davidradl is more intuitive than the original one.

@davidradl This fix need to be reversed as it is not correct behaviour. The original behaviour was correct.

@mandy-chessell what is your thinking here? As is, the incremental configuration ends up with 2 audit log destinations - this may be required in some use cases, but shouldn't logging to only one supplied destination be the standard way we configure. It is possible to supply a complete configuration with only one log destination or to remove the 2nd log destination with admin calls. I am unsure what the issue is with the fix. What am I missing?

An audit log destination is either identified by severities + a simple name (ie console), or a connection + properties.
Could we somehow apply de-duplication to configured destinations (severities+names+properties), for example by taking a hash, thus avoiding the specific console dup case whilst also preserving the existing default behaviour?

In the developer community call today, we talked about this issue. this issue stems from the postman collection I was using, it should have specified the default audit log destination, any other audit log destination will be added as a second.
We should set the default audit log as documented here https://egeria-project.org/guides/admin/servers/configuring-an-integration-daemon/#configure-the-audit-log

I still think the default audit log should be in place when there is no other configured. It should not be required to configure an audit log explicitly if you are fine with the default one.

It is possible to run without audit logs, maybe if Egeria is running embedded and there is no where to write to. We also have had a requirement to not write to the console.
I am ok with the way it stands , now I realise that the default is what I should have supplied. I think you are suggesting that

Recap on current design that @davidradl knows but may be new to @juergenhemelt
Today, there is a strict separation between operations and configuration.  At operations time, the configuration document is passed to the platform and it is read-only.  It starts the services described in the configuration document.
This is allow a strict separation between users who are able to change configuration and those who are able to run the configuration (useful if the configuration needs to be audited).
On server-startup, the platform does check that the repository services are configured to be able to distinguish between an empty/default configuration document and one that someone has tried to set up.  This was a common error in the early days and so the check was added.  It also checks that the combination of services enabled is consistent with the server types we have defined.  It is not strictly necessary but helped people initially create a consistent runtime environment.
The platform does not care how the configuration document is built.  It can be built by an offline utility that creates the configuration document as required and posts it whole to the platform.  This allows different tools (eg a vendor who has embedded Egeria) to configure the egeria servers through its own tooling for example).  We have a vendor that does this.
The configuration REST services also provide helper services to set up the configuration document.  If you remember, the whole point of the platform is to allow the governance operation team to set up and run Egeria without needing IT intervention each time they want a new server/sevice enabled.
There are two basic types of helper services.  There are the course-grained helper services and the fine-grained helper services.
The course-grained helper services allow the goverance team to configure each section of the configuration document separately.  This is useful for editing the configuration document, or if the governance team wants a different set of options to those offered in the fine-grained configuration services.  You would use these for example, if you did not want to have any audit logs configured - or in the case of one of the organizations that runs Egeria in production, they do not want the console audit log at all, only the SLF4J audit log.
The fine-grained helper services are designed to offer simple configuration options that use a lot of defaults.  They are aimed at developers, or people learning about Egeria.  If the defaults are not what is needed, then the course-grained helper services are there.  So these services are not intended to be comprehensive - just to help people get up and running.  There is a fine balance between coverage of potential options and too many helper services to choose from.
The fine-grained services require the governance team to explicitly configure the audit log (even if it is just the default) to encourage them to think about the audit logging they need since they may not think about it in the way IT would.  The assumption is that the users of these services are inexperienced.
Response to the suggestion above
The services to configure the audit log described above are from the fine-grained helper services.  They are being discussed as if they are the only way to configure the servers - and that they must cover all of the options.  This is misleading and not the design intent.
Always enabling the console audit log would annoy organizations that do not want the console audit log.
My suggestion is that if you do not want the defaults offered by the fine-grained services, then you use the course-grained options, or build the configuration document you want offline and post it to the platform as one.  Then you do not risk disrupting other users and our education material that uses both the fine-grained and course-grained services.


CI/lint job fails very often with the timeout error

CI/lint job in this repo fails very often with the timeout error. While lint works successfully locally, there are problems in PRs due to this timeout error in GitHub.
We can increase the timeout of this job or we may consider researching another machine to run the GitHub actions.

@sergenyalcin PR with temporary workaround - https://github.com/upbound/uptest/pull/81
cc @ulucinar

I think we started running into this problem once we generated hundreds of CRDs because the amount of code golangci-lint needs to analyze increases with the number of CRDs. The generated files are excluded by default but that exclusion doesn't mean they are not analyzed, just that their issues are not reported and that's because without them, human-written code would give compile errors. Given that we can't really reduce the amount of code that's analyzed, I dug into the caching mechanisms to make it more efficient.
Reading the caching internals of golangci-lint, it includes the hash of go.mod file in its cache key, which means we probably see this issue more often when we make a change in that file or every 7 days, which is the default invalidation period. Reading the logs of my PR here, it calculates two keys with 2777 as the week number. The full key doesn't match since it includes the hash of go.mod file and I have a change there but the second key matches an entry in our current GH cache partially since it doesn't have the hash. However, the cache originated from the branch release-0.32 and according to the docs of GH, only branches originated from that branch can access that cache, i.e. neither main nor any PR branches.
I think what happens is that every time lint runs in a PR or release branch, it passes quickly if the cache record originated from main branch since the cache hit probability is high (right now there is a single entry that came from release-0.32 branch and its size is 2.4GB). However, if a cache from a release or PR branch makes it, then it just occupies space and increases the odds of the cache miss. My proposal is that we should restrict adding cache entry only to runs in main branch in order to reduce the possibility of cache misses given that there is an upper limit to how much cache you can hold and how long you can keep it.

FWIW, the default Github runner is just a 2-core VM. The linter has the default of 8-core parallelization and completes in about 2m21s in my machine. So, increasing the number of cores of the runners would likely help a lot. But looks like it needs to be enabled by the admin of Upbound org to be able to request from workflow file. cc @jeanduplessis
I think we should do both of the following:

Limit caching of golangci/golangci-lint-action@v3 to main with an argument.
Use 8-cores VMs for lint jobs.

I've opened a request with the platform team to provide more powerful runners: https://github.com/upbound/platform-core/issues/841

Powerful runners was provided. Issue resolved.


Rework v2 API with new `route' framework

route is a lightweight framework for making it easier and less
error-prone to write and implement.  All of the previously implemented
/v2/* namespace has been re-written in the new style.

BTW, Travis Tests should pass on this one...

Looks good to me.


Hotspot bandwidth

Hello,
I installed the addon and managed with my phone to connect to the hotspot and to internet. Great job, thanks!
My Home Assistant is installed with HA OS on a Raspberry Pi 5.
The Raspberry Pi 5 is connected to my Internet connection using RJ45 cable on a high speed connection (~950 mbps).
But when running a speed test from my phone, the connection is about 25 mbps (whereas a similar test directly on my internet box wifi with the same phone provides more than 600 mbps).
Any idea why such difference when using the HA hotspot?
Thanks

From what I can see online, the pi5's wifi chip can handle up to 165Mbps as a client, but I'd imagine that would be even less when hosting the network. Also, data throughput is CPU/RAM-bound, so it will likely be constrained on a system that's dedicated to hosting a bajilion docker containers instead of a bare OS for networking :D
25Mbps does still seem low though. If you'd like to test further, you could set up a network on something like Raspbian (e.g. using This Guide) and comparing. There are likely some optimisations that I could make in the configurations, but I can't imagine getting huge gains in network speed 🐎

That makes sense 👍
Thanks for your answer

Cool. Would you like me to investigate further, or can I close this?

If you want to investigate, it would be great so that we are sure the config is at its best ;-)

I'll put it on the backlog, I'm busy refactoring networking anyway:D


UI updates

[ ] Threads
[ ] Direct messages
[ ] Settings

Login / Profile editor buttons still use old styles
Note creator clips under keyboard on android
Banner missing fade out

It seems like we're changing the design every few days lol, maybe we can do entire UI in one go so that it at least remains consistent for more than a few days, that said i do really like the new designs!

It seems like we're changing the design every few days lol, maybe we can do entire UI in one go so that it at least remains consistent for more than a few days, that said i do really like the new designs!

😂 Yeah I'm going to do all in this PR, still work in progress

@v0l we still don't have designs for the screens i listed above, perhaps we should ship this and then improve those when we have the designs.


lora: Use generic node name "lora" for all lora nodes

The current devicetree specification (master branch [1]) lists "lora" as a
generic node name. Hence, all devicetree files in Zephyr should use the same.
As a result of this change, we no longer need an alias for LoRa and the
applications can now use DT_NODELABEL for getting the node identifiers instead
of DT_ALIAS.
[1] https://github.com/devicetree-org/devicetree-specification/blob/main/source/chapter2-devicetree-basics.rst
Signed-off-by: Manivannan Sadhasivam<EMAIL_ADDRESS>

If this method changes, please ensure the arm/rm1xx_dvk board is updated also

If this is just for the shell and the current hack with an alias is not good enough for some good reason, I think that's probably the way to go. I think moving to a node label would just be trading one hack for another, and I'm not sure why that would be any better -- can you clarify?

The way I envision alias was providing a common name for nodes that have different vendor/model specific node labels. For instance, zephyr,console alias can be defined for SERIAL device nodes such as uart, lpuart, etc... In this case, alias makes perfect sense as we are declaring what SERIAL device should be used as a Zephyr console since we have different kinds of them in a system.
But for the case of lora, we are going to use lora as the node label for all LoRa based nodes due to the 1st commit in this PR. So here, defining the alias for the already generic node label seemed overkill to me. So that's why I thought we can directly use the node label to get the device in both sample and shell.
But I should admit that I missed reading Zephyr's documentation about alias and chosen nodes earlier.

Happy new year! @Mani-Sadhasivam I'm not sure how to understand your reply. I think you may have been mixing up 'alias' and 'chosen node' in some places. But it sounds to me like you're going to be using a system-wide lora device at some point in a bigger way in later patches, right? If that's the case, I think a chosen node is the usual zephyr way of doing things.

@mbolivar-nordic I've removed the commit that got rid of the alias. Regarding using chosen nodes, I think we do not need it yet. Please review!

@erwango @mbolivar-nordic Please review!

@carlescufi Please merge!


feat: Use cflinuxfs3 as default stack

to make sure the latest upstream buildpacks can be used by default.

I suppose this will make Eirini fail with default install_stacks. On CI, we select the sle15 stack if deploying Eirini, so it should succeed there.
Eirini seems to have separate configuration options which I did not change.

I suppose this will make Eirini fail with default install_stacks. On CI, we select the sle15 stack if deploying Eirini, so it should succeed there.
Eirini seems to have separate configuration options which I did not change.

If the platform admin did not specify the stacks (and their order) in their values, upgrading to this version would change the default stack (IIUC). This would be an unexpected change for the end users and probably not be immediately noticed by the admin.
Better to leave the defaults as they are and make a release not to manually change the default stack in values.yaml. That way, admins know that the change is happening.

If the platform admin did not specify the stacks (and their order) in their values, upgrading to this version would change the default stack (IIUC). This would be an unexpected change for the end users and probably not be immediately noticed by the admin.
Better to leave the defaults as they are and make a release not to manually change the default stack in values.yaml. That way, admins know that the change is happening.

@troytop thank you. I missed that in the review.
@viovanov ping, to include "Manually change default stack to cflinuxfs3" in release notes.

@troytop thank you. I missed that in the review.
@viovanov ping, to include "Manually change default stack to cflinuxfs3" in release notes.


When will Flutter desktop support EngineGroup?

This is a dupe of https://github.com/flutter/flutter/issues/95076 . Thanks for filing the issue.


OCPBUGS-43531: Refactor exists() to handle gcp API change

GCP started responding with 400 for invalid zone instead of 404. This PR updates the exits() to handle the change.
It also removes the zone get API call and instead determines invalid zone or projectID from the error message of the instance get call.

/jira refresh

/retest-required
I am seeing some failures from GCP that eventually recovered. I don't think this PR is causing it. Let's retest.

/retest-required


25q64 nor spi capacity insufficient?

root@openipc-t21:/rom/lib/modules/3.10.14__isvp_turkey_1.0__/ingenic# rm  sensor_ov2735b_t21z.ko
rm: remove 'sensor_ov2735b_t21z.ko'? yes
rm: can't remove 'sensor_ov2735b_t21z.ko': Read-only file system
It cannot be deleted.
sensor_ov2735b_t21z.ko
sensor_sc2232_t21n.ko
sensor_sc2300_t21z.ko
sensor_sc2335_t21n.ko
sensor_sc2335_t21z.ko
removal???

Merged with #1209


Update Debian image

This PR updates Debian image to fix several CVE issues.

/cc @vteratipally

/lgtm
/ok-to-test

/approve


feat(esco-content-menu): slot grid header

Allows esco content grid header pieces to be removed or replaced via slots.

Nice I have to watch your change !


Regression in Recursive Component Support After Leptos 7.0: Opaque Type Issues

Describe the bug
Since the transition to statically-typed views in Leptos 7.0, recursive components face challenges with type handling:
1- Using Either: Recursive components cannot compile due to recursive opaque type errors.
2- Using .into_any(): This resolves the compilation issue by erasing the type, but it introduces hydration errors, causing the client-rendered DOM to differ from the server-rendered DOM when dynamic data (e.g., signals or resources) is involved.
This creates significant challenges for rendering tree-like recursive structures, such as visualizing hierarchical data.
This is my very first GitHub issue, so apologies if I’ve missed any important details or formatting! Please let me know if you need more information.
Leptos Dependencies
leptos = { version = "0.7.0", features = ["nightly"] }
leptos_router = { version = "0.7.0", features = ["nightly"] }
axum = { version = "0.7", optional = true }
console_error_panic_hook = "0.1"
leptos_axum = { version = "0.7.0", optional = true }
leptos_meta = { version = "0.7.0" }
tokio = { version = "1", features = ["rt-multi-thread"], optional = true }
tower = { version = "0.4", optional = true }
tower-http = { version = "0.5", features = ["fs"], optional = true }
wasm-bindgen = "=0.2.96"
thiserror = "1"
tracing = { version = "0.1", optional = true }
http = "1"
stylance = {version =  "0.5.2",features = ["nightly"] }
getrandom = { version = "0.2.15" ,features = ["js"]}
serde = { version = "1.0.214", features = ["derive"] }
serde_json = {version =  "1.0.133" }
gloo-timers = { version = "0.3", features = ["futures"] }
futures = "0.3"
sqlx = {version =  "0.8.2" ,features = ["sqlite","runtime-async-std"],optional = true}
rand = { version = "0.8.5" ,features = ["nightly"]}

To Reproduce
To Reproduce
Before Leptos 7.0 (Working Version):
In Leptos versions before 7.0, recursive components worked fine without requiring type erasure or additional wrappers. For example, the following recursive component compiles and runs as expected:
use leptos::*;
use std::collections::HashMap;

#[derive(Clone, Default)]
struct CareerNode {
    children: Vec<CareerNode>,
    logo_url: String,
}

#[component]
fn CareerNodeView(node: CareerNode, start_x: f64, start_y: f64, start_angle: f64) -> impl IntoView {
    let children = RwSignal::new(node.children.clone());

    view! {
        <svg>
            <g>
                <Show
                    when=move || !children.get().is_empty()
                    fallback=|| view! {}
                >
                    {move || children.get().iter().enumerate().map(|(i, child)| {
                        let angle = start_angle + i as f64 * 30.0; // Example angle calculation
                        let (x, y) = (start_x + 50.0 * angle.cos(), start_y + 50.0 * angle.sin());
                        view! {
                            <line x1=start_x y1=start_y x2=x y2=y />
                            // Recursive rendering
                            <CareerNodeView node=child.clone() start_x=x start_y=y start_angle=angle />
                        }
                    }).collect_view()}
                </Show>
                <circle cx=start_x cy=start_y r="10" fill="blue" />
            </g>
        </svg>
    }
}

#[component]
fn App() -> impl IntoView {
    let tree = CareerNode {
        children: vec![
            CareerNode {
                children: vec![CareerNode::default()],
                logo_url: "logo1.png".into(),
            },
            CareerNode::default(),
        ],
        logo_url: "root_logo.png".into(),
    };

    view! {
        <CareerNodeView node=tree start_x=100.0 start_y=100.0 start_angle=0.0 />
    }
}

This version works seamlessly and renders a tree-like structure recursively without requiring additional type wrappers.
After Leptos 7.0 (Regression):
In Leptos 7.0, the framework introduced stricter statically-typed views, which breaks the above approach. Recursive components now cause compilation errors due to opaque recursive types. A workaround is to use .into_any() to erase the type information, which allows compilation. However, this approach leads to hydration errors during runtime, as the server-rendered DOM and client-rendered DOM no longer match.
Expected behavior
Recursive components should work seamlessly in Leptos, as they did prior to version 7.0, without requiring manual type erasure through .into_any() or additional wrappers like Either. Ideally, the framework should provide a way to handle recursive views natively while preserving hydration correctness and avoiding runtime errors.
This behavior is crucial for building complex tree-like or graph-like UI structures efficiently, without needing fragile or error-prone workarounds.

Using .into_any() ... introduces hydration errors
this approach leads to hydration errors during runtime, as the server-rendered DOM and client-rendered DOM no longer match.

As I think I said on Discord, this should not be the case; many of our examples use .into_any() in various ways without causing hydration issues, so this surely can't be true as a general statement.
If you could please provide a small, self-contained example in which your use of .into_any() causes a hydration issue, I can try to figure out what's going on.
Otherwise, there's unfortunately no action that can be taken here.

Recursive components should work seamlessly in Leptos, as they did prior to version 7.0, without requiring manual type erasure through .into_any()

Just to add a note explaining the change: In previous versions, every single View was type-erased. This is expensive in terms of runtime speed, memory use, and also binary size, and prevents many compiler optimizations. It is a known and intentional change, not a regression, to no longer implicitly support recursive components by type-erasing everything, but rather to allow you to opt in to type erasure, losing the benefits of all the optimizations you get from a fully-typed view in exchange for being able to have a recursive component.

Using .into_any() ... introduces hydration errors

this approach leads to hydration errors during runtime, as the server-rendered DOM and client-rendered DOM no longer match.

As I think I said on Discord, this should not be the case; many of our examples use .into_any() in various ways without causing hydration issues, so this surely can't be true as a general statement.
If you could please provide a small, self-contained example in which your use of .into_any() causes a hydration issue, I can try to figure out what's going on.
Otherwise, there's unfortunately no action that can be taken here.

While it’s true that .into_any() works correctly in many cases as per the official examples, in my specific case of recursive components, using .into_any() to circumvent the opaque type errors introduced in Leptos 7.0 leads to hydration errors. The client-rendered DOM does not match the server-rendered DOM in this scenario.
Here is a minimal reproducible example demonstrating the issue:
#[component]
fn CareerNodeView(node: CareerNode, start_x: f64, start_y: f64, start_angle: f64) -> impl IntoView {

    let children = RwSignal::new(node.children.clone());

    view! {
        <svg>
            <g>
                <Show when=move || !children.get().is_empty() fallback=|| view! {}>
                    {move ||
                        children.get().into_iter()
                        .enumerate()
                        .map(|(index, (_child_node_id, child_node))| {
                            view! {
                                <CareerNodeView
                                    node=child_node
                                    start_x=0.0
                                    start_y=0.0
                                    start_angle=20.0
                                />
                            }
                        }).collect_view()
                    }
                </Show>
            </g>
        </svg>
    }.into_any()
}

A hydration error occurred while trying to hydrate an element defined at src\components\career_map.rs:211:18.

The framework expected a marker node, but found this instead:
<svg class="connection_svg-42b5681">

The hydration mismatch may have occurred slightly earlier, but this is the first time the framework found a node of an unexpected type.

Here is a minimal reproducible example demonstrating the issue

Unfortunately, it's not.
When I run your 0.6 example in the above post, with the addition of a single .into_any() at the end of CareerNodeView, there is no hydration error.
When I try to use the example in your latest post, it doesn't compile, with the error
error[E0308]: mismatched types
  --> src/app.rs:57:39
   |
57 |                         .map(|(index, (_child_node_id, child_node))| {
   |                               --------^^^^^^^^^^^^^^^^^^^^^^^^^^^^-
   |                               |       |
   |                               |       expected `CareerNode`, found `(_, _)`
   |                               expected due to this
   |
   = note: expected struct `CareerNode`
               found tuple `(_, _)

When I edit this to (index, child_node) instead, the example compiles and runs; it shows nothing visible, but there are once again no hydration errors.

To  ensure we’re on the same page, I’ll post the exact code I’m working with, including all relevant details. Apologies in advance if the code is a bit longer—hopefully, this will make it easier to identify the root of the problem and help me debug further.
If needed, I can also try to reduce the code further to make it more concise for easier reading—it will take me some extra time, but I’m happy to do so if it helps. I’m eager to keep learning and improving with Leptos, and I really appreciate your help!
use std::collections::HashMap;
use std::f64::consts::PI;
use leptos::{component, logging, view, IntoView};
use leptos::html::Div;
use leptos::prelude::{document, request_animation_frame, ClassAttribute, CollectView, Get, NodeRef, NodeRefAttribute, Resource, RwSignal, Set, Show, StyleAttribute, Suspense};
use serde::{Deserialize, Serialize};
use web_sys::{MouseEvent, TouchEvent, WheelEvent};

const RADIUS_DISTANCE_FROM_PARENT: f64 = 500.0;
const ZOOM_FACTOR: f64 = 0.1;
const MIN_SCALE: f64 = 0.5;
const MAX_SCALE: f64 = 5.0;
#[component]
pub fn CareerMap() -> impl IntoView {
    stylance::import_style!(style, "style/career_map.module.scss");
    let career: RwSignal<CareerNodeTree> = RwSignal::new(CareerNodeTree::default());
    let career_nodes : Vec<CareerNode> = vec![ CareerNode {
        id: 0,
        logo_url: "".to_string(),
        title: "Bac".to_string(),
        year: 2019,
        parent_id: None,
        children: Default::default(),
        metadata: None,
    },CareerNode {
        id: 1,
        logo_url: "".to_string(),
        title: "BTS Systèmes Numériques Informatique et Réseaux".to_string(),
        year: 2019,
        parent_id: Some(0),
        children: Default::default(),
        metadata: None,
    },CareerNode {
        id: 2,
        logo_url: "".to_string(),
        title: "Diplôme BTS Systèmes Numériques Informatique et Réseaux".to_string(),
        year: 2020,
        parent_id: Some(1),
        children: Default::default(),
        metadata: None,
    }];

    let load_career = Resource::new(
        || (),
        move |_| async move {
            career.set(CareerNodeTree::build_from_flat_data(career_nodes))
        },
    );

    let is_dragging = RwSignal::new(false);
    let drag_start_x = RwSignal::new(0);
    let drag_start_y = RwSignal::new(0);
    let container_left = RwSignal::new(0);
    let container_top = RwSignal::new(0);
    let scale = RwSignal::new(1.0);
    let animation_frame_id = RwSignal::new(-1);
    let is_focus = RwSignal::new(false);

    let map_content_ref:NodeRef
 = NodeRef::new();

    let disable_scroll = move || {
        if let Some(document) = document().body() {
            let _ = document.style().set_property("overflow", "hidden");
        }
    };

    let enable_scroll = move || {
        if let Some(document) = document().body() {
            let _ = document.style().set_property("overflow", "auto");
        }
    };

    let update_transform = move || {
        if let Some(container) = map_content_ref.get() {
            let transform_value = format!(
                "translate({}px, {}px) scale({})",
                container_left.get(),
                container_top.get(),
                scale.get()
            );
            container.style(format!("transform : {}", &transform_value));
        }
    };

    let handle_zoom = move |event: WheelEvent| {
        if is_focus.get() {
            event.prevent_default();

            let delta = -event.delta_y() * ZOOM_FACTOR * 0.01;
            let old_scale = scale.get();
            let new_scale = (old_scale + delta).clamp(MIN_SCALE, MAX_SCALE);

            if (new_scale - old_scale).abs() > 0.001 {
                scale.set(new_scale);

                request_animation_frame(move || {
                    update_transform();
                });
            }
        }
    };

    let handle_drag_start = move |event: MouseEvent| {
        event.prevent_default();
        is_dragging.set(true);
        drag_start_x.set(event.client_x() - container_left.get());
        drag_start_y.set(event.client_y() - container_top.get());

        if let Some(container) = map_content_ref.get() {
            let _ = container.style("cursor : grabbing");
        }
    };

    let handle_drag_move = move |event: MouseEvent| {
        if is_dragging.get() {
            let new_left = event.client_x() - drag_start_x.get();
            let new_top = event.client_y() - drag_start_y.get();

            if animation_frame_id.get() == -1 {
                animation_frame_id.set(1);
                request_animation_frame(move || {
                    container_left.set(new_left);
                    container_top.set(new_top);
                    update_transform();
                    animation_frame_id.set(-1);
                });
            }
        }
    };

    let handle_drag_end = move |_| {
        is_dragging.set(false);
        if let Some(container) = map_content_ref.get() {
            let _ = container.style("cursor : grab");
        }
    };

    let handle_touch_start = move |event: TouchEvent| {
        event.prevent_default();
        disable_scroll();

        if let Some(touch) = event.touches().item(0) {
            is_dragging.set(true);
            is_focus.set(true);

            drag_start_x.set(touch.client_x() - container_left.get());
            drag_start_y.set(touch.client_y() - container_top.get());

            if let Some(container) = map_content_ref.get() {
                let _ = container.style("cursor : grabbing");
            }
        }
    };

    let handle_touch_move = move |event: TouchEvent| {
        if is_dragging.get() && event.touches().length() == 1 {
            if let Some(touch) = event.touches().item(0) {
                let new_left = touch.client_x() - drag_start_x.get();
                let new_top = touch.client_y() - drag_start_y.get();

                if animation_frame_id.get() == -1 {
                    animation_frame_id.set(1);
                    request_animation_frame(move || {
                        container_left.set(new_left);
                        container_top.set(new_top);
                        update_transform();
                        animation_frame_id.set(-1);
                    });
                }
            }
        }

        else if event.touches().length() > 1 {
            if let (Some(touch1), Some(touch2)) = (event.touches().item(0), event.touches().item(1)) {
                let distance = ((touch1.client_x() - touch2.client_x()).pow(2) +
                    (touch1.client_y() - touch2.client_y()).pow(2)).isqrt();

            }
        }
    };

    let handle_touch_end = move |event: TouchEvent| {
        event.prevent_default();
        is_dragging.set(false);
        is_focus.set(false);
        enable_scroll();

        if let Some(container) = map_content_ref.get() {
            let _ = container.style("cursor : grab");
        }
    };

    let handle_touch_zoom = move |event: TouchEvent| {
        event.prevent_default();

        if event.touches().length() > 1 {
            if let (Some(touch1), Some(touch2)) = (event.touches().item(0), event.touches().item(1)) {
                let current_distance = ((touch1.client_x() - touch2.client_x()).pow(2) +
                    (touch1.client_y() - touch2.client_y()).pow(2)).isqrt();

                let old_scale = scale.get();
                let new_scale = (old_scale * (current_distance as f64 / 100.0)).clamp(MIN_SCALE, MAX_SCALE);

                if (new_scale - old_scale).abs() > 0.001 {
                    scale.set(new_scale);

                    request_animation_frame(move || {
                        update_transform();
                    });
                }
            }
        }
    };

    view! {

                <div class=style::career_map
                    node_ref=map_content_ref
                    on:mousedown=handle_drag_start
                    on:mousemove=handle_drag_move
                    on:mouseleave=handle_drag_end
                    on:wheel=handle_zoom
                    on:mouseup=handle_drag_end
                    on:touchstart=handle_touch_start
                    on:touchmove=handle_touch_move
                    on:touchend=handle_touch_end
                    on:touchcancel=handle_touch_end
                    on:gesturestart=handle_touch_zoom
                    role="button"
                    tabindex="0">
                        <Suspense fallback=move || view! {
"Loading career..."
 }>
                            {move || {
                                load_career.get().map(|_| {
                                    career.get().roots.iter()
                                    .map(|(id,root)|
                                        view! {
                                            <CareerNodeView node={root.clone()} start_x=1500.0 start_y=200.0 start_angle=90.0/>
                                        }
                                    ).collect_view()
                                })
                            }}
                        </Suspense>

    }
}

#[component]
fn CareerNodeView(node: CareerNode, start_x: f64, start_y: f64, start_angle: f64) -> impl IntoView {
    stylance::import_style!(style, "style/career_card.module.scss");

    let children = RwSignal::new(node.children.clone());

    let num_children = children.get().len();
    let angle_delta = if num_children > 1 {
        140.0 / (num_children - 1) as f64
    } else {
        70.0
    };

    view! {
        <svg class=style::connection_svg>
            <g>
                <Show when=move || !children.get().is_empty() fallback=|| view! {}>
                    {move ||
                        children.get().into_iter()
                        .enumerate()
                        .map(|(index, (_child_node_id, child_node))| {
                            let child_angle = if num_children > 1 {
                                start_angle - 70.0 + index as f64 * angle_delta
                            } else {
                                start_angle
                            };
                            let (child_x, child_y) = calculate_coordinates(
                                RADIUS_DISTANCE_FROM_PARENT,
                                child_angle
                            );

                            let absolute_child_x = start_x + child_x;
                            let absolute_child_y = start_y + child_y;

                            view! {
                                <line
                                    x1=start_x
                                    y1=start_y
                                    x2=absolute_child_x
                                    y2=absolute_child_y
                                    stroke="rgba(0,0,0,0.3)"
                                    stroke-width="2"
                                    stroke-dasharray="5,5"
                                    pointer-events="none"
                                />
                                <CareerNodeView
                                    node=child_node
                                    start_x=absolute_child_x
                                    start_y=absolute_child_y
                                    start_angle=child_angle
                                />
                            }
                        }).collect_view()
                    }
                </Show>
                <g
                    class=style::career_card
                    style:transform=format!("translate({}px, {}px)", start_x as i32, start_y as i32)
                >
                    <circle
                        r="50"
                        fill="white"
                        stroke="black"
                        stroke-width="2"
                    />
                    <image
                        href=node.logo_url.clone()
                        x="-25"
                        y="-25"
                        width="50"
                        height="50"
                    />
                </g>
            </g>
        </svg>
    }.into_any()
}

fn calculate_coordinates(rayon: f64, angle_deg: f64) -> (f64, f64) {
    let angle_rad = (angle_deg * PI) / 180.0;

    let x = rayon * angle_rad.cos();
    let y = rayon * angle_rad.sin();

    (x, y)
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct CareerNode {
    pub id: i32,
    pub logo_url: String,
    pub title: String,
    pub year: i32,
    pub parent_id: Option<i32>,
    pub children: HashMap<i32, CareerNode>,
    pub metadata: Option<HashMap<String, String>>,
}

#[derive(Clone, Deserialize, Serialize, Default)]
pub struct CareerNodeTree {
    pub roots: HashMap<i32, CareerNode>,
}

impl CareerNodeTree {
    pub fn build_from_flat_data(nodes: Vec<CareerNode>) -> Self {
        let mut node_map: HashMap<i32, CareerNode> = nodes
            .into_iter()
            .map(|node| (node.id, node))
            .collect();

        let root_id = node_map
            .values()
            .find(|node| node.parent_id.is_none())
            .expect("Aucun root node trouvé. Un nœud sans parent_id est nécessaire.")
            .id;

        let mut root = node_map
            .remove(&root_id)
            .expect("Impossible de trouver le root après extraction.");

        let mut unprocessed = Vec::new();
        while !node_map.is_empty() {
            for (id, node) in node_map.drain() {
                if let Some(parent_id) = node.parent_id {
                    if let Some(parent_node) = Self::find_node_mut(&mut root, parent_id) {
                        parent_node.children.insert(node.id, node);
                    } else {
                        unprocessed.push((id, node));
                    }
                }
            }

            for (id, node) in unprocessed.drain(..) {
                node_map.insert(id, node);
            }
        }

        CareerNodeTree {
            roots: HashMap::from([(root_id, root)]),
        }
    }

    fn find_node_mut(node: &mut CareerNode, id: i32) -> Option<&mut CareerNode> {
        if node.id == id {
            return Some(node);
        }
        for child in node.children.values_mut() {
            if let Some(found) = Self::find_node_mut(child, id) {
                return Some(found);
            }
        }
        None
    }
}

The issue you are experiencing does not seem to have anything to do with .into_any().
It seems to have to do with the way that you are using Resource, which does not resemble how it is intended to be used.
You are using a Resource that returns no value (()), but mutates a signal in its async block. This just does not work.
Try this instead:
let load_career = Resource::new(|| (), {
    let career_nodes = career_nodes.clone();
    move |_| {
        let career_nodes = career_nodes.clone();
        async move {
            CareerNodeTree::build_from_flat_data(career_nodes)
        }
    }
});

// ...
<Suspense fallback=move || view! {
"Loading career..."
 }>
    {move || {
        load_career.get().map(|career| {
            career.roots.iter()
            .map(|(id,root)|
                view! {
                    <CareerNodeView node={root.clone()} start_x=1500.0 start_y=200.0 start_angle=90.0/>
                }
            ).collect_view()
        })
    }}
</Suspense>

That has no hydration error.
If you have questions about why mutating a signal inside the async block of a Resource is a bad idea, the answer is that Resource loads its data on the server, and serializes it to the client, and therefore the async block doesn't run on the client: it just deserializes the data. However, your load_career resource serializes no data to the client, but sets a signal on the server that it doesn't set on the client, because it's just trying to deserialize the value that was sent.
Feel free to ask additional help questions or Discord or consult the async sections of the book; I do not think there is an issue here. If you run into a future issue that you think is related to .into_any(), please open a new issue with a minimal reproduction.

{
let career: RwSignal<CareerNodeTree> = RwSignal::new(CareerNodeTree::default());

    let load_career = Resource::new(
        || (),
        move |_| async move {
            match load_career().await {
                Ok(career_tree) => career.set(career_tree),
                Err(err) => logging::error!("Career loading error: {:?}", err),
            }
        },
    );

}
#[server(LoadCareer)]
pub async fn load_career() -> Result<CareerNodeTree, ServerFnError> {
    let career_nodes: Vec<CareerNode> = get_career_nodes().await?;

    Ok(CareerNodeTree::build_from_flat_data(career_nodes))
}

#[server]
pub async fn get_career_nodes() -> Result<Vec<CareerNode>, ServerFnError> {
    let mut connection = crate::libs::database::ssr::db().await?;

    let career_nodes = sqlx::query_as::<_, CareerNode>("SELECT * FROM careers")
        .fetch_all(&mut connection)
        .await?;

    Ok(career_nodes)
}

Thank you for your detailed response and explanation regarding Resource. You’re absolutely right that the simplified example I provided used signal mutation as a placeholder to focus on reproducing the issue. In my actual project, I do use a proper #[server] function to fetch and deserialize data, which avoids the pitfalls you mentioned about signal mutation during server-side rendering.
That said, I am still encountering the hydration error when using .into_any() in my actual implementation, even when using the #[server] function. This issue is preventing me from making progress, as I cannot figure out what’s causing the mismatch between the server-rendered and client-rendered DOM.

my actual project... avoids the pitfalls you mentioned about signal mutation during server-side rendering.

Is your actual project the additional sample you posted above after I replied?
Because if so, it is still doing the exact same thing: mutating a signal in the async block of the resource:
{
let career: RwSignal<CareerNodeTree> = RwSignal::new(CareerNodeTree::default());

    let load_career = Resource::new(
        || (),
        move |_| async move {
            match load_career().await {
                Ok(career_tree) => career.set(career_tree), // THIS IS THE ISSUE
                Err(err) => logging::error!("Career loading error: {:?}", err),
            }
        },
    );


[dashboard] should be able to add any slice to a dashboard, not just your own

allow a user to add any slice to a dashboard that they have permissions to view, not just slices they have created, from the Add Slice modal flow on dashboards.

Notice: this issue has been closed because it has been inactive for 522 days. Feel free to comment and request for this issue to be reopened.


Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object.

Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object.
at SimplCommerce.WebHost.Extensions.ServiceCollectionExtensions.RegisterModuleInitializerServices(ModuleInfo module, IServiceCollection& services)
at SimplCommerce.WebHost.Extensions.ServiceCollectionExtensions.AddModules(IServiceCollection services, String contentRootPath)
at SimplCommerce.WebHost.Startup.ConfigureServices(IServiceCollection services)
--- End of stack trace from previous location where exception was thrown ---
at Microsoft.AspNetCore.Hosting.ConventionBasedStartup.ConfigureServices(IServiceCollection services)
at Microsoft.AspNetCore.Hosting.Internal.WebHost.EnsureApplicationServices()
at Microsoft.AspNetCore.Hosting.Internal.WebHost.Initialize()
at Microsoft.AspNetCore.Hosting.WebHostBuilder.Build()
at SimplCommerce.WebHost.Program.Main(String[] args)
All works great in windows, but when I'm tring to deploy in a ubuntu linux server I got this error after configure and run postgresql ef
I feel like it's a kind of url bug when ist's tring to load *.dll modules

@lisandroiraguen Do you have your codebase up to date with the latest master branch. Because I believe that I have throw a better error message for this https://github.com/simplcommerce/SimplCommerce/commit/bb1d517f91c99435f60cf6c4c8aa615e9d2d670c


DSL for NotBlankString

Description
Create a new DSL for building an instance of NotBlankString.

Should be introduced as an alpha feature!

Checklist

[ ] Implement.
[ ] Test.
[ ] Refactor.
[ ] Update Work in progress section in changelog.

This issue will not be implemented: users can build a NotBlankString using its stable builders.


Release name cannot be set using environment variable

What happened?
I suspect a bug regression.  I can not use a variable in my release name field but I believe this is supposed to work.
When running devspace dev
postgres deploy:postgres Deploying chart postgresql (postgres) with helm...
postgres create_deployments: error deploying postgres: unable to deploy helm chart:  error executing 'helm upgrade ${USER} --values /var/folders/s2/2ngzzp3s4znf500qz0yk2zxc0000gq/T/2543688261 --install --namespace mynamespace postgresql --repo https://charts.bitnami.com/bitnami --repository-config='' --version 13.1.0 --kube-context my-context': Error: release name is invalid: ${USER}
What did you expect to happen instead?
It should resolve the environment variable and name my helm release that.
How can we reproduce the bug? (as minimally and precisely as possible)
Create a deployment like this
version: v2beta1

vars:
  USER: $(whoami)

deployments:
  postgres:
    helm:
      releaseName: ${USER}
      chart:
        name: postgresql
        repo: https://charts.bitnami.com/bitnami
        version: "13.1.0"
      values:

Local Environment:

DevSpace Version: 6.3.3
Operating System: mac
ARCH of the OS: Intel
Kubernetes Cluster:
Cloud Provider: google
Kubernetes Version: GKE v1.26.5-gke.210

@kelly-brown Hello! I'm having a little bit of trouble reproducing this. I've tried with version 6.3.2, 6.3.3, and the latest (6.3.4) and all seem to work. Can you share the output of devspace print?
I used your exact devspace.yaml and was able to run devspace dev successfully. Here's the output of devspace dev --debug. Maybe you'll be able to spot the difference in our environments.
❯ devspace dev --debug
17:53:11 info Using namespace 'test'
17:53:11 info Using kube context 'kind-kind'
17:53:11 debug Use config:
version: v2beta1
name: eng-2350
deployments:
    postgres:
        name: postgres
        helm:
            releaseName: russellcentanni
            chart:
                name: postgresql
                version: 13.1.0
                repo: https://charts.bitnami.com/bitnami

17:53:11 debug Run pipeline:
name: dev
run: |-
    run_dependencies --all
    ensure_pull_secrets --all
    build_images --all
    create_deployments --all
    start_dev --all

17:53:11 run_dependencies --all
17:53:11 Marked project excluded: eng-2350
17:53:11 ensure_pull_secrets --all
17:53:11 build_images --all
17:53:11 create_deployments --all
17:53:11 Deploying 1 deployments concurrently...
17:53:11 deploy:postgres Deploying chart postgresql (russellcentanni) with helm...
17:53:11 deploy:postgres Deploying chart with values:
 {}

17:53:12 deploy:postgres Execute 'helm upgrade russellcentanni --values /var/folders/3k/f2wz_n393392ky9z0999d4bm0000gn/T/1175510290 --install --namespace test postgresql --repo https://charts.bitnami.com/bitnami --repository-config='' --version 13.1.0 --kube-context kind-kind' in directory /Users/russellcentanni/Projects/devspace/test/ENG-2350
17:53:17 deploy:postgres Deployed helm chart (Release revision: 1)
17:53:17 deploy:postgres Successfully deployed postgres with helm
17:53:17 Deploying 0 deployments concurrently
17:53:17 start_dev --all
17:53:17 debug Wait for dev to finish

Hopefully we can figure this out!

Hey @kelly-brown 👋
Closing this issue for now due to inactivity and because we didn't manage to reproduce it.
Feel free to reopen it in case you can provide us more of the insights @lizardruss specified above.
Thanks! Appreciate your help in improving devspace 🚀


Very large pagefile.sys on Windows drive causes problem

Am running this just fine in most cases but on a few servers where there is a large pagefile.sys (15+ Gig), it causes problems for DirectoryLister.  Any solution?

First, I believe the pagefile.sys lives in the root of the C:\ drive by default. It is NOT recommended to list the entire drive as it would expose all of the data on that drive including personal and system files. Try listing a more specific directory instead.
Also, what kinds of problems is it causing? Please provide additional details (e.g. error messages) so we can attempt to understand and solve the problem.

This server has multiple drives.  DirectoryLister is on the D drive, where the page file also is.  I want to list the drive starting at the root of D as there are 4 apps on the D drive.
The page error is:
An unexpected error occurred Enable debugging for additional information.
When enabling debug I get:
Twig \ Error \ RuntimeError
An exception has been thrown during the rendering of a template ("SplFileInfo::getSize(): stat failed for .\pagefile.sys").
Previous exceptions
SplFileInfo::getSize(): stat failed for .\pagefile.sys (0)
And the following is displayed:

This might be a permissions issue. Try adding pagefile.sys to your hidden files and see if the problem persists.

Adding pagefile.sys to the hidden files does not work.

I just noticed that .hidden doesn't seem to be working.  The app folder and index.php as well as anything I place in .hidden is NOT hidden.
I have the following in .hidden which is located in the same dir as app and .env
'hidden_files' => [
'AdoptOpenJDK',
'pagefile.sys',
]

Make sure Explorer is configured to show file extensions. I suspect the .hidden file is being created with an extension which it should not be.

Doubled checked, no extension.  .env and .hidden are just as shown, no extension.

This is running on Server 2012R2 64bit and PHP is 7.4.12

I don't have Windows server to test on but everything is working as expected on Windows 10.

Everything works fine except for hiding files and the pagefile.sys issue.  I'll continue to try things on this end.  My biggest need is a workaround for the pagefile issue.  Thanks.

I believe that the issue is not with the pagefile itself, I have run into this same issue in other directories and it seems that DirectoryLister doesn't like locked files.
In every situation, there is 1 or more locked files in the directory where DL chokes.  If you shutdown the application that has those file locked/open, the problem goes away.
What can be done about that, what are my options?  Not being able to have DL deal with open/locked files is a no go for me.
Thanks for your app and your help!

there is 1 or more locked files in the directory where DL chokes

If an application puts a lock on a file then other applications (not just Directory Lister) wouldn't be allowed to access those file and wouldn't be a problem with Directory Lister.
Being that pagefile.sys is a system file it may be locked or have special permissions that prevent Directory Lister from accessing it.

Thanks, I still do not understand why hidden files won't work.  I have triple checked everything and according to all instructions I have it correct, but yet no go.  Maybe I'll load things up on a non Windows server OS and see if it's something with server OS.  Thanks


making client recipe works on CentOS

Check for the glusterfs package, indeed I will remove that one.
Regarding the fuse and fuse-libs packages, if those are not added at least on CentOS 6, the mount command fails.

Can you output what happens w/o fuse on centos6?
Not having an issue w/o fuse and can't find any doc that says to install fuse or fuse-lib

I tested again and I cannot reproduce... :-(
LEt me close that pull request and create new one to fix the typo with default['gluster']['client']['volumes'] definition and adding the client::mount to the client recipe.


fix(file-uploader): add "tabindex=0" attribute for svg to make the close icon keyboard operable

fix(file-uploader): add "tabindex=0" attribute for svg to make the close icon keyboard operable
Closes IBM/carbon-components-angular#https://github.com/IBM/carbon-components-angular/issues/1897

@GSSCDylan you may need to change your commit message in the form of fix(file-uploader): <your message> in order for semver to publish a new version with your changes

@GSSCDylan you may need to change your commit message in the form of fix(file-uploader): <your message> in order for semver to publish a new version with your changes

I've change the commit, thanks for your info.


Added aquila trainer to train seasonal time series

Oh, interesting. I was not necessarily thinking that this would go under the main OSS repo but I like that idea.
Can we call this "STL" rather than Aquila, though? This is just the forecaster part, and that's basically a slightly fancier version of STL that we will probably break up. Trying to keep the main repo for standard algos, not custom stuff.


License API seem to have dropped out again.

Ths .json file is present, but no .py

https://github.com/CiscoDevNet/uniq/pull/67

Available in <IP_ADDRESS> https://pypi.python.org/pypi/uniq/<IP_ADDRESS>


double.NaN deg should be parsed as valid angle object

double.NaN deg should be parsed as valid angle object
Other unit class should have the similar behavior.

This is related to #9. Currently "NaN" is parsed.


Implement controlled upgrades

Summary
This pull request implements the controlled upgrade process for the Kubernetes Control Plane charm.
Changes

Implement the upgrade action.

Depends on: https://github.com/charmed-kubernetes/charm-lib-kubernetes-snaps/pull/8


while pass ‘render=True’ get 'Window rendering not supported'

Traceback (most recent call last):
  File "oracle.py", line 70, in <module>
    use_gpu=True,  # Turn on if you have a GPU
  File "/home/cww97/rlkit/rlkit/launchers/launcher_util.py", line 594, in run_experiment
    **run_experiment_kwargs
  File "/home/cww97/rlkit/rlkit/launchers/launcher_util.py", line 175, in run_experiment_here
    return experiment_function(variant)
  File "/home/cww97/rlkit/rlkit/launchers/state_based_goal_experiments.py", line 108, in her_td3_experiment
    algorithm.train()
  File "/home/cww97/rlkit/rlkit/core/rl_algorithm.py", line 146, in train
    self.train_online(start_epoch=start_epoch)
  File "/home/cww97/rlkit/rlkit/core/rl_algorithm.py", line 167, in train_online
    observation = self._take_step_in_env(observation)
  File "/home/cww97/rlkit/rlkit/core/rl_algorithm.py", line 206, in _take_step_in_env
    self.training_env.render()
  File "/home/cww97/multiworld/multiworld/envs/mujoco/mujoco_env.py", line 124, in render
    self._get_viewer().render()
  File "/home/cww97/multiworld/multiworld/envs/mujoco/mujoco_env.py", line 133, in _get_viewer
    self.viewer = mujoco_py.MjViewer(self.sim)
  File "/home/cww97/.conda/envs/rlkit/lib/python3.5/site-packages/mujoco_py/mjviewer.py", line 133, in __init__
    super().__init__(sim)
  File "/home/cww97/.conda/envs/rlkit/lib/python3.5/site-packages/mujoco_py/mjviewer.py", line 26, in __init__
    super().__init__(sim)
  File "mujoco_py/mjrendercontext.pyx", line 278, in mujoco_py.cymj.MjRenderContextWindow.__init__
  File "mujoco_py/mjrendercontext.pyx", line 66, in mujoco_py.cymj.MjRenderContext.__init__
  File "mujoco_py/mjrendercontext.pyx", line 87, in mujoco_py.cymj.MjRenderContext._set_mujoco_buffers
RuntimeError: Window rendering not supported

ummmm

opps, it seem that my code is not the newest one.
maybe I should pull

Please look this up online as it's not a problem specific to rlkit.


[HW] Pavan Kumar Dittakavi

Name: Pavan Kumar Dittakavi
Email<EMAIL_ADDRESS>Linkedin Profile: https://www.linkedin.com/in/dittakavipavankumar/
Attach the homework screenshots below for both step II and step III:

I completed the course, please let me know if anything else is to be done from my end. Thanks for the great course!.

Hey there Pavan, thank you for your submission. Nice job getting Through the workshop materials. The only thing we are missing is step 3 of the homework.
3. Complete the following short courses: Cassandra Data Modeling and Cassandra Query Language. Take screenshots of the "Congratulations" page from each course.
Please post an image of the "completed" screen once finished.

I see that the issue got closed. I am not sure if this is intended. Please let me know.

Pavan Kumar Dittakavi
Thank you for your efforts, it is a pleasure for us to give you your well deserved BADGE at the following link

https://api.badgr.io/public/assertions/cHrjhbjIR0WijlVeMxraLA

You can now brag about it on Twitter, Facebook or LinkedIn. It helps the workshops to be more visible and encourages us Advocates coming back every week with new content. Please make sure to use the hashtag #DatastaxDevWorkshops.
💚   🙏🏻    🙏🏽   🙏🏿
The Datastax Advocates Team (@DatastaxDevs)
#DatastaxDevWorkshops


Binpacking Optimization for EC2 Spot Provisioning

Tell us about your request
According to the design docs of binpacking, karpenter will first choose ec2 spot instances based on binpacking and provisiners. It is not suitale for Spot instances because it may have high spot interruption. So is that possible to optimize binpacking for spot?
Tell us about the problem you're trying to solve. What are you trying to do, and why is it hard?
Ideally, if karpenter calling ec2 fleet api first and then performing binpacking, We think it is more suitable for Spot Instances. Or disable binpacking for Spot?
Are you currently working around this issue?
Multiple Provisioners with different weights. But this requires additional logics to modify the  provisioners accordingly.
Additional Context
No response
Attachments
No response
Community Note

Please vote on this issue by adding a 👍 reaction to the original issue to help the community and maintainers prioritize this request
Please do not leave "+1" or "me too" comments, they generate extra noise for issue followers and do not help prioritize the request
If you are interested in working on this issue or have submitted a pull request, please leave a comment

I'm not sure if calling EC2 Fleet first would help that much. It may also make the spot allocations strange sizes that don't optimize costs, which is spot's main goal. It would also slow down scaling quite a bit, since we'd have to request 1 instance at a time and keep calling EC2 Fleet until all pods are packed on instances.
I think tuning the Provisioner using karpenter.k8s.aws/instance-cpu is probably the best way to deal with Karpenter packing pod on nodes that are too big, which limits diversity and bigger instances are more likely to be in shallower capacity pools.  You'd probably need to tune provisioners in the other direction (filter out some threshold of small instance types) if we called EC2 Fleet first anyways.

Whether multiple provisioner or karpenter.k8s.aws/instance-cpu is not the best for Spot when using karpenter. We hopefully AWS can re-think Spot Binpacking.


online shopping webaite added

Online Shopping Website #644

Close #644

Checklist:

[x] I have mentioned the issue number in my Pull Request.
[x] I have commented my code, particularly in hard-to-understand areas
[x] I have created a helpful and easy to understand README.md

Pls consider this under hacktober22.

@pranjay-poddar hey, can you took  why this checks are not passed?