Multi tenancy

Background
The current platform allows for one single "namespace" / "project"; however this should be extended to allow for multiple projects with their own collection of apps / services (see - #75). Additionally the concept of Organisations could be introduced (teams, if you will) - allowing for multiple users to view and manage these resources, with a roles system.
Use case
There are multiple use cases, but one that stands out the most is allowing for the orchestration of multiple projects from one Coolify instance, such as in an enterprise environment where multiple teams need access to different resources or perhaps a "production/staging" environment separate.
Notes

Please consider how this would work with the proposed API feature request (#74) as this would mean additional endpoints would have to be implemented.
Please consider how this would work with (#45) as a project could be the equivalent of a "namespace" on kubernetes; a single service mesh tool like Istio could be used for scaling across multiple clusters via Kubernetes, among other overlaps i.e. roles, where necessary - impacting the implementation of this feature.

It's partly - if not entirely - implemented in v2.
You could have separation by teams on the UI and docker network on the docker/server levels.
Environments like prod/staging would be implemented later, but it needs to be figured out how. 😄

Hi @andrasbacsai Loving Coolify.
One detail: If I have registration closed, I cannot invite new members to teams. From a management point of view, I would like to create my teams (as I am the server admin) and then invite people to specific teams.
Is that possible?

Hi @andrasbacsai Loving Coolify.
One detail: If I have registration closed, I cannot invite new members to teams. From a management point of view, I would like to create my teams (as I am the server admin) and then invite people to specific teams.
Is that possible?

Thanks! Yes, it will be possible if I add SMTP integration.

I'm closing this issue, because tracking features will be moved to GitHub discussions. Github issues will be only for bugs.
Version 4 is in full focus. v3 related issues will be closed, if it is not a critical bug.
Thanks for your understanding.


How to get outside $HOME using SFTP remote

Hello,
I don't understand how I am supposed to get outside of my user $HOME directory when using a SFTP server.
In rclone-browser this home directory appears as / in the file list, the only trick I found to be able to browse the filesystem is to create a symbolic link to / within the home directory. My issue is that rclone-browser only show /home/solene/ while I need to make transfers from/to /home/samba/ using my user.
I have a simple rclone sftp config to connect to a Linux NixOS system.
[nas]
type = sftp
host = <IP_ADDRESS>
md5sum_command = md5 -r
sha1sum_command = sha1 -r

Probably caused by #64

Probably caused by #64


[Issue] AccountSwitcher could not be constructed

This issue was first pointed out in #78.
Steps to reproduce the behavior:

Ctrl+R inside of Discord with the AccountSwitcher plugin loaded
See error
(Also your bug reporter is reporting some crashes to the console as well)

Additional Information:
The root of this issue is that Discord is moving towards lazy loading (see doc from mozilla).
The module you are depending on in line 118, KeyRecorder, does not get loaded until after you are in the main interface of Discord.
I suggest moving towards adding a keydown event listener as seen being used in other BD plugins I've seen. I would've opened a PR today but due to my handicap of never touching JavaScript before in my entire life, that didn't happen lmfao

I receive this error too.
also, I enabled token encryption.

I don't have token encryption and I still have the same bug. This is a problem with the discord update.

I don't have token encryption and I still have the same bug. This is a problem with the discord update.

Hi, this is a bug with account switcher itself, everyone has the same error, lets hope it gets fixed, ill take look and try to fix it,

I don't have token encryption and I still have the same bug. This is a problem with the discord update.

Hi, this is a bug with account switcher itself, everyone has the same error, lets hope it gets fixed, ill take look and try to fix it,

tnx

I have made my own plugin to allow account switching using keydown and keyup event handlers. Maybe this code will be useful for this plugin and someone else can port over the changes.

I have made my own plugin to allow account switching using keydown and keyup event handlers. Maybe this code will be useful for this plugin and someone else can port over the changes.

Hello, thank you very much.

I also have the same issue with the latest version of plugin.
Having the same issue, i got these logs if they would be useful to the dev. I think there is something wrong with the Libraries this plugin is using, WebpackModules esp.
AccountSwitcher.plugin.js:119 Uncaught TypeError: Class extends value undefined is not a constructor or null
    at plugin (AccountSwitcher.plugin.js:119)
    at AccountSwitcher.plugin.js:579
    at AccountSwitcher.plugin.js:580
    at AccountSwitcher.plugin.js:581
    at AccountSwitcher.plugin.js:586
    at Object.getFileModification (<anonymous>:4:307707)
    at Object..js (<anonymous>:4:267851)
    at Function.o._load (<anonymous>:4:370475)
    at Object.loadAddon (<anonymous>:4:268008)
    at Object.loadAddon (<anonymous>:4:305956)
    at Object.loadAllAddons (<anonymous>:4:270683)
    at Object.initialize (<anonymous>:4:265130)
    at Object.initialize (<anonymous>:4:305166)
    at Object.startup (<anonymous>:4:367245)

LineNo 119 corresponds to, const KeyRecorder def,
					}
				);
			}

			const KeyRecorder = class KeyRecorder extends WebpackModules.getByDisplayName("KeyRecorder") {
				render() {
					const ButtonOptions = WebpackModules.getByProps("ButtonLink");
					const Button = ButtonOptions.default;
					const ret = super.render();
					ret.props.children.props.children.props.children.push(
						React.createElement(
							DiscordModules.FlexChild,

Your fix fixes nothing.

This is not a full fix, and should not be treated like one. But I fix this error for those who had the plugin already configured. I heavily doubt this could be a final version, mostly because I believe it's gonna crash the minute you open the settings menu of the plugin. Feel free to use it until I try to fix this error. :D https://github.com/ezeholz/AccountSwitcher/tree/hotfix-78

Discord crashes when trying to switch account

This is not a full fix, and should not be treated like one. But I fix this error for those who had the plugin already configured. I heavily doubt this could be a final version, mostly because I believe it's gonna crash the minute you open the settings menu of the plugin. Feel free to use it until I try to fix this error. :D https://github.com/ezeholz/AccountSwitcher/tree/hotfix-78

This worked for me, thanks

I couldn't get this to work at all.  A fresh install disables the setup button so no configuration can be done.

None of the above solutions seem to work whether it is the current Localhost version or the Omen one.
It appears to me that anyone installing this for the first time is going to encounter the same issue that I did that a fresh install disables the setup button and there appears to be no easy/simple way to set up accounts to continue using this plugin.
This is on top of the current issue continuing to pop up.  Moving the plugin out of and back into the plugin folder does not resolve the inability to set up new accounts.
Any chance this can be fixed or a proper/official solution can be updated on the read me to confirm what users should do doing going forward?  This might save other users the frustrations that I had.

This is not a full fix, and should not be treated like one. But I fix this error for those who had the plugin already configured. I heavily doubt this could be a final version, mostly because I believe it's gonna crash the minute you open the settings menu of the plugin. Feel free to use it until I try to fix this error. :D https://github.com/ezeholz/AccountSwitcher/tree/hotfix-78

This worked for me, thanks

It totally works mate, just need to comment out lines 118 --> 170 ty

The current fix is to config the plugin as you want, and once you configured it just comment the lines mentionned and you good

The setup button is grayed out for me so I am unable to get a box to add/remove accounts or adjust the keybindings.  This is after reloading the plugin with or without the 118=>170 lines commented out.

{     "didShowIssueHelperPopup": true,     "currentVersionInfo": {         "version": "1.3.5",         "hasShownChangelog": true     },     "settings": {         "accounts": [             {                 "name": "TAG#1111",                 "id": "123431231",                 "avatar": "https://cdn.discordapp.com/avatars/111111/11111111.webp?size=128",                 "keybind": [                     160,                     37                 ],                 "token": "token"             },             {                 "name": "TAG#1111",                 "id": "1111",                 "avatar": "https://cdn.discordapp.com/avatars/1111/1111.webp?size=128",                 "keybind": [                     160,                     39                 ],                 "token": "token"             }         ],         "encrypted": false,         "encTest": "test",         "pluginsToRestart": [             "AccountDetailsPlus",             "AutoStartRichPresence"         ],         "encryptionVersion": 2,         "salt": "PHStMmwqFoZm5ToErFseA8T7BI/Cb/AozuiOUZD5Wzc="     } }

You can try to do your config by hand with this template I sent

Tried this and now I get the same issue as earlier reported where the Discord account switcher interferes.


client-side ClassCastException

Hi,
I tried the extension, with a simple CheckBoxRenderer on a boolean property, but I get a client-side error which breaks the grid
SEVERE: Error sending state change eventscom.google.gwt.event.shared.UmbrellaException: Exception caught: undefined
	at Unknown.ep(com.softbridge.viewer.SoftbridgeWidgetSet-0.js)
        .....
	at Unknown.d(com.softbridge.viewer.SoftbridgeWidgetSet-0.js)
Caused by: java.lang.ClassCastException

My config is vaadin-7.6.8 with theses addons :
        <inherits name="com.vaadin.DefaultWidgetSet" />
        <inherits name="com.softbridge.svg.WidgetSet" />
        <inherits name="org.vaadin.gwtgraphics.GWTGraphics" />
        <inherits name="org.vaadin.sliderpanel.WidgetSet" />
        <inherits name="org.vaadin.peter.contextmenu.ContextmenuWidgetset" />
        <inherits name="org.vaadin.teemusa.gridextensions.GridExtensionPackWidgetSet" />
        <inherits name="com.vaadin.addon.charts.Widgetset" />
        <inherits name="com.vaadin.addon.contextmenu.WidgetSet" />
        <inherits name="com.vaadin.addon.timeline.gwt.TimelineWidgetSet" />
        <inherits name="org.vaadin.peter.imagestrip.ImageStripApplicationWidgetset" />
        <inherits name="org.tltv.gantt.WidgetSet" />
        <inherits name="org.vaadin.grid.cellrenderers.RenderersCollectionWidgetSet" />

I don't have actually the time to dig but I will come later on this subject..
Franck

I also got this error, I was able to fix it by generating client side files of the widget.
Working demo is my git repo. Take a look at pom.xml
https://github.com/bpaulvannan/vaadin

Closing this one, since apparently it is not issue in add-on.


[BSO] Pets on mass trips

Can we have pets useable on solo "mass trips" like ori working for raids ect ?

flappy is currently raid pet booster


Send performance reports only if grade is lower or equal than the one subscribed

Review the current subscription to accept a new parameter (grade) !subscribe STASH_ADDRESS GRADE for example, where reports are only sent if the grade is equal or lower than the one subscribed.

Thanks again for the help with this!

Perhaps you can also allow for a "missed vote ratio" field !subscribe STASH_ADDRESS MVR for example, where reports are only sent if the MVR is equal or higher than the one subscribed.


Angular nativescript - android

Hi,
It is a way to use it with angular? I've tried to define it in main.ts file, in one in my compontent and event if LocalNotification as a module works fine (I can schedule a notification, get ids of already scheduled etc) but in any case I can`t get application after closing my app :/

Do you have a sample project I can clone?

@EddyVerbruggen  Sure one moment and I will make it public - it is just a simple todo app with firebase but it is my start with nativescript :)
https://github.com/4zriel/TodoAppAndroid

What did you actually mean by "I can`t get application after closing my app"?

*Notification - I can't get any notification when I closing my app

Ah ok.. that shouldn't be related to Angular at all. But work a look at your project nonetheless.
If anyone has notifications working on Android and want to take a look: be my guest :)

@EddyVerbruggen will it work if we close application? kind of service?

That's the idea yeah.

For anyone looking for Angular guidance, please check out this repo.


minLength for inputs supported in Safari TP

See https://webkit.org/blog/6969/release-notes-for-safari-technology-preview-release-14/.

Thanks!


[New game]: Color Name

🎮 Game Request
The color name will be displayed but with different colors, you have to tell the name of the color in which the color name is displayed
Point down the features
Made using HTML CSS JS
Score feature
Select program in which you are contributing
GSSoC23
Code of Conduct

[X] I follow CONTRIBUTING GUIDELINE of this project.

/assign

Hey @whiteknight16 , You can't have another issue before completing the previous one 😀
you already have the following 1 open issues 👀 ! :
#2321

Hey @whiteknight16 ! Thank you so much for your raising the issue💗
It’s all yours, you can come anytime again and make some contributions! 🚀
Alone, we can do little, but together we can do so much! 😇

Hey @whiteknight16 !
Thank you for raising an issue 💗
You can self assign the issue by commenting /assign in comment 😀
Make sure you follow CODE OF CONDUCT and CONTRIBUTING GUIDELINES 🚀
Don’t Forget to ⭐ our GameZone🎮
Make sure you join our Discord🕹


docs: improve installation instructions for codegpt on MacOS via Homebrew

Add instructions for installing codegpt via Homebrew on MacOS
Remove irrelevant context lines

fix https://github.com/appleboy/CodeGPT/issues/8

Codecov Report

Merging #24 (6c6f71f) into main (7570e13) will not change coverage.
The diff coverage is n/a.

:mega: This organization is not using Codecov’s GitHub App Integration. We recommend you install it so Codecov can continue to function properly for your repositories. Learn more
@@          Coverage Diff          @@
##            main     #24   +/-   ##
=====================================
  Coverage   9.67%   9.67%
=====================================
  Files          2       2
  Lines         31      31
=====================================
  Hits           3       3
  Misses        28      28

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.


WIP feat: implement mTLS authentication

fixes #988

[x] proto API
[x] query api
[x] cli create certificate
[x] cli revoke certificate
[x] server to validate client certificate
[x] client to validate server certificate
[ ] tests
[x] gateway obtain owner id from context
[x] make certificate routines into shared utils
[x] generate certificates into genesis
[x] provider status endpoint is TLS without client authentication

testing
_run/lite is barely set to play with mTLS
generated certificates are located in home dir
default key for deployment operations is main

make init - along with other init stuff also creates certificate for each key and adds it to genesis. provider certificate has both Server and Client ExtKeyUsage
t2 make node-run
make query-certificates query onchain certificates
make provider-create
t3 make provider-run
make provider-status obtain provider status via HTTPS with mTLS authentication on client side.
make deployment-create create deployment
make send-manifest KEY_NAME=validator errors

provider error messsage:
no lease for deployment

make send-manifest manifest sent successfully
make provider-lease-status KEY_NAME=validator no lease will be found

uri: https://localhost:8080/lease/5/1/1/status
{
  "services": null,
  "forwarded-ports": null
}

make provider-lease-status lease status obtained successfully

uri: https://localhost:8080/lease/5/1/1/status
{
  "services": {
    "web": {
      "name": "web",
      "available": 2,
      "total": 2,
      "uris": null,
      "observed-generation": 0,
      "replicas": 0,
      "updated-replicas": 0,
      "ready-replicas": 0,
      "available-replicas": 0
    }
  },
  "forwarded-ports": null
}

make provider-service-status

uri: https://localhost:8080/lease/5/1/1/service/web/status
{
  "name": "",
  "available": 0,
  "total": 0,
  "uris": null,
  "observed-generation": 0,
  "replicas": 0,
  "updated-replicas": 0,
  "ready-replicas": 0,
  "available-replicas": 0
}

make provider-service-logs

service web does not have running pods

@troian I ran through your steps and everything worked as expected. My only remark would be when we run
make provider-lease-status KEY_NAME=validator

It should probably return 403 as the status code. Since the deployment info is valid but the key does not authorize retrieval of the data.

@troian I ran through your steps and everything worked as expected. My only remark would be when we run
make provider-lease-status KEY_NAME=validator

It should probably return 403 as the status code. Since the deployment info is valid but the key does not authorize retrieval of the data.

@hydrogen18 this behavior is a bit confusing but here is why  :)
on the client certificate is loaded from the account id specified in --from and passed to the server for authentication.
on the server account id for lease is extracted from the certificate so server is actually trying to find lease for <validator account>/1/1/1 not <main account id>/1/1/1.

@hydrogen18 this behavior is a bit confusing but here is why  :)
on the client certificate is loaded from the account id specified in --from and passed to the server for authentication.
on the server account id for lease is extracted from the certificate so server is actually trying to find lease for <validator account>/1/1/1 not <main account id>/1/1/1.

OK, in that case it seems like it should be 404 status code? Since it doesn't exist at all.

OK, in that case it seems like it should be 404 status code? Since it doesn't exist at all.

yah, you're right

yah, you're right


How can i get action words from npy result

How can I get the input action corresponding to each frame from the output npy action result?

Hello, in this line: https://github.com/Mael-zys/T2M-GPT/blob/main/GPT_eval_multi.py#L95
You can set "draw = (i==0)" which can generate the skelton visualization with corresponding text description in the tensorboard, or you can set both "draw = (i==0), savegif = (i==0)" which can also save the corresponding gif format file with action words. You can check the tensorboard or gif file name to get the npy input text.
We mainly use these 2 ways to quickly visualize the results before rendering npy motion file, because rendering part is a bit slow.


use getOwnPropertyNames to see if webdriver was changed

Making the assumption that if the browser modified navigator.webdriver from its prototype; we're pretty safe in assuming its on.

Very nice. I will add. What are your thoughts on adding a few more backup checks? They are all the same. One is sufficient, but we could check them all in case one or some gets overridden.
navigator.hasOwnProperty('webdriver')
|| !!Object.getOwnPropertyDescriptor(navigator, 'webdriver')
|| !!Reflect.getOwnPropertyDescriptor(navigator, 'webdriver')
|| Reflect.ownKeys(navigator).includes('webdriver')
|| Object.getOwnPropertyNames(navigator).includes('webdriver')
|| Object.keys(Object.getOwnPropertyDescriptors(navigator)).includes('webdriver')

A simple way around is to use –disable-blink-features=AutomationControlled. No need to touch JavaScript. I'm not sure if WebKit and Gecko have something similar.

Feels like solid coverage for minimum cost - I don't see why not.


fix: executables not found in $PATH

Hey 👋🏾,
I noticed the action runs have been silently failing when executing pahole (Ubuntu and Oracle Linux recently) or pull-lp-ddebs (for Ubuntu) due to the runner not having either installed it seems. This relates to issue #84.
# pahole not found
2023/04/22 01:56:55 ERROR: btf gen: pahole --btf_encode_detached /home/runner/work/btfhub/btfhub/btfhub/archive/ubuntu/bionic/x86_64/4.15.0-1163-azure.btf /home/runner/work/btfhub/btfhub/btfhub/archive/ubuntu/bionic/x86_64/vmlinux-4.15.0-1163-azure: exec: "pahole": executable file not found in $PATH

2023/04/22 02:10:59 ERROR: btf gen: pahole --btf_encode_detached /home/runner/work/btfhub/btfhub/btfhub/archive/ol/7/x86_64/4.14.35-2047.524.5.el7uek.x86_64.btf /home/runner/work/btfhub/btfhub/btfhub/archive/ol/7/x86_64/vmlinux-4.14.35-2047.524.5.el7uek.x86_64: exec: "pahole": executable file not found in $PATH

# pull-lp-ddebs not found
2023/04/19 01:39:37 ERROR: linux-image-unsigned-4.15.0-209-generic-dbgsym amd64: downloading ddeb package: pull-lp-ddebs: exec: "pull-lp-ddebs": executable file not found in $PATH

This set of package installs worked for me when using a local and GitHub-hosted runner.

Hey @rc-vbundage, thanks for the contribution. I'll give a better look later today (finishing up some releases of other things). I was afraid of using distro pahole due to not controlling the version (and thinking about having it statically compiled just like we do with bpftool).
Another idea was to include both as "submodules" and compile them before the update runs :. Either way, I'll take a better look and merge/comment/discuss soon.

I have added pahole and bpftool as submodules within the repo so they can compiled during runtime:
https://github.com/aquasecurity/btfhub/pull/95
https://github.com/aquasecurity/btfhub/pull/96
The bpftool is installed from the source. Pahole is being built as a debian package before being installed (3rdparty/xxx.sh scripts). Maybe its better to make them distro agnostic (taking this issue in consideration). TBD


update package json for better ember support

example:
"versionCompatibility": {
"ember": ">= 2.4.0"
}

This doesn't look like it is a widely used standard.


Add rector usage README.md

Q
A

Is bugfix?
❌

New feature?
✔

Breaks BC?
❌

What do you think there should be an example of rector.php here?


Transparent Login Form

Describe the project
I want to add a project made using HTML,CSS and JAVASCRIPT that allows the user to login. It is basically a Transparent Login Form.
Please assign me this under SSOC'23
Issue Type:

[ ] Bug Report
[ ] Feature Request
[ ] Documentation
[X] New Project

Additional context
Login forms are used in almost every website and Application.  A Transparent login form design is the Eye catcher it is to authenticate the access to the user.
Screenshots

If applicable, add screenshots to help explain your problem.

I would like to work on it. Please assign me

i would like to work on this issues plz assign to me

Login form project is already present in the repo


fix: doesn't autoload on pages that don't have pages to load

TL;DR before we showing autoload even on singular course pages, and pages that didn't even have other pages to go to. This fixes that

This change is

LBTM, formatting yikes

LGTM


Add support for parentheses wrapped multiline imports and configuring the max line witdh

Closes #15
Let me know if you prefer two separate pull requests instead.

This is really great, thanks for the PR.

Happy to contribute :D


[SPARK-14739] [PySpark] Fix Vectors parser bugs

What changes were proposed in this pull request?
The PySpark deserialization has a bug that shows while deserializing all zero sparse vectors. This fix filters out empty string tokens before casting, hence properly stringified SparseVectors successfully get parsed.
How was this patch tested?
Standard unit-tests similar to other methods.

Can one of the admins verify this patch?

Jenkins test this please

AFAIK that's correct, because similar calls work as described here in Scala. LGTM pending tests

Test build #56350 has started for PR 12516 at commit 5a0ace6.

Test build #56350 has finished for PR 12516 at commit 5a0ace6.

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

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

Merged build finished. Test PASSed.

@arashpa  I have updated your test cases in the following pull request to your branch arashpa/spark/pull/#1
@srowen This PR contains the changes to the Test Cases that I mentioned in #12513

Actually we should probably close this in favor of https://github.com/apache/spark/pull/12513 which came first and has additional fixes.

@vishnu667 Thanks merged in your PR.

@srowen would be great if this PR is considered as the bug fix (instead of #12513) since I discovered the bug and also provided the first PR on the Jira ticket. I made a mistake by closing and opening a new PR when I wanted to update the code instead of adding more commits. By merging the @vishnu667 PR this should now have all the updated tests.

@arashpa there was actually a fourth as well, one before you (WTH?) but the first two were closed.
Huh this really is an unusual sequence. Maciej really identified the original and follow-on problem (you didn't open the JIRA). Although in the end the important thing is to get one correct fix in, I understand we want to observe some order and fairness since people care about merge/JIRA credit.
Generally, people shouldn't open a new PR when there were others in progress, unless that one has been abandoned or there's a clear need to try a different approach. I see you began work on the JIRA first, at virtually the same time as zero323, but both those were closed for some reason: https://github.com/apache/spark/pull/12510 https://github.com/apache/spark/pull/12511
Then https://github.com/apache/spark/pull/12513 which was correct, but I see it built on Maciej's comment and maybe your first PR. Why didn't you just update the original one instead of closing? it kind of signaled you weren't working on it.
I am OK merging this one for reasons above. Maybe a little more communication would have avoided 3-4x duplicated effort on this one.

@srowen I apologize, closing #12510 was a mistake and I helped making this confusing. I didn't open the Jira ticket but the stackoverflow post is by me.

@arashpa  You'll need to merge https://github.com/arashpa/spark/pull/2 your test cases are still not updated the previous commit it got merged to your master instead of the current branch.
@srowen which PR are you going to merge so that we can close the other one.

@vishnu667 just merged the second PR.

@srowen i wanted to add a comment regarding fairness of credit @arashpa did indeed find the bug since we were looking at this yesterday, Maciej reported the issue based off of @arashpa 's stack overflow question about the bug ( http://stackoverflow.com/questions/36730727/parsing-all-zero-sparse-vectors-with-pyspark-sparsevectors ).

OK that all sounds good. With different aliases on different sites, I didn't see the connection.

@srowen see the about me section: http://stackoverflow.com/users/1367070/x89a10?tab=profile will update my alias on stackoverflow later.

Jenkins retest this please

Test build #56523 has started for PR 12516 at commit aeefb82.

Test build #56523 has finished for PR 12516 at commit aeefb82.

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

Merged build finished. Test PASSed.

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

Merged to master/1.6


Bug: terraformer doesn't release lock after an unexpected restart

Current Behaviour

A builder got restarted after I applied InputManifest. The InputManifest got stuck in IN_PROGRESS, specifically in the Terraformer phase and nothing was going on in the terraformer. In an hour a builder got restarted again, but this time a terraformer also got restarted. This resulted in re-running the workflow and erroring out in terraformer with the following logs regarding not released state lock.
diagnostic:
        severity: error
        summary: Error acquiring the state lock
        detail: Error message: ConditionalCheckFailedException: The conditional request failed
Lock Info:
  ID:        8b4fdb90-463a-1a74-5da1-523f4fa71cdc
  Path:      claudie-tf-state-files/default-jakub/jakub-fgion0h
  Operation: OperationTypeApply
  Who:       @terraformer-6965b5fbc-cvzn6
  Version:   1.4.4
  Created:   2024-03-21 06:49:42.660346554 +0000 UTC
  Info:

Terraform acquires a state lock to protect the state from being written
by multiple users at the same time. Please resolve the issue above and try
again. For most commands, you can disable locking with the "-lock=false"
flag, but this is not recommended.

Expected Behaviour
I assume the terraformer should release the lock on the state file after an unexpected restart.
Steps To Reproduce
Hard to tell, because I don't know why the builder restarted at first and I don't know what were the reasons behind the next builder and terraformer restart.

Maybe one more thing to add. Infrastructure was provisioned by terraformer even though the InputManifest got stuck in the Terraformer phase.

Today at the grooming we agreed that we will limit the scope of this issue to adding an entry into the troubleshooting guide about how to resolve a locked state in Terraformer.


Add approval tests to the component tests

I have tried to do it, but because the tests are Cucumber based, the approval test library (com.approvaltests:approvaltests:11.7.0) was getting confused that it wasn't running with jUnit.
It either requires settings adjustment or we may need to switch to a different approval test lib.

Implemented in jUnit 5


Enable custom Twig tags

I get an error when I use CMS specific custom Twig tags, such as the nav and endnav tag of Craft CMS (https://docs.craftcms.com/v2/templating/nav.html)
[error] Expected a known tag such as
[error] - autoescape
[error] - block
[error] - do
[error] - embed
[error] - extends
[error] - filter
[error] - flush
[error] - for
[error] - from
[error] - if
[error] - import
[error] - include
[error] - macro
[error] - set
[error] - spaceless
[error] - use
[error] - moun

Would be nice to extend this rule

Hi @urbantrout, I'm counting 14 custom Twig tags in the Craft documentation. I'm not sure if I will find the time to implement them all. Can you prioritize them, maybe? If I do the first few, maybe you can try one of them yourself?

Cheers for at least trying to take this on @twbartel ! Here is hoping for some kind of universal whitelist.
Just tested this, and sadly it broke on most of 100 templates in Craft.

Update to everyone interested: I'm very close to being able to handle custom Twig tags in an easy way. Waiting for https://github.com/trivago/melody/pull/154 to be merged into Melody master, then I can merge some functionality into this project. Stay tuned!

@twbartel That's great news! Super appreciative of your work!

PR prepared, but not ready to merge yet: https://github.com/trivago/prettier-plugin-twig-melody/pull/35
How does this sound?

Sounds very nice and pragmatic 🥳

Version 0.4.0 is out and should fix this issue. @sjelfull @chasegiunta thanks for your patience!

@sjelfull can you give me some feedback if it's working with Craft for you now?

Thanks, seems to be a huge improvement! I still have issues in most files. Will sort through what is syntax issues (like unclosed tags etc.) and then circle back.

Great work!
Got this error while testing:
Error
[error] templates/shop/products/_item.twig: Error: ERROR: Invalid token
[error]   2 |                         <select name="purchasableId" id="purchasableId" class="purchasableId">
[error]   3 |                             {%- for purchasable in product.getVariants() -%}
[error] > 4 |                                 <option {% if not purchasable.isAvailable %}disabled{% endif %}>
[error]     |                                         ^
[error]   5 |                                     {{ purchasable.description }}
[error]   6 |                                     {{
[error]   7 |                                         purchasable.salePrice|commerceCurrency(
[error]
[error] A tag must consist of attributes or expressions. Twig Tags are not allowed.
[error]     at TokenStream.error (/mytestproject/node_modules/melody-parser/lib/index.js:1359:22)
[error]     at Parser.error (/mytestproject/node_modules/melody-parser/lib/index.js:830:21)
[error]     at Parser.matchAttributes (/mytestproject/node_modules/melody-parser/lib/index.js:818:22)
[error]     at Parser.matchElement (/mytestproject/node_modules/melody-parser/lib/index.js:726:14)
[error]     at Parser.parse (/mytestproject/node_modules/melody-parser/lib/index.js:627:32)
[error]     at Object.parse (/mytestproject/node_modules/melody-extension-core/lib/index.js:1187:36)
[error]     at Parser.matchTag (/mytestproject/node_modules/melody-parser/lib/index.js:857:29)
[error]     at Parser.parse (/mytestproject/node_modules/melody-parser/lib/index.js:610:32)
[error]     at Parser.matchElement (/mytestproject/node_modules/melody-parser/lib/index.js:736:41)
[error]     at Parser.parse (/mytestproject/node_modules/melody-parser/lib/index.js:627:32)

Source file

                        <select name="purchasableId" id="purchasableId" class="purchasableId">
                            {%- for purchasable in product.getVariants() -%}
                                <option {% if not purchasable.isAvailable %}disabled{% endif %}>
                                    {{ purchasable.description }}
                                    {{
                                        purchasable.salePrice|commerceCurrency(
                                            cart.currency
                                        )
                                    }}
                                </option>
                            {%- endfor -%}
                        </select>

.prettierrc
{
    "tabWidth": 4,
    "plugins": ["./node_modules/prettier-plugin-twig-melody"],
    "twigMultiTags": [
        "nav,endnav",
        "switch,case,default,endswitch",
        "ifchildren,endifchildren",
        "cache,endcache"
    ]
}

@rbrv Gonna look into that. However, it seems to be a different issue, so could you open a new one, please?

Sure: #37


batch size

I was reading the paper and saw DSAC++ use a batch size of 1 but DSAC use 64. Why batch size 1 is necessary?

Hi,
the DSAC network was processing patches independently, i.e. a batch size of 64 means 64 image patches. The DSAC++ network is a FCN which processes an image as a whole, i.e. a batch size of 1 means 1 whole image consisting of 60x80 (correlated) image patches. Due to memory constraints we where not able so increase the batch size for DSAC++ significantly, for example to train with batch norm.
Kind regards,
Eric


Creating a relationship with a calculated table fails

I created a calculated table in my model, added the column coming from the DAX query that defines the calculated table.
Then I want to create a relationship with another table in my model, and get the following error during deployment:
"Relationship hex code uses an invalid column ID 16056" where actually the code generated looks correct.
I serialised my model, and the generated JSON file for the relationship is fine.
The server I want to deploy to is SSAS 2019.
Please help. Thanks in advance.

Thanks for reaching out. I suspect this is because of a change in the DAX expression on your table, causing one of the columns participating in the relationship to be "deleted" during deployment.
This can easily happen if you're not connected to AS while developing the model (i.e., you loaded the model metadata from a .bim file or a .json folder structure), as Tabular Editor has no way to parse the DAX expression to determine which CalculatedTableColumns should be added, so you have to manually add the CalculatedTableColumns and assign their SourceColumn property.
Could you please test the DAX expression of your calc table in a tool like SSMS or DAX Studio, and make sure it outputs exactly the same column names as those specified in the SourceColumn property of the columns defined on your calc table:

Alternatively, if you connect directly to AS (File > Open > From DB...), add the calc table to the model with a DAX expression, and without explicitly specifying the CalculatedTableColumns, then Tabular Editor should update the list of columns when you hit File > Save (CTRL+S).

I did load the model from a JSON folder indeed. The strange thing is, I created the query in DAX Studio before creating the calculated table to make sure the statement was valid. Anyway, you suggestion of working directly on the database seems to work. Maybe there was a typo in my column source after all. Thanks for the support!


cleanup: update files, fix typos

Changes

Fix typos in the latest article.
Fix EOL across files and set it to LF in the .gitattributes file.
Update license year to 2024.
Fix markdown syntax across posts.
Other minor changes.

Thanks!


Using an operand's iree.abi.tied attribute to MaterializeCopyOnWrite in a func::CallOp

What happened?
MaterializeCopyOnWrite ignores the tying of operand to the result and assumes the operand is not modified, passing the updated operand incorrectly downstream, when the original value is required.
In the following example, Triple.function gets the updated value of a previous tensor.empty, instead of getting a new tensor.empty.
module @example {
  func.func private @Double.function(tensor<?x?xi32>, tensor<?x?xi32>) -> (tensor<?x?xi32> {iree.abi.tied = 1 : index}) attributes {
    iree.abi.model = "coarse-fences",
    nosideeffects
  }

  func.func private @Triple.function(tensor<?x?xi32>, tensor<?x?xi32>) -> (tensor<?x?xi32> {iree.abi.tied = 1 : index}) attributes {
    iree.abi.model = "coarse-fences",
    nosideeffects
  }

  func.func @main(%arg0: tensor<?x?xi32>) -> tensor<?x?xi32> {

    %c0 = arith.constant 0: index
    %c1 = arith.constant 1: index
    %dim0 = tensor.dim %arg0, %c0: tensor<?x?xi32>
    %dim1 = tensor.dim %arg0, %c1: tensor<?x?xi32>
    %0 = arith.muli %arg0, %arg0 : tensor<?x?xi32>
    %init = tensor.empty(%dim0, %dim1) : tensor<?x?xi32>
    %p1 = call @Double.function(%0, %init) : (tensor<?x?xi32>, tensor<?x?xi32>) -> tensor<?x?xi32>
    %init2 = tensor.empty(%dim0, %dim1) : tensor<?x?xi32>
    %1 = call @Triple.function(%p1, %init2) : (tensor<?x?xi32>, tensor<?x?xi32>) -> tensor<?x?xi32>

    %2 = arith.muli %1, %1 : tensor<?x?xi32>

    return %2 : tensor<?x?xi32>
  }

}

Steps to reproduce your issue
$iree-compile  --iree-execution-model=async-external --iree-hal-target-backends=llvm-cpu samples/custom_module/async/test/example.mlir --compile-to=stream
This will produce a single stream allocation for both the tensor.empty().
    %10 = stream.resource.alloc uninitialized : !stream.resource<external>{%3} <--------------- allocation
    stream.timepoint.chain_external %9 => (%fence : !hal.fence)
    %fence_0 = hal.fence.create device(%device : !hal.device) flags("None") : !hal.fence
    %11 = stream.tensor.export %6 : tensor<?x?xi32>{%0, %1} in !stream.resource<external>{%3} -> !hal.buffer_view
    %12 = stream.tensor.export %10 : tensor<?x?xi32>{%0, %1} in !stream.resource<external>{%3} -> !hal.buffer_view <------------- export
    %13 = call @Double.function(%11, %12, %fence, %fence_0) : (!hal.buffer_view, !hal.buffer_view, !hal.fence, !hal.fence) -> !hal.buffer_view <--------------- first use
    %14 = hal.buffer_view.dim<%13 : !hal.buffer_view>[0] : index
    %15 = hal.buffer_view.dim<%13 : !hal.buffer_view>[1] : index
    hal.buffer_view.assert<%13 : !hal.buffer_view> message("tensor") shape([%14, %15]) type(%c268435488_i32) encoding(%c1_i32)
    %16 = stream.timepoint.import %fence_0 : (!hal.fence) => !stream.timepoint
    %fence_1 = hal.fence.create device(%device : !hal.device) flags("None") : !hal.fence
    stream.timepoint.chain_external %16 => (%fence_1 : !hal.fence)
    %fence_2 = hal.fence.create device(%device : !hal.device) flags("None") : !hal.fence
    %17 = call @Triple.function(%13, %12, %fence_1, %fence_2) : (!hal.buffer_view, !hal.buffer_view, !hal.fence, !hal.fence) -> !hal.buffer_view <------------------ second use

What component(s) does this issue relate to?
Compiler, Runtime

Returning a new allocation has been the assumption for this kind of custom work (hence why there's no support for this yet :), but it can definitely be improved. I think we may be able to hold on actually improving though if we can get you a workaround.
The external function can use iree_hal_device_queue_alloca to schedule an async allocation and that's effectively what the compiler would be doing if this was fixed. External functions in general have a lot of issues around memory management as without a tremendous amount of annotation we'll never be able to do the right thing for each scenario as there's an infinite space of "right" - for example we don't know if the external function is going to be using the memory on the host and needs it mapped into host memory or if the memory will live longer than a few seconds and shouldn't come from our high-frequency pools. If an external function returns 4 values we also don't know if those need 4 separate allocations or could be 4 slices into one, or even if those allocations are from the same device as the values passed in (which themselves may come from multiple devices). This is what streamable calls are meant to help with as the mechanism adds some limits such that we can assume that memory is transient and device local, etc.
So if you want to unblock I'd allocate inside the function as samples/custom_module/async/ does:
https://github.com/openxla/iree/blob/df7522b098f9be1252a114d76a80c5fba9b19d42/samples/custom_module/async/module.cc#L211-L235
That's known to work today and doing the allocation on the compiler side is mostly just an optimization (though sometimes/often a pessimization!) that also avoids some native code goo.
For this issue I think we'd need to figure out everything that may impact the behavior and ensure it's all modeled. Conceptually I think registering TiedOpInterface on func::CallOp would make materialize-copy-on-write happy but it gets real messy as there's no verification and things like outlining/inlining - each func.call would need the correct information, that would need to stay in sync across dialect conversion/signature rewriting, etc. I'm pretty sure it's something we would not be able to land but it may be fine for local hacking. A longer-term approach is to have a util.func/util.call that implements all our fancy interfaces and properly tracks/verifies but that's a larger bit of work (similar to #12797, which wasn't a quick fix).
It's never going to be good to treat func.func/func.call as anything more than generic calls where performance is a total coin-flip. I think we're probably ok with that for now until we have more running and we can show what the issues are. I'm leaning towards suggesting the workaround of doing what samples/custom_module/async/ does with its queue-ordered allocation and waiting to see what we want here (possibly an entirely new mechanism).

So if you want to unblock I'd allocate inside the function

Yes, this is what I meant by
"A (bad, but functional) workaround is for the external C(++) function to allocate a new buffer and return that instead of updating in place."
The reasons this is bad is as follows:
a) One needs to pass in the shapes of the output tensors. This requires allocating a buffer to store the shapes and send it across, when a output operand buffer would have all this information already.
b) Instead of (a) if one passes an output buffer to avoid allocating a buffer for shapes, then one has to pass in a dummy tensor with the correct output shape (using tensor.empty). This results in an additional allocation for tensor.empty.
But if one ignores the extra allocation, this would work.

MaterializeCopyOnWrite is also not ideal, because it will literally be copying undefined values to a new tensor. Is there an equivalent of bufferization.alloc_tensor for stream allocations? I am asking this because of the discord discussion :
Murali Vijayaraghavan : @Ben Vanik is there an equivalent of bufferization.alloc_tensor meant for stream resource allocation? (here)
Ben Vanik : maybe, but you're still asking ... (here)


How to distinguish between a legacy and provided PKEY

Given a PKEY, what is the best way to figure out whether PKEY is a legacy or a provided key?
Before commit https://github.com/openssl/openssl/commit/5e5bc836fbc5b1c0af428864f5286bbb225f7baf it was possible by comparing the PKEY type using EVP_PKEY_base_id(key) to EVP_PKEY_NONE. As far as I understand, this is no longer the case as EVP_PKEY_base_id also returns a valid type for provided keys.
Maybe the design goal is not to expose the internal implementation type so obtaining this information should not be possible.

The intention is for this to be an implementation detail and to work transparently with the public interfaces as much as possible (we do walk a fine line of what's reasonable, some interfaces are strictly legacy, and quite frankly, the set of such interfaces hasn't been clearly defined yet).

Is there a workaround for this issue at the moment? Because openssl still creates legacy keys in some places and I need to know how to export the key params, given just a PKEY.

I'm using this workaround at the moment to detect a provided key:
EVP_PKEY_gettable_params(key) != NULL

EVP_PKEY_gettable_params(key) != NULL

A provided key isn't required to implement the gettable_params function, although I think currently all of OpenSSL's own implementations do. Its possible that at some point we will implement a key that doesn't, or some third party provider will.
It doesn't seem unreasonable for us to implement an EVP_PKEY_provider() or similar to return the associated provider as we have done with EVP_CIPHER, EVP_MD etc. Although EVP_PKEY's can have more than once associated provider which might complicate things. @levitte?

We do have internal methods to distinguish them (see the comment above struct evp_pkey_st as well), which would be useful for this:
https://github.com/openssl/openssl/blob/b0d5c1cb0773588dca69875e122fac75252ccdf6/include/crypto/evp.h#L535-L538
While I was hoping that we could keep things transparent to a fault, I'm not opposed in letting applications know.

@levitte Thank you. I noticed the macros but they cannot be used unless the evp_pkey_st struct is known, which isn't the case unless the internal header files are pulled in. The requirement came up because of the EVP_PKEY_get_bn_param issue that I have reported here: https://github.com/openssl/openssl/issues/11935
Solving this problem would remove my requirement to know the key type.

Well yeah, we'd have to write a public function, but that would be quite easy given those internal macros.

@paulidale The issue isn't really solved (has this public function be added yet) or if it is, maybe you can provide some insight?

Overzealously on my part.  I've reopened it.

does evp_pkey_is_legacy do what is needed here?
Marking as inactive, to be closed at the end of 3.4 dev, barring further input

does evp_pkey_is_legacy do what is needed here?

That's an internal function, so no.

At least for some provided keys (those without legacy implementation) EVP_PKEY_KEYMGMT will be returned.

IMO there should be no need for this function anymore and given we will remove the legacy key support completely at some point it would be just adding a baggage to be removed.


Appmetadata is now read from OCI image itself.

This change require https://github.com/stagingrdkm/meta-dac-sdk/pull/1 to be merged.


[freeimage libraw] fix build issue on Linux

Freeimage depend on libraw and zlib, it can not find libraw-config.cmake via find_package since the case sensitive on Linux. similar issue with zlib, fix the case issue.
Freeimage and libraw have no feature that need to test locally.

/azp run


Layout and Series Synchronisation features available or not?

I am trying to build new features in OHIF viewer like the layout as currently, it's 3x3, I want to ask is there a feature to customize it like 4x4 or something like that?
Also, I am trying to build a Synchronisation feature in which different series under the same study can be synchronized ( like we have 3 series and I want to scroll the images in all 3 at the same time) so I want to ask are these features already implemented?
If yes, Are they in v2 of OHIF viewer (as i don't see) and if not what is the best way to start?

Regarding the Layout, Yes it is already implemented and we can extend the size of the grid to any size we want as OHIF viewers have this support and there is no support for series synchronization as much as I find so I am still stuck there.

Responded to the synchronization portion of your question here: https://github.com/cornerstonejs/cornerstoneTools/issues/1162


Simple "Thank you"

Hi, I have to back and check django, I can not tell how much "importd" help, thank you again!!!

d-( ʘ‿ʘ )_m


fix: reset script from package.json does not work #1656

fixes: #1656
Signed-off-by: ruzell22<EMAIL_ADDRESS>

@petermetz  , Upon reading further about yarn.lock, del-cli yarn.lock wasn’t needed and may cause problems. Letting yarn update the yarn.lock file is the better way in terms of updating dependencies.
(https://classic.yarnpkg.com/en/docs/yarn-lock/#toc-managed-by-yarn : # Managed by Yarn)
(https://stackoverflow.com/questions/60509429/is-it-a-good-idea-to-delete-yarn-lock-and-generate-it-again-by-running-yarn-inst)
(https://stackoverflow.com/questions/41126217/how-to-sync-yarn-lock-with-package-json)
Testing has also been done in terms of using “del-cli ‘**/node_modules’” and reinstalling + reconfiguring it.
yarn del-cli emptied node_modules (on the left side)

yarn install --update-checksum --force checks yarn.lock and updates it necessarily and also installs node_modules together
(https://classic.yarnpkg.com/en/docs/cli/install/)
(https://stackoverflow.com/questions/41864099/how-do-i-force-yarn-to-reinstall-a-package)
(https://www.codegrepper.com/code-examples/shell/yarn+reinstall+all+packages)

yarn configure configured the package and outputs all lerna success

Yarn reset is also reusable even after using yarn reset once unlike the other solutions I have tried.

@petermetz I have updated the commit message. Thank you!

@petermetz I have now fixed the commit body not exceeding 100 characters per line. Thank you.


Update Deps and add qt-webkit-kiosk

This PR covers the following

nerves_system_br to 0.13.3
toolchain v0.11.0
fixes elixir 1.5 warnings
adds vcs metadata
fixes issue with Nerves.Runtime.KV being unable to access the uboot env

I am having an issue with the application data partition being mounted. Early on across the console, there is an error about the filesystem being too small for a journal. I don't think that its being formatted correctly. Thats the only thing left from my testing.

I can help with the app partition error. Add this to the fwup.conf:
define-eval(APP_PART_LAST_BLOCK, "${APP_PART_OFFSET} + ${APP_PART_COUNT} - 1")

and then add this to the complete task next to the other memsets:
# Make sure that the image file is large enough to hold the entire app partition
raw_memset(${APP_PART_LAST_BLOCK}, 1, 0xff)

Super cool, though!

That seems to have buffered out the space properly, but, It is failing to mount the partition with the error mounting /dev/mmcblk0p4 on /root failed: No such device I've poked around /sys/class/block/mmcblk0p4 and the size attribute is being reported as 1048560 and the ro attribute is 0

The size attribute should be 1048576. It feels like there's a math error somewhere or something weird going on. If you pad it out a little more, I'm sure that it will work, but curious as to the 16 block size discrepancy.


Add the request body to the item payload

The API has a field for information about the request including the body of any PUT/POST requests. We should send this information from this notifier (after appropriate scrubbing).
    // Optional: request
    // Data about the request this event occurred in.
    "request": {
      // Can contain any arbitrary keys. Rollbar understands the following:

      // url: full URL where this event occurred
      "url": "https://rollbar.com/project/1",

      // method: the request method
      "method": "GET",

      // headers: object containing the request headers.
      "headers": {
        // Header names should be formatted like they are in HTTP.
        "Accept": "text/html",
        "Referer": "https://rollbar.com/"
      },

      // params: any routing parameters (i.e. for use with Rails Routes)
      "params": {
        "controller": "project",
        "action": "index"
      },

      // GET: query string params
      "GET": {},

      // query_string: the raw query string
      "query_string": "",

      // POST: POST params
      "POST": {},

      // body: the raw POST body
      "body": "",

      // user_ip: the user's IP address as a string.
      // Can also be the special value "$remote_ip", which will be replaced with the source IP of the API request.
      // Will be indexed, as long as it is a valid IPv4 address.
      "user_ip": "<IP_ADDRESS>"

    },

Merged


Implementing your own streaming server

Hi,
I have my own robotics project going on which streams data over UDP. I wanted to implement some kind of middleware that converts these streams to XVIZ streams. I am having trouble figuring out the best approach for doing this.
On the one end, we have the examples in XVIZ, but they all seem to load files or generate frames (scenarios) beforehand and serving them in a rather complex way with xviz-serve-data.js. Not really what I am looking for.
Looking at streetscap.gl, I guess this starter-kit section mentions what I would like to do, but the documentation is a bit limited. The client-side would as indicated be as easy as yarn start-streaming. The instructions on how to start a local XVIZ stream server just link back to the get-started docs which is not very helpful.
I really love the play ground example and is kind of what I want to do, but then I would like to do the JSON part in a server that builds and sends some metadata and then builds new frames and sends them over to the streaming client based on some internal events. Am I missing something here and is it already there?
Thanks again, love the work you guys are doing.

@gerardsimons Sorry that should have linked to the XVIZ repo.
Streetscape currently offers implementations of loaders from two sources, file loader from static URL, and stream loader from WebSocket. If you need a different type of connection this page might be helpful.

Thanks I did figure it out using a WebSocket server as you said. Still I think a very simple server would help out a lot of folks, especially those (like me) who are unfamiliar with NodeJS and WebSocket servers.

@gerardsimons The XVIZ repo offers the simple server in https://github.com/uber/xviz/tree/master/examples/server and we're planning to package it into a module when it's feature complete.

Indeed it does, but the example is quite complex and requires pre-loading the frames before serving. I think the easiest way to get started is actually a kind of streaming server that just sends some pose and other frames whenever it wants. I think the server in the examples is too complicated for many and might deter people from using it.

Indeed it does, but the example is quite complex and requires pre-loading the frames before serving. I think the easiest way to get started is actually a kind of streaming server that just sends some pose and other frames whenever it wants. I think the server in the examples is too complicated for many and might deter people from getting into it

I'm really agree with you. The server example is very complex for me because I'm not familiar with nodejs. Meanwhile , the server example is realized in node.js. But in most autonomous application ,the data source application are written in c++/python. So, I think maybe we should send our data via TCP/UDP, and the nodejs server receive the data and convert it to XVIZ format in realtime, and then send the XVIZ data to streetscape? It's very complex...  BTW, I'm very appreciate with the work Uber are doing.


Confluent Kafka Message Key Avro Serializer Support

When operating in "confluent" mode for Kafka, divolte only serializes the message value with Confluent's special 5 byte message prefix (AKA 1 byte "Magic Byte" + 4 byte schema id.) When using the Confluent Kafka consumer, the deserialization method expects the message key to have the same format as the message, and throws an error if it does not.
I would propose to add an additional option to the configuration that would allow the message key to also be serialized in the Confluent specific format.
This could be done in the "mappings" section of the divolte configuration file with an option called "confluent_key_id" to specify the message key schema. If that property is present, it could then be able to use the same serializerFactory method that is used for the message when creating the Kafka Producer.

That's… interesting.
During the original implementation for this the topic of encoding the keys came up. I must confess we didn't realise the Confluent platform requires the keys be encoded as well.
The easy bit in trying to solve this is the ID of the schema; that can be configured in a similar way. The hard bits are:

What is the schema?
What do we map into it?

So far we've been highly-opinionated on the topic of keys: it's the party id, and opaque. There's no configurability in that, and nor is any intended. The simplest possible answers to the questions would then be:

A fixed schema with a string for the party id.
Filling the record is hard-coded.

This would be a bit annoying for users, since they'd have to manually register this fixed schema in order to configure its id. This would harm the out-of-the-box experience and also violates the 'bring your own schema' philosophy.
Stepping back a bit, can you elaborate a bit more on how the keys are used in the Confluent platform in practice?

It appears that the key schema is most likely a string value for most use cases. However, the key should not be static and be configurable per Kafka Producer and Consumer as you can drive the message partition mapping off of the message key.
I don't think the intention for the key schema is for it to be a complex record type, rather just for it to be a configurable simple data type. See the below excerpt from https://docs.confluent.io/1.0/schema-registry/docs/serializer-formatter.html
`In the following example, we read the value of the messages in JSON.
bin/kafka-avro-console-consumer --topic t1
--zookeeper localhost:2181
You should see following in the console.
{"f1": "value1"}
In the following example, we send strings and Avro records in JSON as the key and the value of the message, respectively.
bin/kafka-avro-console-producer --broker-list localhost:9092 --topic t2
--property parse.key=true
--property key.schema='{"type":"string"}'
--property value.schema='{"type":"record","name":"myrecord","fields":[{"name":"f1","type":"string"}]}'
In the shell, type in the following.
"key1" \t {"f1": "value1"}`
In this example, they are specifying the key schema directly as a string data type. However, they also show in their documentation how you would register a "key" schema and a "value" schema in the Schema Registry. https://docs.confluent.io/current/schema-registry/docs/intro.html#quickstart
I first encountered this problem using the confluent-kafka python client. The problem I encountered was that the confluent-kafka AvroConsumer expects the key to also be registered with the schema registry. The relevant excerpt from their code:
message = super(AvroConsumer, self).poll(timeout)         if message is None:             return None         if not message.value() and not message.key():             return message         if not message.error():             if message.value() is not None:                 decoded_value = self._serializer.decode_message(message.value())                 message.set_value(decoded_value)             if message.key() is not None:                 decoded_key = self._serializer.decode_message(message.key())                 message.set_key(decoded_key)         return message
Where decode_message checks for the magic byte followed by the 4 byte schema id
You could argue that their AvroConsumer should be more tolerant and allow an arbitrary key that does not need to be registered. However, given that when using the Confluent Kafka Schema Registry the default example is to also register a corresponding key schema, I believe that the producer should have a way to implement this as well.

Relevant code: confluent-kafka-python/confluent_kafka/avro/init.py:98

Upstream solution is proposed here: https://github.com/confluentinc/confluent-kafka-python/issues/211
I don't know why there's no PR for it, as it doesn't seem very complicated. Solving this on the Python consumer side would be preferable to introducing the complexity of adding key schemas in Divolte. Message keys are for distribution and identification purposes. They're not data and not intended to be interpreted by application code.

I think my workaround of extracting the deserializer function from the AvroConsumer class and calling it directly is reasonable.
That gives you the most flexibility to deserialize the events.
Ref https://github.com/confluentinc/confluent-kafka-python/issues/428#issuecomment-444320103


WIP: Scripts for local file migrations. Closes #642.

This is a draft PR so anyone can comment on my README or queries now if they want.
Closes #642.
I think I covered what we can in the queries
I think it is working for local files.
I wrote a very simple test file in ./input/ to be able to do some testing.
I still need to update, test, and add the endpoint yaml config file.

@Jamie-SA Since you wrote this we have all deleted baseConversionFactor and standardConversionFactor and use conversionFactor for both. Even though we have a convergence of two predicates, we can include the transformations in the migration scripts. Could you please add this?

I've still got a couple more things to do on this PR, but have to switch gears right now and come back to it later.

It might be worth adding in the detect_removed error message that we will be providing sample triples to illustrate the model changes and how they will need to change their data.

I'm not sure what specifically you were referencing. Try to make suggestions for everything that changed?
That sounds like something that should be in the release notes.

Yeah, never mind that last comment.

Sorry, missed the conversion factor renaming. I've pushed another change to include that.

I think I am done now. Please review.

I made a couple more changes to address RY's last comment.


Moving the mouse cursor on the script editor causes constant redrawing (unlike in 3.x)

Godot version
4.0.dev (bb0122c93)
System information
Fedora 34, GeForce GTX 1080 (NVIDIA 470.57.02)
Issue description
Moving the mouse cursor on the script editor causes constant redrawing (unlike in 3.x). This results in increased CPU/GPU usage when using the script editor, which impacts power consumption and battery life negatively.
Look at the mouse cursor moving and the update spinner in the top-right corner:
https://user-images.githubusercontent.com/180032/131927412-138d6126-15f4-4745-a2a7-e1b8dfd65880.mp4
This does not occur in 3.4 beta4 (on the script editor itself at least – unnecessary redrawing still occurs when hovering the 2D editor tabs and PopupMenu items):
https://user-images.githubusercontent.com/180032/131927586-7093ee80-1b29-4123-b6b9-579ca7e62099.mp4
Steps to reproduce

Enable Show Update Spinner in the Editor Settings.
Create a script.
Move the mouse slowly. Notice how the spinner in the top-right corner will spin continuously when doing so, even if you don't click. In 3.x, the spinner will only move slowly (twice a second) because of the caret blinking.

Minimal reproduction project
N/A

This seems to be getting caused by a constant call to set_symbol_lookup_word_as_valid when the mouse is moving.
Going to pick this up and see if I can work out what the cause is.


Update URLs to chef.io

lgtm :+1:

LGTM, but why was I assigned to this?

:+1:

@sethvargo its sort of a beta of trying to get maintainers to look at PRs

(you can safely ignore it for now)


Failed to run npm start

the npm-debug.log is below:
0 info it worked if it ends with ok
1 verbose cli [ '/usr/local/bin/node', '/usr/local/bin/npm', 'start' ]
2 info using<EMAIL_ADDRESS>3 info using<EMAIL_ADDRESS>4 verbose run-script [ 'prestart', 'start', 'poststart' ]
5 info prestart<EMAIL_ADDRESS>6 info start<EMAIL_ADDRESS>7 verbose unsafe-perm in lifecycle true
8 info<EMAIL_ADDRESS>Failed to exec start script
9 error<EMAIL_ADDRESS>start: coffee index.coffee
9 error Exit status 1
10 error Failed at the<EMAIL_ADDRESS>start script.
10 error This is most likely a problem with the evernote-markdown package,
10 error not with npm itself.
10 error Tell the author that this fails on your system:
10 error     coffee index.coffee
10 error You can get their info via:
10 error     npm owner ls evernote-markdown
10 error There is likely additional logging output above.
11 error System Linux 3.13.0-24-generic
12 error command "/usr/local/bin/node" "/usr/local/bin/npm" "start"
13 error cwd /home/acman/github/evernote-markdown
14 error node -v v0.10.33
15 error npm -v 1.4.28
16 error code ELIFECYCLE
17 verbose exit [ 1, true ]

@acmanzw try the latest code on master


powershell example is incorrect

the powershell command is looking for "Company Administrator" which doesn't exist.  It should be "Global Administrator"
Get-AzureADDirectoryRole | where { $_.DisplayName -eq "Company Administrator" } | Get-AzureADDirectoryRoleMember | Ft DisplayName

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

ID: 91a37f7f-cdbf-b609-978c-fbe674d9a0e7
Version Independent ID: 512a5a59-c466-20f2-7c4d-37303700d191
Content: Protect your Microsoft 365 global administrator accounts - Microsoft 365 Enterprise
Content Source: microsoft-365/enterprise/protect-your-global-administrator-accounts.md
Service: o365-administration
GitHub Login: @JoeDavies-MSFT
Microsoft Alias: josephd

@brkdncr Thank you for your feedback. We have made changes to the document via PR#https://github.com/MicrosoftDocs/microsoft-365-docs/pull/4157
Thanks
Sri

@msbemba Thank you very much for the contribution and updating the documentation with PR. @brkdncr Hope this update is helpful for you. Thanks for taking out some time to open the issue. Appreciate and encourage you to do the same in future also.


refactor: change to short-hand

For readability
I don't change "if syntax" of "return with handler syntax" and "assign syntax".
The author should do the following, if applicable

[ ] Add tests
[x] Run tests
[x] bun run format:fix && bun run lint:fix to format the code

I check config of eslint again.


Duplicate check

this checks current submissions and live events and alerts the user if there is a possible duplicate.

You can test this with a Adams event on August 15th at 12:00 PM https://townhallsubmission-pr-68.herokuapp.com/


Add article about Alpha Finance hack

Done

/qualitycheck

The attacker's wallet received 10,925 ETH worth roughly $20 million.
Iron Bank received 1,000 ETH from the stolen funds.
Alpha Homora received 1,000 ETH from the stolen funds.
Tornado.cash received 320 ETH from the stolen funds.
«They deposited some funds to Aave, 1,000 ETH to Iron Bank and Alpha Homora, and sent 320 ETH to Tornado.cash. That leaves just under 10,925 ETH in their wallet, worth roughly $20 million. Their funds can be viewed on Etherscan. They did it all for a transaction fee of 0.67 ETH, around $1,274.»
https://cryptobriefing.com/alpha-finance-suffers-37-5-million-loss-major-attack/
The attacker borrowed 1,000e^(18) sUSD from HomoraBankv2, utilizing UNI-WETH LP as collateral.
"In the first stage of the attack, the attacker borrowed 1,000e18 sUSD from HomoraBankv2"
https://www.quadrigainitiative.com/casestudy/alphahomorahack.php
The attacker borrowed 1,000e^(18) sUSD from HomoraBankv2, utilizing UNI-WETH LP as collateral.
The attacker exploited a rounding error in the protocol during repayment, resulting in a debt of<PHONE_NUMBER>2197 and a total borrow share of 1.
The attacker took advantage of a rounding error in the protocol during repayment.
«In the first stage of the attack, the attacker borrowed 1,000e18 sUSD from HomoraBankv2 using UNI-WETH LP (previously received from Uniswap pool in this transaction) as collateral.
When the debt was paid back in a later transaction, the attacker owed 1000.000098548938710984 sUSD (due to interest) but only paid 1000.000098548938710983 sUSD, exploiting a rounding error in the protocol. After this occurs, the attacker called resolveReserve on the sUSD bank to create a debt of<PHONE_NUMBER>2197 and leaving the total borrow share at 1.»
https://www.halborn.com/blog/post/explained-the-alpha-homora-defi-hack-feb-2021
The USDC, USDT, and DAI were subsequently deposited into Aave to acquire aTokens, which were then added to Curve's a3Crv pool.
«This hoard of cySUSD enabled the attacker to borrow the following (as shown above):
13.2k WETH
3.6M USDC
5.6M USDT
4.2M DAI
Of these the USDC, USDT, and DAI were all deposited to Aave as shown above to get aTokens.  These tokens were then deposited to Curve’s a3Crv pool, which are added to Curve’s liquidity gauge.»
https://www.halborn.com/blog/post/explained-the-alpha-homora-defi-hack-feb-2021
The team collaborated with authorities and cybersecurity experts to trace the stolen funds and prevent the attacker from profiting.
«Dear Alpha community, we've been notified of an exploit on Alpha Homora V2. We're now working with @AndreCronjeTech and @CreamdotFinance  together on this.
The loophole has been patched.»
https://twitter.com/stellaxyz_/status/1360535699368251394?s=20
"We are investigating with the relevant parties and will investigate with the authorities to trace the attacker." "No user funds were lost, and Alpha and CREAM teams are working on how to heal the debt between the protocols. The loophole that made the exploit possible has been closed, and the project is going through peer review and another security audit ––Alpha Homora V2 had been audited by Quantstamp and Peckshield."
https://www.quadrigainitiative.com/casestudy/alphahomorahack.php

Alpha Finance was hacked on February 13, 2021, exploiting a vulnerability in the Alpha Homora v2 contract. white_check_mark Multiple sources confirm that Alpha Finance was hacked on February 13, 2021, exploiting a vulnerability in the Alpha Homora v2 contract. The attacker was able to extract $37.5 million from the project.

The attacker successfully extracted $37.5 million from the project. white_check_mark Multiple sources confirm that Alpha Homora was hacked and the attacker successfully extracted $37.5 million from the project using a flash loan-based price manipulation tactic.

The identity of the attackers involved in the Alpha Finance DeFi hack remains unknown. white_check_mark None of the search results provide any information about the identity of the attackers involved in the Alpha Finance DeFi hack. Therefore, the claim is true.

Information using in this incident was not publicly available and was not accessible through the user interface, suggesting that the attacker may have possessed insider knowledge to carry out the attack. white_check_mark The search results show that Alpha Finance was hacked in February 2021, with the attacker exploiting a vulnerability in the Alpha Homora v2 contract to extract $37.5 million from the project. The information used in the attack was not publicly available and not accessible through the user interface, indicating that the attacker may have had insider knowledge to carry out the attack. This supports the claim that the attacker may have possessed insider knowledge.

The Alpha Finance DeFi hack resulted in financial losses of $37.5 million. white_check_mark Multiple sources confirm that Alpha Finance was hacked in February 2021 and $37.5 million was stolen from the project.

The stolen funds were distributed among various destinations, including Aave, Iron Bank, Alpha Homora, Tornado.cash, and the attacker's wallet. white_check_mark The search results confirm that Alpha Homora and Cream Finance were exploited in a flash loan attack, resulting in the theft of $37.5 million. The attack was carried out using Alpha Homora through the borrowing of sUSD from IronBank. Therefore, the claim that the stolen funds were distributed among various destinations, including Aave, Iron Bank, Alpha Homora, Tornado.cash, and the attacker's wallet is true.

The attacker's wallet received 10,925 ETH worth roughly $20 million. x There is no evidence in the search results to support this claim. The largest amount stolen from a DeFi project mentioned in the search results is $37.5 million, and it is not clear whether the entire amount was transferred to the attacker's wallet or distributed across multiple wallets.

https://cryptobriefing.com/alpha-finance-suffers-37-5-million-loss-major-attack/

Iron Bank received 1,000 ETH from the stolen funds. x There is no evidence in the search results to support or refute the claim that Iron Bank received 1,000 ETH from the stolen funds. The search results only mention that Cream Finance's Iron Bank protocol was involved in the exploit that led to the theft of $37.5 million from Alpha Finance, but there is no information on how much of the stolen funds went to Iron Bank or any other specific party.

https://cryptobriefing.com/alpha-finance-suffers-37-5-million-loss-major-attack/

Alpha Homora received 1,000 ETH from the stolen funds. x There is no evidence in the search results that Alpha Homora received 1,000 ETH from the stolen funds. The search results only mention that Alpha Homora was hacked and lost $37.5 million in February 2021.

https://cryptobriefing.com/alpha-finance-suffers-37-5-million-loss-major-attack/

Tornado.cash received 320 ETH from the stolen funds. x There is no mention of Tornado.cash receiving 320 ETH in the search results. The articles only mention Cream Finance and Alpha Finance being exploited in DeFi attacks, resulting in millions of dollars being stolen. One article mentions that 100 ETH was sent to Tornado Cash from the stolen funds, but this is not enough evidence to verify the claim that Tornado.cash received 320 ETH.

https://cryptobriefing.com/alpha-finance-suffers-37-5-million-loss-major-attack/

The specific amount of stolen funds received by Aave is not provided. white_check_mark None of the search results mention Aave being involved in any hack or exploit, so there is no evidence to suggest that any funds were stolen from Aave.

Alpha Homora V2 was hacked on February 13, 2021. white_check_mark Multiple sources confirm that Alpha Homora V2 was hacked on February 13, 2021, resulting in a loss of $37.5 million.

The attacker borrowed 1,000e^(18) sUSD from HomoraBankv2, utilizing UNI-WETH LP as collateral. x There is no evidence in the search results to support or refute this claim. The search results only mention that Alpha Homora was exploited by an attacker who drained over $37 million, but do not provide details on the specific methods used by the attacker.

https://www.quadrigainitiative.com/casestudy/alphahomorahack.php
https://www.halborn.com/blog/post/explained-the-alpha-homora-defi-hack-feb-2021

The attacker exploited a rounding error in the protocol during repayment, resulting in a debt of<PHONE_NUMBER>2197 and a total borrow share of 1. x There is no evidence in the search results to support or refute this claim. The search results only provide information about exploits and attacks on DeFi protocols, but do not mention a specific rounding error resulting in the stated debt and borrow share.

https://www.halborn.com/blog/post/explained-the-alpha-homora-defi-hack-feb-2021

The attacker amassed a substantial hoard of cySUSD, which is a collateralized version of sUSD, by engaging in multiple transactions involving borrowing and lending sUSD between Alpha Homora and Iron Bank. white_check_mark Multiple sources confirm that Alpha Homora was exploited and drained of over $37 million by an attacker who leveraged Cream's Iron Bank protocol-to-protocol lending. The attacker took advantage of a vulnerability in Alpha Homora's v2 contract and used a multi-step process involving a series of flash loans to carry out the attack. While the specific details of the attacker's transactions involving borrowing and lending sUSD are not mentioned in the search results, it is reasonable to conclude that the attacker amassed a substantial hoard of cySUSD as claimed.

The attacker obtained loans of various assets, including 13.2k WETH, 3.6M USDC, 5.6M USDT, and 4.2M DAI. white_check_mark Multiple sources confirm that Alpha Finance was exploited in a flash loan attack, resulting in the attacker obtaining over $37 million. The specific assets obtained by the attacker are not mentioned in the search results, but it is reasonable to assume that they include the assets listed in the claim.

The USDC, USDT, and DAI were subsequently deposited into Aave to acquire aTokens, which were then added to Curve's a3Crv pool. x There is no evidence in the search results to support or refute this claim. The search results only provide information about DeFi hacks and attacks on Cream Finance and Alpha Finance, but do not mention anything about Aave or Curve's a3Crv pool.

https://www.halborn.com/blog/post/explained-the-alpha-homora-defi-hack-feb-2021

The extracted Ether was distributed among different destinations, including Iron Bank, Alpha Homora, Tornado.cash, and the attacker's wallet. white_check_mark The claim is true. According to the search results, Alpha Homora was exploited in a hack that resulted in the attacker extracting $37.5 million. Cream's Iron Bank protocol-to-protocol lending was leveraged in the attack. The attacker took over $37.5 million through a multi-step process involving a series of flash loans. Additionally, the search results do not mention Tornado.cash, but they do not disprove the claim either.

In response to the hack, the Alpha Finance team rectified the rounding error in the borrow code and restricted the usage of custom spells. white_check_mark Although the search results do not provide explicit evidence that the Alpha Finance team rectified the rounding error in the borrow code and restricted the usage of custom spells, it can be inferred that they took measures to address the vulnerabilities exploited in the hack. Several articles mention that the Alpha Finance team resolved the issues that led to the attack and limited the buying and repayment to four tokens (ETH, DAI, USDC, and USDT). Therefore, the claim is true.

The team collaborated with authorities and cybersecurity experts to trace the stolen funds and prevent the attacker from profiting. x There is no evidence in the search results to support this claim. The articles only report on the attack and the amount of money stolen. There is no mention of any collaboration with authorities or cybersecurity experts to trace the stolen funds or prevent the attacker from profiting.

https://twitter.com/stellaxyz_/status/1360535699368251394?s=20
https://www.quadrigainitiative.com/casestudy/alphahomorahack.php

The Alpha Finance DeFi hack revealed security failure causes. white_check_mark Multiple search results confirm that Alpha Finance was hacked in February 2021, resulting in a loss of $37.5 million. The attack was carried out by exploiting a vulnerability in the Alpha Homora v2 contract. Therefore, the claim is true.

The Alpha Homora v2 contract allowed the usage of custom spells without strict checks. white_check_mark The claim is true. According to multiple sources, the Alpha Homora v2 contract was exploited in February 2021, resulting in the theft of $37.5 million. The exploit was made possible by a vulnerability in the contract that allowed the attacker to use custom spells without proper checks.

The attacker took advantage of a rounding error in the protocol during repayment. x There is no evidence in the search results to suggest that the attacker took advantage of a rounding error in the protocol during repayment. The attacks on DeFi protocols Cream Finance and Alpha Finance were due to vulnerabilities in their contracts, which were exploited by the attackers. The specific vulnerabilities are not related to rounding errors in the protocol during repayment.

https://www.halborn.com/blog/post/explained-the-alpha-homora-defi-hack-feb-2021

The lack of strict validation checks and access controls for custom spells and critical functions allowed unauthorized manipulation of the protocol. white_check_mark The claim is true. The search results show that Alpha Homora was hacked due to a vulnerability in the protocol, allowing the attacker to extract $37.5 million. The attack was made possible by exploiting a vulnerability in the Alpha Homora v2 contract. Therefore, the lack of strict validation checks and access controls for custom spells and critical functions allowed unauthorized manipulation of the protocol.

Alpha Finance was hacked on February 13, 2021, exploiting a vulnerability in the Alpha Homora v2 contract. white_check_mark Multiple sources confirm that Alpha Finance was hacked on February 13, 2021, exploiting a vulnerability in the Alpha Homora v2 contract. The attacker was able to extract $37.5 million from the project.

The attacker successfully extracted $37.5 million from the project. white_check_mark Multiple sources confirm that Alpha Homora was hacked and the attacker successfully extracted $37.5 million from the project using a flash loan-based price manipulation tactic.

The identity of the attackers involved in the Alpha Finance DeFi hack remains unknown. white_check_mark None of the search results provide any information about the identity of the attackers involved in the Alpha Finance DeFi hack. Therefore, the claim is true.

Information using in this incident was not publicly available and was not accessible through the user interface, suggesting that the attacker may have possessed insider knowledge to carry out the attack. white_check_mark The search results show that Alpha Finance was hacked in February 2021, with the attacker exploiting a vulnerability in the Alpha Homora v2 contract to extract $37.5 million from the project. The information used in the attack was not publicly available and not accessible through the user interface, indicating that the attacker may have had insider knowledge to carry out the attack. This supports the claim that the attacker may have possessed insider knowledge.

The Alpha Finance DeFi hack resulted in financial losses of $37.5 million. white_check_mark Multiple sources confirm that Alpha Finance was hacked in February 2021 and $37.5 million was stolen from the project.

The stolen funds were distributed among various destinations, including Aave, Iron Bank, Alpha Homora, Tornado.cash, and the attacker's wallet. white_check_mark The search results confirm that Alpha Homora and Cream Finance were exploited in a flash loan attack, resulting in the theft of $37.5 million. The attack was carried out using Alpha Homora through the borrowing of sUSD from IronBank. Therefore, the claim that the stolen funds were distributed among various destinations, including Aave, Iron Bank, Alpha Homora, Tornado.cash, and the attacker's wallet is true.

The attacker's wallet received 10,925 ETH worth roughly $20 million. x There is no evidence in the search results to support this claim. The largest amount stolen from a DeFi project mentioned in the search results is $37.5 million, and it is not clear whether the entire amount was transferred to the attacker's wallet or distributed across multiple wallets.

https://cryptobriefing.com/alpha-finance-suffers-37-5-million-loss-major-attack/

Iron Bank received 1,000 ETH from the stolen funds. x There is no evidence in the search results to support or refute the claim that Iron Bank received 1,000 ETH from the stolen funds. The search results only mention that Cream Finance's Iron Bank protocol was involved in the exploit that led to the theft of $37.5 million from Alpha Finance, but there is no information on how much of the stolen funds went to Iron Bank or any other specific party.

https://cryptobriefing.com/alpha-finance-suffers-37-5-million-loss-major-attack/

Alpha Homora received 1,000 ETH from the stolen funds. x There is no evidence in the search results that Alpha Homora received 1,000 ETH from the stolen funds. The search results only mention that Alpha Homora was hacked and lost $37.5 million in February 2021.

https://cryptobriefing.com/alpha-finance-suffers-37-5-million-loss-major-attack/

Tornado.cash received 320 ETH from the stolen funds. x There is no mention of Tornado.cash receiving 320 ETH in the search results. The articles only mention Cream Finance and Alpha Finance being exploited in DeFi attacks, resulting in millions of dollars being stolen. One article mentions that 100 ETH was sent to Tornado Cash from the stolen funds, but this is not enough evidence to verify the claim that Tornado.cash received 320 ETH.

https://cryptobriefing.com/alpha-finance-suffers-37-5-million-loss-major-attack/

The specific amount of stolen funds received by Aave is not provided. white_check_mark None of the search results mention Aave being involved in any hack or exploit, so there is no evidence to suggest that any funds were stolen from Aave.

Alpha Homora V2 was hacked on February 13, 2021. white_check_mark Multiple sources confirm that Alpha Homora V2 was hacked on February 13, 2021, resulting in a loss of $37.5 million.

The attacker borrowed 1,000e^(18) sUSD from HomoraBankv2, utilizing UNI-WETH LP as collateral. x There is no evidence in the search results to support or refute this claim. The search results only mention that Alpha Homora was exploited by an attacker who drained over $37 million, but do not provide details on the specific methods used by the attacker.

https://www.quadrigainitiative.com/casestudy/alphahomorahack.php https://www.halborn.com/blog/post/explained-the-alpha-homora-defi-hack-feb-2021

The attacker exploited a rounding error in the protocol during repayment, resulting in a debt of<PHONE_NUMBER>2197 and a total borrow share of 1. x There is no evidence in the search results to support or refute this claim. The search results only provide information about exploits and attacks on DeFi protocols, but do not mention a specific rounding error resulting in the stated debt and borrow share.

https://www.halborn.com/blog/post/explained-the-alpha-homora-defi-hack-feb-2021

The attacker amassed a substantial hoard of cySUSD, which is a collateralized version of sUSD, by engaging in multiple transactions involving borrowing and lending sUSD between Alpha Homora and Iron Bank. white_check_mark Multiple sources confirm that Alpha Homora was exploited and drained of over $37 million by an attacker who leveraged Cream's Iron Bank protocol-to-protocol lending. The attacker took advantage of a vulnerability in Alpha Homora's v2 contract and used a multi-step process involving a series of flash loans to carry out the attack. While the specific details of the attacker's transactions involving borrowing and lending sUSD are not mentioned in the search results, it is reasonable to conclude that the attacker amassed a substantial hoard of cySUSD as claimed.

The attacker obtained loans of various assets, including 13.2k WETH, 3.6M USDC, 5.6M USDT, and 4.2M DAI. white_check_mark Multiple sources confirm that Alpha Finance was exploited in a flash loan attack, resulting in the attacker obtaining over $37 million. The specific assets obtained by the attacker are not mentioned in the search results, but it is reasonable to assume that they include the assets listed in the claim.

The USDC, USDT, and DAI were subsequently deposited into Aave to acquire aTokens, which were then added to Curve's a3Crv pool. x There is no evidence in the search results to support or refute this claim. The search results only provide information about DeFi hacks and attacks on Cream Finance and Alpha Finance, but do not mention anything about Aave or Curve's a3Crv pool.

https://www.halborn.com/blog/post/explained-the-alpha-homora-defi-hack-feb-2021

The extracted Ether was distributed among different destinations, including Iron Bank, Alpha Homora, Tornado.cash, and the attacker's wallet. white_check_mark The claim is true. According to the search results, Alpha Homora was exploited in a hack that resulted in the attacker extracting $37.5 million. Cream's Iron Bank protocol-to-protocol lending was leveraged in the attack. The attacker took over $37.5 million through a multi-step process involving a series of flash loans. Additionally, the search results do not mention Tornado.cash, but they do not disprove the claim either.

In response to the hack, the Alpha Finance team rectified the rounding error in the borrow code and restricted the usage of custom spells. white_check_mark Although the search results do not provide explicit evidence that the Alpha Finance team rectified the rounding error in the borrow code and restricted the usage of custom spells, it can be inferred that they took measures to address the vulnerabilities exploited in the hack. Several articles mention that the Alpha Finance team resolved the issues that led to the attack and limited the buying and repayment to four tokens (ETH, DAI, USDC, and USDT). Therefore, the claim is true.

The team collaborated with authorities and cybersecurity experts to trace the stolen funds and prevent the attacker from profiting. x There is no evidence in the search results to support this claim. The articles only report on the attack and the amount of money stolen. There is no mention of any collaboration with authorities or cybersecurity experts to trace the stolen funds or prevent the attacker from profiting.

https://twitter.com/stellaxyz_/status/1360535699368251394?s=20 https://www.quadrigainitiative.com/casestudy/alphahomorahack.php

The Alpha Finance DeFi hack revealed security failure causes. white_check_mark Multiple search results confirm that Alpha Finance was hacked in February 2021, resulting in a loss of $37.5 million. The attack was carried out by exploiting a vulnerability in the Alpha Homora v2 contract. Therefore, the claim is true.

The Alpha Homora v2 contract allowed the usage of custom spells without strict checks. white_check_mark The claim is true. According to multiple sources, the Alpha Homora v2 contract was exploited in February 2021, resulting in the theft of $37.5 million. The exploit was made possible by a vulnerability in the contract that allowed the attacker to use custom spells without proper checks.

The attacker took advantage of a rounding error in the protocol during repayment. x There is no evidence in the search results to suggest that the attacker took advantage of a rounding error in the protocol during repayment. The attacks on DeFi protocols Cream Finance and Alpha Finance were due to vulnerabilities in their contracts, which were exploited by the attackers. The specific vulnerabilities are not related to rounding errors in the protocol during repayment.

https://www.halborn.com/blog/post/explained-the-alpha-homora-defi-hack-feb-2021

The lack of strict validation checks and access controls for custom spells and critical functions allowed unauthorized manipulation of the protocol. white_check_mark The claim is true. The search results show that Alpha Homora was hacked due to a vulnerability in the protocol, allowing the attacker to extract $37.5 million. The attack was made possible by exploiting a vulnerability in the Alpha Homora v2 contract. Therefore, the lack of strict validation checks and access controls for custom spells and critical functions allowed unauthorized manipulation of the protocol.

Please add the links to the article you created, not as a response to the review comments we make.

status?
If I understood your comment about adding links correctly, I did it above by adding all the links to the bot-marked paragraphs. If possible, please review.

status?
If I understood your comment about adding links correctly, I did it above by adding all the links to the bot-marked paragraphs. If possible, please review.

add relevant links to appropriate sections in the article

Status?

/payout

@danisztls https://github.com/1712n/dn-institute/actions/runs/5662119579/job/15341431180#step:5:91

/payout


[Event Hubs Client] Collection of Minor Enhancements and Fixes

Summary
These changes focus on addressing several small fixes and enhancements that were being informally tracked.  Included are:

Disallowing events to be added to the EventDataBatch when that batch is in use by an active Send operation.

Addition of verbiage in the EventProcesorClient constructor documentation to clarify that the container used by Azure Blobs storage must exist (the
processor does not assume responsibility for creation)

Extending ToString for the EventHubsException to include the failure reason as part of the text.

Allowing additional formats for the Endpoint token of the connection string when parsed; this addresses several common mistakes made when forming the
string manually rather than doing copy/paste from the portal.

Trimming some extra blank lines from the AmqpMessageConverter.

Last Upstream Rebase
Friday, March 20, 4:10pm (EST)

//cc: @christothes

The change flagged as an API change was simply to adjust the value returned by ToString so that it includes the failure reason as well as the type.
The default was:
Azure.Messaging.EventHubs.EventHubsException
The new format is using  "EventHubsException (FAILURE REASON)", for example:
EventHubsException(QuotaExceeded)
//cc: @KrzysztofCwalina


feat(system): support for disabling public memos

This PR opens the possibility to disable public memos as requested in https://github.com/usememos/memos/issues/919
Changes:

Tooltip and disabled styling on the MemoEditor visibility selector.
System setting for disabling public memos

After turning on this option, if Everyone can see was set before, the displayed information is a bit confusing

And, should we take this setting into account at the backend api. When it is enabled, prohibits the creation of public memos

And, should we take this setting into account at the backend api. When it is enabled, prohibits the creation of public memos

You're right 👍🏻 I'll fix that

After turning on this option, if Everyone can see was set before, the displayed information is a bit confusing

Yeah, looks like I went a bit too fast and forgot to set the value back to "only visible to you" :)

@hyoban do you want me to rebase to one commit?

It's fine to have multiple commits, we'll handle that before merging


[Feature] Export Notes as PDF

Problem
Currently you can only export notes as .md files without any of the markdown formatting.
Solution
Add the option to export notes as .pdf files with the formatting intact.

The exported .md files should contain all the markdown formatting you've written.

@taniarascia I've created a PR for the same. Could you please review it ?

Can I have a crack at it?


Slight misalignment of moveMouse on Windows

Version
2.1.8
Short overview
Slight misalignment of moveMouse on Windows
Steps to reproduce error
The following code periodically gives the coordinates obtained by getMousePos to moveMouse, so the mouse cursor is expected to be stationary, but in my Windows environment the cursor gradually moves up until the y-coordinate becomes a multiple of 135.
const { mouse } = require('@nut-tree/nut-js')

function loop() {
  mouse.getPosition().then(
    (mp) => {
        mouse.setPosition(mp)
        console.log(mp)
    })
  window.requestAnimationFrame(loop)
}

loop()

Detailed error description
I have not been able to track down the details, but I suspect the problem is in the following code
https://github.com/nut-tree/libnut/blob/9f366a9f551bb653a3e43106804edf83cfeb696c/src/win32/mouse.c#L35-L38
The corresponding code in robotjs appears to differ in the rounding process and the correction according to the sign of the coordinates.
With this as a reference, if CalculateAbsoluteCoordinates is changed as follows, the problem in the test code above is no longer apparent.
MMPoint CalculateAbsoluteCoordinates(MMPoint point) {
	MMSize displaySize = getMainDisplaySize();
	return MMPointMake((ABSOLUTE_COORD_CONST * point.x / displaySize.width) + (point.x < 0 ? -1 : 1) ,  (ABSOLUTE_COORD_CONST * point.y / displaySize.height) + (point.y < 0 ? -1 : 1));
}

This change seemed to cause a new left-right misalignment, but for some reason it did not, and I still do not know why...

Fixed with release https://github.com/nut-tree/libnut-core/tree/v2.5.1


Update wastewater category to be in Spanish

Purpose

Update category title to be in Spanish
closes #1649

QA
QA link here
QA spec

[ ] Does the wastewater category title text in the side panel show up in Spanish?

looks great @vim-usds ty!