[hotfix] does not showing notebooklist on navbar

What is this PR for?
Currently, if you enabled for shiro then
not showing notebook list on navbar.
(If you refresh, it's well viewwing.)
i resolve this problem.
What type of PR is it?
Bug Fix
Todos

[x] fixed a bug ( navbar.controller.js)
[x] added testcase

How should this be tested?

endabled shiro (per user login)
login.
on click to notebook menu on navbar.

Screenshots (if appropriate)
before

resolve after (on this pr)

Questions:

Does the licenses files need update? no
Is there breaking changes for older versions? no
Does this needs documentation? no

Looks great to me, thank you for updated integration tests @cloverhearts !
CI fails on 2 profiles
Results :

Tests in error:
  InterpreterRestApiTest.init:57->AbstractTestRestApi.startUp:233->AbstractTestRestApi.start:201 Â» NullPointer
  CredentialsRestApiTest.init:46->AbstractTestRestApi.startUp:233->AbstractTestRestApi.start:201 Â» NullPointer
  ZeppelinRestApiTest.init:59->AbstractTestRestApi.startUp:233->AbstractTestRestApi.start:201 Â» NullPointer
  NotebookRestApiTest.init:58->AbstractTestRestApi.startUp:233->AbstractTestRestApi.start:201 Â» NullPointer
  SecurityRestApiTest.init:44->AbstractTestRestApi.startUp:233->AbstractTestRestApi.start:201 Â» NullPointer
  NotebookRepoRestApiTest.init:52->AbstractTestRestApi.startUp:233->AbstractTestRestApi.start:201 Â» NullPointer
  ConfigurationsRestApiTest.init:39->AbstractTestRestApi.startUp:233->AbstractTestRestApi.start:201 Â» NullPointer
  ZeppelinSparkClusterTest.init:52->AbstractTestRestApi.startUp:233->AbstractTestRestApi.start:201 Â» NullPointer
  NotebookSecurityRestApiTest.init:49->AbstractTestRestApi.startUpWithAuthenticationEnable:229->AbstractTestRestApi.start:201 Â» NullPointer

and

Tests in error:
  NotebookTest.testPerNoteSessionInterpreter:814 Â» NullPointer

which seems flaky not relevant.
Merging to master as a hotfix, if there is no further discussion.

Tested and LGTM!

Thank you @khalidhuseynov for prompt review!


v0.1.0 integration need to be reconfigured after each HA restart

I got the new oath 2.0 credentials from Flair yesterday and tried the update, but now each time I restart it's asking for these credentials. Nothing in the log to help. It seems that some of the flair devices start loading at least, but I'm still getting the reconfigure prompt after each restart. I'll post what I see in the logs at least for reference since it doesn't look like there are any issues popping up, but I don't know what to add to the config to debug further. I'm going to downgrade for now

.

Did you delete your old Flair configuration from the integrations page and set it up fresh?

Sorry right as I posted the issue I went back to review the v0.1.0 notes and saw you said that. I took the easy route originally but yes this seems to have fixed my issue. Sorry to take up your time. I appreciate your reallyyyy fast response!!

No problem at all! You caught me at a time I was on my phone and saw the GitHub notification.


Stack Overflow when defining method_missing macro

When I added this to my library:
    macro method_missing(method)
      def {{method}}
        @language.find_rule(method)
      end
    end

I got a stack overflow error:
~/s/language> cs
Stack overflow (e.g., infinite or very deep recursion)
[0x104570488] *Exception::CallStack::print_backtrace:Nil +104 in /Users/dorianmariefr/.cache/crystal/crystal-run-spec.tmp
[0x104558848] ~procProc(Int32, Pointer(LibC::SiginfoT), Pointer(Void), Nil)@/Users/dorianmariefr/.asdf/installs/crystal/1.4.1/src/signal.cr:127 +340 in /Users/dorianmariefr/.cache/crystal/crystal-run-spec.tmp
[0x1952b04e4] _sigtramp +56 in /usr/lib/system/libsystem_platform.dylib
[0x1046592b8] *Language::Definition#method:NoReturn +12 in /Users/dorianmariefr/.cache/crystal/crystal-run-spec.tmp (522911 times)
[0x1046592ac] *Language::Definition#a:NoReturn +12 in /Users/dorianmariefr/.cache/crystal/crystal-run-spec.tmp
[0x10455c330] ~procProc(Nil)@spec/language_spec.cr:58 +116 in /Users/dorianmariefr/.cache/crystal/crystal-run-spec.tmp
[0x104632190] *Spec::RootContext#describe<String, String, Int32, Int32, Bool, Nil, &Proc(Nil)>:Nil +228 in /Users/dorianmariefr/.cache/crystal/crystal-run-spec.tmp
[0x10455b9d8] *describe<String, String, Int32, Int32, Bool, Nil, &Proc(Nil)>:Nil +80 in /Users/dorianmariefr/.cache/crystal/crystal-run-spec.tmp
[0x10455b97c] *context<String, String, Int32, Int32, &Proc(Nil)>:Nil +80 in /Users/dorianmariefr/.cache/crystal/crystal-run-spec.tmp
[0x10455b144] ~procProc(Nil)@spec/language_spec.cr:3 +248 in /Users/dorianmariefr/.cache/crystal/crystal-run-spec.tmp
[0x104632190] *Spec::RootContext#describe<String, String, Int32, Int32, Bool, Nil, &Proc(Nil)>:Nil +228 in /Users/dorianmariefr/.cache/crystal/crystal-run-spec.tmp
[0x10455c398] *describe<Language.class, String, Int32, Int32, &Proc(Nil)>:Nil +100 in /Users/dorianmariefr/.cache/crystal/crystal-run-spec.tmp
[0x104548ed0] __crystal_main +1848 in /Users/dorianmariefr/.cache/crystal/crystal-run-spec.tmp
[0x1046600a8] *Crystal::main_user_code<Int32, Pointer(Pointer(UInt8))>:Nil +12 in /Users/dorianmariefr/.cache/crystal/crystal-run-spec.tmp
[0x10465fffc] *Crystal::main<Int32, Pointer(Pointer(UInt8))>:Int32 +44 in /Users/dorianmariefr/.cache/crystal/crystal-run-spec.tmp
[0x104552108] main +12 in /Users/dorianmariefr/.cache/crystal/crystal-run-spec.tmp

Debugging it, it seems like it's trying to redefine the "method" method.
Here is a branch of my very small project to reproduce it https://github.com/dorianmariefr/language/tree/crystal-stack-overflow-bug
> crystal version
Crystal 1.4.1 [b7377c041] (2022-04-22)

LLVM: 10.0.0
Default target: aarch64-apple-darwin

I think the gist of your problem is you prob want like @language.find_rule({{method.symbolize}}) not @language.find_rule(method). Without the {{ }} method is being treated as another method call, which doesn't exist, so it's executing the method_missing block which ultimately generates:
def blah
  @language.find_rule(method)
end

def method
  @language.find_rule(method)
end

Thus resulting an infinite recursion of the method method.
Going to close as I don't think there is anything actionale here.

A stack overflow in the compiler is definitely a bug. This must not happen.
The compiler should recognize recursion in method_missing and produce a meaningful error message to help the developer understand and solve the problem.

But this is a stack overflow when running the code, not in the compiler.

@asterite Right. Sry, I misinterpreted the error.
I was thinking the compiler could still be aware that the def generated by method_missing calls itself recursively? But I suppose we're in open territory here and it's hard to recognize this kind of problem.
It would be nice if the compiler could provide some kind of help here, though. It's an easy mistake to omit the macro braces.


Error running yarn

Hi. I tried running yarn on yangster but I get the following error:
src/frontend/yangdiagram/di.config.ts(22,38): error TS2345: Argument of type 'typeof TheiaKeyTool' is not assignable to parameter of type 'new (...args: any[]) => KeyTool'.
Type 'TheiaKeyTool' is not assignable to type 'KeyTool'.
Property 'actionDispatcher' is protected but type 'KeyTool' is not a class derived from 'KeyTool'.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
Any idea what's going on?

I get same/similar error, running on
yarn --version
1.12.3
on OS X 10.13.5
Python 2.7.15
npm 6.4.1
link to output

See https://github.com/theia-ide/yangster/issues/69

I added an intermediate fix, by synching the version of sprotty we use.


Deployment command on the blog post missing a parameter

Not exactly an issue in this repo, but the blog post you refer to (https://swift.cloud/blog/deploy-server-side-swift-applications-on-vercel) possibly contains an incorrect terminal command for deploying the app to Vercel. I think
swift package --disable-sandbox vercel

should be
swift package --disable-sandbox vercel --deploy

(at least that is the deploy command on the repo documentation.)

Thanks for reporting this. I just updated the blog post and actually changed the deploy command to:
swift package --disable-sandbox vercel deploy

However the old --deploy will continue to work


On some old galleries, getImageUrl is wrong

Environment

OS: MacOS Catalina 10.15.7
Nodejs: v16.13.2
Npm: 8.1.2

Code
const hitomi = require('node-hitomi').default;

const gallery hitomi.getGallery(1434389).then(image => {
    const isThumb = true; // same to false
    const ext = (isThumb ? (image.hasAvif ? 'avif' : image.extension) : (((image.hasAvif) ? 'avif' : ((image.hasWebp) ? 'webp' : image.extension))));
    const url = hitomi.getImageUrl(image, ext, {isThumbnail: isThumb})
    console.log(url); // it return wrong url
})

I try getImageUrl to gallery No 1434389, and it return wrong url.
I also try to connect url with Referer header, it same.
So i think Hitomi uses different image routing rules according to the presence of avif.

Thank you for creating an issue to inform me a bug!
I found some mistakes in your source code, but I'll assume that you used hitomi.getGallery's result named image as Gallery['files'][number]
Nevertheless, I noticed some structural changes in Hitomi's image system that didn't affect just limited galleries
And this time, I guarantee you that you will soon find the new version of this package (not like before)
Again, thanks for your contribution!
이슈 생성을 통해 버그를 보고해주셔서 감사합니다.
주신 코드에서 조금의 실수를 발견했지만 hitomi.getGallery의 결과인 image로 망명되는 인수를 hitomi.Gallery['files'][number]로써 사용하셨으리라 추정하겠습니다
그럼에도 불구하고, 한정된 겔러리에만 작용하는 것이 아닌 히토미 이미지 시스템의 구조적인 변화를 확인했습니다
그리고 이번에는 금방 새로운 버전을 내놓을 것을 장담드립니다 (이전과는 다르게 말이죠)
다시한번, 기여에 감사드립니다!

I just released a new release, please check it out for the package's new version!

I try new version, but hitomi.getImageUrl is work with only isThumbnail: true option.
Option isThumbnail: false returns a page that still does not exist.
새 버전을 시도해봤지만 isThumbnail이 true일때만 작동합니다.
isThumbnail가 false일때는 여전히 존재하지 않는 링크를 줍니다.

This requires some explanation
Before like a month ago, they used a kind of static method to get the url of the image
But after the change, they made an external element that can alter the url of the image so that they can block the outsiders' usage
One good thing is I'm finding a method to fix this problem by making hitomi.getImageUrl flexible (#36)
Anyway, as a temporary measure, I'll release a new version of this package
이건 설명이 좀 필요한데요
한 한 달 쯤 전에는 사진 링크를 얻는데 고정된 방법이 사용됐습니다
근데 언젠가부터 외부인의 사용을 막기 위해서인지 외부 요소가 사진 링크를 변경할 수 있게 바꿔놨더라고요
하나 희소식은 제가 hitomi.getImageUrl을 변화에 유연하게 반응할 수 있도록 바꾸는 방법을 찾고 있다는겁니다
아무튼 임시방편으로 새 버전을 출시하겠습니다

Oh okay. i will wait it
아 그렇군요 알겠습니다!

The new version has came out, please check it out!
I'll show you some example code for new version down below in javascript.
const hitomi = require('node-hitomi').default;

(async function () {
	const imageUrlResolver = new hitomi.ImageUrlResolver();

	await imageUrlResolver.synchronize();

	console.log(imageUrlResolver.getImageUrl(await hitomi.getGallery(/* any number */), 'webp'));
})();

새로운 버전이 출시했습니다, 확인해주세요!
아래에 자바스크립트로 새로운 버전을 위한 예시 코드를 보여드리겠습니다 (상단에 위치)

Hello, I'm still getting "some" wrong image url (404) even I already updated node-hitomi package to latest version (7.0.1)
My Code
const hitomi = require('node-hitomi').default;

(async function () {
    const imageUrlResolver = new hitomi.ImageUrlResolver();
    await imageUrlResolver.synchronize();
    const files = (await hitomi.getGallery(2163268)).files;

    files.forEach(file =>{
        console.log(imageUrlResolver.getImageUrl(file, 'webp'));
    })
})();

I got right image for first url, but 404 for second url and so on (random).
I already tried webp or avif but still no luck. Any help is appreciated. Thank you.

Hello, I'm still getting "some" wrong image url (404) even I already updated node-hitomi package to latest version (7.0.1)
My Code
const hitomi = require('node-hitomi').default;

(async function () {
    const imageUrlResolver = new hitomi.ImageUrlResolver();
    await imageUrlResolver.synchronize();
    const files = (await hitomi.getGallery(2163268)).files;

    files.forEach(file =>{
        console.log(imageUrlResolver.getImageUrl(file, 'webp'));
    })
})();

I got right image for first url, but 404 for second url and so on (random).
I already tried webp or avif but still no luck. Any help is appreciated. Thank you.

First of all, thank you for reporting the issue!
I'll soon start to examine for that problem, please wait until I find whats wrong.

Thank you for your hard work!
I already tested the latest version and now work like a charm.
I'll report if any weird bugs happen. Thank you so much!

And it's not working again. It's a cat and mouse game omg.
I got 404 for all image urls (avif or webp) using same code for testing latest version (7.0.2).
Sorry for taking your time.

Let me check the irregular, once more.
Give me some time, and I'll release a new version.

Don't worry, just take your time. Looking forward for new version! Cheers!

@ayenz
Okay, I just released the new version.
Just in case you're curious, the reason why the package didn't work was Hitomi's creation of another external element that can alter the url of the image.
As always, thank you for using and contributing to the package!

Updated to latest version, now it's working.
It's hard to maintain code for hitomi, even tachiyomi extension for hitomi was already dead.
Thank you for your hard work and make this happen!


[GOBBLIN-1988] Fail the streaming container when OOM issue happens

Dear Gobblin maintainers,
Please accept this PR. I understand that it will not be reviewed until I have checked off all the steps below!
JIRA

[ ] My PR addresses the following Gobblin JIRA issues and references them in the PR title. For example, "[GOBBLIN-XXX] My Gobblin PR"

https://issues.apache.org/jira/browse/GOBBLIN-1988

Description

[ ] Here are some details about my PR, including screenshots (if applicable):
Now when the OOM error happens, we just log out the error and keep the container running there without doing anything. In this case we should fail the container and retry the task.

Tests

[ ] My PR adds the following unit tests OR does not need testing for this extremely good reason:
Mock the OOM error and verified that before the change, task just hang there, and after the change, task got failed and retried as expected

Commits

[ ] My commits all reference JIRA issues in their subject lines, and I have squashed multiple commits if they address the same issue. In addition, my commits follow the guidelines from "How to write a good git commit message":

Subject is separated from body by a blank line
Subject is limited to 50 characters
Subject does not end with a period
Subject uses the imperative mood ("add", not "adding")
Body wraps at 72 characters
Body explains "what" and "why", not "how"

Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:

Comparison is base (694ed37) 47.58% compared to head (0e35039) 46.01%.
Report is 18 commits behind head on master.

Additional details and impacted files
@@             Coverage Diff              @@
##             master    #3862      +/-   ##
============================================
- Coverage     47.58%   46.01%   -1.58%
+ Complexity    11050     2185    -8865
============================================
  Files          2159      417    -1742
  Lines         85429    18054   -67375
  Branches       9493     2199    -7294
============================================
- Hits          40649     8307   -32342
+ Misses        41080     8861   -32219
+ Partials       3700      886    -2814

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.


Alpha Team Info

Please add your info to the Meet the Team section in the readme.md file.

I am working on this


[WIP] Database Helper - Initial work

What does this contain?

Initial work on an in memory database helper. I used lokijs  for this.
Seed data import mechanism.
Basic Create, Remove, Update, Delete functionality.
Documentation. This needs to be expanded, but the initial work is there.
Resolves #551
Rolls up changes in #549 (so I could remove it?), which resolves #540.

What's outstanding?

Unit tests
More documentation and examples.

Thanks for the pull request. However, I need to understand it a bit more
I never used LokiJS so I don't understand the use cases for it. Could you explain how do you use it?
Why Loki?

Hey 😄. Loki is just a mongoDB like in memory document store, the main reason I chose it is because it's really lightweight and provides a lot of functionality for it's footprint.
The reason I ended up using it was because I needed to effectively store some variables between tests to validate against in a later scenario. At the time I figured I could just use the filesystem helper, but static files proved insufficient for the task.
I think the best explanation would be to give you a more concise version of how I've used it in my own tests. I've added commentary inline:
let user, claimId;

Scenario("Enter user Details", function* (I) {

    //Here I am retrieving some user form data that I seeded before the test execution.
    //The arguments are the document store I am querying and the query object itself.
    //The first matching value is selected, but this can just as easily be used to randomise the selected user.
    user = yield I.findOne("users", {email: "someguy@email.com"});

    //testId is generated elsewhere per run
    I.fillField("orderNumber", testId);
    I.dontSee("Document number is required");

    I.fillField("firstName", user.firstname);
    I.dontSee("First name is required");

    I.fillField("surname", user.surname);
    I.dontSee("Surname is required");

    I.fillField("addressLine1", user.address1);
    I.dontSee("Address1 is required");

    I.fillField("postCode", user.postcode);
    I.dontSee("Postcode is required");

    I.fillField("phoneNumber", user.number);
    I.dontSee("Telephone number is required");

    I.fillField("email", user.email);
    I.dontSee("Must be a valid email");
});

Scenario("Save & Continue",  function* (I) {
    I.click("Save & Continue");

    //Custom helper function to grab the order id from the url.
    claimId = yield I.grabUrlPart(4);
});

AfterSuite((I) => {
    //Here I create a new document store for orders before inserting relevant data from the tests I've just completed.
    //This becomes queryable like users was above in later scenarios allowing me to validate against known data.
    I.addCollection("orders");
    I.insert("orders", {
        orderId: claimId,
        orderNumber: testId,
        email: user.email,
        fullName: `${user.firstname} ${user.surname}`,
    });
});

I hope this makes sense?  If not, just let me know and I'll answer it as best I can.

I was thinking on this and concluded that this module is too specific.
I'm not sure how useful it can be for wide audience.
So I'd propose to publish this helper as standalone package and I will add a link to it into Data Management chapter of documentation (which I'm currently writing)

Sure 😁, how would I go about doing that? Are there any examples of this having been done for codecept that I could use as a rough guide? I saw something about meta-packages, but I'm guessing that's not quite what I'm aiming for.

Not meta-packages, they are just for simpler installations.
So you extract your helper, then and create npm package, named like: 'codeceptjs-loki'.
Then anyone can install this package and include your helper like:
helpers: {
  Loki: {
    require: "codeceptjs-loki"
  }
}

CodeceptJS will execute require('codeceptjs-loki') to load the helper.
That's all!

Hi 😄
So I've extracted it to it's own package and published it to npm here and it seems to work as mostly you've described above.
The only difference is that it's necessary to give it an explicit path for some reason.
"helpers": {
  "Loki": {
    "require": "node_modules/codeceptjs-loki"
  }
}

I've tried to look at the config creation scripts to try and track down why this may happen, but I've not managed to follow it through.


Create function is not working

the Create Method is not working

could you provide more information? it seems to be working from my tests. please try the examples in example/crud.dart and feel free to create a new issue if you have any problems.


Add wget replacement go-downloader

Merge Checklist

All boxes should be checked before merging the PR (just tick any boxes which don't apply to this PR)

[x] The toolchain has been rebuilt successfully (or no changes were made to it)
[x] The toolchain/worker package manifests are up-to-date
[x] Any updated packages successfully build (or no packages were changed)
[x] Packages depending on static components modified in this PR (Golang, *-static subpackages, etc.) have had their Release tag incremented.
[ ] Package tests (%check section) have been verified with RUN_CHECK=y for existing SPEC files, or added to new SPEC files
[ ] All package sources are available
[ ] cgmanifest files are up-to-date and sorted (./cgmanifest.json, ./toolkit/scripts/toolchain/cgmanifest.json, .github/workflows/cgmanifest.json)
[ ] LICENSE-MAP files are up-to-date (./SPECS/LICENSES-AND-NOTICES/data/licenses.json, ./SPECS/LICENSES-AND-NOTICES/LICENSES-MAP.md, ./SPECS/LICENSES-AND-NOTICES/LICENSE-EXCEPTIONS.PHOTON)
[ ] All source files have up-to-date hashes in the *.signatures.json files
[ ] sudo make go-tidy-all and sudo make go-test-coverage pass
[ ] Documentation has been updated to match any changes to the build system
[ ] Ready to merge

Summary

When gathering toolchain .rpms we use wget. While wget is generally quite resilient there are a few error conditions it can't recover from easily. We should retry the download if possible. A simple retry wrapper in bash would likely be sufficient but with an eye to the future (enabling caching etc.) we can just wrap the download operation in a simple go tool. This tool accepts a subset of arguments used by wget.
Change Log

Add downloader tool

Does this affect the toolchain?

YES - Just downloading it with REBUILD_TOOLCHAIN=n
Associated issues

https://microsoft.visualstudio.com/OS/_workitems/edit/47288886

Test Methodology

Local

Added some warnings when we hit 404 errors so it doesn't look like the tool is stuck


C++ warning fix

Super simple fix for annoying C++ warning. One still left but its there for a reason
In file included from /Users/wojciechbartnik/h_dev/obliteration/src/game_settings_dialog.cpp:1:
/Users/yisonPylkita/h_dev/obliteration/src/game_settings_dialog.hpp:13:11: warning: private field 'm_game' is not used [-Wunused-private-field]
    Game *m_game;

Also, do you guys have a plan do do something about this wall of Rust warnings?
warning: associated function `transform_xadd_rm32_r32` is never used
    --> kernel/src/process/module/recompiler.rs:1814:8
     |
1814 |     fn transform_xadd_rm32_r32(&mut self, i: Instruction) -> usize {
     |        ^^^^^^^^^^^^^^^^^^^^^^^

warning: associated function `transform_xchg_rm8_r8` is never used
    --> kernel/src/process/module/recompiler.rs:1824:8
     |
1824 |     fn transform_xchg_rm8_r8(&mut self, i: Instruction) -> usize {
     |        ^^^^^^^^^^^^^^^^^^^^^

warning: associated function `transform_xchg_rm32_r32` is never used
    --> kernel/src/process/module/recompiler.rs:1834:8
     |
1834 |     fn transform_xchg_rm32_r32(&mut self, i: Instruction) -> usize {
     |        ^^^^^^^^^^^^^^^^^^^^^^^

warning: associated function `transform_xor_rm8_r8` is never used
    --> kernel/src/process/module/recompiler.rs:1844:8
     |
1844 |     fn transform_xor_rm8_r8(&mut self, i: Instruction) -> usize {
     |        ^^^^^^^^^^^^^^^^^^^^

warning: associated function `transform_xor_rm32_r32` is never used
    --> kernel/src/process/module/recompiler.rs:1854:8
     |
1854 |     fn transform_xor_rm32_r32(&mut self, i: Instruction) -> usize {
     |        ^^^^^^^^^^^^^^^^^^^^^^

warning: associated function `preserve` is never used
    --> kernel/src/process/module/recompiler.rs:1864:8
     |
1864 |     fn preserve(&mut self, i: Instruction) -> usize {
     |        ^^^^^^^^

Those Rust warnings seem to be incorrect...

@Mou-Ikkai  he is using an arm64 is not supported yet, will be working on it soon.

@bayedieng is right, I forgot to mention I work on arm64 device. Sorry for confusion.


Re-Implementation of Term and VNC Features.

Hi, recently I opened two issues:
#147: This issue was caused by a breakline that prevented me from using xtermjs.org. After removing the breakline, it worked fine.
#148: I was unable to use VNC at all.
After some research, I decided to re-implement the solution since I use this library frequently, and these features are important to me.
Additionally, I created a proof of concept (POC), hosted in this repository: https://github.com/ricardoalcantara/go-proxmox-term-and-vnc, which I will soon incorporate into my own project.
I would like to contribute my work and I'm open to further discussion.

Hi, thanks for the reply.

changing the channel to []byte was required? we could stay in v0.1.x if that change wasn't in there but no issues bumping to v0.2.x if this is the better solution.

For Term, no, it wasn’t strictly necessary. For VNC, it’s actually not useful since it handles a lot of unreadable bytes. It was initially converting []byte to string, sending it, and then converting it back to []byte. But this conversion is unnecessary for Term, and it's better to only convert when absolutely needed. The app is basically acting as a proxy in between. I suggest leaving it as is. Could the conversion break if someone is using an uncommon encoding?

there are actually integration tests for some of this code you might want to confirm still work and maybe add to them? e.g. https://github.com/luthermonson/go-proxmox/blob/main/tests/integration/nodes_test.go#L121

I had to fix all the broken tests by using context.TODO(). I’m not entirely sure if that’s the correct approach. I also fixed TermProxy and wrote a basic test for VNCProxy, although it might break if the display is set to Serial 0.

could you add some docs on how this stuff works and can be setup and work? maybe you'd want to start an examples dir and bring in your poc to this repo with a more detailed README.md?

I don’t mind moving my PoC to the project. However, I’m not really a fan of writing documentation. I prefer reading code instead. I can add the documentation in a later PR, right after this one, so I can point to the correct library.

No worries then, we are going to v0.2.0! ok on everything else, let's get this merged and prep for the release

When you're ready make an examples dir and bring in your project. This is ok to merge as is


Shiplocking Planner

New tab on strategy room under fleet

5 boxes of different colors

List of ships under them (by shiptype / has level indicator)

Can drag ships from the bottom to a specific color box

Ship will stay on the box, will become face icon only instead of original box (no more level indicator)

It will be saved and remembered so can be revisited

When visited the first time, and there are ships already locked on data, will automatically move them to correct boxes, and be marked with a padlock to signify this ship is already locked in-game

@dragonjet those ships that already locked in-game is also locked in this feature: user will be unable to move them around.
also, if possible, add some small color indicator at the bottom-right of each ship's icon in the panel, to indicate their locks. this will not bring extra information to the user, but just to indicate that this ship is already locked for certain event maps.

on panel?
hmm I'm thinking the shipface icon area is alrady cramped, now that we'll also add the 5th equipment near the face XD
what if just the icon border color?

Complete as of 9fbddeafb385356cb6d8f11ebe95de8e85d54f56


Add support to set custom attributes to a Device in the frontend

Currently, Custom Attributes are available to query/create/edit in the backend, but are not handled in the frontend. This can be useful since attributes can be targeted with selectors.

Supeseded by #486


Does foreman require dotenv?

I have a .env directory (not file) in the root of my app. It's not related to the dotenv gem. When trying to run foreman, I get a conflict as it seems to expect .env to be a file.
Is there a way around this?

Just a note: dotenv just hit 2.0.0 so unless you specify a lower version of dotenv, bundler is resolving it to use foreman 0.63.0.

So are you saying foreman will not look for a .env file? Because that's what I'm asking here.


fix(challenge): remove type coercion check for true and false return

[x] I have read freeCodeCamp's contribution guidelines.
[x] My pull request has a descriptive title (not a vague title like Update index.md)
[x] My pull request targets the master branch of freeCodeCamp.
[x] None of my changes are plagiarized from another source without proper attribution.
[x] All the files I changed are in the same world language (for example: only English changes, or only Chinese changes, etc.)
[x] My changes do not use shortened URLs or affiliate links.

This PR removes the type coercion from the test and adds strict checking for false/true return values.
The current test will coerce an undefined return value from the function, making both "false" tests pass right out of the gate. I don't think this is a good starting point. All tests should fail by default and not give the user the wrong impression that their function is passing some of the tests even if they are not returning anything. Returning truthy/falsy values (other then true/false) should not make any test pass/fail.

I guess maybe I should have used the Chai methods (isTrue/isFalse). Is it preferred to use chai methods when possible?
There doesn't seem to be any mention of it in the style guide. If it is preferred maybe we should add that to the Writing tests part of the style guide?

@lasjorg regarding Chai, I think it's always used.  The assert object is just Chai's assert, rather than Node's.
A PR fixing the docs would be great if you have the time.  Let me know, either way.

@ojeytonwilliams I just meant if Chai has an assert method, like isTrue, deepEqual, etc. if its usage should be encouraged over making your own test expressions. And If so, if this should be mentioned in the Writing tests part of the style guide.
For it to have any meaningful effect I guess it would need to be, at least loosely, enforced as part of the code review process as well. I'm just thinking if enforcing/encouraging it might potentially help make tests a bit cleaner.
Not sure if I should make an issue and ask for feedback on this?

Oh, I see what you're saying.  I don't think we want to be too dogmatic, but encouraging their use can't hurt.
That said, making an issue's a reasonable idea, just for visibility.  So, please go ahead.


Not working with Firefox 85.0b3 (64 bits)

read title.

Issue duplication; https://github.com/trmcnvn/twitch-channel-points/issues/14
Twitch have change the name of the button.


test: GCE output ends with .tar.gz

Following the change proposed here: https://github.com/osbuild/images/pull/987

Fetched layers: 383.43 MiB in 15 seconds (26.11 MiB/s)
ERROR Installing to filesystem: Creating ostree deployment: Pulling: Importing: Unencapsulating base: Failed to invoke skopeo proxy method FinishPipe: remote error: write |1: broken pipe

:thinking:
flake?  Restarting

@achilleas-k commits reordered

Seems like it should be cups-libs-2.4.11-1.fc40.x86_64.rpm instead

Same error, this version source/org.osbuild.curl (org.osbuild.curl): WARNING: failed to download https://ix-denver.mm.fcix.net/fedora/linux/updates/40/Everything/x86_64/Packages/c/cups-libs-2.4.10-7.fc40.x86_64.rpm: The requested URL returned error: 404 might be pinned somewhere...


[$500] Don't create default #announce rooms until a workspace has 3 or more members

Problem
While we originally envisioned default rooms to streamline the a whole host of team collaboration use cases – including announcements to your employees, or chatting with other admins - as we've gained experience onboarding users to NewDot we've realized that this has had the effect of making onboarding harder. More specifically, your LHN starts out with a host of rooms and messages, though it's not clear which you should start with first:

Expensify (planned)
Concierge
Workspace chat
#admins
#announce

Even further, plenty of sign-ups are first and foremost looking for an expense and financial management app, and they're just one person, so this ends up confusing them that they've downloaded the wrong app, costing us valuable bottom-up chances that we'd otherwise keep around as long as sign-ups can effectively find what they're looking for.
Solution
Part of this solution is more targeted onboarding, and that's already being worked on in #wave9-collect-signups. Though equally, let's not assume group collaboration is what sign-ups are after – especially if they're the only member of the workspace. A good example is the #announce room, which is only relevant when a workspace has several members.
Thus, in an effort to simplify what users are exposed to post-sign-up, and better target our functionality to their intended use case, let's:

Not create a default #announce room when the workspace is created
Instead, let's only create #announce rooms when the third member is added to the workspace (after all, otherwise two members could use a DM without issue).

Upwork Automation - Do Not Edit

Upwork Job URL: https://www.upwork.com/jobs/~01d20cdc896fd34ad2
Upwork Job ID:<PHONE_NUMBER>843316736
Last Price Increase: 2024-02-16
Automatic offers:

rojiphil | Contributor | 0

Proposal
Please re-state the problem that we are trying to solve in this issue.
Don't create default #announce rooms until a workspace has 3 or more members
What is the root cause of that problem?
New feature
What changes do you think we should make in order to solve the problem?

Remove this constants and everything depends on these  form createWorkspace and buildOptimisticWorkspaceChats utils
Create new buildOptimisticAnounceChat function in ReportUtils and transfer  this part of code to there
Create new createAnnounceChat function similar to createWorkspace. E.g Below

function createAnnounceChat( policyName, policyID ) {
    const {
        announceChatReportID,
        announceChatData,
        announceReportActionData,
        announceCreatedReportActionID,

    } = ReportUtils.buildOptimisticAnounceChat(policyID, workspaceName);

    const optimisticData: OnyxUpdate[] = [
        {
            onyxMethod: Onyx.METHOD.SET,
            key: `${ONYXKEYS.COLLECTION.POLICY_MEMBERS}${policyID}`,
            value: {
                [sessionAccountID]: {
                    role: CONST.POLICY.ROLE.ADMIN,
                    errors: {},
                },
            },
        },
        {
            onyxMethod: Onyx.METHOD.SET,
            key: `${ONYXKEYS.COLLECTION.REPORT}${announceChatReportID}`,
            value: {
                pendingFields: {
                    addWorkspaceRoom: CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD,
                },
                ...announceChatData,
            },
        },
        {
            onyxMethod: Onyx.METHOD.SET,
            key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${announceChatReportID}`,
            value: announceReportActionData,
        },
    ];

    const successData: OnyxUpdate[] = [
        {
            onyxMethod: Onyx.METHOD.MERGE,
            key: `${ONYXKEYS.COLLECTION.REPORT}${announceChatReportID}`,
            value: {
                pendingFields: {
                    addWorkspaceRoom: null,
                },
                pendingAction: null,
            },
        },
        {
            onyxMethod: Onyx.METHOD.MERGE,
            key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${announceChatReportID}`,
            value: {
                [announceCreatedReportActionID]: {
                    pendingAction: null,
                },
            },
        },
    ];

    const failureData: OnyxUpdate[] = [
        {
            onyxMethod: Onyx.METHOD.SET,
            key: `${ONYXKEYS.COLLECTION.REPORT}${announceChatReportID}`,
            value: null,
        },
        {
            onyxMethod: Onyx.METHOD.SET,
            key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${announceChatReportID}`,
            value: null,
        },
    ];

    const params = {
        policyID,
        announceChatReportID,
        announceCreatedReportActionID,
    };

    API.write(WRITE_COMMANDS.CREATE_WORKSPACE, params, {optimisticData, successData, failureData});
}

Add below condition in addMembersToWorkspace function

    if(allPolicyMembers?.[membersListKey]){
        createAnounceChat(policiName, policyID)
    }

What alternative solutions did you explore? (Optional)

Proposal
Please re-state the problem that we are trying to solve in this issue.
Don't create default #announce rooms until a workspace has 3 or more members
What is the root cause of that problem?
New feature
What changes do you think we should make in order to solve the problem?

Remove this constants and everything depends on these  form createWorkspace and createWorkspaceFromIOUPayment
Create new buildOptimisticAnounceChat function in ReportUtils and move this part of the code there.
Create new createAnnounceChat function similar to createWorkspace. E.g Below
Create new createAnnounceChat endpoint in  backend side

function createAnnounceChat( policyName, policyID ) {
    const {
        announceChatReportID,
        announceChatData,
        announceReportActionData,
        announceCreatedReportActionID,

    } = ReportUtils.buildOptimisticAnounceChat(policyID, policyName);

    const optimisticData: OnyxUpdate[] = [
        {
            onyxMethod: Onyx.METHOD.SET,
            key: `${ONYXKEYS.COLLECTION.POLICY_MEMBERS}${policyID}`,
            value: {
                [sessionAccountID]: {
                    role: CONST.POLICY.ROLE.ADMIN,
                    errors: {},
                },
            },
        },
        {
            onyxMethod: Onyx.METHOD.SET,
            key: `${ONYXKEYS.COLLECTION.REPORT}${announceChatReportID}`,
            value: {
                pendingFields: {
                    addWorkspaceRoom: CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD,
                },
                ...announceChatData,
            },
        },
        {
            onyxMethod: Onyx.METHOD.SET,
            key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${announceChatReportID}`,
            value: announceReportActionData,
        },
    ];

    const successData: OnyxUpdate[] = [
        {
            onyxMethod: Onyx.METHOD.MERGE,
            key: `${ONYXKEYS.COLLECTION.REPORT}${announceChatReportID}`,
            value: {
                pendingFields: {
                    addWorkspaceRoom: null,
                },
                pendingAction: null,
            },
        },
        {
            onyxMethod: Onyx.METHOD.MERGE,
            key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${announceChatReportID}`,
            value: {
                [announceCreatedReportActionID]: {
                    pendingAction: null,
                },
            },
        },
    ];

    const failureData: OnyxUpdate[] = [
        {
            onyxMethod: Onyx.METHOD.SET,
            key: `${ONYXKEYS.COLLECTION.REPORT}${announceChatReportID}`,
            value: null,
        },
        {
            onyxMethod: Onyx.METHOD.SET,
            key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${announceChatReportID}`,
            value: null,
        },
    ];

    const params = {
        policyID,
        announceChatReportID,
        announceCreatedReportActionID,
    };

    API.write("createAnnounceChat", params, {optimisticData, successData, failureData});
}

Add below condition in addMembersToWorkspace function

    if(allPolicyMembers?.[membersListKey]?.length > 2){
        createAnounceChat(policiName, policyID)
    }

What alternative solutions did you explore? (Optional)

Proposal
Please re-state the problem that we are trying to solve in this issue.
Don't create default #announce rooms until a workspace has 3 or more members
What is the root cause of that problem?
New feature
What changes do you think we should make in order to solve the problem?

Remove this constants and everything depends on these  form createWorkspace and createWorkspaceFromIOUPayment
Create new buildOptimisticAnounceChat function in ReportUtils and move this part of the code there.
Create new createAnnounceChat endpoint in  backend side
Create new createAnnounceChat function similar to createWorkspace. E.g Below

function createAnnounceChat( policyName, policyID ) {
    const {
        announceChatReportID,
        announceChatData,
        announceReportActionData,
        announceCreatedReportActionID,

    } = ReportUtils.buildOptimisticAnounceChat(policyID, policyName);

    const optimisticData: OnyxUpdate[] = [
        {
            onyxMethod: Onyx.METHOD.SET,
            key: `${ONYXKEYS.COLLECTION.POLICY_MEMBERS}${policyID}`,
            value: {
                [sessionAccountID]: {
                    role: CONST.POLICY.ROLE.ADMIN,
                    errors: {},
                },
            },
        },
        {
            onyxMethod: Onyx.METHOD.SET,
            key: `${ONYXKEYS.COLLECTION.REPORT}${announceChatReportID}`,
            value: {
                pendingFields: {
                    addWorkspaceRoom: CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD,
                },
                ...announceChatData,
            },
        },
        {
            onyxMethod: Onyx.METHOD.SET,
            key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${announceChatReportID}`,
            value: announceReportActionData,
        },
    ];

    const successData: OnyxUpdate[] = [
        {
            onyxMethod: Onyx.METHOD.MERGE,
            key: `${ONYXKEYS.COLLECTION.REPORT}${announceChatReportID}`,
            value: {
                pendingFields: {
                    addWorkspaceRoom: null,
                },
                pendingAction: null,
            },
        },
        {
            onyxMethod: Onyx.METHOD.MERGE,
            key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${announceChatReportID}`,
            value: {
                [announceCreatedReportActionID]: {
                    pendingAction: null,
                },
            },
        },
    ];

    const failureData: OnyxUpdate[] = [
        {
            onyxMethod: Onyx.METHOD.SET,
            key: `${ONYXKEYS.COLLECTION.REPORT}${announceChatReportID}`,
            value: null,
        },
        {
            onyxMethod: Onyx.METHOD.SET,
            key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${announceChatReportID}`,
            value: null,
        },
    ];

    const params = {
        policyID,
        announceChatReportID,
        announceCreatedReportActionID,
    };

    API.write("createAnnounceChat", params, {optimisticData, successData, failureData});
}

Add below condition in addMembersToWorkspace function

    if(allPolicyMembers?.[membersListKey]?.length > 2){
        createAnounceChat(policiName, policyID)
    }

What alternative solutions did you explore? (Optional)

Proposal
Please re-state the problem that we are trying to solve in this issue.
Don't create default #announce rooms until a workspace has 3 or more members
What is the root cause of that problem?
New feature
What changes do you think we should make in order to solve the problem?

Remove this constants and everything depends on these  form createWorkspace and createWorkspaceFromIOUPayment
Create new buildOptimisticAnounceChat function in ReportUtils and move this part of the code there.
Create new CreateAnnounceChat endpoint in  backend side
Create new createAnnounceChat function similar to createWorkspace. E.g Below

function createAnnounceChat( policyName, policyID ) {
    const {
        announceChatReportID,
        announceChatData,
        announceReportActionData,
        announceCreatedReportActionID,

    } = ReportUtils.buildOptimisticAnounceChat(policyID, policyName);

    const optimisticData: OnyxUpdate[] = [
        {
            onyxMethod: Onyx.METHOD.SET,
            key: `${ONYXKEYS.COLLECTION.POLICY_MEMBERS}${policyID}`,
            value: {
                [sessionAccountID]: {
                    role: CONST.POLICY.ROLE.ADMIN,
                    errors: {},
                },
            },
        },
        {
            onyxMethod: Onyx.METHOD.SET,
            key: `${ONYXKEYS.COLLECTION.REPORT}${announceChatReportID}`,
            value: {
                pendingFields: {
                    addWorkspaceRoom: CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD,
                },
                ...announceChatData,
            },
        },
        {
            onyxMethod: Onyx.METHOD.SET,
            key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${announceChatReportID}`,
            value: announceReportActionData,
        },
    ];

    const successData: OnyxUpdate[] = [
        {
            onyxMethod: Onyx.METHOD.MERGE,
            key: `${ONYXKEYS.COLLECTION.REPORT}${announceChatReportID}`,
            value: {
                pendingFields: {
                    addWorkspaceRoom: null,
                },
                pendingAction: null,
            },
        },
        {
            onyxMethod: Onyx.METHOD.MERGE,
            key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${announceChatReportID}`,
            value: {
                [announceCreatedReportActionID]: {
                    pendingAction: null,
                },
            },
        },
    ];

    const failureData: OnyxUpdate[] = [
        {
            onyxMethod: Onyx.METHOD.SET,
            key: `${ONYXKEYS.COLLECTION.REPORT}${announceChatReportID}`,
            value: null,
        },
        {
            onyxMethod: Onyx.METHOD.SET,
            key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${announceChatReportID}`,
            value: null,
        },
    ];

    const params = {
        policyID,
        announceChatReportID,
        announceCreatedReportActionID,
    };

    API.write("CreateAnnounceChat", params, {optimisticData, successData, failureData});
}

Add below condition in addMembersToWorkspace function

    if(allPolicyMembers?.[membersListKey]?.length === 2){
        createAnounceChat(policiName, policyID)
    }

What alternative solutions did you explore? (Optional)

I think this would be done on the back end, wouldn't it be?  We would create the announce room when the 3rd person is added to the workspace, which is something we should probably do inside auth given that there are so many ways to invite someone.

Yes, I think we need to handle this on the frontend as well when creating a workspace optimistically. Although from the proposals above, I don't understand why do we need to create a new CreateAnnounceChat endpoint on the backend. The WRITE_COMMANDS.CREATE_WORKSPACE endpoint should just not send the announce chat data if workspace has less than 3 members from the backend.

We should just update the optimistic data. Rest can be handled by the backend.

From a quick discussion in Slack, I think we want to make this change backend. Members can be added from several different front end flows and so it would be cleaner to do it once, backend rather than scout down every front end flow to address

@anmurali We need to do the frontend part as well in order to make the optimistic data work.

@rayane-djouah Your proposal is still not making a lot of sense to me. I think its too complex and has un-needed changes. All we need to do on the frontend is to make sure that the announce room is not created optimistically if members are less than 3.

@allroundexperts could you please elaborate more on what changes do you think that are not needed?

I think you're creating multiple workspace creation requests.

@allroundexperts can we create the announce room optimistically by using Onyx.set() and without calling any API endpoint ?
We are already calling the endpoint in the createWorkspace action. It's not needed to call it twice.

@rojiphil's proposal looks good to me. It handles the case where a user is added later on after a workspace gets created.
🎀 👀 🎀 C+ reviewed

@allroundexperts Don't you have any feedback on my proposal?

@shahinyan11 It looks pretty much the same as what @rayane-djouah first proposed. As such, It has the same issues which I explained above.

@shahinyan11 It looks pretty much the same as what @rayane-djouah first proposed.
@allroundexperts He didn't propose first, he just updated his proposal more then 10 times  after mine

As such, It has the same issues which I explained above.
And this is understandable

Nice, agreed @rojiphil's proposal looks solid 👍

We will need BE support for creation of #announce room through AddMembersToWorkspace request. Further, BE should not create #announce room chat report on workspace creation.

Thanks @NikkiWines for the assignment here.
This issue also needs BE support as mentioned above.
Please let me know when BE is ready and I will raise the PR in FE.

Started on the backend changes today! I'll post here when the changes are deployed!

So is this entirely back end -- is there any front end component?

So is this entirely back end -- is there any front end component?

Not entirely BE. There are FE changes too.

Thanks for the clarification, @rojiphil! @NikkiWines, can you link your PR so we can follow along!

Sure thing! This change ends up impacting more logic than I anticipated and we have a bunch of tests to adjust - sorry for the delay 🙇
The auth PR is here. We'll also need a corresponding web PR which I'll link shortly.

Awesome. Thanks, @NikkiWines!

Been focused on a wave6 issue so haven't had time to update the backend PR but I'll try to prioritize this during the week (or will hand it off otherwise)

Thanks for the update, @NikkiWines!

@NikkiWines how's this one coming along? Were you able to make space for this one last week?

I did! Still working through some of the web tests but made progress and should hopefully have both PRs in review by tomorrow

Bumping to keep melvin happy while we wait on the PRs above

Sorry for the delay - there were a lot (32) of different tests that involved the existence of the #announce room  in some way and we had to adjust some of the onyx update logic as well. All the associated PRs are in review and should hopefully be merged/deployed soon.

Thanks for the update, @NikkiWines!

Bumping to Weekly while we wait on the PRs to be merged.

Per this discussion I think we should put this on hold until https://github.com/Expensify/Web-Expensify/pull/40764 is merged

Looks like https://github.com/Expensify/Web-Expensify/pull/40764 was recently merged. Taking this off hold!

Sorry, this is actually held on https://github.com/Expensify/Web-Expensify/pull/41442 - which is still on hold (waiting for https://github.com/Expensify/Auth/pull/10021) - so this isn't ready to come off hold yet.

No worries! I'll keep an eye on that one and take us off hold when it's merged!

Nothing new to report here. It looks like we're still waiting on these

@NikkiWines, it looks like https://github.com/Expensify/Auth/pull/10021 was merged and https://github.com/Expensify/Web-Expensify/pull/41442 was closed. Where does that put this issue?

Oh yes, thanks for the bump. I had something written out but hadn't sent it 😅
Since #vip-vsb is currently paused, I've closed those PRs (but kept the branches so the work is retained) so they're not unnecessarily clogging up the reviewers' K2s. For this issue, let's unassign anyone non-internal and remove the Monthly label until we-re reprioritizing #vip issues tasks?

Should we consider moving this one over to #wave-collect then? cc @JmillsExpensify @trjExpensify @danielrvidal for thoughts. I only ask because I think this one will still impact a lot of signups as we start to push new sign ups to be on NewDot.

Yeah, maybe @danielrvidal wants to put it under the Guided Setup: Stage 3 project as part of readiness for viral actors invited to NewDot. It has an impact on what they see in the LHN when invited.

Cool, so as per here, we will put this under the Guided Setup: Stage 3 project. I can put this in Hot Picks, but @NikkiWines it would be useful for a rundown of what's left to do or pick up from where you left off with the work from here.

Nice, I'll be finishing up with #wave-collect Sage Intacct stuff shortly so happy to stay on this if it needs a volunteer.
As for a summary - there are changes needed in Web and Auth to move this forward. We were initially held up on https://github.com/Expensify/Auth/pull/10021 because that moved the onyxUpdates for SharePolicy  from Web to Auth. When we share a policy, we can bump the number of members to over 3, impacting whether or not we create an #announce room - hence the hold-up.
The bulk of the changes needed for this are in the auth PR. The core logic is already implemented from earlier, but we'll need to adjust the onyx update logic (that we were originally doing in the web PR) accordingly,
The Web PR now will likely be much smaller but it'll still be necessary as we have some integrations tests that check for the #announce room creation immediately after a policy is created for the first time. In fact, it might be easier to just start fresh on the web side, since the bulk of the changes that were being made there are now being made in Auth

This is currently on hold. Not overdue.

@NikkiWines bump on the above question!

Sorry, lost track of this one as I was still working on Intacct release issues. I'll update the auth and web PRs this week.

PR is being updated - looks good overall just adjusting the tests for the onyx updates

PR is in review - auth tests are fixed, waiting on one possible fix in a different PR for web-e tests

@NikkiWines is there an update on this?

Tests are all passing now, waiting on reviews before we merge this. Note for myself to notify Applause about this change since it'll impact a bunch of our regression tests around checking for the existence of an #announce room

Executing the CVP, and checking in here on the next steps. The Auth PR hit prod yesterday, are we on to a final App PR now?

Since the room won't exist until the 3rd user is added, I'm not sure we need a corresponding app PR unless we want to do something particular when the #announce room is eventually created

Oh cool, so we're good to go here then!

Yep, I believe so! Closing this out

Ooh, although we may be optimistically trying to create the announce room so actually App changes might be required - let me do some testing .

Ooh, although we may be optimistically trying to create the announce room so actually App changes might be required - let me do some testing .

That's correct @NikkiWines. Here is a test video that demonstrates the need for FE changes.
https://github.com/user-attachments/assets/4b31c1ad-698c-4c78-af80-7fc11f4f48be

Working on the App PR now

@NikkiWines I have created a draft PR that addresses most of the issues, but we need to agree on how FE can optimistically generate the announce room. And, at the same time, the BE also seamlessly considers that without resulting in two #announce rooms in FE. The following test video demonstrates the problem for the draft PR.
Can BE handle this if we pass announce room chat data along with AddMembersToWorkspace request and also additionally pass the params announceChatReportID and announceCreatedReportActionID here as we do for createWorkspaceChat here or do you see any other approach to resolve this?
https://github.com/user-attachments/assets/9d51cef7-0b1e-4350-9c38-3be5f65bd230

@NikkiWines - can we take care of this issue? It would be really great to get this done as it is what stands between Stage 2 onboarding (within the scope of which we said we would clean this up) being actively worked on vs. done.

Can BE handle this if we pass announce room chat data along with AddMembersToWorkspace request and also additionally pass the params announceChatReportID and announceCreatedReportActionID here as we do for createWorkspaceChat here or do you see any other approach to resolve this?

Yes, I think it makes sense to follow what we did for createWorkspaceChat, and I can update the backend for  AddMembersToWorkspace to take in the announceChatReportID and announceCreatedReportActionID.

Yes, I think it makes sense to follow what we did for createWorkspaceChat, and I can update the backend for AddMembersToWorkspace to take in the announceChatReportID and announceCreatedReportActionID.

Thanks and I have updated the draft PR to send across announceChatReportID and announceCreatedReportActionID as params in AddMembersToWorkspace request. I look forward to testing this out once BE is ready.

The backend PRs (one, and two) are up and in review

The Auth PR has been merged, once that's deployed we can merge the Web PR. And when the Web PR is live then we can get https://github.com/Expensify/App/pull/48660 over the line

Web PR has been merged - should go to prod by tuesday.

Web-E PR is on staging now!

Backend changes are live, we should be able to move forward with the App PR now

Backend changes are live, we should be able to move forward with the App PR now

Thanks @NikkiWines  and yeah, BE is full of life and works like a charm too.
PR is ready for review @allroundexperts

@JmillsExpensify there's an issue here: https://github.com/Expensify/Expensify/issues/427525
For invoicing we expect the announce room to exist, but when you send an invoice to someone and they chose to pay as a business, we create a workspace for them where they are the only member, so the annouce room doesn't get created (since they're the only memeber)
I'm not sure what we should do in this case. Should we:

create the announce room with < 3 members for this case
use another room for invoicing
something else?

What's the announce room used for in that invoice case, @madmax330?

Apparently nothing 😄
Or if something I can't find it.
But I think it's mainly because we create the room optimistically, so when the API doesn't create it it causes a bug on the front-end. So maybe we should just stop creating it altogether?

https://fsty.io/v/6X2rBN3K
I have seen this in about a dozen sessions. The #announce room shows up but when clicked shows a not here error. Is this because the room is created optimistically? I think we should just stop creating it. Create it when there are 3+ members in the workspace.

That's already the plan, isn't it? The App PR is in review: https://github.com/Expensify/App/pull/48660

I'd vote we stop creating it altogether. I saw this in 3 full stories impacting customers trying to adopt. Can we prioritize as CRITICAL?

Yeah, I think we still need this App PR to be merged: https://github.com/Expensify/App/pull/48660

Agreed. Can we update that PR to CRITICAL, mostly because it's affecting production users. What do ya'll think @NikkiWines @allroundexperts?

Ah yeah, I commented in the PR already. I've escalated it to slack here: https://expensify.slack.com/archives/C02NK2DQWUX/p1727347525853669

This can be closed I think - https://github.com/Expensify/App/pull/48660 has been on prod for a few weeks now - not sure why the issue wasn't updated with the payment details.
@johncschuster can we issue payment to @rojiphil and @allroundexperts for the PR and C+ review - thank you 🙇

Payment Summary:
Contributor: @rojiphil paid $500 via Upwork - PAID! 🎉
Contributor+: @allroundexperts due $500 via NewDot
Upwork job here! Please apply


Code for generating training patches

Dear Andrei,
Thanks for sharing your clean and well structured code!
In the paper you say that, during training, patches are randomly extracted from the PET-CT images with probability 0.9 of containing the tumour class. However, the "make_dataset.py" file extracts the patches only according to the given bounding boxes (as during validation / inference).
Please could you share a code snippet or give more detail of the patch extraction procedure during training? I have the following doubts:

Is the 0.9 probability according to a uniform distribution?
Are the proportions of tumour with respect to background class controlled (e.g., with 0.9 probability patches will at least some percentage of tumour class?

Many thanks in advance,
Best wishes,
Víctor

Hello @VokCow

In the paper you say that, during training, patches are randomly extracted from the PET-CT images with probability 0.9 of containing the tumour class. However, the "make_dataset.py" file extracts the patches only according to the given bounding boxes (as during validation / inference).

Yes, you are right. The script "make_dataset.py" uses the bounding boxes by default. I did not include the option to fully reproduce the training data, partly because my initial implementation was quite messy. However, you can do it this way:
In make_dataset.py:

Remove / comment the part with patch extraction (i.e., from # Get bounding boxes: to # Resample all images using CT attributes:)
https://github.com/iantsen/hecktor/blob/5ebc6774d178139b52abebbe926b4cafabe3e29d/src/data/make_dataset.py#L39-L60

Since there is no cropping anymore, use proper names for all inputs of the resampling function resample_sitk_image, i.e., instead of cr_img_ct use img_ct, the same with pet and mask.

Replace https://github.com/iantsen/hecktor/blob/5ebc6774d178139b52abebbe926b4cafabe3e29d/src/data/make_dataset.py#L66
with new_size=None

This will give you the resample data, which is not cropped using the provided bounding boxes. It means that for a single patient PET and CT scans will have the same size, but this size will differ among the patients.
Therefore, PET/CT patches must be extracted during training.
In train.py:

Add in train_transforms
https://github.com/iantsen/hecktor/blob/5ebc6774d178139b52abebbe926b4cafabe3e29d/model/train.py#L52-L57

the transform to extract the patch, namely transforms.ExtractPatch(patch_size=(144, 144, 144), p_tumor=0.9). It is better if you add right it after
https://github.com/iantsen/hecktor/blob/5ebc6774d178139b52abebbe926b4cafabe3e29d/model/train.py#L53

Please could you share a code snippet or give more detail of the patch extraction procedure during training? I have the following doubts:
-     Is the 0.9 probability according to a uniform distribution?
-     Are the proportions of tumour with respect to background class controlled (e.g., with 0.9 probability patches will at least some percentage of tumour class?

See ExtractPatch in transforms.py and the part of the answer written above.
Yes, it is the uniform distribution. With the prob 0.9 there is at least 1 tumor voxel, and the prob 0.1 corresponds to absolutely random patches (that might contain the tumor class too).

Hi Andrei,
Many thanks for your detailed answer! Indeed, I have missed that there is an ExtractPatch transform. With that and the other hints you gave I will be able to implement the training procedure hassle free.
I will now close the issue. Best wishes,
Víctor


Added simple install instructions

As a follow on from https://github.com/kubernetes/website/pull/22600, this PR addresses the issues for new users and CKA exam takers by adding simplified / one-liner install information to the Kubernetes Networking Model page - https://kubernetes.io/docs/concepts/cluster-administration/networking.
Not all projects have simplified install instructions, and obviously this page doesn't want to become the oracle for all installations, but having some installation documentation under kubernetes.io will help those taking the CKA (where referencing this is part of the exam), but also for new users to Kubernetes who maybe just want to quickly spin up a cluster but get intimidated by the different options and reading required to understand how to get started.

/assign @zacharysarah

Page preview:
https://deploy-preview-22973--kubernetes-io-master-staging.netlify.app/docs/concepts/cluster-administration/networking/
I am reading through the updates. Thanks!

Just wanted to say congrats on your first PR. Well done.
/lgtm

There has been some questions about adding new content. See issue #22961.

Thanks for the comments and review @kbhawkey. I started this before seeing #22961 , but I added a comment in there also after seeing it. I think it fits in to the same topic, but appreciate it might need an additional review.

I believe this might already be worked-around on the CKA side of things, so that this documentation change is not required.
Does that sound right?

Can we get confirmation before we close the issue?

Apart from the CKA side of things, the purpose of this proposed change is also to make it easier for new comers to Kubernetes. At the moment there isn't a particularly clear and simple guide on just getting a basic cluster up and running. A user has to go to this page, read through all the external links before they can even figure out which ones might be the simplest to get started with. It's a complicated topic made more complex by removing quick getting started info as proposed in this change.
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/ suggests you just need to run kubectl apply -f <add-on.yaml>, and it would be nice if it were that simple.

SIG Cluster Lifecycle look after https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/
It's a tricky one I think. If there were an official network plugin that's part of Kubernetes or identified for endorsement, even a basic one, that would help a lot. Users could get basic networking up but also have the option of using something more advanced.
Anyway, @ckranz, network plugins are required for Kubernetes to operate. Have you got time to rebase this?

Thanks! Happy to rebase this, just wanted to check there was value in doing so :-) will do so shortly!

Hello  @ckranz .
Just checking on the status of this PR?
Would you have time to rebase your changes?

Hello @ckranz .
I plan on closing this issue.
When you have time, feel free to reopen and rebase your changes.
Thanks!
/close


Bugfix2219new

Bug Description
A NoSuchElementException occurs when using --no-prelude to generate compiledDefinition for an empty module definition file (no syntax but possibly rules and configurations). E.g.
kompile --no-prelude --debug empty-module.k
This bug is due to the problem that "DEFAULT-DEFINITIONS", the built-in modules in k-distribution's kast.k and domains.k are NOT LOADED.
Note that --no-prelude flag is intended to NOT IMPORT domains.k but SHOULD LOAD the domains.k. As parsing configurations requires many modules in domains.k, e.g. Map module, we would better LOAD all the built-in modules (kast and domain), and simply NOT IMPORT them.
Change Log

ParserUtils.loadDefinition(), load Kompile.REQUIRE_PRELUDE_K to previousModules even with --no-prelude flag. This change fixes the bug2219.
KDepFrontEnd.run(), load Kompile.REQUIRE_PRELUDE_K to modules even with --no-prelude flag. This change is to keep the meaning of --no-prelude flag consistent throughout kframework: load prelude.k to modules but not import into k compiled definition.
change the misleading names of no-prelude (and noprelude) to notAutoImportDomain

Tests
Create unit tests for kompile and kdep empty module in k-distribution: TstKompileOnKORE_IT.java and TstKdepOnKORE_IT.java

Close this PR exercise in the class.


Enhance backdrop modal effect

What kind of change does this PR introduce?
Enhancing, backdrop color effect in when trigger upload new document modal and trigger upgrade modal both using tailwind utility class named gray-alpha enhanced the opacity from .1 to .64
Why was this change needed? (You can also link to an open issue here)
Design Consistency, refer to when trigger sign up or sign in modal their backdrop color is darker than other modals (the difference is in the opacity value)
Other information:

reference

before

after (this PR)

@dartpain Please review and merge. Thanks.

Thank you @dartpain for accepting my PR, I'm happy to hear that you'd like to add the hacktoberfest-accepted label and holopin badge.


Add support for Azure SQL Server elastic pools

Terraform resource: azurerm_mssql_elasticpool
A very expensive resource....

@tomatwoodliquidx support for this resource was released in v0.10.18.


Allow users to upload their own dictionaries through the Web UI

We need a feature to allow a user to upload a file as a dictionary, and add the dictionary to the backend as a resource.
It can be done either by the SmartGui team or the Medline team.

Can you refer more details on how to do that?

@KevinKozj That's part of the task :-)  Suppose a user has a local file as a dictionary, and wants to upload it to the server.  A few things need to be done:

A UI for the user to specify the file to upload;
Add the dictionary and its meta to the backend;
Allow the new dictionary to be used for a new workflow.

For the UI part, should we create it as a new button parallel to those operators, or create it under the DictionarySource Operator?

For now we can use a separate button.  More effort is needed on the backend.  Once it's done, we can think about where to put it on the UI.  In this case you are not blocked to make progress.

I've checked the front-end side and created a button to allow user upload a file. Will meet with my teammates tomorrow morning and try to figure out what to do on the backend. We will try to do it base on our new branch "keshab-seungmok-kevin-demo-base".

@chenlica Could you elaborate more on dictionary source? (such as purpose of it?) What I heard from Zhozhi was that a dictionary is just a list of words that a user wants to search for. Does this have to be stored? I think we can just read the data inside the text file on server side, send it back to the front-end, and populate the content of the text file (a.k.a a list of search keywords) to the keyword fields of DictionarySource or DictionaryMatcher.

Issue Done:
Users can now upload their local dictionary files (.txt only) and save them on the server. Every time when users use TextDB again and select a dictionary matcher, it will offer a selection list for users to choose dictionary files. By clicking the name of the files, their corresponding context will be shown below the selection bar.
Now the issue can be closed.

@KevinKozj Super!  Can you add 1-2 screenshots related to this PR?

@chenlica @zuozhiw Here's the screenshot, and the PR for this issue is #520 [ Dictionary Upload ]

Super.  Thanks!


Hydrate About page and Bump Hugo Version

Hydrate About page and Bump Hugo Version
This pull request adds content to the /about page and upgrades the Hugo version to the latest release

.deploy

.deploy

.deploy


Verification Removal & Reassignment

What Koala extension does this refer to (if applicable)
Verify
Is your feature request related to a problem? Please describe.
Some people lose their previous discord accounts due to hacking or forgotten details. In this case they will create a new account, and won't be able to verify their email again.
Describe the solution you'd like

Ensure the user wants to transfer. Instead of saying That email is already verified, the bot should say That email is currently verified. Would you like to transfer the verification?.
Verify the new account. Same approach as usual verification. During this step the old account will continue to be verified until the verify confirmation is given by the new account
Unverify previous account Once verified that the user has access to the account, the previous verified user will have that email removed from their verification on our databases, and every discord server that has a verification role given, will be removed. This should also be implemented by k!unVerify

Describe alternatives you've considered
N/A
Additional context
N/A

Failed during step 2: role is removed from old account before the new account is even verified. To be precise it is removed when the used replies 'y' on the new account when the bot asks 'This email is already assigned to a different account. Would you like to verify anyway? (y/n)'.


Confusion about target branch for pull requests

I was about to create a PR when I read the CONTRIBUTING document. It says that PRs should target master when in preview, and dev after release. How am I supposed to know if this repo is in preview?
Even better, the github pull request template asks me to check that I’m targeting latest..
All three exists. And I’d be glad to submit a PR to fix this confusion, if I only knew where to target it ;)

Hi @leitzler , thanks for opening the issue. We will update the Contributing document. If you intend to make a PR please make it against the latest branch.  Please note, don't target the auto generated code since that will be overwritten.

Will be fixed in v22


chore(main): release 1.0.0

:robot: I have created a release beep boop
1.0.0 (2022-06-11)
Features

First release. (432d8b3)

This PR was generated with Release Please. See documentation.

:robot: Release is at https://github.com/vincent-herlemont/bats-tools/releases/tag/v1.0.0 :sunflower:


Remaining nodes after deleting the snippet

Sometimes it seems that the "nodes" remain after deleting the snippet. In some cases there might just be the virtual text left which is not that bad but in some cases it's worse and messes up writing new lines. I'll show two cases below:
Case 1 (worse)
For example if I have the snippet:
        lua = {
            ls.parser.parse_snippet(
            'req',
            [[local ${1} = require('$1')$0]]
            ),
        },

which I trigger but then decide to actually not use, so before jumping to the last node I do <Esc>cc. Then if I start typing new lines I actually get two new lines each time I press <CR>. See following gif:

This does not happen if I for example delete the snippet using <Esc>dd or if I first jump to the last node $0.
Case 2 (remaining choiceNode)
Lets say I have a simple snippet with a choiceNode:
            s('test', c(1, {
                t('a'),
                t('b'),
            })),

and am using
        ext_opts = {
            [types.insertNode] = {
                passive = {
                    hl_group = "GruvboxRed"
                }
            },
            [types.choiceNode] = {
                active = {
                    virt_text = {{"choiceNode", "GruvboxOrange"}}
                }
            },
            [types.textNode] = {
                snippet_passive = {
                    hl_group = "GruvboxGreen"
                }
            },
        },

If I expand the snippet and then delete it or delete all the text in the buffer the choiceNode virtual text is still there. See the following gif:

What's you config? These (i tested the first one, at least) should be fixed with delete_check_events="TextChanged"


px4_drone path planning implementation

Hello sir , I have px4 based drone with RTABMap doing SLAM ( rtabmap_drone_example). Currently it does 2d navigation using move_base( global and local planner). I wanted to implement the static navigation code of yours rather than the move_base. Is it possible to run if I have half part ( simulation and slam ) from rtabmap_drone_example and the other half from yours( path planning and navigation) . The px4 version is 1.12.3 and in a gps denied environment. If it is possible then can you provide me steps on how to implement it.
Thank You

The planning algorithm relies on perception (mapping/detection). If you want to run on different perception, you have to modify collision checking in the planners which can be tedious but doable. Feel free to reopen the issue if you have further questions.


Docker ttn dashboard v1.0

Please check it and let me know if changes required.
--Murugan Chandrasekar

@MuruganChandrasekar where are we on this? there are conflicts that need to be resolved before we can merge. Is this PR still live?

@MuruganChandrasekar where are we on this? there are conflicts that need to be resolved before we can merge. Is this PR still live?

Yes, this PR is still live. I want you to have look at changes and test it on your end before doing merge.

Yes. but our motive is to run the selected task given to crontab while building.


Fix the multiple metadata url writefile patch

Description of changes:
Perform the hegelUrls check only if the HEGEL_URLS env is set in writefile
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

/lgtm

/approved

/cherrypick release-0.10


wids cannot open SAM dataset

Hi author,
Thanks for designing such a flexible and efficient dataloader. WIDS used to work fine in my training pipelines, however, I recently notice a werid error when loading SAM dataset.
(vila) ligengz:~/workspace/dev$ python wids_dev.py
[WebShardedList] wids_dev.json base:  name: None nfiles: 2 nbytes: 0 samples: 200 cache: /home/ligengz/.cache/_wids_cache
Traceback (most recent call last):
  File "//VILA/wids_dev.py", line 7, in <module>
    for idx, sample in enumerate(dst):
  File "VILA/llava/wids/wids.py", line 594, in __getitem__
    shard, inner_idx, desc = self.get_shard(index)
  File "VILA/llava/wids/wids.py", line 589, in get_shard
    raise e
  File "VILA/llava/wids/wids.py", line 586, in get_shard
    shard = self.cache.get_shard(url)
  File "VILA/llava/wids/wids.py", line 383, in get_shard
    itf = IndexedTarSamples(path=local, stream=stream)
  File "VILA/llava/wids/wids.py", line 237, in __init__
    self.reader = MMIndexedTar(stream)
  File "VILA/llava/wids/wids_mmtar.py", line 60, in __init__
    self._build_index()
  File "VILA/llava/wids/wids_mmtar.py", line 74, in _build_index
    name = header.name.decode("utf-8").strip("\x00")
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte

Seems like a decoding error when after I untar and re-tar the dataset, it can be loaded properlly.

I've located the issues, this is because sam dataset is gzipped and the webdataset does not handle the case
~/workspace$ gzip -t sa_000000_retar.tar
gzip: dev.tar: not in gzip format

~/workspace$ gzip -t sa_000000.tar

@Lyken17 so, this isn't as easy as one might think. tar files are simple, you can just stash the offsets for each file entry and directly access them later. When the data is compressed that no longer works, naively you'd have to fully decompress the file for those offsets to be meaningful.
Many compression formats do have blocks that can be independently decoded (or settings to allow that. If that's the case it's possible to map data of interest to specific blocks so you can skip, but the granularity can be an issue, you still need to decompress a whole block (or more) to get your desired sample... whether that makes any sense would be significalty impacted by the sizing of your samples relative to compression block size, etc.
It's also going to get pretty messy to implement such a feature, for gzip, this tool is a good reference https://github.com/circulosmeos/gztool

thanks @rwightman for th detailed information.
Yeh I understand that the mmap requires the files to be stored in continual and raw binary streams. But actually the python-tar library support gzip stream already https://docs.python.org/3.10/library/tarfile.html#tarfile.open like tarfile.open("filename.tar.gz", "r:gz").  So I guess there should be a way to support on-the-fly decoding

@Lyken17 Tarfile nominally can perform random access via getmember, but if you use this with a gzipped file, it will simply reread the entire gzipped file from the beginning again each time you seek backwards. That is so inefficient as to be unusable.
We could support WIDS on gzipped files by quietly decompressing the data to a temporary file; however, this has potential for race conditions and is hard to debug. I'll think about it.
Generally, it's best just to compress the individual files in a WebDataset file. The decoder will automatically decode .gz files for you anyway. So, instead of ".txt" or ".json", just store ".txt.gz" and ".json.gz".

I didn't know the internal stuff before. Thanks for the explaination!
Still the best way so far is to save "uncompressed" tar files, tradeoff 5~15% more storage to keep compatbility.

If you want to use WIDS, then your best bet is uncompressed .tar files, but you can compress the contents. If you have lots of tiny files (e.g. Twitter messages), you can batch them, say, a list in a .json.gz file, and then unbatch them when loading.
If you use WebDataset, then of course, you can use .tar.gz freely.
I'll look into on-the-fly decompression but can't promise anything when it will be done.

A couple more comments:
The SAM datasets are not in order, meaning that corresponding .jpg and .json files are not necessarily adjacent in those tar files; WebDataset requires them to be adjacent. You can easily fix this by unpacking them and then tarring them up again with GNU tar "tar --sort=name -cvf archive.tar ." or "ls | sort | xargs tar ...".
Also, you can compress individual files inside a tar file and WebDataset will automatically decompress them for you. So, just put, say ".json.gz" instead of ".json" into the tar file and you'll get many of the same compression benefits you get from using a ZIP file.


[enhancement] click anywhere in toast body to close

it's a handy feature i've seen in other toasters.
would be good if it was optional.

You could implement this by replacing the toast component with your own.

here's a sample typescript implementation in case it helps anybody else:
import { ToastProvider, DefaultToast, ToastProps } from 'react-toast-notifications';
//...

const CustomToast: React.FC<ToastProps> = ({ children, ...props }) => (
    <DefaultToast {...props}>

props.onDismiss()} style={{cursor: "pointer"}}>{children}

    </DefaultToast>
);

ReactDOM.render(
    <ToastProvider autoDismiss={true} autoDismissTimeout={3000} components={{ Toast: CustomToast }}>
        <App />
    </ToastProvider>,
    document.getElementById('root') as HTMLElement
);


Add randomButton

Hi,
Inspired by the functionality that GitHub has for example, I think a button to select a random color could be something interesting.
https://user-images.githubusercontent.com/3856862/220574004-09de27d5-a6fb-450d-bbc8-5e3ec3c9f645.mp4
Thank you very much for this elegant color picker 🙂

I'm going to have to reject this idea and this PR. Thank you for your effort!

I'm sorry, but can you explain the reason?
Honestly we are using this library for a project and this is a functionality that we need. Before implementing it separately we wanted to support the project and make it directly native.

I don't think it's a mainstream feature people are waiting for. Of course it could be optional, but still the code has to be supported and taken into account when refactoring for example. I understand the decision.

@jepsar As I have already explained, this functionality is inspired by github:

I think they are mainstream 🙂. But naturally it is intended to be a choice of one's own implementation.

@mdbassit Forgive me 🙏, I read all the documentation but not the part about contributing.
I have deleted all changes made to the dist folder. And I know for the future that I have to make an issue first.

Here are my reasons:

Like @jepsar said, I don't think this feature is useful for most people.
The implementation interferes with the transparent close button that's used when the explicit close button is disabled (this is important for accessibility).
I dislike the aesthetic of the random button/icon.

In my opinion you should implement this just like Github, with a button that sits beside the input field and outside the color picker.

@mdbassit Thanks for your explanation. If I implement it as you have described is it something you can think about implementing/adding to Coloris? It is a functionality that I need in several projects and having it natively would be much easier for me.

I still wouldn't add this to Coloris, but here is a piece of code I put together quickly to add a random color button after a color field:
// Add a random color button after a color field wrapper
function addRandomButton() {
  document.querySelectorAll('.clr-field').forEach(wrapper => {

    if (!wrapper.nextElementSibling || !wrapper.nextElementSibling.classList.contains('clr-random')) {
      const parentNode = wrapper.parentNode;
      const field = wrapper.querySelector('input');
      const button = document.createElement('button');

      // Insert the button before the wrapper
      parentNode.insertBefore(button, wrapper);

      // Move the button after the wrapper
      parentNode.insertBefore(wrapper, button);

      // Button attributes
      button.innerHTML = 'Random color';
      button.setAttribute('type', 'button');
      button.setAttribute('class', 'clr-random');

      // Set random color on click on the button
      button.onclick = () => {
        field.value = `#${(Math.random() * 0xfffff * 1000000).toString(16).slice(0, 6)}`;
        field.dispatchEvent(new Event('input', { bubbles: true }));
      }
    }
  });
}

// To use, just call the function every time the color fields are initialized
addRandomButton();

You can style the random button however you like.

Since I had already written the functionality, the problem is not writing it or putting the button somewhere else. The interesting thing would be to be able to have the functionality in the library without having to port it from one project to another. But I understand that you don't want to and after all it is your library so you decide 🙂.


Python Library for razorpay : General Issue Request

python implementation of razorpay

A python implementation is available now.
Check it out at: https://github.com/razorpay/razorpay-python


No Scheme found when clicking on Project : Default in Legacy tab.

Setup

Rancher version: Rancher dev
Rancher UI Extensions:
Browser type & version:

Describe the bug
Attached is a video where when I click on Project: Default in the legacy section, it says No scheme found.
To Reproduce

Turn on Legacy feature
Go to Project -> Select Project: Default from the dropdown of namespaces.

Result

No scheme found.

Expected Result

I think that page shouldn't exist after removal of Project apps struct.

Screenshots
Uploading Screen Recording 2024-11-14 at 12.09.08 PM.mov…

Notes

It's important to not have 1 project selected in order to get to the Legacy --> Project page "no projects" state
The bug is to due with a redirect from "no projects" to the defunct "/legacy/project/apps" page
That defunct page relies on a schema which is in the process of being removed (catalogs v1) and in those systems the ember error page for no schema is shown. With that feature still enabled in it's just the defunct apps page with no list
Solution is to redirect from no project to valid project page


Update README.md

Update based on latest naming.

Thanks but after I saw that the merged was
Deleted


Hitting ENTER hides the dropdown

Hi,
easily reproducible http://codepen.io/moroshko/pen/WryOMP

type the letter C
hit enter

the result dropdown disappears
Expected behavior: dropdown still visible
Is there a way to hack this using #180 onKeyDown example?
thanks

We used to leave the suggestions open in this case, but this changed in #171.
What's your use case for not hiding the suggestions when Enter is pressed?

If you type something and hit enter you could have the results display fo few ms and then it hides. It feels broken.

It is even more frustrating with async operations. Can this behavior be an option?

@shprink I struggle to see the problem. Could you create a Codepen to demonstrate your frustration?

let's close this :)

It is easy. In the DOM the input and the drop down are always siblings. I
want to be able to change that.
On Aug 19, 2016 1:12 PM, "Misha Moroshko"<EMAIL_ADDRESS>wrote:

@shprink https://github.com/shprink I struggle to see the problem.
Could you create a Codepen to demonstrate your frustration?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/moroshko/react-autosuggest/issues/206#issuecomment-240991833,
or mute the thread
https://github.com/notifications/unsubscribe-auth/ABUwot7RRcFuUjqgYwWmIsf7sz213Bgoks5qhY-lgaJpZM4JS81N
.

I'm actually facing an issue and it's a bit more annoying on mobile.
I have this field that fetches async suggestions upon keystrokes and proposes stuff based on the actual value. I don't have any other way to navigate after, you gotta choose a suggestion. By having the dropdown closing on hitting Enter, we have a weird experience on mobile because the keyboard would show up on input focus and tapping done simulates a Enter, which hides the suggestions so you can really select anything.
Any way to make it as a boolean prop or something? So we can opt in if wanted?
Ref iOS keyboard:

@Magellol The role of the Autosuggest is to suggest you some options you might want to choose to save you from typing the whole thing.
Autosuggest doesn't force you to select one of the suggestions. Free text will always be allowed (think Google search).
If you want to constrain users to select one of the predefined options, consider using react-select.

@moroshko Fair enough. I was able to workaround something but thanks for suggesting another library that might suit best my needs 👍


writers.writePython2: remove / writers.writePyPy{2,3}: init

Motivation for this change
https://github.com/NixOS/nixpkgs/issues/148779
python2 is EOL and due for removal; functions unused in nixpkgs
a replacement using the PyPy interpreter is added to ease transition
Things done

Built on platform(s)

[x] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

[ ] For non-Linux: Is sandbox = true set in nix.conf? (See Nix manual)
[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[x] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review pr 150132". Note: all changes have to be committed, also see nixpkgs-review usage
[ ] Tested basic functionality of all binary files (usually in ./result/bin/)
22.05 Release Notes (or backporting 21.11 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module
[ ] (Release notes changes) Ran nixos/doc/manual/md-to-db.sh to update generated release notes

[ ] Fits CONTRIBUTING.md.

maybe we should inline the makePythonWriter function into writePython3?

This change needs an entry in the release notes and maybe an alias.

PR updated, also added writers for PyPy as an alternative for legacy scripts.

PR updated, also added writers for PyPy as an alternative for legacy scripts.

Thanks you. Unfortunately the aliases seem to be messing with pkgs.tests.writers somehow. It has probably to do with writers being an attrset, but I don't know how to make an alias in this case.

PR updated, also added writers for PyPy as an alternative for legacy scripts.

Thanks you. Unfortunately the aliases seem to be messing with pkgs.tests.writers somehow. It has probably to do with writers being an attrset, but I don't know how to make an alias in this case.

Ah yes, fixed.

sadly this has already a merge conflict.

sadly this has already a merge conflict.

Rebased the PR.

hmm, seems like the pypy3 writer test doesn't work for me:
https://p.krebsco.de/0bww66n

hmm, seems like the pypy3 writer test doesn't work for me

That is due to pypy3Packages.bootstrapped-pip not building. Nothing caused by this PR.

Why? Why remove it? Does that mean all programs written for python 2 have to be deleted now, because somebody declared it “EOL”?

Why? Why remove it? Does that mean all programs written for python 2 have to be deleted now, because somebody declared it “EOL”?

I’d like to revert this until python2 is actually removed (iff that ever happens which I honestly hope it won’t).

I’d like to revert this until python2 is actually removed (iff that ever happens which I honestly hope it won’t).

To be clear, I am rather angry at this change, breaking an API like this without any good reason (and no, “EOL” is not a good reason!) is a total no-go.

To be clear, I am rather angry at this change, breaking an API like this without any good reason (and no, “EOL” is not a good reason!) is a total no-go.

and no, “EOL” is not a good reason!

It totally is for me: the CPython 2 interpreter and its standard library almost surely have security vulnerabilities that will never be fixed.

and no, “EOL” is not a good reason!

It totally is for me: the CPython 2 interpreter and its standard library almost surely have security vulnerabilities that will never be fixed.

and no, “EOL” is not a good reason!

It totally is for me: the CPython 2 interpreter and its standard library almost surely have security vulnerabilities that will never be fixed.

Good question what kind of data writePython scripts actually handle.
But even without looking into that, that's EOL for CPython2, not Python2. We have an upstream supported Python2 interpreter in Nixpkgs.

and no, “EOL” is not a good reason!

It totally is for me: the CPython 2 interpreter and its standard library almost surely have security vulnerabilities that will never be fixed.

Good question what kind of data writePython scripts actually handle.
But even without looking into that, that's EOL for CPython2, not Python2. We have an upstream supported Python2 interpreter in Nixpkgs.

@Profpatsch This is just a helper to write a python script from a nix expression and have a given interpreter (Python2) set. To my knowledge this helper was not used in nixpkgs and most likely unused outside nixpkgs.
We want to retire Python2 from nixpkgs, because it is EOL and will not get any security fixes.
If you still need to write scripts with Python2 syntax from a nix expression, you can simply switch to writePyPy2, which will set PyPy as interpreter in the scripts shebang line. All other are urged to convert their scripts to Python3.
Further, we did not "break" the API, we rather deprecated it. You can always revive the python2-writer with an overlay without side-effects on the other script-writing helpers, if you have the need to keep it.

@Profpatsch This is just a helper to write a python script from a nix expression and have a given interpreter (Python2) set. To my knowledge this helper was not used in nixpkgs and most likely unused outside nixpkgs.
We want to retire Python2 from nixpkgs, because it is EOL and will not get any security fixes.
If you still need to write scripts with Python2 syntax from a nix expression, you can simply switch to writePyPy2, which will set PyPy as interpreter in the scripts shebang line. All other are urged to convert their scripts to Python3.
Further, we did not "break" the API, we rather deprecated it. You can always revive the python2-writer with an overlay without side-effects on the other script-writing helpers, if you have the need to keep it.


Parallelize tests

DRAFT.
An ugly SWAG at getting tests running in parallel. The results are promising, with the caveat that the implementation is rough-looking.
Without parallelization:
Evaluation took:
  939.605 seconds of real time
  938.227703 seconds of total run time (920.563960 user, 17.663743 system)
  [ Run times consist of 47.040 seconds GC time, and 891.188 seconds non-GC time. ]
  99.85% CPU
  92,010 forms interpreted
  2,679 lambdas converted
  2,548,142,861,497 processor cycles
  617,767,259,472 bytes consed

With parallelization:
Evaluation took:
  261.228 seconds of real time
  644.712250 seconds of total run time (627.920342 user, 16.791908 system)
  [ Run times consist of 46.721 seconds GC time, and 597.992 seconds non-GC time. ]
  246.80% CPU
  35 forms interpreted
  99 lambdas converted
  708,435,090,211 processor cycles
  324,243,353,296 bytes consed

Note: tweedledum is used in neither of these as I haven't rebased onto master in a while.

You stole my idea! j/k great minds think alike.  Now that I have this beefy 16-core laptop, I like this idea even more!

without parallel, without tweedledum
Evaluation took:
  341.940 seconds of real time
  343.317939 seconds of total run time (335.434383 user, 7.883556 system)
  [ Run times consist of 24.926 seconds GC time, and 318.392 seconds non-GC time. ]
  100.40% CPU
  93,992 forms interpreted
  2,572 lambdas converted
  927,327,078,390 processor cycles
  237,929,154,560 bytes consed

without parallel, with tweedledum
Evaluation took:
  187.137 seconds of real time
  187.230604 seconds of total run time (183.131409 user, 4.099195 system)
  [ Run times consist of 14.214 seconds GC time, and 173.017 seconds non-GC time. ]
  100.05% CPU
  94,404 forms interpreted
  60 lambdas converted
  507,511,488,400 processor cycles
  121,453,557,872 bytes consed

with parallel, without tweedledum
Evaluation took:
  199.927 seconds of real time
  288.363019 seconds of total run time (278.110210 user, 10.252809 system)
  [ Run times consist of 32.193 seconds GC time, and 256.171 seconds non-GC time. ]
  144.23% CPU
  48 forms interpreted
  99 lambdas converted
  542,197,138,558 processor cycles
  196,295,109,648 bytes consed

with parallel, with tweedledum
Evaluation took:
  73.254 seconds of real time
  193.507896 seconds of total run time (185.209192 user, 8.298704 system)
  [ Run times consist of 18.481 seconds GC time, and 175.027 seconds non-GC time. ]
  264.16% CPU
  48 forms interpreted
  198,663,128,394 processor cycles
  102,801,500,896 bytes consed

OK. This is probably ready for review.
It adds a couple things that invoke a parallelized test suite:

A :parallel keyword to cl-quil-tests::run-cl-quil-tests that is the number of threads to use. If nil fall back to the standard test suite (i.e. so very slow).
A test-fast target to the Makefile which will use tweedledum and some threading. You can configure the number of threads with THREADS=1000 make test-fast and it defaults to two.

With four threads and tweedledum, tests take approx 70s.

do you get readable output/backtraces when one or more tests fail from a make test-fast run?

Yes! :D

does interactive debugging in slime repl work, specifically the fiasco "retest" restart

Also yes! The other threads will continue testing while a broken test presents (and acts upon) the normal restarts.

@stylewarning Please re-re-review.