Deck screen broken

The deck screen has completely broken. I've reinstalled Master Duel, and the mod, and recreated everything the screen remains  like this

Going into edit accessories still shows the deck is under there, as I tested it by importing a .ydk into the deck folder.
Any help is appreciated

I’m dealing with the same issue. Any help would be awesome. I’m assuming it has to do with the recent update.

Same issue here. Boosting this so we can hopefully get a fix soon

Reaching out to the developers: Is there smthng we can do withe existing .json files or do we simply wait for a v5.1 possibly?

Don't know anything atm. Seems like the update also broke PVP maybe?

I'm having the same problem, yesterday I installed it and everything was normal, it just took a small Master Duel update to break it completely, I can't edit decks or create new ones

You can revert game back to an older version with DepotDownloader. Than you go to your original steam game folder, delete it, move the older version to your steam folder and click play.

Has the dev said anything about fixing the current version?

thank god, I thought I ruin my file while updating mysellf. anyhow does anyone know how to run the ygomaster.exe and input the command like in the guide?
and also the new solo npcdeck&duel doesn't appear in fiddler. only solo.info that appear for me?
Run YgoMaster.exe --merge-deckids to update SoloNpcDeckIds.json based on the SoloNpcDeckIds files

Same problem here last update broke the game

Any word on when this could be fixed?

Any word on when this could be fixed?

Guess it'll take some time to bypass whatever Konami changed/fix..

You can revert game back to an older version with DepotDownloader. Than you go to your original steam game folder, delete it, move the older version to your steam folder and click play.

I used manifest<PHONE_NUMBER>882686555 is that the correct one?

You can revert game back to an older version with DepotDownloader. Than you go to your original steam game folder, delete it, move the older version to your steam folder and click play.

I used manifest<PHONE_NUMBER>882686555 is that the correct one? got it thank you brotha!

How do I do this? been trying to figure it out but i get an error everytime

You can revert game back to an older version with DepotDownloader. Than you go to your original steam game folder, delete it, move the older version to your steam folder and click play.

I used manifest<PHONE_NUMBER>882686555 is that the correct one? got it thank you brotha!

How do I do this? been trying to figure it out but i get an error everytime

https://www.youtube.com/watch?v=Rjg722smfNA
the manifest thats 3 months ago

You can revert game back to an older version with DepotDownloader. Than you go to your original steam game folder, delete it, move the older version to your steam folder and click play.

I used manifest<PHONE_NUMBER>882686555 is that the correct one? got it thank you brotha!

How do I do this? been trying to figure it out but i get an error everytime

https://www.youtube.com/watch?v=Rjg722smfNA the manifest thats 3 months ago

I did so, but when I booted it up, it asked me to update again

This is what I did:
1 - Uninstall game on steam
2 - download game again
3 - do NOT open game
4 - press Win + R and paste this : steam://nav/console and press enter
5 - paste this on the steam console and press enter : download_depot 1449850 1449853<PHONE_NUMBER>882686555
6 - wait for it to download
7 - go here : Steam\steamapps\content\app_1449850\depot_1449853. Copy the contents from here and paste on the Yugioh game folder on steam and let it overwrite
8 - open the game and let it download everything
9 - when it finishes close the game. optionally copy it and put it somewhere else
10 - install the patch from here
That's what I did and it worked for me.

Đây là những gì tôi đã làm:
1 - Gỡ cài đặt trò chơi trên steam 2 - tải lại trò chơi 3 - KHÔNG mở trò chơi 4 - nhấn Win + R và dán lệnh này: steam://nav/console và nhấn enter 5 - dán lệnh này vào bảng điều khiển steam và nhấn enter: download_depot 1449850 1449853<PHONE_NUMBER>882686555 6 - đợi tải xuống 7 - vào đây: Steam\steamapps\content\app_1449850\depot_1449853. Sao chép nội dung từ đây và dán vào thư mục trò chơi Yugioh trên steam và để nó ghi đè 8 - mở trò chơi và để nó tải xuống mọi thứ 9 - khi hoàn tất, hãy đóng trò chơi. Tùy chọn sao chép và đặt ở nơi khác 10 - cài đặt bản vá từ đây
Đó là những gì tôi đã làm và nó có hiệu quả với tôi.

Thank you for helping me but now I am not successful, the system still says it needs to be updated

Perhaps the recently updated automatic construction function on the deck editing page conflicts with the current server? Before the update on the 7th, the PVP server I set up on my personal server was unable to play PVP, PVE, and story battles, as well as edit decks. However, after the update on the 7th, PVP and PVE battles can now be played normally. The previous decks can continue to be used and other decks can be copied from public builds for use. Until the author fixes this issue, decks can only be edited by copying public builds or modifying their JSON files.

So is the project dead, then? Been over a week and zero comment has been made about it from the developer. Depot downloader worked for me for a day and then suddenly stopped working. If there was a way to have the full data of 2.0.0, you could just download is separately then load ygomaster but Idk how you'd do that.

The dev is working on an update. Posted in discord yesterday

The dev is working on an update. Posted in discord yesterday

Awesome to know!

Nhà phát triển đang làm việc trên bản cập nhật. Đã đăng trong discord ngày hôm qua

Can you give me discord?

If you're having the update announcement error, just click on the Ygomasterclient.exe like you normally would. Also move the ygomaster folder to your yugioh folder. I'm using the very last version before the update.

Same error I got when following the DepotDownload instructions. I cannot go past this error.

Nếu bạn gặp lỗi thông báo cập nhật, chỉ cần nhấp vào Ygomasterclient.exe như bình thường. Ngoài ra, hãy di chuyển thư mục ygomaster vào thư mục yugioh của bạn. Tôi đang sử dụng phiên bản mới nhất trước khi cập nhật nên nó tương thích với phiên bản ygomaster mới nhất.

I tried that, but still got an error in ygomaster

The author has updated the source code and recompiled YgoMaster.exe using build.bat, which can now edit decks normally

So we should just wait for the update to come? Sorry if I'm asking this, but I'm not a coding guy at all, so I find it difficult to understand how to make it works and fix this issue. I've tried the DepotDownload instructions too, but still got some errors.

So we should just wait for the update to come? Sorry if I'm asking this, but I'm not a coding guy at all, so I find it difficult to understand how to make it works and fix this issue. I've tried the DepotDownload instructions too, but still got some errors.
You can download the latest compiled version of YgoMaster.exe file from my repositories and replace the old file. I will keep it there until the author uploads the latest compiled YgoMaster.exe and deletes it

So we should just wait for the update to come? Sorry if I'm asking this, but I'm not a coding guy at all, so I find it difficult to understand how to make it works and fix this issue. I've tried the DepotDownload instructions too, but still got some errors.

You can download the latest compiled version of YgoMaster.exe file from my repositories and replace the old file. I will keep it there until the author uploads the latest compiled YgoMaster.exe and deletes it

So we should just wait for the update to come? Sorry if I'm asking this, but I'm not a coding guy at all, so I find it difficult to understand how to make it works and fix this issue. I've tried the DepotDownload instructions too, but still got some errors.

You can download the latest compiled version of YgoMaster.exe file from my repositories and replace the old file. I will keep it there until the author uploads the latest compiled YgoMaster.exe and deletes it

Thank you so much! I really appreciate it.

So we should just wait for the update to come? Sorry if I'm asking this, but I'm not a coding guy at all, so I find it difficult to understand how to make it works and fix this issue. I've tried the DepotDownload instructions too, but still got some errors.

You can download the latest compiled version of YgoMaster.exe file from my repositories and replace the old file. I will keep it there until the author uploads the latest compiled YgoMaster.exe and deletes it

Thank you so much! I really appreciate it.

I also uploaded the latest card's JSON file. Perhaps the current compiled JSON file is not the latest. Download and replace CardCraftableListjson and CardListjson in the Data folder, and restart YgoMaster.exe to use the latest card

Vì vậy, chúng tôi chỉ mong đợi bản cập nhật cập nhật này thôi? Xin lỗi nếu tôi hỏi điều này, nhưng tôi không phải là người viết mã, vì vậy tôi thấy khó hiểu cách làm cho nó hoạt động và giải quyết vấn đề này. Tôi cũng đã thử hướng dẫn DepotDownload nhưng vẫn gặp một số lỗi.

Bạn có thể tải xuống phiên bản biên dịch mới nhất của tệp YgoMaster.exe từ kho lưu trữ của tôi và thay thế tệp cũ. Tôi sẽ giữ nó ở đó để khi tác giả tải lên tệp YgoMaster.exe biên dịch mới nhất và xóa nó

Cảm ơn bạn rất nhiều! Tôi thực sự quan trọng điều đó.

Tôi cũng đã tải lên tệp JSON của thẻ mới nhất. Có thể hiện tại tệp JSON đã được biên dịch không phải là tệp mới nhất. Tải xuống và thay thế CardCraftableListjson và CardListjson trong Data thư mục và khởi động lại YgoMaster.exe để sử dụng thẻ mới nhất

Can you show me how to download the files on your site, I don't know how to download them

Vì vậy, chúng tôi chỉ mong đợi bản cập nhật or bản cập nhật or cái này thôi? Xin lỗi nếu tôi hỏi điều này, nhưng tôi không phải là người viết mã, vì vậy tôi thấy khó hiểu cách làm cho nó hoạt động và giải quyết vấn đề này. Tôi cũng đã thử hướng dẫn DepotDownload nhưng vẫn gặp một số lỗi.

Bạn có thể tải xuống phiên bản biên dịch mới nhất của tệp YgoMaster.exe từ kho lưu trữ của tôi và thay thế tệp cũ. Tôi sẽ giữ nó ở đó để thực hiện tải lên tệp YgoMaster.exe biên dịch mới nhất và xóa nó

Cảm ơn bạn rất nhiều! Tôi thực sự quan trọng điều đó.

Tôi cũng đã tải lên tệp JSON của thẻ mới nhất. Có thể hiện tại tệp JSON đã được biên dịch không phải là tệp mới nhất. Tải xuống và thay thế CardCraftableListjson và CardListjson trong dữ liệu thư mục và khởi động lại YgoMaster.exe để sử dụng thẻ mới nhất

Bạn có thể chỉ định cách tải xuống các tập tin trên trang web của mình, tôi không biết cách tải xuống

vào https://github.com/LaplaceBegonia/YgoMaster và nhấp vào nút mã màu xanh lá cây rồi nhấp vào Tải xuống Zip

Thank you very much, wish you a nice day :33

Did everything @LaplaceBegonia said
step by step
still can't access cards or edit decks
I tried the process twice with both my downloads and my file copying
Guess I'll be patient until the author uploads the latest compiled YgoMaster.exe

Did everything @LaplaceBegonia said step by step still can't access cards or edit decks I tried the process twice with both my downloads and my file copying Guess I'll be patient until the author uploads the latest compiled YgoMaster.exe

Perhaps some files have not been replaced, such as YgoMasterClient.exe or some JSON configuration files. While ensuring that the game version is up-to-date, you can try deleting all files in the YgoMaster folder and extracting the YgoMaster folder I uploaded to the game root directory.
Because the new version file uploaded by the author will be the same as the compressed file, if it still doesn't work, you can try completely deleting the entire game and downloading it again, and then unzip the latest YgoMaster folder I uploaded to the game root directory as before

按照步骤说完了，仍然无法访问卡片或编辑套牌，我尝试了两次该过程，包括下载和文件复制，我想我会耐心等待，直到作者上传最新的编译YgoMaster.exe

可能有些文件没有被替换，比如 YgoMasterClient.exe 或一些 JSON 配置文件。在保证游戏版本是最新的前提下，你可以尝试删除 YgoMaster 文件夹中的所有文件，并将我上传到游戏根目录的 YgoMaster 文件夹解压出来。因为作者上传的新版本文件会和压缩后的文件一样，如果还是不行，可以试着把整个游戏完全删掉再下载，然后像以前一样把我上传的最新 YgoMaster 文件夹解压到游戏根目录下

/

Thansk so much @LaplaceBegonia ,
Now I can edit tenpai dragon into may deck.

I recommend that, after verifying it working, to archive a backup of it in case a problem arises in the future. Until a fix is found, you'll then be able to use your backup copy.

Did everything @LaplaceBegonia said step by step still can't access cards or edit decks I tried the process twice with both my downloads and my file copying Guess I'll be patient until the author uploads the latest compiled YgoMaster.exe

Perhaps some files have not been replaced, such as YgoMasterClient.exe or some JSON configuration files. While ensuring that the game version is up-to-date, you can try deleting all files in the YgoMaster folder and extracting the YgoMaster folder I uploaded to the game root directory. Because the new version file uploaded by the author will be the same as the compressed file, if it still doesn't work, you can try completely deleting the entire game and downloading it again, and then unzip the latest YgoMaster folder I uploaded to the game root directory as before

Worked like a Charm! You were thorough discribing everything @LaplaceBegonia ! Much appreciated!

Fixed in https://github.com/pixeltris/YgoMaster/commit/0f4337929489e49f75e0e5580dde066f6fe93784 / v1.51


Fix 2-digit page pagination

Calling .next() or .prev() on 2-digit pages was not working. It was just a wrong regex.
Besides the fix, I expanded the pagination tests to also test the calls to .next() and .prev().
PS: I've never used fauxJax before, so not sure if the way I reset it for each test is the proper way.

Nice! Thank you @dcardosods  for opening this Pull-Request.
I'm taking a look at it now.
Quick questions to better understand your needs and get some feedbacks:

What kind of application are you developing using solvebio-js?
Are you using this package on the front-end or on the server side?
How did you find solvebio-js?

Thanks!

Can you please combine your 3 test suites 'Next page', 'Prev page' and '2-digit prev page' into one suite Test pagination?
You can change the faux-jax response in tests/init.js with 2-digits pages.
In your test suite I would test the following:

should have next function and prev function
should request 2-digit prev page
should request 2-digit next page

Also can you please chain your promises callbacks?
SolveBio.Dataset().all()
        .then(function(data) {
              return data.prev();
        })
        .then(function(dataPrev) {
              expect(dataPrev.url).toEqual('https://api.solvebio.com/v1/datasets?page=11');
              done();
        });

instead of
SolveBio.Dataset().all()
        .then(function(data) {
          data.prev()
            .then(function(dataPrev) {
              expect(dataPrev.url).toEqual('https://api.solvebio.com/v1/datasets?page=11');
              done();
            });
        });

@jercoh  I pushed the changes you asked.
To answer your questions...
I searched solvebio on github and found this repo. It seems to be not mentioned on the API docs, like the python and ruby packages are.
I'm using this package on the front-end, and our application is around variant data.


UDF update and deletion

What
Upon CREATE OR REPLACE FUNCTION or DELETE FUNCTION we need to delete all functions with the corresponding signature and allow them to be reloaded when explicitly called.
Why
Right now, if a UDF is updated or deleted, the DataFusion context will not reflect this if the function has already been used once during the session.
How
Use the function name to delete all functions with the corresponding name from the context registry. Once overloaded functions are supported, this will become more complex, as it will require finding the right function by signature as well.
Need this PR to become available in the next release of DataFusion: https://github.com/apache/arrow-datafusion/pull/9239

Closing these as we're archiving this repository for good


Multiplayer

You cannot play with someone else without crashing!

I am able to play LAN multiplayer fine with 0.14.0.
If you are trying to play with 0.14.2 or the Realms update it wont work yet.
If you are trying to play servers, BlockLauncher doesn't allow that due to hacking and stuff.


Revert "Remove native gesture "support" from iOS (#2457)"

Fix https://github.com/excalidraw/excalidraw/issues/2482
@bx10f can you please double check this indeed fixes the issue? https://excalidraw-ltub5law3.vercel.app/

Pinch/expand to zoom works!


I have added seprate issue templates

I have added seprate issue templates like bug report, feature request like this

Hey @kendallgassner after seeing the project i think this was not in the repo so i can add this one

Amazing thank you!


Screen size option buttons on the form configurator  stack vertically on an iPAd

Steps to Reproduce

Open the form configuration form using an iPad
Error: See the screen size buttons alignment below

Hi @nthangeniphumudzo, 've tested this item, and with the latest changes on Function, it is still not resolved. Please check if your PR has been approved. I see that the above PR is still open


fix: Home button doesn't navigate to Service URL

Home button is not working as expected (#571).  Home button in service navigation bar doesn't navigate to Service Base URL.
Description

Currently this doesnt happen because the reload() method in ServiceStore simply reloads the chromium webview.
Change .reload() to .goToIndex(0) where 0 is the absolute index in navigation history - Documentation can be found here -link

Motivation and Context
This change is to address #571
How Has This Been Tested?
This was tested on Windows 10 on a dev build of Ferdi.

Navigated several levels down deep inside Github and clicked on the home button to make sure that the base URL was loaded by the webview
Right clicked on service and clicked Reload Service to make sure that .goToIndex(0) still works.

Screenshots (if appropriate):

Types of changes

[x] Bug fix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)

Checklist:

[x] My code follows the code style of this project (run $ yarn lint).

@vantezzen @kytwb  Please review and provide your feedback :)

Thank you for your contribution!
View > Reload Service (or CTRL + R) will now also go back to the homepage instead of just reloading.
I'd suggest keeping the current behaviour of having this option only refresh the page.
This could be achieved by moving the goToIndex(0) call to
https://github.com/getferdi/ferdi/blob/develop/src/features/webControls/containers/WebControlsScreen.js#L54-L60
making it
goHome() {
    if (!this.webview) return;

    this.webview.goToIndex(0);
 }

and removing the changes from _reload. Testing this locally seems to create the behaviour I'd expect.

@vantezzen Makes sense! That is very neat. I have modified the changes and pushed the changes as you have suggested.

Nice, thank you. Is this PR ready to be merged?

Nice, thank you. Is this PR ready to be merged?

yes please!


Fixed and refactored the db.Reference.listen() API

Continuation of #183

KeepAuthSession now extends from the AuthorizedSession. This allows the listen() API to properly authorize outgoing requests.
Added db.Event type. The callback gets fired with instances of this class.
Updated documentation and changelog.
Cleaned up the code and added more unit tests.

@the-c0d3r please take a look.

@hiranya911 I have looked at the changes. It looks good, much cleaner than what I wrote. But the problem you mentioned in #183 I do not see the problem. But I have been using the SDK with the authentication json file. So that may be obscuring the problem.

@the-c0d3r You probably have your database security rules set to public, allowing unauthenticated access to the data. I encountered the issue when testing with a service account json file.


pyannote-database v5.0.0 and noarch

Checklist

[x] Used a personal fork of the feedstock to propose changes
[x] Bumped the build number (if the version is unchanged)
[x] Reset the build number to 0 (if the version changed)
[x] Re-rendered with the latest conda-smithy (Use the phrase @conda-forge-admin, please rerender in a comment in this PR for automated rerendering)
[x] Ensured the license file is being packaged.

This PR should address #11


For multiple frontends, assign different Cognito user pool group based on frontend

Which Category is your question related to?
Authentication
Amplify CLI Version
4.18.1
What AWS Services are you utilizing?
Cognito, DynamoDB, Appsync
Provide additional details e.g. code snippets
My web app has 2 frontends for 2 user groups- 'advertisers' and 'players'. As per the GraphQL schema, advertisers create data and players read it. Users should be assigned a Cognito user group depending on which frontend they sign up from. How can this be implemented?
I'm able to assign users to a single group using a post-confirmation Lambda trigger. Is there a way to detect the frontend and assign groups accordingly?

@secretshardul, you could make use of the custom attributes in when you sign the user up. Based on the front-end that the user is signing up you could set this value to advertisers or players and in the post-confirmation lambda trigger, add them to the right user group by reading the custom attribute.

The custom parameter method works well for email and password auth. But I got 2 issues:

Passing custom attributes means I can't use Amplify's auth UI component on one of my frontends. Auth page needs to be built from scratch. Or is it possible to add custom attributes while using auth UI component?
Can custom attributes be passed for social login? Or do I have to detect Facebook/Google login in my post-confirmation Lambda trigger? The latter approach means that I can use social login on one frontend only.


Fix typo in the configuration

The default key recovery contained a typo. I have not checked further, where this configuration is loaded and how it is used, but I suppose it could lead to possible miss-configuration of the system.
I've grepped for the misspelled word recoverty and could not find it anywhere else (in this repo).

ci-sonar / sonar gave:
Error:  Failed to execute goal org.sonarsource.scanner.maven:sonar-maven-plugin:<IP_ADDRESS>8:sonar (default-cli) on project dgca-issuance-service: You're not authorized to run analysis. Please contact the project administrator.

Can anyone help with that?

Yes this is a problem we have with "external" PR. SonarCube does not allow to upload TestResults from external repos.
But I can merge it anyway :)
Thank you for you contribution!


Not a question per say, but a request for a feature

What is your question?
As stated in the title, this isn't a question, but rather a request for a feature, that feature being the ability to change where the buttons for the notes are located, either as being part of the "Adjust Delay And Combo" section of the options or the "Mobile" options.
My two cents are that some good default options (along side an option for how it is now) would be allow the player to just hit their strumlines notes (though that could mess with some mod charts), allowing 2 sets of arrows (one on each side), or having them displayed along the bottom in a straight line.

You can already change your buttons location
When you enter the main options menu press the C button and it'll open a menu with different controls modes for mobile alongside with a customizable mode
And about the other feature you're asking for, "hitting strum notes" instead of the actual buttons
It was done in some web versions of the game and ut was very unplayable so i don't think it's worth trying...


suyu: add version 0.0.2-master

[x] I have read the Contributing Guide.

Code moved to homepage

/verify

Suyu doesn't have anything related to emulation achieved yet, I wouldn't give them any props or recognition just yet.

And, as I've said, this project was a fluke. The dev team fell apart and likely won't work on it further, though the kiddo is still trying to look for new developers.


Revisit Programming Model docs

The Programming Model doc is simultaneously one of the most helpful, yet one of the most difficult to navigate. It jumps around between basic concepts (like "what is a resource") and very detailed topics (like the dozen options you can pass when creating a resource). The ordering is also slightly odd (e.g., it discusses secrets and the way they interact with config before even introducing the concept of config). Further, it includes content that is definitely out of place, like the seemingly random "Design Guidelines" at the end, which only covers a single apply related topic

@bermudezmt I'm curious what you think on this one!

will try to revisit over the holidays.


types: Add UnimplementedStub to have forward compatible implementations

Signed-off-by: Xuanwo<EMAIL_ADDRESS>

PTAL @Prnyself


Inclusion of Signatures in SecLists

Hey there, was wondering if it'd be ok for me to include your signatures file (probably not in the same format) in the SecLists project.
I'm collecting all the different checks of this type into one place so arbitrary engines can query for all of these types of things.
https://github.com/danielmiessler/SecLists/
Thanks!

Sure, no problem! Thanks for SecLists, btw. It's awesome.


Update client package.json - fixes #420

move imports/exports-loader to dependencies to fix issues when using horizon as a dependency with a custom webpack setup

This change is

I endorse this pull request, same issue here :+1:

LGTM, merging. Thanks @flipace

Yay! When will this be released?

In the next point release we push out. Hopefully in the next couple days

@deontologician So this means @horizon/client is unusable from Node until the next release?

That is a good point. I will see if I can accelerate our release


added morgue preset

Fixes #7958
Added morgue preset.

@quincylvania I have made suggested changes can you look at once and let me know if you want me to change the "name" to "Mortuary" also.

@animesh-007 Thanks!


NewPipe contribution?

Hello.
What about merging your efforts with NewPipe? It looks promising and gained traction from a few developers.
Kind regards

@timofonic Looks very promising, too.
There is problem because I'm using the youtube api and library from google and NewPipe don't. What should I do about this?


Suggest adding max # of app/token note under Microsoft Authenticator app section

Please include following sentence under "Microsoft Authenticator app" section as well.
Users may have a combination of up to 5 OATH hardware tokens or authenticator applications such as the Microsoft Authenticator app configured for use at any time.

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

ID: b8f14188-98ec-5c94-f408-162ee1baa076
Version Independent ID: 41ed4874-e1e6-56d3-4de4-39c024d1e06c
Content: Azure AD authentication methods
Content Source: articles/active-directory/authentication/concept-authentication-methods.md
Service: active-directory
GitHub Login: @MicrosoftGuyJFlo
Microsoft Alias: joflore

@teppeiy Thank you for your feedback , we will have this checked by the doc authors and get the document updated after review.

@teppeiy We have reviewed the same and as per the discussion we will submit a pull request shortly on this.

@teppeiy We have updated the document . This issue will auto close after it has been published. Should you have any further questions on this , feel free to let us know .


Update documentation for calendar

Related: #117

I fix it.

Merged! Thank you for your contribution. Much appreciated! 👍


Add new continue_on_failure option to all pipelines

Add new continue_on_failure option to all pipelines

if false, no changes: failed jobs will not trigger the next.
if true, failed jobs, besides deploy, destroy, smokes, upgrade,
pre-upgrade-smokes, will trigger the next job even if they fail.

Enabled in cap-pre-release-caasp.
Tested by enabling and disabling the option, seeing that there's either no changes when flying, or the specific changes.

cap-pre-release-caasp already flown.

Closing, this simply wont work. See:
https://github.com/concourse/concourse/issues/46
https://github.com/concourse/concourse/issues/1043


Warning about nl.nn.adapterframework.jdbc.XmlQuerySender

Describe the bug
When you start the Frank!Framework with only an empty classpath configuration, you still see the following warning in the Adapter Status page: "The class [nl.nn.adapterframework.jdbc.XmlQuerySender] is used one or more times. Please change to [nl.nn.adapterframework.jdbc.FixedQuerySender] to avoid potential SQL injections!"
Category

Frank Framework

To Reproduce
Steps to reproduce the behavior:

In your classes directory, put the following configuration:
<Configuration>
    <jmsRealms>
        <jmsRealm datasourceName="jdbc/frank2manual" realmName="jdbc"/>
    </jmsRealms>
</Configuration>

Start the Frank!Runner with the following line: start.bat -Djdbc.migrator.active=true -Dconfigurations.names="${instance.name.lc},ibisstore" -Dconfigurations.autoDatabaseClassLoader=true

Watch the Adapter Status page. The warning appears in yellow. Don't mind the error about configuration "ibisstore". It is expected because this configuration is still to be uploaded.

Expected behavior
I did not expect the mentioned warning, because I had no adapters using class XmlQuerySender.
Screenshots

Environment:

Frank!Runner
Microsoft Edge
IAF version 7.6-20200415.172935

Additional context
I hope the above is clear by itself.

This has to do with the ManageDatabase adapter, which allows you to execute 'raw' sql queries. You can disable the ManageDatabase by using the property manageDatabase.active=true.
Typically this adapter is only active on LOC environments for testing purposes.


Add tests for peer TLS with auth

Is your feature request related to a problem? Please describe.
Configure tests for peer TLS with auth
Describe the solution you'd like
As a client/server communications we need peer TLS tests with peer auth
Describe alternatives you've considered
Not applicable
Additional context
Not applicable

Assignee is bissquit

Created by bissquit at 2023-04-13T14:07:44Z


Review-002

Overview
The focus for this code review will be centered around the ManageHaccWidget.jsx and HelpPage.jsx.
Please pay attention too:

Javascript issues
React components

Review Branch
review-002
Files to review

ManageHaccWidget.jsx
HelpPage.jsx

Checklists

Architecture
Design
JS
React
Testing

Due date
Monday, September 18, 9:00 AM
For more information
The review process is documented at: http://courses.ics.hawaii.edu/ics414f23/morea/review/reading-idpm-review.html

ManageHaccWidget.jsx
DE-06: Reduce usage of inline style to standardize UI and make code more readable and standardize design
DE-05 L96 L117: either break code into 2 lines or change eslint max line length property, ideally first option to make code more readable
DE-06 little to no documentation on how functions like toggleTeam (L30-43) work
Informal comments: I'm not sure if its just me but this widget is incredibly dense, as mentioned the documentation is absent and trying to understand how this interacts with other components is a nightmare especially with calls like const collectionName = CanCreateTeams.getCollectionName(); (why is the collection called CanChangeChallenges??)
=======================================================
HelpPage.jsx
DE-06: Reduce usage of inline style to standardize UI and make code more readable and standardize design
Informal comments: general clunky formatting, eg: L26-28,  nested inside an

ManageHaccWidget.jsx

use function instead of classes

Retrieves collection data inside render()

Inline styling, move to CSS classes or stylesheets

Use Destructuring in function parameters, destructure "props"

Possibly use a function to map for repetitive components
ex.

const renderItems = (items, WidgetComponent) => {
  return items.map((item) => <WidgetComponent key={item._id} item={item} />);
};

// In the render method:
{renderItems(this.props.challenges, ChallengesAdminWidget)}
{renderItems(this.props.skills, SkillsAdminWidget)}
{renderItems(this.props.tools, ToolsAdminWidget)}

HelpPage.

use function instead of classes
move all inline styles into a CSS class file just for helppage
can easily divide the components into different subcomponent functions and then call those.

ManageHaccWidget.jsx

use function instead of classes
Retrieves collection data inside render()
Inline styling, move to CSS classes or stylesheets
Use Destructuring in function parameters, destructure "props"
Possibly use a function to map for repetitive components

ex.
const renderItems = (items, WidgetComponent) => {
  return items.map((item) => <WidgetComponent key={item._id} item={item} />);
};

// In the render method:
{renderItems(this.props.challenges, ChallengesAdminWidget)}
{renderItems(this.props.skills, SkillsAdminWidget)}
{renderItems(this.props.tools, ToolsAdminWidget)}

HelpPage.

use function instead of classes
move all inline styles into a CSS class file just for helppage
can easily divide the components into different subcomponent functions and then call those.

ManageHaccWidget
RE-09: prefer function
DE-01: too many in line styles, put styles in a separate css file
JS-04: need change withTracker to useTracker or withTracker()
RE-06: withTracker does not define constants
RE-04: props are not destructured in component parameter
Re-10: widge in the name
HelpPage
DE-01: too many in line styles, put styles in a separate css file
ES-01:  is invalid
JS-07: no JSDoc

ManageHaccWidget.jsx
JS-04: L23 arrow function instead of class
DE-05: L61 commented console.log
HelpPage.jsx
DE-01: L19, 23, 59, 63, 128, 132, styling is repeated
L58, 127 repeat styling

save background colors to an import
Widget:
DE-01: Table.Row with Name, Description, Edit, & Delete is duplicated. Can be refactored.
ES-02: Get rid of ESLint disable. (Pretty sure we changed that rule already.)
RE-09: Can use const instead of states. Convert to function.
RE-10: ...I kinda like having Widget in the name though? Maybe can just shorten it to W.
TI-01: Needs a test.
Page:
DE-01: style={{ flex: 1, backgroundColor: 'lightgray', height: '1.5px', margin: '10px' }} is repeated at many points. Can this be made into a constant?
RE-01: Currently uses mostly plain old HTML & CSS. Can this be broken up into components?

ManageHaccWidget.jsx
RE-01: React state can be initialized using a constructor or a state class property. Choose one for consistency.
RE-02: The component is fetching data from the Meteor server in a non-reactive way. Consider using a reactive data fetching mechanism to get real-time updates.
RE-03: Direct navigation (Link) is used inside buttons, which can lead to accessibility issues. Consider using navigational methods or making the entire button a link.
HelpPage.jsx
DE-01: Inline styles are used extensively. Consider using external CSS classes to keep the design consistent and codebase maintainable.
RE-01: The component is functional and stateless, which is suitable for its current use. Ensure any stateful logic in the future is incorporated properly.
RE-02: Use of text as a component in Create Teams Page. It's not a standard React or HTML element. Ensure it's either a custom component or replace it with a standard element like .


graphene-config: Hide SIMD implementation from GObject-Introspection

Exposing the various #mesondefine'd constants results in the GIR XML
unnecessarily varying between architectures.
Conversely, GObject-Introspection's rather simplistic cpp parser
thinks GRAPHENE_SIMD_S is always defined to "sse", even on
architectures where it should not be.
Introspected code is not going to be able to use SIMD anyway, so this
doesn't seem to have any value.
Resolves: https://github.com/ebassi/graphene/issues/211

Not tested yet, but hopefully fixes #211.
Proposed changes:

Wrap more of graphene-config.h in #ifndef __GI_SCANNER__

Benchmark results:

not benchmarked

Test suite changes:

Add a smoke-test for GObject-Introspection using PyGI

Looks good; thanks for adding the introspection test, it's much appreciated.


flex ABI broken in conda-forge package

In a correctly working environment I expect the following output:
$ python
>>> from scitbx.array_family import flex
>>> assert (flex.complex_double() == None) is False
>>> flex.complex_double([None])
Traceback (most recent call last):
  File "<input>", line 1, in <module>
    flex.complex_double([None])
TypeError: No registered converter was able to produce a C++ rvalue of type std::complex<double> from this Python object of type NoneType

However, with cctbx-base 2021.4 and python 3.8 in a freshly created conda environment on MacOS I get:
$ conda create -p $(pwd)/cctbx-conda-3.8 -c conda-forge --override cctbx-base python=3.8
$ conda activate $(pwd)/cctbx-conda-3.8
$ python
Python 3.8.10 | packaged by conda-forge | (default, May 11 2021, 06:39:48)
[Clang 11.1.0 ] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from scitbx.array_family import flex
>>> assert (flex.complex_double() == None) is False
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError
>>> flex.complex_double() == None
<scitbx_array_family_flex_ext.bool object at 0x1140681b0>
>>> flex.complex_double([None])
<scitbx_array_family_flex_ext.complex_double object at 0x10d940040>

I added these checks to cctbx in https://github.com/cctbx/cctbx_project/pull/616. The pull request builds are currently running, but I suspect that they will pass, which is why I'm reporting this here.
 It works on osx-arm64 for Python 3.8.10, and it works on osx-64 with Python 3.8.8. It looks like it's just for Python 3.8.10 on osx-64.

Also, the first build for Python 3.8.10 seems to be fine (conda install python=3.8.10=h0e5c897_0_cpython).

Yes, that's what we observed in dials/dials#1001 also.

So the build 1 for Python 3.8.10 is now marked as broken. The tests will now pass, but the problem may pop up again later. I'm playing with the Python builds to see if the problem is there.

Python 3.8 does not support newest macOS SDK
https://github.com/conda-forge/python-feedstock/issues/479
https://github.com/python/cpython/pull/26474
https://github.com/conda-forge/boost-feedstock/issues/117


Work with GOV.UK to test the new typography scale

What
Work with the GOV.UK programme to test the new typography scale against GOV.UK
Why
GOV.UK have expressed an interest in this work as one of if not the largest, most typography driven government service. Testing against GOV.UK will help to quality assure this work.
Done when

[x] Establish who in GOV.UK will be working on this
[x] Have a kick-off meeting between the team and GOV.UK
[ ] Assist GOV.UK in rolling out typography across their service

We've had a kick off with govuk and established a connection to collaborate on this. For now, this is being moved back into the backlog. Once we do the early launch of the scale in 5.2, we'll bring this back as a way to track communication and testing with govuk until govuk have rolled out the new scale.


Boostrap 4

I have been using Bootstrap 4 Beta for some time now to create custom controls and like it a lot. Do you have any plans to upgrade? I would be happy to contribute with what I have learned.
Thanks
Chris

I was able to upgrade to Bootstrap-4 in my fork... pretty painless. I will create a pull-request for your review if you are interested.
Chris


Use modules instead of module map for better Swift integration.

This change should be benign but may impact integration with React or Cordova.  Comments?

This PR replaces the old PR #590 , since that PR is so old.

Result of Integration 2
Duration: 8 minutes and 4 seconds
Result: All 199 tests passed, but please fix 1 warning.
Test Coverage: 60%

Result of Integration 3
Duration: 7 minutes and 49 seconds
Result: Perfect build! All 199 tests passed. :+1:
Test Coverage: 60%

I checked the most likely problem case with React Native, and it builds fine. I want to take a little time to review, but it looks good at the moment.

Result of Integration 4
Duration: 7 minutes and 58 seconds
Result: Perfect build! All 199 tests passed. :+1:
Test Coverage: 61%

Result of Integration 5
Duration: 8 minutes and 40 seconds
Result: Build failed 3 tests out of 202

Result of Integration 6
Duration: 8 minutes and 26 seconds
Result: Perfect build! All 202 tests passed. :+1:
Test Coverage: 61%


Field API feedback

Overview
Based on this readme listing I'm adding feedback based on existent implementations and expected lib user competencies (as we target many almost non-tech users - publisher, data wranglers etc).
$filed = new FieldsFactory::field((object)["name" => "id", "type" => "integer"])

Factory class?
I think it's good for programmers but non-tech users more prefer to don't have a deal with advanced programming concepts. Technically it should not  be different but as a {USER} I'd more like to have just $field = new Field($descriptor) or $field = Field.create/load($descriptor).

in latest release, the FieldsFactory was removed from README
non tech users should not use the Field object directly, they will use the Schema
$schema = new Schema(["fields" => [
  ["name" => "id", "type" => "integer"]
]]);

or add fields like this:
$schema->field("title", ["type" => "string"])

But still is there is a way to provide some interface for crating fields? This class could have self-value without Schema for type-casting.
Also I use it in test suite (which is coming) extensively:
- Field - integer

- field=tableschema.Field: [{'name': 'name', 'type': 'integer'}]
- field.type==: 'integer'
- field.format==: 'default'
- field.cast_value: ['', ==: null]
- field.cast_value: [1, ==: 1]
- field.cast_value: ['1', ==: 1]
- field.cast_value: ['3.14', ==: ERROR]

Your original feedback was for users
for programmers or for the test suite, you can still use the FieldsFactory
use frictionlessdata\tableschema\Fields\FieldsFactory;
$field = FieldsFactory::field(["type": "integer"]);
$field.castValue("5") == 5

Ok. That's minor for now. For testsuite the main blocker was casting to (object). So if FieldsFactory::field is the nicest available way to create fields I suppose we better to return it to the readme. Field is still one of 6 main APIs provided by all implementations:

Field API
Schema API
Table API
Profile API
Resource API
Package API

I added the Field to README
https://github.com/frictionlessdata/tableschema-php/blob/master/README.md#field


ECDSA DKG test loop: Retries

Refs: #3041
#3119
Here we integrate the tECDSA DKG protocol with the retry algorithm developed during #3119. Specific changes are described below.
The DKG retry loop
Long story short, the tECDSA DKG protocol can fail for multiple reasons. Two very broad categories of errors are inactivities and byzantine faults. Regarding inactivities, we are usually able to detect specific members who were inactive and exclude them during the retry. Worth noting that based on observations made during the v1 lifetime, inactivities are the most common errors that break the DKG protocol execution. Regarding byzantine faults, the tECDSA protocol we use does not support attributability so, in most cases, we are not able to point out specific members who spread invalid data accidentally or on purpose. For that case, we fall back to the random retry mechanism from #3119. This mechanism can be imagined as a black box that takes the list of group operator seats selected by the sortition pool as an input and returns a sublist of operator seats that should participate in the given DKG attempt. That said, we implemented the DKG retry loop as follows:

For the first attempt, set all selected members as qualified
Do the DKG attempt if the executing member is qualified for that attempt. Otherwise - proceed to point 4.
If there is no error and the result was produced - break. If there is an error - proceed.
Unwrap the error. If the error is about inactive members, record their indexes
If we are in the first 5 attempts, we have not used random retries yet, and there are inactive members - exclude the inactive members if the group quorum can still be maintained without them. Otherwise - use the random algorithm to exclude members randomly. Members who were not excluded are qualified to participate in the next attempt.
Check the stop signal. If triggered - break. Otherwise - proceed to point 1.

Such a construction of the retry loop allows focusing on inactivities from the very beginning. If initial inactivities-based retries don't help, we fall back to the random algorithm and continue with it until success or timeout.
The entire DKG retry loop logic was encapsulated into the tbtc.dkgRetryLoop struct. This construction allows to separate the loop's internal state from the actual DKG execution logic and facilitates testing of the retry logic.
Changes in the DKG executor
In order to work with the test loop, the DKG executor (pkg/tecdsa/dkg.Executor) must allow performing a DKG run with a sublist of the original group selection. In order to achieve that, the executor's Execute function now takes the excludedMembers []group.MemberIndex argument holds indexes of members excluded for the given DKG run. The executing member just considers them disqualified from the very beginning and thus does not accept messages from those members. This information is also used to set up the underlying TSS implementation in a correct way.
Apart from that, the DKG retry loop needs to recognize errors raised due to inactive members. In order to handle this, the Execute function can now return the pre-defined dkg.InactiveMembersError that holds indexes of members inactive during the given attempt. The DKG retry loop checks for that error using the errors.As call.
The DKG session ID
So far, all TSS-related network messages used the seed-based sessionID field that was used to ensure that those messages belong to the right DKG run. Adding retries complicates the situation since there can be multiple messages of the same type that would use the same sessionID. From the network's perspective, each retry is a separate session so we now build the sessionID as a concatenation of the DKG seed and the DKG attempt index. This way, each retry for the same seed has its own sessionID and there is no way to mix messages. Additionally, the support of the sessionID field was added to the non-TSS ephemeralPublicKeyMessage.
An alternative to the sessionID could be creating a separate broadcast channel for each DKG retry. However, a broadcast channel is a heavyweight concept that is much harder to manage than the sessionID.
Minor changes
Apart from the aforementioned changes, two smaller ones were introduced as well:

The GroupQuorum parameter was added to the tbtc.ChainConfig type. This parameter determines the minimum number of active participants behaving according to the protocol needed to generate a group in TBTC. It is lesser than the GroupSize which determines the ideal group size but significantly greater than the HonestThreshold parameter which denotes the minimum number of signers required to produce a signature.
The chain.Addresses type was added in order to facilitate dealing with address lists and transforming them to sets. This is especially useful for handling groups formed from operator addresses and allows for reducing a lot of boilerplate code.

Code is ready but not yet tested nor covered with unit tests. I'll undraft once those missing pieces are addressed.

Okay! done with my pass - other than that last grammar nit, I'm good to go here. We have a merge conflict, but once that gets resolved, I'm good to ship

Ready to :shipit: @beaushinkle


❓ Apply filter to photos

Question
Hi @mrousavy , I had a look at the documentation, I was wondering if using the following library together with FrameProcessor, it would be possible to be able to do something similar as seen in the images.
In short, in real time you can apply filters to the photos/videos you make, doing everything by js, not touching the android/swift code.

What I tried
No response
VisionCamera Version
2.11.2
Additional information

[ ] I am using Expo
[X] I have read the Troubleshooting Guide
[X] I agree to follow this project's Code of Conduct
[X] I searched for similar questions in the issues page as well as in the discussions page and found none.

Hey! This seems very similar as #526.
In theory; it is possible to build such an interface, but that requires a lot of my free time, which I currently don't have. I'm running a company.
If you, or anyone else reading this comment, is interested in this becoming reality, consider a collaboration with me and my app development/consulting agency "Margelo": Contact me at<EMAIL_ADDRESS>

Actually a hacky solution right now would be to use Frame Processors to detect the faces, and then draw the face-filters ontop of the Camera using react-native-skia. This should be very performant and happen in realtime, and you can then just take a screenshot of the view (see this lib) to "capture" it.
A real solution would be to offer an intermediate layer to draw upon, whether it's 3D AR, or 2D overlays, which is also part of the capture pipeline (photo & video). Again, I don't have the free time to work on this, but I have some ideas how that can be implemented in C++ for a fast and easy way of drawing 3D/2D filters straight from JS.

cc @wcandillon & @chrfalch

let's do it 🙌🏼

What do you think about opening a discussion about a possible implementation?
@mrousavy:
So we can discuss any ideas that come to mind.

Actually a hacky solution right now would be to use Frame Processors to detect the faces, and then draw the face-filters ontop of the Camera using react-native-skia. This should be very performant and happen in realtime, and you can then just take a screenshot of the view (see this lib) to "capture" it.

Hacky Solution:
I too had thought of a solution like this.
But doing such a thing is not enough: https://mrousavy.com/react-native-vision-camera/docs/guides/frame-processors#interacting-with-frame-processors
Using frame-processors instead of drawing a rectangle, put an image on top.
What should react-native-skia do in this case?
The problem with this is how to take the photo with the filter together, using the screenshot method is not that convincing me.
We think of different photo sizes or different ratios.
It is an excellent solution only that it does not completely convince me.

A real solution would be to offer an intermediate layer to draw upon, whether it's 3D AR, or 2D overlays, which is also part of the capture pipeline (photo & video). Again, I don't have the free time to work on this, but I have some ideas how that can be implemented in C++ for a fast and easy way of drawing 3D/2D filters straight from JS.

I would be very curious to hear all your proposals, I cannot tell you that I will be able to contribute to the development, I do not know if I still have the skills.
@wcandillon : I found the following project I don't know if it can help you as inspiration, there are some masks you could also use: Github

Skia will support off-screen drawing very soon - and it should be possible to take the bytes from the current frame, create a new surface, draw on the surface and then return the bytes back to the frame processor. Would this be a solution we could work with? Maybe I can discuss this with @mrousavy and see if we can find a way to get this working?

@mrousavy : Frame Processor to detect faces, does it recognize even if there are multiple faces?
For example, if there are three or more people in a shot, do you recognize them all?

Frame Processors detect the face, and return the bounding box.
RN Skia draws a face filter at the bounding box coordinates, smoothly and at 60 FPS, and running on the Frame Processor Thread, ontop of the Camera View
You then take a "screenshot" of the view.

it does not completely convince me

@Angelk90 Well of course, I said it's a hacky solution right now.

Skia will support off-screen drawing very soon

@chrfalch that's exactly what's needed for this. Let's discuss this in DMs

does it recognize even if there are multiple faces?

@Angelk90 I am not sure if you understand Frame Processors correctly. It is up to you to implement the face detection, and there are tons of implementations for that out there. Frame Processors is an API that allows you to easily create those plugins and use them from JS, with VisionCamera. So if e.g. MLKit allows you to detect multiple faces, then use that.

I'm also interesting in implementing a "Green Screen" effect, I think the method will be different in that we will output a mask from the ML model and subtract the rest of the image. I did a tiny bit of research into RN Skia but couldn't find a "subtract" feature, do you guys think this is possible with current RN packages?

Green screen effect

@jsindos : What did you use to make this "Green screen effect"?
Java(android)?

Hey yes I think this is possible using RN Skia - there's a prop (called draw mode or something) which you can set to SRC_OUT or DST_OUT and it will only draw where the mask is transparent (cc @chrfalch)

Ok cool thanks @mrousavy.
Basically my plan is to use the PyTorch implementation of https://github.com/PeterL1n/RobustVideoMatting (not 100% sure if this will be performant on mobile phones yet), and save a TorchScript copy of the model.
I'll then write the Objective-C equivalent code of:
bgr = torch.tensor([.47, 1, .6]).view(3, 1, 1).cuda()  # Green background.

for src in YOUR_VIDEO:  # src can be [B, C, H, W] (Batch, Channel, Height, Width) or [B, T, C, H, W]
    fgr, pha, *rec = model(src, *rec, downsample_ratio=0.25)
    writer.write(fgr * pha + bgr * (1 - pha)) # writes to the video, this will have to be moved to RN Skia?

where fgr, pha are the foreground and alpha predictions (I might have to invert this to get the mask).
And package this up as a Frame Processor Plugin (not 100% sure how to do this).

Yep that should work! I'd recommend creating this in your private project first (just a single file per platform), then extracting it into a public package once it works for you. (See community plugins for reference)
This is maybe an interesting use-case @raedle? 😄

It's not very relevant, but I have developed a library where you can use AR filters like beauty filters and face filters for React-Native, I hope it will be useful to someone: https://github.com/ridvanaltun/react-native-deepar

@mrousavy , @wcandillon , @jsindos : Are there any news?

Hi my friends by code,are there any news and someone know how to do it?

Hey everyone! I'm working on bringing this to iOS in #1198 and have a plan for an intermediate drawing layer for Android using OpenGL too 🙌

@mrousavy , @wcandillon , @jsindos : Are there any news?

i want to add filters like snapchat and instagram and reels on  face filters like animals faces or etc...
anyonce can guide me @Angelk90 @raedle  @mrousavy .

Hey everyone - this is a pretty old issue but I've actually finished the implementation for this using RN Skia, but I decided to not merge it into VisionCamera V3 since that overcomplicated the codebase by a lot and made VisionCamera heavier for everyone (including the people who don't use the Skia features).
So I'm preparing to release this as a separate package or fork soon.

@mrousavy Any updates on the fork? Looking to try it out if there is a repo available. Thanks for everything you do.

@mrousavy Any updates on the fork?

no not yet

VisionCamera V4 now supports Skia Frame Processors!!!


Text comparison. Wrong vertical alignment of identical rows after delete-add section

Does this issue occur when all extensions are disabled?: Yes

VS Code Version: 1.89.1 (user setup)
Commit: dc96b837cf6bb4af9cd736aa3af08cf8279f7685
Date: 2024-05-07T05:13:33.891Z
Electron: 28.2.8
ElectronBuildId: 27744544
Chromium: 120.0.6099.291
Node.js: 18.18.2
V8: 12.0.267.19-electron.0
OS: Windows_NT x64 10.0.19045
Searched existing issues by "compare vertical alignment" - no relevant results.
Steps to Reproduce:

Open files test2 and test1
Compare them

Fact
wrong vertical alignment of identical rows after delete-add section

Expected

test2.txt
test1.txt

Thanks for sharing the input documents and the screenshot! Unfortunately, it is still not clear what this issue is about - I don't see a big difference in the screenshots. Can you add more details?

difference on picture

Expected empty range shown on this picture

No. I want fix in my test. Not in dev console.
Can you reproduce my simple test in user interface?

Can you reproduce my simple test in user interface?

No, I cannot reproduce. But I think VS Code might have logged some errors to the VS Code dev console. You could help me fixing this bug, but sharing if there are any error messages in the VS Code dev console.

I cannot reproduce

Show your comparison result.
Here is log from dev console:


Only apply colors if stderr is a terminal

As discussed in https://github.com/rust-pretty-assertions/rust-pretty-assertions/issues/31.

@smwoj could you investigate if there's a way to force colors for our tests, even though we are not in an interactive terminal?
It would be great to test both ways, but given only one I'd prefer keeping the existing tests unchanged.
I had to authorize the workflow a couple of times, feel free to ping me again if you want me to run CI on this branch again

@tommilligan the natural way to keep the existing tests (though perhaps a little bit hacky) would be to always have colors enabled if we're running tests. (keeping the existing tests is the starting point - whether we add add more tests for the nocolor mode is a separate issue)
#[cfg(test)]
fn should_apply_color() -> bool {
    true
}

#[cfg(not(test))]
fn should_apply_color() -> bool {
    use std::io::IsTerminal;
    use std::sync::OnceLock;
    static IS_STDERR_TERMINAL: OnceLock<bool> = OnceLock::new();

    *IS_STDERR_TERMINAL.get_or_init(|| std::io::stderr().is_terminal())
}

However this doesn't work, because tests in $crate/tests directory are treated differently than regular unit tests kept inside $crate/src - they are "integration tests" that see the crate exactly as the user would. Because of this #[cfg(test)] annotations have no effect on tests stored in $crate/tests.
You said that you'd prefer to keep the existing tests unchanged, but perhaps moving them to $crate/src and using the solution above would be OK? Technically speaking no test body would be changed.
I must admit I see the value of having this kind of integration tests (that see the crate as a client would), but I don't see a way of adding no-color fallback and keeping the tests as they are in the current CI unless we add extra configuration. However this extra configuration doesn't seem to be a good idea either:

feature-based configuration (e.g. feature = "color_never" or feature = "color_always") is not a good fit because features should be additive,
allowing the user to dynamically configure the value of "should_apply_color" setting is not a great fit either, because it would require running some initialization code at the beginning of every test that uses pretty_assertions. (because the default test harness in cargo has no way of running tests setup code and by default tests are run in parallel and in unpredictable order). This is clearly not a great user experience, but maybe it's good enough to use this approach in "integration" tests of this crate.

Please let me know if one of these solutions seems good enough for you or in these circumstances we should close the PR (and perhaps leave the "nocolor" setting for a PR that introduces proper configuration across the board).

Thanks for the summary, that's a really nice writeup.
I think the most natural fit would be adding a detect-terminal feature with the changes in this PR. Then in the case not(feature = "detect-terminal") we always apply colours.
This is basically the same as your cfg(test) example but lets us configure the integration tests by not using this feature. This is still additive because it's the detection we're adding, not the color.
This also has the nice property that if it's a new feature, users can opt in to it so it's not a breaking change. We could also decide to make it a default feature in future.

I think the most natural fit would be adding a detect-terminal feature with the changes in this PR. Then in the case not(feature = "detect-terminal") we always apply colours.

That's indeed a nice compromise. I pushed these changes, thanks.
It should be noted that CI is running on rust 1.63, but IsTerminal trait was added in std library 1.70. I expect the CI to pass now, but users who wish to enable it will have to use at least 1.70. I think this is OK since by default there is no breakage (the feature is disabled) and if someone opts-in detect-terminal it's fair to require more recent version.
@tommilligan could you please rerun the CI, then?


CI posts coverage percentage on PRs

Add a script that parses llvm-cov's report table and prints the
resulting line coverage percentage for C/C++ code. Run it in the
Continuous Integration script and post the result as an autogenerated
comment on the Pull Request.

(Still struggling to make the comment posting only work when the run is associated with a PR. If we don't skip it, I believe the whole action will fail when run on commits from the main branch.)

(Still struggling to make the comment posting only work when the run is associated with a PR. If we don't skip it, I believe the whole action will fail when run on commits from the main branch.)

Done. Apparently samples in Github's own docs used a wrong syntax.

Continuous Integration: All tests passed. C/C++ test coverage: 5.35% lines.

That's a proud number!


Error installing database extensions

ActiveRecord::StatementInvalid: PG::InsufficientPrivilege: ERROR:  permission denied to create extension "pg_trgm"
HINT:  Must be superuser to create this extension.
: CREATE EXTENSION IF NOT EXISTS "pg_trgm"
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activerecord-5.0.1/lib/active_record/connection_adapters/postgresql_adapter.rb:598:in `async_exec'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activerecord-5.0.1/lib/active_record/connection_adapters/postgresql_adapter.rb:598:in `block in exec_no_cache'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activerecord-5.0.1/lib/active_record/connection_adapters/abstract_adapter.rb:589:in `block in log'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activesupport-5.0.1/lib/active_support/notifications/instrumenter.rb:21:in `instrument'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activerecord-5.0.1/lib/active_record/connection_adapters/abstract_adapter.rb:583:in `log'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activerecord-5.0.1/lib/active_record/connection_adapters/postgresql_adapter.rb:598:in `exec_no_cache'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activerecord-5.0.1/lib/active_record/connection_adapters/postgresql_adapter.rb:585:in `execute_and_clear'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activerecord-5.0.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:103:in `exec_query'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activerecord-5.0.1/lib/active_record/connection_adapters/postgresql_adapter.rb:333:in `enable_extension'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activerecord-5.0.1/lib/active_record/migration.rb:846:in `block in method_missing'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activerecord-5.0.1/lib/active_record/migration.rb:815:in `block in say_with_time'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activerecord-5.0.1/lib/active_record/migration.rb:815:in `say_with_time'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activerecord-5.0.1/lib/active_record/migration.rb:835:in `method_missing'
/home/mnyon/code/Client2018/db/schema.rb:17:in `block in <top (required)>'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activerecord-5.0.1/lib/active_record/schema.rb:48:in `instance_eval'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activerecord-5.0.1/lib/active_record/schema.rb:48:in `define'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activerecord-5.0.1/lib/active_record/schema.rb:44:in `define'
/home/mnyon/code/Client2018/db/schema.rb:13:in `<top (required)>'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:287:in `load'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:287:in `block in load'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:259:in `load_dependency'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:287:in `load'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activerecord-5.0.1/lib/active_record/tasks/database_tasks.rb:223:in `load_schema'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activerecord-5.0.1/lib/active_record/tasks/database_tasks.rb:253:in `block in load_schema_current'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activerecord-5.0.1/lib/active_record/tasks/database_tasks.rb:292:in `block in each_current_configuration'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activerecord-5.0.1/lib/active_record/tasks/database_tasks.rb:291:in `each'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activerecord-5.0.1/lib/active_record/tasks/database_tasks.rb:291:in `each_current_configuration'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activerecord-5.0.1/lib/active_record/tasks/database_tasks.rb:252:in `load_schema_current'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activerecord-5.0.1/lib/active_record/railties/databases.rake:260:in `block (3 levels) in <top (required)>'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/airbrake-5.8.1/lib/airbrake/rake/task_ext.rb:19:in `execute'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activerecord-5.0.1/lib/active_record/railties/databases.rake:264:in `block (3 levels) in <top (required)>'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/airbrake-5.8.1/lib/airbrake/rake/task_ext.rb:19:in `execute'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/rake-12.3.1/exe/rake:27:in `<top (required)>'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/bin/ruby_executable_hooks:15:in `eval'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/bin/ruby_executable_hooks:15:in `<main>'

Caused by:
PG::InsufficientPrivilege: ERROR:  permission denied to create extension "pg_trgm"
HINT:  Must be superuser to create this extension.
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activerecord-5.0.1/lib/active_record/connection_adapters/postgresql_adapter.rb:598:in `async_exec'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activerecord-5.0.1/lib/active_record/connection_adapters/postgresql_adapter.rb:598:in `block in exec_no_cache'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activerecord-5.0.1/lib/active_record/connection_adapters/abstract_adapter.rb:589:in `block in log'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activesupport-5.0.1/lib/active_support/notifications/instrumenter.rb:21:in `instrument'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activerecord-5.0.1/lib/active_record/connection_adapters/abstract_adapter.rb:583:in `log'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activerecord-5.0.1/lib/active_record/connection_adapters/postgresql_adapter.rb:598:in `exec_no_cache'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activerecord-5.0.1/lib/active_record/connection_adapters/postgresql_adapter.rb:585:in `execute_and_clear'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activerecord-5.0.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:103:in `exec_query'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activerecord-5.0.1/lib/active_record/connection_adapters/postgresql_adapter.rb:333:in `enable_extension'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activerecord-5.0.1/lib/active_record/migration.rb:846:in `block in method_missing'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activerecord-5.0.1/lib/active_record/migration.rb:815:in `block in say_with_time'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activerecord-5.0.1/lib/active_record/migration.rb:815:in `say_with_time'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activerecord-5.0.1/lib/active_record/migration.rb:835:in `method_missing'
/home/mnyon/code/Client2018/db/schema.rb:17:in `block in <top (required)>'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activerecord-5.0.1/lib/active_record/schema.rb:48:in `instance_eval'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activerecord-5.0.1/lib/active_record/schema.rb:48:in `define'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activerecord-5.0.1/lib/active_record/schema.rb:44:in `define'
/home/mnyon/code/Client2018/db/schema.rb:13:in `<top (required)>'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:287:in `load'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:287:in `block in load'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:259:in `load_dependency'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:287:in `load'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activerecord-5.0.1/lib/active_record/tasks/database_tasks.rb:223:in `load_schema'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activerecord-5.0.1/lib/active_record/tasks/database_tasks.rb:253:in `block in load_schema_current'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activerecord-5.0.1/lib/active_record/tasks/database_tasks.rb:292:in `block in each_current_configuration'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activerecord-5.0.1/lib/active_record/tasks/database_tasks.rb:291:in `each'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activerecord-5.0.1/lib/active_record/tasks/database_tasks.rb:291:in `each_current_configuration'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activerecord-5.0.1/lib/active_record/tasks/database_tasks.rb:252:in `load_schema_current'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activerecord-5.0.1/lib/active_record/railties/databases.rake:260:in `block (3 levels) in <top (required)>'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/airbrake-5.8.1/lib/airbrake/rake/task_ext.rb:19:in `execute'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/activerecord-5.0.1/lib/active_record/railties/databases.rake:264:in `block (3 levels) in <top (required)>'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/airbrake-5.8.1/lib/airbrake/rake/task_ext.rb:19:in `execute'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/gems/rake-12.3.1/exe/rake:27:in `<top (required)>'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/bin/ruby_executable_hooks:15:in `eval'
/home/mnyon/.rvm/gems/ruby-2.4.1@client/bin/ruby_executable_hooks:15:in `<main>'

This was resolved by combining trust authentication & specifying a db username.


Dependencies feature does not consider relationships to other tables

Currently if I click on a Dimension table and use the dependencies method it will not tell me if another table depends on it or vice versa based on a relationship. This would be very useful as although you can generally identify the many table side from the relationships list the "one" side of the relationship is not orderable. It would be very useful if both sides were considered in the Dependencies feature.

Although this is a good suggestion, I would like to keep the "Show dependencies" feature as it is, since strictly speaking, you could have a relationship between two tables without there being a dependency from a DAX point of view. Removing a dimension table from a model, for example, would generally not break anything, unless you have calculated columns or measures that explicitly reference columns from that dimension - and in that case, they would appear in the "Show dependencies" box.
So if all you need, is a quick way to determine what relationships exist on any given table, I suggest you simply type the name of the table into the Filter-box and hit [Enter], and you should see only relationships in which that table participates (enclose the table name with single quotes to avoid partial matches):

Do you think this is workable?

otykier, in my opinion relationships should be shown in the dependencies.  Relationships are a part of the model and when I use the dependencies feature I want to see everything that references the object.  I'm not understanding why seeing the relationships in the dependency view would be a bad thing.  I would think that if we don't care about the relationship part, we could just ignore that information.
If you prefer not to  show relationships in the 'dependencies' list, how about a 'find all usages' feature?
Just my opinion, thanks for providing this great tool to the community.  It's outstanding.

I understand what you are saying that a relationship isn't strictly a dependency however the dependencies does provide a very useful recursive model which would be a very useful developer tool. And you already have a great UI for this ready and waiting.
The way that I see it is that us developers will want to know what we are likely to break given a certain change in structure and we use the Dependencies feature to find this out . Now DAX will be an immediate break which is what it shows and we would need to fix that, but the relationships would be a "hidden" break that could just break peoples reports that are based on our reports. It would be very useful to see this without having to remember to check in this other way also..
I guess we can manually go through multiple layers of relationships by using the filter as you suggest but this is very cumbersome especially in complex models with multiple layers of tables. Having a different icon to show a relationship "dependency" seemed to be a nice solution to this.
Is this a lot of work or is there some other reason why you don't really want to implement this?

Thanks for the comments, both of you. It's not a lot of work, I guess I just never saw much need for this myself. I see your point, though, but I have some concerns:

The icons in the UI show what type of objects are involved in the dependencies, not the type of the dependency between them, which would make it difficult to distinguish between DAX dependencies and relationships.
Directionality - when a relationships exists between two tables, the notion of "Show objects on which X depend" versus "Show objects that depend on X" would be confusing, I think. Especially for relationships using bi-directional filtering.
Should the UI represent relationships between two columns as dependencies between the two, or rather as dependencies between their parent tables?
Should inactive relationships be shown as well?

In fact, thinking about this, I guess the best option would be to add a 3rd radio button, "(o) Show relationships starting from X". When clicked, the UI would simply show a tree starting with the currently selected object (column or table), and as you expand the tree you can follow the relationships outward as deep as you need. I guess inactive relationships could be indicated visually.
Kindly let me know what you think about this?

Yeah i think your suggestions are exactly where i was going as you posed the questions. Thinking further it might be useful to indicate [1..] [..1] or [1..1] perhaps at the beginning of the node name and also filter direction somehow.
Get Outlook for Androidhttps://aka.ms/ghei36

From: Daniel Otykier<EMAIL_ADDRESS>Sent: Friday, September 1, 2017 6:54:11 PM
To: otykier/TabularEditor
Cc: Brett Gerhardi; Author
Subject: Re: [otykier/TabularEditor] Dependencies feature does not consider relationships to other tables (#91)
Thanks for the comments, both of you. It's not a lot of work, I guess I just never saw much need for this myself. I see your point, though, but I have some concerns:

The icons in the UI show what type of objects are involved in the dependencies, not the type of the dependency between them, which would make it difficult to distinguish between DAX dependencies and relationships.
Directionality - when a relationships exists between two tables, the notion of "Show objects on which X depend" versus "Show objects that depend on X" would be confusing, I think. Especially for relationships using bi-directional filtering.
Should the UI represent relationships between two columns as dependencies between the two, or rather as dependencies between their parent tables?
Should inactive relationships be shown as well?

In fact, thinking about this, I guess the best option would be to add a 3rd radio button, "(o) Show relationships starting from X". When clicked, the UI would simply show a tree starting with the currently selected object (column or table), and as you expand the tree you can follow the relationships outward as deep as you need. I guess inactive relationships could be indicated visually.
Kindly let me know what you think about this?
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHubhttps://github.com/otykier/TabularEditor/issues/91#issuecomment-326644743, or mute the threadhttps://github.com/notifications/unsubscribe-auth/ANDw5xAUjDxVurCf_teD3rAW0K-KH3beks5seETDgaJpZM4PJGdh.

Hi all,
I have been working on adding this feature to the "Show dependencies" box. Currently, it looks like this:

The 1's and n's indicate cardinality between the parent node's table and the child table, the arrow indicates filter direction and gray text indicates an inactive relationship. Tooltip shows the name of the relationship, indicating which columns participate. For now, this only works when a table object is selected in the Explorer Tree.
Would this be useful in your case?

Looks great! Do you have a double ended arrow for bi-directional filter?
From: Daniel Otykier<EMAIL_ADDRESS>Sent: 08 September 2017 20:25
To: otykier/TabularEditor<EMAIL_ADDRESS>Cc: Brett Gerhardi<EMAIL_ADDRESS>Author<EMAIL_ADDRESS>Subject: Re: [otykier/TabularEditor] Dependencies feature does not consider relationships to other tables (#91)
Hi all,
I have been working on adding this feature to the "Show dependencies" box. Currently, it looks like this:
[image]https://user-images.githubusercontent.com/8976200/30227857-9016db9c-94db-11e7-8db9-6368e1729df3.png
The 1's and n's indicate cardinality between the parent node's table and the child table, the arrow indicates filter direction and gray text indicates an inactive relationship. Tooltip shows the name of the relationship, indicating which columns participate. For now, this only works when a table object is selected in the Explorer Tree.
Would this be useful in your case?
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHubhttps://github.com/otykier/TabularEditor/issues/91#issuecomment-328192681, or mute the threadhttps://github.com/notifications/unsubscribe-auth/ANDw54DXLgCCn8Jvxs6wrP4QzjphY3cCks5sgZSXgaJpZM4PJGdh.

Sure - I just use these unicode symbols:
←
→
↔

Looks great!
One thought on this, it would be really useful if we could copy and paste as text and this is represented as an indented hierarchy. Also it would be useful to be able to exclude inactive relationships.
We maintain a document for our analysts that lists the active relationships and it would be great if this was a simple copy/paste job
Thanks!
Get Outlook for Androidhttps://aka.ms/ghei36

From: Daniel Otykier<EMAIL_ADDRESS>Sent: Friday, September 8, 2017 10:50:53 PM
To: otykier/TabularEditor
Cc: Brett Gerhardi; Author
Subject: Re: [otykier/TabularEditor] Dependencies feature does not consider relationships to other tables (#91)
Sure - I just use these unicode symbols:
←
→
↔
[image]https://user-images.githubusercontent.com/8976200/30232468-87fcad00-94f0-11e7-952c-1ea2daaccbe3.png
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHubhttps://github.com/otykier/TabularEditor/issues/91#issuecomment-328222307, or mute the threadhttps://github.com/notifications/unsubscribe-auth/ANDw508afpAelaxVvgkG32N85rPTQArmks5sgba9gaJpZM4PJGdh.

Added a right-click menu to the dialog, and a checkbox to show/hide inactive relationships:

You have two options for exporting the tree. The first (Ctrl+C) is just a simple indented hierarchy, similar to what you see on the screen. In the clipboard it will look like this:
(1 → n) 'Internet Sales'
    (n ← 1) 'Customer'
        (n ← 1) 'Geography'
    (n ← 1) 'Product'
        (n ← 1) 'Product Subcategory'
            (n ← 1) 'Product Category'
    (n ← 1) 'Promotion'
    (n ← 1) 'Sales Territory'
    (n ← 1) 'Currency'

The JSON option will provide more details about the relationships and the involved objects:
{
  "ObjectType": "Table",
  "ObjectName": "Internet Sales",
  "RelatedTo": [
    {
      "ObjectType": "Table",
      "ObjectName": "Customer",
      "ByRelationship": {
        "DisplayName": "'Internet Sales'[CustomerKey] --> 'Customer'[CustomerKey]",
        "IsActive": true,
        "FromColumn": "'Internet Sales'[CustomerKey]",
        "FromCardinality": "Many",
        "ToColumn": "'Customer'[CustomerKey]",
        "ToCardinality": "One",
        "CrossFilteringBehavior": "OneDirection"
      },
      "RelatedTo": [
        { ... }
      ]
    }
  ]
}

The JSON output could be pulled into a tool such as Power Query, to easily extract whatever information you need from it.

Fantastic, that lools awesome thanks!
Get Outlook for Androidhttps://aka.ms/ghei36

From: Daniel Otykier<EMAIL_ADDRESS>Sent: Monday, September 25, 2017 10:01:01 PM
To: otykier/TabularEditor
Cc: Brett Gerhardi; Author
Subject: Re: [otykier/TabularEditor] Dependencies feature does not consider relationships to other tables (#91)
Added a right-click menu to the dialog, and a checkbox to show/hide inactive relationships:
[image]https://user-images.githubusercontent.com/8976200/30830499-7db46dea-a244-11e7-9561-d329e337efa6.png
You have two options for exporting the tree. The first (Ctrl+C) is just a simple indented hierarchy, similar to what you see on the screen. In the clipboard it will look like this:
(1 → n) 'Internet Sales'
(n ← 1) 'Customer'
(n ← 1) 'Geography'
(n ← 1) 'Product'
(n ← 1) 'Product Subcategory'
(n ← 1) 'Product Category'
(n ← 1) 'Promotion'
(n ← 1) 'Sales Territory'
(n ← 1) 'Currency'
The JSON option will provide more details about the relationships and the involved objects:
{
"ObjectType": "Table",
"ObjectName": "Internet Sales",
"RelatedTo": [
{
"ObjectType": "Table",
"ObjectName": "Customer",
"ByRelationship": {
"DisplayName": "'Internet Sales'[CustomerKey] --> 'Customer'[CustomerKey]",
"IsActive": true,
"FromColumn": "'Internet Sales'[CustomerKey]",
"FromCardinality": "Many",
"ToColumn": "'Customer'[CustomerKey]",
"ToCardinality": "One",
"CrossFilteringBehavior": "OneDirection"
},
"RelatedTo": [
{ ... }
]
}
]
}
The JSON output could be pulled into a tool such as Power Query, to easily extract whatever information you need from it.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHubhttps://github.com/otykier/TabularEditor/issues/91#issuecomment-332011329, or mute the threadhttps://github.com/notifications/unsubscribe-auth/ANDw54FyJfLcSdHBd5XgNHib1TsjPFVaks5smBSNgaJpZM4PJGdh.


[Fix #7827] Add pre-commit hook

Add an entry point (hook) for using RuboCop with the pre-commit
framework. The entry point allows users to add a minimal pre-commit
config to their project and then it will run RuboCop on commit.
For details on the pre-commit project, see: https://pre-commit.com/.
Here is the framework's introduction:

Git hook scripts are useful for identifying simple issues before
submission to code review. We run our hooks on every commit to
automatically point out issues in code such as missing semicolons,
trailing whitespace, and debug statements. By pointing these issues
out before code review, this allows a code reviewer to focus on the
architecture of a change while not wasting time with trivial style
nitpicks.
As we created more libraries and projects we recognized that sharing
our pre-commit hooks across projects is painful. We copied and pasted
unwieldy bash scripts from project to project and had to manually
change the hooks to work for different project structures.
We believe that you should always use the best industry standard >
linters. Some of the best linters are written in languages that you do
not use in your project or have installed on your machine. For example
scss-lint is a linter for SCSS written in Ruby. If you’re writing a
project in node you should be able to use scss-lint as a pre-commit
hook without adding a Gemfile to your project or understanding how to
get scss-lint installed.
We built pre-commit to solve our hook issues. It is a multi-language
package manager for pre-commit hooks. You specify a list of hooks you
want and pre-commit manages the installation and execution of any hook
written in any language before every commit. pre-commit is
specifically designed to not require root access. If one of your
developers doesn’t have node installed but modifies a JavaScript file,
pre-commit automatically handles downloading and building node to run
eslint without root.

Fixes #7827
Closes #8969
Co-Authored-By: Adithya Balaji<EMAIL_ADDRESS>
Before submitting the PR make sure the following are checked:

[x] The PR relates to only one subject with a clear title and description in grammatically correct, complete sentences.
[x] Wrote good commit messages.
[x] Commit message starts with [Fix #issue-number] (if the related issue exists).
[x] Feature branch is up-to-date with master (if not - rebase it).
[x] Squashed related commits together.
[ ] Added tests. (N/A)
[x] Ran bundle exec rake default. It executes all tests and runs RuboCop on its own code.
[x] Added an entry (file) to the changelog folder named {change_type}_{change_description}.md if the new code introduces user-observable changes. See changelog entry format for details.

Thanks!

Thanks!


Error while fitting the model

Hi,
I ran to this bug while fitting the model. I checked the data and everything looks good. I don't get the root cause of this error.
File /opt/conda/lib/python3.8/site-packages/causalnlp/meta/slearner.py:80, in BaseSLearner.fit(self, X, treatment, y, p)
     78 mask = (treatment == group) | (treatment == self.control_name)
     79 treatment_filt = treatment[mask]
---> 80 X_filt = X[mask]
     81 y_filt = y[mask]
     83 w = (treatment_filt == group).astype(int)

IndexError: boolean index did not match indexed array along dimension 0

Hello:  If you're able to post an example on Google Colab that reproduces the problem and post the link here, I can look at it to see what's happening. Thanks.


Do these primitives cover all possible arc tests?

Do we know if composing these primitives, and these primitives alone, would cover every possible arc puzzle? Or could it be the case that there are puzzles that cannot be solved by a composition of these primitives, and would require new primitives being developed? I noticed that you do solve for all 400, but I'm curious about future puzzles.
Perhaps this isn't even an answerable question, but I'm sure you've put some thought into this: Whether there are primitives that are low level enough to be composable in enough ways (within a reasonable number of base primitives, i.e. not requiring the composition of hundreds of base primitives) to build any possible primitive to solve any possible arc puzzle imaginable. I suppose you could look at this is a question in the realm of turing completeness for the arc puzzle domain.

Good question.
Given that ARC (as a puzzle domain - not as the fixed set of 1000 tasks) by definition kind of allows any task that can be viewed as a mix of only the core knowledge priors, which are arguably almost all-encompassing, it seems to me that for a DSL to be "ARC-complete" it also needs to also be (quasi) Turing-complete in the first place as a necessary condition. While I haven't tried to proved it, I'm pretty sure that this DSL is turing-complete. Then again, I think that getting sufficient expressivity of a DSL (say defining "sufficient" as "there exists a pure-DSL program for >= 85% of the hidden test tasks") is not the hard part or the part to worry about. You nailed it by writing "not requiring the composition of hundreds of base primitives": There is a trade-off between the expressivity of the DSL and the conciseness of the solution programs (i.e. the larger they are, the harder they are to construct/be found/be verified etc.).
Two (fun) facts that may be helpful here:

After I fixed the DSL by only informing it by the training set, I used the DSL to write solution programs for all the evaluation tasks too, among other reasons to "test" the DSL. That was doable, and while some of the solver programs for evaluation tasks required usage of very many dozens of DSL primitive calls, I managed to write a pure-DSL program for all the 400 evaluation tasks, only the median solver size was a bit bigger (though arguably the evaluation set is also harder than the training set, so hard to separate out the effect of e.g. "overfitting the DSL to the training set"). So that's partly where I get my "DSL expressivity per se is not an issue" intuition.

I once rewrote >80% of my DSL within itself, i.e. compressed the DSL down to only 28 base primitives (I stopped there not because it couldn't have been compressed further, but because it was getting cumbersome because of circular dependency issues etc. and didn't really plan to use it anyway), so a DSL of this size is definitely not needed to have the same expressivity! I myself am very unsure about the ideal number of primitives for an "optimal DSL" (where obviously what constitutes an optimal DSL arguably largely depends on the specific use case in the first place, i.e. how it is intended to be used).

E.g. I did things like these:
def invert(n): return multiply(n, NEG_ONE)
def even(n): return equality(double(halve(n)), n)
def double(n): return multiply(n, TWO)
def increment(x): return add(x, ONE)
def positive(x): return greater(x, ZERO)
...
Hopefully that is useful!
PS: I am happy to take "adversarial attacks" to the DSL as a fun challenge, i.e. anyone coming up with a new ARC-task and challenging me to write a pure-DSL solution program for it.

@michaelhodel Thanks for the thoughtful response.
Since you've offered, how about this for a challenge? I have no idea if this is something that is already covered by the existing Arc challenges, it was something I was curious about (whether wrapping was something that was currently used in puzzles), so if it is, perhaps you've already encountered this.
Anyway, the idea is puzzles that utilizing toroidal grid wrapping. There are a lot of unique twists you could do on this concept too, for example, wrapped elements could mirror in the opposite of the expected position, they could flip bits/colors, overlapping elements could cancel each-other out, and so forth. But to keep it simple, here's a basic demo of what I mean (ignore the messy code, got ChatGPT to help me hack it up - it's pretty gross, but can help you generate your own combinations if it's something you wanted to experiment with, and it provides the arrays):
https://codepen.io/Patrick-OBrien/pen/mdYqayG
And some screenshots to illustrate:

@nullbio I don't get the task you posted but you can definitely solve wrapping tasks:
from random import randint, sample, choice
from dsl import *

import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap, Normalize

def plot_task(task):
    """ plots a task """
    cmap = ListedColormap([
        '#000', '#0074D9', '#FF4136', '#2ECC40', '#FFDC00',
        '#AAAAAA', '#F012BE', '#FF851B', '#7FDBFF', '#870C25'
    ])
    norm = Normalize(vmin=0, vmax=9)
    args = {'cmap': cmap, 'norm': norm}
    height = 2
    width = len(task)
    figure_size = (width * 2, height * 2)
    figure, axes = plt.subplots(height, width, figsize=figure_size)
    if width == 1:
        axes[0].imshow(task[0]['input'], **args)
        axes[1].imshow(task[0]['output'], **args)
        axes[0].axis('off')
        axes[1].axis('off')
    else:
        for column, example in enumerate(task):
            axes[0, column].imshow(example['input'], **args)
            axes[1, column].imshow(example['output'], **args)
            axes[0, column].axis('off')
            axes[1, column].axis('off')
    figure.set_facecolor('#1E1E1E')
    plt.subplots_adjust(wspace=0.1, hspace=0.1)
    plt.show()

def generate_wrap_example(di, dj):
    h = randint(5, 10)
    w = randint(5, 10)
    bgc = randint(0, 9)
    c = canvas(bgc, (h, w))
    remc = remove(bgc, interval(0, 10, 1))
    nc = randint(1, (h*w)//2-1)
    locs = sample(totuple(asindices(c)), nc)
    obj = {(choice(remc), ij) for ij in locs}
    gi = paint(c, obj)
    rotf = lambda cij: (cij[0], ((cij[1][0]+di)%h, (cij[1][1]+dj)%w))
    go = paint(c, apply(rotf, obj))
    return {"input": gi, "output": go}

def solve_wrap_example(I, di, dj):
    h = height(I)
    w = width(I)
    ofsf = rbind(add, astuple(di, dj))
    imodh = fork(subtract, identity, compose(rbind(multiply, h), rbind(divide, h)))
    jmodw = fork(subtract, identity, compose(rbind(multiply, w), rbind(divide, w)))
    rotf = fork(astuple, compose(imodh, first), compose(jmodw, last))
    f = fork(astuple, first, chain(rotf, ofsf, last))
    obj = merge(fgpartition(I))
    O = paint(cover(I, obj), apply(f, obj))
    return O

ntasks = 4
nexpertask = 6
maxshift = 3
for _ in range(ntasks):
    di = randint(-maxshift, maxshift)
    dj = randint(-maxshift, maxshift)
    print(di, dj)
    t = [generate_wrap_example(di, dj) for k in range(nexpertask)]
    assert all(solve_wrap_example(ex['input'], di, dj) == ex['output'] for ex in t)
    plot_task(t)


Bytesize not updated

Describe the bug
When resetting the artifacts data the artifact bytesize is not cleared.
To Reproduce
Look at ArtifactFactory::updateByteSize.
When the new bytes are null no changes are applied.
Expected behavior
When setting no data, the bytesize and checksum should be 0.
Desktop (please complete the following information):

Version (DSC) any

Consuming resources (e.g. via DSC UI) saves byteSize and checkSum in "additional" and not in artifact fields itself.
updateByteSize isn't working on the "additional" fields for consumed resources.


Update release date for core

API change check
API changes are not detected in this pull request.

macoslatest_pypy39_azureidentityazurekeyvaultkeysazuremgmtcomputeazuremgmtcoreazureservicebusazurest - this has to be an error ?

Per the error message:
Traceback (most recent call last):
File "/Users/runner/work/1/s/scripts/devops_tasks/use_pypy_version.py", line 85, in
discovered_installer_location = find_pypy_version(version_from_spec)
File "/Users/runner/work/1/s/scripts/devops_tasks/use_pypy_version.py", line 52, in find_pypy_version
discovered_locations = walk_directory_for_pattern(spec)
File "/Users/runner/work/1/s/scripts/devops_tasks/use_pypy_version.py", line 22, in walk_directory_for_pattern
discovered_tool_folders = os.listdir(pypy_tool_cache)
FileNotFoundError: [Errno 2] No such file or directory: '/Users/runner/hostedtoolcache/PyPy'
It is a pipeline error.

Per the error message:
Traceback (most recent call last): File "/Users/runner/work/1/s/scripts/devops_tasks/use_pypy_version.py", line 85, in discovered_installer_location = find_pypy_version(version_from_spec) File "/Users/runner/work/1/s/scripts/devops_tasks/use_pypy_version.py", line 52, in find_pypy_version discovered_locations = walk_directory_for_pattern(spec) File "/Users/runner/work/1/s/scripts/devops_tasks/use_pypy_version.py", line 22, in walk_directory_for_pattern discovered_tool_folders = os.listdir(pypy_tool_cache) FileNotFoundError: [Errno 2] No such file or directory: '/Users/runner/hostedtoolcache/PyPy'
It is a pipeline error.

Yeah this popped up yesterday due to agent changes on the macos agent. I'm working on a solution, feel free to check-enforcer ignore.

/check-enforcer override


Augment globs to collect nvidia gpu logs

What this PR does / why we need it:
Augment the collected logs from aks-log-collector to also collect the NVIDIA gpu  install logs
Which issue(s) this PR fixes:

Fixes #
Requirements:

[ ] uses conventional commit messages

[ ] includes documentation
[ ] adds unit tests
[ ] tested upgrade from previous version

Special notes for your reviewer:
Release note:
none

Pull Request Test Coverage Report for Build<PHONE_NUMBER>4
Details

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

Totals

Change from base Build<PHONE_NUMBER>6:
0.0%

Covered Lines:
2590

Relevant Lines:
3634

💛  - Coveralls


FIX: creating LoginForm from Authenticator

missing arguments and arguments mismatch when creating SamlLoginForm from SamlAuthenticator
adding a phpdoc note about unused constructor argument

Rebased to fix build issue

I'll fix the other build separately, thanks


Dev container port fix

To be consistent with running directly in Docker, when running in the Dev Container, this change exposes the application on port 80 locally and port 3978 in the host.
If the emulator is running in the Dev Container:

If you are connecting from another Docker container or Dev Container instance, make sure it's on the shared network and connect on port 80 using the hostname emulator (ie http://emulator:80).
If you are connecting from the host, connect using http://localhost:3978.

For details of the shared network, see devcontainer.json runArgs.

Reverting as there's a simpler way to do this.


OverflowError: int too big to convert

when publisher_id =128 throw exception
File "/XXX/venv/lib/python3.10/site-packages/rstream/encoding.py", line 139, in encode_publish
fp_write(frame.publisher_id.to_bytes(length=1, byteorder="big", signed=True))

Thank you for reporting
yes, this fp_write(frame.publisher_id.to_bytes(length=1, byteorder="big", signed=True)) should be fp_write(frame.publisher_id.to_bytes(length=1, byteorder="big", signed=False))

@afutureboss  FYI:  #154

@afutureboss https://github.com/qweeze/rstream/releases/tag/0.14.2 let us know!


  The changes look good.  What was the effect of the world map bug?

There was a small patch for the Co8 dll that prevented writing to unbound memory in the UiResize func. It was being applied to vanilla too, which caused a button to not be relocated and hence displaced.
Also I was using IsCo8 before ModSupport was inited.