Automatic Build & Deploy scripts are not working with recent Unity versions

Hello there!
I'm new on the entire Gamelift technology, and I'm trying to learn how to use it with Unity. First of all, thanks for that wonderful project with a great step-by-step guide.
In your tutorial, it seems that the buildconfig.bat script is no longer working with the version on Unity I am currently using: 2019.1.4f1. Your script currently does the following when looking for the Unity.exe file in order to build the project:
IF EXIST "%ProgramFiles(x86)%\Unity\Editor\Unity.exe"
SET UNITYEXE="%ProgramFiles(x86)%\Unity\Editor\Unity.exe"
IF EXIST "%ProgramFiles%\Unity\Editor\Unity.exe"
SET UNITYEXE="%ProgramFiles%\Unity\Editor\Unity.exe"
but my Unity EXE file is located at %ProgramFiles%\Unity\Hub\Editor\2019.1.4f1\Editor\Unity.exe. That being said, I managed to make it work so far by change that line of code.
However, when I'm trying to deploy a fleet on Gamelift, the script deploy.bat also encounters an error when trying to take the build result from the precedent step. That time, it's the --root-path %ABS_ROOT%\Output\Server\Image argument that causes a problem when executing the DeployTool.exe. Since this repertory doesn't exist in the 2019.1.4f1 project folder architecture, I couldn't manage to find what tweak I could do to make the script work because I don't know what the program wants to do with that folder.
Thanks a lot!
-Élie

Hello @Reelie ,
Do you have the output from the failing deploy.bat execution for me to look at? This will help me reproduce your problem and offer a fix.
Thank you,
Al Murray :)
Amazon Game Tech

It simply does not find the repertory passed in argument : %ABS_ROOT%\Output\Server\Image
My guess is that the newest Unity versions doesn't build the same output than it did before.
Well, here's the error log I'm getting

Exception non gérée : System.IO.DirectoryNotFoundException: Impossible de trouver une partie du chemin d'accès '[...]\GameliftTesting\Output\Server\Image'.
à System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
à System.IO.FileSystemEnumerableIterator1.CommonInit()    à System.IO.FileSystemEnumerableIterator1..ctor(String path, String originalUserPath, String searchPattern, SearchOption searchOption, SearchResultHandler1 resultHandler, Boolean checkHost)    à System.IO.DirectoryInfo.EnumerateFileSystemInfos(String searchPattern, SearchOption searchOption)    à System.IO.Compression.ZipFile.DoCreateFromDirectory(String sourceDirectoryName, String destinationArchiveFileName, Nullable1 compressionLevel, Boolean includeBaseDirectory, Encoding entryNameEncoding)
à DeployTool.Program.ZipBuild(String rootpath) dans [...]\GameliftTesting\DeployTool\Program.cs:ligne 181
à DeployTool.Program.d__4.MoveNext() dans [...]\GameliftTesting\DeployTool\Program.cs:ligne 154
--- Fin de la trace de la pile à partir de l'emplacement précédent au niveau duquel l'exception a été levée ---
à System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
à System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
à DeployTool.Program.d__3.MoveNext() dans [...]\GameliftTesting\DeployTool\Program.cs:ligne 109
--- Fin de la trace de la pile à partir de l'emplacement précédent au niveau duquel l'exception a été levée ---
à System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
à System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
à DeployTool.Program.Main(String[] args) dans [...]\GameliftTesting\DeployTool\Program.cs:ligne 26

Thank you! :)
-Élie

Same problem here, @Reelie did you manage to fix it ?

Not yet, I was still waiting for @alanmur to see if can find a workaround if possible :)

I am looking at this issue. Hopefully I should be able to resolve this week.

Hey @Reelie and @Patryk-Szylin
The latest commits now upgrades the project to Unity 2019.1.8f1
I trust this resolves your problem. Open a new issue if you have any problems.
Al Murray :)
Solutions Architect
Amazon Game Tech


Episode Idea: Network Policy

After watching the amazing episode hosted by @joshrosso
about pod security policies, I wondered if you guys could make a follow up about Network Policies.

@guibirow, fantastic idea.
I'll run this by @mauilion and @jbeda as a potential future episode.
In the mean time, I have covered this concept with a video and blog post here: https://octetz.com/posts/k8s-network-policy-apis
Sorry for the self-plug :)
Regardless, this would make a great TGIK episode!

Amazing stuff Josh
Just watched it, if you do TGIK on this subject for sure I will watch it again
Just the video seems to be cut before the finish, but I could follow the rest from the tutorial.
In the TGIK, can you guys also get into more details about the internals of CNI plugins like:

Why it need specific CNI pluggins and what happens behind the scenes
Good practices
Your experiences using these policies on default CNI used by Managed Kubernetes offerings like GKE, AKS, EKS, (VMWARE)KS

Thanks Again!

Great! Thanks for the feedback and hopefully we'll get this in a TGIK in the future :+1:

Monday or Tuesday:

[x] Pick a topic and create/use an issue in the repo
[x] If applicable coordinate with an upstream project if they're interested in attending the show
[x] Create the graphic
[x] Schedule on Youtube
[x] Add scheduled episode to TGIK playlist on YT
[x] Create short link in rebrandly
[x] Tweet about it from your personal account

[x] Post tweets on internal #tgik slack channel and cc @castrojo and @boschem
[x] Get confirmation from @boschem that he's seen the tweet and is scheduling it

Before episode:

[x] Create HackMD page for live notes.  Start with README template in this repo
[x] Paste HackMD URL on internal #tgik channel and cc @castrojo or other assistant

[x] Assistant adds ~5-10 news items from around the web as possible "News of the Week"

[x] Get everything tested well before episode so you can debug
[x] Use internal slack channel to ensure that AV setup is good

After show (ideally right away but can wait until Monday):

Create/submit PR for this repo

[x] Episode directory and README from hackmd
[x] Any other files from the episode that might be useful
[x] Update playlist.md with episode
Feel free to self merge

[x] Edit YT description to point to episode directory here
[x] OBS/OS Upgrade if applicable (Never on the day of a show)


Introduce Gradle build system

opendistro-for-elasticsearch/security pull request intake form
Please provide as much details as possible to get feedback/acceptance on your PR quickly

Category: (Enhancement, New feature, Bug fix, Test fix, Refactoring, Maintenance, Documentation)
Maintenance

Github Issue # or road-map entry, if available:

Description of changes:

Why these changes are required?
Security plugin has 2 build systems: Maven and Gradle(building .rpm and .deb packages). It's necessary to combine them into a single one(Gradle).

What is the old behavior before changes and new behavior after changes? (Please add any example/logs/screen-shot if available)

Testing done: (Please provide details of testing done: Unit testing, integration testing and manual testing)

Unit Tests
Manual Testing:

Ran ./gradlew clean build --no-daemon -Dbuild.snapshot=false -x test, artifacts are generated in gradle-build/distributions/
The following artifacts are generated:

opendistro_security-<IP_ADDRESS>.jar
opendistro-security-<IP_ADDRESS>.zip
opendistro-security-<IP_ADDRESS>-securityadmin-standalone.zip
opendistro-security-<IP_ADDRESS>-securityadmin-standalone.tar.gz

Installed security plugin generated by Gradle on ES. Securify configurations are loaded into elasticsearch-7.10.2/plugins/opendistro_security/securityconfig
Ran install_demo_configuration.sh, security settings are added into elasticsearch.yml file.
The plugin folder name in elasticsearch-7.10.2/plugins is opendistro_security

TO-DOs, if any: (Please describe pending items and provide Github issues# for each of them)

Is it backport from main branch? (If yes, please add backport PR # and commits #)

By making a contribution to this project, I certify that:
(a) The contribution was created in whole or in part by me and I
have the right to submit it under the open source license
indicated in the file; or
(b) The contribution is based upon previous work that, to the best
of my knowledge, is covered under an appropriate open source
license and I have the right under that license to submit that
work with modifications, whether created in whole or in part
by me, under the same open source license (unless I am
permitted to submit under a different license), as indicated
in the file; or
(c) The contribution was provided directly to me by some other
person who certified (a), (b) or (c) and I have not modified
it.
(d) I understand and agree that this project and the contribution
are public and that a record of the contribution (including all
personal information I submit with it, including my sign-off) is
maintained indefinitely and may be redistributed consistent with
this project or the open source license(s) involved.

Please limit scope of the PR just to migration from maven to gradle build system. Anything not directly related to maven->gradle migration such as UT, java doc, JDK version upgrade should be part of a separate PR(s).

I've excluded java doc from compilatoin, I can remove the change in java doc.
But all other changes are necessary. If we move all these changes to separate PRs, we'd have to create quite a few PRs and merge them before this PR.
Would that help if I modify the title of the PR and add some description for those changes in the PR description to clarify the scope of the PR?

Change PR and commit title to something like "migrate build system from maven to gradle"

Changing PR title is necessary to avoid confusion regarding the goal of the PR, but it will not help with other issues. If version of gradle needs to be upgraded, it should be a separate PR and commit as in one large PR it is impossible to distinguish changes required for gradle upgrade and changes required for migrating from maven to gradle. The same applies to all other unrelated to maven -> gradle changes.

Will re-open later if needed.


Can't change UI language

I installed everything and it's working but when I tried to switch UI language except English nothing works.

HI there, that I may not be able to help with. I've only used with English, are there any steps you took to be able to load those additional languages?

@tiredofit sorry for the late reply. I found this on Freepbx https://issues.freepbx.org/browse/FREEPBX-3707 it seems that the GUI language pack depends on the server locales.

There was someone named @uplinkws who forked my image a couple months ago and was able to add german files to it, however I believe that was only for the Asterisk sound files.  Sounds like you may need to fork as well and add locales to your own image. I will investigate what the size difference will be and see what the possibilities are in coming days..

@tiredofit  I just found the solution to this problem. Here are the steps you need to take:

apt-get update && apt-get install -y debconf locales locale-gen
2.vim /etc/locale.gen and uncomment the locale you want
locale-gen
go back to freepbx UI and switch languages it will work

Hopefully this helps

Fixed now available with tiredofit/freepbx:latest (Freepbx 15, Asterisk 16) and also backported to old branch (tiredofit/freepbx:14-latest or tiredofit/freepbx:14-2.14)

Backported to 14-latest


Added Pomodoro-Functionaliy

You can now start a pomodoro-cycle via timerp!
When calling timerp, the workflow now starts a 25 minutes work-timer.
When the first timer is over, it starts another 5 minutes break-timer.

+1 for this!

+1


Profile - Address - State/Province field remains blank after entering address

If you haven’t already, check out our contributing guidelines for onboarding and email<EMAIL_ADDRESS>to request to join our Slack channel!

Version Number: 1.4.76-3
Reproducible in staging?: Y
Reproducible in production?: N
If this was caught during regression testing, add the test name, ID and link from TestRail: https://expensify.testrail.io/index.php?/tests/view/4578514
Email or phone of affected tester (no customers<EMAIL_ADDRESS>Logs: https://stackoverflow.com/c/expensify/questions/4856
Issue reported by: Applause-Internal team
Action Performed:

Open iOS or Android App
Login with any account
Open Setting > Profile > Address
Start entering a non-US address
Select any of the suggested addresses

Expected Result:
All address fields are filled in
Actual Result:
'State / Province' field remains blank after entering address
Workaround:
Unknown
Platforms:

Which of our officially supported platforms is this issue occurring on?

[x] Android: Native
[ ] Android: mWeb Chrome
[x] iOS: Native
[ ] iOS: mWeb Safari
[ ] MacOS: Chrome / Safari
[ ] MacOS: Desktop

Screenshots/Videos
https://github.com/Expensify/App/assets/115492554/86f5773f-fe63-4463-bb7f-69fc33562aa8
https://github.com/Expensify/App/assets/115492554/a0587502-0c43-4447-bfb2-6601a8df81ec

View all open jobs on GitHub

We think this issue might be related to the #vip-vsb

Production
https://github.com/Expensify/App/assets/115492554/1bd96e21-4800-46e5-85e9-ed5efdc7b80b

This only happens in iOS/Android so I'm gonna remove the DeployBlocker label for Web since it doesn't seem to be an API issue.


activation: prove with empty challenge only once

Motivation

Closes #3087

Changes

generate proof only only if ATX is initial

Test Plan

Unit tests, system tests
DevOps Notes

[x] This PR does not require configuration changes (e.g., environment variables, GitHub secrets, VM resources)
[x] This PR does not affect public APIs
[x] This PR does not rely on a new version of external services (PoET, elasticsearch, etc.)
[x] This PR does not make changes to log messages (which monitoring infrastructure may rely on)

bors try

bors try

bors try

i think it needs a test

@dshulyak Thanks. Added.

bors merge


[md2orchestra] Implement actors and their states

For md2orchestra and orchestra2md, implement translation of

actors
state variables of actors
flows

Tracked in Jira as ODOC-14


dialyzer fix for guides/api::SessionController example

For Dialyzer users
Before:
:0: Unknown type 'Elixir.Conn':t/0
done (warnings were emitted)

After:
done (passed successfully)

Thanks!


manager: add GetNodeAllocatable in quota-controller

Ⅰ. Describe what this PR does

Ⅱ. Does this pull request fix one issue?

Ⅲ. Describe how to verify it
Ⅳ. Special notes for reviews
V. Checklist

[ ] I have written necessary docs and comments
[ ] I have added necessary unit tests and integration tests
[ ] All checks passed in make test

/lgtm
/approve


Introduce option to prevent underlining multiple lines

I rebased #463 in hopes that you'll reconsider merging this useful feature.
Your main concern seems to be consistency, but that's not a concern shared by ESLint maintainers:

In #8004, it was decided that ESLint should report large ranges if a node with a large range is reported by a rule, and allow integrations to display a smaller report if desired. The reasoning is that different integrations will have different needs with regard to report ranges (for example, an integration that posts comments on GitHub might want to know the entire reported range, whereas an editor integration might only want to highlight a subset of a reported range).
Source

https://user-images.githubusercontent.com/1925840/192356428-aa9cf4a2-5870-4cf9-ac3a-0204fb635c32.mov

I think the video is a good example why underlining the first line is not a good idea. The error is about the fact that role="button" implies some other property. Only underlining <div might not be very helpful.

@dbaeumer That's a tradeoff that the user should be able to make on their own

The changes look good to me.
@aleclarson you need to accept the CLA (see https://github.com/microsoft/vscode-eslint/pull/1528#issuecomment-1258456366). I will not be able to merge this without you accepting it.

@microsoft-github-policy-service agree


fix(card): title styles being overridden by global typography

Fixes the card title styles potentially being overridden by the global .mat-typography styles if the title is set on a header node.
Fixes #10215.

Caretaker note: this might affect people's overrides.

This ended up with quite a bit of screenshot diff failures internally - will take more time than we have to fix them and get approvals. This will likely have to wait until v7

We're probably not going to be able to get this in for 7.0

V9 is comming. I hope after mdc debuting this will be fixed too.

Closing since this fix is for the legacy mat-card which has been superseded by the MDC based one.


perf(vite-plugin-angular): speed up tests by reusing compiler

PR Checklist
The current plugin creates a new compiler for each test file, thus slowing down tests.
P.S.: I am willing to add some performance tests but let's discuss the strategy first 😊
What is the new behavior?
This PR speeds up tests considerably (3x to 10x)
Does this PR introduce a breaking change?

[ ] Yes
[X] No

Other information
[optional] What gif best describes this PR or how it makes you feel?

https://github.com/analogjs/analog/pull/1443 is an even better alternative.

Published in 1.9.5-beta.1


Add patching fixtures and more UTs

What this PR does / why we need it: UTs added
Which issue this PR fixes (optional, in fixes #<issue number>(, fixes #<issue_number>, ...) format, will close that issue when PR gets merged): fixes #
Special notes for your reviewer:
Release note:

Codecov Report

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

@@           Coverage Diff           @@
##           master      #45   +/-   ##
=======================================
  Coverage   46.87%   46.87%
=======================================
  Files          13       13
  Lines         689      689
  Branches       72       72
=======================================
  Hits          323      323
  Misses        352      352
  Partials       14       14


favorites.addToFavoritesGroup should add to favourites currently opened file if called not from explorer

It would be great if I can select from quick pick list.

Please update to version 2.3.0. Problem should be fixed.


Show namedspace should be case insensitive

related to: https://github.com/almighty/almighty-core/issues/1275

Maybe we should have a lowercase index as well to speed up the lookup?!

@kwk Don't we already have one index for space name and owner_id ?

@kwk Don't we already have one index for space name and owner_id ?

yes we do but that index is the space name as is. For now it is fine and I consider that an optimization. But there are probably more places where we can optimize.

Make sure we the constraints can't create home and Home as well.. :)

thx @alexeykazakov

ping @kwk

Codecov Report

Merging #1279 into master will decrease coverage by 0.15%.
The diff coverage is 100%.

@@            Coverage Diff             @@
##           master    #1279      +/-   ##
==========================================
- Coverage   60.24%   60.09%   -0.16%
==========================================
  Files         119      119
  Lines       10704    10705       +1
==========================================
- Hits         6449     6433      -16
- Misses       3603     3617      +14
- Partials      652      655       +3

Impacted Files
Coverage Δ

space/space.go
69.46% <100%> (ø)
:arrow_up:

migration/migration.go
54.36% <100%> (+0.1%)
:arrow_up:

remoteworkitem/github.go
77.14% <0%> (-22.86%)
:arrow_down:

models/transaction.go
50% <0%> (-20%)
:arrow_down:

remoteworkitem/scheduler.go
53.65% <0%> (-9.76%)
:arrow_down:

controller/workitem.go
79.51% <0%> (-0.67%)
:arrow_down:

Continue to review full report at Codecov.

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


Cannot start the node server...

Hi Guys,
I run the npm install all loaded, i then run npm start, getting the below error:

nodemon ./bin/www --ignore app/public --ignore node_modules

[nodemon] 1.8.1
[nodemon] to restart at any time, enter rs
[nodemon] watching: .
[nodemon] starting node ./bin/www
/Users/businesstraveller/Desktop/Development/PlexWeb/movieshark-master/bin/www:5
const log = require('winston');
^^^^^
SyntaxError: Use of const in strict mode.
at exports.runInThisContext (vm.js:73:16)
at Module._compile (module.js:443:25)
at Object.Module._extensions..js (module.js:478:10)
at Module.load (module.js:355:32)
at Function.Module._load (module.js:310:12)
at Function.Module.runMain (module.js:501:10)
at startup (node.js:129:16)
at node.js:814:3
[nodemon] app crashed - waiting for file changes before starting...

Movieshark code was updated to ES6, since Node 4> allows it. It seems you're using an old Node version.
Try updating to version 4 or 5, and let me know if it works ;)

Thanks for the assistance, it's now compiling and I manage to get the movie pictures loaded. I created a fork with my changes to get it to compile. The eztvapi is still not working but I am working on a workaround, for now the movies are loading the pictures from the relevant website...


[ClangImporter] Don't transform NSObject<...> when there's no NSObject protocol

If there is no NSObject protocol skip a special case when importing types like NSObject <NSCopying> that converts them to id <NSObject, NSCopying>.
Fix rdar://problem/34597302

@swift-ci Please smoke test

@swift-ci Please smoke test

@swift-ci Please smoke test


[SPARK-35319][K8S][BUILD] Upgrade K8s client to 5.3.1

What changes were proposed in this pull request?
This PR aims to upgrade K8s client to 5.3.1.
Why are the changes needed?
This will bring the latest bug fixes.

https://github.com/fabric8io/kubernetes-client/releases/tag/v5.3.1

Does this PR introduce any user-facing change?
No.
How was this patch tested?
Pass the CIs.

Test build #138176 has started for PR 32443 at commit 29f0231.

Kubernetes integration test starting
URL: https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder-K8s/42697/

Kubernetes integration test status failure
URL: https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder-K8s/42697/

Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder-K8s/42697/

Test build #138176 has finished for PR 32443 at commit 29f0231.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/138176/

Could you review this, @attilapiros ?

Could you review this please, @viirya ?

Thank you so much, @viirya . GitHub Action and Jenkins passed and K8s IT manually test result is attached into the PR description.
Merged to master for Apache Spark 3.2.0.

Thank you, @HyukjinKwon !


Added support to prevent loader from being stuck for anchor navigation

This fixes the loader being stuck when clicking on an anchor navigation for the same page.

Thanks for pointing out this serious bug, and for fixing it. I might refactor the code a bit to fix few more bugs for previous next js version. Fixes will be published with the release of version 1.2.1 for this package.


Fixed #30594 -- Added 'private' Cache-Control directive to never_cache() decorator.

Ticket: https://code.djangoproject.com/ticket/30594#ticket

@nsasaki128 Thanks! I fixed add_never_cache_headers() documentation.

@felixxm Thanks a lot for fixing. Django helps our products development and I am honored to be involved.

@nsasaki128 Welcome aboard :motor_boat:


Unable to decrypt Az CLI cred in ADO pipeline task

Describe the bug
Unable to decrypt Az CLI cred in ADO pipeline task
Related command
It seems az login command is failing
Errors
PFA - Full log of task execution
Issue script & Debug output
PFA - Full log of task execution
Expected behavior
Using ADO - task: AzureCLI@2 az login needs to be successful with option addSpnToEnvironment: true
Environment Summary
azure-cli                         2.52.0
core                              2.52.0
telemetry                          1.1.0
Extensions:
azure-devops                      0.26.0
Dependencies:
msal                            1.24.0b1
azure-mgmt-resource             23.1.0b2
Python location 'C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\python.exe'
Extensions directory 'C:\Program Files\Common Files\AzureCliExtensionDirectory'
Python (Windows) 3.10.10 (tags/v3.10.10:aad5f6a, Feb  7 2023, 17:05:00) [MSC v.1929 32 bit (Intel)]
Legal docs and information: aka.ms/AzureCliLegal
Additional context
Below task is executed in a pool with more than one agent and it is utilized by more than few, I often get the error message :  Key not valid for use in specified state.. App developer may consider this guidance:
dev.azure.com.txt
- task: AzureCLI@2
    displayName: 'Set credentials (RG SPN) for PrivilegedContext'
    inputs:
      azureSubscription:  ${{parameters.arm_service_connection}}
      scriptType: 'pscore'
      scriptLocation: 'inlineScript'
      addSpnToEnvironment: true
      useGlobalConfig: true
      inlineScript: |
        $azure_tenant_id = $env:tenantId
        Write-host "Variable name azure_tenant_id is set with Azure AD Tenant ID"
        Write-host "##vso[task.setvariable variable=azure_tenant_id;issecret=true]$azure_tenant_id"

        $azure_client_id = $env:servicePrincipalId
        Write-host "Variable name azure_client_id is set with resource group SPN Client ID"
        Write-host "##vso[task.setvariable variable=azure_client_id;issecret=true]$azure_client_id"

        $azure_client_secret = $env:servicePrincipalKey
        Write-host "Variable name azure_client_secret is set with resource group SPN credentials"
        Write-host "##vso[task.setvariable variable=azure_client_secret;issecret=true]$azure_client_secret"

BTW., I found a work around for this but it does not mark the secret as secret

task: AzureCLI@2
displayName: 'Set credentials (RG SPN) for PrivilegedContext'
inputs:
azureSubscription:  ${{parameters.arm_service_connection}}
scriptType: 'pscore'
scriptLocation: 'inlineScript'
addSpnToEnvironment: true
useGlobalConfig: true
inlineScript: |
Write-host "Variable name azure_tenant_id is set with Azure AD Tenant ID"
Write-host "##vso[task.setvariable variable=azure_tenant_id;]$($env:tenantId)"
  Write-host "Variable name azure_client_id is set with resource group SPN Client ID"
  Write-host "##vso[task.setvariable variable=azure_client_id;]$($env:servicePrincipalId)"

  Write-host "Variable name azure_client_secret is set with resource group SPN credentials"
  Write-host "##vso[task.setvariable variable=azure_client_secret;]$($env:servicePrincipalKey)"


Dead link of blog post about how to approach the building of a multi-tenant application with Nhost

NHost have did a great job.
Related to this closed issue:
Unable to create workspace and projects in self hosted nhosts
https://github.com/nhost/nhost/issues/1734
I found another related issue, this is over 3 years ago.
nhost/hasura-backend-plus#82 (comment)
May I have the latest link of that blog post for reference?

That blog post was lost when we migrating to a new blog system but the accompanying example is here:
https://github.com/nhost/nhost/tree/main/examples/multi-tenant-one-to-many
In any case, multi-tenancy here means sharing one single auth/storage/graphql with many customers, this is not about having many workspaces/projects in self-hosted (like you were asking on the other issue).


[Suggestion]: Sync property panels with Tree-Selection

Summary Description
If you have opened a property window for an element (i.e. by double click) this window remains open and is still linked to the original element, even if the user selects another element (of the same type or another). Chnages will still be possible and propagate to the very first element. This is very confusing and the property window should follow the focus to the newly selected element.
IMHO: the property panel class needs to listen to

self.context.listen("emphasized", self.on_emphasized_elements_changed)

and derive from there which node in the tree has been clicked. Unfortunately I can't figure out how to establish this. If you have a hint I would be willing to implement the changes in the different property panels.
Current functionality
see above
Future functionality
Link the property windows to the selection in the Operations/Element-Tree
MeerK40t Version
0.75b4
MeerK40t Type
Source (zip/tar file from Github)
Your Operating System
Windows
Code of Conduct

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

This could be done. And you're right it would need to change on the emphasis change there. So when they change the emphasis we would check and make sure we are properties for the emphasized objects. I completely see what you're getting at here. There are, however, some windows that might not apply, and they are currently somewhat hard-coded. The pathproperties window, the operation property window, text properties window, etc. These are currently hard-coded and it wouldn't make sense to show them, or update them with the selection.
This seems like it might want to be deferred to 0.8.x code. Since within that code base we are using more notebooks. And the best solution I can come up with for this would be to have the property window be basically dynamic. There's currently a requirement for this since 0.8.x is actively doing this for some things like OperationProperties. We have some properties in OperationProperties that currently do not apply correctly to all drivers. For example a Galvo driver might want a wobble attribute whereas d_ratio is fine property to have for M2 Nano drivers.  So the properties have pages:

Now here we would have our same properties window but we'd want to dynamically create, switch, and remove panels. So we'd call the window Property and have Operation-Property as one of the windows. We could then, dynamically add the Operation-Properties and Path-Properties when they highlight an operation that has paths in it. And these could be swapped out based on whatever objects are in the current lookup.

We might be able to class objects correctly where the the OperationProperty window just updates to the other operations when we change what operation is selected, and simply maintain the last valid operation when if we select a path.  If you type channel open signals in console you can see the signals bouncing around. And yes, so long as the emphasized signal is triggered on an object that is a LaserOperation type you should actually be perfectly fine to call the same sort of activation code we use when we swap over the operation.
In 0.8.0 you would flag any function with @signal_listener("emphasized") in 0.7.x you'd want to hook the lifecycle open and lifecycle close events (whatever those are depends on the type of thing we're dealing with) with context.listen("emphasized", self.myfunction) and the close with context.unlisten("emphasized", self.myfunction). Then your myfunction needs to check that the emphasized content is a LaserOperation node type and then call the activation code.

The basic method for this would be edit OperationProperty.py

    def finalize(self):
        pass

    def initialize(self):
        self.set_widgets()
        ...

To hook into the emphasized thing and do the basic checks you want.

    def my_function(self, origin, emphasized_object, *args):
        from meerk40t.core.elements import LaserOperation
        if isinstance(emphasized_object, LaserOperation):
            self.operation = emphasized_object
            self.set_widgets()

    def finalize(self):
        self.context.unlisten("emphasized", self.my_function)

    def initialize(self):
        self.context.listen("emphasized", self.my_function)

        self.set_widgets()
        ...

This will give

I must admit quickly hacking that in, does show that you may be right. That seems really nice and responsive even without a more generalized solution for all the different things put in a notebook.

I am currently implementing these changes (and started with and group and path) but have encountered an error if you are closing the panel and then continue selecting in the tree. I have caught the error for now but that needs a review... Will create a draft PR tomorrow for you to check.

This would be good. AFAIK you can still cause a crash by opening an Operation Property window, delete the operation and then make a change in the properties window.
My take on this is that you would need to tap into a signal for tree selection changes, and if the operation currently associated with the window is deselected (or deleted) then
a. if another operation is selected you display that (or the first of these) instead; or
c. if no other operation is selected, then you either grey everything out or close the window (not sure which would be most appropriate).


Feature/17

Describe changes
Describe a summary of the changes and the related issue to communicate to the maintainers why we should accept this pull request.
Issue number or link
Types of changes
What is the type of code change?
Put an x in the boxes that apply

[ ] Bugfix (changes that resolve errors)
[ ] New feature (changes which adds functionality)
[ ] Breaking change (big changes that affect existing functionality)
[ ] Documentation Update

Checklist
Put an x in the boxes that apply. You can also fill these out after creating the PR. If you're unsure about any of them, don't hesitate to ask. We're here to help! This is simply a reminder of what we are going to look for before merging your code.

[ ] I have read the "README.md"
[ ] My code follows the style guidelines of this project
[ ] My changes generate no new warnings
[ ] Lint and unit tests pass locally with my changes
[ ] I have added tests that prove my fix is effective or that my feature works
[ ] I have added necessary documentation
[ ] Any dependent changes have been merged and published in downstream modules

Further comments
Please let me know if there's anything else to explain

duplication on MainHeader is on purpose


Flag for Security Group usage

Could I request an enhancement to indicate if a Security Group is being utilized and to show what instance (by Instance ID) the security group is protecting.

@monkeysecurity do you really go down the paginating route? I was having a look at the describe-instances comand, and it seems you can filter by:

group-id/group-name (EC2 classic)
instance.group-id/instance.group-name

That will surely means that soon every watcher will end up querying on its own for instances, while maybe we should slurp that information once in the DB (same for tags, see eip.py). However, as a stop gap solution, querying with filters may be better than fighting with pagination IMHO.

A couple of notes:

I checked boto source and get_only_instances() seems to handle the pagination/markers/token internally
I still went the other way and did this with multiple filtered call. You can see it at the branch under lucab/security_monkey@df251800c732d0a5c0f5a9c7e76707aba1b15933

Please let me know your call on this, I can still revert to a single call with a sane max_results before sending a PR. Also, is it ok if I silence with score 0 all issues in non-assigned security groups?

Awesome.
Have you determined whether boto's pagination is more performant than using multiple filtered calls?
Regarding the silencing of empty security groups; I'm conflicted on this. Instead of silencing empty security groups, I'd like to add an issue identifying them as empty security groups.  Maybe it also makes sense to clear the score on the other issues, but I'd have to play with it.
Feel free to issue the PR however you'd like it to work.  I can't wait to see how this performs with our environment.

Have you determined whether boto's pagination is more performant than using multiple filtered calls?

No, but I just did. My worst case account for this test had ~60 sgs, of which ~35 active, mostly in ap-southeast with my polling securitymonkey in Europe, and ~100 active instances. Results:

Single call with max_result=25: 0m24.801s
Multiple calls with group filter: 0m57.035s

Network latency is probably killing me here. On better testcases (smaller and Europe based) the difference is in couple of seconds, but always in favor of pagination. I'll go for that, and we can also further tweak the max_result down the road.

Instead of silencing empty security groups, I'd like to add an issue identifying them as empty security groups. Maybe it also makes sense to clear the score on the other issues, but I'd have to play with it.

This was for filtering the noise of unused sg. Unfortunately I have so many on accounts I can't directly clean, it would be helpful to visually highlight only the active ones. Issues are still visible in webUI and mail reports if 0-scored.

I'm wondering if the more useful flag may be whether a particular security group is used by an instance with a public IP. For example, a <IP_ADDRESS>/0 SG is definitely a 10 if it's facing a public IP, but maybe only a 5 if only instances with private IP's are attachted to that SG.

@Blackbaud-FrankKurzawa Good point.  In EC2-Classic I believe everything has a private and public IP.  That's definitely not the case in VPC.  Sounds like a great feature to add.
I just opened #143 to track this idea.

Closing as much of this has been merged with #103.


Adding new solution of dev-0537 to content hub

Required items, please complete
Change(s):

Adding new solution specially align to dev-0537 detections

Reason for Change(s):

It enhances security posture of our customers

Version Updated:

Yes

Testing Completed:

Yes

Checked that the validations are passing and have addressed any issues that are present:

Yes


Set browser test concurrency to one

This is a first stab at getting the browser tests to run again. I've had similar problems in the Saucelabs browser tests of @feathersjs/client and throttling did help (it does use the Saucelabs provided Grunt task and tunnel though).
This PR may not pass since it doesn't have access to the Saucelabs environment variables but it is worth a try. Alternatives may be

Use ngrok for localhost tunneling instead of localtunnel
Use Grunt Saucelabs with the built in tunnel (this might require restructuring the tests a little)

Oh rad, thanks! Trying it on a branch in the repository right now so it'll run the sauce tests. I think longer term we'll just be able to switch to airtap, a zuul fork that should be fixing most of zuul's problems soon.

awesome, this just ran successfully twice in a row—i don't recall that ever happening before 😆 thanks a ton!

Awesome, glad it worked right away!


mybatis

How to integrate mybatis to wildfly ?

As stated in the issue template, we use GitHub Issues only to track bugs and feature requests.
Please post your question to the mailing list.
You need to be more specific, though.
Thank you!

OK


[UPG FAIL] Database upgrade prevented by read_only flag (which is not set)

Upgrade failed at stage 4.

2024-07-10 02:47:21 (8772) [ESC[1;37mDEBUGESC[0m] Running 'post_leapp' from MySQL component.
2024-07-10 02:47:21 (4253) [ESC[32mINFOESC[0m] Restoring MySQL 10.6
2024-07-10 02:47:21 (4257) [ESC[32mINFOESC[0m] Restoring /etc/my.cnf.rpmsave_pre_elevate to /etc/my.cnf...
2024-07-10 02:47:53 (6735) [ESC[32mINFOESC[0m] Sending notification: Failed to update to AlmaLinux 8
2024-07-10 02:47:53 (6740) [ESC[31mERRORESC[0m] The elevation process failed during stage 4.
2024-07-10 02:47:53 (6740) [ESC[31mERRORESC[0m]
2024-07-10 02:47:53 (6740) [ESC[31mERRORESC[0m] You can continue the process after fixing the errors by running:
2024-07-10 02:47:53 (6740) [ESC[31mERRORESC[0m]
2024-07-10 02:47:53 (6740) [ESC[31mERRORESC[0m]     /usr/local/cpanel/scripts/elevate-cpanel --continue
2024-07-10 02:47:53 (6740) [ESC[31mERRORESC[0m]
2024-07-10 02:47:53 (6740) [ESC[31mERRORESC[0m] You can check the error log by running:
2024-07-10 02:47:53 (6740) [ESC[31mERRORESC[0m]
2024-07-10 02:47:53 (6740) [ESC[31mERRORESC[0m]     /usr/local/cpanel/scripts/elevate-cpanel
2024-07-10 02:47:53 (6740) [ESC[31mERRORESC[0m]
2024-07-10 02:47:53 (6740) [ESC[31mERRORESC[0m] Last Error:
2024-07-10 02:47:53 (6740) [ESC[31mERRORESC[0m]
2024-07-10 02:47:53 (6740) [ESC[31mERRORESC[0m] Cannot find upgrade_id from start_background_mysql_upgrade:
2024-07-10 02:47:53 (6740) [ESC[31mERRORESC[0m] ---
2024-07-10 02:47:53 (6740) [ESC[31mERRORESC[0m] metadata:
2024-07-10 02:47:53 (6740) [ESC[31mERRORESC[0m]   command: start_background_mysql_upgrade
2024-07-10 02:47:53 (6740) [ESC[31mERRORESC[0m]   reason: "API failure: (XID unynep) The system cannot upgrade your version of MySQL or MariaDB because of at least one impediment: \nFatal: Your databaseâ<U+0080><U+0099>s â<U+0080><U+009C>read_onlyâ<U+0080><U+009D> flag is enabled. Disable this flag, then try again.\n   Critical: The system failed to query the MySQL server to check for the presence of pre-4.1-style MySQL passwords. ((XID gxncze) The system failed to connect to the â<U+0080><U+009C>MySQLâ<U+0080><U+009D> database â<U+0080><U+009C>mysqlâ
<U+0080><U+009D> because of an error: CR_CONNECTION_ERROR (Can't connect to local server through socket '/var/lib/mysql/mysql.sock' (2))) This issue could also hinder mysql_upgrade's ability to run, which could potentially leave MySQL in an unusable state if you proceed.\n   Normal: The selected MariaDB version (10.6) is the same as the currently installed MariaDB version (10.6). No upgrade will be performed at this time, though the normal upgrade steps will still be executed. This is only useful if a previous upgrade failed while partially completed.\n"
2024-07-10 02:47:53 (6740) [ESC[31mERRORESC[0m]   result: 0
2024-07-10 02:47:53 (6740) [ESC[31mERRORESC[0m]   version: 1

I had to manually add mariadb 10.6 repo and install MariaDB-server and MariaDB-common to bring server to working state, but now I am still getting this read-only problem and can not continue. I have couple more servers like this and now I am stuck.

copy /etc/my.cnf.rpmsave_pre_elevate to /etc/my.cnf.rpmsave_pre_elevate.org
echo >/etc/my.cnf.rpmsave_pre_elevate
/scripts/elevate-cpanel --continue
after MySQL start
mv /etc/my.cnf.rpmsave_pre_elevate.org /etc/my.cnf

Can you provide us with the contents of /etc/my.cnf and /etc/my.cnf.rpmsave_pre_elevate after the failure?

original /etc/my.cnf.rpmsave_pre_elevate
[mysqld]
log-error=/var/lib/mysql/ns.err
performance-schema=0
default-storage-engine=MyISAM
innodb_file_per_table=1
max_allowed_packet=1073741824
open_files_limit=21000
connect_timeout=600
tmpdir=/dev/shm
bind-address = <IP_ADDRESS>
local-infile=0
sql_mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
innodb_read_only_compressed=OFF
read-only=0
unix_socket=OFF

after emptying it and running elevate-cpanel --continue, I've got this /etc/my.cnf
[mysqld]
log-error=/var/lib/mysql/ns.err
performance-schema=0
innodb_file_per_table=1
unix_socket=OFF
max_allowed_packet=268435456

Thank you for this information.  I see why elevate is failing to restore/install MySQL/MariaDB in stage 4 due to this my.cnf file.
Specifically, it is failing because of this line in /etc/my.cnf.rpmsave_pre_elevate:
read-only=0

I have filed RE-543 for us to address this issue.

@cPholloway
The error message specifically mentions 'read_only', not 'read-only', also I tried to remove this line
read-only=0
and run elevate-cpanel --continue and it didn't work out - got the same error message. I suspect that the problem is in read_only line.


pip compilation issues

I keep having a multiple definition error of several functions when using sundials with lapack and pycvodes trying to use headers in anyode. I created a branch to illustrate how I finally got it to compile and install (no errors/warnings) by passing in the appropriate enviroment variable (PYCVODES_USE_LAPACK='1'), but I wonder if there is a problem elsewhere with one of the libraries or something else.  I didn't dive deeply enough into the source to see if this turned off all lapack use, but the tests in pycvodes/tests passed.  I was intending to work on or at least document pip installation of chempy and got hung on pycvodes.
Hopefully all the relevant setup details are below; errors follow.
versions (current debian/bullseye):

gcc/g++/gfortran  10.2.0 (deb)
sundials 5.4.0 (source)
cmake 3.18.4-1 (deb)
libblas-dev 3.9.0-3 (deb)
liblapack-dev 3.9.0-3 (deb)
libboost-dev <IP_ADDRESS> (deb)
libgsl-dev 2.6+dfsg-2 (deb)
libsuitesparse-dev 1:5.8.1+dfsg-2 (deb)
Python 3.8.6 (deb)

requirements.txt:

apipkg==1.5
attrs==20.2.0
Cython==0.29.21
execnet==1.7.1
iniconfig==1.1.1
numpy==1.19.3
packaging==20.4
pep8==1.7.1
pluggy==0.13.1
py==1.9.0
pyflakes==2.2.0
pyparsing==2.4.7
pytest==6.1.2
pytest-cache==1.0
pytest-flakes==4.0.2
pytest-pep8==1.0.6
six==1.15.0
toml==0.10.1

Build Errors:
python setup.py bdist_wheel
Compiling pycvodes/_cvodes.pyx because it changed.
[1/1] Cythonizing pycvodes/_cvodes.pyx
running bdist_wheel
running build
running build_py
running egg_info
writing pycvodes.egg-info/PKG-INFO
writing dependency_links to pycvodes.egg-info/dependency_links.txt
writing requirements to pycvodes.egg-info/requires.txt
writing top-level names to pycvodes.egg-info/top_level.txt
reading manifest file 'pycvodes.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
writing manifest file 'pycvodes.egg-info/SOURCES.txt'
copying pycvodes/_cvodes.cpp -> build/lib.linux-x86_64-3.8/pycvodes
running build_ext
building 'pycvodes._cvodes' extension
x86_64-linux-gnu-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -DPYCVODES_NO_KLU=0 -DPYCVODES_NO_LAPACK=0 -DANYODE_NO_LAPACK=0 -I/home/gray/.virtualenvs/pycvodes/lib/python3.8/site-packages/numpy/core/include -Ipycvodes/include -Iexternal/anyode/include -I/home/gray/.virtualenvs/pycvodes/include -I/usr/include/python3.8 -c pycvodes/_cvodes.cpp -o build/temp.linux-x86_64-3.8/pycvodes/_cvodes.o -DVERSION_INFO="0.13.1" --std=c++11
In file included from /home/gray/.virtualenvs/pycvodes/lib/python3.8/site-packages/numpy/core/include/numpy/ndarraytypes.h:1822,
                 from /home/gray/.virtualenvs/pycvodes/lib/python3.8/site-packages/numpy/core/include/numpy/ndarrayobject.h:12,
                 from /home/gray/.virtualenvs/pycvodes/lib/python3.8/site-packages/numpy/core/include/numpy/arrayobject.h:4,
                 from pycvodes/_cvodes.cpp:667:
/home/gray/.virtualenvs/pycvodes/lib/python3.8/site-packages/numpy/core/include/numpy/npy_1_7_deprecated_api.h:17:2: warning: #warning "Using deprecated NumPy API, disable it with " "#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION" [-Wcpp]
   17 | #warning "Using deprecated NumPy API, disable it with " \
      |  ^~~~~~~
In file included from pycvodes/include/sundials_cxx.hpp:4,
                 from pycvodes/include/cvodes_cxx.hpp:37,
                 from pycvodes/_cvodes.cpp:669:
/home/gray/.virtualenvs/chempy/include/sundials/sundials_lapack.h:38:43: error: conflicting declaration of C function ‘void dgemv_(const char*, sunindextype*, sunindextype*, const double*, const double*, sunindextype*, const double*, sunindextype*, const double*, double*, sunindextype*)’
   38 | #define dgemv_f77       SUNDIALS_F77_FUNC(dgemv, DGEMV)
      |                                           ^~~~~
/home/gray/.virtualenvs/chempy/include/sundials/sundials_lapack.h:38:25: note: in expansion of macro ‘SUNDIALS_F77_FUNC’
   38 | #define dgemv_f77       SUNDIALS_F77_FUNC(dgemv, DGEMV)
      |                         ^~~~~~~~~~~~~~~~~
/home/gray/.virtualenvs/chempy/include/sundials/sundials_lapack.h:122:13: note: in expansion of macro ‘dgemv_f77’
  122 | extern void dgemv_f77(const char *trans, sunindextype *m, sunindextype *n,
      |             ^~~~~~~~~
In file included from external/anyode/include/anyode/anyode_matrix.hpp:14,
                 from external/anyode/include/anyode/anyode_iterative.hpp:7,
                 from external/anyode/include/anyode/anyode_numpy.hpp:5,
                 from pycvodes/_cvodes.cpp:668:
external/anyode/include/anyode/anyode_blas_lapack.hpp:2:17: note: previous declaration ‘void dgemv_(const char*, int*, int*, const double*, const double*, int*, const double*, int*, const double*, double*, int*)’
    2 | extern "C" void dgemv_(const char* trans, int* m, int* n, const double* alpha, const double* a, int* lda,
      |                 ^~~~~~
In file included from pycvodes/include/sundials_cxx.hpp:4,
                 from pycvodes/include/cvodes_cxx.hpp:37,
                 from pycvodes/_cvodes.cpp:669:
/home/gray/.virtualenvs/chempy/include/sundials/sundials_lapack.h:54:43: error: conflicting declaration of C function ‘void sgemv_(const char*, sunindextype*, sunindextype*, const float*, const float*, sunindextype*, const float*, sunindextype*, const float*, float*, sunindextype*)’
   54 | #define sgemv_f77       SUNDIALS_F77_FUNC(sgemv, SGEMV)
      |                                           ^~~~~
/home/gray/.virtualenvs/chempy/include/sundials/sundials_config.h:38:38: note: in definition of macro ‘SUNDIALS_F77_FUNC’
   38 | #define SUNDIALS_F77_FUNC(name,NAME) name ## _
      |                                      ^~~~
/home/gray/.virtualenvs/chempy/include/sundials/sundials_lapack.h:132:13: note: in expansion of macro ‘sgemv_f77’
  132 | extern void sgemv_f77(const char *trans, sunindextype *m, sunindextype *n,
      |             ^~~~~~~~~
In file included from external/anyode/include/anyode/anyode_matrix.hpp:14,
                 from external/anyode/include/anyode/anyode_iterative.hpp:7,
                 from external/anyode/include/anyode/anyode_numpy.hpp:5,
                 from pycvodes/_cvodes.cpp:668:
external/anyode/include/anyode/anyode_blas_lapack.hpp:4:17: note: previous declaration ‘void sgemv_(const char*, int*, int*, const float*, const float*, int*, const float*, int*, const float*, float*, int*)’
    4 | extern "C" void sgemv_(const char* trans, int* m, int* n, const float* alpha, const float* a, int* lda,
      |                 ^~~~~~
In file included from pycvodes/include/sundials_cxx.hpp:4,
                 from pycvodes/include/cvodes_cxx.hpp:37,
                 from pycvodes/_cvodes.cpp:669:
/home/gray/.virtualenvs/chempy/include/sundials/sundials_lapack.h:42:43: error: conflicting declaration of C function ‘void dgbtrf_(const sunindextype*, const sunindextype*, const sunindextype*, const sunindextype*, double*, sunindextype*, sunindextype*, sunindextype*)’
   42 | #define dgbtrf_f77      SUNDIALS_F77_FUNC(dgbtrf, DGBTRF)
      |                                           ^~~~~~
/home/gray/.virtualenvs/chempy/include/sundials/sundials_config.h:38:38: note: in definition of macro ‘SUNDIALS_F77_FUNC’
   38 | #define SUNDIALS_F77_FUNC(name,NAME) name ## _
      |                                      ^~~~
/home/gray/.virtualenvs/chempy/include/sundials/sundials_lapack.h:158:13: note: in expansion of macro ‘dgbtrf_f77’
  158 | extern void dgbtrf_f77(const sunindextype *m, const sunindextype *n,
      |             ^~~~~~~~~~
In file included from external/anyode/include/anyode/anyode_matrix.hpp:14,
                 from external/anyode/include/anyode/anyode_iterative.hpp:7,
                 from external/anyode/include/anyode/anyode_numpy.hpp:5,
                 from pycvodes/_cvodes.cpp:668:
external/anyode/include/anyode/anyode_blas_lapack.hpp:25:17: note: previous declaration ‘void dgbtrf_(const int*, const int*, const int*, const int*, double*, int*, int*, int*)’
   25 | extern "C" void dgbtrf_(const int* dim1, const int* dim2, const int* kl, const int* ku, double* a, int* lda, int* ipiv, int* info);
      |                 ^~~~~~~
In file included from pycvodes/include/sundials_cxx.hpp:4,
                 from pycvodes/include/cvodes_cxx.hpp:37,
                 from pycvodes/_cvodes.cpp:669:
/home/gray/.virtualenvs/chempy/include/sundials/sundials_lapack.h:43:43: error: conflicting declaration of C function ‘void dgbtrs_(const char*, const sunindextype*, const sunindextype*, const sunindextype*, const sunindextype*, double*, const sunindextype*, sunindextype*, double*, const sunindextype*, sunindextype*)’
   43 | #define dgbtrs_f77      SUNDIALS_F77_FUNC(dgbtrs, DGBTRS)
      |                                           ^~~~~~
/home/gray/.virtualenvs/chempy/include/sundials/sundials_config.h:38:38: note: in definition of macro ‘SUNDIALS_F77_FUNC’
   38 | #define SUNDIALS_F77_FUNC(name,NAME) name ## _
      |                                      ^~~~
/home/gray/.virtualenvs/chempy/include/sundials/sundials_lapack.h:163:13: note: in expansion of macro ‘dgbtrs_f77’
  163 | extern void dgbtrs_f77(const char *trans, const sunindextype *n,
      |             ^~~~~~~~~~
In file included from external/anyode/include/anyode/anyode_matrix.hpp:14,
                 from external/anyode/include/anyode/anyode_iterative.hpp:7,
                 from external/anyode/include/anyode/anyode_numpy.hpp:5,
                 from pycvodes/_cvodes.cpp:668:
external/anyode/include/anyode/anyode_blas_lapack.hpp:28:17: note: previous declaration ‘void dgbtrs_(const char*, const int*, const int*, const int*, const int*, double*, const int*, int*, double*, const int*, int*)’
   28 | extern "C" void dgbtrs_(const char* trans, const int* n, const int* kl, const int* ku, const int* nrhs, double* a,
      |                 ^~~~~~~
In file included from pycvodes/include/sundials_cxx.hpp:4,
                 from pycvodes/include/cvodes_cxx.hpp:37,
                 from pycvodes/_cvodes.cpp:669:
/home/gray/.virtualenvs/chempy/include/sundials/sundials_lapack.h:44:43: error: conflicting declaration of C function ‘void dgetrf_(const sunindextype*, const sunindextype*, double*, sunindextype*, sunindextype*, sunindextype*)’
   44 | #define dgetrf_f77      SUNDIALS_F77_FUNC(dgetrf, DGETRF)
      |                                           ^~~~~~
/home/gray/.virtualenvs/chempy/include/sundials/sundials_config.h:38:38: note: in definition of macro ‘SUNDIALS_F77_FUNC’
   38 | #define SUNDIALS_F77_FUNC(name,NAME) name ## _
      |                                      ^~~~
/home/gray/.virtualenvs/chempy/include/sundials/sundials_lapack.h:179:13: note: in expansion of macro ‘dgetrf_f77’
  179 | extern void dgetrf_f77(const sunindextype *m, const sunindextype *n, double *a,
      |             ^~~~~~~~~~
In file included from external/anyode/include/anyode/anyode_matrix.hpp:14,
                 from external/anyode/include/anyode/anyode_iterative.hpp:7,
                 from external/anyode/include/anyode/anyode_numpy.hpp:5,
                 from pycvodes/_cvodes.cpp:668:
external/anyode/include/anyode/anyode_blas_lapack.hpp:14:17: note: previous declaration ‘void dgetrf_(const int*, const int*, double*, int*, int*, int*)’
   14 | extern "C" void dgetrf_(const int* dim1, const int* dim2, double* a, int* lda, int* ipiv, int* info);
      |                 ^~~~~~~
In file included from pycvodes/include/sundials_cxx.hpp:4,
                 from pycvodes/include/cvodes_cxx.hpp:37,
                 from pycvodes/_cvodes.cpp:669:
/home/gray/.virtualenvs/chempy/include/sundials/sundials_lapack.h:45:43: error: conflicting declaration of C function ‘void dgetrs_(const char*, const sunindextype*, const sunindextype*, double*, const sunindextype*, sunindextype*, double*, const sunindextype*, sunindextype*)’
   45 | #define dgetrs_f77      SUNDIALS_F77_FUNC(dgetrs, DGETRS)
      |                                           ^~~~~~
/home/gray/.virtualenvs/chempy/include/sundials/sundials_config.h:38:38: note: in definition of macro ‘SUNDIALS_F77_FUNC’
   38 | #define SUNDIALS_F77_FUNC(name,NAME) name ## _
      |                                      ^~~~
/home/gray/.virtualenvs/chempy/include/sundials/sundials_lapack.h:183:13: note: in expansion of macro ‘dgetrs_f77’
  183 | extern void dgetrs_f77(const char *trans, const sunindextype *n,
      |             ^~~~~~~~~~
In file included from external/anyode/include/anyode/anyode_matrix.hpp:14,
                 from external/anyode/include/anyode/anyode_iterative.hpp:7,
                 from external/anyode/include/anyode/anyode_numpy.hpp:5,
                 from pycvodes/_cvodes.cpp:668:
external/anyode/include/anyode/anyode_blas_lapack.hpp:17:17: note: previous declaration ‘void dgetrs_(const char*, const int*, const int*, double*, const int*, int*, double*, const int*, int*)’
   17 | extern "C" void dgetrs_(const char* trans, const int* n, const int* nrhs, double* a, const int* lda, int* ipiv, double * b, const int* ldb, int* info);
      |                 ^~~~~~~
In file included from pycvodes/include/sundials_cxx.hpp:4,
                 from pycvodes/include/cvodes_cxx.hpp:37,
                 from pycvodes/_cvodes.cpp:669:
/home/gray/.virtualenvs/chempy/include/sundials/sundials_lapack.h:58:43: error: conflicting declaration of C function ‘void sgbtrf_(const sunindextype*, const sunindextype*, const sunindextype*, const sunindextype*, float*, sunindextype*, sunindextype*, sunindextype*)’
   58 | #define sgbtrf_f77      SUNDIALS_F77_FUNC(sgbtrf, SGBTRF)
      |                                           ^~~~~~
/home/gray/.virtualenvs/chempy/include/sundials/sundials_config.h:38:38: note: in definition of macro ‘SUNDIALS_F77_FUNC’
   38 | #define SUNDIALS_F77_FUNC(name,NAME) name ## _
      |                                      ^~~~
/home/gray/.virtualenvs/chempy/include/sundials/sundials_lapack.h:205:13: note: in expansion of macro ‘sgbtrf_f77’
  205 | extern void sgbtrf_f77(const sunindextype *m, const sunindextype *n,
      |             ^~~~~~~~~~
In file included from external/anyode/include/anyode/anyode_matrix.hpp:14,
                 from external/anyode/include/anyode/anyode_iterative.hpp:7,
                 from external/anyode/include/anyode/anyode_numpy.hpp:5,
                 from pycvodes/_cvodes.cpp:668:
external/anyode/include/anyode/anyode_blas_lapack.hpp:26:17: note: previous declaration ‘void sgbtrf_(const int*, const int*, const int*, const int*, float*, int*, int*, int*)’
   26 | extern "C" void sgbtrf_(const int* dim1, const int* dim2, const int* kl, const int* ku, float* a, int* lda, int* ipiv, int* info);
      |                 ^~~~~~~
In file included from pycvodes/include/sundials_cxx.hpp:4,
                 from pycvodes/include/cvodes_cxx.hpp:37,
                 from pycvodes/_cvodes.cpp:669:
/home/gray/.virtualenvs/chempy/include/sundials/sundials_lapack.h:59:43: error: conflicting declaration of C function ‘void sgbtrs_(const char*, const sunindextype*, const sunindextype*, const sunindextype*, const sunindextype*, float*, const sunindextype*, sunindextype*, float*, const sunindextype*, sunindextype*)’
   59 | #define sgbtrs_f77      SUNDIALS_F77_FUNC(sgbtrs, SGBTRS)
      |                                           ^~~~~~
/home/gray/.virtualenvs/chempy/include/sundials/sundials_config.h:38:38: note: in definition of macro ‘SUNDIALS_F77_FUNC’
   38 | #define SUNDIALS_F77_FUNC(name,NAME) name ## _
      |                                      ^~~~
/home/gray/.virtualenvs/chempy/include/sundials/sundials_lapack.h:210:13: note: in expansion of macro ‘sgbtrs_f77’
  210 | extern void sgbtrs_f77(const char *trans, const sunindextype *n,
      |             ^~~~~~~~~~
In file included from external/anyode/include/anyode/anyode_matrix.hpp:14,
                 from external/anyode/include/anyode/anyode_iterative.hpp:7,
                 from external/anyode/include/anyode/anyode_numpy.hpp:5,
                 from pycvodes/_cvodes.cpp:668:
external/anyode/include/anyode/anyode_blas_lapack.hpp:30:17: note: previous declaration ‘void sgbtrs_(const char*, const int*, const int*, const int*, const int*, float*, const int*, int*, float*, const int*, int*)’
   30 | extern "C" void sgbtrs_(const char* trans, const int* n, const int* kl, const int* ku, const int* nrhs, float* a,
      |                 ^~~~~~~
In file included from pycvodes/include/sundials_cxx.hpp:4,
                 from pycvodes/include/cvodes_cxx.hpp:37,
                 from pycvodes/_cvodes.cpp:669:
/home/gray/.virtualenvs/chempy/include/sundials/sundials_lapack.h:60:43: error: conflicting declaration of C function ‘void sgetrf_(const sunindextype*, const sunindextype*, float*, sunindextype*, sunindextype*, sunindextype*)’
   60 | #define sgetrf_f77      SUNDIALS_F77_FUNC(sgetrf, SGETRF)
      |                                           ^~~~~~
/home/gray/.virtualenvs/chempy/include/sundials/sundials_config.h:38:38: note: in definition of macro ‘SUNDIALS_F77_FUNC’
   38 | #define SUNDIALS_F77_FUNC(name,NAME) name ## _
      |                                      ^~~~
/home/gray/.virtualenvs/chempy/include/sundials/sundials_lapack.h:226:13: note: in expansion of macro ‘sgetrf_f77’
  226 | extern void sgetrf_f77(const sunindextype *m, const sunindextype *n, float *a,
      |             ^~~~~~~~~~
In file included from external/anyode/include/anyode/anyode_matrix.hpp:14,
                 from external/anyode/include/anyode/anyode_iterative.hpp:7,
                 from external/anyode/include/anyode/anyode_numpy.hpp:5,
                 from pycvodes/_cvodes.cpp:668:
external/anyode/include/anyode/anyode_blas_lapack.hpp:15:17: note: previous declaration ‘void sgetrf_(const int*, const int*, float*, int*, int*, int*)’
   15 | extern "C" void sgetrf_(const int* dim1, const int* dim2, float* a, int* lda, int* ipiv, int* info);
      |                 ^~~~~~~
In file included from pycvodes/include/sundials_cxx.hpp:4,
                 from pycvodes/include/cvodes_cxx.hpp:37,
                 from pycvodes/_cvodes.cpp:669:
/home/gray/.virtualenvs/chempy/include/sundials/sundials_lapack.h:61:43: error: conflicting declaration of C function ‘void sgetrs_(const char*, const sunindextype*, const sunindextype*, float*, const sunindextype*, sunindextype*, float*, const sunindextype*, sunindextype*)’
   61 | #define sgetrs_f77      SUNDIALS_F77_FUNC(sgetrs, SGETRS)
      |                                           ^~~~~~
/home/gray/.virtualenvs/chempy/include/sundials/sundials_config.h:38:38: note: in definition of macro ‘SUNDIALS_F77_FUNC’
   38 | #define SUNDIALS_F77_FUNC(name,NAME) name ## _
      |                                      ^~~~
/home/gray/.virtualenvs/chempy/include/sundials/sundials_lapack.h:230:13: note: in expansion of macro ‘sgetrs_f77’
  230 | extern void sgetrs_f77(const char *trans, const sunindextype *n,
      |             ^~~~~~~~~~
In file included from external/anyode/include/anyode/anyode_matrix.hpp:14,
                 from external/anyode/include/anyode/anyode_iterative.hpp:7,
                 from external/anyode/include/anyode/anyode_numpy.hpp:5,
                 from pycvodes/_cvodes.cpp:668:
external/anyode/include/anyode/anyode_blas_lapack.hpp:18:17: note: previous declaration ‘void sgetrs_(const char*, const int*, const int*, float*, const int*, int*, float*, const int*, int*)’
   18 | extern "C" void sgetrs_(const char* trans, const int* n, const int* nrhs, float* a, const int* lda, int* ipiv, float * b, const int* ldb, int* info);
      |                 ^~~~~~~
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1

It's a mess, I know--believe me. Thank you for trying to document this.
Some things that come to mind here:

I seem to remember that Sundials until recently expected one extra argument in the functions in LAPACK, compared to what is shipped with standard lapack. The way I've worked around this was to simply declare the function with this extra argument, and it seems (to me with my limited knowledge of Linux function calling convention ABI) that it works fine. But I think I've gotten rid of it (possibly excluding older versions of sundials). For some time I did test 3 or 4 different versions of sundials, with 3 different precisions, and double precision with and without lapack. But it was too much work due to the combinatorial nature of it.

Did you compile sundials with 32 bit integer size? (sundials cmake config is tricky, at least it used to simply ignore LAPACK_ENABLE=ON unless SUNDIALS_INDEX_SIZE was set to 32...)

What if you insert this line:
#ifndef _SUNDIALS_LAPACK_H

above this one?
https://github.com/bjodah/anyode/blob/ce9db8c91adf036657219a3cdf3c251483a3f0f7/include/anyode/anyode_blas_lapack.hpp#L2
(and insert a #endif after the relevant extern declarations?)

I still get the same errors (no new ones).  Compilations fails with
PYCVODES_USE_LAPACK='0' or unset and compiles with it set to '1'.
On Sat, Oct 31, 2020 at 6:09 AM Bjorn<EMAIL_ADDRESS>wrote:

What if you insert this line:
#ifndef _SUNDIALS_LAPACK_H
above this one?
https://github.com/bjodah/anyode/blob/ce9db8c91adf036657219a3cdf3c251483a3f0f7/include/anyode/anyode_blas_lapack.hpp#L2
(and insert a #endif after the relevant extern declarations?)
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/bjodah/pycvodes/issues/131#issuecomment-719918956,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AOQCHS332HKUD5FPHY5UNS3SNPV7FANCNFSM4TEID3FQ
.

--
Jeremy A. Gray

sorry, I don't quite follow, did you export environment variables on the command line prior to installing?, i.e.:
export PYCVODES_NO_LAPACK=1 PYCVODES_NO_KLU=1
python3 -m pip install .

regarding requirements.txt, I think it's deprecated since 5 years or so? setuptools & requires arguments are preferred I believe? (way back, I used to maintain a requirements.txt in the repository even...)

I added the #ifndef/#endif, then cleared the environment so that
PYCVODES_NO_LAPACK
was unset so that it would build as normal with python setup.py build in
the pycvodes top directory, and I got the same multiple definition errors.
Then, I exported and ran export PYCVODES_NO_LAPACK='1' && python setup.py build in the pycvodes top directory and successfully compiled.  I do the
same test with chempy (with and without PYCVODES_NO_LAPACK in the
environment), and install always fails on pycvodes if PYCVODES_NO_LAPACK='1'
is not set in the environment.  I have not changed PYCVODES_NO_KLU.
I'm using requirements.txt (in chempy) right now as a list to get a
virtualenv set up for testing and development (deployment only, not
packaging and installing chempy).
On Sat, Oct 31, 2020 at 10:50 AM Bjorn<EMAIL_ADDRESS>wrote:

sorry, I don't quite follow, did you export environment variables on the
command line prior to installing?, i.e.:
export PYCVODES_NO_LAPACK=1 PYCVODES_NO_KLU=1
python3 -m pip install .
regarding requirements.txt, I think it's deprecated since 5 years or so?
setuptools & requires arguments are preferred I believe? (way back, I used
to maintain a requirements.txt in the repository even...)
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/bjodah/pycvodes/issues/131#issuecomment-719951855,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AOQCHS53WZ6TW4AXYMR4AJTSNQW6BANCNFSM4TEID3FQ
.

--
Jeremy A. Gray

Alright, hard to say exactly why it is failing. Supporting both with & without lapack done to allow compilation of sundials with long double (which BLAS/LAPACK does not support). There's been a lot of back and forth in this area over the years, simply because each new environment has essentially shown to need its own treatment.
When one has multiple versions of sundials on the same machine, I have found that my sanity is best preserved by directly setting CFLAGS & LDFLAGS:
export CFLAGS="-isystem /opt/sundials-5.2.0-noklu-nolapack-extended-int64/include -DPYCVODES_NO_KLU=1 -DPYCVODES_NO_LAPACK=1"
export LDFLAGS="-Wl,--disable-new-dtags -Wl,-rpath,/opt/sundials-5.2.0-noklu-nolapack-extended-int64/lib -L/opt/sundials-5.2.0-noklu-nolapack-extended-int64/lib"

Let me see if I understand everything.  I intend to have just one sundials
installation.  I have lapack, blas, boost, suitesparse, gsl, and sundials
either in the system include/ld paths or in a searched path, so all of them
can include and link with each other as necessary (and I can adjust
CFLAGS/LDFLAGS if necessary).  So if sundials is compiled without klu and
lapack, does pycvodes/anyode include/link with suitesparse and lapack
directly?  Is there any functionality lost that might be useful in
pycvodes or chempy?
I think my question and this issue rests on how sundials should be
configured before compilation because .drone.yml indicates that sundials
should be compiled without klu and lapack.  Or alternatively, if sundials
is compiled with certain features (klu or lapack), should
pycvodes/anyode ignore parts of the sundials interface in deference to the
implementation in pycvodes/anyode?
On Sat, Oct 31, 2020 at 11:44 AM Bjorn<EMAIL_ADDRESS>wrote:

Alright, hard to say exactly why it is failing. Supporting both with &
without lapack done to allow compilation of sundials with long double
(which BLAS/LAPACK does not support). There's been a lot of back and forth
in this area over the years, simply because each new environment has
essentially shown to need its own treatment.
When one has multiple versions of sundials on the same machine, I have
found that my sanity is best preserved by directly setting CFLAGS & LDFLAGS:
export CFLAGS="-isystem /opt/sundials-5.2.0-noklu-nolapack-extended-int64/include -DPYCVODES_NO_KLU=1 -DPYCVODES_NO_LAPACK=1"
export LDFLAGS="-Wl,--disable-new-dtags -Wl,-rpath,/opt/sundials-5.2.0-noklu-nolapack-extended-int64/lib -L/opt/sundials-5.2.0-noklu-nolapack-extended-int64/lib"
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/bjodah/pycvodes/issues/131#issuecomment-719958396,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AOQCHS24DN6Q43SDJEQVILDSNQ5H5ANCNFSM4TEID3FQ
.

--
Jeremy A. Gray

So if sundials is compiled without klu and
lapack, does pycvodes/anyode include/link with suitesparse and lapack
directly?

It should not.

Is there any functionality lost that might be useful in
pycvodes or chempy?

No, after some problem size LAPACK will be faster, but for small problems, I've seen the inverse, i.e. not using LAPACK is significantly faster.
pycvodes can exploit matrix sparseness when KLU is available. ChemPy does not use this however.
Right now I just upgraded the Debian version to Bullseye in the Dockerfile in ChemPy's repository:
https://github.com/bjodah/chempy/pull/186
All tests pass in that environment (you need docker installed to run that script on your machine in case you want to compare).

I've finally tracked down the source of the issue, but I don't know enough
about C++ to completely understand what is happening.  Since we tried an
include guard with #ifndef _SUNDIALS_LAPACK_H and it did not work, I
tried some other variations that also failed.  After some research, I found
that the include guards work against multiple inclusion but not multiple
definition.  Changing all the extern "C" in
anyode/include/anyode/anyode_blas_lapack.h to just extern allowed
pycvodes to build without error (tests ran successfully).  I would assume
this has something to do with sundials using extern "C" in
sundials_lapack.h.
This is on debian bullseye current, with sundials-5.5.0 compiled with
cmake -DCMAKE_INSTALL_PREFIX=/home/gray/.local -DLAPACK_ENABLE=ON
-DKLU_ENABLE=ON -DKLU_INCLUDE_DIR=/usr/include/suitesparse
-DKLU_LIBRARY_DIR=/usr/lib/x86_64-linux-gnu .. && make && make install

On Tue, Nov 24, 2020 at 3:05 AM Bjorn<EMAIL_ADDRESS>wrote:

So if sundials is compiled without klu and
lapack, does pycvodes/anyode include/link with suitesparse and lapack
directly?
It should not.
Is there any functionality lost that might be useful in
pycvodes or chempy?
No, after some problem size LAPACK will be faster, but for small problems,
I've seen the inverse, i.e. not using LAPACK is significantly faster.
pycvodes can exploit matrix sparseness when KLU is available. ChemPy does
not use this however.
Right now I just upgraded the Debian version to Bullseye in the Dockerfile
in ChemPy's repository:
bjodah/chempy#186 https://github.com/bjodah/chempy/pull/186
All tests pass in that environment (you need docker installed to run that
script on your machine in case you want to compare).
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/bjodah/pycvodes/issues/131#issuecomment-732758125,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AOQCHS3KYTYIO75JSVTIERLSRNZMVANCNFSM4TEID3FQ
.

--
Jeremy A. Gray

Oh, that's a tricky one.
Often extern "C" { itself is guarded by #ifdef __cplusplus (to allow compilation with C++ compilers as well as C compilers). Sounds like I may have forgotten such a guard somewhere then.


Feat: Improve review cards

Describe the feature
the present cards has alignment issues and are very generic
Add ScreenShots

Record

[X] I agree to follow this project's Code of Conduct
[X] I'm a GSSOC'24 contributor
[X] I want to work on this issue

@Its-Aman-Yadav  @Kalivarapubindusree please assign me this


Cannot install without volumes

Functionally, it is required to clean the disk after each pipeline execution. The security breach is enormous if data or context is shared between pipelines.
emptyDir are reused across Pod restart, but not across Pods.

emptyDir without wipe at Pod restart (what does ephemeral storage) creates a security risk.

Using the preStop hook to clean the directory, like so:
bash config.sh remove --auth PAT --token ${AZP_TOKEN}; rm -rf ${AZP_WORK}

Complete example in Helm:
lifecycle:
  preStop:
    exec:
      {{- if .Values.image.isWindows }}
      command: [powershell, -Command, ".\\config.cmd remove --auth PAT --token $Env:AZP_TOKEN; Remove-Item -Recurse -Force $Env:AZP_WORK"]
      {{- else }}
      command: [bash, -c, "bash config.sh remove --auth PAT --token ${AZP_TOKEN}; rm -rf ${AZP_WORK}"]
      {{- end }}

This is the mitigation I propose.
Originally posted by @clemlesne in https://github.com/clemlesne/azure-pipelines-agent/pull/10#issuecomment-1533501982

Branch is merged. See 79722b0f03bda5974e6fe45655d9d56f3a8138c4


Transactions

In various places in web ui frameworks, especially “transitions” (in the React Suspense sense), it is useful to build up a batch of signal writes and commit them later, even when the formation of this batch spans async operations, and the previous graph remains interactive. @shaylew has called this concept “transactions”, and has been researching semantics and strategies for them, and @trueadm has been experimenting with this concept in Svelte 5.
Many frameworks (eg Solid) support a simpler model of transitions/transactions, with a maximum of two parallel worlds (current and post-transition), but the ideal would be to support multiple parallel transactions within the same suspense boundary that could be committed at different times. According to @acdlite, this generality would be needed to model React’s state as signals, and its implementation would need to be quite efficient to be competitive.
It is unclear whether transactions can be implemented correctly and efficiently on top of other Signal primitives or if they would need built-in support of some kind. Let’s use this issue to track research in this area.

That was my first thought when I heard about this proposal...
But what I was hoping for had a somewhat larger scope. We keep trying to think in terms of a single source of truth in distributed computations, but that's nearly always an oversimplification. Whenever we separate a system into two distinct systems that do not have a strictly enforced and synchronized 1:1 relation, we have more than one such source. The problem I nearly always encountered in projects is that the synchronization of such versions of state is often very hard and rarely done right.
I think that a transaction mechanism should not be build on top of a signal mechanism but rather the other way around. Signals should be transaction aware, such that they had a transaction context available to which they would delegate update operations. A default implementation of such a transaction context would just do what the current implementation does. A simple transaction mechanism that only defers evaluation until a series of actions is completed would record update events (aggregating them to avoid redundant updates) and then perform them on after commit. Complex transaction mechanisms supporting nested transactions or selective isolation would need to dispatch events to the transaction tree as needed.
This is something that seems to be relatively easy to implement for the Signal mechanism (it's basically just the delegation of update events) and the complexity of getting the transactional logic right would stay with a transaction implementation. Doing it the other way round seems to be incredibly difficult to get right.

After rereading my comment, I think I have to elaborate a bit to make it possible to understand what I am thinking off:
I might be using a different terminology when thinking about this topic, here is mine:
action - this is a process that atomically changes the state of a system such that an outside observer either sees the old or the new state, but never any transitional state.
transaction - this is itself an action, that consists of a set of member actions. A fully isolated transaction operates on a snapshot of the system's state and once all of its member actions are completed, commits the entirety of the resulting changes to the system's state. During executions, member actions are affected or see changes performed by other member actions.  A partially isolated transaction is the same, except that it does not operate on a snapshot, that is changes to the outside state will be visible inside the transaction, while effects of member actions will still be isolated. Unisolated transactions are not relevant for this topic. Outside observers interested in the intermediate state of a transaction can operate on the transaction's state that had to be exposed to allow for that.
signals provide a view on a version of the system's state, the state to which they are bound (on creation time). They are observable, efficient and (at least to the runtime) inspectable.
I am thinking of a set of signals as a data type. Instances of that type would be different versions of (subsets of) the system state.
What I called transaction context in my previous comment is an interface to logic that manages different versions of the systems state in conjunction with processes operating at any moment in time. In it's simplest form, there is only one version of the system's state, which is trivial to manage.
In a very complex scenario, there may be many concurrent operations running and various clients (such as UI components, services, etc.) might be interested in various different states.
Looking at all this, I do not think that signals can provide a general and efficient transaction support by itself. However, signals would be an ideal tool for a transaction manager to model views on state. And a transaction manager would be an ideal tool so that signals can be used easily to provide views on complex system state as if there was such a thing as a single source of truth.
As far as I can see, all that is needed from signals to make them work with a separate transaction mechanism is an interface allowing a transaction manager to be hooked in to signals (f.e. using a delegate pattern or something similar).
When writing web applications, we tend to view the state as something owned by the web application. In reality, the state of a system is nearly always a contested remote state. Signals (can) provide knowledge which part of a state is used at any moment in time. That's valuable information, that could be used to improve our apps. Likewise, a history of triggered signals (or dirty state changes) is like a transaction log that could be used for sychronization of remote states.
If Signals would use a delegation mechanism, all this information would be available for frameworks to drastically improve both performance and provide really nifty features, far beyond just having an efficient and comfortable rendering engine.

Could someone create a minimal example/pseudo implementation that showcases the need for transactions and also suggests an API?

a minimal example/pseudo implementation

const a = new Signal.State(0)
const b = new Signal.Computed(() => a.get() + 1)
const c = new Signal.Computed(() => a.get() + 2)
const d = new Signal.Computed(() => c.get() - b.get())
// let's say
d.subscribe(v => assert(v === 1))

@mutech In your vision, would there be a default implementation of the transaction context interface by the runtime itself, which library authors can hook into? Or completely override it?

@mutech:

As far as I can see, all that is needed from signals to make them work with a separate transaction mechanism is an interface allowing a transaction manager to be hooked in to signals (f.e. using a delegate pattern or something similar).

The tricky parts for transactional signals have to do with Computeds and memoization.  If you just had States, it would be enough to delegate all read operations to a transaction manager that could substitute the current transaction's view of the world. But with Computeds, the transaction system has to do more than that:

It has to know, when reading a Computed, whether or not that Computed should be affected by the transaction (and needs to recompute within the transaction) or if it hasn't been affected (and should remain memoized without recomputing).
It has to be able to safely clone a Computed within the transaction, because:

it needs to be able to re-run the memoized function as a member of the transaction (where it will observe different values). This isn't something you can safely do with an arbitrary Computed, because it may have side effects. Even something ordinarily as benign as keeping the computed's previous value in a closed-over variable so it can pass it to the function will cause problems here.
it needs to be able to keep not just a new value for the computed in the transaction, but also a new set of dependencies

It should ideally be able to commit the changes to Computeds as well as to States, where appropriate. If you've already run a computed within the transaction to get its new value, you don't want to have to rerun it again after committing all the states it depends on.

In the current proposal you're free to subclass State and Computed to create versions that delegate their get and set through some sort of transaction manager. You can even make your subclass of Computed cloneable. But right now I think you'd need heavy use of introspection for (1), and (3) requires some compromise and ingenuity to get even mostly right.
(This is all just talking about partially isolated transactions; to get fully isolated transactions there's another different set of problems to solve.)
So I do think a delegation mechanism will probably end up as part of any signals transactions solution, but I'm not sure it has to be built into the proposal. Subclassing currently lets you build your own delegation mechanism on top of signals, and (because arbitrary Computeds aren't necessarily safely cloneable) you're probably going to have to make transactionality opt-in anyway, rather than trying to get it to work with arbitrary third-party Computeds.

@mutech In your vision, would there be a default implementation of the transaction context interface by the runtime itself (with just a single execution path), which library authors can hook into? Or completely override it?

I think a default implementation that simply ignores transactions (f.e. auto-commit semantics) would make sense. From there, a library author could hook into signals in order to implement whatever logic is needed. A more elaborate default implementation would probably add little value, considering that to be meaningful, transactions will likely need to take into account external systems (such as services, caches,  state managers or DBs).

Could someone create a minimal example/pseudo implementation that showcases the need for transactions and also suggests an API?

Anything async needs transactions. The computed value may need async fetch or DB lookup.
Also, the stream of data can be large enough so that it has to be done in batches as to not lock gui.

Hi @shaylew

@mutech:

As far as I can see, all that is needed from signals to make them work with a separate transaction mechanism is an interface allowing a transaction manager to be hooked in to signals (f.e. using a delegate pattern or something similar).

The tricky parts for transactional signals have to do with Computeds and memoization. If you just had States, it would be enough to delegate all read operations to a transaction manager that could substitute the current transaction's view of the world. But with Computeds, the transaction system has to do more than that:

In my mind model, I am assuming that some transaction manager creates a (from the application point of view) distinct context. In that context, there is just one state and changes to that state propagate in regard to memoization and computed values as they would if there were no transactions.
In an transaction aware application there may be multiple contexts (one for the global application state and one for each active transaction). A commit of a transaction would result in the transaction's state to be "merged" into the surrounding context. Once that happens, observers of the surrounding state receive updates as soon as the merge is completed. Observers of the transaction state unsubscribe (as in a dialogue driving the transaction closes).
That means that observers need to be bound to the context (transaction) they are operating on.
And that in turn means, that the transaction manager would be in charge to handle state such that there are no additional complications in regard to computed data (or more general dependencies on changes).
As a result, I don't see a problem arising from integrating transactions into signals. That does not mean that it's trivial to implement change propagation, it just means that the difficulty is part of the transaction management and not the signalling mechanism.
As to how a transaction manager could implement such a functionality:
I would start by designing (the library building on signals) by strictly using COW for changes. When a new transaction starts, a snapshot of the current state is taken (if transactions are fully isolated) which is  zero cost due COW. From there on, data management in- and outside the transaction is independent and uses the same implementation.
On commit, the transaction manager has to obtain exclusive access to the target context (transaction/app state), f.e. by pausing event propagation, see if the transaction changes are valid, merge concurrent changes and once that's done propagate the changes resulting from the commit in the target context. The support the TM needs from signalling is to be able to collect change events, defer them and either discard them (if the commit failed) or fire them on conclusion.
One open question is what observers are observing. If observation itself is transaction aware, then it's easy in that you either observe the global state or that of a running transaction. If observers dynamically change the context they are observing, then the transaction manager needs to act as intermediary and then it needs to do all the tricky stuff you describe. The same problem arises when transactions are not fully isolated. But no matter the actual situation, it should be mostly transparent for the signalling side of things.
I'm responding inline to make sure I didn't overlook something (I'm a bit pressed for time):

1. It has to know, when reading a Computed, whether or not that Computed should be affected by the transaction (and needs to recompute within the transaction) or if it hasn't been affected (and should remain memoized without recomputing).

It does that simply using the same mechanism in a transaction that it would on a singular application state.

2. It has to be able to safely _clone_ a Computed within the transaction, because:

If that was in deed necessary, there would be little benefit from a transaction mechanism.
There needs to be a dependency mechanism that reacts to changes by invalidating/updating a dependent item whenever the source data changes. Whether "the source data" is global or transaction state has to be transparent (implemented elsewhere) to the dependency management.

* it needs to be able to re-run the memoized function as a member of the transaction (where it will observe different values). This isn't something you can safely do with an arbitrary Computed, because it may have side effects. Even something ordinarily as benign as keeping the computed's previous value in a closed-over variable so it can pass it to the function will cause problems here.

* it needs to be able to keep not just a new value for the computed in the transaction, but also a new set of dependencies

3. It should ideally be able to commit the changes to Computeds as well as to States, where appropriate. If you've already run a computed within the transaction to get its new value, you don't want to have to rerun it again after committing all the states it depends on.

In the current proposal you're free to subclass State and Computed to create versions that delegate their get and set through some sort of transaction manager. You can even make your subclass of Computed cloneable. But right now I think you'd need heavy use of introspection for (1), and (3) requires some compromise and ingenuity to get even mostly right.
(This is all just talking about partially isolated transactions; to get fully isolated transactions there's another different set of problems to solve.)
So I do think a delegation mechanism will probably end up as part of any signals transactions solution, but I'm not sure it has to be built into the proposal. Subclassing currently lets you build your own delegation mechanism on top of signals, and (because arbitrary Computeds aren't necessarily safely cloneable) you're probably going to have to make transactionality opt-in anyway, rather than trying to get it to work with arbitrary third-party Computeds.


Update README.md with python syntax highlighting

@stsievert : Thanks for the pull request. Unfortunately, I won't be able to take this in as I have made this change and some others as part of my regular code check-ins.


Randomly, some Felix launches fail to register with the plugin.

While playing with install repeatedly today working on charms, I found myself with a Felix that was running happily and a plugin that thought it wasn't running at all (admin state down). This prevented VM boot because Felix never got told about the VMs coming up so it never provided routing for them.
This goes away if Felix is restarted: the plugin immediately notices Felix and informs it of all of its VMs, which can then merrily reboot.
This is tricky as hell to reproduce it and I don't know quite what the repro scenario is, besides the fact that charmed installs can do so. Given that charms kind of install everything at once it's possible it's a weird ordering issue. One thing that might be relevant is that my Horizon dashboard lists an OVS agent for that machine that is also listed as 'up', though it isn't in use. Can't tell how important that is though at this time.

I am going to close this as a duplicate of issue #110, which would have the exact same symptoms and has now been fixed.


IE10 click event doesn't work on an SVG.

Currently throwing an exception trying to call getAttribute function

I have this issue as well, although I do not directly attach the listener to an SVG but to a click that ocntains the SVG. When the padding of the link is clicked, it works properly, however when the inner SVG is clicked exactly, listener is not called.
Is there a way to solve this issue? It works properly on IE11+ :).

Any joy? Just come across this issue

Hi all, this should be fixed by backflip's pr and will go out in the next release (v3.1.0).


Question about "ReRun Failed Jobs"

Is there a syntax that can be used to run past successful jobs when executing "rerun failed jobs"?  An example use case is when tests require a setup stage, then a second job uses a matrix strategy to run tests in parallel.
In our case, it's provisioning test hardware to then validate against contracts we have for expected functionality.
Currently with our configuration only the failed step is run which means we need to do a completely new deploy.

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

ID: 7458d5b2-1bb7-7d87-7ce6-2b0c430b0155
Version Independent ID: edf5bbd3-a3f0-5426-e985-31290f8afd05
Content: YAML schema - Azure Pipelines
Content Source: docs/pipelines/yaml-schema.md
Product: devops
Technology: devops-cicd
GitHub Login: @steved0x
Microsoft Alias: sdanie

Thanks for your question. It looks like you're working through an issue with your scenario or implementation, rather than an issue with the documentation. Here are a couple of options where you might consider asking your question:

Azure DevOps on Stack Overflow
Azure DevOps Support Bot

I am closing this issue now.  You are welcome to @ mention me for any followup.
We hope to hear from you again.

@SirAlvarex Did you figure this out? I'm also wondering...

@SirAlvarex Same question than @lindhe


Add prefixed-styles support for older browsers

~~https://github.com/littlebits/react-popover/blob/049bfcac1e1b53de7b1ae3ec6f44a5b71218c45f/lib/index.js#L22-L24~~
Issue has changed slightly. We now us no prefixes. So this task is use prefixes generally for older browsers that we think we should support.

This feature is functionally implemented now 9ba13dc6a2b1cca20e02e627c49a53ddfdb20ce3. But a next step would be to refactor the solution into a coherent API.

And many thanks @kof for a sensible low-level API.

:+1:


Add support for tsx.

If a file belongs to a project that has tsx enabled then getOrCreateProgram will require https://github.com/fdecampredon/jsx-typescript/ instead of typescript.
Including @fdecampredon into the conversation by force mentioning :stuck_out_tongue: :heart:. Just curious if we should expect the languageService to just work?
Refs : https://github.com/TypeStrong/atom-typescript/issues/56

yup In fact I was able to use brackets-typescript with it :D, however the 'formatting' part won't work, I had to disable it, and you don't have completion on attributes due to https://github.com/Microsoft/TypeScript/issues/1947 and https://github.com/Microsoft/TypeScript/issues/1926


prefer IPv4 over IPv6 tweak broke postgresql

Describe the bug
After applying the tweak, connection to local PostgreSQL on <IP_ADDRESS> databases stops working and an error appears related to the pg_hba.conf file.
Steps to reproduce

Go to tweaks tab
Click on prefer IPv4 over IPv6 in Essential tweaks
Click on Run tweaks
Restart PC
See the error in programs that use postgresql local base on <IP_ADDRESS>

Expected behavior
Just working
Additional context
Move tweak "prefer IPv4 over IPv6" to "Advanced tweaks - CAUTION" category so ppl have no fafo

Agreed, I'm going to remove this. As more applications start leaning more on ipv6 it is causing more issues than it solves.


Support alternative datauri encodings

svgo has a datauri option to set the encoding: base64, enc (URI encoded), unenc. See https://github.com/svg/svgo/issues/105.
Though, before v3 datauri field sometimes seems to be ignored: https://github.com/svg/svgo/pull/1679
This plugin currently only support base64. Could you honour the "datauri" field in optimization config?

I will take a look at it in the near future 👍

This should now be fixed in the latest version. Note that this issued a new major version since this feature required a version bump of the SVGO dependency to >=3.0.
Feel free to reopen this issue if this new feature doesn't work as expected.


Disallow invocations of Thread.sleep() in coroutines/suspending functions

Expected Behavior of the rule
The potential rule SleepInsteadOfDelay would flag usages of Thread.sleep() in coroutines and suspending functions; as the rule name suggests, the correction would be to swap out the function call and insert delay() instead.
Context
The traditional way to halt the execution of code for a fixed period of time in Java/Kotlin is to call Thread.sleep(). Kotlin coroutines, however, are more lightweight than traditional threads, and multiple coroutines can be assigned to execute on the same thread. As such, if a developer writes the following code:
suspend fun foo(): String {
    Thread.sleep(500L)
    return "bar"
}

not only will foo()'s execution be halted, but also the thread that hosts the coroutine executing foo(), something that could potentially halt the execution of unrelated coroutines as well and cause non-intuitive errors.

Good idea! Do you want to give it a try and implement it?

@BraisGabin I've created a branch for the request; as soon as I get write permissions to the project, I'll push it and create a PR.

@severn-everett you should create a fork from this project and push the branch there. This way github will allow you to create a PR without write permissions over this project.

Can this be closed? https://github.com/detekt/detekt/pull/3335 has been merged.

Yup, closing