Circle check

To improve performance, use DFS to check circle

Codecov Report

Merging #4 (885d84c) into master (e38d5f7) will increase coverage by 4.45%.
The diff coverage is 89.30%.

@@            Coverage Diff             @@
##           master       #4      +/-   ##
==========================================
+ Coverage   86.34%   90.79%   +4.45%
==========================================
  Files          18       18
  Lines         769      652     -117
==========================================
- Hits          664      592      -72
+ Misses        105       60      -45

Impacted Files
Coverage Δ

Sources/Core/Atom.swift
100.00% <ø> (ø)

Sources/Core/Selectors/Selectors.swift
100.00% <ø> (+16.66%)
:arrow_up:

Sources/Core/Store.swift
83.16% <79.01%> (+0.16%)
:arrow_up:

Sources/Core/Algorithms/CircularChecker.swift
100.00% <100.00%> (ø)

Sources/Core/Algorithms/Graph.swift
100.00% <100.00%> (ø)

Sources/Core/ReadWriteValue.swift
100.00% <100.00%> (ø)

Sources/Recoil+SwfitUI/Hooks/UseRecoilValue.swift
90.69% <100.00%> (+6.97%)
:arrow_up:

...urces/Recoil+SwfitUI/Hooks/UseRecoilCallback.swift
96.82% <0.00%> (+6.34%)
:arrow_up:

Continue to review full report at Codecov.

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


What is a modal?

It seems like recent changes turned modals into essentially tooltips on at least Windows. I don't believe this was intended (unfocusable, no window borders), but maybe it's just not clear what a modal even is supposed to be.

By "modal" do you mean windows created with WindowLevel::Modal? If so, bear in mind that WindowLevel is only about the z-order, and doesn't (or at least, shouldn't according to the docs) affect borders or focus or anything else.
There was some discussion on #2042 about the cross-platform API and how it should map onto windows, but it's quite possible that we got something wrong.

Well it totally does on Windows. The code on master currently treats it 100% like a tooltip and makes it unfocusable, unclickable, unmovable and removes all decorations.

I was looking into some of this code recently and couldn't find any implementation beyond tooltips. So I was left with the impression that it isn't implemented, or at least isn't tested.
Maybe I missed something though. Do we have an example in Druid that shows modals in action?


CoreGraphics.Drawing test crashes on reference platform

Doesn't seem to be happy about unique_cf
CGContextDrawing_ImageMaskTests.cpp:167:36: note: in instantiation of function template specialization 'std::__1::unordered_map<unsigned int,
woc::unique_cf<CGImage *>, std::__1::hash, std::__1::equal_to, std::__1::allocator<std::__1::pair<const
unsigned int, woc::unique_cf<CGImage *> > > >::emplace<int, woc::unique_cf<CGImage *> >' requested here
clippingImages.emplace(newShape | newType, std::move(clipImage));
^
..//../../include/xplat/Starboard/SmartTypes.h:541:19: note: copy constructor is implicitly deleted because 'unique_cf<CGImage *>' has a
user-declared move assignment operator
unique_cf& operator=(unique_cf&& other) = delete;
^
1 error generated.
make: *** [..//../../build/Tests/UnitTests/CoreGraphics.Drawing/OSX/Objects/CGContextDrawing_ImageMaskTests.cpp.o] Error 1

That's less of a crash
and more of a build failure


setup bastion fails for 3 node cluster definition

Playbook 5 fails for a 3 node cluster:
TASK [dns : Add compute nodes to DNS reverse lookup file on bastion] ************************************************************************************************************
fatal: [bastion]: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'None' has no attribute 'split'. 'None' has no attribute 'split'\n\nThe error appears to be in '/Users/pod/Documents/Business/OCP/DevItems/release/Ansible-OpenShift-Provisioning/roles/dns/tasks/main.yaml': line 97, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n- name: Add compute nodes to DNS reverse lookup file on bastion\n  ^ here\n"}
Section 9 - Compute Nodes
  compute:
    disk_size: 120
    ram: 16384
    vcpu: 4
    vcpu_model_option: "--cpu host"
    vm_name:
      - #X
      - #X
    ip:
      - #X
      - #X
    ipv6:
      - #X
      - #X
    mac:
      - #X
      - #X
    hostname:
      - #X
      - #X

Ok, good catch.
I am using an external DNS in my setup.

:tada: This issue has been resolved in version 2.1.0 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


Add non-documented phone number verification IsValid allowed value

Loqate does not document that this is an allowed value for this property but it keeps returning responses with this value on it.
Dry::Types::ConstraintError: "Maybe" violates constraints (included_in?(["Yes", "No", "Unknown"], "Maybe") failed)

/cc @wilsonsilva  for 👀
FYI, it seems the travis build error is related with this: https://github.com/jruby/jruby/issues/6581

@wilsonsilva Thanks for reviewing!
It seems like:

Travis does not yet support the jruby version that fixes the build issue
the gemspec seems to be specific to the MRI version (spec.required_ruby_version = '>= 2.4.0').

Should we skip the jruby checks until both of those are address and they don't block the release of the new features?

@lostie Yeah, sounds good. Let's skip JRuby for the time being.


User Dashboard Page Filter Problems

When period is selected and searched accordingly, the searched area is lost. That should be sholved.

It solved.


Include runtime version in Dapr placement data to ease with upgrades

As we continue to make improvements to actors (especially reminders) and workflow, we are sometimes faced with the need to make changes that, while non-breaking (in the sense that don't alter the behavior observed by end users), are not backwards-compatible.
For example, assume that we wanted to change the format used to store reminders in the actor state store (today it's JSON, and we could use a more efficient format like protobuf). This change would make it impossible for older versions of the Dapr sidecar to be able to parse the reminders data, and would cause issues in clusters with heterogeneous Dapr versions. In fact, we can make Dapr "vNext" be able to read data created from "vCurrent", but there's no way for us to make "vCurrent" read data created by "vNext".
This scenario, where "vCurrent" and "vNext" run side-by-side, is very common while performing rolling upgrades, as there are always sidecars running alongside older versions. It generally is short-lived, as upgrades are eventually completed in minutes/hours, but if we don't manage this situation we will observe a variety of issues.
Because of this problem, it's really hard to make changes to actors/reminders, and workflow too once it reaches beta in the next release, as we'll have to manage clusters with heterogeneous versions.
A possible solution to this problem could be making each Dapr sidecar report its version to the Placement service and use that to ease with upgrades.

Every time a sidecar registers itself with Placement, it includes its Dapr version. For example, sidecar A would report 1.11.2, and sidecar B would report 1.12.0
When Placement disseminates its state, it also includes the minimum version observed among all sidecars. In this example, it would be 1.11.2. This instructs all sidecars to behave in "compatibility mode", so when they store data they must store it in the format that can be read by 1.11.2.
Once all sidecars are updated, Placement will report that minimum version is 1.12.0. Sidecars can now begin storing data in the updated format and can be confident no older sidecar will try to read that.
At that point, Placement will refuse to accept connections from sidecars running 1.11.x. This way, there's no risk that an older sidecar will try to access actor data using an old format.

Pros:

Allows us to make changes that are needed to improve actors and reminders, including their performance, without worrying about having an inconsistent state when older sidecars are running.
Can be used by actors, actor reminders, and workflow.

Cons:

Once all sidecars are updated to a certain version, it is not possible to run an older version of a Dapr sidecar in the cluster and have that use actors (other building blocks will work, but not actors and workflow).

Version will be matched using semver minor version (e.g. 1.12), so minimum version will always be "1.12.x" and not a specific patch version. This should allow rolling back to versions in the branch in case of a bad patch release. We can enforce a minimum patch version matching too if needed (e.g. if we know that 1.12.3 made some changes that impact everyone, we can say that 1.12.3 can be used as a "watermark" version)
We could also add a flag to the Dapr Placement where we enforce a different minimum version. For example, we can set a CLI flag (passed via Helm option on K8s) to always enforce minimum of 1.11.x, even if all deployed sidecars are running 1.12. This will make Dapr sidecars always run in compatibility mode with 1.11.x.

How does this work with edge builds and/or custom builds?

Good question, and I am not sure I have a good answer to this. Do you have any suggestion?

Maybe selecting a default behavior which is compatibility mode for edge builds while having users explicitly set the Dapr version that the custom build is based on.

I think that makes sense.
Here's a more complete decision matrix:

Edge builds: there are 2 kinds of edge builds:

Nightly ones built from the CI. In here, we can make sure the version is explicitly set to "edge". Placement will then consider "edge" as always one version higher than whatever versioned is specified. For example, if there are sidecars running 1.11.4 and "edge", the min version will be "1.11.4" (so, compat mode is enabled). If all sidecars are "edge", then the min version is "edge" (non-compat mode)
Apps running directly from source, such as with go run in the repo. Audience here should be Dapr developers, and here we can default to non-compatibility mode.

Custom builds

With the mandatory note that custom builds are not something we officially support, so users are a bit on their own here...
Users will have to explicitly set a version in custom builds. We should encourage users to put the version based on the upstream version they use. But they are free to do as they please.
If they don't pass a semver-compatible version, we'll use the same logic as the nightly builds.

@yaron2 @mukundansundar I've found a better solution, which involves defining a constant "Actor API version" set in the actors package. That constnat will be set to "10" in Dapr 1.12, and if a future version makes changes that require new API levels, we can increment that to for example "20".
This should solve the problems highlighted above:

It's hardcoded in the code for a specific Dapr version
No more need to ensure that the build always includes the correct version in the buildinfo package
Works with "edge" builds and custom builds too, and there's no possibility to make mistakes

I'll update the PR shortly.

Question: why are we versioning by 10, 20 etc, rather than 1, 2, or 1.0, 2.0? I think this is because we want to store the version as an int but want a precision between major versions? In any case, it’s just surprising when first reading.

Once all sidecars are updated to a certain version, it is not possible to run an older version of a Dapr sidecar in the cluster and have that use actors (other building blocks will work, but not actors and workflow).
We could also add a flag to the Dapr Placement where we enforce a different minimum version. For example, we can set a CLI flag (passed via Helm option on K8s) to always enforce minimum of "10", even if all deployed sidecars are running API level "20". This will make Dapr sidecars always run in compatibility mode with 1.12.x.

In this case, won't this essentially prevent rollbacks from happening?
Consider scenarios where events arrive in sporadic intervals. If after an upgrade the API level all changes to 20 and then it is observed that in some other component/runtime block there is a block that necessitates a rollback, then this will prevent actors from being used?
Probably a reconciliation needs to happen between what min version is represented by Placement vs Sidecar?

Question: why are we versioning by 10, 20 etc, rather than 1, 2, or 1.0, 2.0? I think this is because we want to store the version as an int but want a precision between major versions? In any case, it’s just surprising when first reading.

The version is meant to be decoupled from the Dapr version. So, 1.12 will have version "10", and then we don't need to update the version on each Dapr version; only when we make significant changes that may not be fully backwards-compatible. So, while 1.13 could have version 20, we may not need to change it until Dapr 1.16 then, for example.
The reason for skipping 10 is to be able to have hotfixes where we make changes that require increasing the version. So if 1.13 comes out with version "20", and we realize we need to change something in 1.12.4, we can use version "11" there. I believe this will be very unlikely, but it's best to be safe.
As for using ints... Exactly the reason you mentioned: they are easier to manage. With floats, checking for equality is always a bit iffy. We could use strings that represent a semver version, but that's more complex and less efficient over the wire.

In this case, won't this essentially prevent rollbacks from happening?
Consider scenarios where events arrive in sporadic intervals. If after an upgrade the API level all changes to 20 and then it is observed that in some other component/runtime block there is a block that necessitates a rollback, then this will prevent actors from being used?

Yes, that could be a problem. If a rollback is needed:

First, ideally users should not update the entire cluster and then check for issues. As long as there's one app on the older version, the minimum version is unchanged
If a rollback is needed, then users could restart the Placement service with a new "hardcoded" minimum flag. We should offer a Helm option for this.


Change format of teamcity messages for pytest

Hi there!
We started using teamcity-messages recently and had noticed that names of tests are formatted differently from XML report generated by pytest. This mismatch could lead to 2 issues:

muted tests are reported as new failures
test history could be lost

Example. If we had test test_check_foo in test_bar.py module, then
XML report would show name of the test as test_bar.test_check_foo, but teamcity-messages would format name of the test to test_bar_py.test_check_foo.
Is it possible to fix this issue?

Hi! I can fix this issue (remove _py suffix, it's ugly), but I don't want to check all other cases of different names, so please report if you find them.

Great, thanks!
Will wait for new package release to apply.

I've released v1.13 to pypi

Updated couple of days ago.
So far it works as expected.
Thank you again!


Create puzzlein005-1.json

Company Info

IEI
Company website

IoT Plug and Play Device Info

PUZZLE-IN005
TANK-880-Q370
PUZZLE-IN003B
DRPC-130-AL
PUZZLE-IN002
PUZZLE-IN004
PUZZLE-IN001A

Model Submission Goals

Device certification

Code Owners & Reserved Names

validate-repository-submission

validate-repository-submission

Sorry for the confusion, the first time you PR to this repo, a project maintainer has to explicitly allow the validation workflow to execute.

validate-repository-submission

Sorry for the confusion, the first time you PR to this repo, a project maintainer has to explicitly allow the validation workflow to execute.

First time using GitHub and Azure those things, sorry for the mistake and thank you for your reminder and reply, thanks


memory corruption after commit 01befe4

Hi,
I am experiencing crashes after commit 01befe4 (add I2C hardware reset if the hw FSM get stuck).
My crash log:
/home/michal/esp-idf/components/freertos/./queue.c:1442 (xQueueGenericReceive)- assert failed!
abort() was called at PC 0x40085f07 on core 0
0x40085f07: xQueueGenericReceive at /home/michal/esp-idf/components/freertos/./queue.c:2034

Backtrace: 0x400894f8:0x3ffbdec0 0x400895c3:0x3ffbdee0 0x40085f07:0x3ffbdf00 0x40086039:0x3ffbdf40 0x400832b5:0x3ffbdf60 0x4008339d:0x3ffbdf90 0x4010d77f:0x3ffbdfb0 0x40107b8d:0x3ffbe270 0x40107b15:0x3ffbe2c0 0x400869d3:0x3ffbe2f0 0x40088808:0x3ffbe310 0x400888d1:0x3ffbe330 0x40087c19:0x3ffbe350 0x40087cef:0x3ffbe390
0x400894f8: invoke_abort at /home/michal/esp-idf/components/esp32/./panic.c:553

0x400895c3: abort at /home/michal/esp-idf/components/esp32/./panic.c:553

0x40085f07: xQueueGenericReceive at /home/michal/esp-idf/components/freertos/./queue.c:2034

0x40086039: xQueueTakeMutexRecursive at /home/michal/esp-idf/components/freertos/./queue.c:2034

0x400832b5: lock_acquire_generic at /home/michal/esp-idf/components/newlib/./locks.c:155

0x4008339d: _lock_acquire_recursive at /home/michal/esp-idf/components/newlib/./locks.c:169

0x4010d77f: _vfiprintf_r at /Users/ivan/e/newlib_xtensa-2.2.0-bin/newlib_xtensa-2.2.0/xtensa-esp32-elf/newlib/libc/stdio/../../../.././newlib/libc/stdio/vfprintf.c:860 (discriminator 2)

0x40107b8d: fiprintf at /Users/ivan/e/newlib_xtensa-2.2.0-bin/newlib_xtensa-2.2.0/xtensa-esp32-elf/newlib/libc/stdio/../../../.././newlib/libc/stdio/fiprintf.c:50

0x40107b15: __assert_func at /Users/ivan/e/newlib_xtensa-2.2.0-bin/newlib_xtensa-2.2.0/xtensa-esp32-elf/newlib/libc/stdlib/../../../.././newlib/libc/stdlib/assert.c:59 (discriminator 8)

0x400869d3: vPortCPUAcquireMutexIntsDisabled at /home/michal/esp-idf/components/freertos/./tasks.c:4950
 (inlined by) vTaskEnterCritical at /home/michal/esp-idf/components/freertos/./tasks.c:4142

0x40088808: xEventGroupSetBits at /home/michal/esp-idf/components/freertos/./event_groups.c:277

0x400888d1: vEventGroupSetBitsCallback at /home/michal/esp-idf/components/freertos/./event_groups.c:614

0x40087c19: prvProcessReceivedCommands at /home/michal/esp-idf/components/freertos/./timers.c:847

0x40087cef: prvTimerTask at /home/michal/esp-idf/components/freertos/./timers.c:847

Steps to reproduce:

initialize i2c peripheral
perform i2c command while bad device / no device connected
call i2c_driver_delete
call any freertos queue function

Without step 2) everything works fine

Lowering stack sizes of my tasks solved this problem.

The problem still occurs sometimes.
I also noticed that I2C is now extremely slow - reading from my sensor used to take 560 us, now it takes 8 ms!!

It seems like https://github.com/espressif/esp-idf/blob/ed1e32f583980d2fefcd47690b77d5b0e1896667/components/driver/i2c.c#L300 is causing memory corruption when bad I2C device connected.

Also please note that using event groups forces us to great delays (as I mentioned 560 us operation now takes 8 ms) here:
https://github.com/espressif/esp-idf/blob/01befe4d6a2e94bfc7db6484ff586470edea3086/components/driver/i2c.c#L1146

I'm experiencing i2c timeout after a few seconds of being powered up.  This did not happen prior to 01befe4.

OK, we are testing on this, will give feedback soon.

Hi:
We found some reasons, if you can provide your test code, I think we will quickly find out reason. Can you provide your test code? Thanks

My code is at https://github.com/michprev/flyhero-esp32. This is where I try to connect to i2c device: https://github.com/michprev/flyhero-esp32/blob/master/IMU/main/IMU_Detector.cpp. When I connect SPI device my code recognizes it and then continues here: https://github.com/michprev/flyhero-esp32/blob/55237855ad2c63aa714ef83804197ac73785892b/The_Eye/main/main.cpp#L74
When I connect SPI device program crashes. With I2C device everything works fine.
Please let me know if you need more info. Thank you!

You can find more minimized code here: https://github.com/michprev/flyhero-esp32/blob/issue_i2c/IMU/main/main.cpp
IMU detector is very the same: https://github.com/michprev/flyhero-esp32/blob/issue_i2c/IMU/main/IMU_Detector.cpp
Sensor which works with no problems (I2C sensor): https://github.com/michprev/flyhero-esp32/blob/issue_i2c/IMU/main/MPU6050.cpp
Sensor which causes crashes (non-I2C sensor): https://github.com/michprev/flyhero-esp32/blob/issue_i2c/IMU/main/MPU9250.cpp

Can you provide a complete project that contains esp-idf? And , we recommend that you set the xTicksToWait parameter to non-zero when using the xQueueSend () function and the xQueueReceive () function.

Can you provide a complete project that contains esp-idf? And , we recommend that you set the xTicksToWait parameter to non-zero when using the xQueueSend () function and the xQueueReceive () function.

Can you provide a complete project that contains esp-idf? And , we recommend that you set the xTicksToWait parameter to non-zero when using the xQueueSend () function and the xQueueReceive () function.

My esp-idf is up-to-date with https://github.com/espressif/esp-idf/tree/7e8c2a9c00a6fb05cd5da306b62c4474a999b1a2 (no modifications). The root of my project is at https://github.com/michprev/flyhero-esp32/tree/issue_i2c/IMU.
Ad xTicksToWait: my application is quite time critical. I need to read sensor data every 1 or 2 ms so that I can not afford running any FreeRTOS function with non-zero ticks argument.

I believe that I finally found core of the problem.
Consider 3 following scenarios:
(1) MPU6050 (I2C-only sensor)
IMU detector tries to connect to an I2C device with this setup:
IO18 <---> SCL
IO05 <---> SDA
It succeeds and returns MPU6050 sensor (no SPI sensor checking). No problems here...
(2) MPU6000 (SPI-only sensor)
IMU detector tries to connect to an I2C device with this setup:
IO18 <---> SCL
IO05 <---> SDA
It fails at this line -> https://github.com/michprev/flyhero-esp32/blob/ad23bac4a47b9148e422a4c95394ee449cfebe4b/IMU/main/IMU_Detector.cpp#L83 , deletes I2C driver and tries to connect to an SPI device with this setup:
IO18 <---> SCLK
IO05 <---> SDI
IO17 <---> CS
IO16 <---> SDO
It succeeds and returns MPU6000 sensor. No crashes after that, everything OK!
(3) MPU9250 (SPI and even I2C device!)
IMU detector tries to connect to an I2C device with this setup:
IO18 <---> SCL
IO05 <---> SDA
It does not really fail since MPU9250 is capable of talking over I2C too but my code detects it as wrong device here -> https://github.com/michprev/flyhero-esp32/blob/ad23bac4a47b9148e422a4c95394ee449cfebe4b/IMU/main/IMU_Detector.cpp#L88
I2C driver gets deleted and IMU detector tries to connect to an SPI device:
IO18 <---> SCLK
IO05 <---> SDI
IO13 <---> CS
IO16 <---> SDO
It succeeds and returns MPU9250 sensor. After that program crashes.
The conclusion:
Please note that I am using the same pins for I2C and (when I2C fails) SPI too. When the device did not even respond to an I2C command (i2c_master_cmd_begin returned non-ESP_OK value) I uninstalled I2C driver, installed SPI driver on the same pins and it worked. When the device did respond to an I2C command but returned unexpected value I deleted the I2C driver anyway and installed SPI driver. Device did respond over SPI but then the program crashed.
Is it possible that i2c_driver_delete function forgets to uninitialize some pins or forgets to unsubscribe from an irq?
Hope it helps.
Thank you!

OK, we are doing some tests and we will notify you as soon as possible.

Hi, michprev, have you ever tried  commicute with MPU9250 only use SPI,  will the program crash?

@koobest
Hey, sure. When I comment out I2C code block in IMU detector (lines 143 to 153 of https://github.com/michprev/flyhero-esp32/blob/issue_i2c/IMU/main/IMU_Detector.cpp) there are no crashes.

I have modified my example code - https://github.com/michprev/flyhero-esp32/commit/836a62adfd9d90181ba52d1bd0946076408b24c3
Now I am getting the same crash log for all 3 sensors (MPU6050, MPU9250, MPU6000).
When I revert 01befe4 there are no crashes.

Because my code crashes always here https://github.com/espressif/esp-idf/blob/02304ad83e0a5f4815789d581446fa3afdd017b9/components/freertos/portmux_impl.h#L105 I have enabled portMUX debugging. There are my log files:
log_crash.txt
log_working.txt
My ESP-IDF is up-to-date with https://github.com/espressif/esp-idf/commit/02304ad83e0a5f4815789d581446fa3afdd017b9 (in log_working.txt I have reverted 01befe4). Code I have run - https://github.com/michprev/flyhero-esp32/tree/1b6f21ef664158ff2eff6d5c14420db71940c921/IMU.
In both cases I have had MPU6000 connected.

Hi, michprev. this problem may be related to RTOS, and currently I don't know how to solve it, but you can try to use a single core, maybe it works. configuration steps:
make menuconfig-->Component config  --->FreeRTOS  --->Run FreeRTOS only on first core
hope it helps.

@koobest
Hi, good idea. Now I am getting:
Guru Meditation Error: Core  0 panic'ed (LoadProhibited)
. Exception was unhandled.
Register dump:
PC      : 0x4008a3b0  PS      : 0x00060633  A0      : 0x8008a4c1  A1      : 0x3ffb8cf0
0x4008a3b0: xEventGroupSetBits at /home/michal/git/flyhero-esp32-idf/components/freertos/./event_groups.c:338

A2      : 0x3ffba230  A3      : 0xf5000000  A4      : 0x3ffba23c  A5      : 0x00000000
A6      : 0x3ffba248  A7      : 0x3ffafc50  A8      : 0x00040000  A9      : 0x00040000
A10     : 0xf5000000  A11     : 0x00000000  A12     : 0x00000237  A13     : 0x3ffb8d6c
A14     : 0x3ffba230  A15     : 0x00000001  SAR     : 0x00000000  EXCCAUSE: 0x0000001c
EXCVADDR: 0xf5000004  LBEG    : 0x4000c2e0  LEND    : 0x4000c2f6  LCOUNT  : 0x00000000

Backtrace: 0x4008a3b0:0x3ffb8cf0 0x4008a4be:0x3ffb8d20 0x40089412:0x3ffb8d50 0x40089503:0x3ffb8d90
0x4008a3b0: xEventGroupSetBits at /home/michal/git/flyhero-esp32-idf/components/freertos/./event_groups.c:338

0x4008a4be: vEventGroupSetBitsCallback at /home/michal/git/flyhero-esp32-idf/components/freertos/./event_groups.c:696

0x40089412: prvProcessReceivedCommands at /home/michal/git/flyhero-esp32-idf/components/freertos/./timers.c:983

0x40089503: prvTimerTask at /home/michal/git/flyhero-esp32-idf/components/freertos/./timers.c:983

It is still being worked with event group after it is deleted maybe?

Hi, michprev. we have solved this problem, and the IIC driver will be updated soon.

it caused by eventgroup

is it updated? I downloaded the latest version but i still get that error.

Hi,  @Kasperdelasopa,
I'm sorry that the update of i2c did not help you, we have had two updates on the I2C driver.  by the way  are you michprev? The test we did befor wase based on the demo provided by michprev.


Examples: make pion-to-pion cross platform

Resolves #185

Pull Request Test Coverage Report for Build 978

0 of 0   changed or added relevant lines in 0 files are covered.
1 unchanged line in 1 file lost coverage.
Overall coverage remained the same at 50.832%

Files with Coverage Reduction
New Missed Lines
%

internal/dtls/dtls.go
1
17.24%

Totals

Change from base Build 976:
0.0%

Covered Lines:
3360

Relevant Lines:
6610

💛  - Coveralls


Swagger docs url input doesn't update properly

When a new virtual directory on IIS is created (like http://localhost/exceptionless) the url input on the api documentation page does not update properly. It should show this http://localhost/exceptionless/docs/index but instead is showing this http://localhost:80/docs/index.

This doesn't work due to a possible bug in swagger. You can see in our configuration that we are not specifying the root url: https://github.com/exceptionless/Exceptionless/blob/master/Source/Api/AppBuilder.cs#L148 But swagger is trying to load it from the root.

I'm waiting on a reply from the swashbuckle issue I created. I believe this could be a bug with the library we use.

Ok
On Apr 29, 2015 4:21 PM, "Blake Niemyjski"<EMAIL_ADDRESS>wrote:

I'm waiting on a reply from the swashbuckle issue I created. I believe
this could be a bug with the library we use.
—
Reply to this email directly or view it on GitHub
https://github.com/exceptionless/Exceptionless/issues/101#issuecomment-97572914
.

@fduverger, I'm still waiting on a fix for this issue: https://github.com/domaindrivendev/Swashbuckle/issues/305

Still waiting on a fix :(

I'm going to close this as a known issue. I've sent out another update on that swashbuckle issue and will update to it when a fix is available.

did we ever find a resolution for this? I was using the swagger nuget package and when we deploy this to our dev boxes, it misses the VD and fails.

@vikpai , they still haven't fixed it in swashbuckle. https://github.com/domaindrivendev/Swashbuckle/issues/305

Thanks! @niemyjski

are there any workarounds?

You could try the one they posted in the issue. I don't want to apply it as it's pretty specific to owin.


[Feature] Determine aspect on max width and/or height

I'm developing an application where the image has to have a max width or max height. This way it will always be scaled correctly. Now I can enforce a width and height but it won't keep the aspect ratio.
Since I do not know in advance what the aspect ratio of the image is I cannot determine how the image should be scaled.
Lets say I have a frame that is 145w and 90h (maximum dimensions). If i use resize it will force the image in this frame, rather than computing how much it should remove on either one dimension.

Using getSourceWidth and getSourceHeight you can work out the aspect ratio, and decide to use resizeToWidth or resizeToHeight.

Perhaps you could add this as a function? :)

I think it's out of the scope of this library, but it's up to @adityapatadia really.
Instead, you could extend the class:
<?php

namespace HMAZonderland;

class ImageResize  extends \Eventviva\ImageResize
{
    public function getAspectRatio()
    {
        return $this->getSourceWidth() / $this->getSourceHeight();
    }
}

$r = new ImageResize('foo.jpg');

var_dump($r->getAspectRatio());

Yes, rather than adding all the functionalities it is better that users extend the base class as per their requirement. The task that you are trying to achieve is very specific and library provides enough support to achieve that.

@cainmi are we good to tag new version?

I'll have a new PR through in a few hours, then tag it.
On Feb 17, 2015 4:16 AM, "Aditya Patadia"<EMAIL_ADDRESS>wrote:

@cainmi https://github.com/cainmi are we good to tag new version?
—
Reply to this email directly or view it on GitHub
https://github.com/eventviva/php-image-resize/issues/18#issuecomment-74542018
.


monitor + visualization

Hi Philipp,
Do you plan to integrate visualization in monitor app?

Yes I do! That's a thing that is pretty high on the todo list, though I didn't have any time to work on this project the last months  :(

You might want to check out https://github.com/philhartung/aes67-visualization in the meantime. It's a little tool I developed to launch ffmpeg audio visualizations from SDP files.


Route attribute not working with area routes

When using the route attribute in XML configuration for a defined area route it seems to be ignored. Is that by design and would I need to use an external DI or is it a bug?

I am unable to reproduce the behavior you describe. Here is a project demonstrating that the route attribute works exactly the same way that RouteLink works in an Area.
The behavior of the route attribute is meant to be exactly the same as using Html.RouteLink or Url.RouteUrl in MVC. The route name acts as a filter. It makes the routing framework compare only a single route with the supplied route values rather than every route in the route table. However, all of the required route values must still be supplied to get a match (that is, any non-optional values that don't have defaults set), or you will get a null result. In a non-matching scenario in MvcSiteMapProvider, you will instead get a #, which effectively makes the current page link to itself (see #115 for an explanation).
It is possible that your routing is misconfigured. See this question as well as this question for some common routing pitfalls.

Ok, first wouldn't it be a better idea to use the route attribute to takeover the way the route is configured?!
Second, I think I know where the issue is ....
My configured routes looks like:
context.MapRoute(                 "Crm_Contacts_List",                 "Crm/Contacts/List/{group}/{sort}",                 new { controller = "Contacts", action = "Index", group = "Alle", sort = UrlParameter.Optional },                 new { sort = "^Company_Asc$|^Company_Desc$|^Lastname_Asc$|^Lastname_Desc$" }             );
And I tried the following XML configuration (also tried with preserved Parameters group and/or sort):
<mvcSiteMapNode title="$resources:Sitemap,Contacts_Title" route="Crm_Contacts_List" controller="Contacts" action="Index" visibility="CrmMenu,CrmBreadcrumb,!*" />
Is it possible that the fixed name "List" is an issue here?

Ok, first wouldn't it be a better idea to use the route attribute to takeover the way the route is configured?!

MvcSiteMapProvider doesn't configure routing for you. It consumes your existing route configuration. Routing happens near the beginning of the ASP.NET lifecycle, and displaying the view (where MvcSiteMapProvider comes into play) happens near the end of the lifecycle.
Perhaps in a future version, it might be possible to extend MVC routing to add the parent-child relationship and title that routing is missing in order to configure MvcSiteMapProvider there. But for now, this is the way it works. Most people would argue that something that deals with the UI such as MvcSiteMapProvider should be a completely separate concern than routing.

Is it possible that the fixed name "List" is an issue here?

On the contrary. Adding fixed values to the URL is one of the ways to make a route unique so routing works correctly. These fixed values affect the matching of the incoming URL and the building of the outgoing URL only. They do not affect the route values that are generated by the route (which are what MvcSiteMapProvider uses).
Routing
I believe one problem is that you are putting a constraint on an optional value. I tried doing that before, but was unable to make it function and I am pretty sure routing is not designed to work that way.
An alternative way to configure it would be to make 2 different routes to replace your optional sort value - one with the constraint and one without. In the first case, the sort parameter is required and in the second case, it is not part of the URL at all.
Do note that making sort required means that everything to its left is also required. Therefore, it makes no sense to have an optional group in the first route.
context.MapRoute(
	"Crm_Contacts_List_Sort",
	"Crm/Contacts/List/{group}/{sort}",
	new { controller = "Contacts", action = "Index" },
	new { sort = "^Company_Asc$|^Company_Desc$|^Lastname_Asc$|^Lastname_Desc$" }
);

context.MapRoute(
	"Crm_Contacts_List",
	"Crm/Contacts/List/{group}",
	new { controller = "Contacts", action = "Index", group = "Alle" }
);

I am not sure if this is exactly right for your use case, though. If it doesn't make sense to have a "default" group at all, then you should make it required by not supplying a default.
context.MapRoute(
	"Crm_Contacts_List_Sort",
	"Crm/Contacts/List/{group}/{sort}",
	new { controller = "Contacts", action = "Index"  },
	new { sort = "^Company_Asc$|^Company_Desc$|^Lastname_Asc$|^Lastname_Desc$" }
);

context.MapRoute(
	"Crm_Contacts_List",
	"Crm/Contacts/List/{group}",
	new { controller = "Contacts", action = "Index"  }
);

Usually, the right way to configure routing is to use required URL parameters, not optional parameters. The typical case is to make 1 URL map to an action. Using optional parameters makes multiple URLs map to an action (unless the alternates are explicitly suppressed using IgnoreRoute), which is neither SEO-freindly or intuitive.
In my first example, Crm_Contacts_List matches both of these URLs:
/Crm/Contacts/List
/Crm/Contacts/List/Alle

In the second example, it only matches /CrmContacts/List/Alle.
Nodes
As for your node configuration, it is not matching in this case because the node is missing matching route values for group and sort. One way fix it would be to use preservedRouteParameters:
<mvcSiteMapNode title="$resources:Sitemap,Contacts_Title"  area="Crm" controller="Contacts" action="Index" preservedRouteParameters="group,sort" visibility="CrmMenu,CrmBreadcrumb,!*" />

If group is an ambient value, that may work for you. Do note that since there is no longer a single route that this node can match, you must not specify it explicitly. When you do that, you need to specify the area to ensure the route will match.
If group is something that identifies the page rather than an ambient value, you should instead make a node for each group (typically using a dynamic node provider).
<mvcSiteMapNode title="$resources:Sitemap,Contacts_Title" area="Crm" controller="Contacts" action="Index" group="Group1" preservedRouteParameters="sort" visibility="CrmMenu,CrmBreadcrumb,!*" />
<mvcSiteMapNode title="$resources:Sitemap,Contacts_Title"  area="Crm" controller="Contacts" action="Index" group="Group2" preservedRouteParameters="sort" visibility="CrmMenu,CrmBreadcrumb,!*" />
<mvcSiteMapNode title="$resources:Sitemap,Contacts_Title"  area="Crm" controller="Contacts" action="Index" group="Group3" preservedRouteParameters="sort" visibility="CrmMenu,CrmBreadcrumb,!*" />

See How to Make MvcSiteMapProvider Remember a User's Position for a detailed explanation of these options and how they work.

First of all - thank you very much for your detailed explanation which gets me a little bit further.
Maybe you didn't see my note, but I already tried preservedRouteParameters
Nevertheless, I have now an approach that at least is generating a working link, but it adds the URL parameter area to the link, which still is not very nice. It doesn't even matter if I set the area attribute or not, I get the same result. Also I get an error if I set group as preservedRouteParameter stating that group is set in route parameters and preservedRouteParameters.
My configuration now looks like the following:
         context.MapRoute(
                "Crm_Contacts_List_Sorted",
                "Crm/Contacts/List/{group}/{sort}",
                new { controller = "Contacts", action = "Index", group = "", sort = UrlParameter.Optional },
                new { sort = "^Company_Asc$|^Company_Desc$|^Lastname_Asc$|^Lastname_Desc$" }
            );

            context.MapRoute(
                "Crm_Contacts_List",
                "Crm/Contacts/List/{group}",
                new { controller = "Contacts", action = "Index", group = "" }
            );

and the XML configuration like:
<mvcSiteMapNode title="$resources:Sitemap,Contacts_Title" route="Crm_Contacts_List" controller="Contacts" action="Index" visibility="CrmMenu,CrmBreadcrumb,!*" />

The resulting link looks like the following:
/Crm/Contacts/List?area=Crm
If I now can get rid of the URL parameter area it would be perfect suited.


As a Recruiter, I can delete an applicant

so that I can remove an applicant when he is rejected/withdraws application

No refactor needed using index method


Local dev docker setup

Related: #116. This fleshes out the docker-compose file and enables one-command local development.

Awesome, thanks for the fast review!

It looks like I might've broken CI, I'll take a look at that in another PR


[JSON RPC] add vm status to TransactionView

Motivation
Adding VM major status as vm_status to TransactionView
Test Plan
Updated unit tests to test for status in TransactionView

@bors-libra r=phoenix-antigravity

:pushpin: Commit cfc4821 has been approved by phoenix-antigravity

@bors-libra r=phoenix-antigravity

:pushpin: Commit 0cadbd5 has been approved by phoenix-antigravity

:hourglass: Testing commit 0cadbd5516016f16c35a6308465e32ef67aefc50 with merge 849f9857bd2d06e996723225fef9a3117f3b8ad4...

:sunny: Test successful - checks-actions_land_blocking_test, checks-circle_commit_workflow
Approved by: phoenix-antigravity
Pushing 849f9857bd2d06e996723225fef9a3117f3b8ad4 to master...


page.open work synchronously

Expected behavior
Page.open must open pages in async mode.
Actual behavior
Now pages are opened in sync mode. So we will wait for completion of all pages piece by piece.
Steps to reproduce the behavior
phantom.create([], {
 phantomPath: './phantomjs'
}).then(instance => {
 return Promise.all([instance.createPage(), instance.createPage()]);
}).then(pages => {
 pages[0].open(#long_running_url).then(() => console.log('long runing end'));
 pages[1].open(#fast_running_url).then(() => console.log('fast runing end'));
});

Would log 'long runing end' and only after 'fast runing end', but expected opposite.
Environment

OS: Ubuntu 14.04
Node version (node -v): 7.2.0
package version: ^3.0.1

I don't think your "expected" behavior is valid. PhantomJS is single threaded. If you were to write this in vanilla PhantomJs, it would only handle one page at a time.
If you do require both pages to work in parallel then why don't you just create two phantom instances?
Making as "upstream" dependency. Please close if this is answers your question.

I am actually pulling my hair out about a similar issue. I have an application which creates multi page reports. A page takes about 20 seconds to complete since I need to wait for resources to be loaded. If two users create a report at the same time. i.e. the page content for the second user is set before the page is rendered for the first user then either the process is closed ph.exit() when the page for the first user is rendered. Or the second user gets the page from the first user if I comment the ph.exit().
function pdf_export_map(site, siteData, req, _pdfExport_census) {
        phantom.create()
            .then(instance => {
                ph = instance;
                return instance.createPage();
            })
            .then(p => {
                page = p;
                page.open('about:blank');
            })
            .then(function () {
                var renderTimeout,
                    c = 0;

                function doRender() {
                    console.log('page loaded');
                    var d = Date.now();
                    var filename = 'm' + d.toString() + '.pdf';
                    page.render('tmp/' + filename)
                        .then(function () {
                            ph.exit();
                            req.fileStack.push(process.env.FILEPATH + filename);
                            _pdfExport_census(site, siteData, req)
                        });
                }

                page.on('onResourceRequested', function (r) {
                    c++;
                    console.log(('000' + r.id).slice(-4) + ' | ' + r.url);
                    clearTimeout(renderTimeout);
                });

                page.on('onResourceReceived', function (r) {
                    if (!r.stage || r.stage === 'end') {
                        c--;
                        console.log(('000' + r.id).slice(-4) + ' | ' + r.status);
                        if (c === 0) {
                            renderTimeout = setTimeout(doRender, 5000);
                        }
                    }
                });

                if (process.platform == 'win32') {
                    page.property('paperSize', {
                        width: '11in',
                        height: '8.5in'
                    });
                } else {
                    page.property('paperSize', {
                        width: '1056px',
                        height: '816px'
                    });
                }

                page.property('viewportSize', {
                    width: 1056,
                    height: 816
                });

                page.property('clipRect', {
                    top: 0,
                    left: 0,
                    width: 1056,
                    height: 816
                });

                ejs.renderFile('views/phantommap.ejs', {
                    site: site,
                    features: siteData.features,
                    subdirectory: process.env.SUBDIRECTORY,
                    page: req.fileStack.length + 1
                }, function (err, html) {
                    page.setContent(html, 'http://' + process.env.HOST + '/amazon/phantommap');
                });

            })
            .catch(err => {
                console.log(err);
                ph.exit();
            });
}

I just posted this on stackoverflow. No idea how to get this to play ball and have one page created after the next.

I responded to the stackoverflow question.

Hi amir20!
I've tested something like this in vanilla phantomJS:
/---------------test.js------------------------
const page = require("page");
page.open("long_run", () => { log("long"); });
page.open("fast_run", () => { log("fast"); });
/----------------------------------------------
and run it like "phantomjs test.js". The output was in async fashion - it log fast and long.
I've also tried the solution with new instance of phantom for each request, but unfortunately, the stress tests show that 100 request in 100 seconds consumes all available memory on testing machine, even when the page and instance are closed and exited after finish. I assume that it could also happen because of application, which I am open with phantom.
May be there are some good practices exists how to deliver phantom semi-to high load usage experience?

There is. You should use a pool like https://github.com/amir20/phantomjs-node/issues/590.
How were you able to run  () => { log("long"); } in phantom? () => {} syntax is not supported. At least, I thought it isn't. Now I am doubting.

Also I found https://groups.google.com/forum/#!topic/phantomjs/ytehrJKxu6M/discussion which suggests it is single like I had thought. Maybe something has changed since 2015.

I wrote arrow function just for briefness here, it not a real copy-paste. But anyway, thank you for your attention.

Now I am curious if this is actually bug. I'll try to reproduce it. I'll reopen if I think it's something I can fix. It might not be fixable due to the way process communication works with PhantomJs.

I can confirm that this is a "bug". system.stdin.readline is blocking in PhantomJS, which means that the next command isn't read/processed until the previous one has finished.
If you add
console.log('Reading...');

at the very start of the read function in shim/index.js, and execute the following code
const Phantom = require('phantom');

let phantom;

Phantom.create().then(function (instance) {
    phantom = instance;
    return Promise.all([phantom.createPage(), phantom.createPage()]);
}).then(function (pages) {
    pages[0].open('https://www.google.com').then(console.log);
    pages[1].open('https://www.google.com').then(console.log);
}).then(function () {
    phantom.exit();
});

you'll see:
...
info: Reading...
success
info: Reading...
success
info: Reading...
...

Hmm. good point! Thanks. Do you think there is a fix we can do @elias-winberg ?

@amir20 maybe we could listen for commands using a Web Server instead?

That's what it used to do. It caused memory leaks, security exceptions and a nightmare to run in cluster mode. :/ I had to find random ports to open so that I can run them with a pool of instances.
But good idea!

I had to find random ports to open so that I can run them with a pool of instances.

Yea, that's a major issue. Hmm, any other ideas?

There is a heartbeat right now implemented that send NOOP requests to phantomjs every 100ms. That should have made system.stdin.readline not block. But I think if two requests are milleseconds away from each other then it doesn't help much.
I'll have to keep thinking about it, but for now I will reopen this ticket for a short while. If we don't find a solution because phantomjs's limitations then I will close it.

The solution to this is a pool,  I'm using one and it can process about 24 PDF's in about 5 seconds using a pool of 3 phantomJs's..
return Promise.all([phantom.createPage(), phantom.createPage()]);
That is not a good idea, your trying to send 2 commands at the same time,. Don't try and do more than 2 things inside a phantomJS, it's going to give you nothing but trouble.  The IPC message loop would just get out of sync.  Phantomjs-node is using a simple protocol of Request/Response,  So Request/Request/Response will not work, the protocol would need updating with messageID's to cope with out of sync requests.
The whole idea of the NOOP was to help with implementing a pool,. So that idle Pool's would take very little CPU.  If you want I could show my Pool implementation, or maybe we could implement a Pool into phantomjs-node.

@KpjComp thanks for the response! Although one thing might not be true.

Phantomjs-node is using a simple protocol of Request/Response, So Request/Request/Response will not work, the protocol would need updating with messageID's to cope with out of sync requests.

You can actually send multiple requests. request.id is generated and tracks which request correlates to each response.  So technically it would all work.
I did some investigation on this and was able to reproduce this ticket. Both worked fine, but I couldn't figure out why it wasn't doing both at the same time. The interesting thing is that I see NOOP being processed and then suddenly it pauses. It might be that while the page is rendering for the first one, nothing else can happen.
There is a phantom pool link that was added to the bottom of the readme. I suggest using that.

Oh, should have looked at source code again before commenting. :)
Anyway, I think I might have spotted the issue.
this.id = crypto.createHash('md5').update(target + name + params.join()).digest('hex');
If you repeat a command with the same args, your going to get the same id.
Your this.commands.delete(command.id);  is now going to delete both commands.
Why not just create an increasing id, ?..

Interesting. I didnt not think about

IOW: [instance.createPage(), instance.createPage()] both of those createPage requests are going to have the same id.. the last instance.creatPage resolve will get fired, but the first was overwritten so will never get resolved.

That might fix the bug. I used actually have autogenerated id. But it was slow. So replaced with hash. Let me try it again with this.

I was not able to figure this out. I made a couple of changes doing https://github.com/amir20/phantomjs-node/compare/sync-bug?expand=1.

I made the heartbeat every 10ms not 100ms
I removed if(command in progress)
I made command.id a unique int via ++
I added logs for NOOP

After compiling and doing
const Phantom = require('phantom');

let phantom;

Phantom.create().then(function(instance) {
    phantom = instance;
    return Promise.all([phantom.createPage(), phantom.createPage()]);
}).then(function(pages) {
    pages[0].open('http://localhost:3000/slow').then(function() {console.log('slow')});
    pages[1].open('http://localhost:3000/fast').then(function() {console.log('fast')});
}).then(function() {
    phantom.exit();
});

I still see
⨉⪧ ~/Workspace/phantomjs-node/examples on sync-bug ± ⟩ env DEBUG=true node bug.js
debug: Starting /usr/local/bin/phantomjs /Users/araminfar/Workspace/phantomjs-node/examples/node_modules/phantom/lib/shim/index.js
debug: Sending: {"id":1,"target":"phantom","name":"createPage","params":[],"deferred":null}
debug: Sending: {"id":2,"target":"phantom","name":"createPage","params":[],"deferred":null}
debug: Sending NOOP command.
debug: Parsing: {"id":1,"target":"phantom","name":"createPage","params":[],"deferred":null,"response":{"pageId":1}}
debug: Parsing: {"id":2,"target":"phantom","name":"createPage","params":[],"deferred":null,"response":{"pageId":2}}
debug: Sending: {"id":3,"target":"page$1","name":"invokeAsyncMethod","params":["open","http://localhost:3000/slow"],"deferred":null}
debug: Sending: {"id":4,"target":"page$2","name":"invokeAsyncMethod","params":["open","http://localhost:3000/fast"],"deferred":null}
debug: Sending: {"id":5,"target":"phantom","name":"invokeMethod","params":["exit"],"deferred":null}
debug: Received NOOP command.
debug: Parsing: {"id":3,"target":"page$1","name":"invokeAsyncMethod","params":["open","http://localhost:3000/slow"],"deferred":null,"response":"success"}
slow
debug: Parsing: {"id":4,"target":"page$2","name":"invokeAsyncMethod","params":["open","http://localhost:3000/fast"],"deferred":null,"response":"success"}
fast
debug: Parsing: {"id":5,"target":"phantom","name":"invokeMethod","params":["exit"],"deferred":null}

The id is being incremented correctly. NOOP for some reason is not being sent every 10ms. It almost looks like phantomjs is not processing. It all comes to page.open which is implemented as follows
invokeAsyncMethod: function(command) {
        let target = objectSpace[command.target]; // this is a page object
        target[command.params[0]].apply(target, command.params.slice(1).concat(result => {
            command.response = result;
            completeCommand(command);
        })); // This adds a callback to last parameter
    },

Unless the above is blocking (which I can't imagine it would be) then I don't understand why this is behaving.
@KpjComp thoughts?

You test is wrong..
    pages[0].open('http://localhost:3000/slow').then(function() {console.log('slow')});
    pages[1].open('http://localhost:3000/fast').then(function() {console.log('fast')});

The above code is not waiting on the promise's, so your exit is getting fired too early.
Remember if you don't return from a thenable, your then method will end prematurely.
Change to the following..
return Promise.all([
    pages[0].open('http://localhost:3000/slow').then(function() {console.log('slow')}),
    pages[1].open('http://localhost:3000/fast').then(function() {console.log('fast')})
]);

I had actually done Promise.all and I noticed it didn't make a difference.  But when I fixed it, it still didn't make a difference. I just don't get why nothing is happening while slow request is executing.
In regards to your other suggestion. We already do reject all commands when exiting.
this.process.on('exit', code => {
            this.logger.debug(`Child exited with code {${code}}`);
            this._rejectAllCommands(`Phantom process stopped with exit code ${code}`);

Which does
 /**
     * rejects all commands in this.commands
     */
    _rejectAllCommands(errmsg: string = 'Phantom exited prematurely'): void {
        // prevent heartbeat from preventing this from terminating
        clearInterval(this.heartBeatId);
        for (const command of this.commands.values()) {
            if (command.deferred != null) {
                command.deferred.reject(new Error(errmsg));
            }
        }
    }

So maybe you missed that. It didn't make sense to wait for all the commads to be done. If someone calls exit() then really it should exit and reject all commands.

Because the output is still slow then fast.

That's because we see if any commands are in transit, and if there is we don't NOOP, it was like that before too.
Because the slow will take time, they will be commands in transit.
Easy solution, remove the check for commands in transit.
eg. Below remove the this.commands.size === 0 check..
_heartBeat(): void {
    if (this.commands.size === 0 && !this.isNoOpInProgress) {
        this.isNoOpInProgress = true;
        this.process.stdin.write(NOOP + os.EOL, 'utf8');
    }
}

I think you totally missed my comment above 😆  I made a branch to fix this. I did actually remove this.commands.size === 0.
You can try pulling down the branch and building that locally. I am honestly just stumped that phantomjs process just sits there doing nothing. For a minute, I thought your idea about command.id was going to fix it.

I'm not really sure now!!..
A couple of things to try,..  Firstly what is your fast/slow HTTP server code look like.
One theory I have, is does "phantom.open" block until it at least gets some data streaming.  It might be worth adding some extra logging inside the invokeAsyncMethod:  that state's when the command was called, and when it finished (add some timestamp to logging output).  PhantomJS might be blocking badly, to detect when page load is done.  It wound't surprise me if this was the case, the fact that readline does not have an async variant does not bode well here.

The server is at https://github.com/amir20/slow-server/blob/master/index.js
I haven't had time to do more logging. But that's next I guess.

One theory I have, is does "phantom.open" block until it at least gets some data streaming

If that was true, then wouldn't vanilla phantom do the same? I have tried it and it does work in parallel correctly with just phantomjs.

Ok, I'm going to do an install and see this happening..  The only other thing that I can think of is that Stdio is blocking, but our NOOP's should be unblocking the readline, allowing the stdout to send data.

Ok figured it out,... :)
Were only calling  setTimeout(read, 0); on function completeCommand(command)
If you want messages to overlap, we cal call the read sooner..
eg.. In function read do ->
        transform(command.params);
        try {
            executeCommand(command);
            setTimeout(read, 0);  //if we want to process command's overlapping we need this here
        } catch (e) {
            command.error = e.message;
            completeCommand(command);
        }

And then we can remove ->
function completeCommand(command) {
    _system2.default.stdout.writeLine('>' + JSON.stringify(command));
    // Prevent event-queue from clogging up by reads that block.
    //    setTimeout(read, 0);  //don't need this here now,.
}

Doing these changes I now get fast running end long running end

Aw man! Thanks. Pull request coming soon! It makes sense.

No problem's.
It actually got me thinking, now we know we can do multiple page requests in parallel, I'm wondering if a phantomjs pool is even required.  Javascript is single threaded, but I believe Chrome is multi-threaded per page.
So what might be useful is a Page Pool, rather than a Phantom Pool.  This might give even better performance as there might be more chance for phantomjs to cache resources, and an instance of Chrome can take a fair bit of memory.
It would still make sense though to recycle phantomJS's instances, just in case of memory leaks,.  Eg.  Say after 50 page requests or a certain amount of time do a recycle.  And to prevent recycle lag, it could be made so that the other instance fires up a few seconds beforehand.

New version released!

@oliseviche  this should be fixed now. Make sure to thank @KpjComp for his hard work. :)

Hi @amir20 and @KpjComp !
Great job! Thanks both of you for all hard work you've done! I will check it right away after the weekends.

I wrote something based on this library that runs tasks in sync
https://github.com/Attrash-Islam/phantom-tasker (Not completed yet)
You don't need to apply harmony for this phantom-tasker since it compiled through typescript 2+ which support async/await syntax in ES3/ES5! :tada: :tada: :tada:


[feature] Set search result count

Describe your idea:
I didn't found a way to set the search result count, I think the default is 50 and when I want more I should click load more every time..
Please add option to set this number or to give up this limit at all.
Thanks!

@LaryGala3 done. Option to change search results count per page added to preferences. Please try latest unstable version.


Add Option for Change Button Color as Per Theme

It make looks nice :)

YES! THANK YOU!!!

@harpreet9629 This is awesome and love the change with the select BAR (under tabs) and button possibly matching everything. Love the added --button also. However, I think you may have accidentally modified cake-theme.ts "Link" color to dark purple which is too similar to the regular text. The changes to Cake effectively remove all blue, which was custom to the theme (and not just because the button option wasn't available.) Love that future themes would be able to implement this option <3
If this merges I'll probably end up pulling again to readjust the cake theme per the original. Any way you could just revert the link 009aff , hover 008cad and new button 009aff back to blue since it isn't merged yet?
Love the gray theme too!

Done i revert theme colors back!

Done i revert theme colors back!
@harpreet9629
I love what you've done, by the way! That opens things up for future theming options which is awesome. I too am frustrated by the limited number of class options. I thought it would also be simple someday to implement other google fonts since the themes primarily use Roboto. Also might be cool to have avatars someday square | rounded | round but I haven't looked at everything.

Do you have a screenshot of gray?

It's Green not gray, i will change theme name.

@lazynina its fixed 👍


Add IterableLongStream java goodie in adventure-pack

Addresses the ticket #182

@miorel please check this PR for the ticket #182

I see the 3 out of 4 checks (PR health report) have failed. how do I address it?

I checked the logs -- everything is actually fine, it's failing when trying to post the report on the PR. I'm not totally sure why that is, it seems to be a permission issue. It'll be something to look into later.

I see the 3 out of 4 checks (PR health report) have failed. how do I address it?

I checked the logs -- everything is actually fine, it's failing when trying to post the report on the PR. I'm not totally sure why that is, it seems to be a permission issue. It'll be something to look into later.

Ohkk. Cool!

I see the 3 out of 4 checks (PR health report) have failed. how do I address it?

I checked the logs -- everything is actually fine, it's failing when trying to post the report on the PR. I'm not totally sure why that is, it seems to be a permission issue. It'll be something to look into later.

Ohkk. Cool!

I see the 3 out of 4 checks (PR health report) have failed. how do I address it?

I checked the logs -- everything is actually fine, it's failing when trying to post the report on the PR. I'm not totally sure why that is, it seems to be a permission issue. It'll be something to look into later.

Ohkk. Cool!

I see the 3 out of 4 checks (PR health report) have failed. how do I address it?

I checked the logs -- everything is actually fine, it's failing when trying to post the report on the PR. I'm not totally sure why that is, it seems to be a permission issue. It'll be something to look into later.

Ohkk. Cool!

I see the 3 out of 4 checks (PR health report) have failed. how do I address it?

I checked the logs -- everything is actually fine, it's failing when trying to post the report on the PR. I'm not totally sure why that is, it seems to be a permission issue. It'll be something to look into later.

Ohkk. Cool!

I see the 3 out of 4 checks (PR health report) have failed. how do I address it?

I checked the logs -- everything is actually fine, it's failing when trying to post the report on the PR. I'm not totally sure why that is, it seems to be a permission issue. It'll be something to look into later.

Ohkk. Cool!

I see the 3 out of 4 checks (PR health report) have failed. how do I address it?

I checked the logs -- everything is actually fine, it's failing when trying to post the report on the PR. I'm not totally sure why that is, it seems to be a permission issue. It'll be something to look into later.

Ohkk. Cool!


Allow individual comments in a comment thread to be expand/collapsed, similar to how a whole comment thread can be expanded/collapsed

Need to toggle the status of vscode.Comment for showing/hiding.

It's not easy to scroll the thread when it has many comments that are also scrolling like ...
Example: https://github.com/akudo7/kudos-gpt/blob/main/kudos-gpt.v1.1.0.gif
Thanks!

@akudo7 can you explain further? The icon you have outlined in red collapses the comment. Are you expecting it to do something else?

@alexr00 Hi thanks for the reply. I need to do showing/hiding comments like we do for threads. If we could do it with VScode SDK, we could add that features like the icon I have outlined in red collapses the comment.
Feel free to let me know if you need my explanation further.
Thanks!

I understand now, thanks for explaining further.

This feature request is now a candidate for our backlog. The community has 60 days to upvote the issue. If it receives 20 upvotes we will move it to our backlog. If not, we will close it. To learn more about how we handle feature requests, please see our documentation.
Happy Coding!

This feature request has not yet received the 20 community upvotes it takes to make to our backlog. 10 days to go. To learn more about how we handle feature requests, please see our documentation.
Happy Coding!

:slightly_frowning_face: In the last 60 days, this feature request has received less than 20 community upvotes and we closed it. Still a big Thank You to you for taking the time to create this issue! To learn more about how we handle feature requests, please see our documentation.
Happy Coding!


No wallpaper, background stays black

Regression?
Yes
System Info and Version
Hyprland, built from branch main at commit df4f222482a7c2a1116ef5c91ba6e4b55d94ad6c  (layersurface: remove layer on destroy from monitor (7457)).
Date: Fri Aug 23 15:06:52 2024
Tag: v0.42.0-60-gdf4f2224, commits: 5129
flags: (if any)
System Information:
System name: Linux
Node name: alek-pc
Release: 6.10.6-2-cachyos
Version: #1 SMP PREEMPT_DYNAMIC Wed, 21 Aug 2024 17:20:14 +0000
GPU information:
0b:00.0 VGA compatible controller [0300]: NVIDIA Corporation GA102 [GeForce RTX 3080 Ti] [10de:2208] (rev a1) (prog-if 00 [VGA controller])
NVRM version: NVIDIA UNIX Open Kernel Module for x86_64  555.58.02  Release Build  (archlinux-builder@alek-pc)
os-release: NAME=ArcoLinux
ID=arcolinux
ID_LIKE=arch
BUILD_ID=rolling
ANSI_COLOR="0;36"
HOME_URL="https://arcolinux.info/"
SUPPORT_URL="https://arcolinuxforum.com/"
BUG_REPORT_URL="https://github.com/arcolinux"
LOGO=arcolinux-hello
plugins:
======Config-Start======
Config File: /home/alek/.config/hypr/hyprland.conf: Read Succeeded
This is an example Hyprland config file.

Refer to the wiki for more information.

Please note not all available settings / options are set here.
For a full list, see the wiki

#env = LIBVA_DRIVER_NAME,nvidia
#env = XDG_SESSION_TYPE,wayland
#env = GBM_BACKEND,nvidia-drm
#env = __GLX_VENDOR_LIBRARY_NAME,nvidia
info at https://wiki.hyprland.org/
See https://wiki.hyprland.org/Configuring/Monitors/
monitor=,preferred,auto,auto
monitor=DP-2, 2560x1440@240, 0x0, 1, vrr, 2, bitdepth, 10
monitor=HDMI-A-1, 1920x1080, 2560x0, 1
workspace=name:1, monitor:DP-2, default:true
workspace=name:2, monitor:HDMI-A-1
exec-once = xrandr --output DP-2 --primary
exec-once = hyperctl dispatch workspace 1
Output
Configure your Display resolution, offset, scale and Monitors here, use hyprctl monitors to get the info.
#monitor=HDMI-A-1,1920x1080@60,0x0,1
#workspace=HDMI-A-1,1
#monitor=HDMI-A-2,1920x1080@60,1920x0,1
#workspace=HDMI-A-2,2
Example :
#monitor=eDP-1,1920x1080@60,0x0,1
#monitor=eDP-1,transform,0
#monitor=eDP-1,addreserved,10,10,10,10
#workspace=eDP-1,1
See https://wiki.hyprland.org/Configuring/Keywords/ for more
Setting variables
$mainMod = SUPER
$localBin = $HOME/.local/bin
$scriptsDir = $HOME/.config/hypr/scripts
$hyprDir = $HOME/.config/hypr
$term = kitty
$menu = $scriptsDir/menu
$fullmenu = $scriptsDir/fullmenu
$volume = $scriptsDir/volume
$backlight = $scriptsDir/brightness
$screenshot = $scriptsDir/screenshot
$lock = $scriptsDir/lockscreen
$colorpicker = $scriptsDir/colorpicker
$wofi_beats = $scriptsDir/wofi-beats
$files = thunar
$browser = librewolf
$editor = nvim
Some default env vars
env = XCURSOR_SIZE,24
Startup
exec-once = $scriptsDir/startup
#exec-once = swaybg -m fill -i $HOME/.config/hypr/bg/minimal.png
exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
exec-once = $scriptsDir/portal
#exec-once = hyprpm reload -n
#exec-once = hyprpm update
exec-once = nm-applet --indicator
exec-once = ulauncher --hide-window
exec-once = mullvad-vpn
exec-once = variety
exec-once = pcloud
exec-once = /usr/lib/kdeconnectd
exec-once = mako -c ~/.config/mako/config
exec-once = sleep 5 && /usr/bin/noisetorch -i alsa_input.usb-SteelSeries-SteelSeries_Arctis_7-00.mono-chat
with lock - hyprlock
exec-once = hypridle
with lock - hyprctl
exec-once = swayidle -w timeout 1200 '$lock' timeout 1200 'hyprctl dispatch dpms off' resume 'hyprctl dispatch dpms on' before-sleep '$lock'
with lock - swaylock
#exec-once = swayidle -w timeout 1200 'swaylock -f -e -i ~/.config/swaylock/swaylock.jpg'' timeout 1200 '' resume '' before-sleep 'swaylock -f -e -i ~/.config/swaylock/swaylock.jpg''
without lock
exec-once = swayidle -w  timeout 1200 'hyprctl dispatch dpms off' resume 'hyprctl dispatch dpms on'
For all categories, see https://wiki.hyprland.org/Configuring/Variables/
cursor {
inactive_timeout = 5
}
input {
qwertz
kb_layout = de
azerty
#kb_layout = be
kb_variant =
kb_model =
kb_options =
kb_rules =
follow_mouse = 1
numlock_by_default = 1
touchpad {
natural_scroll = true
tap-to-click = true
drag_lock = true
disable_while_typing = true
}
sensitivity = 0.0 # -1.0 - 1.0, 0 means no modification
accel_profile = flat
}
misc {
disable_hyprland_logo = true
disable_splash_rendering = true
mouse_move_enables_dpms = true
}
render {
direct_scanout = true
}
binds {
workspace_back_and_forth = false
}
general {
See https://wiki.hyprland.org/Configuring/Variables/ for more
gaps_in = 3
gaps_out = 7
border_size = 2
allow_tearing = true
#one color
#col.active_border = rgba(7aa2f7aa)
#two colors - gradient
col.active_border = rgba(7aa2f7aa) rgba(c4a7e7aa) 45deg
col.inactive_border = rgba(414868aa)
#layout = master
layout = dwindle
}
decoration {
# See https://wiki.hyprland.org/Configuring/Variables/ for more
rounding = 0

blur {
    enabled = true
    size = 3
    passes = 1
}

drop_shadow = true
shadow_range = 4
shadow_render_power = 3
col.shadow = rgba(1a1a1aee)

}
blurls = waybar
animations {
enabled = true
Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
bezier = myBezier, 0.05, 0.9, 0.1, 1.05
animation = windows, 1, 7, myBezier
animation = windowsOut, 1, 7, default, popin 80%
animation = border, 1, 10, default
animation = fade, 1, 7, default
animation = workspaces, 1, 6, default
}
dwindle {
See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
pseudotile = true
preserve_split = true
}
master {
See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
new_status = slave
mfact = 0.5
}
gestures {
See https://wiki.hyprland.org/Configuring/Variables/ for more
workspace_swipe = false
workspace_swipe_fingers = 3
}
Example per-device config
See https://wiki.hyprland.org/Configuring/Keywords/#executing for more
#device:epic mouse V1 {
sensitivity = -0.5
#}
See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
Example windowrule v1
windowrule = float, yad|nm-connection-editor|pavucontrol
windowrule = float, feh|Gimp|qt5ct
windowrule = float, nlogout
windowrule = noborder, ulauncher
Example windowrule v2
windowrulev2 = tile, class:^(Spotify)$
Hypridle modes: none, always, focus, fullscreen
windowrulev2 = idleinhibit focus, class:^(FreeTube)$
windowrulev2 = idleinhibit focus, class:^(com.stremio.stremio)$
Allow tearing in specific games
windowrulev2 = immediate, class:^(steam_app_2073850)$
windowrulev2 = immediate, class:^(steam_app_990080)$
windowrulev2 = immediate, class:^(steam_app_1091500)$
windowrulev2 = workspace 4, class:^(Apache Directory Studio)$
windowrulev2 = bordercolor rgb(EE4B55) rgb(880808), fullscreen:1
windowrulev2 = bordercolor rgb(282737) rgb(1E1D2D), floating:1
windowrulev2 = opacity 0.8 0.8, pinned:1
windowrulev2 = workspace 10, class:^(Microsoft-edge)$
windowrulev2 = workspace 8 silent, class^(Steam)$, title:^(Steam)$
windowrulev2 = float,class:^(firefox)$,title:^(Picture-in-Picture)$
for waybar yay update click
windowrulev2 = animation popin, class:^(update)$, title:^(update)$
windowrulev2 = float, class:^(update)$, title:^(update)$
windowrulev2 = size 60% 50%, class:^(update)$, title:^(update)$
windowrulev2 = center, class:^(update)$, title:^(update)$
for ttyclock
windowrulev2 = float, class:^(clock)$, title:^(clock)$
windowrulev2 = size 33% 27%, class:^(clock)$, title:^(clock)$
windowrulev2 = center, class:^(clock)$, title:^(clock)$
Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
bind = $mainMod SHIFT, R, exec, hyprctl reload
bind = $mainMod, Y, exec, ulauncher-toggle
bind = $mainMod SHIFT, D, exec, $fullmenu
bind = $mainMod, D, exec, $menu
bind = $mainMod SHIFT, Q, killactive
bind = $mainMod SHIFT, Return, exec, $files
bind = $mainMod SHIFT, Space, togglefloating
bind = $mainMod, C, exec, conky-toggle
bind = $mainMod, E, exec, code
bind = $mainMod, F, fullscreen
bind = $mainMod, Q, killactive,
bind = $mainMod, R, exec, rofi-theme-selector
bind = $mainMod, Return, exec, $term
bind = $mainMod, T, exec, $term
bind = $mainMod, V, exec, pavucontrol
bind = CTRL ALT, A, exec, xfce4-appfinder
bind = CTRL ALT, C, exec, catfish
bind = CTRL ALT, B, exec, $files
bind = CTRL ALT, E, exec, archlinux-tweak-tool
bind = CTRL ALT, F, exec, firefox
bind = CTRL ALT, G, exec, chromium -no-default-browser-check
bind = CTRL ALT, I, exec, nitrogen
bind = CTRL ALT, K, exec, $scriptsDir/lockscreen
bind = CTRL ALT, L, exec, hyprlock
bind = CTRL ALT, NEXT, exec, conky-rotate -n
bind = CTRL ALT, P, exec, pamac-manager
bind = CTRL ALT, PREVIOUS, exec, conky-rotate -p
bind = CTRL ALT, R, exec, rofi-theme-selector
bind = CTRL ALT, Return, exec, foot
bind = CTRL ALT, S, exec, spotify
bind = CTRL ALT, T, exec, $term
bind = CTRL ALT, U, exec, pavucontrol
bind = CTRL ALT, V, exec, vivaldi-stable
bind = CTRL ALT, W, exec, arcolinux-welcome-app
bind = CTRL SHIFT, Escape, exec, $term --class btop -T btop -e btop
bind = CTRL ALT, END, exec, $term --class btop -T btop -e btop
change wallpaper
bind = ALT, n, exec, $scriptsDir/changeWallpaper
bind = ALT, p, exec, $scriptsDir/changeWallpaper
bind = ALT, left, exec, $scriptsDir/changeWallpaper
bind = ALT, right, exec, $scriptsDir/changeWallpaper
bind = ALT, up, exec, $scriptsDir/changeWallpaperDesktop
bind = ALT, down, exec, $scriptsDir/changeWallpaperDesktop
Variety
trash wallpaper
bind = SHIFT ALT, t, exec, variety -t
next wallpaper
bind = SHIFT ALT, x, exec, variety -n
#bind = ALT SHIFT, n, exec, variety -n && wal -i $(cat $HOME/.config/variety/wallpaper/wallpaper.jpg.txt) && ~/.config/hypr/scripts/statusbar &
#bind = ALT, right, exec, variety -n
previous wallpaper
bind = SHIFT ALT, y, exec, variety -p
#bind = ALT SHIFT, p, exec, variety -p && wal -i $(cat $HOME/.config/variety/wallpaper/wallpaper.jpg.txt) && ~/.config/hypr/scripts/statusbar &
#bind = ALT, left, exec, variety -p
favorite wallpaper
bind = SHIFT ALT, f, exec, variety -f
pause wallpaper
#bind = ALT, up, exec, variety --toggle-pause
pause wallpaper + wal
#bind = ALT SHIFT, up, exec, variety --toggle-pause && wal -i $(cat $HOME/.config/variety/wallpaper/wallpaper.jpg.txt) && ~/.config/hypr/scripts/statusbar &
resume wallpaper
#bind = ALT, down, exec, variety --resume
show current wallpaper
bind = SHIFT ALT, g, exec, qimgv $(variety --get)
effect
bind = ALT, g, exec, $scriptsDir/glassmorphismToggle
bind = ALT, F3, exec, xfce4-appfinder
bind = , F12, exec, xfce4-terminal --drop-down
bind = $mainMod SHIFT, M, exec, hyprctl dispatch splitratio -0.1
bind = $mainMod, M, exec, hyprctl dispatch splitratio 0.1
bind = $mainMod SHIFT, Y, exec, $term --class clock -T clock -e tty-clock -c -C 7 -r -s -f "%A, %B, %d"
#bind = $mainMod, D, layoutmsg, removemaster
bind = $mainMod, Escape, exec, hyprctl kill
bind = $mainMod, I, layoutmsg, addmaster
bind = $mainMod, J, layoutmsg, cyclenext
bind = $mainMod, K, layoutmsg, cycleprev
bind = $mainMod, P, pseudo
bind = $mainMod CTRL, Return, layoutmsg, swapwithmaster
#bind = $mainMod, Space, exec, $scriptsDir/changeLayout
bind = $mainMod, X, exec, archlinux-logout
bind = ALT, X, exec, nlogout
bind = ALT SHIFT, X, exec, nlogout
bind = $mainMod SHIFT, X, exec, arcolinux-powermenu
#bind = $mainMod, Y, exec, $term --class update -T update -e cava # f to cycle through foreground colors
Mainmod + Function keys
bind = $mainMod, F1, exec, $browser
bind = $mainMod, F2, exec, $editor
bind = $mainMod, F3, exec, inkscape
bind = $mainMod, F4, exec, gimp
bind = $mainMod, F5, exec, meld
bind = $mainMod, F6, exec, vlc
bind = $mainMod, F7, exec, virtualbox
bind = $mainMod, F8, exec, $files
bind = $mainMod, F9, exec, lollypop
bind = $mainMod, F10, exec, spotify
bind = $mainMod, F11, exec, rofi -show drun
bind = $mainMod, F12, exec, rofi -show drun
Special Keys
bind = , xf86audioraisevolume, exec, $volume --inc
bind = , xf86audiolowervolume, exec, $volume --dec
bind = , xf86audiomute, exec, $volume --toggle
bind = , xf86audioplay, exec, playerctl play-pause
bind = , xf86audionext, exec, playerctl next
bind = , xf86audioprev, exec, playerctl previous
bind = , xf86audiostop, exec, playerctl stop
bind = , xf86monbrightnessup, exec, $brightness --inc
bind = , xf86monbrightnessdown, exec, $brightness --dec
Backlight control
bind = $mainMod SHIFT, equal, submap, backlight
submap = backlight
bind = , equal, exec, $backlight --inc
bind = , minus, exec, $backlight --dec
bind = , escape, submap, reset
submap = reset
Volume control
bind = $mainMod, equal, submap, volume
submap = volume
bind = , equal, exec, $volume --inc
bind = , minus, exec, $volume --dec
bind = , 0, exec, $volume --toggle
bind = , 9, exec, $volume --toggle-mic
bind = , escape, submap, reset
submap = reset
Resize
binde = $mainMod CTRL, H, resizeactive,-20 0
binde = $mainMod CTRL, L, resizeactive,20 0
binde = $mainMod CTRL, K, resizeactive,0 -20
binde = $mainMod CTRL, J, resizeactive,0 20
Move
#bind = $mainMod CTRL, H, movewindow, l
#bind = $mainMod CTRL, L, movewindow, r
#bind = $mainMod CTRL, K, movewindow, u
#bind = $mainMod CTRL, J, movewindow, d
bind = $mainMod SHIFT, H, movewindoworgroup, l
bind = $mainMod SHIFT, L, movewindoworgroup, r
bind = $mainMod SHIFT, K, movewindoworgroup, u
bind = $mainMod SHIFT, J, movewindoworgroup, d
Move focus with mainMod + arrow keys
bind = $mainMod, left, movefocus, l
bind = $mainMod, right, movefocus, r
bind = $mainMod, up, movefocus, u
bind = $mainMod, down, movefocus, d
Move focus with mainMod + hjkl
bind = $mainMod, h, movefocus, l
bind = $mainMod, l, movefocus, r
bind = $mainMod, k, movefocus, u
bind = $mainMod, j, movefocus, d
Special workspace
bind = $mainMod SHIFT, U, movetoworkspace, special
bind = $mainMod, U, togglespecialworkspace,
Scroll through existing workspaces with mainMod + scroll
bind = $mainMod, mouse_down, workspace, e+1
bind = $mainMod, mouse_up, workspace, e-1
bind = $mainMod, period, workspace, e+1
bind = $mainMod, comma, workspace, e-1
Move/resize windows with mainMod + LMB/RMB and dragging
bindm = $mainMod, mouse:272, movewindow
bindm = $mainMod, mouse:273, resizewindow
bind = $mainMod, G, togglegroup
#bind = $mainMod, tab, workspace, m+1
bind = ALT, tab, changegroupactive
bind = $mainMod, tab, cyclenext
#bind = $mainMod SHIFT, tab, workspace, m-1
bind = $mainMod SHIFT, tab, movegroupwindow
#bind = ALT, tab, workspace, m+1
#bind = ALT SHIFT, tab, workspace, m-1
bind = $mainMod, O, exec, $colorpicker
bind = $mainMod SHIFT, O, exec, $term --class hyprpicker --hold -e hyprpicker
bind = $mainMod CTRL, S, exec, $wofi_beats
Screenshot keybindings
bind = , Print, exec, $screenshot --now
bind = $mainMod, Print, exec, $screenshot --in5
bind = SHIFT, Print, exec, $screenshot --in10
bind = CTRL, Print, exec, $screenshot --win
bind = $mainMod CTRL, Print, exec, flameshot gui
Qwerty
Switch workspaces with mainMod + [0-9]
bind = $mainMod, 1, workspace, 1
bind = $mainMod, 2, workspace, 2
bind = $mainMod, 3, workspace, 3
bind = $mainMod, 4, workspace, 4
bind = $mainMod, 5, workspace, 5
bind = $mainMod, 6, workspace, 6
bind = $mainMod, 7, workspace, 7
bind = $mainMod, 8, workspace, 8
bind = $mainMod, 9, workspace, 9
bind = $mainMod, 0, workspace, 10
Azerty
Switch workspaces with mainMod + [0-9]
#bind = $mainMod, Ampersand, workspace, 1
#bind = $mainMod, Eacute, workspace, 2
#bind = $mainMod, Quotedbl, workspace, 3
#bind = $mainMod, Apostrophe, workspace, 4
#bind = $mainMod, Parenleft, workspace, 5
#bind = $mainMod, Section, workspace, 6
#bind = $mainMod, Egrave, workspace, 7
#bind = $mainMod, Exclam, workspace, 8
#bind = $mainMod, ccedilla, workspace, 9
#bind = $mainMod, agrave, workspace, 10
Qwerty
Move active window and follow to workspace
bind = $mainMod CTRL, 1, movetoworkspace, 1
bind = $mainMod CTRL, 2, movetoworkspace, 2
bind = $mainMod CTRL, 3, movetoworkspace, 3
bind = $mainMod CTRL, 4, movetoworkspace, 4
bind = $mainMod CTRL, 5, movetoworkspace, 5
bind = $mainMod CTRL, 6, movetoworkspace, 6
bind = $mainMod CTRL, 7, movetoworkspace, 7
bind = $mainMod CTRL, 8, movetoworkspace, 8
bind = $mainMod CTRL, 9, movetoworkspace, 9
bind = $mainMod CTRL, 0, movetoworkspace, 10
bind = $mainMod CTRL, bracketleft, movetoworkspace, -1
bind = $mainMod CTRL, bracketright, movetoworkspace, +1
Azerty
Move active window and follow to workspace
#bind = $mainMod CTRL, Ampersand, movetoworkspace, 1
#bind = $mainMod CTRL, Eacute, movetoworkspace, 2
#bind = $mainMod CTRL, Quotedbl, movetoworkspace, 3
#bind = $mainMod CTRL, Apostrophe, movetoworkspace, 4
#bind = $mainMod CTRL, Parenleft, movetoworkspace, 5
#bind = $mainMod CTRL, Section, movetoworkspace, 6
#bind = $mainMod CTRL, Egrave, movetoworkspace, 7
#bind = $mainMod CTRL, Exclam, movetoworkspace, 8
#bind = $mainMod CTRL, ccedilla, movetoworkspace, 9
#bind = $mainMod CTRL, agrave, movetoworkspace, 10
#bind = $mainMod CTRL, bracketleft, movetoworkspace, -1
#bind = $mainMod CTRL, bracketright, movetoworkspace, +1
Qwerty
Move active window to a workspace with mainMod + SHIFT + [0-9]
bind = $mainMod SHIFT, 1, movetoworkspacesilent, 1
bind = $mainMod SHIFT, 2, movetoworkspacesilent, 2
bind = $mainMod SHIFT, 3, movetoworkspacesilent, 3
bind = $mainMod SHIFT, 4, movetoworkspacesilent, 4
bind = $mainMod SHIFT, 5, movetoworkspacesilent, 5
bind = $mainMod SHIFT, 6, movetoworkspacesilent, 6
bind = $mainMod SHIFT, 7, movetoworkspacesilent, 7
bind = $mainMod SHIFT, 8, movetoworkspacesilent, 8
bind = $mainMod SHIFT, 9, movetoworkspacesilent, 9
bind = $mainMod SHIFT, 0, movetoworkspacesilent, 10
bind = $mainMod SHIFT, bracketleft, movetoworkspacesilent, -1
bind = $mainMod SHIFT, bracketright, movetoworkspacesilent, +1
Azerty
Move active window to a workspace with mainMod + SHIFT + [0-9]
#bind = $mainMod SHIFT, Ampersand, movetoworkspacesilent, 1
#bind = $mainMod SHIFT, Eacute, movetoworkspacesilent, 2
#bind = $mainMod SHIFT, Quotedbl, movetoworkspacesilent, 3
#bind = $mainMod SHIFT, Apostrophe, movetoworkspacesilent, 4
#bind = $mainMod SHIFT, Parenleft, movetoworkspacesilent, 5
#bind = $mainMod SHIFT, Section, movetoworkspacesilent, 6
#bind = $mainMod SHIFT, Egrave, movetoworkspacesilent, 7
#bind = $mainMod SHIFT, Exclam, movetoworkspacesilent, 8
#bind = $mainMod SHIFT, ccedilla, movetoworkspacesilent, 9
#bind = $mainMod SHIFT, agrave, movetoworkspacesilent, 10
#bind = $mainMod SHIFT, bracketleft, movetoworkspacesilent, -1
#bind = $mainMod SHIFT, bracketright, movetoworkspacesilent, +1
======Config-End========
Description
I stumbled upon  #7319 and I have very the same issue. Except it doesn't concern the default background but any background I set. The background just stays black after login no matter how I try to set it. I've tried feh and variety.
The issue started only a few days back, maybe a week.  I'm on Archlinux (well Arch based Arcolinux) using the latest git from AUR/Chaotic (I tried both). Downgrading to the latest release 0.42 fixes this issue.
My wallpaper manager (Variety) works just fine and I can switch backgrounds and open the one which is currently set with a shortcut just fine. So that part is working. The actual background stays black nonetheless.
Is this related to #7319 and a packaging issue (in AUR this time)?
Maybe I should also mention that I'm on Nvidia (nvidia-open-dkms) and I tried both with and without the nvidia envs set in hyprland.conf (they don't seem to make a difference anymore, so usually I leave them commented out).
How to reproduce
Login to a hyprland session on an up to date Archlinux system with a current hyprland-git (dependencies are all latest git as well). The background will not show and stay black. It worked just fine until some commit about a week ago. Nvidia (nvidia-open-dkms 555.58.02-17).
Crash reports, logs, images, videos
hyprland.log

what's your wallpaper daemon? does swaybg work? hyprpaper?

You are correct.  Setting the wallpaper manually with swaybg --image /path/to/file works. Until I CTRL+C out of it. So why does it work with hyprland 0.42 and not anymore with hyprland-git? Do I need to change something?

idk what backend your thing uses, maybe we broke something in it?
wtf is variety?

I don't know either. It is my preferred wallpaper manager because it downloads wallpapers from a chosen tag/url automatically. It makes looking for wallpapers obsolete.

me neither, can you pass WAYLAND_DEBUG=1 logs from it?

So when I simply add exec-once = swaybg to my hyprland.conf everything works again. The only question that remains would be why is this necessary now? Ofcourse I'm fine with that.
WAYLAND_DEBUG? How do I do that? Are you talking about wayland-debug-cli-git which I found looking in the AUR?

Same issue here, no customizations have been done to the config. Simply upgraded from 0.41.2-3 to 0.42.0-1 and got a black screen on Hyprland startup along with the cursor being pinned to the top left corner (before the cursor was at a random point on the screen).

@keliss I'm not sure this is the exact same issue since I didn't have any problems with my cursor and my issue didn't appear on upgrade to 0.42.0-1. That version simply works without adding the extra exec-once = swaybg. My problem started with a recent commit change in hyprland-git.

WAYLAND_DEBUG=1 <whatever command you use to launch your wallpaper daemon> in the terminal

The output is in the attachment.
So unsurprisingly the command WAYLAND_DEBUG=1 swaybg -m fill -i $HOME/wallhaven-9mj8v1.jpg works just fine. Which is why I'm not sure there will be anything interesting in the log file.
The strange part still is that a line like this in hyprland.conf executing swaybg once at launch is now necessary. Even though it wasn't a short while ago with hyprland-git and still isn't when I downgrade to the release version 0.42.0-1 in the Archlinux extra-repo.
I guess some part is executing swaybg on launch with the older versions of Hyprland but for whatever reason can't anymore. All the more interesting that manually adding exec-once = swaybg simply does the job...
swaybg.log

I'm unsure I follow?

Let me try and rephrase: Adding exec = swaybg to hyprland.conf solves the problem. Now if I were to comment out that line, and restart the background would stay black. But if I then would downgrade from hyprland-git (AUR) to the last release from the Archlinux repository 0.42.0-1 and then restart again, the background/wallpaper would appear just fine even though that line is still commented out. I have to admit I don't even know what is responsible for launching swaybg in that last scenario. All I do know is something changed recently.
But as I've said I'm just happy it works now. Feel free to tell me if you need more info. Or we can consider this solved and close this issue. And thank you again.

leave it open, but this is weird, bisecting this would surely help

Hello, I have the same error that happen only when I use autologin on my display manager. Without autologin, I have a wallpaper. I want to use autologin to start hyprlock at start and use it as my lock screen


[YUNIKORN-1528] Add gang scheduling test suites - Phase 2

What is this PR for?
Cover the left out test methods of Gang scheduling test suite.
What type of PR is it?

[ ] - Improvement

Todos

[ ] - Task

What is the Jira issue?
https://issues.apache.org/jira/browse/YUNIKORN-1528
How should this be tested?
Screenshots (if appropriate)
Questions:

[ ] - The licenses files need update.
[ ] - There is breaking changes for older versions.
[ ] - It needs documentation.

@manirajv06 we probably need YUNIKORN-1525 fixed so we can get the unit tests to pass and run the e2e tests.
I kicked of the build again and see if it at least gets us passed the unit tests now.

Cleaned up all debug statements. All tests are passing consistently, ready for merge. Raised https://issues.apache.org/jira/browse/YUNIKORN-1533 for v1.22.15 failures. It is related to the untrusted users.

+1 merging soon