[Core] Fast action-tree navigation with entities

Feature asked by Amine B. for SNCF DOSN 'ED bot'.
When developing a Configured Story (using Tock Studio) with a tree of Actions navigating by Entities, it would be nice to allow to skip some question-answer user cycles when multiple entities are given at once.
Example (for now):

User: I want information about x
(Story: detecting entity information triggers action A)
Bot: What do you want info about?
User: About x
(Story: detecting entity x triggers sub-action SA)
Bot: Here is info about x...

Example (new feature target):

User: I want information about x
(Story: detecting entity information triggers action A, then detecting entity x triggers sub-action SA)
riggers sub-action SA)
Bot: Here is info about x...

Please add an optional Tock property to enable/disable this feature, to prevent eventual impact on complex trees.

Thank you Francois for this issue.
what we would like to have is to brows deeper into entity tree to give immdiately the right answer without answering a one entity only answer
suppose a story like tools

gmail: answer: A powerfull mail client on cloud
(sub entities;)

link : mail.google.com
subscribe: mail.google.com/subscribe

outlook: answer: A powerfull mail client

pst : file that store your messages

if it detect entity tool gmail an entity link : directly answer mail.google.com
is it clear?
Regards
Mat

The tree :

gives:

@francoisno I think the tock property is not required, as regression are unlikely to happen

@vsct-jburet I was thinking about Configured Stories implementing step-by-step answer trees. Skipping the intermediate answers might result in strange dialogs ; deep answers should probably be reworked taking fast-navigation possibility into account.

For now the feature works only with two entities in the same action, so this is really a corner case :)

Hi Julien and Francois,
Thank for your work on this feature.
Maybe am wrong but i can't find he button to add an entity on anoher entity:

same in 20.9.3 and 21.3 snap on demo
Thanks for your help
Regards
Mat


Theme flashing issue.

Hi
I am having a little issue with an ssr app and the dark / light mode.

I am not sure how to prevent the theme from defaulting to light when the ssr app sends the first hydrated page.
From what I read the Leptos author suggests setting

https://www.youtube.com/watch?v=AD3FHodVgE8&t=2040s
https://github.com/leptos-rs/example-darkmode/blob/main/src/dark_mode.rs
I have setup my project to send / get a cookie and on new refresh and I can instantly get the theme set correctly but
even though I set theme.set() with the cookie value at that time I have to wait until the page is dehydrated until I see the them change.
Thaw is enabled with ssr
Thanks

You can introduce the following CSS files to temporarily solve this problem.
body {
    background-color: rgb(26, 29, 30);
    color: rgb(236, 237, 238);
    font-family: Inter, ui-sans-serif, system-ui, -apple-system,
        BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial,
        "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji",
        "Segoe UI Symbol", "Noto Color Emoji";
    font-size: 14px;
    color-scheme: dark;
    margin: 0px;
}

I will fix this completely in version 0.4.

Thanks. Its probably the same reason icons and the grid are different between ssr/csr
If it helps when you implement it I can try to do a demo or grab the css before and after if I can.

I have implemented this feature in the v0.4-beta version.


fix CIV-3034, added defendant 2 in to LigigiousParites,so that we can…

Create RPA json for MP
JIRA link (if applicable)
https://tools.hmcts.net/jira/browse/CIV-3034
Change description
Create RPA json for MP
Does this PR introduce a breaking change? (check one with "x")
[ ] Yes
[ ] No

This PR can be closed


[UI] Fix issue with button alignment

Notes for Reviewers
This PR fixes #8389

[x] Yes, I signed my commits.

Now it looks like:


Is curl exception 28 really a connection exception?

Potential bug.
Guzzle version(s) affected: unsure, code has been there for at least 7 years.
Description
I am improving the Guzzle integration in a payment platform client where only connection timeout exceptions are allowed to be retried. Retrying any non-connection timeout exception possibly results in issues like performing a payment twice. So I am diving a bit deeper into this than usual. 😄
Per curl's definition, the curl exception 28 \CURLE_OPERATION_TIMEOUTED gets triggered on any kind of timeout exception.
If I understand the Guzzle implementation correctly, curl's 28 \CURLE_OPERATION_TIMEOUTED however is always being used here for triggering a Guzzle connect exception:
https://github.com/guzzle/guzzle/blob/868b3571a039f0ebc11ac8f344f4080babe2cb94/src/Handler/CurlFactory.php#L163-L169
What's the reasoning behind this behaviour?
Possible Solutions
Some ideas include:

Explain to me how I am getting it all wrong
Remove curl exception 28 from Guzzle connect exception: potential breaking change, only on next major release
Make it configurable
Document or clarify in code the actual logic behind the connection exceptions or the mapping between curl exceptions and Guzzle exceptions (I'm happy to send in a PR once we resolve the issue).

Context

https://curl.se/libcurl/c/libcurl-errors.html

Possibly related: #2933

Does this happen in a version of Guzzle released in the latest 12 months?

Hi @Nyholm !
It appears so, the same code is still on the master branch.

Hi @Nyholm ,
Not sure tbh 😅 .
I have been over the test cases. After a careful inspection it seems to me I should test against the CurlFactory to see what's actually happening. Correct?

Not stale


testng-56.xml - Contains DTD validation error

Why Looking at the file testng-56.xml, it contains an error, is this maybe on purpose? If so, it would be a good idea to add a XML comment, explaining that.
If not on purpose, should the XML or the DTD be corrected?
Description
When loading the testng project into Eclipse it highlights errors. Normally you do not like to see errors in Eclipse. But here I'm not sure, if it should be fixed.
Looking at the file testng-56.xml, then the issue is that the attribute parallel has the value true which is not allowed, looking at the DTD.
<suite name="TESTNG-56 Suite" verbose="3" parallel="true" thread-count="3">

Attribute parallel as given in the testng-1.0.dtd:
parallel (false | methods | tests | classes | instances) "false"

Question On purpose or not?

Is this on purpose, for this specific test?
Or should it be fixed in the XML testng-56.xml ?
Or should it be fixed in the DTD testng-1.0.dtd ?

Question Relation of number 56

Is there any meaning to the number 56, of the test case? I searched for issue 56 here on github, but did not seem to relate. Is it just a random number, or does it have some meaning?

Latest checkout from master, solved this.

TestNG was previously on GoogleCode.
So, 56 for -> https://github.com/testng-team/testng-googlecode/issues/56


EID-64: choose a country

Add a new page "Choose a country" page.

Merging as we have done in mob.


[vcpkg] Avoid computing triplet ABIs for editable packages

This PR delays computation of abi_info.triplet_abi until after we perform a check for conditions that would disable computation of a package abi. This can save several seconds in the port inner-dev loop.
The specific examples of this case are --editable and --head, which will both disable our ability to compute ABIs. Furthermore, if a package without an ABI is installed, all transitive consumers also cannot have their ABIs computed.
Before:
PS C:\src\vcpkg> vcpkg install zlib:x64-windows --editable
Computing installation plan...
The following packages will be built and installed:
    zlib[core]:x64-windows
Detecting compiler hash for triplet x64-windows...
Starting package 1/1: zlib:x64-windows
Building package zlib[core]:x64-windows...
-- Using cached C:/src/vcpkg/downloads/zlib1211.tar.gz
-- Using source at C:/src/vcpkg/buildtrees/zlib/src/1.2.11-63309e48e5
-- Configuring x64-windows
...

After:
PS C:\src\vcpkg> vcpkg install zlib:x64-windows --editable
Computing installation plan...
The following packages will be built and installed:
    zlib[core]:x64-windows
Starting package 1/1: zlib:x64-windows
Building package zlib[core]:x64-windows...
-- Using cached C:/src/vcpkg/downloads/zlib1211.tar.gz
-- Using source at C:/src/vcpkg/buildtrees/zlib/src/1.2.11-63309e48e5
-- Configuring x64-windows
...

+@qis who may be particularly happy about this change :)

Adding a test would require mocking System::cmd_execute() and friends; I think that would be too large of an infrastructure change for now given the size of this PR.

Adding a test would require mocking System::cmd_execute() and friends;

I don't mean a unit test, I mean in the e2e tests.

@ras0219 Works as advertised. Thank you!

/azp run


Hexdump isn't working on VSCode 1.11.1 on Ubuntu

Hi,
I upgraded to VSCode 1.11.1 and hexdump has stopped working on Ubuntu. I click on the hexdump icon for a file or select Show Hexdump from the file menu and nothing happens. It used to work fine before I upgraded. Hexdump in VSCode 1.11.1 works on OS X 10.12.4.
Is there anything I can do to produce more useful debug to help you track it down?
Thanks,
Derek

Unfortunately, I didn't made logs in that extension :( but it's on the TODO list.
Are those file especially large? I did encounter large file that would behave differently on Mac or Windows (my main test platforms). You could try to lower hexdump.sizeWarning in your settings, to see if the warning still display. Reducing hexdump.maxLineCount could also help, if the problem comes from the Editor timing-out on the file opening.

It fails even with small files. I reduced the warning size and then I get the warning but still no hexdump output. Does it have any external dependencies?

I ran vscode again in verbose mode and it claims to be out of space when trying to run hexdump (ENOSPC, see attached log) but I have 8G of space in the only filesystem. Odd!
hexdump.txt

OK, I found a solution. According to this
https://code.visualstudio.com/docs/setup/linux#_updates
Vscode runs the system out of notification slots. Ubuntu was configured for just 8192, I increased it to 32768 and all is well.
Thanks for playing :-)

Quite the investigation! Thanks for the info :)


1px cut on select2

It's happening only when you resizing screen.
Multiple select

Regular select

@majksner can you verify this is still an issue and provide a jsfiddle of sorts so we can replicate?


ensure clusterpool scale specifies a valid size

Signed-off-by: Chris Ahl<EMAIL_ADDRESS>For issue #175

@chrisahl There is in cobra a method cmd.Flags().Changed() which return true if the flag was set and so allows you in the validate() method (you have pass the cmd to the validate() method) to check if flag is set, if not raise an error making this flag mandatory.

/cc itdove

/lgtm


revert connectedk8s cli version from 1.5.0 to 1.4.2

This checklist is used to make sure that common guidelines for a pull request are followed.

For new extensions:

[ ] My extension description/summary conforms to the Extension Summary Guidelines.

About Extension Publish
There is a pipeline to automatically build, upload and publish extension wheels.
Once your pull request is merged into main branch, a new pull request will be created to update src/index.json automatically.
You only need to update the version information in file setup.py and historical information in file HISTORY.rst in your PR but do not modify src/index.json.

Thank you for your contribution! We will review the pull request and get back to you soon.

This PR is to yank connectedk8s 1.5.0 created by https://github.com/Azure/azure-cli-extensions/pull/6677.

This PR is to yank connectedk8s 1.5.0 created by https://github.com/Azure/azure-cli-extensions/pull/6677.
Before merging this PR, you may explicitly install the previous version 1.4.2 to get unblocked:
az extension add --name connectedk8s --version 1.4.2


typings directory in another path than current

Is there a way to generate the typings folder in the current location where the typings.json resides?
Something like:
typings install --out:~/scripts/typings

No. Duplicate of https://github.com/typings/typings/issues/69.


Fix debug command for Symfony 7

On SF7, we need to fix the default name too:
https://github.com/symfony/symfony/blob/7.0/src/Symfony/Component/Console/Command/Command.php#L57

Thanks Loic! 🏅


[GH-38] Configure when docker images are updated for identity.

Otherwise, identity will reach out for potentially invalid docker images
Closes GH-38.

Not sure if this needs a release 🤔


Update udev rules and manual to remove non-portable (Debian-specific) use of the plugdev group and 0660 mode

Fixes #441.
This works in eudev/elogind too: https://github.com/elogind/elogind/issues/10
Cc @ewenmcneill

The resulting diff looks plausible to me.  Well done for figuring out the (apparently still undocumented 7-10 years later :-/ ) udev rule ordering dependency for the tags to actually get applied (reading the udev issue you linked to in #441 makes me think many people ran into that quirk over the years, due to it not being documented).
Ewen


Freemarker Templates & Process External Text

Separated front-end and back-end using Freemarker templates Groups & Exams Servlets.

Added method for sanitising all external text inputted.

lgtm


Result is undefined if SP result contains NULL

When making a call to stored procedure which's result set contains a NULL field, the returned object is an undefined.
Not sure about this, but in tedious.coffe / getMssqlType there is no return type if type is null / undefined like in getTediousType
getMssqlType = (type) ->
	switch type
		when tds.TYPES.Char then return TYPES.Char
		when tds.TYPES.NChar then return TYPES.NChar
		when tds.TYPES.VarChar then return TYPES.VarChar
		...

vs.
getTediousType = (type) ->
	switch type
		when TYPES.VarChar then return tds.TYPES.VarChar
		when TYPES.NVarChar then return tds.TYPES.NVarChar
		when TYPES.Text then return tds.TYPES.Text
		...
		else return type

If I run the SP on SQL manager the result is there with the NULL fields, but not if it's called from node with mssql. If change the SP to not to have NULLs in the result (but empty strings) the returning object is fine.
Hope this helps.

Closing this one. Please reopen if the question is still relevant.


PWM not working on 12.0

Describe the issue you are experiencing
I just upgraded to 12.0. Everything looked good, apart from the fact that I am unable to get the fan going. This was still working fine with 11.5.
There are no error-messages. I can enable the PWM via echo 0 > /sys/class/pwm/pwmchip0/export and commanding/reading values also runs on the command line as usual. The only issue though is that the fan does not start turning. This was still working fine on 11.5
This leads me to believe that the overlay may not be compatible with the 6.6 Kernel. @citruz Can you confirm this?
I am attaching a zip file with the scripts I use to control the fan speed. Commanding /mnt/data/supervisor/homeassistant/pwm/pwmset 0 100 used to bring the fan up to full speed.
pwm.zip
What operating system image do you use?
rock-4c-plus
What version of Home Assistant Operating System is installed?
12.0
Did you upgrade the Operating System.
Yes
Steps to reproduce the issue

Upgrade to 12.0
Send echo 0 > /sys/class/pwm/pwmchip0/export
Put attached scripts to Send /mnt/data/supervisor/homeassistant/pwm
Send /mnt/data/supervisor/homeassistant/pwm/pwmset 0 100

Anything in the Supervisor logs that might be useful for us?
No

Anything in the Host logs that might be useful for us?
No

System information
4c-plus
Additional information
No response

Forget about this issue... Sorry. I just checked the pin with a voltmeter - it is working just fine. It is my cheap china fan giving up. After putting some WD40 into it, it started spinning again - however still a bit slower than expected. Ergo: all fine an I should get a new fan before the summer ;)


3.4.2 changelog - missing entries

Jan, I have added a missed entry in the changelog - I took this from 3.3.22
I did not add other 2 entries that you added in 3.3.22 because I am not sure. You added them in PR 7827 (same PR I am taking the entry from), which was done for 3.4 as well
I will leave this to you - please review my commit and consider this additional entries, if appropriate for 3.4.2:
* when detecting parse errors in the JSON input sent to the restore API, now
  abort with a proper error containing the problem description instead of aborting
  but hiding there was a problem.

* remove Swagger map files from the build to reduce package sizes

* do not respond with an internal error in case of JSON parse errors detected
  in incoming HTTP requests

Thanks,

@sleto-it: thanks.
Regarding the other changes in question:

when detecting parse errors in the JSON input sent to the restore API, now abort with a proper error containing the problem description instead of aborting but hiding there was a problem.

I added this change to the 3.4 CHANGELOG now.

remove Swagger map files from the build to reduce package sizes

The Swagger map files change does not apply for 3.4. We had solved this problem for 3.4 already a while ago and differently.

do not respond with an internal error in case of JSON parse errors detected in incoming HTTP requests

I added this change to the 3.4 CHANGELOG now.


test issue 123

12133113

Hi, I have some suggestions to help solving this issue!
Here is a list of similar issues:

1. [test issue 4](https://github.com/fjsj/python-social-auth/issues/63)

2. [test issue 6](https://github.com/fjsj/python-social-auth/issues/65)

3. [test issue 8](https://github.com/fjsj/python-social-auth/issues/67)

4. [test issue 123](https://github.com/fjsj/python-social-auth/issues/69)

5. [test issue 7](https://github.com/fjsj/python-social-auth/issues/66)

Hope this is useful!
Cheers,
Cinnabot.


Fix Bundler/GemComment offense detection with restrictive_version_specifiers

If GemComment's OnlyFor option was set to restrictive_version_specifiers, the cop would not detect an offense where it should if either:

there was a leading space on the restrictive version argument
the version was frozen (either by using an = operator or no operator at all)

This PR aims to fix both problems above, while also adding tests for it.
obs.: It's Hacktoberfest already! Can we have the "hacktoberfest" topic added to Rubocop repository, so pull requests may count towards the event? (as Hacktoberfest is an opt-in event since last year)

Before submitting the PR make sure the following are checked:

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

obs.: It's Hacktoberfest already! Can we have the "hacktoberfest" topic added to Rubocop repository, so pull requests may count towards the event? (as Hacktoberfest is an opt-in event since last year)

Done!


Determine how big area is scratched?

Is it possible to determine how big area is scratched? For example %?

Yes, we have GLScratchCarImageViewDelegate,
scratchpercentageDidChange(value: Float)
That returns 0 to 100%


Add Icarus theme

Once again Hugo showed it's power and flexibility. You'll find the theme here.

Nice. Added.


TypeError: Cannot read properties of null (reading 'getAttribute') in nextjs SSR

Discussed in https://github.com/sampotts/plyr/discussions/2599

Originally posted by realamirhe January  5, 2023
https://github.com/sampotts/plyr/blob/32444c9851414a1f1947add04e4c3be47b964b0e/src/js/plugins/youtube.js#L109-L115
If player.media has been set to null (happen in the next SSR offloading)
the currentId will be null and the !is.empty(currentId) will be false so we will face an issue in accessing the getAttribute in the next line player.media.getAttribute('src')
Is this expected behavior?
Is it guaranteed that media property to have value always?

Any news on this one?


Add command moveSourceOutput()

As discussed in #10

@janakj Please review this. Thanks.

Thanks for the contribution! Merged. Will release a new version to the npm registry shortly.


Switch to user swappable mda-engines

As discussed in: https://github.com/tlambert03/pymmcore-plus/issues/101
Not polished yet - Opening for feedback from @tlambert03
The big thing I struggled with was the relationship between core and the mda object should be. The mda engine needs to have access to core methods in order to function but then you can end up with this awful thing: core._mda_engine._mmc._mda_engine._mmc.....
If we decide to got this way then this should also get:

update the client to reflect the new structure.
Start of an mda_tests file
add an example showing how to define your own MDA engine.

From a user perspective the main (only?) change will be that you now type core.mda rather then core. when accessing mda related things.

nice :/  they all passed locally I swear!

ah this is actually a bit complicated to add to remote (or at least I'm not sure exactly how to do) So going to put that off until we solidify how the local variant should work.

I'm really struggling with getting this to work through pyro. I can't seem to get past this:
AttributeError: remote object 'PYRO:pymmcore_plus.CMMCorePlus@<IP_ADDRESS>:54333' has no exposed attribute or method 'mda'

I think because the wrap_for_pyro isn't recognizing properties. But even if I go in an add some logic to make sure it's on the proxy class the RemoteMMCore doesn't seem to pick it up.

Latest commit is my current best effort at getting remote to work.

Any advice on getting that to work?

I say ditch it for now... skip the remote tests and make any assertions you need/want in the code to ensure that we're running locally

AttributeError: remote object 'PYRO:pymmcore_plus.CMMCorePlus@<IP_ADDRESS>:54333' has no exposed attribute or method 'mda'

yeah, wrap_for_pyro was really quite a challenge with SWIG-compiled classes.  I asked a question about that https://github.com/irmen/Pyro5/issues/41 ... but I get the sense that the library made the assumption that it's working with pure python classes that behave normally.  A reasonable assumption, but definitely a big difficulty in our case.
fine with me not to support that here

fine with me not to support that here

You mean that Remote cannot use mda? because I think that's more or less what that would amount - because you can't access the mda events.

You mean that Remote cannot use mda?

yep... pretty much.  I really do think that until #43 is fixed, the whole thing is more or less useless anyway.  If some great need returns for it in the future, then I would 1) re-evaluate whether there is a different IPC strategy that might be better 2) fix #43 then 3) come back to fixing mda

yep... pretty much. I really do think that until https://github.com/tlambert03/pymmcore-plus/issues/43 is fixed, the whole thing is more or less useless anyway. If some great need returns for it in the future, then I would 1) re-evaluate whether there is a different IPC strategy that might be better 2) fix https://github.com/tlambert03/pymmcore-plus/issues/43 then 3) come back to fixing mda

Ok I'll drop those commits - and we can add a note in the docs about this limitation.

and we can add a note in the docs about this limitation.

Remote is actually never mentioned in the docs - so don't think it makes sense to add one for this.

i know it's still draft, but it looks like tests are passing and the code is looking great!
Feel free to merge when ready

:grinning: will do in a bit

lovely!

hooray! Thanks for the help talley!
Also heads up to @henrypinkard - you can make an object that conforms to the Engine protocol and then pass the actual acquisition through to micromanager
also may be useful for @ptbrown1729 to implement your own engine to use your DAQ devices. Feel free to ping me for help with that - I may end up doing that for my setup next week

Paused, cancel, etc make sense but what is this thing:
class PMDASignaler(*args, **kwargs)

It's anything that has the right names of the mda signals. e.g. this psygnal version:
https://github.com/tlambert03/pymmcore-plus/blob/main/pymmcore_plus/mda/events/_psygnal.py
which you can just import from pymmcore_plus.mda.events import MDASignaler and use

It seems to me that this would be a confusing addition to the pycromanager api. Is it possible to implement a translation class within this project that translates this api to the pycromanager API?

The PMDASignaler is a typing.Protocol that declares the event/updating interface that an engine needs to provide.  We need some way for pycromanager to tell us what's happening... and that tells you the names of the signals to emit.  This goes back to the psygnal event emitter thing...

(you don't actually need to subclass that or anything, just need to provide the interface)

I see. But this doesn't quite answer my question.
Pycromanager doesn't use events anywhere. The equivalent things happen with callback functions (when they happen at all). I am hesitant to add this to pycromanager, because it duplicates functionality with a different, and nonessential mechanism, which I think would make the API more confusing to user using pycromanager alone.
What I am suggesting is that a compatibility layer that translates the the mechanisms used by pycromanger to this event-based system live in pymmcore-plus, since this seems to be where the specification of an event-based acquisition engine lives. Does that make sense?

It does,  maybe @ianhi has an idea here, or perhaps we can zoom about this.  I understand that pycromanager doesn't use events anywhere yet, largely because all of the event-related stuff that would signal to the GUI is on the Java side where the gui was written.  I can't immediately think of how we would know that pycromanager has "done anything" without it notifying us somehow (i.e. using an Event).
It would be very much akin to what you did here
                if not hasattr(napari_signaller, 'old_shape') or \
                        napari_signaller.old_shape.size != shape.size or \
                        np.any(napari_signaller.old_shape != shape):
                    image = dataset.as_array()
                    napari_signaller.old_shape = shape
                    yield image

except that rather than yield image, you would emit a signal frameReady.emit(image).  This doesn't have to mean you're extending the public facing pycro-manager API... it's just a good way for the programs to meet half-way with loose coupling

largely because all of the event-related stuff that would signal to the GUI is on the Java side where the gui was written. I can't immediately think of how we would know that pycromanager has "done anything" without it notifying us somehow (i.e. using an Event).

Everything is using callbacks (on python and java sides), which do essentially the same thing. I try to studiously avoid event-based systems because I find them to be much harder to debug at compile time

This doesn't have to mean you're extending the public facing pycro-manager API... it's just a good way for the programs to meet half-way with loose coupling

That makes sense.
Yeah maybe lets set up a zoom next week? I feel like we might be able to knock this all out in a couple hours

Call them callbacks, call them events, it's the same thing here :)
You connect the callback to the signal emitter.

What I am suggesting is that a compatibility layer that translates the the mechanisms used by pycromanger to this event-based system live in pymmcore-plus, since this seems to be where the specification of an event-based acquisition engine lives. Does that make sense?

So was I thinking this would make the most sense to have either in a new package: pycromanager-plus-bridge or as a sub package (like dataset) of pycromanager. So you could do:
from pycromanager import Core
from pycromanager.pymmcore_plus_bridge import EngineWrapper

from pymmcore_plus import CMMCorePlus

core = Core()
engine = EngineWrapper(core)
CMMCorePlus.instance().register_mda_engine(engine)

and then it would be used by napari-micromanager etc. The engine wrapper would do the small work of translating pycromanager callbacks to the required signals.
As for why I think that that should live on pycromanager's side

Yeah maybe lets set up a zoom next week? I feel like we might be able to knock this all out in a couple hours

I can zoom - I think you have my email right? We can coordinate there

This new pycromanager subpackage (or freestanding package) I'm proposing could also provide a mixin class that would benefit from all the pymmcore-plus additions while still calling out to java for everything provided there. Basically this:
class pycroCore:
    def somemethod(self):
        print("Calling pycromanager somemethod")

class CMMCorePlus:
    def somemethod(self):
        print("CMMCore somemethod")

    def cmmonly(self, somearg):
        """A method only on CMMCorePlus"""
        self.somemethod()
        print(f"got {somearg}")

class pycroCoreBridge(pycroCore, CMMCorePlus):
    ...

core = pycroCoreBridge()
core.somemethod()
core.cmmonly("blarg")

then all that would needed is some workin into pycroCore init to convert pycromanager style callbacks to CMMCorePlus style and I'm pretty sure it would just work every where that CMMCorePlus does.
Also now that I think about it more. I think a standalone package makes the most sense. It reflects the reality that it's a bridge between libraries that have more of sibling than parent child relationship. Once you put the bridge in one or the other then there's an awkward coupling that's taken place.
(I would give a more complete and tested example - but unfortunately I've never been able to use pycromanager on my laptop because I can't install full micro-manager)


error rate analysis for indels and substitution following variant calling?

Hi ,
Probably, this is not the right place to ask this question. However, I hope I can get some ideas.
How can I perform error rate analysis for indels and substitution following variant calling?
Thanks.
T

Do you have a truth set of known variants?

yes, I have genotypes for 93 SNPs from illumina genotyping chip.

Ok, I would calculate how often the genotype from nanopolish matches the genotype from the Illumina array.


Can I get amountBought from offersClaimed?

Hey @arsyadsr09 unfortunately I can not understand your question. Can you pls. provide more details? Maybe an example or so? Thx

Hey @arsyadsr09 unfortunately I can not understand your question. Can you pls. provide more details? Maybe an example or so? Thx


PayPal Checkout / Alternative Payment Methods

PayPal Smart Button is work in Alternative Payment Methods Mercado Pago | Brazil ?
https://developer.paypal.com/docs/checkout/integration-features/alternative-payment-methods/
Thanks!

This repository is only for reporting bugs or problems. In this case you can better ask your question on our forum https://forums.bagisto.com


Check Paid status of Bills waiting for payment asynchronously

For each bill that's waiting for payment, check the payment state in the blockchain asynchronously every 10 minutes (block time) and update the bill's paid state accordingly

please can you explain further and also pointers to any specific part of the code that handle this. @zupzup

@mubarak23 if you're looking for a ticket to contribute, I think https://github.com/BitcreditProtocol/E-Bill/issues/193 could be a good candidate


Update fallbacks for display.name and friends

Problem
There has been confusion as to what the display.name field should be used for and what title_public should be used for.
This led to substantial discussion and a few options being floated here.
Change to fallbacks
The option we picked means the following changes:
Search result

From: [title_public > grapher_config.title > display.name > title] - [title_variant]
To: [title_public > grapher_config.title > display.name > title] - [title_variant] - [attribution_short] - [description_short]

Data page title

No change: [title_public > grapher_config.title > display.name > title] - [attribution_short] - [title_variant]

About this data

From: [display.name > title] - [description_short]
To: [title_public > grapher_config.title  > display.name > title] - [title_variant] - [attribution_short] - [description_short]

Table tab

From: [display.name > title]
To: [title_public > display.name > title] - [title_variant] - [attribution_short]

Heading of a 1-indicator chart

From: [grapher_config.title > display.name > title] - [grapher_config.subtitle > description_short]
To: [grapher_config.title > title_public > display.name > title] - [grapher_config.subtitle > description_short]

NOTE: Here we reverse the hierarchy of grapher_config.title and title_public. This can be confusing, but this way we don't need to define both title_public and grapher_config.title for indicators with long names. And it also lets us have a data page with a title different from the chart title.
Legend in a chart

From: [display.name > title]
To: [display.name > title_public > title]

Admin page:

No change: [title]

@danyx23 Could you give this a quick eyes over to confirm this is alternative 3 as you understood it? If there's anything that needs editing, please just edit inline above.


Netlify deployment: Randomly returns 404 on requesting my-site.netlify.app/api/_supabase/session

Version
"@nuxtjs/supabase": "^0.3.0",
"nuxt": "3.0.0"
Reproduction Link
N/A
Steps to reproduce
Make an auth request using useSupabaseClient().auth.signInWithPassword(), or useSupabaseClient().auth.signOut().
What is Expected?
Requests to APIs is expected to be stable.
What is actually happening?
When deoplyed to Netlify, using eg. useSupabaseClient().auth.signInWithPassword() randomly returns a 404 requesting my-site.netlify.app/api/_supabase/session.
A page refresh seems to solve the issue until next auth event.
Chrome console output:
POST https://budgetpie-beta.netlify.app/api/_supabase/session 404
Uncaught (in promise) FetchError: 404  (/api/_supabase/session)
at async Object.callback (entry.d286fcba.js:9:118483)
Aside from needing this workaround #144 everything works fine on local deployment.

Same here, using Netlify, "@nuxtjs/supabase": "0.3.0" and  "nuxt": "^3.0.0"

I can confirm that bug appear on Netlify and not on Vercel. My nuxt supabase setup work in Vercel.

We need to use : nuxt build instead of nuxt generate to make this work on Netlify

I'm getting the same 404 error if I locally run nuxt generate and upload everthing from dist folder to vercel or netlify.

Make sure you are using pnpm build script to deploy

+1

I'm seeing this same issue when building/deploying for Cloudflare Pages. I'm using build then generate to create a static site.
Does next-supabase support static (JAMSTACK-style) deployment? It looks like it's requiring an API accessible via POST.
Is there some switch you need to set to make it support static sites, or is that just not available right now?

I'm seeing this same issue when building/deploying for Cloudflare Pages. I'm using build then generate to create a static site.
Does next-supabase support static (JAMSTACK-style) deployment? It looks like it's requiring an API accessible via POST.
Is there some switch you need to set to make it support static sites, or is that just not available right now?

I will recommend you update your build command to npm run build based on this https://nitro.unjs.io/deploy/providers/netlify

I guess this is a proxy probleme : https://docs.netlify.com/routing/redirects/rewrites-proxies/

We need to use : nuxt build instead of nuxt generate to make this work on Netlify

I'm using Nuxt3 (SSR: false) and SupabaseNuxt on a Nginx server hosted on Oracle Cloud, with "npm run generate" I get that error (404 /api/_supabase....) and with "npm run build" the index.html file doesn't get generated, so how can I deploy using "npm run build" if it is the solution? Thanks

I'm seeing this same issue when building/deploying for Cloudflare Pages. I'm using build then generate to create a static site.
Does next-supabase support static (JAMSTACK-style) deployment? It looks like it's requiring an API accessible via POST.
Is there some switch you need to set to make it support static sites, or is that just not available right now?

Did you find something new?


Avoid data inconsistency discussion

I know you are already aware of this problem, discussion started by Sebastian month ago https://spring.io/blog/2016/05/31/zero-downtime-deployment-with-a-database#comment-2848214244
Exposed solution (more detail here http://dehnes.com/software/2016/09/09/zero-downtime-deplayments-with-database-changes.html) was versioning row to be use as discriminant. But there was a problem to retrieve version, you must lock SELECT FOR UPDATE to be sure to have consistent version. That can be a real performance issue.
By using the same set of data from your sample I define the following process that seems to be data consistent without SELECT FOR UPDATE
State: ORIGIN
Base application looks like

I voluntary add READ and WRITE arrow to display how application (hibernate entity) is reading data and where is writing. So in previous picture application is reading on field lastname and writing on field lastname
State: TRANSITION_1
v2 should deploy and it should simply add new column (no more data migration on this step) but still nullable to do not break v1
ALTER TABLE person ADD surname VARCHAR(255), ALGORITHM=INPLACE, LOCK=NONE;

Moreover v2 do not implement such logic
public String getSurname() {
    return this.surname != null ? this.surname : this.lastName;
}

v2 continue reading on lastname for getSurname()
public String getSurname() {
	return this.lastName;
}

Why? Because both v1 and v2 write on lastname, lastname is always up-to-date!
State: TRANSITION_2
Simply flatten any instances to v2

PS: here there is a non null surname to show that is possible to have NULL value (if no update or updated with v1) and set value: Lepretre becomes Leprêtre
State: TRANSITION_3
v3 should deploy and do following upgrade

Remove NOT NULL from lastname
Migrate data from lastname to surname
Add NOT NULL to firstname

script should looks like
ALTER TABLE person MODIFY COLUMN lastname VARCHAR(255) NULL DEFAULT NULL, ALGORITHM=INPLACE, LOCK=NONE;
-- PS: not really good idea to do that, that will lock table and you will ensure some problem! Please do batch update for production usage.
-- Moreover when doing batch update you should use optimistic locking by using timestamped column to be sure that data has not been altered when you will update.
-- Good explanation on http://docs.spring.io/spring-batch/reference/htmlsingle/#batchProcessingStrategy
UPDATE person SET surname = lastname;
ALTER TABLE person MODIFY COLUMN surname VARCHAR(255) NOT NULL, ALGORITHM=INPLACE, LOCK=NONE;

Moreover v3 now read on surname column instead of lastname
State: TRANSITION_4
Simply flatten any instances to v3

State: TRANSITION_5
v4 should deploy and do not alter database (no database migration). v4 simply change application/entity logic: v4 do not write anymore on lastname.
That step is essential to be able to delete lastname on next step.

State: TRANSITION_6
Simply flatten any instances to v4

State: TRANSITION_7
v5 should deploy and remove lastname column
ALTER TABLE person DROP COLUMN lastname, ALGORITHM=INPLACE, LOCK=NONE;

State: FINAL
Simply flatten any instances to v5
(no image, too lazy 🍺 )
PS: this final step is not mandatory because v4 and v5 share same code. The only difference is that v5 contains Flyway migration on its packaging.
Final words
There are more transitions but I think (that why I open the issue may I wrong?) is the shortest way to achieve zero downtime deployment without data inconsistency.
The game is to always coordinates READ and WRITE between upgrades to be sure that you are always reading data from column where both version N and N+1 are writing.

@sebdehne I will be happy to read your feedback
PS: I add you to conversation because you initiate debate on blog comments!

Looks better :+1:, but first thing that comes to my mind: don't you have a concurrency issue when trying to migrate data during normal production (e.g. UPDATE person SET surname = lastname)?

database-thread reads lastname=="Smith"
node-v2 writes lastname="Johnson", surname="Johnson"
database-thread writes surname="Smith"

"Yes or no" to this answer makes specific assumptions on how the storage engine of the DB is implemented, and isn't the point of hibernate to be able to switch DB freely?
And it addresses of course the case of "renaming a field in an exising table", but I am not so sure how much of other, more complex change scenarios can be handled with this.
The limitation is of course the underlying SQL database. It is much easier to achieve more complex changes with zero downtime in document oriented databases, where the schema lives in the code only and can be managed on a per-record level.

Actually I'm not using
UPDATE person SET surname = lastname

Moreover I don't know how MySQL works when you ask update surname from lastname because in this (too specific) case you are not updating using plain value, we are using reference (column name). So I hope MySQL will lock -> read -> update at time it will execute the UPDATE .... Thus it must have the latest value.
Any way I really think that data migration should not be done like this, like I explained on SQL comment. On my POC I'm using something like that:
public class V3_1_0__migrate_lastname_to_surname implements SpringJdbcMigration {

    private static final Logger logger = LoggerFactory.getLogger(V3_1_0__migrate_lastname_to_surname.class);

    private static final int CHUNK_SIZE = 10;

    private static final int FETCH_SIZE = 1000;

    @Override
    public void migrate(JdbcTemplate jdbcTemplate) throws Exception {
        jdbcTemplate.setFetchSize(FETCH_SIZE);
        final Connection connection = jdbcTemplate.getDataSource().getConnection();
        boolean autoCommit = connection.getAutoCommit();
        try {
            connection.setAutoCommit(false);

            PreparedStatementCreator psc = new PreparedStatementCreatorFactory("SELECT id, lastname FROM person")
                    .newPreparedStatementCreator(Collections.emptyList());
            jdbcTemplate.query(psc, new ResultSetExtractor<Void>() {
                @Override
                public Void extractData(ResultSet rs) throws SQLException, DataAccessException {
                    int counter = 0;
                    int total = 0;
                    while (rs.next()) {
                        jdbcTemplate.batchUpdate("UPDATE person SET surname = ?, updated_at = ? WHERE id = ? AND updated_at = ?",
                                new InterruptibleBatchPreparedStatementSetter() {
                                    @Override
                                    public boolean isBatchExhausted(int i) {
                                        try {
                                            return rs.isAfterLast();
                                        } catch (SQLException e) {
                                            return true;
                                        }
                                    }

                                    @Override
                                    public void setValues(PreparedStatement ps, int i) throws SQLException {
                                        if (i == 0 || rs.next()) {
                                            ps.setString(1, rs.getString("lastname"));
                                            ps.setObject(2, LocalDateTime.now());
                                            ps.setObject(3, rs.getObject("id"));
                                            ps.setObject(4, rs.getObject("updated_at"));
                                        }
                                    }

                                    @Override
                                    public int getBatchSize() {
                                        return FETCH_SIZE;
                                    }
                                });
                        if (++counter == CHUNK_SIZE) {
                            connection.commit();
                            total += CHUNK_SIZE * FETCH_SIZE;
                            logger.info("Update commit for {} rows, total: {}", CHUNK_SIZE * FETCH_SIZE, total);
                            counter = 0;
                        }
                    }
                    return null;
                }
            });
        } finally {
            connection.commit();
            connection.setAutoCommit(autoCommit);
        }
    }
 }

there are two majors advantages:

Obvious, this is now chunked that avoid any performance issue during runtime
I tested with database with > 1 millions persons UPDATE person SET surname = lastname create downtime (when using jmeter scenario with 10 users in concurrency).

Take care of UPDATE person SET surname = ?, updated_at = ? WHERE id = ? AND updated_at = ?
Assumption your row should be timestamped (here is updated_at DATETIME).
That means batch will only update value if value has not be changed (because any modification should trigger an upgrade of updated_at).
And migration is launched during step where both version N and N+1 are writing on both columns lastname and surname, thus if timestamp do not match it simply means that person has been upgraded and both columns must be up-to-date so can be ignored by batch processing.

I hope it's clear for you?
PS: Batch code was written in 5 min I can be improved but idea is here

@kakawait you raise valid points. Our code procedure allows some inconsistency regarding the data in the old and the new column. TBCH, there is no generic one fits it all solution. Requirements for a zero downtime deployment and migration vary from application to application. The different solutions vary by the price you want to pay.
Your approach addresses the issue that data is written to the old and new column by adding more steps. Data is mostly consistent as it gets read/written by the application and the migration. The flow could be optimized even more by using a configuration flag which is the primary column to read during the migration. Controlling the read field with configuration would not require any code changes between V2 and V3, just config changes.
Another solution, introducing a schema version on record level that clarifies which schema to use. A schema version requires SELECT FOR UPDATE and provides a higher level of consistency. @sebdehne raised the issue of concurrent writes. This not only applies to the migration but also to concurrent application writes. Two nodes can update the same record at the same time. Having a record version (optimistic locking/CAS) associated with each record can address the issue, both for concurrent node writes and a schema migration but requires SELECT FOR UPDATE and conditional writes. You ensure consistent data at the price of performance.

After working more on rolling upgrade and/or zero downtime migration I get the same conclusion as yours

The different solutions vary by the price you want to pay.

If your data is not so critical you can easily win some steps but loosing some data inconsistency but keep in mind that in most cases the probability to be inconsistent is really weak.
Otherwise if your ops (devops) are pretty advances and it's easy to deploy 10 versions per day you can simply remove step from possible limitations.


Error storing surface senses

Hello
I am having trouble to export my geometry from cubit into a .h5m file format using dagmc.
I've came across this problem already in this query.
the problem might be overlapping.
If the problem is indeed caused by overlapping,  how can I fix it using cubit?
Anyway,
:here is the full log of the error
Cubit>export dagmc "test.h5m"
Setting faceting tolerance to 0.001
Setting length tolerance to 0
Setting normal tolerance to 5
Found 81822 entities of dimension 0
Found 135347 entities of dimension 1
Found 57301 entities of dimension 2
Found 958 entities of dimension 3
Surface 58831 has reverse sense with multiple volume 273 and volume 284
Error storing surface senses: 16
ERROR: Command Failed.
Any help will be appreciated.
Thanks.

Thanks!


Bugfix: Add OCIO as submodule to prepare for handling maketx color space conversion.

Brief description
maketx executable requires an OCIO config file path appended when using the --colorconfig flag.  This resolves #3584 and prepares for preventing maketx from crashing when publishing OpenPype Look instances.
Description
Adding OCIO as a submodule and adding functionality to grab the OCIO config file path based on a profile folder parameter as the function argument.
Testing:

Create some geo and OP model instance.
Publish it.
load model instance in.
Create shader, apply a test base color texture (that's in sRGB).
publish it.

The publishing should produce a .tx file that's optimized for MtoA. (Make sure create .tx is enabled in the look creator)

Just want to mention here that this PR adds a 2.3 GB file size to OpenPype builds and installs as I mentioned on discord. The code currently only uses the 2.3 MB nuke-default folder so it might be the easiest quick fix for now to only include that somehow.

we've decided to have our own forked and curated set that should be used instead, not just for that particular issue but also for proper support of color management.


Updated Node library to new secure server API

This closes #730. I tested this change against a merge of this branch and master, but that pull request was too big.

Thanks!


Clean unused Gems from the gemfile

In the process of Ruby Upgrade v2.4.1 its advisable to first clean up the unused Gems from the Gemfile.
Related to #826.
This would include but not limited to:
#rolify for roles
gem 'rolify', '~> 5.1.0'
#API
gem 'swagger-docs', '>= 0.2.9 '
CODE DOCUMENTATION
gem 'yard', '>= 0.9.5'
gem 'redcarpet', '>= 3.3.4'

You should also be able to get rid of the following:

friendly_id
yaml_db
capybara (also try dropping the others in that section (not sure we're using them all)
jbuilder (@jollopre and @xsrust is this one really needed for the API?)

Skipping 'jbuilder' and 'administrate' gems for now as they are still used in the API.

closing issues that can't be tested in the UI


Make Panku disabled on release builds

I thought the plugin would deactivate itself when making a release build, but it doesn't. It should be as easy as adding something like this on console's instantiation :
if OS.has_feature("release"):
    # Disable Panku

Did you enable special option Project->Project Settings->Panku->Disable on release?

No, I didn't know it existed, but imo should be enabled by default

No, I didn't know it existed, but imo should be enabled by default

Suggestion accepted.
https://github.com/Ark2000/PankuConsole/blob/master/docs/faq.md
Maybe I should work on something like a dedicated doc website later.

Thanks for the quick and positive response. Love the addon btw, it's in all of my projects


Pass classes directly to component

without the rest of the sheet object
closes #67

[x] think, what happens when this.sheet is not defined
[x] add tests on new functionality

think, what happens when this.sheet is not defined can't be undefined

so we just need to add a test

Yes, will do it at evening.
Currently, I am full with my work...

Done.

merged

thanks!


The 'View all page feedback' link on this page includes a search argument that hides search results

Closed in order to recreate with proper metadata

Closed in order to recreate with proper metadata


Vimeo. Loading fails after 100%

Describe the bug
With a simple example of using the library I'm trying to load videos to Vimeo. When I use tus.Upload with a basic set of options, file is being loaded to the server successfully, but the library doesn't fire onSuccess event after 100% load, instead I have an error event.
Expected behavior
After 100% uploading fire onSuccess event
Setup details
I'm using the library (2.3.1) in react 18. Uploading to Vimeo.
The config is the following
const upload = tus.Upload(file, {
        uploadUrl: vimeoFileUrl,
        retryDelays: [0, 5000, 10000],
        onError: function(error) {
            console.log('TUS Failed because: ' + error);
        },
        onProgress: function(bytesUploaded, bytesTotal) {
            let percentage = ((bytesUploaded / bytesTotal) * 100).toFixed(2);
            console.log(bytesUploaded, bytesTotal, percentage + '%');
        },
        onSuccess: function() {
            console.log('TUS Download finished', initBasicUploader.file.name, initBasicUploader.url);
        },
    });

upload.start();

What exactly happens I don't know but for some reason, this code goes alright all the way until "loading 100%", then repeat this in console for 5 times and throws an error.
TUS Failed because: Error: tus: failed to resume upload, caused by TypeError: Cannot read properties of undefined (reading 'name'), originated from request (method: HEAD, url: https://europe-files.tus.vimeo.com/files/vimeo-prod-src-tus-eu/05d28ec…, response code: n/a, response text: n/a, request id: n/a)

Meanwhile, I can see the testing video uploaded to Vimeo just fine. That's confusing.
Myabe you can shed some light into what the library expects from the server when it's 100% uploaded the video or what happens there. Thanks.

From the error message, it seems as if you are trying to access the property name of an undefined object in your onSuccess callback:

initBasicUploader.file.name

initBasicUploader.file is undefined. That is not a bug in tus-js-client but your code probably. However, tus-js-client should mask sch user errors more clearly!

As my case where I had used the library long changed, I cannot check that code again and see if the problem was on my part or not, so let's assume the lib works as it should and close the issue, thanks for your response anyway.


Add support for task completion percentage?

Is there an objection to adding a new task attribute called completion_percentage?
The proposal is to make this an integer that would start at 0 and automatically be set to 100 if the task is boolean completed.  A task would also be completed if the completion_percentage is set to 100.
I will submit a PR if this functionality is allowed; however, I think that Taskwarrior itself does not support a completion percentage.

I just realized I could hijack tags functionality to add this myself without changes to tasklib itself; it's quite hackish, but it can be done as long as you assume that tag consistency is maintained (which is probably more doable than adding xyz custom attribute that I may only use).
import tasklib
tw = tasklib.TaskWarrior()
mytask = tasklib.Task(tw, description="My task with completion", due="2023-12-25")
mytask["tags"] = ["completion:0"]
mytask["tags"].remove("completion:0")
mytask["tags"].add("completion:20")


⚠ TorrentLeech has degraded performance

In eb57efd, TorrentLeech ($TL) experienced degraded performance:

HTTP code: 200
Response time: 6035 ms

Resolved: TorrentLeech performance has improved in d89176b after 7 minutes.


Add variable for setting the GPUs on cluster

The change also includes a patch to set the GPUs on nutanixmachinetemplate resources for control plane and worker machine deployments.

/retest

/test e2e-capx-clusterclass

/retest

/lgtm
/approve


MietteReporter: handle wide characters?

I'm not sure the current reporter will render highlights correctly if you have, say, doublewidth character, tabs, etc?

The reporter highlights fine. Since miette itself doesn't generate byte offsets, though, that means it's the producer's responsibility to make sure they're compensating for wide bytes.
See:

/cc @estebank


Drupal Console  Issue

Trying to run drupal console commands fail on CLI versions > cli:2.0-php7.2
This is a extension/continuation of #63
Console is installed
fin exec ls -la vendor/drupal/console
total 112
drwxr-xr-x 23 docker dialout   782 Feb 11 19:33 .
drwxr-xr-x  8 docker dialout   272 Feb 11 19:33 ..
-rw-r--r--  1 docker dialout    61 Mar 21  2018 autoload.local.php.dist
-rw-r--r--  1 docker dialout   141 Mar 21  2018 autoload.php.dist
drwxr-xr-x  5 docker dialout   170 Mar 21  2018 bin
-rw-r--r--  1 docker dialout   600 Mar 21  2018 box.json
-rw-r--r--  1 docker dialout  2285 Mar 21  2018 composer.json
drwxr-xr-x  3 docker dialout   102 Mar 21  2018 config
-rw-r--r--  1 docker dialout  2303 Mar 21  2018 CONTRIBUTING.md
drwxr-xr-x  3 docker dialout   102 Mar 21  2018 .github
-rw-r--r--  1 docker dialout   474 Mar 21  2018 .gitignore
-rw-r--r--  1 docker dialout 18092 Mar 21  2018 LICENSE.txt
-rw-r--r--  1 docker dialout   222 Mar 21  2018 .php_cs
-rw-r--r--  1 docker dialout  1275 Mar 21  2018 phpqa.yml
-rw-r--r--  1 docker dialout   819 Mar 21  2018 phpunit.xml.dist
-rw-r--r--  1 docker dialout  4158 Mar 21  2018 README.md
drwxr-xr-x  4 docker dialout   136 Mar 21  2018 resources
-rw-r--r--  1 docker dialout  1891 Mar 21  2018 services.yml
drwxr-xr-x 12 docker dialout   408 Mar 21  2018 src
drwxr-xr-x  9 docker dialout   306 Mar 21  2018 templates
drwxr-xr-x  7 docker dialout   238 Mar 21  2018 Test
-rw-r--r--  1 docker dialout  1525 Mar 21  2018 .travis.yml
-rw-r--r--  1 docker dialout  1836 Mar 21  2018 uninstall.services.yml

Drupal is working
fin drush status
 Drupal version                  :  8.6.10
 Site URI                        :  http://mises-api.docksal
 Database driver                 :  mysql
 Database hostname               :  db
 Database username               :  user
 Database name                   :  default
 Database                        :  Connected
 Drupal bootstrap                :  Successful
 Drupal user                     :
 Default theme                   :  seven
 Administration theme            :  seven
 PHP configuration               :
 PHP OS                          :  Linux
 Drush script                    :  /usr/local/bin/drush8
 Drush version                   :  8.1.18
 Drush temp directory            :  /tmp
 Drush configuration             :  /home/docker/.drush/drushrc.php /etc/drush/drushrc.php
 Drush alias files               :
 Install profile                 :  headless_lightning
 Drupal root                     :  /var/www/web
 Drupal Settings File            :  sites/default/settings.php
 Site path                       :  sites/default
 File directory path             :  sites/default/files
 Private file directory path     :  sites/default/files/private
 Temporary file directory path   :  /tmp
 Sync config path                :  /var/www/config

Drupal console error
fin drupal gm
[ERROR] DrupalConsole must be executed within a Drupal Site.

Console version
fin drupal --version
[ERROR] DrupalConsole must be executed within a Drupal Site.

fin config
---------------------
COMPOSE_PROJECT_NAME_SAFE: mises-api
COMPOSE_FILE:
/Users/paulsheldrake/.docksal/stacks/volumes-bind.yml
/Users/paulsheldrake/.docksal/stacks/stack-default.yml
/Users/paulsheldrake/docksal/kanopi_docksal/mises/mises-api/.docksal/docksal.yml
ENV_FILE:
/Users/paulsheldrake/docksal/kanopi_docksal/mises/mises-api/.docksal/docksal.env
/Users/paulsheldrake/docksal/kanopi_docksal/mises/mises-api/.docksal/docksal-local.env

PROJECT_ROOT: /Users/paulsheldrake/docksal/kanopi_docksal/mises/mises-api
DOCROOT: web
VIRTUAL_HOST: mises-api.docksal
VIRTUAL_HOST_ALIASES: *.mises-api.docksal
IP: <IP_ADDRESS>
MYSQL: <IP_ADDRESS>:32783

Docker Compose configuration
---------------------
services:
  behat:
    entrypoint: top -b
    hostname: behat
    image: docksal/behat
    volumes:
    - /Users/paulsheldrake/docksal/kanopi_docksal/mises/mises-api/tests/behat:/src:rw
  cli:
    dns:
    - <IP_ADDRESS>
    - <IP_ADDRESS>
    environment:
      BLACKFIRE_CLIENT_ID: null
      BLACKFIRE_CLIENT_TOKEN: null
      DOCROOT: web
      GIT_USER_EMAIL<EMAIL_ADDRESS>      GIT_USER_NAME: Paul Sheldrake
      HOST_GID: '20'
      HOST_UID: '501'
      LANG: en_US.UTF-8
      LANGUAGE: en_US.UTF-8
      LC_ALL: en_US.UTF-8
      SECRET_ACAPI_EMAIL: null
      SECRET_ACAPI_KEY: null
      SECRET_PLATFORMSH_CLI_TOKEN: null
      SECRET_SSH_PRIVATE_KEY: null
      SECRET_TERMINUS_TOKEN: NgjqV*****KqV33
      TERMINUS_ENVIRONMENT: dev
      TERMINUS_SITE: mises-api
      VIRTUAL_HOST: mises-api.docksal
      XDEBUG_CONFIG: remote_connect_back=0 remote_host=<IP_ADDRESS>
      XDEBUG_ENABLED: '1'
    hostname: cli
    image: docksal/cli:2.6-php7.2
    volumes:
    - docksal_ssh_agent:/.ssh-agent:ro
    - /Users/paulsheldrake/docksal/kanopi_docksal/mises/mises-api/.docksal/etc/drush:/etc/drush:ro
    - cli_home:/home/docker:rw
    - project_root:/var/www:rw,nocopy
  db:
    dns:
    - <IP_ADDRESS>
    - <IP_ADDRESS>
    environment:
      MYSQL_ALLOW_EMPTY_PASSWORD: null
      MYSQL_DATABASE: default
      MYSQL_INITDB_SKIP_TZINFO: null
      MYSQL_ONETIME_PASSWORD: null
      MYSQL_PASSWORD: user
      MYSQL_RANDOM_ROOT_PASSWORD: null
      MYSQL_ROOT_PASSWORD: root
      MYSQL_USER: user
    hostname: db
    image: docksal/db:1.2-mysql-5.6
    ports:
    - 3306/tcp
    volumes:
    - db_data:/var/lib/mysql:rw
    - project_root:/var/www:ro,nocopy
  mail:
    environment:
      MH_API_BIND_ADDR: <IP_ADDRESS>:80
      MH_UI_BIND_ADDR: <IP_ADDRESS>:80
    expose:
    - '80'
    hostname: mail
    image: mailhog/mailhog
    labels:
      io.docksal.virtual-host: webmail.mises-api.docksal
    user: root
  web:
    depends_on:
      cli:
        condition: service_started
    dns:
    - <IP_ADDRESS>
    - <IP_ADDRESS>
    environment:
      APACHE_BASIC_AUTH_PASS: null
      APACHE_BASIC_AUTH_USER: null
      APACHE_DOCUMENTROOT: /var/www/web
    hostname: web
    image: docksal/web:2.1-apache2.4
    labels:
      io.docksal.cert-name: none
      io.docksal.permanent: "false"
      io.docksal.project-root: /Users/paulsheldrake/docksal/kanopi_docksal/mises/mises-api
      io.docksal.virtual-host: mises-api.docksal,*.mises-api.docksal,mises-api.docksal.*
    volumes:
    - project_root:/var/www:ro,nocopy
version: '2.1'
volumes:
  cli_home: {}
  db_data: {}
  docksal_ssh_agent:
    external: true
    name: docksal_ssh_agent
  project_root:
    driver: local
    driver_opts:
      device: /Users/paulsheldrake/docksal/kanopi_docksal/mises/mises-api
      o: bind
      type: none

---------------------

@paulsheldrake sorry so which folder did you run fin drupal gm in, was it inside docroot?

Yes, it was in the docroot

@paulsheldrake I believe this is an issue with Drupal Console's Launcher. Doing more research into this.

@paulsheldrake @sean-e-dietrich just to add some more info, I'm also seeing this today on a new site spin up that was based on drupal_project. I won't bother for now but I could post duplicate output as above:
fin drush status = success
fin config = normal looking
fin drupal gm = fail (when run within docroot or sites/default or anywhere)
console is verified to exist in vendor folder
I have to go back and test but we have many other sites, and this NEW-ish site is the first time I've seen this -- interestingly, all of our other sites are based on a custom install profile, with Pantheon integrations, etc. This one was just a one-off, from scratch install, using the normal drupal_project composer.

We had new docksal/cli images released recently
Debian 9 based v2.7.0:
docksal/cli:2.7-php7.1
docksal/cli:2.7-php7.2
docksal/cli:2.7-php7.3

Debian 10 based v2.8.0:
docksal/cli:2.8-php7.1
docksal/cli:2.8-php7.2
docksal/cli:2.8-php7.3

I was not able to reproduce this issue using the Drupal 8 Composer boilerplate (https://github.com/docksal/boilerplate-drupal8-composer) with these images.
If you are still able to reproduce the issues, please post the exact steps and the codebase.


Getting root partition autodiscovery to work

Hello, I'm currently trying to get the root partition auto discovered but can't get it to work.
PC boots fine with the following options: root=PARTLABEL=ROOT rootflags=subvol=@ rw.
From what I understood the first root flag shouldn't be necessary if I have a gpt partition with the correct type (set in gdisk to 8304, which should be a GUID of 4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709 and as such properly detected).
However, when I set the options to just rootflags=subvol=@ rw I am not prompted for the LUKS passphrase and am instead greeted by an error that says
booster: unable to detect active ESP: open /sys/firmware/efi/efivars/LoaderDevicePartUUID-...: no such file or directory
Press ENTER to reboot

Please let me know if you need any more info.

If root= is not specified, then booster triggers automatic partition discovery per its specification.
For that booster needs to get the active EFI partition. For that booster reads content of efivars file /sys/firmware/efi/efivars/LoaderDevicePartUUID-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f.
You do not have this file. Does it mean that you do not use EFI mode? Or you did not load efivarfs module?

I am booted in EFI mode (at least according to the archwiki). I also have a bunch of efivars (efivar --list), however LoaderDevicePartUUID isn't part of them.
I made a universal: true image, I'm assuming the efivarfs module gets included in that?

The best way to debug it would be adding busybox to the extra_files list, rebuild booster image and boot to it. This will get you into the emergency shell on the error.
Then check if you have /sys/firmware/efi/efivars/ directory available and if yes - post its content (list of files).

I made a universal: true image, I'm assuming the efivarfs module gets included in that?

Great question. Arch Linux and many other distros have this module compiled-in. At some other systems this module is not included by default AFAIR. Thus one more thing to try is to add modules: efivarfs to the config.

This is the booster config I tried
universal: true
extra_files: busybox
modules: efivarfs

I got an error saying sh: can't access tty; job control turned off and my keyboard wouldn't load, so I couldn't check it then.
For what it's worth these are the efivars on my booted system
AmdAcpiVar-79941ecd-ed36-49d0-8124-e4c31ac75cd4
AMD_PBS_SETUP-a339d746-f678-49b3-9fc7-54ce0f9df226
AMD_RAID-fe26a894-d199-47d4-8afa-070e3d54ba86
AmdSetup-3a997502-647a-4c82-998e-52ef9486a247
AmiHardwareSignatureSetupUpdateCountVar-81c76078-bfde-4368-9790-570914c01a65
AMITCGPPIVAR-a8a2093b-fefa-43c1-8e62-ce526847265e
AMITSESetup-c811fa38-42c8-4579-a9bb-60e94eddfb34
AOD_SETUP-5ed15dc0-edef-4161-9151-6014c4cc630c
ApServiceAuthority-ec87d643-eba4-4bb5-a1e5-3f3e36b20da9
ApServiceData-ec87d643-eba4-4bb5-a1e5-3f3e36b20da9
ApSyncFlagNv-ad3f6761-f0a3-46c8-a4cb-19b70ffdb305
AuditMode-8be4df61-93ca-11d2-aa0d-00e098032b8c
Boot0000-8be4df61-93ca-11d2-aa0d-00e098032b8c
Boot0001-8be4df61-93ca-11d2-aa0d-00e098032b8c
Boot0002-8be4df61-93ca-11d2-aa0d-00e098032b8c
BootCurrent-8be4df61-93ca-11d2-aa0d-00e098032b8c
BootOptionSupport-8be4df61-93ca-11d2-aa0d-00e098032b8c
BootOrder-8be4df61-93ca-11d2-aa0d-00e098032b8c
CACHE-ec87d643-eba4-4bb5-a1e5-3f3e36b20da9
ClearProfileAfterFlash-863fa0d5-4cf0-4da4-9af3-1bd7b3bd7e31
ConIn-8be4df61-93ca-11d2-aa0d-00e098032b8c
ConInDev-8be4df61-93ca-11d2-aa0d-00e098032b8c
ConOut-8be4df61-93ca-11d2-aa0d-00e098032b8c
ConOutDev-8be4df61-93ca-11d2-aa0d-00e098032b8c
CurrentPolicy-77fa9abd-0359-4d32-bd60-28f4e78f784b
db-d719b2cb-3d3a-4596-a3bc-dad00e67656f
dbDefault-8be4df61-93ca-11d2-aa0d-00e098032b8c
dbx-d719b2cb-3d3a-4596-a3bc-dad00e67656f
dbxDefault-8be4df61-93ca-11d2-aa0d-00e098032b8c
DefaultBootOrder-45cf35f6-0d6e-4d04-856a-0370a5b16f53
DeployedMode-8be4df61-93ca-11d2-aa0d-00e098032b8c
DeploymentModeNv-97e8965f-c761-4f48-b6e4-9ffa9cb2a2d6
DmiArray-4b3082a3-80c6-4d7e-9cd0-583917265df1
DmiVar0100010400-4b3082a3-80c6-4d7e-9cd0-583917265df1
DmiVar0100010500-4b3082a3-80c6-4d7e-9cd0-583917265df1
DmiVar0100010700-4b3082a3-80c6-4d7e-9cd0-583917265df1
DmiVar0100010800-4b3082a3-80c6-4d7e-9cd0-583917265df1
DmiVar0200020400-4b3082a3-80c6-4d7e-9cd0-583917265df1
DmiVar0200020500-4b3082a3-80c6-4d7e-9cd0-583917265df1
DmiVar0200020600-4b3082a3-80c6-4d7e-9cd0-583917265df1
DmiVar0200020700-4b3082a3-80c6-4d7e-9cd0-583917265df1
DmiVar0200020800-4b3082a3-80c6-4d7e-9cd0-583917265df1
DmiVar0300030400-4b3082a3-80c6-4d7e-9cd0-583917265df1
DmiVar0300030700-4b3082a3-80c6-4d7e-9cd0-583917265df1
DownCoreStatus-29749bad-401b-4f6d-b124-cece8c590c48
ErrOut-8be4df61-93ca-11d2-aa0d-00e098032b8c
ErrOutDev-8be4df61-93ca-11d2-aa0d-00e098032b8c
FBSelect-3fae9ba1-a3f1-42eb-b6f2-b616ea57db9d
FixedBoot-de8ab926-efda-4c23-bbc4-98fd29aa0069
GSEHWInfo-8a989680-e651-4c51-a2af-3cdb1a4ab5b0
HiiDB-1b838190-4625-4ead-abc9-cd5e6af18fe0
HwErrRecSupport-8be4df61-93ca-11d2-aa0d-00e098032b8c
KEK-8be4df61-93ca-11d2-aa0d-00e098032b8c
KEKDefault-8be4df61-93ca-11d2-aa0d-00e098032b8c
Lang-8be4df61-93ca-11d2-aa0d-00e098032b8c
LangCodes-8be4df61-93ca-11d2-aa0d-00e098032b8c
MaximumTableSize-4b3082a3-80c6-4d7e-9cd0-583917265df1
MemoryOverwriteRequestControl-e20939be-32d4-41be-a150-897f85d49829
MemoryOverwriteRequestControlLock-bb983ccf-151d-40e1-a07b-4a17be168292
MFlashVersionVariable-fd6b0489-d401-40c2-98b1-b1300b048711
MonotonicCounter-01368881-c4ad-4b1d-b631-d57a8ec8db6b
MountFirstScreenOffsetX-3ff963fb-0909-4899-9566-3e40985f61ed
MountFirstScreenOffsetY-79dd3cce-4534-4320-b6d6-5cc427d3fe35
msiDispatcherImageList-26817ae9-ca17-80d5-ab93-2f682e69efa9
MsiOcBackup-ba6510ad-1972-4d84-b28e-00e5fc8245cb
MsiOcCpuMemInfo-4ba187df-3bad-41b2-b73b-3d3dc1cc6387
MsiOcInfoFlag-48419251-dd85-4597-84b4-11182014adde
MsiOcMemECCInfo-78876464-9753-a77a-7607-652533891231
MsiOcMemPatchID-78876464-9753-a77a-7607-652533891231
MsiOcMemRGBInfo-78876464-9753-a77a-7607-652533891231
MsiOcMemSpdCheckSum-78876464-9753-a77a-7607-652533891231
MsiOcMemSpdData-78876464-9753-a77a-7607-652533891231
MsiOcMemSpdXMPInfo-78876464-9753-a77a-7607-652533891231
msiOcProFileStringCount-857fbb9e-8a3b-97ce-ae58-2515e09922bb
NetworkStackVar-d1405d16-7afc-4695-bb12-41459d3695a2
OA3MSDMvariable-01368881-c4ad-4b1d-b631-d57a8ec8db6b
OsIndicationsSupported-8be4df61-93ca-11d2-aa0d-00e098032b8c
PK-8be4df61-93ca-11d2-aa0d-00e098032b8c
PKDefault-8be4df61-93ca-11d2-aa0d-00e098032b8c
PlatformLang-8be4df61-93ca-11d2-aa0d-00e098032b8c
PlatformLangCodes-8be4df61-93ca-11d2-aa0d-00e098032b8c
ProFileAutoSaveInfo-515b6cdf-bbe7-4509-83cc-d725903d522a
SecureBoot-8be4df61-93ca-11d2-aa0d-00e098032b8c
SecureBootSetup-7b59104a-c00d-4158-87ff-f04d6396a915
Setup-ec87d643-eba4-4bb5-a1e5-3f3e36b20da9
SetupMode-8be4df61-93ca-11d2-aa0d-00e098032b8c
SignatureSupport-8be4df61-93ca-11d2-aa0d-00e098032b8c
SioSetupData-6b0cc1bc-910f-411e-b6cb-0e314d0bb8c1
SliderDlgNod2Fun-4c5fe008-9f33-4e30-a075-5b5c84deb9f8
SmbiosEntryPointTable-4b3082a3-80c6-4d7e-9cd0-583917265df1
SmbiosEntryPointTableF000-4b3082a3-80c6-4d7e-9cd0-583917265df1
SmbiosScratchBuffer-4b3082a3-80c6-4d7e-9cd0-583917265df1
StdDefaults-4599d26f-1a11-49b8-b91f-858745cff824
SyncFlashBufferAddress-0da1e40b-65a3-4547-8dae-4538c9685df8
Timeout-8be4df61-93ca-11d2-aa0d-00e098032b8c
TotalNumberOfRootBridges-fb5703f5-f8a7-f401-18b4-3f108deb2612
TPMPERBIOSFLAGS-7d3dceee-cbce-4ea7-8709-6e552f1edbde
UsbSupport-ec87d643-eba4-4bb5-a1e5-3f3e36b20da9
VendorKeys-8be4df61-93ca-11d2-aa0d-00e098032b8c
WMIAcpiMemAddr-ec87d643-eba4-4bb5-a1e5-3f3e36b20da9
WriteOnceStatus-4b3082a3-80c6-4d7e-9cd0-583917265df1

It looks like your bootloader does not properly set LoaderDevicePartUUID-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f efi variable. According to systemd (that used as a reference implementation here) the variable is needed for autodetect:
https://www.freedesktop.org/software/systemd/man/systemd-gpt-auto-generator.html
This generator will only look for the root partition on the same physical disk where the EFI System Partition (ESP) is located. Note that support from the boot loader is required: the EFI variable LoaderDevicePartUUID of the 4a67b082-0a4c-41cf-b6c7-440b29bb8c4f vendor UUID is used to determine from which partition, and hence the disk from which the system was booted. If the boot loader does not set this variable, this generator will not be able to autodetect the root partition. See the [Boot Loader Interface](https://systemd.io/BOOT_LOADER_INTERFACE) for details.

How do you load your computer with other initramfs? Does it really work at non-booster configuration? If yes - how does it detect the EFI partition?

I didn't know that the bootloader needs to set the variable. I've been using refind but it works now with systemd-boot. Thanks for the hint.

systemd-boot does set this variable.
refind seems does not, and it means it does not support discoverable root partitions.

After going through the refind config again I found a setting called write_systemd_vars that, when enabled, sets LoaderDevicePartUUID. With that autodiscovery works under refind as well.


Compile class

Hello, does this plugin work with Uno Compile Class or am I doing something wrong? As much as I can understand the answer is no but I wanted to ask directly.
Thank you!

Technically, I don't think there is any reason why it shouldn't work.
If you can upload a sample structure to https://stackblitz.com/ or similar, I would like to review and check it.


The tool is freezing on "Leaving..." message

I'm writing bin file to esp8266 using esploader.write_flash
The console says "Leaving..." and nothing happens then.
In debug mode the last message is: "Debug: check_command leave Flash mode".
Despite this, the firmware works as expected after I press rst button on the dev board.

Well, nevermind, this is expected behavior :)
"Leaving..." without any subsequent output or hard resetting for me looks like freezing.


DiffArtifacts class is demanded

In v0.1.0 there is a working code:
        // make diff
        List<DiffArtifact> stuffedDiffArtifacts =
                store.makeDiff(expected, actual, ["URL.file"] as Set)

        // compile HTML report
        DiffReporter reporter = store.newReporter(jobName)
        reporter.reportDiffs(stuffedDiffArtifacts, "index.html")

This should rather be:
        // make diff
        DiffArtifacts stuffedDiffArtifacts =
                store.makeDiff(expected, actual, ["URL.file"] as Set)

        // compile HTML report
        DiffReporter reporter = store.newReporter(jobName)
        reporter.reportDiffs(stuffedDiffArtifacts, "index.html")

DiffArtifacts would wrap a List, and provides a method that decides FAILED/SUCCESS.
And the DiffArtifacts can implement a method that can tell if one or more entry DiffArtifacts has the diffRation >  the criteria.

I need the DiffArtifacts.toString() method. I want to have a JSON representation.

done


Enlarge the total slots of scheduler latch

What have you changed? (mandatory)
Enlarge the default value of the latch's total slots.
In loading data scenario, we found the default value of total slots of latch is not large enough, it will limit the loading speed because of waiting latch. After we enlarged the total slots,  it became fast.
Currently, the default value of scheduler-pending-write-threshold is 100MB, it means there is at most 100MB bytes data is writing or going to be writing, all of the related keys need to occupy the latch. Let's assume the average size of each key value pair is 64 bytes, there are will be about 1.5 million keys. To reduce the probability of waiting latch, the total slots of the latch should large enough. We enlarge the default value of latch slots to 2 million, the latch takes about 100MB memory.
What are the type of the changes? (mandatory)
Improvement
How has this PR been tested? (mandatory)
CI
Does this PR affect documentation (docs/docs-cn) update? (mandatory)
No
Does this PR affect tidb-ansible update? (mandatory)
No

Maybe we should add a comment that we use the next power of two for this size.
LGTM


nbviewer rate limit updates

Jupyter newsletter issues
Thank you for submitting a story idea for the newsletter, an enhancement, or
a bug. Please fill out the information below as completely as possible.
Issue category

[x] Technical story suggestion (Projects, Releases, Code, Notebooks, etc.)
[ ] General interest story suggestion (People profiles, conferences,
awards, recognitions, etc.)
[ ] Newsletter enhancements
[ ] Newsletter bugs

Story suggestions
Please enter below a topic, headline, 2 to 4 sentence summary, links to
additional information, and links to images or photos.
Topic:
identifying and fixing issues with nbviewer hitting the GitHub API rate limit.
Replace with suggested story topic.
Headline:
nbviewer: tracking down the GitHub API rate limit
Summary of story:
nbviewer has had issues recently hitting the GitHub API rate limit (5000 requests/hour). After enabling some log analysis (with loggly), a couple of SEO bots were identified to be driving a large fraction of the traffic, exhausting resources that humans could be using, and making nbviewer unavailable for periods of time. We've updated the nbviewer deployment to block these particular bots, and mitigate similar problems in the future so nbviewer should once again be available and we can all get back to sharing notebooks.
Link(s) to additional information:
I'll hopefully write a more detailed post on the Jupyter blog, which I can link to when it's up.

@minrk Thanks for figuring that out. Happy to help you write a draft for the blog.

Thanks Min, I will include this for consideration in the March newsletter.

@minrk  - I will include this idea in the proposed April Newsletter. I will assume this is the blog post unless you let me know otherwise: https://blog.jupyter.org/2017/03/01/nbviewer-and-githubs-rate-limit/

Yep. That's the post.


How does dep-server handle broken releases?

Recently, one of our complied dependencies was broken due to an issue during compilation. We didn't catch this during testing, so we published the broken dependency. We fixed the dependency and re-uploaded it, overwriting the previous version.
We could have caught this specific issue with improved testing, but assuming that we can't catch every possible issue that arises during test, I am wondering what our policy/plan is for handling defective releases?
The current (implicit) policy is to yank the defective release, replace it with a working release with the same version (but different checksum), and hope that any downstream consumers haven't already downloaded the defective release.
Possible solutions:

Introduce a new (semantic) versioning scheme.

We tie the versions of our compiled dependencies to the versions of the upstream dependencies. This is intuitive and clear, but it also prevents us from releasing multiple versions of the same upstream dependencies.
If we had our own versioning scheme we could yank one complied release and release another with a different semantic version.
The main downside of this is it potentially breaks the intuitive mapping of upstream->compiled release; they are no longer guaranteed to have the same version.
It is the most friendly to automation - consumers can rely on semantic versioning to ensure they have the latest version without manual intervention.

Introduce a 'yanked' field and overwrite the existing complied release.

This allows us to signal that a compiled dependency release was, at some point in time, removed and replaced.
It preserves the 1:1 mapping of upstream->compiled dependency version.
It does not signal when the release was yanked, or how many versions have been yanked. This makes it harder for consumers to automate when compared with a true semantic version.

The logic of this issue is still relevant but the implementation is not, as we are moving away from dep-server.


Add type back to attrs.field() for use in attrs.make_class()

I'm using attrs.make_class() to dynamically construct a class based on other attrs classes, and it would be nice to be able to specify the type of the fields on the generated class using attrs.field() instead of attr.ib(). In other words, this works:
fields = {
    field.name: attr.ib(type=field.type)
    for field in itertools.chain.from_iterable(
        attrs.fields(t) for t in SOME_ATTRS_CLASSES
    )
    if not field.name.startswith("_")
}

MyClass = attrs.make_class("MyClass", fields)

but this does not:
fields = {
    field.name: attrs.field(type=field.type)
    for field in itertools.chain.from_iterable(
        attrs.fields(t) for t in SOME_ATTRS_CLASSES
    )
    if not field.name.startswith("_")
}

MyClass = attrs.make_class("MyClass", fields)

Aw man yeah when I celebrated to get rid of that, I forgot about make_class. 🙈

I'm working on the implementation.

Given that no type checker cares about make_class() as far as I can tell (I tried to get it to fail by passing wrong arguments to a make_class-borne class), would you mind sharing the utility you're getting out of this?

So metadata, gotcha!
I'm asking because I want to put a fat warning next to the argument.

This would also be nice for Typed Settings :-)

@sscherfke well good news in #1107 ;)

woop woop \o/


Let contributors know it's okay to delete optional template sections

Objective
We are currently asking contributors to "skip" optional sections, which is a bit confusing. "Skip" can be taken to mean that you should "leave that section alone" and result in these bits of template being left in the PR description.
Solution
Let contributors know that it's okay to delete the section if it's not needed.

bors r+


Add jupyter-collaboration to micromamba deps

Summary
Add the jupyter-collaboration package for RTC.

Related issue :

Done. Please check.


[New Feature]: Force small letters and - between spaces

Description of the new feature/enhancement
The available fields are Commands, Protocols, FileExtensions, Moniker and Tags
I'm a bit unsure about this, so i'd like a little feedback from @jedieaston, @ItzLevvie and maybe @denelon?

Commands, these do most likely never contain spaces, does it need small letters?
Protocols, same as Commands
FileExtensions we could force small letters for consistent sake
Moniker should force both small letters and - between spaces
Tags, we should probably force small letters and - between spaces, but what if the tag is a alternative name?

Proposed technical implementation details (optional)
No response

I think I would agree with all of these. It certainly helps with readability, and hopefully would reduce other simple mistakes.

I also agree with all of these.


[WIP] Add graph greedy color function

This commit adds a new function for getting the greedy coloring using a
largest first strategy.
This PR is based on top of #75 and will have to be manually rebased after #75 merges (this was needed to get the changes to enable using PyGraph in a function outside of the graph module didn't want to duplicate them here).

[ ] Add tests (and verify it works)
[ ]  Add docs

Coverage decreased (-1.2%) to 79.913% when pulling 4f9ac5326410a98d25ab4566a3cb8a37d7eb2f40 on mtreinish:add-graph-greed-color into 6f972d6ee24e6c353f71a01d7a6d1911a81ce0ac on Qiskit:master.

Thank you for your invitation of review. I'll check it on the weekend.

I tried to modify aqua to use retworkx for coloring with this dataset. By adding a workaround the outputs get identical. But retworkx is still slower than numby-based coloring impl. Do you have any idea?
(Comparison of BeH2JW.txt)
-Elasped time: 4.844101860999672 (<- retworkx)
+Elasped time: 0.45734181499983606 (<- numpy)
@@ -1,4 +1,4 @@
-Elasped time: 4.844101860999672
+Elasped time: 0.45734181499983606
 ListOp(
 [AbelianListOp(
 [-12.279604476184712 * IIIIIIIIIIIIII,

https://github.com/Qiskit/qiskit-aqua/pull/923
my branch: https://github.com/t-imamichi/qiskit-aqua/tree/rx-color

Hmm yeah, adding add_edges_from is probably a good idea. Individually the add_edge calls are fast, but when it's called 477k times it does add up, so iterating in rust instead of python is a good idea.

I'll have to do some profiling of the rust code to figure out why it's taking 2.8 seconds to run the function. That does seem quite slow for what it's doing, I think your suggestion of changing the initial sorting is a good first step, that will eliminate the need for the reverse() call which eliminates a second traversal. From there I'll have to see where it's spending it's time and go from there.

I found that your original implementation without my workaround runs very fast. I used rx.add_edges_from in the following result.
options: Namespace(input='TaperingPaperHamiltonians/BeH2/BeH2JW.txt')
         3579710 function calls (3528368 primitive calls) in 2.845 seconds

   Ordered by: internal time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.281    0.281    0.338    0.338 abelian_grouper.py:177(_largest_degree_first_coloring)
     2831    0.280    0.000    0.280    0.000 {built-in method marshal.loads}
        1    0.150    0.150    0.150    0.150 {graph_greedy_color}
        1    0.084    0.084    0.084    0.084 abelian_grouper.py:168(<listcomp>)
        2    0.077    0.039    0.143    0.072 abelian_grouper.py:141(_commutation_graph_fast)
        2    0.075    0.037    0.916    0.458 abelian_grouper.py:86(group_subops)
        1    0.068    0.068    0.358    0.358 abelian_grouper.py:162(_networkx_coloring)

I tried with a large instance.
options: Namespace(input='TaperingPaperHamiltonians/NH3/NH3JW.txt')
         22511348 function calls (22456658 primitive calls) in 25.430 seconds

   Ordered by: internal time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    8.037    8.037    8.037    8.037 {graph_greedy_color}
        1    5.598    5.598    6.671    6.671 abelian_grouper.py:177(_largest_degree_first_coloring)
        2    1.844    0.922   23.326   11.663 abelian_grouper.py:86(group_subops)
        1    1.690    1.690    1.690    1.690 abelian_grouper.py:168(<listcomp>)
        2    1.622    0.811    2.726    1.363 abelian_grouper.py:141(_commutation_graph_fast)
        1    1.178    1.178   12.073   12.073 abelian_grouper.py:162(_networkx_coloring)
        1    1.168    1.168    1.168    1.168 {method 'add_edges_from' of 'retworkx.PyGraph' objects}

What was the workaround you did? I just ran the script from https://github.com/Qiskit/qiskit-aqua/pull/923 with:
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -920,8 +920,9 @@ fn graph_greedy_color(
 ) -> PyResult<PyObject> {
     let mut colors: HashMap<usize, usize> = HashMap::new();
     let mut node_vec: Vec<NodeIndex> = graph.graph.node_indices().collect();
-    node_vec.sort_by_key(|k| graph.graph.edges(*k).count());
-    node_vec.reverse();
+    node_vec.sort_by_key(|k| {
+        graph.graph.node_count() - graph.graph.edges(*k).count()
+    });
     for u_index in node_vec.iter() {
         let mut neighbor_colors: HashSet<usize> = HashSet::new();
         let u = u_index.index();

applied locally and when I ran diff  fast-nx.txt fast-numpy.txt (with #82 and your current branch) and it returned:
< Elasped time: 0.3222836180066224
---
> Elasped time: 0.2867906879982911

so the numpy implementation is still a bit faster. I can probably speed up this function marginally more by calling node_count() only once instead of for every entry. Other than that I'll have to do some more profiling to see where it's spending most of the time.
The one thing I've been meaning to investigate is using rayon to do parallel iteration, which might let us speed things up even further (it was part of the motivation for  #78). But I'll save that for a follow-on PR because that is really outside the scope of this pr.

I ran a profile on the script with BeH2JW.txt as the input and it seems to be spending most of the time in the merge sort. Here is the relevant section from the flame graph:

There are 2 ways I can think to speed this up, either switch to an unstable sort https://doc.rust-lang.org/std/vec/struct.Vec.html#method.sort_unstable_by_key  which we probably don't want to do to be consistent with networkx. Or add rayon usage and leverage par_sort_by_key: https://docs.rs/rayon/1.3.0/rayon/slice/trait.ParallelSliceMut.html#method.par_sort_by_key to do sorting in parallel.

Perhaps the sort is slow due to graph.graph.edges(*k).count() in sort_by_key.
I tried to make a vector to compute graph.graph.node_count() - graph.graph.edges(*k).count() beforehand, then it gets faster than python impl.
@@ -950,8 +950,12 @@ fn graph_greedy_color(
 ) -> PyResult<PyObject> {
     let mut colors: HashMap<usize, usize> = HashMap::new();
     let mut node_vec: Vec<NodeIndex> = graph.graph.node_indices().collect();
-    let node_count = graph.graph.node_count();
-    node_vec.sort_by_key(|k| node_count - graph.graph.edges(*k).count());
+    let mut node_count: HashMap<usize, usize> = HashMap::new();
+    for k in node_vec.iter() {
+        let u = k.index();
+        node_count.insert(u, graph.graph.node_count() - graph.graph.edges(*k).count());
+    }
+    node_vec.sort_by_key(|k| node_count.get(&k.index()));
     for u_index in node_vec.iter() {
         let mut neighbor_colors: HashSet<usize> = HashSet::new();
         let u = u_index.index();

--- fast-nx.txt	2020-06-09 11:35:26.093397126 +0900
+++ fast-numpy.txt	2020-06-09 11:35:36.001772804 +0900
@@ -1,4 +1,4 @@
-Elasped time: 6.927748423000139 <- rust
+Elasped time: 9.86378538300005 <- python
 ListOp(
 [AbelianListOp(
 [-45.66713521736221 * IIIIIIIIIIIIIIII,
(no output diff)

options: Namespace(input='TaperingPaperHamiltonians/NH3/NH3JW.txt')
         22521014 function calls (22466324 primitive calls) in 18.880 seconds

   Ordered by: internal time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    5.403    5.403    6.480    6.480 abelian_grouper.py:177(_largest_degree_first_coloring)
        2    2.054    1.027   16.783    8.391 abelian_grouper.py:86(group_subops)
        1    1.712    1.712    1.712    1.712 abelian_grouper.py:168(<listcomp>)
        2    1.624    0.812    2.728    1.364 abelian_grouper.py:141(_commutation_graph_fast)
        1    1.453    1.453    5.509    5.509 abelian_grouper.py:162(_networkx_coloring)
        1    1.188    1.188    1.188    1.188 {graph_greedy_color}
        1    1.156    1.156    1.156    1.156 {method 'add_edges_from' of 'retworkx.PyGraph' objects}

Perhaps the sort is slow due to graph.graph.edges(*k).count() in sort_by_key.
I tried to make a vector to compute graph.graph.node_count() - graph.graph.edges(*k).count() beforehand, then it gets faster than python impl.
Because I'm new to rust, I think there might be a better rust impl than mine.

It's hard to argue with what works. :) This looks fine to me (although we trade a bit of memory for run time speed) there might be a more idiomatic rust way to write it, but I'm still not as experienced with rust as I am with other languages either. If it makes that much of a speed difference we can go with it and clean things up later if needed. I'd rather have a good starting point for performance that we can refactor later if needed.

@@ -950,8 +950,12 @@ fn graph_greedy_color(
 ) -> PyResult<PyObject> {
     let mut colors: HashMap<usize, usize> = HashMap::new();
     let mut node_vec: Vec<NodeIndex> = graph.graph.node_indices().collect();
-    let node_count = graph.graph.node_count();
-    node_vec.sort_by_key(|k| node_count - graph.graph.edges(*k).count());
+    let mut node_count: HashMap<usize, usize> = HashMap::new();
+    for k in node_vec.iter() {
+        let u = k.index();
+        node_count.insert(u, graph.graph.node_count() - graph.graph.edges(*k).count());
+    }
+    node_vec.sort_by_key(|k| node_count.get(&k.index()));
     for u_index in node_vec.iter() {
         let mut neighbor_colors: HashSet<usize> = HashSet::new();
         let u = u_index.index();

The only little thing I would change in this is probably change the HashMap key to be a NodeIndex instead of a usize, that way we don't need to run .index() on everything all the time. It's not a lot of overhead and the compiler probably just optimizes it away anyway, but we really only need to use .index() when passing to or from python because usize gets converted to a python int automatically but NodeIndex doesn't.

--- fast-nx.txt	2020-06-09 11:35:26.093397126 +0900
+++ fast-numpy.txt	2020-06-09 11:35:36.001772804 +0900
@@ -1,4 +1,4 @@
-Elasped time: 6.927748423000139 <- rust
+Elasped time: 9.86378538300005 <- python
 ListOp(
 [AbelianListOp(
 [-45.66713521736221 * IIIIIIIIIIIIIIII,
(no output diff)

options: Namespace(input='TaperingPaperHamiltonians/NH3/NH3JW.txt')
         22521014 function calls (22466324 primitive calls) in 18.880 seconds

   Ordered by: internal time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    5.403    5.403    6.480    6.480 abelian_grouper.py:177(_largest_degree_first_coloring)
        2    2.054    1.027   16.783    8.391 abelian_grouper.py:86(group_subops)
        1    1.712    1.712    1.712    1.712 abelian_grouper.py:168(<listcomp>)
        2    1.624    0.812    2.728    1.364 abelian_grouper.py:141(_commutation_graph_fast)
        1    1.453    1.453    5.509    5.509 abelian_grouper.py:162(_networkx_coloring)
        1    1.188    1.188    1.188    1.188 {graph_greedy_color}
        1    1.156    1.156    1.156    1.156 {method 'add_edges_from' of 'retworkx.PyGraph' objects}

By the way, I proposed to include graph.graph.node_count() in sort because graph.graph.edges(*k).count() is usize and it does not allow -graph.graph.edges(*k).count(). If there is any good way to get a minus of usize value (or convert it to a signed value), could you use it instead of graph.graph.node_count() - graph.graph.edges(*k).count()? The idea is that just taking a minus of value to sort the list in the reversed order.

Well you could probably do something like -(graph.graph.edges(*k).count() as isize) (or i64). I just worry about the overflow case for things like that (not that it's a likely failure for this). I also still think we should be able to leverage https://doc.rust-lang.org/std/cmp/struct.Reverse.html to do the reversed order. I probably was just using it wrong earlier.

Thank you for your information.
I tried your recommendation to use NodeIndex and add_edges_from_no_data.
https://github.com/t-imamichi/retworkx/commit/279c2cc1c464c1443af2f4b3b05292656865b9b4
https://github.com/t-imamichi/qiskit-aqua/commit/371e4da8b22993bf98efd3217c6486002056fd04
The result gets a little faster than before. I think it looks good as the first version.
--- fast-nx.txt	2020-06-09 22:36:05.638027225 +0900
+++ fast-numpy.txt	2020-06-09 22:36:15.662389597 +0900
@@ -1,4 +1,4 @@
-Elasped time: 6.3002666709999176 <- rust
+Elasped time: 9.983879566000041 <- python
 ListOp(
 [AbelianListOp(
 [-45.66713521736221 * IIIIIIIIIIIIIIII,

options: Namespace(input='TaperingPaperHamiltonians/NH3/NH3JW.txt')
         22521753 function calls (22467062 primitive calls) in 18.410 seconds

   Ordered by: internal time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    4.859    4.859    5.995    5.995 abelian_grouper.py:177(_largest_degree_first_coloring)
        2    3.894    1.947    5.007    2.504 abelian_grouper.py:141(_commutation_graph_fast)
        1    1.327    1.327    6.300    6.300 pauli_grouping.py:40(<lambda>)
        1    1.290    1.290    9.984    9.984 pauli_grouping.py:41(<lambda>)
        1    1.206    1.206    1.206    1.206 {graph_greedy_color}
        1    1.132    1.132    1.132    1.132 {method 'add_edges_from_no_data' of 'retworkx.PyGraph' objects}

I'm happy to hear that retworkx coloring gets faster in your environment as well. It looks good to me.

Thank you. It looks good!

Thanks. Reverse looks more intuitive.

It looks good!


Whip dwca-meetnetten-vaatplanten-oppervlakte-occurrences-v1.5

[ ] event.coordinateUncertaintyInMeters is correctly 707 for "coordinates are generalized from a POLYGON to a UTM 1km grid", but 68 records have 3536. To be corrected
[ ] Some occurrence have an eventID that cannot be found in events

INBO:MEETNET:EVENT:193850
INBO:MEETNET:EVENT:193847
INBO:MEETNET:EVENT:193848
INBO:MEETNET:EVENT:000973

Looks good overall, only 2 issues (updated above).


Update packages

Revised version of #38

All packages updated to the latest
All tests still pass
All linting still passes with no violations

The lint auto-fixer did remove some rule disabling comments that were not necessary when I ran npm run lint. It only removed code comments, no actual code changes made other than adding some trailing commas per the Prettier rules

It appears that ESLint does not support Node 14 any longer.  In fact Node 14 was released in 2020 and it reached "end of life" status in April of this year:  See this site for a full support table, it lists anything older than v18 as no longer receiving security updates. I think it's safe to drop support for Node version 14-17 it and remove them from the PR check.
There's nothing I can do about this from my PR's point of view other than not update packages.  So I'll just leave this PR here to be merged in some day in the future when the CI/CD stuff is dealt with.

@FiniteLooper I just dropped 14, so if you rebase I think you should be good.
I figure we'll stick with the versions that work until the don't? 🤷🏻

I also added the ability to rebase PRs against main. Not sure why this was off.

Sounds like a play.  v15 isn't officially supported, but might as well test against it if it all works. I mean, why not. Someone out there is probably stuff using it for something.


Empty/Null value

hi,
Im using Twilio and i cant seem to read the incoming message because there is no END_MESSAGE tag... its simple "your code is:" <BEGIN ... and the code...
Please help

Please specify the problem a bit more. Are you using this library?

@ikymasie Without any more details this ticket will be closed soon.


New PR to test SignCLA at 2020-01-09 17:23:07.591442417 -0800 PST m=+3.858428728

Body of PR

corp-pass-staging: test succeeded


On Homepage search bar is not working

Here on putting any value no search result is displaying

@Simon786420 Can you please assign this issue to me. 😊