Persitant planners are not giving path with latest moveit2. Error: Exception caught executing adapter ' ': bad lexical cast: source type value could not be interpreted as target

Description
I am trying to use Persistent plannner. When I launch any persitant planners, I get error.
'Exception caught executing adapter 'Stomp Smoothing Adapter': bad lexical cast: source type value could not be interpreted as target'. I get this error for all the mentioned adapters.
I am using

ROS Distro: Humble
OS Version: Ubuntu 22.04.2
moveit2 main branch

Error:
[task_manager_test-1] [DEBUG] [1693212855.987867773] [moveit_kinematics_base.kinematics_base]: getPositionIK
[task_manager_test-1] [DEBUG] [1693212856.002503875] [moveit_ros.resolve_constraint_frames]: Running 'Resolve constraint frames to robot links'
[task_manager_test-1] [DEBUG] [1693212856.002817947] [moveit_ros.fix_workspace_bounds]: Running 'Fix Workspace Bounds'
[task_manager_test-1] [DEBUG] [1693212856.002859921] [moveit_ros.fix_start_state_bounds]: Running 'Fix Start State Bounds'
[task_manager_test-1] [DEBUG] [1693212856.002937165] [moveit_ros.fix_start_state_collision]: Running 'Fix Start State In Collision'
[task_manager_test-1] [DEBUG] [1693212856.003234964] [moveit_ros.fix_start_state_collision]: Start state is valid with respect to group arm
[task_manager_test-1] [DEBUG] [1693212856.003258570] [moveit_ros.fix_start_state_path_constraints]: Running 'Fix Start State Path Constraints'
[task_manager_test-1] [DEBUG] [1693212856.003496866] [moveit_ros.fix_start_state_path_constraints]: Path constraints are OK. Running usual motion plan.
[task_manager_test-1] [DEBUG] [1693212856.003591849] [moveit.ompl_planning.planning_context_manager]: Using 'JointModel' parameterization for solving problem
[task_manager_test-1] [DEBUG] [1693212856.003865763] [moveit.ompl_planning.planning_context_manager]: Creating new planning context
[task_manager_test-1] [DEBUG] [1693212856.004089531] [moveit.ompl_planning.model_based_planning_context]: arm[SemiPersistentLazyPRMstar]: Setting planning volume (affects SE2 & SE3 joints only) to x = [0.000000, 2.500000], y = [-1.200000, 1.200000], z = [0.020000
, 2.200000]
[task_manager_test-1] [DEBUG] [1693212856.004442993] [moveit_kinematic_constraints.kinematic_constraints]: The desired rotation matrix for link 'gripper_camera' in frame base_link is:
[task_manager_test-1]  1  0  0
[task_manager_test-1]  0 -1  0
[task_manager_test-1]  0  0 -1
[task_manager_test-1] [DEBUG] [1693212856.004530713] [moveit_constraint_samplers.constraint_sampler_manager]: Attempting to construct constrained state sampler for group 'arm', using constraints:
[task_manager_test-1] .
[task_manager_test-1]
[task_manager_test-1] [DEBUG] [1693212856.004552852] [moveit_constraint_samplers.constraint_sampler_manager]: There is an IK allocator for 'arm'. Checking for corresponding position and/or orientation constraints
[task_manager_test-1] [DEBUG] [1693212856.004597201] [moveit_kinematic_constraints.kinematic_constraints]: The desired rotation matrix for link 'gripper_camera' in frame base_link is:
[task_manager_test-1]  1  0  0
[task_manager_test-1]  0 -1  0
[task_manager_test-1]  0  0 -1
[task_manager_test-1] [DEBUG] [1693212856.004765516] [moveit_constraint_samplers.constraint_sampler_manager]: Allocated an IK-based sampler for group 'arm' satisfying position and orientation constraints on link 'gripper_camera'
[task_manager_test-1] [DEBUG] [1693212856.004822227] [moveit.ompl_planning.constrained_goal_sampler]: Constructed a ConstrainedGoalSampler instance at address 0x7fba00014e60
[task_manager_test-1] [DEBUG] [1693212856.004856937] [ompl]: ./src/ompl/base/goals/src/GoalLazySamples.cpp:67 - Starting goal sampling thread
[task_manager_test-1] [DEBUG] [1693212856.004997247] [ompl]: ./src/ompl/base/goals/src/GoalLazySamples.cpp:104 - Waiting for space information to be set up before the sampling thread can begin computation...
[task_manager_test-1] [ERROR] [1693212856.005300983] [moveit.planning_request_adapter]: Exception caught executing adapter 'Stomp Smoothing Adapter': bad lexical cast: source type valu
e could not be interpreted as target
[task_manager_test-1] Skipping adapter instead.
[task_manager_test-1] [DEBUG] [1693212856.005334366] [moveit.ompl_planning.planning_context_manager]: Using 'JointModel' parameterization for solving problem
[task_manager_test-1] [DEBUG] [1693212856.005355947] [moveit.ompl_planning.planning_context_manager]: Reusing cached planning context
[task_manager_test-1] [DEBUG] [1693212856.005416080] [ompl]: ./src/ompl/base/goals/src/GoalLazySamples.cpp:80 - Attempting to stop goal sampling thread...
[task_manager_test-1] [WARN] [1693212856.015151970] [ompl]: ./src/ompl/base/goals/src/GoalLazySamples.cpp:129 - Goal sampling thread never did any work. Space information not set up.
[task_manager_test-1] [DEBUG] [1693212856.015195201] [ompl]: ./src/ompl/base/goals/src/GoalLazySamples.cpp:137 - Stopped goal sampling thread after 0 sampling attempts
[task_manager_test-1] [DEBUG] [1693212856.015426862] [moveit.ompl_planning.model_based_planning_context]: arm[SemiPersistentLazyPRMstar]: Setting planning volume (affects SE2 & SE3 joi
nts only) to x = [0.000000, 2.500000], y = [-1.200000, 1.200000], z = [0.020000, 2.200000]
[task_manager_test-1] [DEBUG] [1693212856.015596155] [moveit_kinematic_constraints.kinematic_constraints]: The desired rotation matrix for link 'gripper_camera' in frame base_link is:
[task_manager_test-1]  1  0  0
[task_manager_test-1]  0 -1  0
[task_manager_test-1]  0  0 -1
[task_manager_test-1] [DEBUG] [1693212856.015636593] [moveit_constraint_samplers.constraint_sampler_manager]: Attempting to construct constrained state sampler for group 'arm', using c
onstraints:
[task_manager_test-1] .
[task_manager_test-1]
[task_manager_test-1] [DEBUG] [1693212856.015652516] [moveit_constraint_samplers.constraint_sampler_manager]: There is an IK allocator for 'arm'. Checking for corresponding position an
d/or orientation constraints
[task_manager_test-1] [DEBUG] [1693212856.015693722] [moveit_kinematic_constraints.kinematic_constraints]: The desired rotation matrix for link 'gripper_camera' in frame base_link is:
[task_manager_test-1]  1  0  0
[task_manager_test-1]  0 -1  0
[task_manager_test-1]  0  0 -1
[task_manager_test-1] [DEBUG] [1693212856.015714535] [moveit_constraint_samplers.constraint_sampler_manager]: Allocated an IK-based sampler for group 'arm' satisfying position and orie
ntation constraints on link 'gripper_camera'
[task_manager_test-1] [DEBUG] [1693212856.015732134] [moveit.ompl_planning.constrained_goal_sampler]: Constructed a ConstrainedGoalSampler instance at address 0x7fba00014e60
[task_manager_test-1] [DEBUG] [1693212856.015745055] [ompl]: ./src/ompl/base/goals/src/GoalLazySamples.cpp:67 - Starting goal sampling thread
[task_manager_test-1] [DEBUG] [1693212856.015813359] [ompl]: ./src/ompl/base/goals/src/GoalLazySamples.cpp:104 - Waiting for space information to be set up before the sampling thread c
an begin computation...
[task_manager_test-1] [ERROR] [1693212856.015944729] [moveit.planning_request_adapter]: Exception caught executing adapter 'Fix Start State Path Constraints': bad lexical cast: source
type value could not be interpreted as target
[task_manager_test-1] Skipping adapter instead.
[task_manager_test-1] [DEBUG] [1693212856.015971687] [moveit.ompl_planning.planning_context_manager]: Using 'JointModel' parameterization for solving problem
[task_manager_test-1] [DEBUG] [1693212856.015984607] [moveit.ompl_planning.planning_context_manager]: Reusing cached planning context
[task_manager_test-1] [DEBUG] [1693212856.016006048] [ompl]: ./src/ompl/base/goals/src/GoalLazySamples.cpp:80 - Attempting to stop goal sampling thread...
[task_manager_test-1] [WARN] [1693212856.025936235] [ompl]: ./src/ompl/base/goals/src/GoalLazySamples.cpp:129 - Goal sampling thread never did any work. Space information not set up.
[task_manager_test-1] [DEBUG] [1693212856.025991968] [ompl]: ./src/ompl/base/goals/src/GoalLazySamples.cpp:137 - Stopped goal sampling thread after 0 sampling attempts
[task_manager_test-1] [DEBUG] [1693212856.026128296] [moveit.ompl_planning.model_based_planning_context]: arm[SemiPersistentLazyPRMstar]: Setting planning volume (affects SE2 & SE3 joi
nts only) to x = [0.000000, 2.500000], y = [-1.200000, 1.200000], z = [0.020000, 2.200000]
[task_manager_test-1] [DEBUG] [1693212856.026274891] [moveit_kinematic_constraints.kinematic_constraints]: The desired rotation matrix for link 'gripper_camera' in frame base_link is:
[task_manager_test-1]  1  0  0
[task_manager_test-1]  0 -1  0
[task_manager_test-1]  0  0 -1
[task_manager_test-1] [DEBUG] [1693212856.026297240] [moveit_constraint_samplers.constraint_sampler_manager]: Attempting to construct constrained state sampler for group 'arm', using c
onstraints:
[task_manager_test-1] .
[task_manager_test-1]
[task_manager_test-1] [DEBUG] [1693212856.026309741] [moveit_constraint_samplers.constraint_sampler_manager]: There is an IK allocator for 'arm'. Checking for corresponding position an
d/or orientation constraints
[task_manager_test-1] [DEBUG] [1693212856.026337817] [moveit_kinematic_constraints.kinematic_constraints]: The desired rotation matrix for link 'gripper_camera' in frame base_link is:
[task_manager_test-1]  1  0  0
[task_manager_test-1]  0 -1  0
[task_manager_test-1]  0  0 -1
[task_manager_test-1] [DEBUG] [1693212856.026358769] [moveit_constraint_samplers.constraint_sampler_manager]: Allocated an IK-based sampler for group 'arm' satisfying position and orie
ntation constraints on link 'gripper_camera'
[task_manager_test-1] [DEBUG] [1693212856.026375112] [moveit.ompl_planning.constrained_goal_sampler]: Constructed a ConstrainedGoalSampler instance at address 0x7fba00014e60
[task_manager_test-1] [DEBUG] [1693212856.026387893] [ompl]: ./src/ompl/base/goals/src/GoalLazySamples.cpp:67 - Starting goal sampling thread
[task_manager_test-1] [DEBUG] [1693212856.026470933] [ompl]: ./src/ompl/base/goals/src/GoalLazySamples.cpp:104 - Waiting for space information to be set up before the sampling thread c
an begin computation...
[task_manager_test-1] [ERROR] [1693212856.026552437] [moveit.planning_request_adapter]: Exception caught executing adapter 'Stomp Smoothing Adapter': bad lexical cast: source type valu
e could not be interpreted as target
[task_manager_test-1] Skipping adapter instead.
[task_manager_test-1] [DEBUG] [1693212856.026617319] [moveit.ompl_planning.planning_context_manager]: Using 'JointModel' parameterization for solving problem
[task_manager_test-1] [DEBUG] [1693212856.026633661] [moveit.ompl_planning.planning_context_manager]: Reusing cached planning context
[task_manager_test-1] [DEBUG] [1693212856.026662296] [ompl]: ./src/ompl/base/goals/src/GoalLazySamples.cpp:80 - Attempting to stop goal sampling thread...
[task_manager_test-1] [WARN] [1693212856.036652475] [ompl]: ./src/ompl/base/goals/src/GoalLazySamples.cpp:129 - Goal sampling thread never did any work. Space information not set up.

What do you mean by a Persistent planner? And why is STOMP involved? I think something is wrong with your planning pipeline config. Do you mind sharing it?

Tw

I don't know if this is needed but since I had the same issue and solved let met share my experience. First I didn't have the STOMP part I was only working with OMPL and mainly the persistent ROADMAP planners.
For me the ompl_planner.yaml was configured as follows (for relevant part):
PersistentLazyPRMstar: # use this with a representative environment to create a roadmap
    type: geometric::LazyPRMstar
    multi_query_planning_enabled: true
    store_planner_data: true
    load_planner_data: true
    planner_data_path: /tmp/roadmap.graph

And I had the ERROR related to bad lexical cast: ... So after seeing the merge of how to set boolean I changed it to:
PersistentLazyPRMstar: # use this with a representative environment to create a roadmap
    type: geometric::LazyPRMstar
    multi_query_planning_enabled: 1
    store_planner_data: 1
    load_planner_data: 1
    planner_data_path: /tmp/roadmap.graph

And it worked nicely


Integrate subjects in awards datastream

Add subjects info in awards.
Associated Issue: https://github.com/inveniosoftware/invenio-vocabularies/issues/382

can we close https://github.com/inveniosoftware/invenio-vocabularies/issues/382 if it's merged in this issue?


Can this audio encoder handle 3 to 4 minutes of audio?thank you

Can this encoder directly process 3 to 4 minutes of audio tensor and get global features? thank you

Unfortunately, processing long audio clips all at once is challenging. Due to potential GPU memory issues, I recommend chunking the audio into 10-20 seconds segments.


Support clear all input?

Do we have the ability to clear all inputs?
I want to clear all inputs when user enter wrong OTP.
Thanks

setting the value to string filled with space characters solved this for me

Hi, I also need to clear all inputs at once,
Please add this feature.
Thanks!

Same

As for now, i use this method, which works fine for me 😊.
const codeRef = useRef(undefined)

...

function clear() {
    if(codeRef.current.textInput[0]) codeRef.current.textInput[0].focus()
    codeRef.current.state.input[0] = ""
    codeRef.current.state.input[1] = ""
    codeRef.current.state.input[2] = ""
    codeRef.current.state.input[3] = ""
    codeRef.current.state.input[4] = ""
    codeRef.current.state.input[5] = ""
}

...

<ReactCodeInput ref={codeRef} ... />

@caritasverein
CreateUser.js:76 Uncaught ReferenceError: useRef is not defined.
How did you do that ?

import React, {useRef} from 'react'

I've tried @caritasverein 's method with the useRef hook but adapting to simple react refs, and it didn't help me. Instead, I've performed the same procedure of clearing the input in another way, here it is
setRef = ref => this.pin = ref;

clear = () =>
{
    this.pin.textInput[0].value="";
    this.pin.textInput[1].value="";
    this.pin.textInput[2].value="";
    this.pin.textInput[3].value="";
}

...

<ReactCodeInput ref={this.setRef} ... />

@20SangHun00 and @caritasverein solution works for now, but this is really dirty.
Should be implemented in the lib itself.

is there other options how to clear all value ?

You can use key to re-render the component..
Something like:
const  [pin, setPin] = useState('');
const [key, setKey] = useState(1);

  useEffect(() => {
      // if value was cleared, set key to re-render the element
      if (pin.length === 0) {
        setKey(key + 1);
        return;
      }

      // do something with the pin
  }, [pin]);

        <ReactCodeInput
          onChange={(value) => setPin(value)}
          isValid={isValid}
          value={pin}
          key={key}
          // more props if you need'em
        ></ReactCodeInput>

codeRef.current.clearvalues();

@slinker-hiwa not too sure if that works – when console logging codeRef.current, the function appears to be: clearvalues();
I think this will do the trick: codeRef.current.clearvalues();

As a workaround in case you're rendering multiple inputs in a map(), you can clean up the inputs by doing this:
import {useRef, useState} from 'react'
const itemsRef = useRef([]);
const [inputsValueState, setInputsValueState] = useState([])

function resetInputs(){
    setInputsValueState([])

    itemsRef.current.forEach(function(item) {
      for (let i = 0; i < item.state.input.length; i++) {
        item.state.input[i] = ''
      }
    })

    itemsRef.current[0].textInput[0].focus()
  }

<ReactCodeInput
    onChange={(e) => handleChange(e, index)}
    value={inputsValueState[index]}
    ref={el => itemsRef.current[index] = el}
    {...props}
/>

As a workaround, used key prop to rerender the component with an empty string
`
const [value, setValue] = React.useState();
const [key, setKey] = React.useState();
const onChange = (val) => {
setValue(val);
};
const handleReset = () => {
setValue("");
setKey((prev) => !prev);
};
return (

Clear value example
  <ReactCodeInput key={key} fields={6} value={value} onChange={onChange} />
  <button onClick={handleReset}>Clear</button>
</div>

);
`


automate sync tests from clean state

https://github.com/input-output-hk/cardano-node-tests/tree/master/sync_tests


Add Intellisense in proxy.config

Add Intellisense VS in proxy.config

Thanks @nicogis for helping improve the resource-proxy!

FYI: it looks like after this commit, users of the DotNet proxy, need to update their proxy.config as in the commit https://github.com/Esri/resource-proxy/pull/486/commits/3f000007f69cadd3476238b2894e2714429744f4#diff-619e6e6c6786d5cebe866bfb1ab4492f
If you update your resource-proxy for DotNet, but keep your old proxy.config as is, your proxy will probably break saying [InvalidOperationException: <ProxyConfig xmlns=''> was not expected.]
Basically, the DotNet proxy is now "stricter", and you just have to change from
<ProxyConfig allowedReferers="*" mustMatch="false">
in your proxy.config to
<ProxyConfig allowedReferers="*" mustMatch="false" xmlns="proxy.xsd">


[Improvement] Analytics for an API based on applications.

Description:
Currently, in APIM Publisher Analytics, the api publisher could not view the api consumption by applications. (api invocation by each application)
Suggested Labels:

Suggested Assignees:

Affected Product Version:
2.6
OS, DB, other environment details and versions:
Steps to reproduce:
Related Issues:

Done. Hence closing.


RFC for headers/metadata in Subtext

See https://subconscious.substack.com/p/if-headers-did-not-exist-it-would for background.
Goals:

Should be expressive enough that an app can reify its state as metadata, such that any internal caches, indexes, or databases can be regenerated from files.
Should provide a content-type mechanism
Ideally, plain text body content should be readable as plain text

Some possible approaches (not committing to any of these yet):
HTTP-like
Title: Floop
Date: 2022-01-15
exotic-header: {"msg": "you can put anything in header body"}

Subtext content.

Tradeoffs:

Pro: It's what you would write anyway
Pro: Header keys are case-insensitive, so you can write them nice style
Pro: It works for email and the web
Pro: Header bodies are specified separately from header syntax. This makes headers a completely open-ended extension mechanism.
Pro: different applications can write to the same file without conflicts provided they use their own header fields (e.g. subconscious-meta, obsidian-meta)
Pro: Happens to fit with the way SQL thinks about JSON. Blobs of JSON belong to a specific column.
Con: Trends toward bespoke DSLs for each header.

Pro: Although from the perspective of open-endedness, this is a pro.
Synthesis: we could strongly encourage all headers to be one of a few types: String, Number, Bool, JSON. At the same time, it would be technically possible to do things beyond these types.

Con: Requires at least one header, or a line break at the beginning of the file

Alternatively, we could specify headers separately from Subtext itself, as part of an envelope format. In this case, the one required header could be:
Content-Type: text/subtext

Note: HTTP obsoleted line folding. Why? It's very useful for hand-authored content. We need to find out.

RFC in which it was obsoleted: https://www.rfc-editor.org/rfc/rfc7230#section-3.2.4.
Where to dig: https://www.w3.org/Search/Mail/Public/search?type-index=ietf-http-wg&index-type=t&keywords=line+folding&search=Search.
Thread: https://twitter.com/gordonbrander/status/1503529053009047556

Note that line folding is still allowed in email https://datatracker.ietf.org/doc/html/rfc5322#section-2.2.3
On the practical value of line folding: https://twitter.com/simonw/status/1501762626941947909?s=20&t=p5JtjVQ8M2Kv8GOpc7l-cw
HTTP-like in fences
---
Title: Floop
Date: 2022-01-15
exotic-header: {"msg": "you can put anything in header body"}
---
Subtext content.

Following Jekyll and many other static site generators. The --- fence allows headers to be omitted. If the first line isn't a fence, then there are no headers.
We could use a closing fence --- or an empty line to signify end of headers.
Tradeoffs:

Pro: used in a lot of tools already
Con: mildly annoying to need fences
Con: closing fence is visually pretty, but feels redundant and less elegant than empty line break.

Special sigils
Following the rest of Subtext, keys could be prefixed by a sigil:
@ title: Floop
@ date: 2022-01-15
@ exotic-header: {"msg": "you can put anything in header body"}

Tradeoffs:

Pro: Consistent
Con: Redundant.

Strongly dislike this approach.
JSON
---
{
  "json": true
}
---

Subtext content.

Pro: does exactly what it says on the tin.
Pro: JSON is MAYA
Con: less open-ended than headers. Restricted to JSON semantics and types. (Could be construed as a pro for basic cases).
Con: JSON is a pain to write by hand for simple headers

Note this requires fences to be reasonable to parse. Don't want to embody the complexity of a JSON parser.
Sidecar files
Another option is to make metadata a separate file that references the content file. In this case, the obvious choice for metadata format would be JSON. Like the envelope format approach, no specification would be necessary for Subtext to support this.
Tradeoffs:

Pro: Multiple apps can generate sidecar files without conflicts
Con: they don't travel together with the file (not the biggest deal)

Prior art:

iTunes used to (still?) generates its plist data store by crawling your music library.
You can delete your plist, and the application will regenerate it.

Reference:

https://en.wikipedia.org/wiki/Sidecar_file

@cdata raises the point that there are two key kinds of metadata: machine metadata and user metadata. We don't necessarily want to mix machine metadata with user "content" metadata.
One option could be to have two sets of headers in source files
Content-Type: text/subtext
Title: Discoveries result from an accumulation of errors
Date: 2020-07-10 15:00
Resolved-Name: cdata,<ENCODED_PUBLIC_KEY>
Resolved-Link: cdata,cat-facts,<ENCODED_CID>
Resolved-Name: gordon,<ENCODED_PUBLIC_KEY>
Resolved-Link: gordon,oracular-insight,<ENCODED_CID>
Exotic-Header: {"msg": "you can put anything in header body"}

Author: McLuhan
Year: 1977

> All discoveries in art and science result from an accumulation of errors.

[[Marshall McLuhan]]

I could live with this, I guess.

Had to look up what line-folding in headers meant. From the link you gave,

Historically, HTTP header field values could be extended over multiple lines by preceding each extra line with at least one space or horizontal tab (obs-fold). This specification deprecates such line folding except within the message/http media type (Section 8.3.1). A sender MUST NOT generate a message that includes line folding (i.e., that has any field-value that contains a match to the obs-fold rule) unless the message is intended for packaging within the message/http media type.

But yeah it didn't say why, which would have been useful.
I do like yaml's multiline strings also,
foo: |
bar
baz
Although I didn't realize it had so many ways to specify them!
https://stackoverflow.com/a/21699210

Had to look up what line-folding in headers meant. From the link you gave,

Historically, HTTP header field values could be extended over multiple lines by preceding each extra line with at least one space or horizontal tab (obs-fold). This specification deprecates such line folding except within the message/http media type (Section 8.3.1). A sender MUST NOT generate a message that includes line folding (i.e., that has any field-value that contains a match to the obs-fold rule) unless the message is intended for packaging within the message/http media type.

But yeah it didn't say why, which would have been useful.
I do like yaml's multiline strings also,
foo: |
bar
baz
Although I didn't realize it had so many ways to specify them!
https://stackoverflow.com/a/21699210

Regarding header metadata, I like the idea of separating the machine vs user headers by a blank line - that makes a lot of sense.

Had to look up what line-folding in headers meant.

Some more background on line folding. After looking further into line folding and why it was deprecated in HTTP, we ended up deciding to follow HTTP and not to support line folding. Documenting here  https://github.com/subconsciousnetwork/subtext/issues/40#issuecomment-1221551849

From @bburns in https://github.com/subconsciousnetwork/subtext/issues/38#issue-1345375255

Just adding this as a possible alternative to header keyvalue pairs, as discussed in #19.
That link mentions @ as a possible sigil, ie
@ foo: bar
Some alternatives -
.foo bar
.foo=bar
.foo: bar
I like this syntax as it's like property assignment in oo, and @ seems more appropriate for other uses.
For my project Neomem, I had been planning to just parse out any plain 'key: value' lines and treat them as metadata. Each item has a text representation similar to markdown, corresponding to a record in a database.
There's also 'key:: value' as in obsidian - I don't like that syntax though.

From @cdata in https://github.com/subconsciousnetwork/subtext/issues/38#issuecomment-1221461890

I'm going to throw in some of our chat transcript for additional context:
At this time, there is really only one kind of data in Noosphere: subtext. Adding a new kind of data is technically easy, but it carries the trade-off that your new content type may not be well supported by other clients (much like serving arbitrary content types over the web doesn't guarantee that a web browser can view that content). That said, it is reasonable to assume that Subconscious (our Noosphere client) will support first-class rendering for common structured data formats such as JSON, CSV etc. And, we hope to explore ways to make new data types automatically legible for clients using some WASM magic (but this is a speculative and only partially formed idea, so I don't want to leave you with the impression that we have a great feature ready for you to use).
@gordon has been working on a key-value header syntax that may be suitable for what you are trying to do with Neomem. The idea is to offer a feature similar to markdown's front matter, or HTML's  tag so that an author may configure header metadata from content.
Yet another way to think about it would be as a subtext "block." Block is sadly going to be a very overloaded term in our technical domain, but in the subtext context you can think of a block as being made up of the contents of a line in the subtext file. Now, subtext does not have a block type for key/value data (maybe it should). But, that doesn't necessarily stop you from interpreting any give block type that way. After all, block content is really just text that we are tagging with some inferred semantics as we parse it.

From @bmann in https://github.com/subconsciousnetwork/subtext/issues/38#issuecomment-1221466556

LogSeq also does key:: value
Jekyll front matter is yaml, mostly seen as key: value.
For TiddkyWiki, I can create arbitrary custom fields name -> value on any item.
But I would say there is a lot of complexity down this path that might better be tied to the programmability of geists? EG can we include a Geist (with whatever that syntax is) and the simplest Geist might encapsulate both custom fields AND know what to do with them?
Anti-pattern example: for Jekyll or TiddlyWiki, without extensive template / display layer programming and custom theme, these custom untyped data types don’t survive past a single user.
(I’d love an example where this is not the case — because I’d love more lightly structured entities floating about)
+1 for not using @ — it has become a public good UI element that mostly means social entities (users or organizations).

I just noticed you had a kv.md file with some more notes - https://github.com/subconsciousnetwork/subtext/blob/main/explorations/kv.md. I'll include the contents here in case you'd prefer everything in one place -

Key-value blocks
We could explore expanding Subtext to support markup for key-value pairs.
Q: What is Subtext?
A: Subtext is a markup language for note-taking.

A key-value block is any alphanumeric string followed by a :. The alphanumeric string before the : becomes the sigil type for the block.
Sigil, described as a regular expression:
^[a-zA-Z0-9_]+:\s

Key-value pairs are a fundamental primitive with a wide range of potential use-cases for tooling. Like any other type of block, key-value blocks could be gathered by key into lists, concatenated, or collected using a first- or last-key-wins to get simple key/value data.

You could execute queries such as: “list all questions (Q: blocks) in my notes”.
You could transform a collection of notes into a sparse table by treating each note as a row, and treating keys as columns. Denser tabular data can be had by filtering notes to only include those with a particular set of keys, and then concatenating, JSON-encoding, or dropping duplicate keys. Tada! CSV.
You could include headmatter in the body of a note. This can make it easier to integrate notes with static site generators, or other tools.

Open question: what are the implications for parsing? It would require us to run a search on across a string for an unbounded number of characters, until we encounter a space character, before defining the block as a text block. That means this search must happen to every block before it can be found to be a text block. Is this a problem in practice? Are there ways we could simplify this algorithmically?
Alternatives
@Q What is Subtext
@A Subtext is a markup language for note-taking

or
$Q What is Subtext
$A Subtext is a markup language for note-taking

Pros: can determine block type based on first character.
Cons: less natural to type.

My thoughts -
I like the idea of regexp sigils. One possibility for parsing keys would be to limit the length so the search is bounded - e.g. 255 characters -
^[a-zA-Z0-9_]{1,255}:\s

Regexps would also allow sigils like ^[-]{3,}\s to indicate a horizontal line.

Q: What is Subtext?
A: Subtext is a markup language for note-taking.

One thing I like about the HTTP-header like approach is that it front-loads metadata. Metadata ends at first empty line, so you can stop pulling lines in a streaming parser.
A practical parsing issue with embedding header-like KV—other sigils are static characters, but unprefixed KV sigil would be dynamic. This requires lookahead and backtracking when parsing. So you would have to first begin parsing any line that might be KV, then re-parse if it is not. This wasn't obvious to me when I sketched out the exploration above.
The case with header parsing is similar, but simpler.

Parse first line.

If it is a valid header, parse lines as headers until the first empty line. Discard any malformed header lines.
If it is not a valid header, backtrack and re-parse as body part.

So the backtracking logic is simplified to just sniffing out the first line.


[TypeScript][Virtual Assistant] Fix QnA validation after port #3372

Related to 3372
Purpose
What is the context of this pull request? Why is it being done?
The PR 3372 introduces an issue when a new QnA Dialog is added.
Changes
Are there any changes that need to be called out as significant or particularly difficult to grasp? (Include illustrative screenshots for context if applicable.)

If there is not an specific knowledgeBaseId already created, the knowledgeBase is added in the dialogs.

We took into account the C# implementation
Tests
Is this covered by existing tests or new ones? If no, why not?
-
Feature Plan
Are there any remaining steps or dependencies before this issue can be fully resolved? If so, describe and link to any relevant pull requests or issues.
-
Checklist
General

[ ] I have commented my code, particularly in hard-to-understand areas
[ ] I have added or updated the appropriate tests
[ ] I have updated related documentation

LGTM!

Merged in MS!


Add the "Score" field to NamedOperation in the Python shell

NamedOperation should be updated in the python shell to handle the new, optional field of "Score".
(For more info see gchq/Gaffer#1364)

Will be merged into develop as part of #275


gmic: 2.2.1 -> 2.2.2

Semi-automatic update generated by https://github.com/ryantm/nixpkgs-update tools.
This update was made based on information from https://repology.org/metapackage/gmic/versions.
These checks were done:

built on NixOS
Warning: no binary found that responded to help or version flags. (This warning appears even if the package isn't expected to have binaries.)
found 2.2.2 with grep in /nix/store/qzv9sav3110dnr7njx68l0mw2zs0qnbj-gmic-2.2.2
directory tree listing: https://gist.github.com/14930b0645c14a6b5025919b4983306b

Success on x86_64-linux (full log)
Attempted: gmic
Partial log (click to expand)
'../man/gmic.1.gz' -> '/nix/store/qzv9sav3110dnr7njx68l0mw2zs0qnbj-gmic-2.2.2/share/man/man1/gmic.1.gz'
post-installation fixup
shrinking RPATHs of ELF executables and libraries in /nix/store/qzv9sav3110dnr7njx68l0mw2zs0qnbj-gmic-2.2.2
shrinking /nix/store/qzv9sav3110dnr7njx68l0mw2zs0qnbj-gmic-2.2.2/bin/gmic
gzipping man pages under /nix/store/qzv9sav3110dnr7njx68l0mw2zs0qnbj-gmic-2.2.2/share/man/
strip is /nix/store/j75dgadrff2d1fyc4fczmcgqkid2imdx-binutils-2.30/bin/strip
stripping (with command strip and flags -S) in /nix/store/qzv9sav3110dnr7njx68l0mw2zs0qnbj-gmic-2.2.2/bin
patching script interpreter paths in /nix/store/qzv9sav3110dnr7njx68l0mw2zs0qnbj-gmic-2.2.2
checking for references to /build in /nix/store/qzv9sav3110dnr7njx68l0mw2zs0qnbj-gmic-2.2.2...
/nix/store/qzv9sav3110dnr7njx68l0mw2zs0qnbj-gmic-2.2.2

Success on x86_64-darwin (full log)
Attempted: gmic
Partial log (click to expand)
strip gmic
installing
'gmic' -> '/nix/store/0synnlhyi68n1ljv5shchx8ndywb28d6-gmic-2.2.2/bin/gmic'
'../man/gmic.1.gz' -> '/nix/store/0synnlhyi68n1ljv5shchx8ndywb28d6-gmic-2.2.2/share/man/man1/gmic.1.gz'
post-installation fixup
gzipping man pages under /nix/store/0synnlhyi68n1ljv5shchx8ndywb28d6-gmic-2.2.2/share/man/
strip is /nix/store/kdff2gim6417493yha769kh00n63lnrw-cctools-binutils-darwin/bin/strip
stripping (with command strip and flags -S) in /nix/store/0synnlhyi68n1ljv5shchx8ndywb28d6-gmic-2.2.2/bin
patching script interpreter paths in /nix/store/0synnlhyi68n1ljv5shchx8ndywb28d6-gmic-2.2.2
/nix/store/0synnlhyi68n1ljv5shchx8ndywb28d6-gmic-2.2.2

Success on aarch64-linux (full log)
Attempted: gmic
Partial log (click to expand)
'../man/gmic.1.gz' -> '/nix/store/jphp3qadrbccaqz8j07hj7dijiyrp4zs-gmic-2.2.2/share/man/man1/gmic.1.gz'
post-installation fixup
shrinking RPATHs of ELF executables and libraries in /nix/store/jphp3qadrbccaqz8j07hj7dijiyrp4zs-gmic-2.2.2
shrinking /nix/store/jphp3qadrbccaqz8j07hj7dijiyrp4zs-gmic-2.2.2/bin/gmic
gzipping man pages under /nix/store/jphp3qadrbccaqz8j07hj7dijiyrp4zs-gmic-2.2.2/share/man/
strip is /nix/store/j7d4mr0ikv974ig7yzhknpsq288js4bs-binutils-2.30/bin/strip
stripping (with command strip and flags -S) in /nix/store/jphp3qadrbccaqz8j07hj7dijiyrp4zs-gmic-2.2.2/bin
patching script interpreter paths in /nix/store/jphp3qadrbccaqz8j07hj7dijiyrp4zs-gmic-2.2.2
checking for references to /build in /nix/store/jphp3qadrbccaqz8j07hj7dijiyrp4zs-gmic-2.2.2...
/nix/store/jphp3qadrbccaqz8j07hj7dijiyrp4zs-gmic-2.2.2

@GrahamcOfBorg build gimpPlugins.gmic

Failure on x86_64-linux (full log)
Attempted: gimpPlugins.gmic
Partial log (click to expand)
patching sources
configuring
no configure script, doing nothing
building
build flags: SHELL=/nix/store/xn5gv3lpfy91yvfy9b0i7klfcxh9xskz-bash-4.4-p19/bin/bash gimp
cd ../gmic-qt && qmake CONFIG+=release GMIC_PATH=/build/gmic-2.2.2/src PRERELEASE= HOST=gimp gmic_qt.pro && make
/nix/store/xn5gv3lpfy91yvfy9b0i7klfcxh9xskz-bash-4.4-p19/bin/bash: qmake: command not found
make: *** [Makefile:565: gimp_qt] Error 127
builder for '/nix/store/rswfr655fifsrxnd03h0r3172gw74pbf-gmic-2.2.2-gimp-2.8.22-plugin.drv' failed with exit code 2
error: build of '/nix/store/rswfr655fifsrxnd03h0r3172gw74pbf-gmic-2.2.2-gimp-2.8.22-plugin.drv' failed

Failure on x86_64-darwin (full log)
Attempted: gimpPlugins.gmic
Partial log (click to expand)
patching sources
configuring
no configure script, doing nothing
building
build flags: SHELL=/nix/store/r8bx3qf1bpncb14i9gzma4vr089pc3pv-bash-4.4-p19/bin/bash gimp
cd ../gmic-qt && qmake CONFIG+=release GMIC_PATH=/private/tmp/nix-build-gmic-2.2.2-gimp-2.8.22-plugin.drv-0/gmic-2.2.2/src PRERELEASE= HOST=gimp gmic_qt.pro && make
/nix/store/r8bx3qf1bpncb14i9gzma4vr089pc3pv-bash-4.4-p19/bin/bash: qmake: command not found
make: *** [Makefile:565: gimp_qt] Error 127
builder for '/nix/store/gka0gz4ab7p2djzdnfgi892m0qihjpwb-gmic-2.2.2-gimp-2.8.22-plugin.drv' failed with exit code 2
error: build of '/nix/store/gka0gz4ab7p2djzdnfgi892m0qihjpwb-gmic-2.2.2-gimp-2.8.22-plugin.drv' failed

Failure on aarch64-linux (full log)
Attempted: gimpPlugins.gmic
Partial log (click to expand)
updateAutotoolsGnuConfigScriptsPhase
configuring
no configure script, doing nothing
building
build flags: SHELL=/nix/store/adw9jx59wnrh5659wz43nbjya3m4b3gl-bash-4.4-p19/bin/bash gimp
cd ../gmic-qt && qmake CONFIG+=release GMIC_PATH=/build/gmic-2.2.2/src PRERELEASE= HOST=gimp gmic_qt.pro && make
/nix/store/adw9jx59wnrh5659wz43nbjya3m4b3gl-bash-4.4-p19/bin/bash: qmake: command not found
make: *** [Makefile:565: gimp_qt] Error 127
builder for '/nix/store/ywkp8h6sy94iscb7i5hklik635x5xvla-gmic-2.2.2-gimp-2.8.22-plugin.drv' failed with exit code 2
error: build of '/nix/store/ywkp8h6sy94iscb7i5hklik635x5xvla-gmic-2.2.2-gimp-2.8.22-plugin.drv' failed

already bumped in 4f420c6802575855a342d00c6685ac493c54139c


Synchronously test if image(s) is loaded?

I am using this plugin to show a loading animation for images in a slideshow: before fading to the next slide, I use imagesLoaded.done() on the particular slide.
Before creating the callback, I first show the loader. The done() callback hides it.
This works great when the next image in the slideshow is downloading: the loader shows and hides itself appropriately. However, once the images are already loaded, the loader "flickers" between slides because it is being shown, then immediately hidden in the done() callback. Since the callback isn't executed synchronously, the DOM has a chance to rerender before hiding the loader.
The resulting effect is an irritating flicker between every single slide. So it'd be nice to take advantage of the LoadingImage.prototype.check method to check if an image is already loaded (or failed to load) without handing the thread back to the browser for a rerender. Then I could check if the image is loaded before even showing the loader (and thus prevent the flicker altogether).
I know this can usually be done with .complete on the image node, but to my knowledge this has some compatibility issues; is this cross-browser logic already implemented in imagesLoaded? Could it be exposed for use?
Or, maybe an option could be passed in which makes imagesLoaded trigger the callbacks immediately (without giving up the main thread) if the image is loaded?
~ Jonathan

Sorry, but I will not be able to resolve this issue.

I will not be able to resolve this issue.

@desandro This seems like a useful feature. I use imagesLoaded to toggle the class on an image that has loaded - allowing me to fade it in. If the image is already cached then it creates a very distracting effect where everything in the page will fade in after the page loads.
Just wondering what your reasoning was? (If you remember)


How to do granular updates to view ?

Great framework but I see this example in wiki
        private Connection<MyModel> connectViews(Consumer<MyEvent> eventConsumer) {
              // send events to the consumer when the button is pressed
                 button.setOnClickListener(view ->
                              eventConsumer.accept(MyEvent.buttonPressed()));

           return new Connection<MyModel>() {
               public void accept(MyModel model) {
                   // this will be called whenever there is a new model
                   textView.setText(model.getValue());
           }

             public void dispose() {
                 // don't forget to remove listeners when the UI is disconnected
        button.setOnClickListener(null);
         }
       };
      }

But in my case i have complex view and every time accept get called i have to rebind and render the view again which i want to avoid

Why/how are you binding to a view in the Connection's accept method?  Note in the example you provided from the wiki, the "binding" to the view happens when connectViews is called and the accept method simply receives model updates while the view is already bound ("connected").

Gotcha, there was similar discussion on this topic here: https://github.com/spotify/mobius/issues/45#issuecomment-425439682

@sgrekov We'll be sure to look into your library. Like your rightfully point out, this is not a concern of Mobius itself. But the recurrent nature of this question suggests the existence of an underlying pattern which should be uncovered and defined. Any and all perspectives on it are therefore very helpful, so thank you for your input!
As @anawara said in another thread, we are also developing a library to address this problem.

Update: We have open sourced the library that we use internally for this problem: https://github.com/spotify/diffuser


No Babel config file detected for

I have a project where there is a top-level .eslintrc.json and another config inside a subdirectory. When I open a file located in that subdirectory, VSCode complains that ESLint can't find Babel config:
Parsing error: No Babel config file detected for path/to/files.jsx. Either disable config file checking with requireConfigFile: false, or configure Babel so that it can find the config files.
But I do have .babelrc in both directories next to .eslintrc.json.
Here is my subdir configuration:
{
    "env": {
        "browser": true,
        "commonjs": true,
        "es6": true,
        "node": false
    },
    "parser": "@babel/eslint-parser",
    "parserOptions": {
        "ecmaVersion": 2018,
        "ecmaFeatures": {
            "jsx": true
        },
        "sourceType": "module"
    },
    "settings": {
        "react": {
            "version": "detect"
        }
    },
    "plugins": [
        "react"
    ],
    "extends": [
        "plugin:react/recommended"
    ],
    "rules": {
        "indent": ["warn", 4, {"SwitchCase": 1}],
        "brace-style": ["error", "1tbs"],
        "semi": ["error", "always"],
        "curly": ["error", "all"],
        "arrow-parens": ["error", "as-needed"],
        "comma-dangle": ["warn", "only-multiline"],
        "space-before-blocks": ["error", "always"],
        "space-before-function-paren": ["error", {
            "anonymous": "never",
            "named": "never",
            "asyncArrow": "always"
        }],
        "arrow-spacing": ["error", {
            "before": true,
            "after": true
        }],
        "keyword-spacing": ["error", {
            "before": true,
            "after": true
        }],
        "constructor-super": "warn",
        "valid-typeof": "warn",
        "no-const-assign": "warn",
        "no-this-before-super": "warn",
        "no-undef": "warn",
        "no-undefined": "error",
        "no-undef-init": "error",
        "no-unreachable": "warn",
        "no-unused-vars": ["warn", { "vars": "all", "args": "none"}],
        "no-invalid-regexp": "error",
        "no-multi-spaces": "warn",
        "no-multiple-empty-lines": ["warn", {"max": 1}],
        "react/prop-types": ["error", {"ignore": ["children"]}],
        "react/jsx-uses-react": "error",
        "react/jsx-uses-vars": "error",
        "react/button-has-type": "warn",
        "react/no-typos": "error",
        "react/no-array-index-key": "warn",
        "react/no-unused-state": "warn",
        "react/no-unused-prop-types": "warn",
        "react/self-closing-comp": "warn",
        "react/sort-comp": ["error", {
            "order": [
                "static-methods",
                "instance-variables",
                "lifecycle",
                "everything-else",
                "render"
            ]
        }],
        "react/void-dom-elements-no-children": "error",
        "react/jsx-pascal-case": "error",
        "react/jsx-props-no-multi-spaces": "warn",
        "react/jsx-tag-spacing": ["warn", {
            "closingSlash": "never",
            "beforeSelfClosing": "never",
            "afterOpening": "never",
            "beforeClosing": "allow"
        }]
    }
}

Top-level config:
{
    "env": {
        "browser": true,
        "commonjs": true,
        "es6": true
    },
    "parser": "@babel/eslint-parser",
    "parserOptions": {
        "sourceType": "module",
        "ecmaVersion": 2018
    },
    "rules": {
        "indent": ["warn", 4, {"SwitchCase": 1}],
        "brace-style": ["error", "1tbs"],
        "semi": ["error", "always"],
        "curly": ["error", "all"],
        "arrow-parens": ["error", "as-needed"],
        "comma-dangle": ["warn", "only-multiline"],
        "space-before-blocks": ["error", "always"],
        "space-before-function-paren": ["error", {
            "anonymous": "never",
            "named": "never",
            "asyncArrow": "always"
        }],
        "arrow-spacing": ["error", {
            "before": true,
            "after": true
        }],
        "keyword-spacing": ["error", {
            "before": true,
            "after": true
        }],
        "constructor-super": "warn",
        "valid-typeof": "warn",
        "no-const-assign": "warn",
        "no-this-before-super": "warn",
        "no-undef": "warn",
        "no-undefined": "error",
        "no-undef-init": "error",
        "no-unreachable": "warn",
        "no-unused-vars": ["warn", { "vars": "all", "args": "none"}],
        "no-invalid-regexp": "error",
        "no-multi-spaces": "warn",
        "no-multiple-empty-lines": ["warn", {"max": 1}]
    }
}

You need to very likely need to configure the setting eslint.workingDirectories. IF you validate in the terminal do you do a chdir before? This is a good indication for specifying a working directory.

Got it, thank you :+1:  Adding this to my workspace settings solved the issue:
    "eslint.workingDirectories": [
        {"mode": "auto"}
    ],

please can you tell me where you adding it in workspace settings?

@mahmoudelshawaf just put it inside inside your_project_dir/.vscode/settings.json
https://code.visualstudio.com/docs/getstarted/settings#_creating-user-and-workspace-settings

tried to add it to settings.json , but it says that this is an unknown configuration settings !!  can any one help please !

tried to add it to settings.json , but it says that this is an unknown configuration settings !! can any one help please !

Don't forget to install the ESLint extension in VS Code

go to your command line and type:
npm install
#the code above will install any dependency needed for your app
or
simply create a new project or an open existing project
open the root folder of the project app
copy the babel.config file and paste into the root folder of your current project
restart your server

Got it, thank you +1 Adding this to my workspace settings solved the issue:
    "eslint.workingDirectories": [
        {"mode": "auto"}
    ],

This solves it, but it's not reasonable to ask everyone in a company to add this setting manually. Especially someone first joining a project and having to find out how to fix the linter. It should be either part of the .eslintrc or the default configuration value.

it was really helpfull

Much appreciated. It was in fact ESLint having issue. Adding the configuration above locally to project files did not do the trick, adding it globally did.

Another way to solve this is by specifying the directories explicitly like this:
{      "eslint.workingDirectories": [ "./client", "./server" ] }
Or you can also specify a glob pattern like this:
{     "eslint.workingDirectories": [{ "pattern": "./packages/**" }] }

Got it, thank you +1 Adding this to my workspace settings solved the issue:
    "eslint.workingDirectories": [
        {"mode": "auto"}
    ],

This solves it, but it's not reasonable to ask everyone in a company to add this setting manually. Especially someone first joining a project and having to find out how to fix the linter. It should be either part of the .eslintrc or the default configuration value.

Using babel options in .eslintrc.json could work but I haven't been able to properly target the .babelrc file with it:
/* .eslintrc.json */

"parserOptions": {
  "babelOptions": {
    "configFile": "./.babelrc",
    "babelrc": true
  }
},

Gives me:

Parsing error: Cannot find module './.babelrc'

The Babel options documentation:
https://babeljs.io/docs/options
The Babel ESLint parser documentation:
https://github.com/babel/babel/tree/main/eslint/babel-eslint-parser#additional-parser-configuration

module.exports = {   env: {     browser: true,     es2021: true,     jest: true,     node: true,   },   extends: [     'eslint:recommended',     'plugin:react/recommended',     'plugin:react-hooks/recommended',     'plugin:prettier/recommended',   ],   globals: {     Atomics: 'readonly',     SharedArrayBuffer: 'readonly',   },   parser: '@babel/eslint-parser',   parserOptions: {     ecmaFeatures: {       jsx: true,     },     ecmaVersion: 'latest',     sourceType: 'module',   },   plugins: ['react', 'prettier', 'react-hooks', 'jsx'],   settings: {     react: {       version: 'detect',     },   },   rules: {     'react/react-in-jsx-scope': 'off',   }, };
I am add 'jsx' inside in plugins end resolved my problenm with [Parsing Error]


#12: Implement ToolCommandlet for Android Studio

Fixes: #12
Implements:

added Android Studio IdeToolCommandlet with first runIde implementation for Windows and Mac
added symlink creation

Pull Request Test Coverage Report for Build<PHONE_NUMBER>
Warning: This coverage report may be inaccurate.
This pull request's base commit is no longer the HEAD commit of its target branch. This means it includes changes from outside the original pull request, including, potentially, unrelated coverage changes.

For more information on this, see Tracking coverage changes with pull request builds.
To avoid this issue with future PRs, see these Recommended CI Configurations.
For a quick fix, rebase this PR at GitHub. Your next report should be accurate.

Details

0 of 0   changed or added relevant lines in 0 files are covered.
3 unchanged lines in 1 file lost coverage.
Overall coverage decreased (-0.3%) to 59.52%

Files with Coverage Reduction
New Missed Lines
%

com/devonfw/tools/ide/commandlet/CommandletManagerImpl.java
3
89.41%

Totals

Change from base Build<PHONE_NUMBER>:
-0.3%

Covered Lines:
4590

Relevant Lines:
7425

💛  - Coveralls


Setting item with loc and boolean mask fails

What happened:
When setting a DataArray with loc, xarray converts bool masks to the coord data type. Therefore loc does not use a boolean mask but tries to match the indexes of the coord.
Minimal Complete Verifiable Example:
import numpy as np
import xarray as xr

x = np.arange(10).astype(np.float64)
fx = np.arange(10).astype(np.float64)
da = xr.DataArray(fx,dims=['x'],coords={'x':x})
mask = np.zeros((10,))
mask[1::2] = 1
mask = mask.astype(bool)
da.loc[{'x':~mask}] = np.arange(5)+10

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/matthmey/miniconda3/envs/analytics/lib/python3.7/site-packages/xarray/core/dataarray.py", line 214, in __setitem__
    self.data_array[pos_indexers] = value
  File "/home/matthmey/miniconda3/envs/analytics/lib/python3.7/site-packages/xarray/core/dataarray.py", line 767, in __setitem__
    self.variable[key] = value
  File "/home/matthmey/miniconda3/envs/analytics/lib/python3.7/site-packages/xarray/core/variable.py", line 854, in __setitem__
    indexable[index_tuple] = value
  File "/home/matthmey/miniconda3/envs/analytics/lib/python3.7/site-packages/xarray/core/indexing.py", line 1164, in __setitem__
    array[key] = value
ValueError: shape mismatch: value array of shape (5,) could not be broadcast to indexing result of shape (10,)

Anything else we need to know?:
Could be fixed by replacing the line, but maybe this is not the cleanest solution.
Coordinates:
  * x        (x) float64 1.0 0.0 1.0 0.0 1.0 0.0 1.0 0.0 1.0 0.0

What you want is integer-based indexing (i.e., not using .loc):
>>> da[{'x':~mask}]
<xarray.DataArray (x: 5)>
array([0., 2., 4., 6., 8.])
Coordinates:
  * x        (x) float64 0.0 2.0 4.0 6.0 8.0

doc link.

Thank you! You are right. I guess based on the docs for Assigning values with indexing I assumed only .loc features item assignment .  vaguely remembered there where issues with assigning via integer-based indexing. Well, propably my bad.
Should we add an example how to perform masking this way to the docs? There are many examples about masking using different ways, but not this simple, intuitive way.
Even now, it's not really clear to me why "boolean"-masking should only work with integer-indexing and not label-indexing. Given that the highlighted maybe_cast_to_coords_dtype is the only reason it does not work for label-based indexing.

I agree that this kind of "boolean indexing" could be clarified a bit in the docs.
I also had to double check here since I use isel() / sel() much more often than [] and .loc[].

Even now, it's not really clear to me why "boolean"-masking should only work with integer-indexing and not label-indexing. Given that the highlighted maybe_cast_to_coords_dtype is the only reason it does not work for label-based indexing.

Hmm you're right. The primary reason of maybe_cast_to_coords_dtype is because pandas indexes don't support floating point values with lower precision than float64 (e.g., #5700). But here https://github.com/pydata/xarray/blob/a6b44d72010c5311fad4f60194b527194e26094b/xarray/core/indexes.py#L236-L237 we actually bypass the underlying pandas index when the labels are a boolean array-like so that boolean indexing should normally work with both integer and label based indexing (#182).
So we should probably fix maybe_cast_to_coords_dtype with something like
def maybe_cast_to_coords_dtype(label, coords_dtype):
    label_dtype = np.dtype(getattr(label, "dtype", None))
    if coords_dtype.kind == "f" and not isinstance(label, slice) and label_dtype.kind != "b":
        label = np.asarray(label, dtype=coords_dtype)
    return label


fix edge case with PIE804

Summary
foo(**{}) was an overlooked edge case for PIE804 which introduced a crash within the Fix, introduced in #7884.
I've made it so that foo(**{}) turns into foo() when applied with --fix, but is that desired/expected? 🤔 Should we just ignore instead?
Test Plan
cargo test

Thanks!


Throw exception when selecting unknown sub columns of object from aliased tables

Summary of the changes / Why this improves CrateDB
When error_on_unknown_object_key was introduced, the existing behaviour was kept.
This will now be fixed such that the behaviour will be more consistent when error_on_unknown_object_key = true.
Checklist

[x] Added an entry in CHANGES.txt for user facing changes
[x] Updated documentation & sql_features table for user facing changes
[x] Touched code is covered by tests
[x] CLA is signed
[x] This does not contain breaking changes, or if it does:

It is released within a major release
It is recorded in CHANGES.txt
It was marked as deprecated in an earlier release if possible
You've thought about the consequences and other components are adapted
(E.g. AdminUI)

I think the existing tests should be enough.

Can you please explain in the commit message and PR description what the problem is, and what this is changing or fixing?

Sorry, update the PR description. Initially I had simple cases like the one in PR description in mind, but now I am going through all kinds of expressions that could come as the base of subscript expressions. It could be functions like https://github.com/crate/crate/pull/14485#discussion_r1289213536 or SelectSymbol like (select {x=10}).

I will narrow the scope to subscript expressions with Reference typed base first.


Rename respond_to? method to respond_to_missing? to fix warning

The call to respond_to? in the route delegator started throwing copious warnings into my logs when I moved to Ruby 3.0.0; this change fixes it.

denny@rocinante:~/code/denny/rails_email_preview$ git status
On branch master
Your branch is up-to-date with 'origin/master'.

nothing to commit, working tree clean
denny@rocinante:~/code/denny/rails_email_preview$ ruby -v
ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [x86_64-linux]
denny@rocinante:~/code/denny/rails_email_preview$ rspec
........Capybara starting Puma...
* Version 5.2.2 , codename: Fettisdagsbulle
* Min threads: 0, max threads: 4
* Listening on http://<IP_ADDRESS>:7000
saving screenshot: list.png
.saving screenshot: list-de.png
.saving screenshot: show.png
.......       exist  app/mailer_previews
       exist  app/mailer_previews/auth_mailer_preview.rb
      create  app/mailer_previews/new_mailer_preview.rb
       exist  app/mailer_previews/newsletter_mailer_preview.rb
        skip  application_mailer
.

Finished in 1.47 seconds (files took 0.91953 seconds to load)
18 examples, 0 failures

denny@rocinante:~/code/denny/rails_email_preview$ rvm use 3
Using /home/denny/.rvm/gems/ruby-3.0.0
denny@rocinante:~/code/denny/rails_email_preview$ ruby -v
ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x86_64-linux]
denny@rocinante:~/code/denny/rails_email_preview$ rspec
......./home/denny/code/denny/rails_email_preview/lib/rails_email_preview/main_app_route_delegator.rb:11: warning: respond_to? is defined here
/home/denny/code/denny/rails_email_preview/lib/rails_email_preview/main_app_route_delegator.rb:11: warning: respond_to? is defined here
/home/denny/code/denny/rails_email_preview/lib/rails_email_preview/main_app_route_delegator.rb:11: warning: respond_to? is defined here
/home/denny/code/denny/rails_email_preview/lib/rails_email_preview/main_app_route_delegator.rb:11: warning: respond_to? is defined here
/home/denny/code/denny/rails_email_preview/lib/rails_email_preview/main_app_route_delegator.rb:11: warning: respond_to? is defined here
/home/denny/code/denny/rails_email_preview/lib/rails_email_preview/main_app_route_delegator.rb:11: warning: respond_to? is defined here
/home/denny/code/denny/rails_email_preview/lib/rails_email_preview/main_app_route_delegator.rb:11: warning: respond_to? is defined here
.Capybara starting Puma...
* Version 5.2.2 , codename: Fettisdagsbulle
* Min threads: 0, max threads: 4
* Listening on http://<IP_ADDRESS>:7000
/home/denny/code/denny/rails_email_preview/lib/rails_email_preview/main_app_route_delegator.rb:11: warning: respond_to? is defined here
/home/denny/code/denny/rails_email_preview/lib/rails_email_preview/main_app_route_delegator.rb:11: warning: respond_to? is defined here
/home/denny/code/denny/rails_email_preview/lib/rails_email_preview/main_app_route_delegator.rb:11: warning: respond_to? is defined here
/home/denny/code/denny/rails_email_preview/lib/rails_email_preview/main_app_route_delegator.rb:11: warning: respond_to? is defined here
/home/denny/code/denny/rails_email_preview/lib/rails_email_preview/main_app_route_delegator.rb:11: warning: respond_to? is defined here
/home/denny/code/denny/rails_email_preview/lib/rails_email_preview/main_app_route_delegator.rb:11: warning: respond_to? is defined here
/home/denny/code/denny/rails_email_preview/lib/rails_email_preview/main_app_route_delegator.rb:11: warning: respond_to? is defined here
/home/denny/code/denny/rails_email_preview/lib/rails_email_preview/main_app_route_delegator.rb:11: warning: respond_to? is defined here
/home/denny/code/denny/rails_email_preview/lib/rails_email_preview/main_app_route_delegator.rb:11: warning: respond_to? is defined here
saving screenshot: list.png
./home/denny/code/denny/rails_email_preview/lib/rails_email_preview/main_app_route_delegator.rb:11: warning: respond_to? is defined here
/home/denny/code/denny/rails_email_preview/lib/rails_email_preview/main_app_route_delegator.rb:11: warning: respond_to? is defined here
/home/denny/code/denny/rails_email_preview/lib/rails_email_preview/main_app_route_delegator.rb:11: warning: respond_to? is defined here
/home/denny/code/denny/rails_email_preview/lib/rails_email_preview/main_app_route_delegator.rb:11: warning: respond_to? is defined here
/home/denny/code/denny/rails_email_preview/lib/rails_email_preview/main_app_route_delegator.rb:11: warning: respond_to? is defined here
/home/denny/code/denny/rails_email_preview/lib/rails_email_preview/main_app_route_delegator.rb:11: warning: respond_to? is defined here
/home/denny/code/denny/rails_email_preview/lib/rails_email_preview/main_app_route_delegator.rb:11: warning: respond_to? is defined here
/home/denny/code/denny/rails_email_preview/lib/rails_email_preview/main_app_route_delegator.rb:11: warning: respond_to? is defined here
/home/denny/code/denny/rails_email_preview/lib/rails_email_preview/main_app_route_delegator.rb:11: warning: respond_to? is defined here
saving screenshot: list-de.png
./home/denny/code/denny/rails_email_preview/lib/rails_email_preview/main_app_route_delegator.rb:11: warning: respond_to? is defined here
/home/denny/code/denny/rails_email_preview/lib/rails_email_preview/main_app_route_delegator.rb:11: warning: respond_to? is defined here
/home/denny/code/denny/rails_email_preview/lib/rails_email_preview/main_app_route_delegator.rb:11: warning: respond_to? is defined here
/home/denny/code/denny/rails_email_preview/lib/rails_email_preview/main_app_route_delegator.rb:11: warning: respond_to? is defined here
/home/denny/code/denny/rails_email_preview/lib/rails_email_preview/main_app_route_delegator.rb:11: warning: respond_to? is defined here
/home/denny/code/denny/rails_email_preview/lib/rails_email_preview/main_app_route_delegator.rb:11: warning: respond_to? is defined here
/home/denny/code/denny/rails_email_preview/lib/rails_email_preview/main_app_route_delegator.rb:11: warning: respond_to? is defined here
/home/denny/code/denny/rails_email_preview/lib/rails_email_preview/main_app_route_delegator.rb:11: warning: respond_to? is defined here
/home/denny/code/denny/rails_email_preview/lib/rails_email_preview/main_app_route_delegator.rb:11: warning: respond_to? is defined here
/home/denny/code/denny/rails_email_preview/lib/rails_email_preview/main_app_route_delegator.rb:11: warning: respond_to? is defined here
saving screenshot: show.png
.......       exist  app/mailer_previews
        skip  application_mailer
       exist  app/mailer_previews/auth_mailer_preview.rb
      create  app/mailer_previews/new_mailer_preview.rb
       exist  app/mailer_previews/newsletter_mailer_preview.rb
.

Finished in 1.51 seconds (files took 1.09 seconds to load)
18 examples, 0 failures

denny@rocinante:~/code/denny/rails_email_preview$ git checkout fix/ruby-3.0-respond-to-warning
Switched to branch 'fix/ruby-3.0-respond-to-warning'
denny@rocinante:~/code/denny/rails_email_preview$ git diff master
diff --git a/lib/rails_email_preview/main_app_route_delegator.rb b/lib/rails_email_preview/main_app_route_delegator.rb
index 87b5e92..92e7f63 100644
--- a/lib/rails_email_preview/main_app_route_delegator.rb
+++ b/lib/rails_email_preview/main_app_route_delegator.rb
@@ -8,7 +8,7 @@ module RailsEmailPreview::MainAppRouteDelegator
     end
   end

-  def respond_to?(method)
+  def respond_to_missing?(method)
     super || main_app_route_method?(method)
   end

denny@rocinante:~/code/denny/rails_email_preview$ rspec
........Capybara starting Puma...
* Version 5.2.2 , codename: Fettisdagsbulle
* Min threads: 0, max threads: 4
* Listening on http://<IP_ADDRESS>:7000
saving screenshot: list.png
.saving screenshot: list-de.png
.saving screenshot: show.png
.......       exist  app/mailer_previews
        skip  application_mailer
       exist  app/mailer_previews/auth_mailer_preview.rb
      create  app/mailer_previews/new_mailer_preview.rb
       exist  app/mailer_previews/newsletter_mailer_preview.rb
.

Finished in 1.62 seconds (files took 1.11 seconds to load)
18 examples, 0 failures

denny@rocinante:~/code/denny/rails_email_preview$


Planning Your Work (Software Planning)

Draft: https://medium.com/@theetrain/1d3a79303c30

Published: https://blog.techmasters.chat/planning-a-software-project-1d3a79303c30#.7qy2dcdh6


Can't link account to alexa

Hi
I'm not able to link the account to alexa.
I had it linked before, but I had to remove the skill and now I can't get it linked again.

As I said on Slack, you need to include a LOT more information for this to be useful, like may be your username?

There is not that much more information to get, my username is JuliusParker


Unable to access USB Nugget as USB Driver

I've just been trying to use the USB Nugget running v1.1 on my laptop running Fedora, but the devices turns on / off and eventually my machine is disconnect.
DMESG has the following output:
[ 1906.016371] usb 3-1: new full-speed USB device number 12 using xhci_hcd
[ 1906.400484] usb 3-1: device descriptor read/64, error -32
[ 1906.699001] usb 3-1: New USB device found, idVendor=05ac, idProduct=020b, bcdDevice= 1.00
[ 1906.699012] usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1906.699015] usb 3-1: Product: ESP32 Arduino Device
[ 1906.699018] usb 3-1: Manufacturer: Espressif
[ 1906.699020] usb 3-1: SerialNumber: 1234-5678
[ 1906.703776] usb-storage 3-1:1.0: USB Mass Storage device detected
[ 1906.704410] scsi host0: usb-storage 3-1:1.0
[ 1906.705241] cdc_acm 3-1:1.1: ttyACM0: USB ACM device
[ 1906.706501] input: Espressif ESP32 Arduino Device as /devices/pci0000:00/0000:00:14.0/usb3/3-1/3-1:1.3/0003:05AC:020B.000D/input/input34
[ 1906.759053] hid-generic 0003:05AC:020B.000D: input,hidraw0: USB HID v1.11 Keyboard [Espressif ESP32 Arduino Device] on usb-0000:00:14.0-1/input3
[ 1907.709174] scsi 0:0:0:0: Direct-Access     ESP32-S2 FLASH            1.0  PQ: 0 ANSI: 2
[ 1907.709690] sd 0:0:0:0: Attached scsi generic sg0 type 0
[ 1907.710016] sd 0:0:0:0: [sda] 744 4096-byte logical blocks: (3.05 MB/2.91 MiB)
[ 1907.710747] sd 0:0:0:0: [sda] Write Protect is off
[ 1907.710751] sd 0:0:0:0: [sda] Mode Sense: 03 00 00 00
[ 1907.711313] sd 0:0:0:0: [sda] No Caching mode page found
[ 1907.711320] sd 0:0:0:0: [sda] Assuming drive cache: write through
[ 1907.719873]  sda:
[ 1907.722952] sd 0:0:0:0: [sda] Attached SCSI removable disk
[ 1907.757417] usb 3-1: USB disconnect, device number 12
[ 1907.757631] sd 0:0:0:0: [sda] tag#0 FAILED Result: hostbyte=DID_ERROR driverbyte=DRIVER_OK cmd_age=0s
[ 1907.757635] sd 0:0:0:0: [sda] tag#0 CDB: Read(10) 28 00 00 00 02 d0 00 00 01 00
[ 1907.757636] I/O error, dev sda, sector 5760 op 0x0:(READ) flags 0x80700 phys_seg 1 prio class 0
[ 1907.757669] device offline error, dev sda, sector 5760 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
[ 1907.757678] Buffer I/O error on dev sda, logical block 720, async page read
[ 1908.427439] usb 3-1: new full-speed USB device number 13 using xhci_hcd
[ 1908.808481] usb 3-1: device descriptor read/64, error -32
[ 1909.312567] usb 3-1: New USB device found, idVendor=05ac, idProduct=020b, bcdDevice= 1.00
[ 1909.312570] usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1909.312571] usb 3-1: Product: ESP32 Arduino Device
[ 1909.312571] usb 3-1: Manufacturer: Espressif
[ 1909.312572] usb 3-1: SerialNumber: 1234-5678
[ 1909.315351] usb-storage 3-1:1.0: USB Mass Storage device detected
[ 1909.315979] scsi host0: usb-storage 3-1:1.0
[ 1909.316397] cdc_acm 3-1:1.1: ttyACM0: USB ACM device
[ 1909.317347] input: Espressif ESP32 Arduino Device as /devices/pci0000:00/0000:00:14.0/usb3/3-1/3-1:1.3/0003:05AC:020B.000E/input/input35
[ 1909.368613] hid-generic 0003:05AC:020B.000E: input,hidraw0: USB HID v1.11 Keyboard [Espressif ESP32 Arduino Device] on usb-0000:00:14.0-1/input3
[ 1910.333289] scsi 0:0:0:0: Direct-Access     ESP32-S2 FLASH            1.0  PQ: 0 ANSI: 2
[ 1910.333490] sd 0:0:0:0: Attached scsi generic sg0 type 0
[ 1910.333791] sd 0:0:0:0: [sda] 744 4096-byte logical blocks: (3.05 MB/2.91 MiB)
[ 1910.334380] sd 0:0:0:0: [sda] Write Protect is off
[ 1910.334387] sd 0:0:0:0: [sda] Mode Sense: 03 00 00 00
[ 1910.334927] sd 0:0:0:0: [sda] No Caching mode page found
[ 1910.334929] sd 0:0:0:0: [sda] Assuming drive cache: write through
[ 1910.341286]  sda:
[ 1910.343305] sd 0:0:0:0: [sda] Attached SCSI removable disk
[ 1910.371247] usb 3-1: USB disconnect, device number 13
[ 1910.371413] sd 0:0:0:0: [sda] tag#0 FAILED Result: hostbyte=DID_ERROR driverbyte=DRIVER_OK cmd_age=0s
[ 1910.371415] sd 0:0:0:0: [sda] tag#0 CDB: Read(10) 28 00 00 00 00 00 00 00 01 00
[ 1910.371416] I/O error, dev sda, sector 0 op 0x0:(READ) flags 0x80700 phys_seg 1 prio class 0
[ 1910.371435] device offline error, dev sda, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
[ 1910.371439] Buffer I/O error on dev sda, logical block 0, async page read
[ 1911.040584] usb 3-1: new full-speed USB device number 14 using xhci_hcd
[ 1911.424567] usb 3-1: device descriptor read/64, error -32
[ 1911.926872] usb 3-1: New USB device found, idVendor=05ac, idProduct=020b, bcdDevice= 1.00
[ 1911.926880] usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1911.926883] usb 3-1: Product: ESP32 Arduino Device
[ 1911.926886] usb 3-1: Manufacturer: Espressif
[ 1911.926887] usb 3-1: SerialNumber: 1234-5678
[ 1911.930248] usb-storage 3-1:1.0: USB Mass Storage device detected
[ 1911.930544] scsi host0: usb-storage 3-1:1.0
[ 1911.931400] cdc_acm 3-1:1.1: ttyACM0: USB ACM device
[ 1911.932939] input: Espressif ESP32 Arduino Device as /devices/pci0000:00/0000:00:14.0/usb3/3-1/3-1:1.3/0003:05AC:020B.000F/input/input36
[ 1911.985055] hid-generic 0003:05AC:020B.000F: input,hidraw0: USB HID v1.11 Keyboard [Espressif ESP32 Arduino Device] on usb-0000:00:14.0-1/input3
[ 1912.957201] scsi 0:0:0:0: Direct-Access     ESP32-S2 FLASH            1.0  PQ: 0 ANSI: 2
[ 1912.957583] sd 0:0:0:0: Attached scsi generic sg0 type 0
[ 1912.958165] sd 0:0:0:0: [sda] 744 4096-byte logical blocks: (3.05 MB/2.91 MiB)
[ 1912.958723] sd 0:0:0:0: [sda] Write Protect is off
[ 1912.958726] sd 0:0:0:0: [sda] Mode Sense: 03 00 00 00
[ 1912.959321] sd 0:0:0:0: [sda] No Caching mode page found
[ 1912.959329] sd 0:0:0:0: [sda] Assuming drive cache: write through
[ 1912.966362]  sda:
[ 1912.968729] sd 0:0:0:0: [sda] Attached SCSI removable disk
[ 1912.995308] usb 3-1: USB disconnect, device number 14
[ 1912.995410] sd 0:0:0:0: [sda] tag#0 FAILED Result: hostbyte=DID_ERROR driverbyte=DRIVER_OK cmd_age=0s
[ 1912.995412] sd 0:0:0:0: [sda] tag#0 CDB: Read(10) 28 00 00 00 02 d0 00 00 01 00
[ 1912.995413] I/O error, dev sda, sector 5760 op 0x0:(READ) flags 0x80700 phys_seg 1 prio class 0
[ 1912.995455] device offline error, dev sda, sector 5760 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
[ 1912.995458] Buffer I/O error on dev sda, logical block 720, async page read

I've not been able to find anything for this error beyond folks suggesting this is a memory issue.
Have you encountered this before? If I plug the device into a power supply (i.e. a USB outlet) the device runs fine and I can navigate the UI and run payloads).

This may be an issue with my laptop as the device is fine on a different computer.

Ended up being a bad USB cable.


Parity: NSArray.sortedArray(…)

Replace the approximate implementation with one that matches Darwin’s and supports all the options by using CFSortIndexes from NSArray.swift.

There's a leak I need to address in this one.

@swift-ci please test

@swift-ci please test

@swift-ci please test

Fixes https://bugs.swift.org/browse/SR-10391


chore(main): release core-js 1.5.19-experimental

:robot: I have created a release beep boop
1.5.19-experimental (2024-11-13)
🐛 Bug Fixes

update git action to use googleapis/release-please-action -- attemp 8 (c9cfa53)

This PR was generated with Release Please. See documentation.

:robot: Created releases:

<EMAIL_ADDRESS>:sunflower:


OCPBUGS-10907: Moving to rhel9 base image.

/retitle OCPBUGS-10907: Moving to rhel9 base image.

/jira refresh

/jira refresh

the only change needed is just moving to rhel9 base image? No need for defining additional repos in order to install packages?

the only change needed is just moving to rhel9 base image? No need for defining additional repos in order to install packages?

yum repos are injected by ART during build time and removed after the build so customer using DTK won't  be able to further install packages that requires entitlements.

/lgtm

/label backport-risk-assessed

/label cherry-pick-approved

/override ci/prow/e2e-aws-driver-toolkit-presubmit
Once the nightlies are stable again this job will mean something.

/override ci/prow/e2e-aws-driver-toolkit-presubmit


fix e2e test

What this PR does / why we need it:
Special notes for your reviewer:
fix e2e test
Does this PR introduce a user-facing change?

Codecov Report

Merging #50 (5c04bf1) into main (6f5e8ee) will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##             main      #50   +/-   ##
=======================================
  Coverage   17.69%   17.69%
=======================================
  Files          72       72
  Lines        6901     6901
=======================================
  Hits         1221     1221
  Misses       5563     5563
  Partials      117      117

Continue to review full report at Codecov.

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


Add coveralls

Fixes #14

99% coverage!! Not a bad start.

Changes Unknown when pulling b22f96d7f218cfc4e72f3781c5b3d978c0250bff on issue-14 into ** on master**.


Feature/snapshot

Made snapshot taken when the "Set" button in walkthrough is pressed
Also added test cases for snapshot renderer and reducer

Awesome! Lets merge :+1:


feat: UTApi - getFileUrls should return the customId

Describe the feature you'd like to request
When I retrieve a list of urls using the customIds, i receive a list with key and url, I don't have an easy way to say which customId belongs to the url retrieved.
Describe the solution you'd like to see
const customIds = [...]
const images = await utapi
      .getFileUrls(customIds, {keyType: "customId"})
      .then((r) => new Map(r.data.map(d => ([d.customId, d.url])))); // currently we just have key and url,

Additional information
No response
👨👧👦 Contributing

[ ] 🙋♂ Yes, I'd be down to file a PR implementing this feature!

We're actually considering deprecating the getFileUrls() helper, as it is a bit of an anti-pattern, and we now supports URLs scoped to your app with utfs.io.
With the recent change, you can now also use your own customIds directly in the URL without having to make an API call to get the filekey for the url.
Valid URL patterns are:
https://utfs.io/f/FILE_KEY <-- how it's always been
https://utfs.io/a/APP_ID/FILE_KEY
https://utfs.io/a/APP_ID/CUSTOM_ID


[Bug] Expander Direction Up does not work properly

Description
When I'm trying to add Direction Up to the Expander and I run the app, it isn't showing the view
Steps to Reproduce

Try to set Direction property Up
Run the app
The view won't change the content

Expected Behavior
The expander show content to up
Actual Behavior
Disable the view
Basic Information

Version with issue: 1.1.0
Last known good version:
IDE: Visual Studio

Would you be able to try the latest pre-release and see if this still happens? Also a piece of code, or even better, a small reproduction sample would be amazing :) Thanks!

Please try latest pre-release version and let us know if this issue still exists

Tested, works fine on iOS with latest code


Any Support?

This plugins hasn't worked in sometime is anyone going to upgrade it?
now we have WHMCS version 7 out I'm sure this is a perfect time to upgrade the bitpay plugin
Thank you.

IS there any support for this module now? I haven't seen any activity here in sometime. The plugin is out of date and doesn't work with WHMCS anymore at least non of the times I've tried it, and now with the release of WHMCS 7.0 it for sure needs to be updated. Can someone please look into fixing this plugin for us as it really really needs it I'm sure there's many people out there that also need this plugin. This site is added as the main developer on the bitpay.com site.

Hello, we can work on this professionally. If anyone needs help on this module for WHMCS, then contact us. Thanks

They have probably forgotten about it because WHMCS is useless.

We haven't forgotten about WHMCS. Working on getting the right developer resources to make BitPay's WHMCS v7 compatible. I can't give any timelines yet.

But why should you have to, WHMCS charges a load surely they can do their own.

thank you about time someone answered :) it would be nice to see this module working again. Even the last update of WHMCS the plugin failed at the end of the release. There was some modifications made but it didn't help.

We've just committed new code that is WHMCS v7 compatible (tested against WHMCS v7.1.2)
You can download the latest code here: https://github.com/bitpay/whmcs-plugin/archive/master.zip
I will create a release next week (provided no issues are found).


Impossible to deploy a GCP Cluster - postgresql password authentication failed, or service account problem

Hello
I obviously hope I did not miss anything in the documentation, but I'm sadly totally stuck
What happened?:
We're following the GCP deployment method described here :
https://docs.pachyderm.com/latest/deploy-manage/deploy/google_cloud_platform
Everything runs fine, however, when launching the "helm install" method, we have a clear problem.
Usecase 1 : trying to use a postgresl Databse created following the documentation with Cloud SQL :
the cloudsql-auth-proxy pod is in CrashLoopBackOff state. Error is :
2021/11/04 16:24:07 current FDs rlimit set to 1048576, wanted limit is 8500. Nothing to do here. 2021/11/04 16:24:07 the default Compute Engine service account is not configured with sufficient permissions to access the Cloud SQL API from this VM. Please create a new VM with Cloud SQL access (scope) enabled under "Identity and API access". Alternatively, create a new "service account key" and specify it using the -credential_file parameter
It could be a mistake from our side. We put in the values.yaml :
cloudsqlAuthProxy:
  enabled: true
  connectionName: X
  serviceAccount: Y
  resources:
    requests:
      memory: "500Mi"
      cpu:    "250m"

However, I'm not sure about the serviceAccount value. I took it from
gcloud sql instances describe [INSTANCE]
line :
serviceAccountEmailAddress:Y
Usecase 2 : trying to use the default postgresql deployed via Helm, using in values.yaml :
postgresql:
  enabled: true

When we launch the helm install command, we can see the the pods are created and running, but the postgresql can not authenticate :
2021-11-04 16:30:47.218 GMT [91] LOG:  database system was shut down at 2021-11-04 15:53:01 GMT
2021-11-04 16:30:47.228 GMT [1] LOG:  database system is ready to accept connections
2021-11-04 16:31:10.312 GMT [115] FATAL:  password authentication failed for user "pachyderm"
2021-11-04 16:31:10.312 GMT [115] DETAIL:  Password does not match for user "pachyderm".
        Connection matched pg_hba.conf line 1: "host     all             all             <IP_ADDRESS>/0               md5"

What you expected to happen?:
For the cluster to start and work
How to reproduce it (as minimally and precisely as possible)?:
Following the GCP installation recreate the same state every time
Anything else we need to know?:
Environment?:

Kubernetes version (use kubectl version):
Client Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.5", GitCommit:"6b1d87acf3c8253c123756b9e61dac642678305f", GitTreeState:"clean", BuildDate:"2021-03-18T01:10:43Z", GoVersion:"go1.15.8", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"20+", GitVersion:"v1.20.10-gke.301", GitCommit:"17ad7bd6afa01033d7bd3f02ce5de56f940a915d", GitTreeState:"clean", BuildDate:"2021-08-24T05:18:54Z", GoVersion:"go1.15.15b5", Compiler:"gc", Platform:"linux/amd64"}

Pachyderm CLI and pachd server version (use pachctl version):

2.0.0

Cloud provider (e.g. aws, azure, gke) or local deployment (e.g. minikube vs dockerized k8s):

GKE

If you deployed with helm, the values you used (helm get values pachyderm):
For the second case :

deployTarget: GOOGLE
pachd:
  serviceAccount:
    additionalAnnotations:
      XXXX
  storage:
    google:
      bucket: XXX
      cred: |
        {
          "type": "service_account",
        }
  worker:
    serviceAccount:
      additionalAnnotations:
        XXXXX
postgresql:
  enabled: true

OS (e.g. from /etc/os-release):

Debian

Others:

@quematech thank you for opening up this issue. The current GCP docs are still in draft and will be finalized next week. However, to unblock your setup, you could use the quick setup instructions for GCP.
However, before you do so, please make sure to do the following:

helm uninstall pachyderm
kubectl get pvc
kubectl delete pvc <name of pvcs from #2>
kubectl get jobs
kubectl delete jobs <name of the jobs from #4>

Once you've cleaned up your cluster with the above steps, the quick start guide for GCP should bring up a cluster up quickly.

Hello
Thank you for your quick answer, it looks like it's working :)
Just a small detail : in the linked documentation, you ask for the service account json to be inserted in the values.yaml. However, documentation does not explain what authorizations the service account should have. I tried with the storage authorization, and it looks like it works, but I'm not sure if this was needed or not.
Best regards

Hmm, I was in a hurry, it does not work, but a different error happens (certificate signed by unknown authority). I will create a new issue in order to keep things clean.


max_sniping_distance

===============ISSUE SECTION===============
Expected Behaviour
I updated to the latest release. Ran the bot and it stopped within one minute with no obvious trigger.
Here is the error:
UnicodeDecodeError: 'utf8' codec can't decode byte 0x9c in position 1: invalid start byte
2016-08-31 10:01:28,255 [sentry.errors.uncaught] [ERROR] [u"KeyError: 'max_sniping_distance'", u'  File "pokecli.py", line 781, in ', u'  File "pokecli.py", line 139, in main', u'  File "pokemongo_bot/init.py", line 658, in tick', u'  File "pokemongo_bot/cell_workers/move_to_map_pokemon.py", line 315, in work', u'  File "pokemongo_bot/cell_workers/move_to_map_pokemon.py", line 141, in get_pokemon_from_social']
Wed Aug 31 10:01:28 CEST 2016 Pokebot configs/config.json Stopped.
Actual Behaviour
Here is the log when the bot stopped
2016-08-31 10:01:26,727 [MoveToFort] [INFO] [moving_to_fort] Moving towards pokestop Münster Brunnen - 0.08km
2016-08-31 10:01:28,227 [       cli] [INFO]
2016-08-31 10:01:28,227 [       cli] [INFO] Ran for 0:00:48
2016-08-31 10:01:28,227 [       cli] [INFO] Total XP Earned: 50  Average: 3738.88/h
2016-08-31 10:01:28,228 [       cli] [INFO] Travelled 0.00km
2016-08-31 10:01:28,228 [       cli] [INFO] Visited 1 stops
2016-08-31 10:01:28,228 [       cli] [INFO] Encountered 0 pokemon, 0 caught, 0 released, 0 evolved, 0 never seen before ()
2016-08-31 10:01:28,228 [       cli] [INFO] Threw 0 pokeballs
2016-08-31 10:01:28,228 [       cli] [INFO] Earned 0 Stardust
2016-08-31 10:01:28,228 [       cli] [INFO] Hatched eggs 0
2016-08-31 10:01:28,228 [       cli] [INFO] Next egg hatches in 0.76 km
2016-08-31 10:01:28,228 [       cli] [INFO]
2016-08-31 10:01:28,228 [       cli] [INFO] Highest CP Pokemon:
2016-08-31 10:01:28,228 [       cli] [INFO] Most Perfect Pokemon:
Traceback (most recent call last):
File "pokecli.py", line 781, in
main()
File "pokecli.py", line 139, in main
bot.tick()
File "/Users/KenLam/PokemonGo-Bot/pokemongo_bot/init.py", line 658, in tick
if worker.work() == WorkerResult.RUNNING:
File "/Users/KenLam/PokemonGo-Bot/pokemongo_bot/cell_workers/move_to_map_pokemon.py", line 315, in work
pokemon_list = self.get_pokemon_from_social()
File "/Users/KenLam/PokemonGo-Bot/pokemongo_bot/cell_workers/move_to_map_pokemon.py", line 141, in get_pokemon_from_social
if pokemon['dist'] > self.config['max_sniping_distance'] and self.config['snipe']:
KeyError: 'max_sniping_distance'
2016-08-31 10:01:28,249 [sentry.errors] [ERROR] Sentry responded with an error: 'utf8' codec can't decode byte 0x9c in position 1: invalid start byte (url: https://app.getsentry.com/api/90254/store/)
Traceback (most recent call last):
File "/Users/KenLam/PokemonGo-Bot/lib/python2.7/site-packages/raven/transport/threaded.py", line 174, in send_sync
super(ThreadedHTTPTransport, self).send(data, headers)
File "/Users/KenLam/PokemonGo-Bot/lib/python2.7/site-packages/raven/transport/http.py", line 47, in send
ca_certs=self.ca_certs,
File "/Users/KenLam/PokemonGo-Bot/lib/python2.7/site-packages/raven/utils/http.py", line 66, in urlopen
return opener.open(url, data, timeout)
File "/Users/KenLam/PokemonGo-Bot/lib/python2.7/site-packages/future/backports/urllib/request.py", line 494, in open
response = self._open(req, data)
File "/Users/KenLam/PokemonGo-Bot/lib/python2.7/site-packages/future/backports/urllib/request.py", line 512, in _open
'_open', req)
File "/Users/KenLam/PokemonGo-Bot/lib/python2.7/site-packages/future/backports/urllib/request.py", line 466, in _call_chain
result = func(*args)
File "/Users/KenLam/PokemonGo-Bot/lib/python2.7/site-packages/raven/utils/http.py", line 46, in https_open
return self.do_open(ValidHTTPSConnection, req)
File "/Users/KenLam/PokemonGo-Bot/lib/python2.7/site-packages/future/backports/urllib/request.py", line 1284, in do_open
h.request(req.get_method(), req.selector, req.data, headers)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 1053, in request
self._send_request(method, url, body, headers)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 1093, in _send_request
self.endheaders(body)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 1049, in endheaders
self._send_output(message_body)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 891, in _send_output
msg += message_body
File "/Users/KenLam/PokemonGo-Bot/lib/python2.7/encodings/utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0x9c in position 1: invalid start byte
2016-08-31 10:01:28,255 [sentry.errors.uncaught] [ERROR] [u"KeyError: 'max_sniping_distance'", u'  File "pokecli.py", line 781, in ', u'  File "pokecli.py", line 139, in main', u'  File "pokemongo_bot/init.py", line 658, in tick', u'  File "pokemongo_bot/cell_workers/move_to_map_pokemon.py", line 315, in work', u'  File "pokemongo_bot/cell_workers/move_to_map_pokemon.py", line 141, in get_pokemon_from_social']
Wed Aug 31 10:01:28 CEST 2016 Pokebot configs/config.json Stopped.
Press any button or wait 20 seconds to continue.
Your FULL config.json (remove your username, password, gmapkey and any other private info)
Here is my config file
"libencrypt_location": "",
"websocket_server": true,
"heartbeat_threshold": 13,

"tasks": [
  {
    "//NOTE: This task MUST be placed on the top of task list": {},
    "type": "RandomAlivePause",
    "config": {
      "enabled": true,
      "min_duration": "00:01:10",
      "max_duration": "00:5:00",
      "min_interval": "00:5:00",
      "max_interval": "00:25:00"
    }
  },
  {
    "type": "RandomPause",
    "config": {
      "enabled": true,
      "min_duration": "00:9:10",
      "max_duration": "00:24:00",
      "min_interval": "00:18:00",
      "max_interval": "00:48:00"
    }
  },
  {
    "type": "CompleteTutorial",
    "config": {
      "enabled": false,
      "// set a name": "",
      "nickname": ""
    }
  },
  {
    "type": "MoveToMapPokemon",
    "config": {
      "address": "http://localhost:5000",
      "max_distance": 500,
      "min_time": 10,
      "min_ball": 20,
      "prioritize_vips": true,
      "snipe": true,
      "snipe_high_prio_only": true,
      "snipe_high_prio_threshold": 1150,
      "update_map": false,
      "map_path": "raw_data",
      "walker": "StepWalker",
      "mode": "priority",
      "catch": {
        "Poliwag": 10,
        "Nidoran F": 10,
        "Nidoran M": 10,
        "Clefairy": 15,
        "Bellsprout": 10,
        "Slowpoke": 10,
        "Eevee": 20,
        "Oddish": 20,
        "Geodude": 50,
        "Abra": 50,
        "Diglett": 100,
        "Vulpix": 100,
        "Kabuto": 100,
        "Muk": 300,
        "Poliwrath": 200,
        "Golem": 200,
        "Weezing": 300,
        "Electrode": 300,
        "Primeape": 300,
        "Mr-mimi": 1000,
        "Chansey": 1000,
        "Alakazam": 600,
        "Omastar": 500,
        "Kabutops": 500,
        "Raichu": 600,
        "Tauros": 500,
        "Dugtrio": 500,
        "Bulbasaur": 400,
        "Charmander": 500,
        "Charmeleon": 600,
        "Squirtle": 300,
        "Pikachu": 600,
        "Growlithe": 400,
        "Machop": 300,
        "Grimer": 200,
        "Exeggcute": 500,
        "Omanyte": 100,
        "Koffing": 200,
        "Dratini": 600,
        "Lapras": 1000,
        "Electabuzz": 1000,
        "Magmar": 600,
        "Ditto": 900,
        "Arcanine": 980,
        "Machamp": 700,
        "Blastoise": 980,
        "Venusaur": 1100,
        "Charizard": 1100,
        "Slowbro": 300,
        "Nidoqueen": 150,
        "Nidoking": 150,
        "Clefable": 100,
        "Victreebel": 200,
        "Jolteon": 200,
        "Magneton": 100,
        "Gengar": 100,
        "Machoke": 80,
        "Vileplume": 400,
        "Exeggutor": 1200,
        "Aerodactyl": 600,
        "Snorlax": 1200,
        "Articuno": 1200,
        "Zapdos": 1300,
        "Moltres": 1300,
        "Dragonair": 800,
        "Dragonite": 1200,
        "Mewtwo": 1300,
        "Mew": 1300
      }
    }
  },
  {
    "type": "HandleSoftBan"
  },
  {
    "type": "CollectLevelUpReward"
  },
  {
    "type": "IncubateEggs",
    "config": {
      "longer_eggs_first": true
    }
  },
  {
    "type": "UpdateLiveInventory",
    "config": {
      "enabled": true,
      "min_interval": 1200,
      "show_all_multiple_lines": false,
      "items": ["pokemon_bag", "space_info", "pokeballs", "greatballs", "ultraballs", "razzberries"]
    }
  },
  {
   "type": "TransferPokemon",
   "config": {
   "min_free_slot": 5,
   "transfer_wait_min": 1,
   "transfer_wait_max": 4
  }
  },
  {
    "type": "EvolvePokemon",
    "config": {
      "enabled": true,

        "// evolve only pidgey and drowzee": "",
        "// evolve_list": "pidgey, drowzee",
        "// donot_evolve_list": "none",

        "// evolve all but pidgey and drowzee": "",
        "// evolve_list": "all",
        "// donot_evolve_list": "pidgey, drowzee",

        "evolve_list": "Magikarp, Psyduck, Poliwag, Poliwhirl, Drowzee, Slowpoke, Staryu, Eevee, Krabby, Goldeen, Pidgeotto, Bellsprout, Gastly, Oddish, Horsea",
        "donot_evolve_list": "none",

      "first_evolve_by": "cp",
      "evolve_above_cp": 120,
      "evolve_above_iv": 0.9,
      "logic": "and",
      "min_evolve_speed": 30,
      "max_evolve_speed": 40,
      "use_lucky_egg": false
    }
  },
  {
    "type": "RecycleItems",
    "config": {
      "enabled": true,
      "min_empty_space": 10,
      "max_balls_keep": 130,
      "max_potions_keep": 160,
      "max_berries_keep": 30,
      "max_revives_keep": 50,
      "item_filter": {
        "Pokeball":       { "keep" : 5 },
        "Potion":         { "keep" : 5 },
        "Super Potion":   { "keep" : 5 },
        "Hyper Potion":   { "keep" : 60 },
        "Max Potion":     { "keep" : 100 },
        "Revive":         { "keep" : 30 },
        "Max Revive":     { "keep" : 40},
    "Greatball":      { "keep" : 70 },
        "Ultraball":      { "keep" : 100 },
        "Razz Berry":     { "keep" : 30 }
      }
    }
  },
    {
      "type": "CatchPokemon",
      "config": {
        "catch_visible_pokemon": true,
        "catch_lured_pokemon": true,
            "daily_catch_limit": 500,
        "min_ultraball_to_keep": 2,
        "catch_throw_parameters": {
          "excellent_rate": 0.1,
          "great_rate": 0.1,
          "nice_rate": 0.4,
          "normal_rate": 0.4,
          "spin_success_rate" : 0.3
        },
			  "catch_simulation": {
			    "flee_count": 2,
			    "flee_duration": 2,
			    "catch_wait_min": 1,
			    "catch_wait_max": 3,
			    "berry_wait_min": 2,
			    "berry_wait_max": 3,
			    "changeball_wait_min": 2,
			    "changeball_wait_max": 3
			  }
      }
    },
  {
    "type": "SpinFort",
    "config": {
      "spin_wait_min": 2,
      "spin_wait_max": 8
       }
  },
  {
    "type": "MoveToFort",
    "config": {
        "lure_attraction": true,
        "lure_max_distance": 1000
    }
  },
  {
    "type": "FollowSpiral",
    "config": {
      "diameter": 1,
      "step_size": 5
    }
  }
],
"map_object_cache_time": 5,
"forts": {
  "avoid_circles": true,
  "max_circle_size": 10
},
"walk_max": 6,
"walk_min": 1,
"sleep_schedule": [
  {
    "time": "20:30",
    "duration": "12:00",
    "time_random_offset": "00:10",
    "duration_random_offset": "00:50",
    "wake_up_at_location": ""
  },
  {
    "time": "13:45",
    "duration": "5:00",
    "time_random_offset": "00:20",
    "duration_random_offset": "00:40",
    "wake_up_at_location": ""
  }
],
"alt_min": 30,
"alt_max": 40,
"gps_default_altitude": 278.0,
"replicate_gps_xy_noise": true,
"replicate_gps_z_noise": true,
"gps_xy_noise_range": 0.000025,
"gps_z_noise_range": 4.5,
"action_wait_min": 1,
"action_wait_max": 10,
"debug": false,
"test": false,
"health_record": true,
"location_cache": false,
"distance_unit": "km",
"reconnecting_timeout": 30,
"evolve_captured": "NONE",
"catch_randomize_reticle_factor": 1.0,
"catch_randomize_spin_factor": 1.0,

Output when issue occurred

Steps to Reproduce

Other Information
OS:

Branch:

Git Commit:

Python Version:

Any other relevant files/configs (eg: path files)

There is a new update to split the max_distance into walk distance and snipe distance
I did not notice the change in the config, my bad.
      "max_walk_distance": 500,
      "max_snip_distance": 500,

Is walk_distance in metre and snip_distance in km?

https://github.com/PokemonGoF/PokemonGo-Bot/issues/4992

Per configuration_files.md, both of these are in meters.


e2e: add more etcdctl tests

For https://github.com/coreos/etcd/issues/4259.

overall looks OK

@heyitsanthony Just fixed. PTAL. Thanks!

lgtm

Thanks!


Run testing jobs on bazis

Tori has arranged a testing account on Bazis for us to use. We should decide what we want to test and how often. I propose we start a job every day at 12 at night. We then first check if there were updates to the repo that day, if there are we run the testing suite. This can include running ADF jobs, setting up calculations etc. We then write a report based on the results from those tests.
What should we test?

[ ] Installation of TCutility.
[ ] Test setting up and running some small calculations with a variety of settings.
[ ] Run analyses.

We first should look into (pytest) documentation in order to check if pytest allows for connecting with an external server. Maybe such feature is already made. Otherwise, we maybe want to make a seperate routine/file to connect to bazis


remove shared namespace from notification

no ticket
moving this out of shared namespace allows me to introduce a bunch of other previews i have locally

Review app deployed to https://teaching-vacancies-review-pr-3177.london.cloudapps.digital


Display profile when designer icon was tapped

A user can, from a collection view cell, tap the designer icon to bring up a web view of the corresponding designer's profile. Tapping elsewhere on the cell still displays the image modal vc.

Nice idea. I will review later, please wait.

thanks! 👍


Rewrite clientside-haml-js templates using underscore

Drop haml templates in favor of underscore. Haml templates are harder to maintain and require extra dependencies, we already have underscore.js included and it provides a fast templating engine. Rewrite all client side templates using it.
Performance with underscore is pretty much the same as with haml (with 10k alerts).

Can't blame you, this is a big blob of code with zero tests, and when it fails some HTML markup is not where it's suppose to be, so even organic testing is very much best effort.
I ended up doing a diff between HTML generated by the old and the new templates, which is still noisy due to new line differences and such, but I'm pretty confident I didn't break much (hopefully nothing). And the new code does have some improvements:

templates are now validated on page load, rather than when they are used - so at least I know all have valid syntax
this also means that when there is a template exception on startup we'll show an actual error, rather than just a blank page that mysteriously doesn't work and you need to look at browser console to see why
as much as I like HAML very few js template engines use it, so if I ever decide to use something else than underscore it's now easy to swap it, as you just need to replace js placeholders <% %>
big templates go split into smaller logical chunks, like label rendering, so alert group template isn't so huge now, it's still not as nice as I'd like it, but it's better