Component Division

Description
Closes #199

Divide Client into smaller components.
Divide McEntity into smaller components.
Rename McEntity to Actor to avoid confusion between ECS entities and Minecraft entities.
Move common components to component module.
Remove Username type from valence_protocol because it wasn't worth its weight.

I've stopped worrying about the "Effect When Added" and "Effect When Removed" behavior of components so much, and instead assume that all components of a particular thing are required unless otherwise stated.
Blocked on:

[ ] #264

Test Plan
Steps:
1.

I very much don't like renaming McEntity to Actor. I feel like the confusion between Entity and McEntity can be very easily remedied with proper doc comments. Do we really get questions/see confusion about it often?

I very much don't like renaming McEntity to Actor.

Yeah, Actor may sound too abstract but on the other hand McEntity too verbose.

Maybe confusions should be avoided by leveraging namespaces like mc::Entity and ecs::Entity?

McEntity is not too verbose. Using namespaces like that almost certainly makes the problem worse.

In my humble opinion, the valence project interfaces at least for a user to minecraft first, bevy last, so i would probably use Entity for a minecraft entity, and re-export the bevy entity to something like BevyEntity. Or have them both as Entity and leave it up to the user to qualify it, either with an as keyword in the use statement, or qualify in-line where needed.. point being, both are entities, so why not just call them that?

Also, the invention of new terms would be better to avoid, because it's additional cognitive load for users of the framework.

I'll just revert the McEntity -> Actor change.

In my humble opinion, the valence project interfaces at least for a user to minecraft first, bevy last, so i would probably use Entity for a minecraft entity, and re-export the bevy entity to something like BevyEntity.

Not sure that's feasible with the way imports/exports work in Rust. We're re-exporting bevy_app and bevy_ecs at the root of valence, so the BevyEntity name would only be available in our prelude? But then we wouldn't be able re-export the bevy prelude in our prelude easily without something like Haskell's hiding.

Or have them both as Entity and leave it up to the user to qualify it

That would make using valence::prelude unpleasant IMO.

I'm getting some ridiculous rubber banding when running all of the examples. The packet inspector shows really big client bound packets at regular intervals. I think that chunks keep getting sent to the client when they aren't needed? Not really sure

I'm getting some ridiculous rubber banding when running all of the examples.

This is caused by modifications to player position, yaw, pitch, in the packet handler triggering change detection for those components. A system later picks up on those changes and sends a teleport packet.
One solution is to bypass change detection in the packet handler. I'm not entirely happy with that because it can lead to surprising behavior when using Changed<Position> in user code. We have no way to distinguish changes made by valence and changes made by users.

I concur, I think option 3 seems best.


Window management

Hey @tomas-pluskal, @robinschmid, @Annexhc
I worked on the Tab system a bit and made a example implementation replacing the TICVisualizerWindow.
Would be nice, if someone could check the way it's implemented now so I can work on porting some more modules.
Best,
Steffen

Hey @SteffenHeu , to me the chosen approach looks fine. Please feel free to go ahead and include the other MZmine windows.

Thanks Steffen!


Test DebugAdapterTracker API

Test for #55945:

[ ] anyOS: @roblourens

Complexity: 2
Authors: @weinand
The LiveShare team asked us to provide API to "tap" on the DAP message flow so that they no longer need to wrap or proxy DAs (which is problematic because the VS Code debugger always sees a LiveShare DA instead of the real DA and all DAP traffic has to go through the LiveShare DA).
We've added new proposed extension API to "tap" the DAP messages flowing between VS Code and debug adapters:
https://github.com/Microsoft/vscode/blob/88b85b66c3abc225d09696a0943aa652a83cfdc5/src/vs/vscode.proposed.d.ts#L560-L567
With this API LiveShare could tap the traffic and VS Code would not be affected by this in any way.
A side effect for registering a tracker for a specific debug type (or '*') is that debug adapters for that type no longer run in the renderer, but are automatically started from the extension host (this can be easily verified by VS Code's integrated Process Viewer). We do this to minimise additional round-trips between EH and VS Code.
Here is an example for a generic DAP tracer for all debug types:
vscode.debug.registerDebugConfigurationProvider('*', {
  provideDebugAdapterTracker(session: vscode.DebugSession, folder: WorkspaceFolder | undefined, config: DebugConfiguration, token?: CancellationToken): ProviderResult<vscode.IDebugAdapterTracker> {
    return {
      startDebugAdapter: () => console.log(`startDebugAdapter: ${session.id}`),
      fromDebugAdapter: m => console.log(`<=== ${JSON.stringify(m, undefined, 2)}`),
      toDebugAdapter: m => console.log(`===> ${JSON.stringify(m, undefined, 2)}`),
      debugAdapterError: err => console.log(`debugAdapterError: ${err}`),
      debugAdapterExit: (code, signal) => console.log(`debugAdapterExit: ${code}`),
      stopDebugAdapter: () => console.log(`stopDebugAdapter: ${session.id}`)
    };
  }
});

verify that this works as described.
verify that you can register multiple trackers.

In addition:

provide API feedback. Do you have a better name than "provideDebugAdapterTracker"?
think about how this could influence our "vscode-debugadapter"-based tracing story (which only works for node.js based DAs). Should we use a DA-tracing extension for this? It could be built-in to be always available. Benefit: it would work even if no launch.config is available (see #47774). Drawback: it would only log DAP messages, no additional information.

Drawback: it would only log DAP messages, no additional information.

Yeah, there might be some case where someone just wants to see the DA traffic, like how we can see the LSP traffic in an output channel, but for my development, I want one file with vscode/DA traffic and Chrome/DA traffic and internal DA logging.


BUG - edmx parser: duplicate alias leads to exception

Related issues
https://itsm.services.sap/now/workspace/agent/record/sn_customerservice_case/1b8fff65972321109da3f9300153afb0
https://github.wdf.sap.corp/ux-engineering/tools-suite/issues/25299
Description
Under certain circumstances the SAP Gateway seems to return metadata documents with duplicate edmx references.
This root cause must be solved of course, I thus forwarded the original customer ticket to the Gateway component.
Indeed, there is an agreement at our Fiori Tools group that such a duplication shall not lead to any exception at our tools.
We should be fault-tolerant here.
I now debugged the situation at our PageMap and could find out that an exception gets triggered at the edmx parser (to be exact:  DataStore.js > addFileReference). This exception is not caught smoothly but leads to an incomplete metadata document getting returned, subsequently causing some trouble at various  tools.
On the other side, the Fiori Elments run-time has no problem with the situation, the app  is rendered correctly.
Thus, the edmx-parser should also be adapted to be fault-tolerant in this case.
Steps to Reproduce
Refer to https://github.wdf.sap.corp/ux-engineering/tools-suite/issues/25299
Expected results
The duplicate alias is ignored, and the full metadata document is returned.
Actual results
Exception
Screenshots

Version/Components/Environment
Add any other context about the problem here
OS:

[X] Mac OS
[ ] Windows
[ ] Other

Root Cause Analysis
Problem
{describe the problem}
Fix
{describe the fix}
Why was it missed
{Some explanation why this issue might have been missed during normal development/testing cycle}
How can we avoid this
{if we don’t want to see this type of issues anymore what we should do to prevent}

@nlunets

@drktfl as i recall you added this one right ? I think i'm ok with it being removed but maybe there are some problems behind.


Show operator construction for class use

The problem
So far I've found no examples of defining operators that work with classes.
Suggestions
Add examples in several places including:

operators
object orientation
class tutorial

Some time ago I had a similar concern, unfortunately I didn't consider submitting an issue ;-). I did ask a somewhat-related question on SO  though and got some great answers. If you're looking for more specific examples, the module Clifford define a few operators for its classes.
In any case, it'd be great to have some good examples in the docs.


Dead link

The page linked in the readme is dead (https://haxonek.github.io/Building-an-epub-file/)

I'm sorry I guess I missed this; thanks for the catch, should be updated


Add Github actions for triggering validation repo

This is related with https://github.com/poliastro/validation/issues/5. It adds a GitHub actions file for triggering the validation repository every time a new merge in main branch is done or a release is published.

A couple of things on this:

[ ]  Tokens still need to be added
[ ]  I will add the on: pull_request for debugging

Alright, the on pull_request was added just for debugging purposes. Tokens were not added and thus an error is being raised.

The validation repo is ready to run actions when a repository_dispatch is recieved.

Yeah! This is better! See the message now under Trigger poliastro/validation:
 {
  "message": "Must have admin rights to Repository.",
  "documentation_url": "https://docs.github.com/rest/reference/actions#create-a-workflow-dispatch-event"
}

However I am not sure which is causing this: the security I imposed to the token (only repo access) when it was defined or my user, as it is linked to the token... :thinking:

I think you missed this https://docs.github.com/en/free-pro-team@latest/actions/reference/workflow-syntax-for-github-actions#jobsjob_idenvironment on b69115ce5f20a, that's why the variables were empty and the command did not have enough permissions https://github.com/poliastro/poliastro/runs/1625330286#step:2:2

It's working!!! :rocket:
I forgot to properly point to the actual YAML file hosting the actions in the validation repo. This was the last reason behind the actions not being triggered. Also, notice in the logbook of validation actions those appear as "manually executed by me".
Now that the backbone of this issue has been completed, I would like to check the following before this gets merged:

poliastro's actions succeed even before the validation test have been properly executed. This is due to the fact that  they only need to make a simple curl. If the command succeeds, everything is assumed to be alright. We could explore the possibility of waiting for a confirmation message from the validation repo and raise some kind of error if those.

Sure! Let us merge this and expand its capabilities in a future PR :rocket:

Cool! As soon as I merged this into master, the validation was triggered again. Working as expected :wink:


[BUG]

Describe the bug
Companion religions doesn't show under "Class" in character screen.

Can you clarify? I'm not sure I understand the problem. CO+ doesn't alter religion or class (or the UI) in any way.
Also, please provide the details described here: https://github.com/WittleWolfie/CharacterOptionsPlus#reporting-problems

Does this not att a bunch of religions from tabletop?
Did I mix up this mod with another one? 😗
I'll check when I get home but if it is this one the issue is that the religion of companions doesn't show up in the interface under the class-tab. But the bonuses apply so no biggie I guess.

Most likely you're thinking Expanded Content which adds a lot of deities.


Hyphens misinterpreted as flags.

DO NOT REMOVE OR SKIP THE ISSUE TEMPLATE

[X] I understand that I will be blocked if I intentionally remove or skip any mandatory* field

Checklist

[X] I'm asking a question and not reporting a bug or requesting a feature
[X] I've looked through the README
[X] I've verified that I have updated yt-dlp to nightly or master (update instructions)
[X] I've searched known issues and the bugtracker for similar questions including closed ones. DO NOT post duplicates
[X] I've read the guidelines for opening an issue

Please make sure the question is worded well enough to be understood
yt-dlp misinterprets hyphenated URL/IDs as flags.
command: yt-dlp -vU -9SHjWM1gG4 dHdg1yn1SgE QHN-6cUgpYI
if I use the -I flag instead of -vU, yt-dlp complains, saying the first ID is "not a valid specification".
Quoting the ID makes no difference. I can't escape the hyphen with neither ^ or \.
I found no related issues, bugs, or information in the readme (except for -I, which failed).
This is labeled as a question and not a bug because I assume it's user error of some kind.
Provide verbose output that clearly demonstrates the problem

[X] Run your yt-dlp command with -vU flag added (yt-dlp -vU <your command line>)
[ ] If using API, add 'verbose': True to YoutubeDL params instead
[x] Copy the WHOLE output (starting with [debug] Command-line config) and insert it below

Complete Verbose Output
[debug] Command-line config: ['-vU', '-9SHjWM1gG4', 'dHdg1yn1SgE', 'QHN-6cUgpYI']

Usage: yt-dlp [OPTIONS] URL [URL...]

yt-dlp: error: no such option: -9

add -- to tell yt-dlp when to stop parsing options and parse the remaining input only as URLs
e.g.
yt-dlp -vU -- -9SHjWM1gG4 dHdg1yn1SgE QHN-6cUgpYI


Fix Android EN bridge

This PR fixes Android ExposureNotification.start doesn't handle startResolutionForResult.
Demo video https://drive.google.com/file/d/1QPR_z0houVS8-O7Haq9TIc2hdCN_j19H/view?usp=sharing
Resolves https://github.com/CovidShield/mobile/issues/115
How to test?

Run react native packager yarn start.
In terminal, make sure you one device connected to computer, run adb reverse tcp:8081 tcp:8081.

If you have issue, run adb kill-server && adb start-server.

Open project in Android Studio and build to real device.
Go through onboarding flow.
Expect to see Exposure Notification dialog.

Been hitting my head for a few hours, just recompiled the last version from master, and I can't get the message to display like in your video.
I'm testing on a pixel 2, last play services and updates
https://drive.google.com/file/d/1-XSqAri_m3PoSTgi5E6NBzkrswEBdDe-/view?usp=sharing
I made sure to have TEST_MODE=false and APP_ID_ANDROID=com.google.android.apps.exposurenotification and no other changes but no dice.
Any other things I could try?

Exception 17 means your email is not whitelisted by Google to use Exposure Notifications in development. You might need to contact your connection for beta access.


Genomepy should also search the NCBI genbank assemblies

As it is now, genomes that are only in the genbank assemblies will not be found.

GCA vs. GCF.
What to do if the same genome is present in both? Probably take the RefSeq one, as that will contain gene annotation? Note to self: check this!

Solved in 0.5.4


Segfault from C++ Logger

In certain conditions we've encountered a segfault that appears to originate in the C++ logger.  So far this has only been seen while running dl-python, hence it's being posted here.
Stacktrace
Here's the common part of the stacktrace, obtained by running python in GDB (the message being printed, shown in frames #6 and #7 is specific to each crash):
key-value-store_1     | Program received signal SIGSEGV, Segmentation fault.
key-value-store_1     | 0x00007f4bc906acb8 in cfunction_enter_call (func=0x7f4bc6e806d0) at Objects/methodobject.c:402
key-value-store_1     | 402	Objects/methodobject.c: No such file or directory.
key-value-store_1     | #0  0x00007f4bc906acb8 in cfunction_enter_call (func=0x7f4bc6e806d0) at Objects/methodobject.c:402
key-value-store_1     | #1  cfunction_vectorcall_O (func=func@entry=0x7f4bc6e806d0, args=0x7f4bc880a8c8, nargsf=nargsf@entry=1, kwnames=0x0) at Objects/methodobject.c:478
key-value-store_1     | #2  0x00007f4bc903eb4d in PyVectorcall_Call (callable=0x7f4bc6e806d0, tuple=<optimized out>, kwargs=<optimized out>) at Objects/call.c:199
key-value-store_1     | #3  0x00007f4bc7cb87c9 in ?? () from /usr/local/lib/python3.8/site-packages/_dripline.cpython-38-x86_64-linux-gnu.so
key-value-store_1     | #4  0x00007f4bc7ccac4d in ?? () from /usr/local/lib/python3.8/site-packages/_dripline.cpython-38-x86_64-linux-gnu.so
key-value-store_1     | #5  0x00007f4bc7e2ecde in std::ostream::flush() () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
key-value-store_1     | #6  0x00007f4bc8061fd8 in scarab::logger::Private::logCout (this=0x55f60bf33040, level=scarab::logger::ELevel::eInfo, message="Connecting to <rabbit-broker:5672>", loc=...) at /usr/local/src/scarab/library/logger/logger.cc:175
key-value-store_1     | #7  0x00007f4bc806172b in scarab::logger::Log (this=0x7f4bc7c703e0 <_ZN8driplineL4dlogE>, level=scarab::logger::ELevel::eInfo, message="Connecting to <rabbit-broker:5672>", loc=...) at /usr/local/src/scarab/library/logger/logger.cc:346

Where the crash occurs
So far this has been seen in:

Interface::get()
dripline::service::start() run from dl-serve

The logging line that causes the crash is consistent for the interface case and for the service case.  For each case, it's always the same line (frame #8, not pasted above), that causes the problem.
In the service case, the next frame is:
key-value-store_1     | #8  0x00007f4bc7bf4119 in dripline::service::start (this=0x55f60c3ec3f0) at /usr/local/src/library/service.cc:174

Code version
It seems to depend on the version being used.  If I use the dl-python v4.5.1 image, there is no crash.  If I use dl-python's develop image or a newer in-development image, there's a crash.
Verbosity
It also seems to depend on the verbosity.  If I run dl-serve with -v or -vv, there's a crash.  If I don't use those (less verbosity), there's no crash.

Replicating the problem
I'll lay out some steps to replicate the problem using the first-mesh example.

In the first terminal, start the rabbit broker:docker-compose up rabbit-broker`

Interface crash

In docker-compose.yaml, set the key-value-store/image to driplineorg/dripline-python:feature-sighand (which fixes the receiver-timeout problem).
Make the key-value-store/commanddl-serve
-c
/root/key-value-store.yaml

so that the verbosity is low, thereby avoiding the service itself crashing.
In a second terminal, run the service:docker-compose up key-value-store

In a third terminal, get an interactive bash prompt:docker-compose exec key-value-store /bin/bash

Start python in GDB, and then run the program once you get a GDB prompot:gdb python
(gdb) run

Run the following commands in python.  The last should cause the crash, dropping back to GDB.>>> from dripline.core import Interface
>>> the_interface = Interface(dripline_config={'auth-file':'/root/authentications.json'})
>>> the_interface.get('peaches')

Get a stack trace(gdb) bt

Service crash

If it's still running from above, stop the service container in the second terminal with ctrl-c.
Change the key-value-store command to:command:
    - gdb
    - --batch
    - --ex
    - run
    - --ex
    - bt
    - --args
    - python
    - /usr/local/bin/dl-serve
    - -c
    - /root/key-value-store.yaml
    - -vv

Start the container:> docker-compose up key-value-store

This should cause the crash and automatically print the stacktrace.

Interface crash with the first 20 frames in the stacktrace
>>> the_interface.get('peaches')

Program received signal SIGSEGV, Segmentation fault.
0x00007f3efaeb7138 in cfunction_enter_call (func=0x7f3ef8877720) at Objects/methodobject.c:402
402	Objects/methodobject.c: No such file or directory.
(gdb) bt
#0  0x00007f3efaeb7138 in cfunction_enter_call (func=0x7f3ef8877720) at Objects/methodobject.c:402
#1  cfunction_vectorcall_O (func=func@entry=0x7f3ef8877720, args=0x7f3efa90b4d8, nargsf=nargsf@entry=1, kwnames=0x0) at Objects/methodobject.c:478
#2  0x00007f3efae8ae7d in PyVectorcall_Call (callable=0x7f3ef8877720, tuple=<optimized out>, kwargs=<optimized out>) at Objects/call.c:200
#3  0x00007f3ef9ee8999 in ?? () from /usr/local/lib/python3.8/site-packages/_dripline.cpython-38-x86_64-linux-gnu.so
#4  0x00007f3ef9ef9cbd in ?? () from /usr/local/lib/python3.8/site-packages/_dripline.cpython-38-x86_64-linux-gnu.so
#5  0x00007f3efa05fcde in std::ostream::flush() () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#6  0x00007f3efa29987a in scarab::logger::Private::logCout (this=0x55bb2344db70, level=scarab::logger::ELevel::eDebug,
    message="Sending request with routing key <peaches>", loc=...) at /usr/local/src/scarab/library/logger/logger.cc:175
#7  0x00007f3efa2990d1 in scarab::logger::Log (this=0x7f3ef9e9ce80 <_ZN8driplineL4dlogE>, level=scarab::logger::ELevel::eDebug,
    message="Sending request with routing key <peaches>", loc=...) at /usr/local/src/scarab/library/logger/logger.cc:346
#8  0x00007f3ef9dadbb1 in dripline::core::send (this=0x55bb235bbca0, a_request=std::shared_ptr<class dripline::msg_request> (use count 4, weak count 0) = {...})
    at /usr/local/src/library/core.cc:182
#9  0x00007f3ef9ece39a in ?? () from /usr/local/lib/python3.8/site-packages/_dripline.cpython-38-x86_64-linux-gnu.so
#10 0x00007f3ef9eddb38 in ?? () from /usr/local/lib/python3.8/site-packages/_dripline.cpython-38-x86_64-linux-gnu.so
#11 0x00007f3ef9f08167 in ?? () from /usr/local/lib/python3.8/site-packages/_dripline.cpython-38-x86_64-linux-gnu.so
#12 0x00007f3efae8a750 in cfunction_call_varargs (kwargs=<optimized out>, args=<optimized out>, func=0x7f3efa50e360) at Objects/call.c:743
#13 PyCFunction_Call (func=0x7f3efa50e360, args=<optimized out>, kwargs=<optimized out>) at Objects/call.c:773
#14 0x00007f3efae89594 in _PyObject_MakeTpCall (callable=0x7f3efa50e360, args=<optimized out>, nargs=<optimized out>, keywords=0x0) at Objects/call.c:159
#15 0x00007f3efadd7e1a in _PyObject_Vectorcall (kwnames=0x0, nargsf=<optimized out>, args=0x7f3efa875c00, callable=0x7f3efa50e360) at ./Include/cpython/abstract.h:125
#16 _PyObject_Vectorcall (kwnames=0x0, nargsf=<optimized out>, args=0x7f3efa875c00, callable=0x7f3efa50e360) at ./Include/cpython/abstract.h:115
#17 method_vectorcall (method=<optimized out>, args=0x7f3efa875c08, nargsf=<optimized out>, kwnames=0x0) at Objects/classobject.c:60
#18 0x00007f3efaf08324 in _PyObject_Vectorcall (kwnames=0x0, nargsf=<optimized out>, args=0x7f3efa875c08, callable=0x7f3efa91d2c0) at ./Include/cpython/abstract.h:127
#19 call_function (kwnames=0x0, oparg=<optimized out>, pp_stack=<synthetic pointer>, tstate=0x55bb2336a550) at Python/ceval.c:4963
#20 _PyEval_EvalFrameDefault (f=<optimized out>, throwflag=<optimized out>) at Python/ceval.c:3469

Service crash with the first 20 frames of the stacktrace
key-value-store_1     | 2021-06-22T19:31:44[INFO    ] dripline(113) -> about to start the service
key-value-store_1     | 402	Objects/methodobject.c: No such file or directory.
key-value-store_1     |
key-value-store_1     | Program received signal SIGSEGV, Segmentation fault.
key-value-store_1     | 0x00007f7c559ea138 in cfunction_enter_call (func=0x7f7c539b4860) at Objects/methodobject.c:402
key-value-store_1     | #0  0x00007f7c559ea138 in cfunction_enter_call (func=0x7f7c539b4860) at Objects/methodobject.c:402
key-value-store_1     | #1  cfunction_vectorcall_O (func=func@entry=0x7f7c539b4860, args=0x7f7c54ea8208, nargsf=nargsf@entry=1, kwnames=0x0) at Objects/methodobject.c:478
key-value-store_1     | #2  0x00007f7c559bde7d in PyVectorcall_Call (callable=0x7f7c539b4860, tuple=<optimized out>, kwargs=<optimized out>) at Objects/call.c:200
key-value-store_1     | #3  0x00007f7c5462c999 in ?? () from /usr/local/lib/python3.8/site-packages/_dripline.cpython-38-x86_64-linux-gnu.so
key-value-store_1     | #4  0x00007f7c5463dcbd in ?? () from /usr/local/lib/python3.8/site-packages/_dripline.cpython-38-x86_64-linux-gnu.so
key-value-store_1     | #5  0x00007f7c547a3cde in std::ostream::flush() () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
key-value-store_1     | #6  0x00007f7c549dd87a in scarab::logger::Private::logCout (this=0x560750ce3400, level=scarab::logger::ELevel::eInfo, message="Connecting to <rabbit-broker:5672>", loc=...) at /usr/local/src/scarab/library/logger/logger.cc:175
key-value-store_1     | #7  0x00007f7c549dd0d1 in scarab::logger::Log (this=0x7f7c545e2400 <_ZN8driplineL4dlogE>, level=scarab::logger::ELevel::eInfo, message="Connecting to <rabbit-broker:5672>", loc=...) at /usr/local/src/scarab/library/logger/logger.cc:346
key-value-store_1     | #8  0x00007f7c5456522d in dripline::service::start (this=0x5607511a7500) at /usr/local/src/library/service.cc:174
key-value-store_1     | #9  0x00007f7c54618cff in ?? () from /usr/local/lib/python3.8/site-packages/_dripline.cpython-38-x86_64-linux-gnu.so
key-value-store_1     | #10 0x00007f7c54618ea8 in ?? () from /usr/local/lib/python3.8/site-packages/_dripline.cpython-38-x86_64-linux-gnu.so
key-value-store_1     | #11 0x00007f7c5464c167 in ?? () from /usr/local/lib/python3.8/site-packages/_dripline.cpython-38-x86_64-linux-gnu.so
key-value-store_1     | #12 0x00007f7c559bd750 in cfunction_call_varargs (kwargs=<optimized out>, args=<optimized out>, func=0x7f7c54ed7cc0) at Objects/call.c:743
key-value-store_1     | #13 PyCFunction_Call (func=0x7f7c54ed7cc0, args=<optimized out>, kwargs=<optimized out>) at Objects/call.c:773
key-value-store_1     | #14 0x00007f7c559bc594 in _PyObject_MakeTpCall (callable=0x7f7c54ed7cc0, args=<optimized out>, nargs=<optimized out>, keywords=0x0) at Objects/call.c:159
key-value-store_1     | #15 0x00007f7c5590ae1a in _PyObject_Vectorcall (kwnames=0x0, nargsf=<optimized out>, args=0x56075114c0c0, callable=0x7f7c54ed7cc0) at ./Include/cpython/abstract.h:125
key-value-store_1     | #16 _PyObject_Vectorcall (kwnames=0x0, nargsf=<optimized out>, args=0x56075114c0c0, callable=0x7f7c54ed7cc0) at ./Include/cpython/abstract.h:115
key-value-store_1     | #17 method_vectorcall (method=<optimized out>, args=0x56075114c0c8, nargsf=<optimized out>, kwnames=0x0) at Objects/classobject.c:60
key-value-store_1     | #18 0x00007f7c55a3b324 in _PyObject_Vectorcall (kwnames=0x0, nargsf=<optimized out>, args=0x56075114c0c8, callable=0x7f7c534696c0) at ./Include/cpython/abstract.h:127
key-value-store_1     | #19 call_function (kwnames=0x0, oparg=<optimized out>, pp_stack=<synthetic pointer>, tstate=0x560750badaf0) at Python/ceval.c:4963
key-value-store_1     | #20 _PyEval_EvalFrameDefault (f=<optimized out>, throwflag=<optimized out>) at Python/ceval.c:3469

What crashes and what doesn't?
Crashes:

feature-sighand, -vv
feature-sighand, -v
main, -vv
main, -v

Does not crash:

feature-sighand, [no -v flag]
main, [no -v flag]
v4.5.1, -vv
v4.5.1, -v
v4.5.1, [no -v flag]

What was in the main tag?
It looks like the last thing to push to the main tag on Docker Hub (from GitHub Actions) was the release of v4.5.3: https://github.com/driplineorg/dripline-python/actions/runs/786505535.  That was git tag a1460f34ce8b668dce355380f5daa5735dd2be69.
Based on the build log, it used dl-cpp v2.7.0 (driplineorg/dripline-cpp@d1b0eaa4602b3acdee116689ef22d5be1bfdd012).
What was in the v4.5.1 tag?
dl-python v4.5.1 is from commit 65162825d71df6de28eccaa6b9388c4e581885c0.  This was pre-GitHub Actions, when Travis-CI was used to build the docker images.  Scarab was v3.5.4 (project8/scarab@9431f47b1ff21711e950e392f31c345957b23eba).
dl-cpp was v2.4.0 (driplineorg/dripline-cpp@d1b0eaa4602b3acdee116689ef22d5be1bfdd012), which used scarab v3.2.1 (project8/scarab@29bd52c755910f1dbd7562e068a2aa5c26858263).
What changed?
dl-python v4.5.1 --> v4.5.3
[TBD]
dl-cpp v2.4.0 --> v2.7.0
[TBD]
scarab v3.2.1 --> v3.5.4

v3.2.2

PackageBuilder update: save full target name and make available in ScarabConfig.cmake

v3.2.3

PB: don't manually set include directories from dependecy libraries
PB: add compile definitions to library target

v3.2.4

PB: fix some config-file installation problems

v3.3.0

master_config renamed primary_config (application class and pybinding)
master branch renamed main (documentation and repo)

v3.4.0

PB: moved macros to a separate CMake file
PB: change how the C++ standard (i.e. C++11, 14, 17, etc) is set
application + pybinding: add option to not configure; skip config if not configuring

v3.4.1

PB: set the _PACKAGE_NAME variable if it's not already set

v3.4.2

logger: added global verbosity level option
logger: Private struct kept by the logger as a std::shared_ptr instead of a bare pointer
logger: instead of delete fPrivate in the destructor, use logger::Private::AllLoggers()->erase(this)
logger: fixed a bunch of indentations; doesn't look like content changed (except as above)

v3.4.3

Bump version (forgotten in v3.4.2)

v3.4.4

logger: add missing include <memory>

v3.5.0

Added travis build
logger: Move static mutex into a static function
logger: Move static colored-text flag into a static function
logger: Move static output streams into a static function
logger: Move static time-related variables to a static function

v3.5.1

logger: Fixing missing parentheses

v3.5.2 (no tag)

CMake: Add rapidjson interface library if it doesn't exist
CMake: Put boost components in a scarab-specific variable

v3.5.3

PB: allow multiple calls to export libraries and executables

v3.5.4

FindROOT: add Minuit2
param: for YAML conversion, catch YAML::TypedBadConversion instead of YAML::BadConversion
CMake: Add fix so pybind11 and cpython use the same version

First from tracing changes: major logger update from Scarab v3.4.2, v3.4.4, v3.5.0, and v3.5.1 could be responsible.  Maybe something's being deleted improperly.
Test: revert logger.hh and logger.cc to v3.4.1 and run the service test.
Result: it still crashes.  The stacktrace confirms that the old logger code is being used in the test.
Other tests:

Turn off fColored so that it uses the non-colored block.  Still crashes.
Split the last line that streams to fOut so that one thing is streamed per line.  Confirms that the crash is with streaming endl.  This was pointed to by the fact that the #5 frame in the stacktrace is in std::ostream::flush().

I un-reverted the logger changes back to the newer version.
Another thought: perhaps we haven't redirected the ostream and estream properly.  I realized this while looking through pybind11 docs.  I had forgotten about this point, in part because it's not more emphasized in those docs.  I added a bunch of scoped stream redirects in scarab, and a few in dl-python.  It still segfaults, but it's different now, and dying much earlier:
key-value-store_1     | 2021-06-23 01:58:12 [DEBUG] (tid<PHONE_NUMBER>39968) dexed_factory.hh(208): Registered a indexed_factory for class 999 at 0x7f954f458310, indexed_factory #28 for 0x5622d9f10cc0
key-value-store_1     | [Detaching after fork from child process 12]
key-value-store_1     | 402	Objects/methodobject.c: No such file or directory.
key-value-store_1     |
key-value-store_1     | Program received signal SIGSEGV, Segmentation fault.
key-value-store_1     | 0x00007f9550866138 in cfunction_enter_call (func=0x7f954e1649f0) at Objects/methodobject.c:402
key-value-store_1     | #0  0x00007f9550866138 in cfunction_enter_call (func=0x7f954e1649f0) at Objects/methodobject.c:402
key-value-store_1     | #1  cfunction_vectorcall_O (func=func@entry=0x7f954e1649f0, args=0x7f9550005b08, nargsf=nargsf@entry=1, kwnames=0x0) at Objects/methodobject.c:478
key-value-store_1     | #2  0x00007f9550839e7d in PyVectorcall_Call (callable=0x7f954e1649f0, tuple=<optimized out>, kwargs=<optimized out>) at Objects/call.c:200
key-value-store_1     | #3  0x00007f954f9cbf6b in pybind11::detail::simple_collector<(pybind11::return_value_policy)1>::call (this=0x7ffcff45d948, ptr=0x7f954e1649f0) at /usr/include/pybind11/cast.h:1896
key-value-store_1     | #4  0x00007f954f9be52b in pybind11::detail::object_api<pybind11::handle>::operator()<(pybind11::return_value_policy)1, pybind11::str&> (this=0x7ffcff45e5a0, args#0=...) at /usr/include/pybind11/cast.h:2051
key-value-store_1     | #5  0x00007f954f9b3057 in pybind11::detail::pythonbuf::sync (this=0x7ffcff45e160) at /usr/include/pybind11/iostream.h:45
key-value-store_1     | #6  0x00007f954f9b2f9d in pybind11::detail::pythonbuf::overflow (this=0x7ffcff45e160, c=125) at /usr/include/pybind11/iostream.h:37
key-value-store_1     | #7  0x00007f954f62b9cb in std::basic_streambuf<char, std::char_traits<char> >::xsputn(char const*, long) () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
key-value-store_1     | #8  0x00007f954f61cb34 in std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long) () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
key-value-store_1     | #9  0x00007f954f855852 in scarab::logger::Private::logCout (this=0x5622d9ec4800, level=scarab::logger::ELevel::eProg, message="Final configuration:\n\n{\n    dripline : \n    {\n        alerts-exchange : alerts\n        heartbeat-interval-s : 60\n        heartbeat-routing-key : heartbeat\n        loop-timeout-ms : 1000\n        max-pa"..., loc=...) at /usr/local/src/scarab/library/logger/logger.cc:175
key-value-store_1     | #10 0x00007f954f8550d1 in scarab::logger::Log (this=0x7f954f918010 <applog>, level=scarab::logger::ELevel::eProg, message="Final configuration:\n\n{\n    dripline : \n    {\n        alerts-exchange : alerts\n        heartbeat-interval-s : 60\n        heartbeat-routing-key : heartbeat\n        loop-timeout-ms : 1000\n        max-pa"..., loc=...) at /usr/local/src/scarab/library/logger/logger.cc:346
key-value-store_1     | #11 0x00007f954f892afb in scarab::main_app::pre_callback (this=0x5622da3c52d0) at /usr/local/src/scarab/library/cli/application.cc:134
key-value-store_1     | #12 0x00007f954f9a7858 in CLI::App::run_callback (this=0x5622da3c5300) at /usr/local/src/scarab/library/external/cli11/CLI11.hpp:5491
key-value-store_1     | #13 0x00007f954f9a5a49 in CLI::App::parse (this=0x5622da3c5300, args=...) at /usr/local/src/scarab/library/external/cli11/CLI11.hpp:5000
key-value-store_1     | #14 0x00007f954f9a597e in CLI::App::parse (this=0x5622da3c5300, argc=4, argv=0x7ffcff45e020) at /usr/local/src/scarab/library/external/cli11/CLI11.hpp:4929


Queue up multiple animations

Is there a way to queue up multiple animations like vanilla Velocity does with calling it multiple times or chaining the promises?
 I know i can call runAnimation but with this i can't queue multiple different animations. I could probably change the components probs 3 times in a row, but this seems inelegant. Whats the best way to achive this with your components?

If you use registerAnimation you can make an animation with sequential
steps. The syntax of nested arrays is a bit tricky, so check the Velocity
docs for how to do it.
On Thu, Dec 15, 2016 at 3:39 AM Martin<EMAIL_ADDRESS>wrote:

Is there a way to queue up multiple animations like vanilla Velocity does
with calling it multiple times or chaining the promises?
 I know i can call
runAnimation but with this i can't queue multiple different animations. I
could probably change the components probs 3 times in a row, but this seems
inelegant. Whats the best way to achive this with your components?
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/twitter-fabric/velocity-react/issues/154, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AAP65VeFuiVk6JBFpEy75qxsVHzi57hiks5rIPytgaJpZM4LN15Z
.

WIth registerAnimation you mean RegisterEffect of velocities UI pack?
Thanks for the hint about nested arrays, took me quite some time to figure out.

@martinjuhasz @finneganh Could you please post an example of how to queue up multiple animations? It would be really helpful!


New update results are different from the old version

I have two rows with same key value "edata_eks_timeSpent_ss" but only one of them is part of the final result! The other row which had "TaskNumber": 1 in the sheet is missing.
{
  "edata_eks_timeSpent_ss": {
    "FeatureName": "edata_eks_timeSpent_ss",
    "TaskName": "Unit Conversion",
    "Options": "frm = 'seconds',\nto = 'minutes'",
    "Type": "Numeric",
    "TaskNumber": 2
  }
}

Do you have Nested Elements enabled?

Are you trying to get an array with each row as an element? Or something else?

I was expecting an output like this from the sheet
{
  "edata_eks_timeSpent_ss": {
    "FeatureName": "edata_eks_timeSpent_ss",
    "TaskName": "Clip",
    "Options": "lower = 0,\nupper = 600",
    "Type": "Numeric",
    "TaskNumber": 1
  },
  "edata_eks_timeSpent_ss": {
    "FeatureName": "edata_eks_timeSpent_ss",
    "TaskName": "Unit Conversion",
    "Options": "frm = 'seconds',\nto = 'minutes'",
    "Type": "Numeric",
    "TaskNumber": 2
  },
  "dimensions_gdata_id_ss": {
    "FeatureName": "dimensions_gdata_id_ss",
    "TaskName": "None",
    "Options": "",
    "Type": "String",
    "TaskNumber": 1
  },
  "dimensions_did_ss": {
    "FeatureName": "dimensions_did_ss",
    "TaskName": "None",
    "Options": "",
    "Type": "String",
    "TaskNumber": 1
  }
}

Ah, that makes sense then. JSON cannot have two fields with the same name within the same scope. The old method of exporting had no way to validate that, so it was possible to create malformed JSON. The current system prevents this, so the output result you are getting is correct.

 I've desogned my solution around this format of export. Is there
anyway to have this output? Can I use your previous code as an add-on?
Also, thanks for quick follow up :)
On 10-Feb-2018 7:26 PM, "Chris"<EMAIL_ADDRESS>wrote:

Ah, that makes sense then. JSON cannot have two fields with the same name
within the same scope. The old method of exporting had no way to validate
that, so it was possible to create malformed JSON. The current system
prevents this, so the output result you are getting is correct.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/Synthoid/ExportSheetData/issues/54#issuecomment-364656877,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AZrGwsSAeiXNaI5i_dc-0HaYT0KeVr_kks5tTZ_ygaJpZM4SAxZ_
.

Unfortunately, using the old formatting method is not possible with the current version of ESD as it allowed for malformed JSON. I apologize that the old method allowed such an oversight and has placed you into this situation.
If you are alright with a minor alteration, I would recommend just exporting your target sheet as a JSON array. That would produce something roughly similar, but would require you examine an array instead of a JSON blob.
If you must use your previous formatting, you could pull an old version of ESD from GitHub and run it as a custom script for your sheet.

With minor changes I was able to fix my issue by exporting target sheet as
a JSON array. Thank you for your help Chris :)
I hope this output method will have consistent results in future though.
On Sat, Feb 10, 2018 at 11:24 PM, Chris<EMAIL_ADDRESS>wrote:

Unfortunately, using the old formatting method is not possible with the
current version of ESD as it allowed for malformed JSON. I apologize that
the old method allowed such an oversight and has placed you into this
situation.
If you are alright with a minor alteration, I would recommend just
exporting your target sheet as a JSON array. That would produce something
roughly similar, but would require you examine an array instead of a JSON
blob.
If you must use your previous formatting, you could pull an old version of
ESD from GitHub and run it as a custom script for your sheet.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/Synthoid/ExportSheetData/issues/54#issuecomment-364675966,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AZrGwnCtg973aTSzYc5bU3qNyhlo2LPZks5tTdfLgaJpZM4SAxZ_
.

Glad to hear it. The current method uses the standardized JSON library to export data, so this will hopefully never be an issue again (even if they update the browser JSON specification). I knew some people might be affected by the v40 update, but I also knew sticking to the JSON specification was important. Because of that, I dropped support for the previous export method. Again, I'm sorry that you were affected like this.


Unable to connect to TCP Modbus after upgrade to 4.14.107

Hi, for starters great project, I'm using this Python module for primary monitoring of my PV installation. This is maybe not an issue for module itself, but more like a question. whether anyone else experience same issue as I did just now, when I upgraded my SolarEdge SE7K-RW0TEBNN4 inverter via SetApp from version for CPU 4.13.x to 4.14.107. After that I get connection refused errors when trying to connect to 1502 port, tried to disable TCP Modbus or change the port number, but nothing helps. Anyone else with same issue, or better - any solution?

Solved by technical support and some remote adjustments on inverter.

Have the same issue. Can you described what had be done?

Have the same issue. Can you described what had be done?

I had to raise support request (https://www.solaredge.com/service/support/installer) and explain over a couple of days that my wifi is working fine (yes, using wifi instead ethernet, for which support was also complaining, but it worked before and it's not forbidden in manual from SolarEdge), explained how and why I used software based solution, instead of some paid external recorder over RS485, proven that monitoring portal is seeing fine my installation etc. After few days it just started to work again and they stated that engineer did something remotely on my inverter. That's it. But I will not risk installing an upgrade for a while for sure.


All photos from WhatsApp are marked with "Invalid date"

Latest (docker pull at least once a week) docker image on Ubuntu, 100k+ library. All whatsapp photos get marked with invalid date and don't show up in the "With timestamp" feed, nor are correctly sorted in the "Without timestamp" one. The root cause is obvious - no timestamp in EXIF. However, it is annoying.
Describe the enhancement you'd like
WhatsApp images have date in their file name, could that be heuristically parsed to put the image at least in the correct ballpark of the feed? Example: IMG-20220103-WA0007.jpg
Describe why this will benefit the LibrePhotos
On big collections, this would significantly improve the user experience. A lot of people tend to take photos by WhatsApp only, not by their native phone app.

@pivis please also consider adding the option to re-scan current library for photos like this and run the configurable date time extractor during the scan

I really like your idea, but I think it should be a separate issue (since it is orthogonal to WhatsApp) - so I created https://github.com/LibrePhotos/librephotos/issues/437 just for that.

It's now implemented!

Awesome!
So now a rescan will add timestamp to whatsapp images? Or is there something that the user needs to do?

To apply these rules to all your photos, do a "Rescan all photos".

No additional config required?

No, the WhatsApp rule is a default 👍

Updated the docker, rescanned photos, and the WhatsApp pictures appeared in the feed. Beautiful. Thanks for this! Default rules do the job.


Pass input object to factory

Hello,
Currently when using a factory, the factory takes no arguments. This brings some problems when you need to create an instance of a type that's bound to a field of the input object.
For example we have a class (say DTO) that holds the "type" attribute and, when mapping it, I'd like to read that attribute and instantiate the correct class (a subclass of the abstract class A).
The factory seems to be not working.
As a (not working) workaround I tryed:
I tryed to use an abstract mapper and:

defined an abstract "merge" method like:

public abstract A merge(A a, DTO o)

defined "a factory" method:

public A from(DTO d){
 switch(d.type):
 ...
 B b = the_correct_instance_based_on d.type
 b = merge(b,d) //<- try to use the merge method
}

with the hope that it would pick up the "merge" method to copy all the fields of the object. The truth is that merge uses my from method and I get infinite recursion :/.
Another workaround that I tryed:
Defined a basemapper with the merge method, then inject that mapper into another mapper that defines the from method and uses the merge from the injected one to fill the object. This method doesn't work because the generated merge object always tries to CREATE a new object if the input is null. To me this is a bit strage because it's not an expected behavior.

Hi,
Thanks for reporting, the issue. For sure giving the input bean to the factory is a specific case.
First, the merge method is not valid as far as I can see. It should be
public abstract A merge(DTO o, A a)
You should always use the expected output bean as the last method parameter.
Instead of using the abstract class A, you should define a merge method for the subclass B so the generated methods will not use your from method.
Now about the second workaround, if you are really declaring parameters in this specific order, the input is considered to be the A bean and not the DTO one.
Adding support for factory methods with the input bean as parameter is possible but I don't think it is needed.

Hello,
Thank you for your reply. Indeed my post was wrong, merge is declared like this:
A merge (DTO,A)

Instead of using the abstract class A, you should define a merge method for the subclass B so the generated methods will not use your from method.

Ok I see that this requires me to create a factory for EACH subclass of A, since the code automatically checks for the create method, right?
I think that a factory that takes the input bean would be nice, it's also done in other "similar" projects like jackson... :)
And what about the fact that merge automatically creates an object if the input is null? Is this really required? I mean, if someone declares a method like that it is because he already has the two objects and wants to copy one into the other, isn't it? Because if you remove this implicit construction into these kind of methods, then the factory is not needed since it gives us the possibility to create the object and then use selma to map the content (similar but simpler than what I did in workaround 2)

Hi,
I'll keep you updated, for the factory with input support.
About the fact :

And what about the fact that merge automatically creates an object if the input is null? Is this really required? I mean, if someone declares a method like that it is because he already has the two objects and wants to copy one into the other, isn't it? Because if you remove this implicit construction into these kind of methods, then the factory is not needed since it gives us the possibility to create the object and then use selma to map the content (similar but simpler than what I did in workaround 2)

This is not the expected behavior of Selma. So this can be a bug, but are you sure that you've got the good parameter order ? In the other cas Selma will consider this to be an aggregation of two beans so will for sure try to create an instance.
I don't have enough code to reproduce this. Maybe you can, provide a pull request with a demonstrating code in selma-processor tests ?

Hello,
It took a while but I did the pull request. you will see that the compiling of the MapperForIssue167 will fail because the NoEmptyConstructorPersonOut has no constructor available.
See https://github.com/xebia-france/selma/pull/176


Looking for advice - how to convert float to double, keeping to_string(double) same as to_string(float)

Hi,
Can you give some advice, how to convert float (4 bytes) to double (8 bytes).
I am looking to convert float -> double in a way that to_string(double) to produce same string as original to_string(float).
Any advice would be really appreciated.
My current idea is to you dragonbox to convert float to chars, and then use some fast chars->double converter with round-trip guarantee.
Would be very nice if you will tell me that my idea is stupid, and describe a way that is much better.
Thanks in advance!

Firstly, why do you need that? Because it sounds like you are likely trying to do something unnecessary or even wrong. Is it something absolutely necessary, or just to appeal to some vague aesthetics?

My current idea is to you dragonbox to convert float to chars, and then use some fast chars->double converter with round-trip guarantee.

Sounds like a reasonable approach, but I don't know if it is guaranteed to work. It is likely that if you apply dragonbox to the resulting double then you will get the same string, but I'm not totally sure. If it is the case, probably a rigorous proof of it might be not so simple. Or there might be some counterexamples so that you need to take care of them specially.
By the way, if your goal is to match the results of std::to_string, then the situation is very different. Note that by default std::to_string does NOT have roundtrip guarantee, because its result is required to be same as that of std::sprintf(buf, "%f", x); see here for the reference. If you look at the specification of std::sprintf here, with %f the result is always in the fixed-point form with 0 to 6 decimal digits after the decimal point. This is radically different from what dragonbox spits out. Another caveat is that std::to_string is locale-dependent. In fact, there is a proposal which tries to make std::to_string locale-independent and also does what dragonbox does.

@jk-jeon I am really appreciate your comment. Sorry I did not notice it in timely manner.
I am loading data into database, and database internally has only double.
All current load is using Java toString on client, converting source Java float into string.
On database side, some internal parser converts it to double.
Next I want to do faster... switched to binary format to transfer data to database, where I wrote my own c++ parser.
I have coming float in binary format, and naively did static_castfloat. It works perfectly much fast... I was happy until users bark back. They used to compare in SQL "price = 10.1", and it stop working, all SQL not working.
I had to resort to horrible workaround
double floatToDouble(float f) {
char sa[64];
std::sprintf(sa, "%f", f);
char* end;
return std::strtod(sa, &end);
}
Users are happy and now performance of my shiny binary parser is lagging built-in CSV parser... that makes switching to binary format completely wrong.
My goal is to convert float to double same way as it would be though Java toString.
Your advice would very appreciated.
Another case is when I have fixed decimal, i.e. long int and number of decimal digits after point. Something like 101 and 1 would be 10.1. I implemented conversion to double similar way, except I am forming string by extracting whole and fraction and formatting then into string. Performance is horrible.
I am not looking for round-trip guarantee, just to match result of Java toString and subsequent conversion string to double.
My question, why I need to convert to char. Both dragonbox and fixed decimal allow me to produce whole and fraction from source float. Can you recommend how I can convert whole and fraction into double, without intermediate conversion to string?
My understanding, conversion to string produces more overhead, because it requires resource to convert to string, and conversion from string back to whole and fraction. Avoiding chars should save quite a lot of resources.
Can you recommend some fast converter (whole, fraction) -> double? Or, I have to go through chars????
Your advice is really appreciated.

They used to compare in SQL "price = 10.1", and it stop working, all SQL not working.

Ooohh. That's creepy!
Anyway, I see. So the goal is to match the spec of Java's toString, not that of std::to_string, and if I understood you correctly, you don't have the access to (or don't want to change) the database side's parser, right?
For some reason googling "Java Float toString" doesn't give me the precise spec of it, do you know of a reference?

Can you recommend some fast converter (whole, fraction) -> double? Or, I have to go through chars????

This is not a trivial question if you want to be absolutely correct. To make it precise, is it correct that fraction is given as an array of decimal digits of indefinite length?

Thank you for answering, it is being very appreciated!
My use case is not that complicated. It is stock prices, and typically it is a few digits before point and two after, like 345.67
It is being represented as float, or as fixed decimal.
Fixed decimal is a 8-byte int, with 8 digits after point.
To get whole you do X / 10000000, fraction you do X % 10000000.
Nothing fancy like array of digits of indefinite length.
Both Java toString and c++ std::sprintf produces same result for me.
I will have whole and fraction for both cases - from float (using dragonbox) and from fixed decimal (by divide and mod).
Question - is there any way to convert whole and fraction to double, without converting to chars?
Whole is max 5 digits, fraction is always 2, sometimes 5.

Dragonbox rocks!!!
It is so fast that I thought I had error in code :-)
I am using Dragonbox on a path FLOAT -> DOUBLE.
I tried to convert decimal into chars using Dragonbox libary, but this method is not exposed as public API and I was not able to overcome c++. It appears it is a trivial task, and my own very naiive implementation decimal -> chars is very fast (I believe yours is faster!).
Now looking into fast_float to convert chars into double. Still question - can I skip converting into chars and have decimal -> double directly, without intermediate chars.

Thanks for advice, everything works fine for me!

Fixed decimal is a 8-byte int, with 8 digits after point.

So it is representable by a 64-bit int without any loss by adding the fraction and the whole part times 100000000. Probably, you can just compute static_cast<double>(N) * 1e-8, where N is the 64-bit int you get from the previous step, to convert it into double. But I have to think about it if the result is always guaranteed to be correctly rounded.

Both Java toString and c++ std::sprintf produces same result for me.

Here is the precise step for Java: https://docs.oracle.com/javase/8/docs/api/java/lang/Float.html#toString-float-
It is quite radically different from std::to_string: the former does something similar to Dragonbox, while the latter does direct rounding into a decimal number with a fixed precision.

Whole is max 5 digits, fraction is always 2, sometimes 5.

Which contradicts to your previous description ("fixed decimal is a 8-byte int, with 8 digits after point")?
Also, keep in mind that I don't know if applying Dragonbox into a float and then converting it back to double will always do the right thing. Right now I didn't think about it thoroughly; I guess it might produce a wrong result for very small inputs for example.

First, big thanks for thinking about my use case.
I have a very small data range. Source data representation is 8 byte int with 8 digits after decimal point. But 99.99999% of stock prices have two digits after decimal, and one, two or three (sometimes four) digits before decimal point.
Prices are padded with 6 zero (000000) after two digits after decimal point.
Price represent 6 digits, with 6 zeros appended to fit into fixed decimal format.
That small data range makes pretty much any algo to work correctly.
Yes I did tests on more digits, and with a lot of digits there are problems. Very fortunately, in real life data I do not have this case.
Converting chars -> floats and back with round trip guarantee unexpectedly happens to be extremely complicated problem. I do have a faint memory of university study about subject, and did not expect it to be so difficult. Most people do not even know this problem exist.
Thanks for help again!

I agree that handling of floating-point numbers in general, especially when things need to be 100% correct, is indeed a big headache, often is just practically impossible. Given limited amount of information I still don't know what exactly you wish to achieve, but I'm glad things work now. Have a nice one!

Here is more background information on case.
Users are generating 4-bytes floats.
Database support on double data type.
Prod data load is done by converting on client 4-byte float to string in CSV format, using Java to_string.
CSV file sent to database, where is is parsed by internal built-in CSV parser. Internal parser is converting string to double and places in table column (loads data).
Example:
Table column spotref is loaded with value 3904.2532
It is actually questionable what really loaded in database. But all client tools show string representation as 3904.2532. Typically client tools get data from database in binary format, and convert to string representation for display on screen.
Client tool is Java-based, I assume internally it is calling Java to_string on double and show resulting string on display.
Alternatively, I can request conversion to string on database server:
select to_char(spotref) ....
In this case, database is c++, and it is converted using c++ to_string.
Result is same, I can see on client 3904.2532.
Load process is inefficient, as it requires to convert float -> string in Java client, and on database string -> double in internal built-in CSV parser.
My exercise in loader performance improvement is to switch to binary format, and send to database binary format with original unchanged flat binary value. My custom c++ parser on database side pick up float, do naive static_cast(float), and place resulting double into table column.
As expected, users start seeing garbage digits at the end of value, 3904.253173828125 instead of 304.2532
Most important, filtering in WHERE clause stop working:
Before users can write in SQL:
WHERE spotref = 3904.2532
and it is matching all rows as expected.
With binary load and naive conversion float -> double with static cast it does not work:
WHERE spotref = 3904.2532
returns zero rows. That is a show stopper for users.
I will do one more post with code I wrote using dragonbox and fast_float. I am extracting numeric from float using dragonbox, and wrote new procedure in fast_float that accepts numeric and generate double.
Despite my last night excitement, my code is not working correctly, I will be re-writing it today.
Will post here when done.
Hopefully this is providing you with complete insight what is use case.

Here is code I am using to convert float -> double:
double floatToDouble(float f) {
constexpr int buffer_length = 1 + // for '\0'
jkj::dragonbox::max_output_string_lengthjkj::dragonbox::ieee754_binary64;
char buffer[buffer_length];
char* end_ptr = jkj::dragonbox::to_chars(f, buffer);
double d;
fast_float::from_chars(buffer, end_ptr, d);
return d;
}
Works fast and perfectly well! Thanks for nice and fast library!
With above code, from users perspective, load from binary format produces same data in database as from string. WHERE clause in SQL also continue to function properly.
fast_float do convert chars to decimal (exponent, mantissa, negative), and proceed from there. I tried to use Dragonbox to_decimal, and wrote my own procedure in fast_string that skip chars parsing and uses (exponent significand is_negative) from Dragonbox. My naive approach segfaulted, as apparently fast_float collect more info on parsing chars and uses it later. I asked for help in fast_float. If I will get it, would be nice, if not, current solution is very fast.
Hopefully, now you have full picture of what is my use case, and how I am trying to solve it.
Thanks for your time!


fix: quality gate check for code duplication

As of now the quality gate check is failing because the error responses for OpenAPI are being duplicated over and over again in every *.route.ts file.
We need to find a way to fix this if possible.

For now I have excluded the *.sql, *.model.ts, *.route.ts files


ArgumentException: The Assembly Mono.WebBrowser is referenced by System.Windows.Forms

I am using IL2CPP and .NET Standard 2.0. I can't build my project because of the following error. The dll is indeed included and I don't know how I can allow it to be included like told in the error message. I also tried to switch to .NET 4.X, but this gave me the same result.
ArgumentException: The Assembly Mono.WebBrowser is referenced by System.Windows.Forms ('Assets/StandaloneFileBrowser/Plugins/System.Windows.Forms.dll'). But the dll is not allowed to be included or could not be found.


Why loss function value is too high? Is it expecteted result?

I tried running your code for  with a pre-trained ResNet50 and MobilieNetV2 model. I got loss function value for  output and  pred losses:
rec_loss = lp_loss(pred, tgt, p=self.p)
:param pred: output from quantized model
:param tgt: output from FP model
https://github.com/hustvl/PD-Quant/blob/main/quant/layer_recon.py#L196
pd_loss = self.pd_loss(F.log_softmax(output / self.T, dim=1), F.softmax(output_fp / self.T, dim=1)) / self.lam
:param output: prediction from quantized model
:param output_fp: prediction from FP model
https://github.com/hustvl/PD-Quant/blob/main/quant/layer_recon.py#L200
Are there additional settings I missed?

The loss value of different blocks is different, and the loss value of some blocks may be high which is caused by the accumulation of quantization errors layer by layer. What are the specifics of your loss?

How do you deal with accumulation caused by quantization errors layer by layer?  I can see this in your code?!

The accumulation of errors in our code is unavoidable, so the high block loss value is expected.


Correct the wavelength grid when combining the flux of adjacent orders

I think this can fix the problem of issue #65
I have changed the order of the code for the part that limits wavelengths.

Can I add @ZiyingGu as a reviewer?

I invited @ZiyingGu as a prvjapan member. After accepting the inivitation, Gu-san can be a reviewer.

Thank you for your inviting!😁


PhLoadLibrarySafe and ban LoadLibrary

This PR deprecates LoadLibrary from use in Process Hacker and its associated plugins. PhLoadLibrarySafe is implemented as a replacement.
There is a sister PR to update plugins-extra here: https://github.com/processhacker/plugins-extra/pull/88

Seems the PhLoadLibrarySafe() was renamed to PhLoadLibrary(). But the
plugins-extra/WaitChainPlugin/main.c still calls this PhLoadLibrarySafe(). Should we simply do:
--- a/plugins-extra/WaitChainPlugin/main.c 2022-07-06 15:15:26
+++ b/plugins-extra/WaitChainPlugin/main.c 2022-07-07 08:41:27
@@ -37,7 +37,7 @@
     PCOGETCALLSTATE coGetCallStateCallback = NULL;
     PCOGETACTIVATIONSTATE coGetActivationStateCallback = NULL;

-    if (!(Context->Ole32ModuleHandle = PhLoadLibrarySafe(L"ole32.dll")))
+    if (!(Context->Ole32ModuleHandle = PhLoadLibrary(L"ole32.dll")))
         return FALSE;

     if (!(coGetCallStateCallback = PhGetProcedureAddress(Context->Ole32ModuleHandle, "CoGetCallState", 0)))

Should we simply do

Yes.


More intelligent Variable Groups

Pull Request Description
What issue does this change request address? (Use "#" before the issue to link it, i.e., #42.)
Closes #801
What are the significant changes in functionality due to this change request?
Removes burdensome input from user for creating variable groups and creates them intelligently using the graphStructure instead. Other behavior remains the same.
A conversion script has been added for this change, and an email explaining the changes will be important as this is prepared to merge.

For Change Control Board: Change Request Review
The following review must be completed by an authorized member of the Change Control Board.

[x] 1. Review all computer code.
[x] 2. If any changes occur to the input syntax, there must be an accompanying change to the user manual and xsd schema. If the input syntax change deprecates existing input files, a conversion script needs to be added (see Conversion Scripts).
[x] 3. Make sure the Python code and commenting standards are respected (camelBack, etc.) - See on the wiki for details.
[x] 4. Automated Tests should pass, including run_tests, pylint, manual building and xsd tests. If there are changes to Simulation.py or JobHandler.py the qsub tests must pass.
[x] 5. If significant functionality is added, there must  be tests added to check this. Tests should cover all possible options.  Multiple short tests are preferred over one large test. If new development on the internal JobHandler parallel system is performed, a cluster test must be added setting, in  XML block, the node <internalParallel> to True.
[x] 6. If the change modifies or adds a requirement or a requirement based test case, the Change Control Board's Chair or designee also needs to approve the change.  The requirements and the requirements test shall be in sync.
[x] 7. The merge request must reference an issue.  If the issue is closed, the issue close checklist shall be done.
[x] 8. If an analytic test is changed/added is the the analytic documentation updated/added?

Approved...
Merging...


Please add USE keyword. Why is the USE keyword not working?

I noticed that I could not use the USE keyword to indicate which database I wanted to use. It meant that I have to write the fully qualified FROM statement including the schema as well as the database name in my SELECT > FROM statements.
Can you test to see if you can add the USE keyword so I can say USE northwind, or USE sakila for example? Then I won't have to fully qualify the from statement like this:
SELECT categoryid FROM northwind.categories
Instead I want to write:
USE northwind
SELECT categoryid FROM categories

I'm sorry, but I cannot accommodate this request.
First, the SQL parser used does not support the USE clause.
Even if I replace it with a parser that supports the USE clause, you still have the following problem.

Only one SQL statement can be written per cell.
Each SQL cell uses a different connection, specifying a USE clause in the previous cell has no effect on the next cell.


All Alone in Savanna Biome...

As far as I can tell nothing is spawning in Savanna's after the 7.0 update...I've checked out multiple savanna biomes and all of them don't spawn a single pokemon... also I saw poochyena's being spawned in a birch forest which is usually only found in savanna's
Edit: you can add Jungle Biomes to the list

Fixed for 7.0.1


Installation fails because of missing dependency to opencollective-postinstall

➤ yarn global add standard-readme-spec
yarn global v1.22.4
[1/4] Resolving packages...
warning standard-readme-spec > opencollective > babel-polyfill ><EMAIL_ADDRESS>core-js@<3 is no longer maintained and not recommended for usage due to the number of issues. Please
, upgrade your dependencies to the actual version of core-js@3.
warning standard-readme-spec > opencollective > babel-polyfill > babel-runtime ><EMAIL_ADDRESS>core-js@<3 is no longer maintained and not recommended for usage due to the number o
f issues. Please, upgrade your dependencies to the actual version of core-js@3.
[2/4] Fetching packages...
info<EMAIL_ADDRESS>The platform "linux" is incompatible with this module.
info<EMAIL_ADDRESS>is an optional dependency and failed compatibility check. Excluding it from installation.
[3/4] Linking dependencies...
warning " ><EMAIL_ADDRESS>has unmet peer dependency "<EMAIL_ADDRESS>warning " ><EMAIL_ADDRESS>has unmet peer dependency "webpack@>=2".
[4/4] Building fresh packages...
error /home/jceb/.config/yarn/global/node_modules/standard-readme-spec: Command failed.
Exit code: 127
Command: opencollective-postinstall
Arguments:
Directory: /home/jceb/.config/yarn/global/node_modules/standard-readme-spec
Output:
/bin/sh: opencollective-postinstall: command not found

Thanks! Merged.

Ok

Oki


/me dumps an enormous JSON string to the chat

It looks somewhat like this:
TextComponent{text='Baughn', siblings=[], style=Style{hasParent=true, color=null, bold=null, italic=null, underlined=null, obfuscated=null, clickEvent=ClickEvent{action=SUGGEST_COMMAND, value='/msg Baughn '}, hoverEvent=null}} TextComponent{text='', siblings=[TextComponent{text='goes to report simply's problem.', siblings=[], style=Style{hasParent=true, color=null, bold=null, italic=null, underlined=null, obfuscated=null, clickEvent=null, hoverEvent=null}}], style=Style{hasParent=true, color=null, bold=null, italic=null, underlined=null, obfuscated=null, clickEvent=null, hoverEvent=null}}
The same message is correctly relayed to IRC.

Is this supposed to be fixed in 2.9.391? I still have the same problem.

It should be fixed, yeah. Are you running on a client or a server?

EiraIRC is running on the server. It's not on my client... let me try that.

Nope, same problem either way.

Also happening for me on 2.9.391.

I can confirm, that commit fixes it.

Yep, fixed here as of build 392.


refactor series reader to make it small

Description

Content1 ...
Content2 ...
Content3 ...

This PR has:

[ ] been self-reviewed.

[ ] concurrent read
[ ] concurrent write
[ ] concurrent read and write

[ ] added documentation for new or modified features or behaviors.
[ ] added Javadocs for most classes and all non-trivial methods.
[ ] added or updated version, license, or notice information
[ ] added comments explaining the "why" and the intent of the code wherever would not be obvious
for an unfamiliar reader.
[ ] added unit tests or modified existing tests to cover new code paths, ensuring the threshold
for code coverage.
[ ] added integration tests.
[ ] been tested in a test IoTDB cluster.

Key changed/added classes (or packages if there are too many classes) in this PR

Why for this improvement?

Why for this improvement?

I think SeriesReader is too long,  move the utils class to separate class will make it looks more clear.

Hi, From the perspective of OOP, TimeOrderUtils is only used in SeriesReader and should be better to be the inner class of it. There is no need to move it for the too long reason.

Hi, From the perspective of OOP, TimeOrderUtils is only used in SeriesReader and should be better to be the inner class of it. There is no need to move it for the too long reason.


ValueError: Length of values (1) does not match length of index with sc.pp.calculate_qc_metrics(adata)

[X] I have checked that this issue has not already been reported.
[X] I have confirmed this bug exists on the latest version of scanpy.
[ ] (optional) I have confirmed this bug exists on the master branch of scanpy.

I also tried 'log1p = False' and produced the other error.  Thank you.
sc.pp.calculate_qc_metrics(adata)

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/root/miniconda3/envs/scanpy/lib/python3.9/site-packages/scanpy/preprocessing/_qc.py", line 294, in calculate_qc_metrics
    obs_metrics = describe_obs(
  File "/root/miniconda3/envs/scanpy/lib/python3.9/site-packages/scanpy/preprocessing/_qc.py", line 111, in describe_obs
    obs_metrics[f"log1p_total_{expr_type}"] = np.log1p(
  File "/root/miniconda3/envs/scanpy/lib/python3.9/site-packages/pandas/core/frame.py", line 3612, in __setitem__
    self._set_item(key, value)
  File "/root/miniconda3/envs/scanpy/lib/python3.9/site-packages/pandas/core/frame.py", line 3784, in _set_item
    value = self._sanitize_column(value)
  File "/root/miniconda3/envs/scanpy/lib/python3.9/site-packages/pandas/core/frame.py", line 4509, in _sanitize_column
    com.require_length_match(value, self.index)
  File "/root/miniconda3/envs/scanpy/lib/python3.9/site-packages/pandas/core/common.py", line 531, in require_length_match
    raise ValueError(
ValueError: Length of values (1) does not match length of index (35255)
>

sc.pp.calculate_qc_metrics(adata, log1p = False)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/root/miniconda3/envs/scanpy/lib/python3.9/site-packages/pandas/core/frame.py", line 995, in __repr__
    self.to_string(
  File "/root/miniconda3/envs/scanpy/lib/python3.9/site-packages/pandas/core/frame.py", line 1131, in to_string
    return fmt.DataFrameRenderer(formatter).to_string(
  File "/root/miniconda3/envs/scanpy/lib/python3.9/site-packages/pandas/io/formats/format.py", line 1053, in to_string
    string = string_formatter.to_string()
  File "/root/miniconda3/envs/scanpy/lib/python3.9/site-packages/pandas/io/formats/string.py", line 25, in to_string
    text = self._get_string_representation()
  File "/root/miniconda3/envs/scanpy/lib/python3.9/site-packages/pandas/io/formats/string.py", line 40, in _get_string_representation
    strcols = self._get_strcols()
  File "/root/miniconda3/envs/scanpy/lib/python3.9/site-packages/pandas/io/formats/string.py", line 31, in _get_strcols
    strcols = self.fmt.get_strcols()
  File "/root/miniconda3/envs/scanpy/lib/python3.9/site-packages/pandas/io/formats/format.py", line 540, in get_strcols
    strcols = self._get_strcols_without_index()
  File "/root/miniconda3/envs/scanpy/lib/python3.9/site-packages/pandas/io/formats/format.py", line 804, in _get_strcols_without_index
    fmt_values = self.format_col(i)
  File "/root/miniconda3/envs/scanpy/lib/python3.9/site-packages/pandas/io/formats/format.py", line 818, in format_col
    return format_array(
  File "/root/miniconda3/envs/scanpy/lib/python3.9/site-packages/pandas/io/formats/format.py", line 1240, in format_array
    return fmt_obj.get_result()
  File "/root/miniconda3/envs/scanpy/lib/python3.9/site-packages/pandas/io/formats/format.py", line 1271, in get_result
    fmt_values = self._format_strings()
  File "/root/miniconda3/envs/scanpy/lib/python3.9/site-packages/pandas/io/formats/format.py", line 1518, in _format_strings
    return list(self.get_result_as_array())
  File "/root/miniconda3/envs/scanpy/lib/python3.9/site-packages/pandas/io/formats/format.py", line 1482, in get_result_as_array
    formatted_values = format_values_with(float_format)
  File "/root/miniconda3/envs/scanpy/lib/python3.9/site-packages/pandas/io/formats/format.py", line 1456, in format_values_with
    values = format_with_na_rep(values, formatter, na_rep)
  File "/root/miniconda3/envs/scanpy/lib/python3.9/site-packages/pandas/io/formats/format.py", line 1427, in format_with_na_rep
    [
  File "/root/miniconda3/envs/scanpy/lib/python3.9/site-packages/pandas/io/formats/format.py", line 1428, in <listcomp>
    formatter(val) if not m else na_rep
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

Versions

WARNING: If you miss a compact list, please try print_header!
anndata     0.7.6
scanpy      1.7.2
sinfo       0.3.1
PIL                 8.3.2
anndata             0.7.6
beta_ufunc          NA
binom_ufunc         NA
cffi                1.14.6
colorama            0.4.4
concurrent          NA
cycler              0.10.0
cython_runtime      NA
dateutil            2.8.2
dunamai             1.6.0
encodings           NA
genericpath         NA
get_version         3.5
h5py                3.4.0
joblib              1.0.1
kiwisolver          1.3.2
legacy_api_wrap     0.0.0
llvmlite            0.37.0
matplotlib          3.4.3
mpl_toolkits        NA
natsort             7.1.1
nbinom_ufunc        NA
ntpath              NA
numba               0.54.0
numexpr             2.7.3
numpy               1.20.3
opcode              NA
packaging           21.0
pandas              1.3.3
pkg_resources       NA
posixpath           NA
pycparser           2.20
pyexpat             NA
pyparsing           2.4.7
pytz                2021.1
scanpy              1.7.2
scipy               1.7.1
setuptools_scm      NA
sinfo               0.3.1
six                 1.16.0
sklearn             1.0
sphinxcontrib       NA
sre_compile         NA
sre_constants       NA
sre_parse           NA
tables              3.6.1
Python 3.9.7 | packaged by conda-forge | (default, Sep 29 2021, 19:20:46) [GCC 9.4.0]
Linux-5.4.72-microsoft-standard-WSL2-x86_64-with-glibc2.31
24 logical CPU cores, x86_64
Session information updated at 2021-10-01 14:56

I am suddenly having a similar problem as well, in addition to the other issue I raised...

I'm also suddenly having this problem

Could you update your version of scanpy and see if the issue persists? I believe this issue was an incompatibility with the 1.3.0 release of pandas https://github.com/pandas-dev/pandas/issues/42376, which was fixed for scanpy 1.8.1 (#1917)

Many thanks for everyone's input. The bug is indeed due to an issue with Pandas ≥1.3. I am running Scanpy 1.8.1 and I can confirm that the indexing problem remains with Pandas 1.3.0, 1.3.2, and the latest 1.3.4, but resolves when downgrading to 1.2.5

thanks for everyone's input. I tried to solve this problem by downgrading pandas to 1.1.5. the cause of this problem may be that in python 3.9 and above, pandas modifies the matrix function

thanks for everyone's input. I tried to solve this problem by downgrading pandas to 1.1.5. the cause of this problem may be that in python 3.9 and above, pandas modifies the matrix function。

Opened a PR to pandas which should hopefully fix this: https://github.com/pandas-dev/pandas/issues/42376

My PR was merged, so this should be resolved with the next version of pandas.


Review Haskell

Go through the book, then try and build a text adventure.
Review your experience. Could the language:

build a text adventure
do matrix math
parse CSV files

Yeah, I don't think its for me.


add-category comment-reduire-l-exposition-aux-polluants-pendant-les-t…

…ravaux.md

:tada: This PR is included in version 1.4.5 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


Local dev server does not start

I started this project using the create-remix with Cloudflare Pages template. The npm run dev script used to start a local server, but now it just builds the files without a server.
❯ yarn run dev
yarn run v1.22.17
$ cross-env NODE_ENV=development run-p dev:*
$ remix watch
$ wrangler pages dev ./public --watch ./build --kv snow
(node:37225) ExperimentalWarning: stream/web is an experimental feature. This feature could change at any time
(Use `node --trace-warnings ...` to show where the warning was created)
Watching Remix app in development mode...
💿 Built in 193ms

I'm not sure when this stopped working, there was a week or so where local dev wouldn't work at all, and now it does this. The deployed version in Cloudflare Pages is still working fine, this is a local-only issue.
Wrangler version: 0.0.0-8ab7d2e

Hi! What operating system are you using?

MacOS Monterey

Successfully reproduced this. Not quite sure what's going on, but upgrading to node 16.7.0+ and installing the latest wrangler@beta (0.0.7) seemed to fix things, so give that a go and let me know if you're still having issues. Thanks!

@GregBrimble My understanding was that the Pages functionality was in the pages tag and not yet merged into beta

The pages tag is just an experimental playground for us testing things out. The beta tag does have the wrangler pages dev command 😊


chore: use lint pr title workflow

Description
Validate PR title in this repository by using lint-pr workflow
How has this been tested?
In my forked repo
Documentation changes
[Do the changes include any API documentation changes?]

[ ] Yes, this change contains documentation changes.
[ ] No.

Related Links
[Attach any related links/pull request for this change]

Review checklist
The following items are to be evaluated by the author(s) and the reviewer(s).
Correctness

[ ] Changes are backward-compatible if not indicated, see CONTRIBUTING.md.
[ ] Changes do not include unsupported browser features, see CONTRIBUTING.md.
[ ] Changes were manually tested for accessibility, see accessibility guidelines.

Security

[ ] If the code handles URLs: all URLs are validated through the checkSafeUrl function.

Testing

[ ] Changes are covered with new/existing unit tests?
[ ] Changes are covered with new/existing integration tests?

By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

Is it expected that it is not working before merge?

Is it expected that it is not working before merge?

Some events also require the workflow file to be present on the default branch of the repository in order to run.
https://docs.github.com/en/actions/using-workflows/triggering-a-workflow

that was the case in my forked repo, not sure what "some" refers to but it seems like this is one of them


Fix isolated engine namespace

This is a fix to determine the correct route_key for Model defined in namespace-isolated rails engine.
I have a namespace-isolated rails engine(let's say, named project_core ), which mainly store the shared models and service objects between different rails apps (let's say, named project_frontend and proejct_backend )
module ProjectCore
  class Lyric < ActiveRecord::Base
  end
end

And then I define a Form object in project_backend.
class CreateLyricForm < Reform::Form
  property :data

  model ProjectCore::Lyric
end

And related LyricController in project_backend app
class LyricController < ApplicationController
  def new
     @form = CreateLyricForm.new( ProjectCore::Lyric.new )
  end
end

And a form_for statement for this create form in project_backend related view
<%= form_for @form do |f| %>
  ....
<% end %>

Oh, BTW, and define resouces route for this LyricController as well
Rails.application.routes.draw do
  resources :lyrices
end

This is where the whole story begins
When the system render the view, it would lookup the registered routes, and return a error:
ActionView::Template::Error:
       undefined method `project_core_lyrics_path' for

the route_key return by CreateLyricForm.model_name.route_key is "proejct_core_lyrics", but it is incorrect in this case.
After this fix, intended to correct route_key for namespaced model in Isolated Namepace, the route_key is corrected to "lyrices".
@apotonick, please let me know what you think about this fix! :-D

OH, there's couple of errors for missing route_key in Rails 3.0, I will see if I can fix it tonight or tomorrow!

@apotonick sorry, kind of busy last few days, I found that isolated rails engine is only available for rails >= 3.1, so I would suggest to skip those failed test cases if under rails 3.0, here's some example code:
unless Reform.rails3_0?
  it { class_with_model.model_name.route_key.must_equal "albums" }
end

What do you think?

Yeah, I had a feeling that this feature was added recently. I am happy to run your tests in a condition, please add it to the PR. ❤

@apotonick , just added filter codes that make test case pass! Please let me know if we need more refactor work!

Hi, @apotonick , seems Module.const_defined? behave differently in 1.9.3 and 2.0 compared with 2.1 & 2.2...I need some time to investigate with it.

for example, when we define a module like this:
module A
  module B
     C = 1
  end
end

Module.const_defined?("A::B::C") would return true for ruby version >=2.1
Module.const_defined?("A::B::C") would raise error when ruby version< 2.1
I have a solution, but it seems take more code and logics, for example to have a helper method to make this work, but still not elegant.
    def defined_klass?( string )
      sum = Module
      defined = true
      string.split("::").each do |klass|
        if sum.const_defined?(klass)
          sum = sum.const_get(klass)
        else
          defined = false
          break
        end
      end
      defined
    end

@apotonick , any better solution?

yeah @simoniong,
ruby < 2.1 don't check full strings, my bad... you need to check each children like you did, I see no better solution than yours. good point
ps: Could put in less lines of code, but would compromise readability, so I'm +1 for yours

I would prefer a less magic approach. What if we allow forms to define their namespace declaratively?
class Song::Form < Reform::Form
  model Namespace::Song, namespace: ""

This is way simpler to implement and we don't need this const_defined? and all that - this will always guess the wrong and we will be bombarded with bug reports.
Let's go the explicit Trailblazer way!

Or what about allowing strings in ::model?
model "song" # will set model_name to Song.

guess the wrong and we will be bombarded with bug reports.

Are you talking about rails autoloading? :stuck_out_tongue_winking_eye:

I would prefer to go for a easier but clean way ( But this might be a breaking change, right? :P ). @apotonick , can you give me more example, so that I can fully understand what your intended is.
@fernandes  oh, I thought that comment is from @apotonick , sorry, my bad, man! thanks for your help and idea :+1: let's make it rock and roll to chasing elegant!

Haha, this is a fully-compatible extension to what we already have. People can simply turn off/extend/change their model_name. For Reform, it doesn't really matter what the value is: we simply convert it to an AM::Name in Form::model_name, similar to what you did already. https://github.com/apotonick/reform/blob/master/lib/reform/form/active_model.rb#L82
So, let's say I'd do
model "api/v1/song", this will result in a `AM::Name` with `Api::V1::Song` and Rails can do whatever it wants with that.

The whole namespacing in Rails currently is very dodgy and the less guessing we introduce the better.

@simoniong no problem ;)

So, let me guess what your intention is :)
in your case, this is non isolated model version:
  model "api/v1/song"

This would result with Api::V1::Song, and instance of AM::Name as a result for model_name
ActiveModel::Name.new(self, nil, `Api::V1::Song` )

oh, btw user don't need to explicit the namespace.
And in a isolated model version( for example, I have a rails engine call Api):
  model "api/v1/song", namespace: "api"

This would result with the same string Api::V1::Song, and instance of AM::Name as a result for model_name
ActiveModel::Name.new(self, 'Api', `Api::V1::Song` )

With this kind of spec, we can simple remove the const_defined? and all the shit away!
Is this correct?

Hi, @apotonick , any comment?

Sorry for the delay brother!
I don't really understand why ActiveModel::Name needs to know the namespace - can you elaborate on that, please?
However, yes, you're right - if we need that namespace option for the AM stuff, then this option :namespace makes sense. :shipit:

Hello,
ActiveModel::Name has to know the namespace when inside an isolated namespace (http://api.rubyonrails.org/classes/Rails/Engine.html#method-c-isolate_namespace) because the route keys are not prefixed by the namespace in this case.
ActiveModel::Name with namespace
ActiveModel::Name.new(self, Admin, 'Admin::User')
=> #<ActiveModel::Name:0x007f3e0b9dc2b8
...
 @name="Admin::User",
 @param_key="user",
 @plural="admin_users",
 @route_key="users",
 @singular="admin_user",
 @singular_route_key="user",
 @unnamespaced="User">

ActiveModel::Name without namespace
ActiveModel::Name.new(self, nil, 'Admin::User')
=> #<ActiveModel::Name:0x007f3e0b970c20
...
 @name="Admin::User",
 @param_key="admin_user",
 @plural="admin_users",
 @route_key="admin_users",
 @singular="admin_user",
 @singular_route_key="admin_user">

So, if I use model :'admin/user' in my form, the name is correct but not the route keys and if I use model :user, the route keys are good but not the model name.
The namespace option is simple and seems to solve this problem in a less magical way.

Thanks @gdott9 for explaining. To me, this sounds like a design flaw in Rails itself. The way routes are addressed is wrong.
However, this is not our problem: we simply allow specifying :namespace and it's all good. Ready for it, @simoniong ? :laughing: :rocket:

@apotonick  @gdott9 ,  Sorry for the late reply, kind of busy holiday for Lunar New Year last few weeks. :beers:
I am ok with it, and the code should be ready! :pizza: :beers: :kissing:

Hello @apotonick
Any news about this ? Could you merge the pull request ?
I rebased it on master and put everything into one commit if you prefer https://github.com/gdott9/reform/commits/fix_isolated_engine_namespace.

Awesome, thanks! Will merge tomorrow!

@simoniong I'm sorry this got missed. ActiveModel related code has moved to reform-rails gem and I've just looked and the namespace option is supported already. https://github.com/trailblazer/reform-rails/blob/master/lib/reform/form/active_model.rb#L44-L55
I'm closing this for now, you're welcome to raise another PR in reform-rails if we've not covered it sufficiently.


XML Comments

Closes https://github.com/passwordless/passwordless-dotnet/issues/35

Updated the issue description to link it to #35

Can this be reviewed or is there more to come?


CHW/ANC - Update Family Profile view

Current Implementation

Desired mocks

No CarePlan generated yet
CarePlan to individual or Family referenced

Acceptance Criteria

[x] Check on button placement for add family member
[x] Add Icon and Due for ANC members in the family
[x] When a family is created no CarePlan will be attached to the family thus only showing profile based on mock 1
[x] Create a sample family on HAPI and sync to ANC app with a care plan generated to demo mock 2
[x] On click a family member go to the member profile else if an ANC client for to ACN profile

Family with careplan screen


Deprecation warning for mcpwm_isr_register() (IDFGH-6217)

I am the author of FastAccelStepper. This provides for esp32 a high speed stepper motor driver (up to 200kStep/s) supporting up to six parallel active motors. This is enabled by the use of mcpwm and pcnt modules of the esp32. While upgrading to espidf 4.4 a deprecation warning has popped up:
warning: 'esp_err_t mcpwm_isr_register(mcpwm_unit_t, void (*)(void*), void*, int, intr_handle_data_t**)' is deprecated: interrupt events are handled by driver, please use callback [-Wdeprecated-declarations]
         NULL, ESP_INTR_FLAG_IRAM | ESP_INTR_FLAG_SHARED, NULL);

Now I have checked for the proposed callback alternative. Apparently this callback only supports the capture events, but not the other great features of the mcpwm module. The library FastAccelStepper relies on interrupts linked to op0_tea_int_st, op1_tea_int_st and op2_tea_int_st.
That's why I request to either NOT deprecate this API call, or add a callback for interrupts related to these opX_tea_int_st.
BTW: I have noticed, that espressif has dropped the mcpwm modules in all new derivates. This means, espressif does not want its users to use the esp32-derivates for any kind of high performance stepper motor application ?

Just have seen ESP32-S3 series has a comeback of mcpwm, but a smaller pulse counter.

Hi @gin66 The MCPWM peripheral does have a lot more interrupts than just capture interrupts. But I remember the driver didn't ever exposed any API for users to use the events like "utez", "utez". I guess you enabled the interrupt by expanding the mcpwm_intr_t by yourself. If that's the case, we can remove those deprecations.
In ESP-IDF 5.0, the MCPWM driver will be totally re-design, exposing all abilities to user with much extensible APIs. We will provide all the callbacks to user and user don't have to handle the ISR low level stuffs by themselves.

This means, espressif does not want its users to use the esp32-derivates for any kind of high performance stepper motor application.
MCPWM peripheral is resource consuming, so in some ESP32 derivates (like ESP32C3), it's not supported.

BTW, for stepper motor applications, you can also try the RMT peripheral, you can  use it to generate fixed number of pulses. See example https://github.com/espressif/esp-idf/tree/master/examples/peripherals/rmt/step_motor

Yes, sure, the register file is always available.
Thanks for your trial with RMT, with regard to the RMT entry depth, it can be altered from https://github.com/espressif/esp-idf/blob/master/components/driver/include/driver/rmt.h#L75

Thanks for reporting, fix is available at https://github.com/espressif/esp-idf/commit/e6ee8b2fcf0ba3d9f7ec4654ceb0d61fb4857da1, feel free to reopen.


v8 update to <IP_ADDRESS>

Library name: v8
New version number: <IP_ADDRESS>
The Google v8 engine version is old and should be updated to the latest stable version.

The latest stable version seems to be <IP_ADDRESS> now

Waiting all day and all night ..............

The v8 package support is not maintained.
https://github.com/microsoft/vcpkg/issues/24510#issuecomment-1474479521


Battery failsafe action can be interrupted unintentionally

Currently if a critical battery failsafe action is being performed, it's pretty easy to unintentionally kick it out of a battery failsafe without realizing it.
It's related to what's happening here: https://github.com/PX4/Firmware/blob/master/src/modules/commander/commander.cpp#L2481
Meant to deal with geofence violations it seems but also triggers on battery failsafe.

Another instance of this - https://github.com/PX4/Firmware/issues/6444

Should be fixed by https://github.com/PX4/Firmware/pull/7025.


Abort client connection

Hi All,
NimBLE is a great lib. Very good work of the developers. Congratulations !
I'd like to know if there is some way to abort a client connection at  onConnect callback of NimBle Server.
Thanks!

Hi and thank you.
Yes, you can use this:
void onConnect(NimBLEServer* pServer, ble_gap_conn_desc* desc) {
    if (your check value status etc.. here) {
        pServer->disconnect(desc->conn_handle);
    }
}

Great h2zero !
This will disconnect only the present client trying to connect right?
Previously connected clients will be preserved ?
Thnaks

Yes, it will disconnect only the currently connecting client.

Closing as resolved.


Apply -std=c99 to .c files

It was bugging me so I figured out how to fix the build file instead of
changing to the restrict keyword

Awesome. Will deploy a new version to npm soon.


Request posgrSQL for generatedKey

Good morning,
is it possible to add a feature that the major type of db have to get sequence name automatically by metadata table/column name of db when is specified in table tag the property tableName="%"?
postgreSql: Select nextval(pg_get_serial_sequence('tableName', 'columnName'));
Oracle: SELECT column_default from information_schema.columns where table_name='tableName';
MySQL: using table user_sequences
...
This new feature allow us to generate sequence in pojo correct and any sql shoud be always correct.
Thanks a lot for your support.
SkyBlackHawk

Hi,
You can use useGeneratedKeys, keyColumn and keyProperty to get the generated key.
Please read the documentation.
If you need a help, post your question to the mailing list.
And we try not to write db-dependent code in MyBatis.
Regards,
Iwao

Pardon but I didn't specify before.... but I told it about mybatis generator by maven (mybatis-generator-maven-plugin).
I'm using maven in the project and if I need to change to another db that have the same schema with base table but it have new custom tables for the customers, I need to add anytime keygenerator on hands.
So for this reason the automatic generator of dao mapper and xml can search by metadata the sequence into metadata tables to add automatically the sequence for the id?
Thanks a lot for your support.
Kind regards

I believe this is a feature request for the generator, not MyBatis itself.  MyBatis already supports multiple <selectKey> attributes per statement differentiated by database id, but the generator won't generate code that way currently.
If this is what you are asking for, please make an issue on the Generator's repo: https://github.com/mybatis/generator/issues


[materialized view]not rewrite when use distinct

Steps to reproduce the behavior (Required)
CREATE TABLE `duplicate_table_with_null_partition` (
                    `k1` date,
                    `k2` datetime,
                    `k3` char(20),
                    `k4` varchar(20),
                    `k5` boolean,
                    `k6` tinyint,
                    `k7` smallint,
                    `k8` int,
                    `k9` bigint,
                    `k10` largeint,
                    `k11` float,
                    `k12` double,
                    `k13` decimal(27,9),
                    `k14` array<int>,
                    `k15` json
                    ) ENGINE=OLAP
                    DUPLICATE KEY(`k1`, `k2`, `k3`, `k4`, `k5`)
                    COMMENT "OLAP"
                    PARTITION BY RANGE(`k1`)
                    (
                    PARTITION `p202006` VALUES LESS THAN ("2020-07-01"),
                    PARTITION `p202007` VALUES LESS THAN ("2020-08-01"),
                    PARTITION `p202008` VALUES LESS THAN ("2020-09-01")
                    )
                    DISTRIBUTED BY HASH(`k1`, `k2`, `k3`, `k4`, `k5`) BUCKETS 3
                    PROPERTIES (
                    "replication_num" = "3",
                    "storage_format" = "v2"
                    );
INSERT INTO duplicate_table_with_null_partition VALUES
                ("2020-06-23","2020-06-23 00:00:00","beijing","haidian",-1,-128,-32768,-2147483648,-9223372036854775808,-18446744073709551616,-3.1,-3.14,-3.141,[1,1,1],parse_json('{"a": 1, "b": true}')),
                ("2020-07-23","2020-07-23 00:00:00","shanghai","pudong",0,0,0,0,0,0,-3.1,-3.14,-3.141,[2,2,2],parse_json('{"a": 1, "b": true}')),
                ("2020-07-23","2020-07-24 00:00:00","shanghai1","pudong1",1,1,1,1,1,1,-3.2,-3.44,-3.441,[3,3,3],parse_json('{"a": 1, "b": true}')),
                ("2020-08-23","2020-08-23 00:00:00","xian","zhonglou",1,127,32767,2147483647,9223372036854775807,18446744073709551615,-3.1,-3.14,-3.141,[3,3,3],parse_json('{"a": 1, "b": true}')),
                (NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
CREATE MATERIALIZED VIEW mv1 PARTITION BY k1 DISTRIBUTED BY HASH(k1) BUCKETS 10
                    REFRESH ASYNC AS SELECT k1, count(k2) as count_datetime, min(k3) as min_char, max(k4) as max_varchar,
                         sum(k5) as sum_boolean, avg(k6) as avg_tinyint,
                         sum(distinct k10) as sum_largeint, count(distinct k11) as count_float,
                         max(distinct k12) as max_double, min(distinct k13) as min_decimal
                         FROM duplicate_table_with_null_partition GROUP BY k1;
explain SELECT k1, count(k2) as count_datetime, min(k3) as min_char, max(k4) as max_varchar,
                         sum(k5) as sum_boolean, avg(k6) as avg_tinyint,
                         sum(distinct k10) as sum_largeint, count(distinct k11) as count_float,
                         max(distinct k12) as max_double, min(distinct k13) as min_decimal
                         FROM duplicate_table_with_null_partition GROUP BY k1;

Expected behavior (Required)
TABLE: mv1
Real behavior (Required)
TABLE: duplicate_table_with_null_partition
StarRocks version (Required)

You can get the StarRocks version by executing SQL select current_version()

+----------------------------+
| current_version()          |
+----------------------------+
| BRANCH-2.5-RELEASE cc8826d |
+----------------------------+

not support