[FEATURE REQUEST] Date Picker

It would be really interesting if you could implement a Date Picker (Similar to the one in Notion) to pick specific Dates or set time-periods. Just a little niche thing, but still a cool addition.

For anyone wondering, there's some ways to ask for dates if you ask using a script.
    // Prompt for something (date for now is a pending Promise)
    const date = QuickAdd.quickAddApi.inputPrompt('Date:');

    // Before awaiting for the promise, find the input and change its type to date.
    document.querySelector('div.quickAddModal input').type = 'date'

    // Await for the user input and do whatever you want with it
    await date

Since Obsidian runs on a web engine, date inputs come with a little datepicker. And you can even put a default date there, and min/max constraints. It also does some rudimentar validation. Dates coming from these inputs will always be formatted as YYYY-MM-DD but will be displayed according to your locale. It should work on Mobile too with the benefits of a native datepicker.
A datePrompt function that does this would be a good candidate for an enhancement in my opinion.

For anyone wondering, there's some ways to ask for dates if you ask using a script.
    // Prompt for something (datePromise for now is a pending Promise)
    const datePromise = QuickAdd.quickAddApi.inputPrompt('Date:');

    // Before awaiting for the promise, find the input and change its type to date.
    document.querySelector('div.quickAddModal input').type = 'date'

    // Await for the user input and do whatever you want with it
    const date = await datePromise

Since Obsidian runs on a web engine, date inputs come with a little datepicker. And you can even put a default date there, and min/max constraints. It also does some rudimentar validation. Dates coming from these inputs will always be formatted as YYYY-MM-DD but will be displayed according to your locale. It should work on Mobile too with the benefits of a native datepicker.
A datePrompt function that does this would be a good candidate for an enhancement in my opinion.

/

Thanks @gregoricavichioli - this is great.   I'm a javascript novice - would mind showing me how to set a default date?

If you're using the snippet I posted above, you can set a default date just before awaiting for the datePromise. Something like this:
    // Prompt for something (datePromise for now is a pending Promise)
    const datePromise = QuickAdd.quickAddApi.inputPrompt('Date:');

    // Set the input into a const to be referenced more times
    const picker = document.querySelector('div.quickAddModal input')

    // Before awaiting for the promise, change the input type to date
    picker.type = 'date'

    // Then set a default date (in this case it will be today)
    picker.value = QuickAdd.quickAddApi.date.now()

    // Await for the user input and do whatever you want with it
    const date = await datePromise

Remember that this is running common javascript. You can manipulate the DOM as you wish in the same way you can do it to any webpage.


test top level issue

/sandwich

/sandwich

/test

/test again

/testingtesting

/asdf;alsdfja;sdf


User Snippets Stop Working in OSX

After creating user snippets in both CSS and JavaScript, they were working fine for a while, but intellisense has stopped detecting them.  After I restart my computer (restarting the app doesn't help) it will work again for a while, then stop again.

VSCode Version: 1.13.1 (1.13.1)
OS Version: Apple OS 10.12.6

Steps to Reproduce:
Not exactly sure how to reproduce, but when I create user snippets, they were working at first (have installed on two machines) then intellisense stopped recognizing them.

Reproduces without extensions: Yes, disabling extensions makes no difference for me

Sorry, nothing I can do with that information. Do snippets show when going via F1 > Insert Snippets?

Hi jrieken,
Thanks for getting back.  Right now it seems to be working (it's unpredictable when it happens), but if it happens again, I'll try to get more helpful information your way.
Cheers


Flags appear in search on windows chrome in unicode form even though we have disabled flags on windows chome

If you haven’t already, check out our contributing guidelines for onboarding and email<EMAIL_ADDRESS>to request to join our Slack channel!

Action Performed:

Open the app
Open any report
Open emoji picker
Search with term 'New'

Expected Result:
Search results should not have flags or flags in unicode form on windows chrome as we have disabled flags in windows
Actual Result:
Flags appear in search in unicode form
Workaround:
unknown
Platforms:

Which of our officially supported platforms is this issue occurring on?

[ ] Windows / Chrome

Version Number: 1.2.58-3
Reproducible in staging?: y
Reproducible in production?: y
If this was caught during regression testing, add the test name, ID and link from TestRail:
Email or phone of affected tester (no customers):
Logs: https://stackoverflow.com/c/expensify/questions/4856
Notes/Photos/Videos:
https://user-images.githubusercontent.com/43996225/214430209-a22a3e2f-9f4b-4514-b444-acfccdc90ed0.mp4
https://user-images.githubusercontent.com/43996225/214430559-ad934586-84cb-436c-8a45-1969c103be73.mp4
Expensify/Expensify Issue URL:
Issue reported by: @dhanashree-sawant
Slack conversation: https://expensify.slack.com/archives/C049HHMV9SM/p1674567548207959
View all open jobs on GitHub

We recently agreed that we're punting some non-critical Windows bugs. Going to close.


Add an 'alone' modifier to 'it' and 'describe'.

Hello!
My suggestion is to include a new modifier to it and describe that will force the test(s) to be run without any other tests in their scope running concurrently. The full behavior of this feature can be described as: Any test marked as alone will be run seperately from all other features in it's scope. The goal of this feature is to simplify the implementation of tests that depend on a single resource without confliction.
Consider the following scenario:
describe("A process intensive resource test", function() {
    let resource;
    before(function() {
        resource = createSomeExpensiveResource();
    });

    beforeEach(function() {
        resource.reset(); // reuse resource without recreating
    });

    it("should be able to be set to 5", function() {
        return resource.setValue(5)
            .then(() => resource.getValue())
            .should.eventually.be.eql(5);
    });

    it("should be able to be set to 6", function() {
        return resource.setValue(6)
            .then(() => resource.getValue())
            .should.eventually.be.eql(6);
    });
});

Currently, mocha will run the two tests concurrently causing them to write to the same resource before either finish, causing a race condition. Modifying the above situation to include this suggestion results in the following:
describe("A process intensive resource test", function() {
    let resource;
    before(function() {
        resource = createSomeExpensiveResource();
    });

    beforeEach(function() {
        resource.reset(); // reuse resource without recreating
    });

    it.alone("should be able to be set to 5", function() {
        return resource.setValue(5)
            .then(() => resource.getValue())
            .should.eventually.be.eql(5);
    });

    it.alone("should be able to be set to 6", function() {
        return resource.setValue(6)
            .then(() => resource.getValue())
            .should.eventually.be.eql(6);
    });
});

This would cause the tests marked as alone to run separately from any other tests in it's describe block.

Currently, mocha will run the two tests concurrently...

This should not be the case, and if it is then you've discovered a bug (whether in your test code, or in the assertion library, or in Mocha), not a feature; Mocha will not report test failures correctly if they run concurrently.
Could you provide a minimal but complete example of a test that will get this issue (i.e. something I can copy-paste into a fresh project and run to verify the problem)? That way we can look at whether it may be incorrect usage of the assertion library or something like that. (Even if it turns out it is a bug in Mocha, we'll want to be able to reproduce it in order to dig into how it happens.)

Huh, I can't seem to reproduce the problem. I might have stumbled on a bug, or it's possible I didn't write the tests correctly. Well, I suppose my problem is solved in either case. Thanks


⚠ Bofrost.lu has degraded performance

In faca8ba, Bofrost.lu (https://www.bofrost.lu) experienced degraded performance:

HTTP code: 200
Response time: 1062 ms

Resolved: Bofrost.lu performance has improved in 2ca0c09 after 21 minutes.


slicing breaks inlining

@leonardt the new slicing syntax breaks the current inlining code and any code that uses passthroughs.(https://github.com/rdaly525/coreir/blob/master/src/ir/inline.cpp). In particular the case when there are non-matching slices for a bitvector port in the module instantiation and the module definition.
Unfortunately this is quite a complicated fix that requires instantiating coreir.wire nodes when this case arises.
A few fixes in the interim:

Disallow inlining when there are slices
Always translate slices to single bit selects before inlining

Let me know if this makes sense.

Do you have a test to reproduce the issue?

@leonardt creating a simple example now

{"top":"global.A",
  "namespaces": {
    "global": {
      "modules": {
        "A": {
          "type": ["Record",[
            ["in", ["Array",16,"BitIn"]],
            ["out", ["Array",16,"Bit"]]
          ]],
            "instances": {
            "i0": {"modref": "global.B"}
          },
          "connections": [
            ["self.in.0:3", "i0.in.0:3"],
            ["self.in.3:16", "i0.in.3:16"],
            ["i0.out", "self.out"]
          ]
        },
        "B": {
          "type": ["Record",[
            ["in", ["Array",16,"BitIn"]],
            ["out", ["Array",16,"Bit"]]
          ]],
          "instances": {
            "n1": {
              "genref": "coreir.neg",
              "genargs": {"width":["Int", 16]}
            }
          },
          "connections": [
            ["self.in.0:10","n1.in.0:10"],
            ["self.in.10:16","n1.in.10:16"],
            ["n1.out","self.out"]
          ]
        }
      }
    }
  }
}

running flatten on this:
>coreir -i example.json -p flatten
will produce:
{"top":"global.A",
"namespaces":{
  "global":{
    "modules":{
      "A":{
        "type":["Record",[
          ["in",["Array",16,"BitIn"]],
          ["out",["Array",16,"Bit"]]
        ]],
        "instances":{
          "i0$n1":{
            "genref":"coreir.neg",
            "genargs":{"width":["Int",16]}
          }
        },
        "connections":[
          ["self.out","i0$n1.out"]
        ]
      },
      "B":{
        "type":["Record",[
          ["in",["Array",16,"BitIn"]],
          ["out",["Array",16,"Bit"]]
        ]],
        "instances":{
          "n1":{
            "genref":"coreir.neg",
            "genargs":{"width":["Int",16]}
          }
        },
        "connections":[
          ["self.in.0:10","n1.in.0:10"],
          ["self.in.10:16","n1.in.10:16"],
          ["self.out","n1.out"]
        ]
      }
    }
  }
}
}

Note that the inline code does not appropriately handle the connections between A.in and i0$n1.in

Thanks will take a look


FIRST_SWITCHED and LAST_SWITCHED keys are missing in parsed packet

I have softflowd (softflowd-1.0.0) running in my pfsense box with "Flow Tracking Level" set to Full and the "Netflow Version" set to 9. When I use nfcapd to capture packets and inspect them using nfdump, I see expected results. An example flow record is shown below.
Flow Record:
  Flags        =              0x06 FLOW, Unsampled
  label        =            <none>
  export sysid =                 1
  size         =                80
  first        =<PHONE_NUMBER> [2020-04-20 16:57:00]
  last         =<PHONE_NUMBER> [2020-04-20 16:57:00]
  msec_first   =               557
  msec_last    =               711
  src addr     =     HIDDEN_WAN_IP
  dst addr     =           <IP_ADDRESS>
  src port     =             12118
  dst port     =               853
  fwd status   =                 0
  tcp flags    =              0x1b ...AP.SF
  proto        =                 6 TCP
  (src)tos     =                 0
  (in)packets  =                12
  (in)bytes    =              1044
  input        =                 1
  output       =                 1
  ip router    =       <IP_ADDRESS>
  engine type  =                 0
  engine ID    =                 0
  received at  =<PHONE_NUMBER>844 [2020-04-20 17:02:01.844]

However, when running the collector and analyzer with the same softflowd settings, I am getting an error:
$ python3 -m netflow.analyzer -f<PHONE_NUMBER>.gz
Traceback (most recent call last):
  File "/usr/lib/python3.8/runpy.py", line 193, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/lib/python3.8/runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "/home/siam/Projects/python-netflow/venv/lib/python3.8/site-packages/netflow/analyzer.py", line 261, in <module>
    for flow in sorted(flows, key=lambda x: x["FIRST_SWITCHED"]):
  File "/home/siam/Projects/python-netflow/venv/lib/python3.8/site-packages/netflow/analyzer.py", line 261, in <lambda>
    for flow in sorted(flows, key=lambda x: x["FIRST_SWITCHED"]):
KeyError: 'FIRST_SWITCHED'

Inspecting an element in the flows list in analyzer.py, the collected flows are missing keys (see below). The UNKNOWN_FIELD_TYPE may be one of either FIRST_SWITCHED or LAST_SWITCHED
{'INPUT_SNMP': 1, 'IN_BYTES': 1480, 'IN_PKTS': 9, 'IPV4_DST_ADDR': '<IP_ADDRESS>', 'IPV4_SRC_ADDR': 'WAN_IP', 'IP_PROTOCOL_VERSION': 4, 'L4_DST_PORT': 443, 'L4_SRC_PORT': 28453, 'NF_F_FLOW_CREATE_TIME_MSEC':<PHONE_NUMBER>854, 'OUTPUT_SNMP': 1, 'PROTOCOL': 6, 'SRC_TOS': 0, 'TCP_FLAGS': 26, 'UNKNOWN_FIELD_TYPE':<PHONE_NUMBER>141}

Since nfcapd is capturing the FIRST_SWITCHED and LAST_SWITCHED fields and this library isn't, could there be an issue with parsing somewhere? I have not debugged with a raw hex dump, but can if you want me to.

Hello,
Version: 0.12.2
I have the same exact error after executing the python3 -m netflow.analyzer -f<PHONE_NUMBER>.gz
$ python3 -m netflow.analyzer -f<PHONE_NUMBER>.gz
Traceback (most recent call last):
File "/usr/lib/python3.8/runpy.py", line 193, in _run_module_as_main
return _run_code(code, main_globals, None,
File "/usr/lib/python3.8/runpy.py", line 86, in _run_code
exec(code, run_globals)
File "/home/siam/Projects/python-netflow/venv/lib/python3.8/site-packages/netflow/analyzer.py", line 261, in
for flow in sorted(flows, key=lambda x: x["FIRST_SWITCHED"]):
File "/home/siam/Projects/python-netflow/venv/lib/python3.8/site-packages/netflow/analyzer.py", line 261, in
for flow in sorted(flows, key=lambda x: x["FIRST_SWITCHED"]):
This is the netflow configuration on my Cisco Device, and I thought that selecting the fields to export might have something to do with the error, but I thought I would ask to see if there is something I need to do on the Cisco configuration side to make it work?
If you need the full Cisco configuration, I can post it.
flow record  FLOW_OUTBOUND
match ipv4 tos
match ipv4 protocol
match ipv4 source address
match ipv4 destination address
match transport source-port
match transport destination-port
collect counter bytes long
collect counter packets long
collect timestamp absolute first
collect timestamp absolute last
Was this original problem ever resolved?


Ability to graphically visualize FMUs

I am currently interested in trying to port over much of my Simulink codebase into a more open standard pipeline. One huge blocker that I am currently trying to navigate around is the ability to graphically visualize FMUs, in particular the input/output connections between blocks. Having such a visual aid, can make it much easier to debug and work on FMUs and I believe would be a great addition to this package.
Thanks for your work on FMI in Julia!

Dear @acxz,
happy to hear that you like the library!
Having a nice graphical user interface is always a win - but also a bunch of work :-D
I am not sure if I will have the time to implement that by myself to be honest... but if someone wants to add a nice GUI this would be cool of course!
BTW there is already a nice GUI in JuliaSim for object oriented modeling using ModelingToolkit (even if FMUs are causal, they can be used together with acausal modeling). I am not sure if there is already support for FMUs - but if not there will probably be one in the near future?

Having a nice graphical user interface is always a win - but also a bunch of work :-D

Haha, I can only imagine!

BTW there is already a nice GUI in JuliaSim for object oriented modeling using ModelingToolkit

Sweet, can you provide a link for this?

Sure, see the JuliaSim Homepage.

Feel free to checkout this Pluto-notebook, which is part of FMI.jl, you can load, parameterize and plot FMUs. Not a full tool, but useful for a quick check:
https://github.com/ThummeTo/FMI.jl/tree/main/examples/pluto-src/FMUExplorer


make sure we allow setting the environment variable to identifying the deployment source

We may want to either expand this to handle the general case of arbitrary environment variables, or add other known ones we'd want to support here too.
For example:
CLOUDSDK_METRICS_ENVIRONMENT
CLOUDSDK_APP_USE_GSUTIL

On second thought, arbitrary environment variables could be set on the ProcessBuilder by the caller. I'm thinking we should just expose a convenience method to allow clients to set the calling source (not just for deployment but for any action), which may be more inline with what was intended by this.

I'm thinking about updating the cloud sdk builder to hide all of the underlying processbuilder stuff. So this would just be another cloud sdk builder parameter.

oh ok. then I won't rely on the client having correctly set it on the processbuilder.

Well the client just has to set it on the sdk
On May 10, 2016 18:14, "Etan Shaul"<EMAIL_ADDRESS>wrote:

oh ok. then I won't rely on the client having correctly set it on the
processbuilder.
—
You are receiving this because you authored the thread.
Reply to this email directly or view it on GitHub
https://github.com/GoogleCloudPlatform/app-tools-lib-for-java/issues/39#issuecomment-218308024

@loosebazooka What do you mean about hiding the processbuilder stuff? Currently we only expose the ability to set a ProcessRunner, and if none is set, we create the DefaultProcessRunner that itself uses a ProcessBuilder.
I do agree about it being another parameter. Are you thinking of a generic Builder.envVariable(name, value) or specific Builder.metricsEnvironment(value) and Builder.useGsUtil()?

FYI, in addition to the above two env variables, we will add one more:
CLOUDSDK_METRICS_ENVIRONMENT_VERSION
I don't see any need for special handling, but just in case, please make sure those env variables work on Mac and Windows too.


Remove /now path prefix and add wildcard redirect

Closes #40

Easier and less disruptive than expected, as everything currently starts with /now. Will redirect all old links. Technically the app will now never work for a Last.fm user named now, but looks like that user has no activity.


How to represent 3d pipeline draws?

Hi,
I'm trying to represent draws from our GPU HW and I'm running into an issue with the UI.
Here is how it looks :

As you can see there are multiple overlapping draw events. This is because our HW will receive multiple draw request and process them in parallel.
As a result draw started later might also complete before previous ones.
I'm looking for a way to make this visible in the UI (right now different draws are overlapping on the same row).
I'm not quite sure how to make this not overlap (different event_id? use a different stage_id?)
It might be possible to use a different stage id, but I would have to create as many as our HW can support (right now 32 parallel draws).
Maybe people know of an easier way?
Thanks!

Another example with way more draws, stacking is really odd :

Hey @djdeath! Sorry you are having issues. It sounds like you are using the gpu_render_stage_event proto. If so I'm afraid we have limited insight. Your best bet is probably somebody on the https://github.com/google/agi team. @pmuetschard would you be able to help point them to someone?
Thanks!

The gpu_render_stage_event proto is designed with the assumption that each HW queue can only work on a single thing at a time - like a single core in the CPU view. If the hardware can process multiple draws in parallel, you need to emit them each on its own queue. Otherwise, flatten out the draws into a single "drawing" event that starts when the earliest one starts, and ends when the latest one finishes.

The gpu_render_stage_event proto is designed with the assumption that each HW queue can only work on a single thing at a time - like a single core in the CPU view. If the hardware can process multiple draws in parallel, you need to emit them each on its own queue. Otherwise, flatten out the draws into a single "drawing" event that starts when the earliest one starts, and ends when the latest one finishes.

Thanks, I'm not quite clear on what you just wrote here.
Are you saying that each gpu_render_stage_event element of the timeline must not overlap with any other within a single queue?

Essentially, yes. You can have a hierarchy (e.g. your cmd buffer -> rp -> dc tree), but it has to be a parent-child / stack relationship, not a "run in parallel" relationship. If you want to indicate that two "things" are running in parallel on the GPU, you need to emit two events with different hw queue ids (the optional uint64 hw_queue_iid = 13 field in the proto). The UI will then create separate tracks, one for each queue.

Thanks, I did not know that.
I have a followup question on hw_queue_iid. I'm still using the deprecated protos for all this. I gave a shot at the new _iid fields but that did not render anything on the web UI. And no errors were showing up for the trace.
Are the new _iid fields supports on the deployed UI?

Yes trace processor should handle those correctly. Are you emitting InternedGpuRenderStageSpecification packets?

Yep I was, I'll try again and open another bug if needed.
Closing this, thanks for the details.


Crashes with low numbers of NIC and NNC cases

When the input GTF file has 1 or less NIC or NNCs it crashes. This also occurs if there is only 1 mean_known_coverage or mean_novel_coverage. This could also happen after its filtered to only nic_only and nnc_only.
Below is very rough band aid code I used to allow the evaluation to run through for NIC but it is far from optimal since it just plots a blank square if this case occurs. Thanks for making this code available, it was very easy to read through!
if(nrow(sqanti_data_NIC) > 1 & sum(!is.na(sqanti_data_NIC$mean_known_coverage)) > 1  & sum(!is.na(sqanti_data_NIC$mean_novel_coverage)) > 1){
  ggplot(sqanti_data_NIC) +
    geom_density(color="black", size=0.5, aes( x = log(mean_novel_coverage +1) , fill="Novel SJ"), alpha=0.5, na.rm = T) +
    geom_density(color="black",  size=0.5, aes( x = log(mean_known_coverage +1) , fill="Known SJ"), alpha=0.5, na.rm = T) +
    mytheme  +
    labs(title="Mean SJ coverage per isoform comparison: known SJ vs novel SJ",
        subtitle = "Using all NIC isoforms") +
    ylab("Density") + xlab("log(Mean Coverage of SJ +1)")
} else{
  ggplot()
}

nic_only=subset(sqanti_data_NIC, FSM_class=="A")

if(nrow(nic_only)==0 | sum(!is.na(nic_only$mean_known_coverage)) <= 1 | sum(!is.na(nic_only$mean_novel_coverage)) <= 1){
  ggplot()
} else{
  if (!all(nic_only$novel_SJ==0)){
    ggplot(nic_only) +
    geom_density(color="black", size=0.5, aes( x = log(mean_novel_coverage +1) , fill="Novel SJ"), alpha=0.5, na.rm = T) +
    geom_density(color="black",  size=0.5, aes( x = log(mean_known_coverage +1) , fill="Known SJ"), alpha=0.5, na.rm = T) +
    mytheme  +
    labs(title="Mean SJ coverage per isoform comparison: known SJ vs novel SJ",
        subtitle = "Using just NIC isoforms which are the only transcript expressed for that gene") +
    ylab("Density") + xlab("log(Mean Coverage of SJ +1)")
  }else{
    ggplot(nic_only) +
    geom_density(color="black",  size=0.5, aes( x = log(mean_known_coverage +1) , fill="Known SJ"), alpha=0.5, na.rm = T) +
    mytheme  +
    labs(title="Mean SJ coverage per isoform comparison: known SJ vs novel SJ",
        subtitle = "Using just NIC isoforms which are the only transcript expressed for that gene") +
        ylab("Density") + xlab("log(Mean Coverage of SJ +1)")
  }
}

I just added those exceptions and a couple more, just in case someone does not have any ISM or FSM too. If any of the exceptions occur (number of FSM, ISM, NIC or NNC <=1), the table with the results for that category will be present in the report, but not the plots (since there is nothing to plot).
Please, give it a try and let me know if this worked (so we can close the issue).
Thank you!
Fran

Yes this resolves it! thank you


NODE-1603: add async_hooks support

This is a basic initial implementation of async_hooks support for the native driver. I will put some notes inline, but it should be generally understood that this work is incomplete. Specifically:

this assumes async_hooks exists
this assumes support for runInAsyncScope

I just wanted to get the conversation started about the approach.
/cc @mcollina @mafintosh

@daprahamian

we are making an AsyncResource for each class? I had assumed that we would use one for the whole client, but that is fine.
Indeed. The whole idea with the async resource tracking is that you get an internal marker to trace from the very beginning of an asynchronous method. If we only provided an async resource for MongoClient, we would have floating method when we e.g. call Cursor.next. In the [first demo|https://github.com/nearform/node-clinic-bubbleprof-demo/blob/master/1-server-with-no-index.js] for bubbleprof, we now see that a majority of the bottleneck is in mongodb:Cursor, so it tells us either something is wrong with the cursor implementation, or that there is something wrong with the query that created the cursor (in this case we are very slow due to lack of an index on this collection).

Would it make sense to invert some sort of control into a subclass of AsyncResource? Maybe we should switch from executeOperation into something like making an executor for each class?
It might eventually even make sense to make all of these classes inherit AsyncResource (though that becomes difficult re: EventEmitter), but I still feel like we are trending towards just embedding all of this work into the OperationBuilder that @kvwalker is working on. For now, I wanted to make it very clear that executeOperation should go away, by seeing all this duplication.

Ouch, were you looking for feedbacks from me? I was traveling and I did notification bankruptcy. let me know if you still need feedbacks.

@mcollina this was closed because we were moving branches around. We're definitely still looking for feedback from you and @mafintosh though. I'll rebase on our current master shortly.

Hi folks; firstly thanks for maintaining this project! Secondly we've encountered a challenge in our code where merging this PR would be really helpful (we've tested it and it solves our problem). Can I help get this over the line in some way, or has it been overtaken by events?

Hey @daogilvie,
Sorry for the late reply. There have been some major refactors since we originally put up this PR, and it is not currently a high priority item for us to reopen and fix this. If you are interested in resubmitting this PR against master and getting it working, we would be down to review it.
- Dan

Any chance this gets implemented? The lack of this feature prevents using AsyncLocalStorage or any other alternative for CLS with this driver. Now that AsyncLocalStorage is built into Node itself this is becoming crucial for certain applications.


x/tools/cmd/goimports: treat import paths as standard library only if they are in goroot

The go tool sets a field to indicate whether a package is part of the standard library:
https://github.com/golang/go/blob/8d478e845c/src/cmd/go/pkg.go#L156
p.Standard = p.Goroot && p.ImportPath != "" && !strings.Contains(p.ImportPath, ".")

goimports uses a different rule:
https://github.com/golang/tools/blob/e21b7325f7/imports/fix.go#L32
if strings.Contains(importPath, ".") {

My feature request is to change the code to behave similar to the go tool:
if strings.Contains(importPath, ".") || !inGoroot(importPath) {

With an additional index of the standard library keyed by import path, I'd expect this to be reasonably fast.
If this is an acceptable idea, I'm happy to write a patch.

CC @bradfitz

I looked at fixing this, but I would cause behavior changes
import (
"fmt"
"x/mypkg"
)

The first group would be standard libraries
The second group everything else
This would now lead to
import (
"fmt"

"x/mypkg"
)

Is that acceptable ?
This bites us too as we have an import called "bright" and it gets merged in with the standard library imports which is a minor nuisance.


git town config

Currently we have a lot of configuration logic at the top level.
usage: git town
   or: git town alias (true | false)
   or: git town config [--reset | --setup]
   or: git town hack-push-flag [(true | false)]
   or: git town help
   or: git town install-fish-autocompletion
   or: git town main-branch [<branch_name>]
   or: git town perennial-branches [(--add | --remove) <branch_name>]
   or: git town pull-branch-strategy [(rebase | merge)]
   or: git town version

I don't really like these being at the top level if we are going now that everything is going to be a  subcommand of git-town so those would appear in the same list as hack, sync. To keep those commands at the forefront, I'd prefer we do the following

move help and version to options, (--help and --version)
move alias, hack-push-flag, install-fish-autocompletion, main-branch, perennial-branches and pull-branch-strategy as subcommands of config

Hmm, I was thinking the opposite: now that we have a better structure for commands, make all these things real commands. Alternatively we can rename the town command to config.

I'll leave these as is with the go rewrite. We can revisit this later if need be.


Couple of fixes and deprecations in ESTree

Updates ESTree with a list of fixes; also adds AST extensions for Facebook Flow (as used in official and Babel parsers).

@RReverser thanks mate!


internal error: entered unreachable code

Hi Prisma Team! My Prisma Client just crashed. This is the report:
Versions

Name
Version

Node
v18.20.3

OS
debian-openssl-3.0.x

Prisma Client
5.14.0

Query Engine
e9771e62de70f79a5e1c604a2d7c8e2a0a874b48

Database
sqlite

Logs
prisma:client checkPlatformCaching:postinstall
prisma:client checkPlatformCaching:ciName
prisma:tryLoadEnv Environment variables not found at null
prisma:tryLoadEnv Environment variables loaded from /home/gamican-pc/Documents/gamican/artbotic/artbotic-fe/.env
prisma:client dirname /home/gamican-pc/Documents/gamican/artbotic/artbotic-fe/node_modules/.prisma/client
prisma:client relativePath ../../../prisma
prisma:client cwd /home/gamican-pc/Documents/gamican/artbotic/artbotic-fe/prisma
prisma:client clientVersion 5.14.0
prisma:client:libraryEngine internalSetup
prisma:client:engines:resolveEnginePath enginePath /home/gamican-pc/Documents/gamican/artbotic/artbotic-fe/node_modules/.prisma/client/libquery_engine-debian-openssl-3.0.x.so.node
prisma:client:libraryEngine sending request, this.libraryStarted: false
prisma:client:libraryEngine library starting
prisma:client:libraryEngine library started
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client checkPlatformCaching:postinstall
prisma:client checkPlatformCaching:ciName
prisma:tryLoadEnv Environment variables not found at null
prisma:tryLoadEnv Environment variables loaded from /home/gamican-pc/Documents/gamican/artbotic/artbotic-fe/.env
prisma:client dirname /home/gamican-pc/Documents/gamican/artbotic/artbotic-fe/node_modules/.prisma/client
prisma:client relativePath ../../../prisma
prisma:client cwd /home/gamican-pc/Documents/gamican/artbotic/artbotic-fe/prisma
prisma:client clientVersion 5.14.0
prisma:client:libraryEngine internalSetup
prisma:client:engines:resolveEnginePath enginePath /home/gamican-pc/Documents/gamican/artbotic/artbotic-fe/node_modules/.prisma/client/libquery_engine-debian-openssl-3.0.x.so.node
prisma:client checkPlatformCaching:postinstall
prisma:client checkPlatformCaching:ciName
prisma:tryLoadEnv Environment variables not found at null
prisma:tryLoadEnv Environment variables loaded from /home/gamican-pc/Documents/gamican/artbotic/artbotic-fe/.env
prisma:client dirname /home/gamican-pc/Documents/gamican/artbotic/artbotic-fe/node_modules/.prisma/client
prisma:client relativePath ../../../prisma
prisma:client cwd /home/gamican-pc/Documents/gamican/artbotic/artbotic-fe/prisma
prisma:client clientVersion 5.14.0
prisma:client:libraryEngine internalSetup
prisma:client:libraryEngine sending request, this.libraryStarted: false
prisma:client:engines:resolveEnginePath enginePath /home/gamican-pc/Documents/gamican/artbotic/artbotic-fe/node_modules/.prisma/client/libquery_engine-debian-openssl-3.0.x.so.node
prisma:client:libraryEngine library starting
prisma:client:libraryEngine library started
prisma:client checkPlatformCaching:postinstall
prisma:client checkPlatformCaching:ciName
prisma:tryLoadEnv Environment variables not found at null
prisma:tryLoadEnv Environment variables loaded from /home/gamican-pc/Documents/gamican/artbotic/artbotic-fe/.env
prisma:client dirname /home/gamican-pc/Documents/gamican/artbotic/artbotic-fe/node_modules/.prisma/client
prisma:client relativePath ../../../prisma
prisma:client cwd /home/gamican-pc/Documents/gamican/artbotic/artbotic-fe/prisma
prisma:client clientVersion 5.14.0
prisma:client:libraryEngine internalSetup
prisma:client:engines:resolveEnginePath enginePath /home/gamican-pc/Documents/gamican/artbotic/artbotic-fe/node_modules/.prisma/client/libquery_engine-debian-openssl-3.0.x.so.node
prisma:client:libraryEngine sending request, this.libraryStarted: false
prisma:client:libraryEngine library starting
prisma:client:libraryEngine library started
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true

Client Snippet
// PLEASE FILL YOUR CODE SNIPPET HERE

Schema
// PLEASE ADD YOUR SCHEMA HERE IF POSSIBLE

Prisma Engine Query
{"X":true}}}

@kashif-khalil What kind of error did you get?
Can you share your Prisma schema and the Prisma Client query involved?
Is there any interesting or potentially problematic data in that table you are querying?

Hey @kashif-khalil  ,
Did you get a chance to have a look at my collegues comment? It'd be helpful for us to move your issue forward.
Without further information, we'll have to close this issue. Thank you 🙏

Hey @...,
With the lack of information and our inability to reproduce this issue, we're now closing it. Feel free to comment if you have any updates about it.
Thank you 🙏


fix: clear traits when identifying over previous identity

Clears out traits when identifying over previous identity.

I've reviewed the code (which looks sound) and tested this manually using 4.0.2-beta-1 and @rolodato 's test example code here.


fix incorrect result caused by missing output block of union operator

Proposed changes
Issue Number: close #xxx

Further comments
If this is a relatively large or complex change, kick off the discussion at<EMAIL_ADDRESS>by explaining why you chose the solution you did and what alternatives you considered, etc...

run buildall

run buildall


Add mentorship programm page

copy of https://github.com/EuroPython/website/pull/438

@patrick91 I'm thinking maybe we should change the menu text color to dark blue or implementing a button with a pink background upon hover. What are your thoughts on this? Could you please let me know where this is declared? 🤓


Group "from" and "import" lines for the same module

Input:
import array
import os
import re

from datetime import datetime
from os.path import join
from zipfile import ZipFile

Current output:
import array
import os
import re
from datetime import datetime
from os.path import join
from zipfile import ZipFile

Desired output:
import array
from datetime import datetime
import os
from os.path import join
import re
from zipfile import ZipFile

This gives a concrete advantage:

All references to a particular package are in a single, specific place, regardless of import style.

This makes working with the code slightly easier: When refactoring, finding all imports of a package requires just one alphabetical search. When reviewing patches, changes to a particular package will be confined to a single diff-block, even if the import style changes.
There's prior art in the openstack style guide. Most other style guides are either ambiguous or completely unspecified on this fine point. What's more, the "Desired" block passes one of the pylint checks, while the "Current" doesn't.
Most importantly though, this accords with my intuition. I feel it has the same driving force as our trailing-comma policy; among essentially-equal formattings, pick the one that provides the lowest barrier to refactoring.
I'll implement the change if we can agree on the policy.

That's not how it is specced here.  If you want to introduce a non default option which enables this feel free to open a pull request

The request is to agree on an updated spec...


some modification on CMakeList.txt files

add make install command to CMakeLists.txt, rename samples as  testbed
put extern folder under samples for testbed samples built standalone
add conditional include for mingw build under windowns in samples/main.cpp
recover GetVertexCount and GetVertex functions in b2_polygon_shape.h for compatable purpose
modification tested only under Win10x64 with MinGW 7.3.0 x64

A lot of these changes are subjective and are not accepted:

samples rename
moving extern
unnecessary accessors (all members are public)
white space

got it,
If there's a guideline for PR maybe better.
thanks for this great project

fine, thanks for this great project

By the way, I did rename samples back to testbed mainly because it makes it easier to document.


Sort entries

Codecov Report

Merging #141 (d0030d3) into master (0c3de04) will decrease coverage by 1.46%.
The diff coverage is 4.25%.

@@             Coverage Diff              @@
##             master     #141      +/-   ##
============================================
- Coverage     44.26%   42.80%   -1.47%
  Complexity      463      463
============================================
  Files           115      121       +6
  Lines          2476     2570      +94
  Branches        360      363       +3
============================================
+ Hits           1096     1100       +4
- Misses         1294     1384      +90
  Partials         86       86

Impacted Files
Coverage Δ

.../java/seedu/address/commons/core/OrderingUtil.java
0.00% <0.00%> (ø)

...java/seedu/address/logic/commands/SortCommand.java
0.00% <0.00%> (ø)

...edu/address/logic/commands/SortCompanyCommand.java
0.00% <0.00%> (ø)

...seedu/address/logic/commands/SortEventCommand.java
0.00% <0.00%> (ø)

...eedu/address/logic/commands/SortPersonCommand.java
0.00% <0.00%> (ø)

.../seedu/address/logic/parser/AddressBookParser.java
51.51% <0.00%> (-5.16%)
:arrow_down:

...in/java/seedu/address/logic/parser/ParserUtil.java
63.51% <0.00%> (-5.61%)
:arrow_down:

.../seedu/address/logic/parser/SortCommandParser.java
0.00% <0.00%> (ø)

src/main/java/seedu/address/model/AddressBook.java
52.00% <0.00%> (-4.53%)
:arrow_down:

...rc/main/java/seedu/address/model/ModelManager.java
49.68% <0.00%> (-3.03%)
:arrow_down:

... and 4 more

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 0c3de04...d0030d3. Read the comment docs.


Ci common utils 4

refer #1465

Added SchemaUtilsTest.java TaskParametersUtilsTest.java ut

Codecov Report

Merging #1660 into dev will increase coverage by 0.68%.
The diff coverage is 0%.

@@            Coverage Diff             @@
##              dev    #1660      +/-   ##
==========================================
+ Coverage   13.36%   14.05%   +0.68%
==========================================
  Files         284      284
  Lines       13958    13958
  Branches     2269     2269
==========================================
+ Hits         1866     1962      +96
+ Misses      11885    11785     -100
- Partials      207      211       +4

Impacted Files
Coverage Δ

...che/dolphinscheduler/common/utils/SchemaUtils.java
71.42% <0%> (+71.42%)
:arrow_up:

...che/dolphinscheduler/common/utils/StringUtils.java
2.17% <0%> (+2.17%)
:arrow_up:

...pache/dolphinscheduler/common/utils/FileUtils.java
41.3% <0%> (+22.82%)
:arrow_up:

...phinscheduler/common/task/http/HttpParameters.java
50% <0%> (+50%)
:arrow_up:

...pache/dolphinscheduler/common/utils/EnumUtils.java
60% <0%> (+60%)
:arrow_up:

...apache/dolphinscheduler/common/enums/TaskType.java
84.61% <0%> (+84.61%)
:arrow_up:

...hinscheduler/common/utils/TaskParametersUtils.java
93.75% <0%> (+93.75%)
:arrow_up:

...phinscheduler/common/enums/HttpCheckCondition.java
100% <0%> (+100%)
:arrow_up:

...ache/dolphinscheduler/common/enums/HttpMethod.java
100% <0%> (+100%)
:arrow_up:

... and 1 more

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 677e9cf...bb246c2. Read the comment docs.


Correct system guessing for darwin64-arm64 target

Previously the system guessing logic would incorrectly guess
i686-apple-darwin as the fallback for any unspecified architecture
that is a Darwin target

This pull request is ready to merge

@levitte As implemented this causes 32-Bit MacOS X to change from i686-apple-darwin to i386-apple-darwin, see my comments on the review.
Maybe that is OK, I just wanted to point it out so nothing breaks.

Maybe that is OK, I just wanted to point it out so nothing breaks.

Thank you for the heads up, it did allow me to go have another look to make sure...

Merged.


[ncm2_core@yarp] vim on_complete: Vim(let):E117: Unknown function: necovim#get_complete_position

I get this error when editing my neovim init.vim file.
OS
MacOS Mojave
neovim :version output
:version
NVIM v0.3.1
Build type: Release
LuaJIT 2.0.5
Compilation: /usr/local/Homebrew/Library/Homebrew/shims/mac/super/clang -Wconversion -U_FORTIFY_SOURCE -D
_FORTIFY_SOURCE=1 -DNDEBUG -DMIN_LOG_LEVEL=3 -Wall -Wextra -pedantic -Wno-unused-parameter -Wstrict-proto
types -std=gnu99 -Wimplicit-fallthrough -Wvla -fstack-protector-strong -fdiagnostics-color=auto -DINCLUDE
_GENERATED_DECLARATIONS -D_GNU_SOURCE -DNVIM_MSGPACK_HAS_FLOAT32 -DNVIM_UNIBI_HAS_VAR_FROM -I/tmp/neovim-
20181019-50893-1j0fv9i/neovim-0.3.1/build/config -I/tmp/neovim-20181019-50893-1j0fv9i/neovim-0.3.1/src -I
/usr/local/include -I/usr/local/opt/gettext/include -I/Applications/Xcode.app/Contents/Developer/Platform
s/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/include -I/tmp/neovim-20181019-50893-1j0fv9i/neovim-
0.3.1/build/src/nvim/auto -I/tmp/neovim-20181019-50893-1j0fv9i/neovim-0.3.1/build/include
Compiled by<EMAIL_ADDRESS>
Features: +acl +iconv +jemalloc +tui
See ":help feature-compile"

   system vimrc file: "$VIM/sysinit.vim"
  fall-back for $VIM: "/usr/local/Cellar/neovim/0.3.1/share/nvim"

Minimal vimrc for reproducing the issue

" Set up NCM2 completion options
" IMPORTANT: :help Ncm2PopupOpen for more information
autocmd BufEnter * call ncm2#enable_for_buffer()

set completeopt=noinsert,menuone,noselect

" turn on tab completion when popup window is in place..
" function! CleverTab()
"    if strpart( getline('.'), 0, col('.')-1 ) =~ '^\s*$'
"       return "\<Tab>"
"    else
"       return "\<C-N>"
"    endif
" endfunction
" inoremap <Tab> <C-R>=CleverTab()<CR>
"
" Use <TAB> to select the popup menu:
inoremap <expr> <Tab> pumvisible() ? "\<C-n>" : "\<Tab>"
inoremap <expr> <S-Tab> pumvisible() ? "\<C-p>" : "\<S-Tab>"j

" Make completion fast
let ncm2#popup_delay = 5
let ncm2#complete_length = [[1, 1]]"

" CTRL-C doesn't trigger the InsertLeave autocmd . map to <ESC> instead.
inoremap <c-c> <ESC>
"Use new fuzzy based matches

let g:ncm2#matcher = 'abbrfuzzy'
" suppress the annoying 'match x of y', 'The only match' and 'Pattern not
" found' messages
set shortmess+=c

neovim :messages output when the error occurs
[vint] autocmd should execute in an augroup or execute with a group (see :help :autocmd) [W]
[vint] autocmd should execute in an augroup or execute with a group (see :help :autocmd) [W]
[vint] autocmd should execute in an augroup or execute with a group (see :help :autocmd) [W]
"init.vim" 248L, 7806C written
[vint] autocmd should execute in an augroup or execute with a group (see :help :autocmd) [W]
[vint] autocmd should execute in an augroup or execute with a group (see :help :autocmd) [W]
"init.vim" 248L, 7806C written
"init.vim" 249L, 7807C written
[vint] autocmd should execute in an augroup or execute with a group (see :help :autocmd) [W]
[vint] autocmd should execute in an augroup or execute with a group (see :help :autocmd) [W]
[vint] autocmd should execute in an augroup or execute with a group (see :help :autocmd) [W]
search hit BOTTOM, continuing at TOP
E486: Pattern not found: CursorL
search hit BOTTOM, continuing at TOP
search hit BOTTOM, continuing at TOP
search hit BOTTOM, continuing at TOP
E21: Cannot make changes, 'modifiable' is off
"init.vim" 250L, 7845C written
[ncm2_core@yarp] vim on_complete: Vim(let):E117: Unknown function: necovim#get_complete_position
[ncm2_core@yarp] vim on_complete: Vim(let):E117: Unknown function: necovim#get_complete_position
[ncm2_core@yarp] vim on_complete: Vim(let):E117: Unknown function: necovim#get_complete_position
[ncm2_core@yarp] vim on_complete: Vim(let):E117: Unknown function: necovim#get_complete_position
[ncm2_core@yarp] vim on_complete: Vim(let):E117: Unknown function: necovim#get_complete_position
"init.vim" 250L, 7830C written
Error detected while processing /Users/brad/Dotfiles/config/nvim/init.vim:
line   58:
E418: Illegal value: lightline#palette()
[ncm2_core@yarp] vim on_complete: Vim(let):E117: Unknown function: necovim#get_complete_position
"init.vim" 249L, 7787C written
[ncm2_core@yarp] vim on_complete: Vim(let):E117: Unknown function: necovim#get_complete_position
[ncm2_core@yarp] vim on_complete: Vim(let):E117: Unknown function: necovim#get_complete_position
[ncm2_core@yarp] vim on_complete: Vim(let):E117: Unknown function: necovim#get_complete_position
[ncm2_core@yarp] vim on_complete: Vim(let):E117: Unknown function: necovim#get_complete_position
[ncm2_core@yarp] vim on_complete: Vim(let):E117: Unknown function: necovim#get_complete_position
[ncm2_core@yarp] vim on_complete: Vim(let):E117: Unknown function: necovim#get_complete_position
[ncm2_core@yarp] vim on_complete: Vim(let):E117: Unknown function: necovim#get_complete_position
[ncm2_core@yarp] vim on_complete: Vim(let):E117: Unknown function: necovim#get_complete_position
"init.vim" 249L, 7831C written
[ncm2_core@yarp] vim on_complete: Vim(let):E117: Unknown function: necovim#get_complete_position
[vint] autocmd should execute in an augroup or execute with a group (see :help :autocmd) [W]
[vint] autocmd should execute in an augroup or execute with a group (see :help :autocmd) [W]
33 lines yanked
1 change; before #59  16:11:54

reproduce the issue
by simply typing in insert mode in my init.vim file this occurs

Your minimal vimrc is partial.
necovim#get_complete_position is part of https://github.com/Shougo/neco-vim


Accept TF backend configuration in dce.yml

Would like to be able to provide my own TF backend configuration, and commit it as code to my configuration file
eg
terraform:
  backend:
     type: "S3"
     bucket: "my-bucket"
     key: "terraform.tfstate"
     dynamodb_lock_table: "LockDB"

Also, If the DCE CLI creates a TF backend for me, it should update the dce.yml file with the backend configuration, so it can be reused as committed as code.

How do we keep our local backend (terraform.tfstate file)?
Need to move away from using temp directories for terraform module.
For one, we can simplify our terraform module code generation, to something just like:
// Backend configuration
terraform {
  // Generated from TF backend config in dce.yml
  backend "local" {
    path = "relative/path/to/terraform.tfstate"
  }
}

// Load DCE TF module from github
module "dce" {
  source="github.com/Optum/dce//terraform?ref=v0.23.0"

  // TF params, generated from dce.yml, or CLI flags
  budget_notification_emails =<EMAIL_ADDRESS>}

Then, the question is where to put that generated code. Our local tfstate file will be generated in the same directory. We don't want to put it in a temp dir, because then we'll lose our statefile.
I'd say we either:

Put it in the current working dir
Move our dce.yml config to a directory (eg. ~/.dce/config.yml), and then put the module there (eg. ~/.dce/terraform/main.tf)

See issue #52, where this will be the default method of handling TF state.

This should stay open. It's part 2 of a 2-part solution to a feature request: 1.) use local TF state by default and then 2.) accept a configuration from the YML file. See #52 for part 1.


Figure out why Serilog logging is slow

As part of investigating #273, I determined that the logging I was adding to get a better idea of what was taking so long was actually slowing things down, in some cases significantly more than what I was investigating in the first place.  This investigation has now gone deep enough that it warrants being split off into its own issue.
This is good to know sooner rather than later, as it seems to be much slower than Log4J in the Java world, and if we are going to switch to e.g. Log4Net or another .NET solution, it's easier to do so early.

Copying from the other thread:

Plot twist - logging is slow. Not sure why/what part of it is slow (beyond the Filter.ByIncludingOnly part of LogManager not making a difference). But even if I just log a hard-coded string, in my seeded-random-number example where it looks at 6 paths, it takes the average from 2 to 11 milliseconds, or +1.5ms per path. This means that the log statements are responsible for over 80% of the run time.
It's a sort of Heisenbug situation where applying debug methods to evaluate the state changes the characteristics of what you're trying to debug.

Hmm, if I leave off the Write To Godot Sink, but leave on the log of a hard-coded string, the overhead from six logs shrinks from 9 ms to 1 ms. That is a major reduction.
Gotcha: Leaving out that line also takes our the formatter. So it could be the sink that's slow, it could be my console that's slow, or it could be the formatter that's slow. But the log.Warning("hardcoded string") itself is not especially slow.

Did some more testing.  The random string hard-coded as 123, measuring the Dutch catapult (the last unit on turn 1) figuring out where to explore, where it checks 10 possibilities and logs how long each of those 10 takes.  The times across 5 runs are:
no logs (just the pathing):            1, 1, 1, 1, 1      = 1    ms average
hardcoded, but no Godot Sink:          1, 2, 2, 2, 2      = 1.8  ms average
hardcoded, Godot, without formatting:  5, 6, 7, 6, 6      = 6    ms average
hardcoded, Godot, with formatting:     16, 16, 14, 16, 16 = 15.6 ms average
real log, Godot, with formatting:      23, 25, 34, 23, 31 = 27.2 ms average

"log statement" means a log statement for each tile possibility; "no logs" just logs the cumulative time for all 10 tiles' pathing at the end.
This is not encouraging as it seems that all the components of the logging framework are contributing.  We get an extra 0.8 ms just from having the log statement, an extra 4.2 ms from logging to the Godot sink (which is the part that could be system-dependent), a whopping 9.6 ms from our formatter, and an extra 11.6 ms from passing in actual variables to the formatter.
Those times are across all 10 tiles, so the last one averages 2.7 ms per tile, of which 2.6 ms is logging overhead.
These are all based on variations of commit 9f7b9ef095f70ef20c0fa778662cf5a8d744385e

One more config, and re-mentioningwhat it compares to from above:
hardcoded, Godot, but too low to long: 1, 1, 1, 1, 1      = 1    ms average
hardcoded, Godot, with formatting:     16, 16, 14, 16, 16 = 15.6 ms average

This is the first piece of good news.  Filtering out log statements is fast, adding virtually no overhead for things that don't get logged.  This should be fast, and is.    This is with using a .Verbose with Debug as the min (and the Filter.ByIncludingOnly still enabled; it should be irrelevant but comes first in the config and thus might get processed).
Overhead, non-cumulative, for 10 logs combined, 5-run average:
0.8 ms: Not getting filtered out
4.2 ms: Getting sent to the Godot sink (may be system-dependent to some extent)
9.6 ms: The formatter getting invoked
11.6ms: The formatter having to deal with variables

When is this a problem?
1. If we have too many logs enabled in general.  If we tell someone to run with debug logging, and we have lots of debug logs, it could slow things down a lot.
2. Adding extra logs at a granular level to investigate the performance of tight loops, as I've done here.

Going to read some blogs about Serilog and slowness as a next step.

Added a file sink instead, and got better results.  With the same data:
hardcoded, default file sink         : 3, 3, 3, 3, 4      = 3.2  ms average
real log, default file sink:           3, 3, 3, 4, 3      = 3.2  ms average
real log, custom output format, file:  3, 3, 3, 3, 3      = 3.0  ms average

This is twice as good as any test with the Godot sink, even the one with no formatting.
Another case:
Random exploration for Warrior on Babylon's turn 4, looks at 23 tiles.
With only file, took 10ms total (including logs).  With Godot sink, took 59 ms.
With no sinks, also 10 ms.  With no Serilog logs, took 8 ms.
File sink config:
			.WriteTo.File("log.txt", buffered: true, flushToDiskInterval: TimeSpan.FromMilliseconds(1000),
			              outputTemplate: "[{Level:u3}] {Timestamp:HH:mm:ss} {SourceContext}: {Message:lj} {NewLine}{Exception}")

Conclusion: File sinks are a lot quicker than console sinks.

I also briefly looked at NLog and Log4Net.  Log4Net requires some additional config to work with .NET Core, but it appears to be possible.  NLog is theoretically slower than Serilog, with the major caveat that the blog that evaluated it wasn't factoring in Serilog enhancers, which may slow Serilog down.  They were also looking at file output, not console.

Interesting. Thanks for chasing this down. My first thought was that with Serilog being a scalable enterprise tool I'm sure its performance is up to the task, but maybe logging directly to text just isn't what it's optimized for. Tagging @pcen, since he introduced Serilog, and @TinaFemea for insight.
When you say Godot with/without formatting, did you just exclude the formatter parameter? Within GodotSink the obvious culprit would seem to be the StringWriter created in each call to transform the formatter into a string. That seems wasteful but again I was just following an example. But that's only half the answer, if enabling the GodotSink without it still tripled the time.
I'm very surprised that the file sink is so much faster than the console sink though, and can't speculate why that would be. It would be wild if tailing the log file turns out to be faster than logging directly to console. I got a bit lost in the stats by the end. How do console sink with no formatter, fast console sink, and file sink compare? It sounds like AnsiConsoleTheme is worth looking into, if we can configure something to use it.
Work has been kicking my butt so I probably won't be back in the code for the next few days at least.

I came across this in one of my searches: https://benfoster.io/blog/serilog-best-practices/
Not an answer to anything, but some interesting hints. The sections on timing operations, message templating, and configuration may be helpful.

Formatting in logging is consistently an issue across all loggers I've ever used.  What we do to mitigate it is wrap logging statements in tag-level tests - so something like:
if (Logger.IsEnabled(Debug, TroopMovementTag))
Log.Debug(VeryLongOrFormattedStringHere)
In places where we can't afford to lose the performance.
We've also had good luck with adding a new Log.Debug method that takes a Func as a parameter instead of an actual string.  Then Log.Debug only calls it when it knows it's going to write it out (and can do the tag-level check internally).

Interesting. Thanks for chasing this down. My first thought was that with Serilog being a scalable enterprise tool I'm sure its performance is up to the task, but maybe logging directly to text just isn't what it's optimized for. Tagging @pcen, since he introduced Serilog, and @TinaFemea for insight.
When you say Godot with/without formatting, did you just exclude the formatter parameter? Within GodotSink the obvious culprit would seem to be the StringWriter created in each call to transform the formatter into a string. That seems wasteful but again I was just following an example. But that's only half the answer, if enabling the GodotSink without it still tripled the time.
I'm very surprised that the file sink is so much faster than the console sink though, and can't speculate why that would be. It would be wild if tailing the log file turns out to be faster than logging directly to console. I got a bit lost in the stats by the end. How do console sink with no formatter, fast console sink, and file sink compare? It sounds like AnsiConsoleTheme is worth looking into, if we can configure something to use it.
Work has been kicking my butt so I probably won't be back in the code for the next few days at least.

I believe that's correct, "without formatting" took out the formatter parameter, so it went to the simpler if (_formatter is null) block in GodotSink.  But it's been a few weeks now, and I didn't create a commit specifically for that configuration in my "scratchpad" branch, so that's 90% rather than 100% reliability.
I hadn't noticed the StringWriter being re-created each time; you're right that that adds some inefficiency.  Maybe that's part of the 3.4ms from the GodotSink versus no GodotSink; I wouldn't have guessed it would take that long to create a StringWriter but it's greater than zero.
As accurately as I remember it (really just piecing it together from what I wrote a few weeks ago); this is from the the Dutch catapult (the last unit on turn 1) figuring out where to explore, where it checks 10 possibilities and logs how long each of those 10 takes example
file log: 2 ms average
GodotSink, without formatting/variables:   6  ms average
GodotSink, with formatting:      27.2 ms average
I wasn't able to get the "fast console sink" working, IIRC it uses one style of formatters and our code uses the other (still not sure why there's two that are incompatible).

Moving this back to "To do" so it can be picked up for a "Part Two".  Whether that really needs to be done for Carthage probably depends on how things go and if it continues to be a pain point or not.

Reopening so it doesn't get overlooked

Is this still an active limiting factor?  If so, could we open a "part 2" to this, linking to the research here?  I hadn't been noticing any issues relating to Serilog in the past year, so I thought it made sense to have this closed as having solved the immediate problem.  #259 is the longer-term goal that should make further improvements, and if we want a "fine-tuning Serilog" card, that's fine, but I don't see any benefit to having this be re-opened unless there's evidence that it's a problem now.
(General project-management philosophy, I prefer smaller tasks that improve things as they go to ones that last weeks, months, or years.  Search and links between issues can help us find earlier research on the same topic, as can wiki pages if it gets that complex.  I think further improvements should also be in "Dutch" or later; never-ending tasks contribute to the feeling that the project is stuck in a rut and not moving forward)

I was of the opinion that this was solved-for-now and if it ever became a problem in the future, we could start a new issue.  My vote it to do nothing else on it for Carthage.


Create a class function to AmazonEmailService and organized params as record

Way better :)
:+1:  :shipit:

Please update readme.

done @esasse

Thanks! :+1:


UI changes

[x] remove margin-right from strong title
[x] apply padding only for code immediate after strong
[x] first element p tag -> strong : make it title
[x] remove style.css from generator
[x] Strong title color changes to #999

Fixed here d0cfcbc807ada3ed58774d080530f9ee7f460ef9


Add a note about how cached directories work

Add a note about exactly how cached directories work, more specifically something like “Cached directories should only be directories which are generated by the application, not directories that are in your code base. That is because any directories which match will not be deployed from your code base and as such will be missing from the deployed application.”

"will not be deployed from your code base [on your host system, but rather from the cache generated inside the development container,] and as such [anything outside that cache] will be missing"


v-for looses types for iterating over object

Hi – your plugin is amazing, thanks so much for creating it!
This issue is probably similar to https://github.com/johnsoncodehk/volar/issues/104 but maybe this can be improved.
For a component
<template>

      {{key}}: {{ value.toFixed() }}

</template>

I get these on hover

obj is correctly typed

value is any while it should be number

key is string while it should be 'key1' | 'key2'

This is a reproduction repo.

Fixed in 0.22.24, thanks for the report!

Amazing – thank you very much – it now works very well with a lot more complex object! 🎉


Can we support custom split logic for RollingWriter

RollingWriter::should_split split arrow writer based some configs which have some limitation, e.g. when user want split the arrow writer after the current row num >= 1000.
Can we provide an API like this:
pub WriteStats {
    current_row_num: usize,
    current_written_size: usize,
}

impl RollingWriterBuilder {
    fn with_split(mut self, split_f: impl Fn(&WriteStats) -> bool) -> Self {
        ...
    }
}

Actually the user can custom their own file writer. But I think that it's a good suggestion. How do you think? @liurenjie1024

It's ok to me to have a pluggable split policy.

Closing for https://github.com/icelake-io/icelake/issues/279


"cf install-plugin multiapps -f" ends with error for Mac M2

Hello all,
I am trying to install multiapps plugin, however ending up with the below issue.
cf version: 8.5.0+73aa161.2022-09-12
As I run "cf install-plugin multiapps -f"
Searching CF-Community for plugin multiapps...
Plugin multiapps 3.0.1 found in: CF-Community
Attention: Plugins are binaries written by potentially untrusted authors.
Install and use plugins at your own risk.
Starting download of plugin binary from repository CF-Community...
14.81 MiB / 14.81 MiB [======================================================================================================================================================================] 100.00% 1s
fork/exec /Users/myuser/.cf/plugins/temp502599367/2641417804: bad CPU type in executable
File is not a valid cf CLI plugin binary.
FAILED
The only steps followed prior to that is logging into the cf environment.
The same steps applied on a Windows, and ended with success. But so far no luck for Mac M2.
I would so appreciate it if you could guide me through!
Best,
Merve

Update : Same result with trying to install manually with command
cf install-plugin /Users/myuser/Downloads/multiapps-plugin.osx -f

Issue is resolved after installing xcode-select (command: xcode-select --install).


Upgrade core 13.6.0

Pull Request Test Coverage Report for Build<PHONE_NUMBER>

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage remained the same at 88.902%

Totals

Change from base Build<PHONE_NUMBER>:
0.0%

Covered Lines:
3036

Relevant Lines:
3415

💛  - Coveralls


[7.x] Updating the make commands to use a custom views path

This PR fix an issue when using a custom folder structure. In my case, the views folder is located in the base path.
This can be achieved by setting the custom views folder in config file:
<?php

// config/view.php

return [

    //...

    'paths' => [
        base_path('views'), // Instead of the default: resource_path('views')
    ],

    //...
];

When running commands like:
php artisan make:component CustomComponent
php artisan make:mail InvoicePaid --markdown=mails.invoice.paid
php artisan make:notification InvoicePaid --markdown=notifications.invoice.paid

It creates the resources/views/{new-blade-files} instead of views/{new-blade-files}
NOTE: Let me know if i've missed a console commad that generates blade files :+1:

You could put this method in the base GeneratorCommand.

Do you mean: moving/refactoring the viewsDirectory method into GeneratorCommand ?

ping @taylorotwell

@taylorotwell @driesvints @GrahamCampbell can you review and reopen this PR ?

@arcanedev-maroc just send in a new one please

@driesvints Done


translating to java

hi i need some help

dotView.isVisible = events[day.date].orEmpty().isNotEmpty()
what is this line in java, sorry im still cant really understand kotlin language

2)class Example3EventsAdapter(val onClick: (Event) -> Unit) :
RecyclerView.Adapter<Example3EventsAdapter.Example3EventsViewHolder>() {
val events = mutableListOf<Event>()

inner class Example3EventsViewHolder(override val containerView: View) :
RecyclerView.ViewHolder(containerView), LayoutContainer {
 init {
     itemView.setOnClickListener {
         onClick(events[adapterPosition])
     }
 }

 fun bind(event: Event) {
     itemEventText.text = event.text
 }

}

exThreeCalendar.monthScrollListener = {
requireActivity().homeToolbar.title = if (it.year == today.year) {
titleSameYearFormatter.format(it.yearMonth)
} else {
titleFormatter.format(it.yearMonth)
}
        // Select the first day of the month when
        // we scroll to a new month.
        selectDate(it.yearMonth.atDay(1))
    }

if possible this too

dotView.isVisible = events[day.date].orEmpty().isNotEmpty()
what is this line in java, sorry im still cant really understand kotlin language

List<Event> e = events.get(day.getDate());
dotView.setVisibility(e == null || e.isEmpty() ? View.GONE : View.VISIBLE);

val events = mutableListOf()

List<Event> events = new ArrayList<>();

init {
}

This block of code is called after the constructor in Kotlin so in Java, you can just have this piece of code within the constructor itself.

exThreeCalendar.monthScrollListener

To set the MonthScrollListener in a Java project see this.

private val eventsAdapter = Example3EventsAdapter {
AlertDialog.Builder(requireContext())
.setMessage(R.string.example_3_dialog_delete_confirmation)
.setPositiveButton(R.string.delete) { _, _ ->
deleteEvent(it)
}
.setNegativeButton(R.string.close, null)
.show()
}
private val inputDialog by lazy {
    val editText = AppCompatEditText(requireContext())
    val layout = FrameLayout(requireContext()).apply {
        // Setting the padding on the EditText only pads the input area
        // not the entire EditText so we wrap it in a FrameLayout.
        val padding = dpToPx(20, requireContext())
        setPadding(padding, padding, padding, padding)
        addView(editText, FrameLayout.LayoutParams(MATCH_PARENT, WRAP_CONTENT))
    }
    AlertDialog.Builder(requireContext())
        .setTitle(getString(R.string.example_3_input_dialog_title))
        .setView(layout)
        .setPositiveButton(R.string.save) { _, _ ->
            saveEvent(editText.text.toString())
            // Prepare EditText for reuse.
            editText.setText("")
        }
        .setNegativeButton(R.string.close, null)
        .create()
        .apply {
            setOnShowListener {
                // Show the keyboard
                editText.requestFocus()
                context.inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0)
            }
            setOnDismissListener {
                // Hide the keyboard
                context.inputMethodManager.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0)
            }
        }
}

this too please... i am so sorry for the trouble

private val eventsAdapter = Example3EventsAdapter {
AlertDialog.Builder(requireContext()).......

private val inputDialog by lazy {
val editText = AppCompatEditText(requireContext())
val layout = FrameLayout(requireContext()).apply {

these too please.. so sorry for the trouble

private val eventsAdapter = Example3EventsAdapter {}

private Example3EventsAdapter adapter = new Example3EventsAdapter();

private val inputDialog by lazy { }

The lazy keyword does not exist in Java but you can just delegate the task to a method and then call it where needed.

exThreeCalendar.monthScrollListener = {
requireActivity().homeToolbar.title = if (it.year == today.year) {
titleSameYearFormatter.format(it.yearMonth)
} else {
titleFormatter.format(it.yearMonth)
}
        // Select the first day of the month when
        // we scroll to a new month.
        selectDate(it.yearMonth.atDay(1))
    }

how do i translate this to java?

private val eventsAdapter = Example3EventsAdapter {}

private Example3EventsAdapter adapter = new Example3EventsAdapter();

^ for your kotlin file you included a anonymous method in this initial initialisation... so in java how do i do the same?

exThreeCalendar.monthScrollListener = {
requireActivity().homeToolbar.title = if (it.year == today.year) {
titleSameYearFormatter.format(it.yearMonth)
} else {
titleFormatter.format(it.yearMonth)
}
        // Select the first day of the month when
        // we scroll to a new month.
        selectDate(it.yearMonth.atDay(1))
    }

how do i translate this to java?

To set the MonthScrollListener in a Java project see this.

private val eventsAdapter = Example3EventsAdapter {}

private Example3EventsAdapter adapter = new Example3EventsAdapter();

^ for your kotlin file you included a anonymous method in this initial initialisation... so in java how do i do the same?

The same way you create anonymous classes in Java. Nothing special with this one.

Guess I can close this.

private val eventsAdapter = Example3EventsAdapter {}

private Example3EventsAdapter adapter = new Example3EventsAdapter();

^ for your kotlin file you included a anonymous method in this initial initialisation... so in java how do i do the same?

The same way you create anonymous classes in Java. Nothing special with this one.

hi im sorry but how did you do it as your adapter class when converted to java will take in constructors but how do you create this anonymous class

Not everything in Kotlin is directly convertible to Java and vice versa. I don't fully understand what you want to achieve but just do it in any way that makes sense in Java. Direct Kotlin -> Java conversion usually isn't what you want.


[onTurnError] unhandled error: DialogContextError: result is not defined

Hi team,
I am getting  "[onTurnError] unhandled error: DialogContextError: result is not defined" error when i am below piece of code
        this.addDialog(new TextPrompt('TextPrompt'))
            .addDialog(new WaterfallDialog(MAIN_WATERFALL_DIALOG_, [
                this.abc.bind(this),
                this.actStep.bind(this)
        ]));

where as when i am using below code application is working file.
        this.addDialog(new TextPrompt('TextPrompt'))
            .addDialog(new WaterfallDialog(MAIN_WATERFALL_DIALOG_, [
                this.actStep.bind(this)
        ]));

Please find attachment for my .js file
main01Dialog.zip

You've got an error in your abc function. The function body is:
async abc(stepContext) {
  return await stepContext.context.sendActivity(`You said: ${result}`);
}

However, result is never defined. So this is expected behavior.


Modifying the ping message

Currently, upon a successful connection, a peer sends a ping message to a peer that it wants to connect to. Would it be possible to send any arbitrary message upon a successful handshake other than a ping?

Currently, upon a successful connection, a peer sends a ping message to a peer that it wants to connect to.

This isn't automatic when a peer connects. libp2p-ping ships with libp2p but nothing is triggering it atm.

Would it be possible to send any arbitrary message upon a successful handshake other than a ping?

Are you talking about changing what libp2p-ping itself sends? Right now it sends 32 random bytes and expects those to be echoed back, so even if you changed it, it would be restricted to exactly 32 bytes.
If you want to have more flexibility/control about what you're sending, you should look at creating another protocol for that.
Is there something more specific you're trying to achieve?

What I'm trying to achieve is upon a connection, both peers involved in the handshake send a specific Hello message.

Here's a basic (untested) example of how that might be done. The reason to use a new protocol is because you're defining a schema for the data you want to exchange. It's similar to an api, where the protocols can be considered endpoints. If the underlying data needs to be changed the protocol / protocol version should also change.
const HELLO_PROTOCOL = '/hello/1.0.0'
const helloHandler = (protocol, conn) => {
  pull(
    pull.values([Buffer.from('hello')]),
    conn,
    pull.collect((values) => {
     // The peers response
      console.log(values) // [Buffer.from('hello')]
    })
  )
}
const sayHello = (peerInfo) => {
  libp2p.dialProtocol(peerInfo, HELLO_PROTOCOL,  (err, conn) => {
    pull(
      pull.values([Buffer.from('hello')]),
      conn,
      pull.collect((values) => {
        // The peers response
        console.log(values) // [Buffer.from('hello')]
      })
    )
  })
}

// Setup the handler for when peers try to say hello
libp2p.handle(HELLO_PROTOCOL, helloHandler)
// Say hello whenever a peer connects
libp2p.on('peer:connect', sayHello)

I'll try this for now. Thanks


.streamadd issue

Upon the newest update, when streamers that use my self hosted bot now begin streaming, the bot's command prompt reads "Retrieved and published stream statuses" but doesn't actually publish said stream statuses. I've tried everything that I could think of, and haven't been able to fix it myself.

Can't reproduce.


Carrier Mod Slight Incompatibility

Issue: Carrier mod causes slight rendering issues on the second skin layer when used with first person model.
The second skin layer will appear to use a different animation to the base layer
Screenshot of issue:

I have a bug report open at my mod that replaces the skin layers with 3d skin layers, where the exact same issue happens. I don't know HOW the mod moves the arms, but it looks like it does it in a wrong/odd way? Open an issue there so the dev can look into it :).


Binding problem when using backspace in Microsoft Edge

When you press backspace in Microsoft Edge to delete characters, the binding always seems to be one character behind.
This can be reproduced using this demo: http://jsfiddle.net/outsider/n8dt4/158/light/
Scroll down to the "HTML string in summernote" section and delete characters from the "Hello World" string.
If you change the document mode in the F12 tools to IE11, it works.

@Skleni Thank you for reporting. I didn't check it on Edge. It will try to fix it.

hum, and then

Any news on this issue?


Visual clue to the level of zoom on a genome

I think that a visual clue to the level of zooming on the genome would be very useful, similar with how UCSC does it here (shows a segment below the chromosome ideogram and it labels with its size, in this case 5kb):
.
I think that creating an element in the top banner of the genomespy-app (using maybe 1/3 of it and centered), showing  the size of a genomic segment closest to 5, 50, 500, 5kb, 50kb, 500kb, 5 Mb, 50 Mb genomic size (or the 1-versions of these), which fits that area, would accomplish this goal very well.
When zooming in and out of an area that has no other elements (genes, chromosomal bands, FASTA sequence, etc), the user only has the coordinates to give a clue at which zoom level the visualisation is located and it takes extra effort and calculations to get that sense of scale.  A visual clue provides that in an instant, without any efort.

Yes, subtracting 123,456,700 from 123,467,800 to figure out the scale is quite burdensome!
The most straightforward way to implement the measure is to provide a new lazy data source similar to axis ticks (source), which would generate a datum that represents a measure centered in the current domain. That could then be used to build the measure by layering some "rule" and "text" marks.
The generated datum could be something like this:
{
  "startChrom": "chr5",
  "startPos": 123465000,
  "endChrom": "chr5",
  "endPos": 123475000,
  "span": "10k",
  "zoomLevel": 123,
  "genomeAssembly": "hg38" // If it's useful to have it visible
}

There are some (minor) issues, however:

In the fully zoomed out view, the measure would span multiple chromosomes, which may not make much sense. On the other hand, maybe it's not a problem.
As the measure's endpoints are expressed as integer genomic coordinates, panning at a very high zoom level (i.e., when single bases are visible) will cause some jitter (or jumping) in the measure.

This should be quite straightforward to implement. I could do this in near future, but now I have to focus on finalizing the revised version of my manuscript. PRs are welcome, of course 🙏.

In fact, the datum could be even simpler, as the chromosomes/contigs are not really needed. Linearized coordinates (that GenomeSpy uses internally) could be used instead. This would also make the measure applicable to other scales, such "index" or "quantitative". Thus, the datum could like:
{
  "startPos":<PHONE_NUMBER>,
  "endPos":<PHONE_NUMBER>,
  "span": "10k",
  "zoomLevel": 123,
  "genomeAssembly": "hg38" // If it's useful to have it visible
}

I'll give it a go!
I won't let my lack of experience with JavaScript development stop me :)
My PRs will probably be annoying and require a few back-and-forth adjustments, but hopefully it will be a good investment of time on both sides.
Good luck with the paper - I think it deserves a lot of attention to show off the great work that went into this project and to get more users/contributors.
May I ask for a quick word of advice: what tooling (IDE, debugger, linter, etc.) do you use for development?
I've used many over the years for different programming environments, but I'm sure there are options that work best for JavaScript development and I can tell by looking at the code that you have a serious developer's habits and attitude (try to do things "the right way").
At the moment, I am using Visual Studio Code with a few standard extensions, JavaScript Debugger (ms-vscode.js-debug), Javascript Debugger Companion Extension (ms-vscode.js-debug-companion), Babel JavaScript (mgmcdermott.vscode-language-babel), Prettier ESLint (rvest.vs-code-prettier-eslint) , Trunk Check (trunk.io).
If you have any suggestions for useful extensions (there are so many available!), it would be appreciated.
The part that scares me the most about Javascript development are the asynchronous calls and promises - I have never had to deal with that and it looks to me that is the part that requires the most adjustment coming from "classical" synchronous programming. I'm reading about it https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous but I need to experiment with real-life scenarios.

This is very useful, thank you!
I started an attempt of implementation by following the AxisTicks example, but I'm still trying to wrap my mind around the whole lifecycle of a visualisation, when do the data sources come alive, how do they get updated, etc.
I have also looked at different historical commits before the dynamic data sources were changed to the lazy datasources, in a more generic approach. Those were probably easier to understand, but not so easy to expand. The current implementation seems very smart, but a bit hard to follow. It's probably a good investment of time in understanding the overall picture.
I'm planning on doing a step-by-step debugging of how the different players come alive, using your development debugging advice. Hope to have some working example soon.

how do they get updated,

There are basically three ways.
The static case
https://github.com/genome-spy/genome-spy/blob/aa34a6a8e4f4abe3de3fd44a47e22dffbffa74ed/packages/core/src/genomeSpy.js#L607
Named data though the API
The updateNamedData method
https://github.com/genome-spy/genome-spy/blob/aa34a6a8e4f4abe3de3fd44a47e22dffbffa74ed/packages/core/src/genomeSpy.js#L218
... which is exposed through the API:
https://github.com/genome-spy/genome-spy/blob/aa34a6a8e4f4abe3de3fd44a47e22dffbffa74ed/packages/core/src/types/embedApi.d.ts#L79
Lazy data
And then there are the lazy data sources that attach a listener to a ScaleResolution, which manages the scales and has some utility methods for zooming, etc.
https://github.com/genome-spy/genome-spy/blob/aa34a6a8e4f4abe3de3fd44a47e22dffbffa74ed/packages/core/src/data/sources/lazy/singleAxisLazySource.js#L59

Thanks a lot for the very detailed explanation!
I think it will my make journey through the codebase a lot more focused on the essentials.
The one thing that I had figured out was that I need to implement the onDomainChanged() method but I was missing the understanding of the initialisation path, so when I tried to generate some data for the publishData method, the properties were unknown to the method, because they weren't initialised.
Now I can see that just having a "genome":{"name":"hg38"} entry in the spec sets in motion a lot of these datasources and I am very eager to see them come alive by stepping through the code in a simple example.
This week is also very hectic for me, so although I would really like to spend all my time on this, I can't :( , but I hope to get a working prototype soon.

Hi Kari, just letting you know I was away for a week with kids, camping (it's school holiday now) so I didn't get to do much, but I'm back now. The development environment that you recommended works like a charm - I have started to dig in the layered/hierarchical view and data sources initialisation and it's indeed complex. I'm though going up the steep part of the learning curve and hope to be able to get some results soon.

Take your time!
You may find the following function useful:
https://github.com/genome-spy/genome-spy/blob/80d16453260546979675dfcdd9ab5b1ff7649e23/packages/core/src/view/testUtils.js#L91
I'm using that in tests that initialize the view hierarchy and data flow. I have plenty of tests for most of the flow nodes (transforms and eager data sources) but lazy sources lack tests – mostly because I would have to mock network requests and I've been ... lazy!

I pushed my minimal implementation of AxisMeasureSource to  the master on my fork of the repository https://github.com/razsultana/genome-spy
I modified the embed example scaleApi.js to show a measure under the axis, using vconcat in the example spec.
As you have correctly anticipated, when showing the measure at very high zoom levels, where the measure is 10 bases or 1 base wide, it is very jittery because of rounding. I actually don't want to show a measure at these levels, as it provides nothing in addition to seeing the ticks, coordinates and possibly FASTA sequence, but I can't figure a way to  have an "empty" measure track, except to publish nulls for startPos and endPos and "" for spanLabel, which generate "undefined" values for the rules - not clean...
I also would like to have way to trigger this datasource for a particular axis, the same way that ticks=True does it for axisTicksSource. I almost did it, but because the axisView is a layer, the measure is overlayed on the axis. I thought about using vconcat for generating the axisSpec if the axis param measure==True and leave it a layer otherqwise, but it doesn't seem right and I'm not sure I'm not breaking some other assumptions.
Any suggestions for dealing with the above two problems would be appreciated!

I pushed my minimal implementation of AxisMeasureSource to the master on my fork of the repository https://github.com/razsultana/genome-spy I modified the embed example scaleApi.js to show a measure under the axis, using vconcat in the example spec.

Awesome! I have yet to give it a try, but at least the code looks good!
Please make a PR. It's easier for me to comment and propose changes that way.

but I can't figure a way to have an "empty" measure track, except to publish nulls for startPos and endPos and "" for spanLabel, which generate "undefined" values for the rules - not clean...

Just publish an empty dataset: []

I also would like to have way to trigger this datasource for a particular axis, the same way that ticks=True does it for axisTicksSource.

Hmm. Interesting idea!
Axes are currently somewhat hacky. There are several challenges:

GenomeSpy doesn't currently do any bounds calculation for any marks. It means that if some, let's say, a text mark instance falls outside the view, the view size is not expanded to accommodate the mark instance. That's a problem with long axis tick labels, as the axis extent (its size) has to be configured explicitly.
The range of x and y channel is locked to [0, 1], which makes it difficult to work with pixel-based offsets. However, there's also the xOffset and yOffset mark properties, which control the positioning in pixels. I'm planning to make them a channel: https://github.com/genome-spy/genome-spy/issues/230

Anyway, these may not be a problem when integrating the measure to axis for convenience.

I thought about allowing axisView to be a vconcat for generating the axisSpec if the axis param measure==True and leave it a layer otherwise, but it doesn't seem right and I'm not sure I'm not breaking some other assumptions.

That's not necessarily a problem. You may, however, stumble upon some challenges related to sizing of the views, etc. Feel free to try it out, but please make another branch/PR for it.
And the last thing, please don't put stuff under embed-examples, as this feature has nothing to do with embeding. Instead, the PR should, at least initially, introduce the new data source and provide an example in the documentation. (I'll update the CONTRIBUTING.md with instructions for bootstrapping the mkdocs with embeded GenomeSpy). In addition, you can put some example specs under packages/core/examples/, where it's easy to experiment . Current examples are quite random, and thus, just put it there somewhere 🙂.

I submitted a proper PR (sorry it took so long).
I actually managed to get mkdocs working and this is what I needed to do:
(I use conda for package management but homebrew can be used as well for the cairo library)
pip cache purge
pip install mkdocs material mkdocs-material mkdocs-material-extensions --upgrade
pip install mkdocs-git-revision-date-localized-plugin
pip install "mkdocs-material[imaging]"
conda install cairo

cd utils/markdown_extension
pip install --editable .

npm run build:docs

cd site
python3 -m http.server --bind <IP_ADDRESS>

I thought it might be helpful as a starting point for the mkdocs bootstrapping section in CONTRIBUTING.md.