pin.get_analog_period_microseconds() returns -1 if the pin has not been used yet with write_analog()

In comparison V1 returns the configured period (default is 20ms).
V1:
>>> pin0.get_analog_period_microseconds()
20000

V2:
>>> pin0.get_analog_period_microseconds()
-1
>>> pin0.write_analog(512)
>>> pin0.get_analog_period_microseconds()
20000

Looks like this is by design? as CODAL is not providing the data:
https://github.com/microbit-foundation/micropython-microbit-v2/blob/fd99f400b42857b1094811cea76bd3fb841a8286/src/codal_app/microbithal.cpp#L172-L179
So if we cannot support this V1 compatibility we might need to update the docs.

The resolution of this issue should result in NRF52Pin::getAnalogPeriodUs() to not return DEVICE_NOT_SUPPORTED, so this should be fixed with a future CODAL update:

https://github.com/lancaster-university/codal-microbit-v2/issues/313#issuecomment-1674549421


Added disable options and arbitrary string (incl unicode) support

Hi, I enjoyed your app but it was missing certain key functionality. Some pages simply get ugly, I didn't try and fix this but I added two ways of disabling the app. One is a per-page flag on that page's localStorage, the other is a global disable. Both of these can be seen in the browser-action-bar induced popup.
The other thing I added was arbitrary string support. You can assign numbers, strings and any unicode character (might be good for learning new writing systems) to colors. This is in the settings page.
Let me know if things aren't working. I'd be glad to help out more.

Thanks for the pull, this is great!


Installing with dotnet 4.0

Would it be possible to get a version, which is compatible to dotnet 4.0?

I guess so, there shouldn't really be anything 4.5 specific in the code, it just happened to be the version I was using.
I'd just have to see how to structure the project to target different framework versions.

that would be great, as I'm stuck on 4.0 for some time

Ouch, sorry. I'd completely forgotten it uses async and await which were introduced in 4.5. It seems it's a bit more work than just restructuring the .proj and .sln files.
I think it should be possible to retrofit it to be synchronous only on 4.0 and you could still make it asynchronous by wrapping it with an AsyncTarget. That seems like an interesting challenge - I'll see what I can come up with later.

It might be possible with https://blogs.msdn.microsoft.com/bclteam/2013/04/17/microsoft-bcl-async-is-now-stable/ but I'm not sure if that's viable for a target library like this


[FEATURE] Additional helm values for kubernetes-addons which won't delete the default

Is your feature request related to a problem? Please describe
I can't just add additional values for helm. I have to replace the default valyes.yaml with full copy of all values.
Ie.
module "aws_eks_addons" {
  external_dns_helm_config = {
    values = [yamlencode({
      sources : ["service", "istio-gateway"]
    })]
  }
}

will remove settings from the default values.yaml like provider, zoneIdFilters and aws.region.
Describe the solution you'd like
I would like to see such pattern (example for externa-dns):
variable "helm_values" {
  type        = any
  default     = {}
  description = "Additional Helm values"
}

locals {
  default_helm_config = {
    values      = [local.default_helm_values, var.helm_values]
  }
  default_helm_values = templatefile("${path.module}/values.yaml", {
    aws_region      = var.addon_context.aws_region_name
    zone_filter_ids = local.zone_filter_ids
  })
}

Then:
module "aws_eks_addons" {
  external_dns_helm_values = yamlencode({
    sources : ["service", "istio-gateway"]
  )}
}

The pattern uses ability of Helm which merges 2 or more values.yaml files.

closing this out with the current implementation provided by the new addons module. please feel free to open any new issues or feature requests if there are any gaps - thank you!


about arrow function

Sails version:1.0
Node version:9.5.0
NPM version:5.6
DB adapter name: N/A
DB adapter version: N/A
Operating system:macOS High Sierra 10.13.1

customToJSON: function() {
// Return a shallow copy of this record with the password removed.
return _.omit(this, ['password'])
}
change to:
customToJSON: ()=> {
// Return a shallow copy of this record with the password removed.
return _.omit(this, ['password'])
}
didn't work
THKS

Hi @TxOne !
Any more details regarding your error ?
You can provide the the error log when you do sails lift.
Cheers !

@TxOne @Paskalouis
Arrow functions do not provide access to this, which is probably why the code above doesn't work

(would be cool at some point for some code in Sails core to run at lift-time and check each of the configured functions to provide better error messages about this...)

Hi @mikermcneil
Do you mean when sails lift, sails checking each controller if there is function written like this on this ?


Recent files list moves down the launcher display

Recent files on the first panel (View) is correctly positioned, but it moves lower for subsequent panels.

Made changes in the list view properties. Can you please verify if it fixed the problem.

Fixed in Pull request #132
BUG: Fixed the relative position of Recent File text.
#133
Bug: Fixed an issue with "Recent Files" textbox.


AttributeError: module 'pybusylight' has no attribute 'busylight'

Installed via PIP
Python 3.7.4 (tags/v3.7.4:e09359112e, Jul  8 2019, 19:29:22) [MSC v.1916 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import pybusylight
>>> bl=pybusylight.busylight()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'pybusylight' has no attribute 'busylight'

Take a look at the example.py script for usage info. Specifically this line. https://github.com/ericpulvino/pyBusylight/blob/master/example.py#L2

Working as from ... import


Correctly track the original length when generating a stream frame

txp_generate_stream_frames() plans chunks of data to send via the function txp_plan_stream_chunk(). That function may clamp the amount in the chunk due to flow control, even though there is more available to send.
We should take this into account when deciding whether or not to try serializing the next chunk.

See also #22597

This pull request is ready to merge

Merged to master and 3.2. Thank you.


Custom rules

I am having trouble setting up custom rules for markdownlint. Here is the situation:

markdownlint is installed as a vsc plugin using markdownlint-cli2 v0.17.0 (markdownlint v0.37.2)

I have a settings.json file with the following contents.

    "markdownlint.config": {
        "extends": ".config/.markdownlint.jsonc" // Sets location of '.markdownlint.jsonc' config file.

    },

    "markdownlint.customRules": [".config/custom-rules/my-custom-rule.js"],

This is working absolutely fine within VSC.
When I run the command line version to test what will happen on my CI Pipeline it runs and will lint with my .markdownlint.jsonc file just fine

What I can't do is get the command line version to lint with my config file and my custom rules file.
I am fairly certain that It's just me not knowing how. But I can confirm the plugin is working the config file is working and the custom rules JS file is working. Just need to see this play out when the command is used in the terminal.
I would very much like for my ignorance to be quelled.
Thanks, Happy, holidays.

customRules is a property of the real config file too https://github.com/DavidAnson/markdownlint/blob/v0.32.1/README.md#optionscustomrules
If you want it to be used by both Visual Studio and the CLI, it should be registered in the config file rather than settings.json

What Nick suggests is what I would say as well. :) Because we are talking about configuration files, I think this link will also be useful: https://github.com/DavidAnson/markdownlint-cli2?tab=readme-ov-file#markdownlint-cli2jsonc
Basically, you can create a configuration file like .markdownlint-cli2.jsonc and store the custom rule information there. That file will also be used by the VS Code extension. You could decide to also put the rule configuration in there, but it's fine to keep that in its own .markdownlint.json file.
As I understand your scenario, you could get away with having a single .markdownlint-cli2.jsonc file in the root of your project and no other configuration will be needed because it will be picked up automatically by both tools.
Good luck!

I had an inkling that It would be set in the config but I can't find for the life of me what line I need to put in the '.markdownlint.jsonc'. I'm sorry I could not parse that out from the links provided.
Would you be able to provide the snippet I need for the config to point to my custom JS. Thanks again.

I can't do that easily from my phone, but note that there are TWO different configuration formats. We are suggesting this one (note "-cli2" in the file name): https://github.com/DavidAnson/markdownlint-cli2/blob/main/test/markdownlint-cli2-jsonc-example/.markdownlint-cli2.jsonc


Add a snapshot plugin for jest using preact-render-to-string

Further support for #31

I think I'm done touching this implementation up, it does fix a bug in .output I introduced also!
@mzgoddard any comments before I land this? I decided preact-render-to-string is a light enough dependency we should just take it on for the sake of a better toString

@gnarf :shipit:


GH-30627: [Docs] Splitting the sphinx-based Arrow docs into separate sphinx projects

Continuation of https://github.com/apache/arrow/pull/11980.

Closes: #30627

Closing in favour of https://github.com/apache/arrow/pull/35610


Unable to sign a native tpk in the WSL environment

Install Tizen Studio using the CLI installer and install required packages.
Create a Tizen certificate.tizen certificate -a abc -p abcdef -f abc

Create a security profile from it.tizen security-profiles add -n abc -a $HOME/tizen-studio-data/keystore/author/abc.p12 -p abcdef

Create an app project with the --tizen-language cpp option and build it. The following error will be generated.

$ flutter-tizen build tpk --device-profile wearable

💪 Building with sound null safety 💪

The abc profile is used for signing.
Building a Tizen application in release mode...                     8.5s
Failed to generate TPK:
Initialize... OK
Copying files... OK
Signing... java.io.IOException: keystore password was incorrect
error occured on packaging.

javax.xml.transform.TransformerException: Unable to evaluate expression using this context
        at com.sun.org.apache.xpath.internal.XPath.execute(XPath.java:370)
        at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.eval(XPathImpl.java:209)
        at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.evaluate(XPathImpl.java:271)
        at org.tizen.ncli.subcommands.packages.NativeProject.getProjectName(NativeProject.java:65)
        at org.tizen.ncli.subcommands.packages.PackageNativeCLICommand.getEnv(PackageNativeCLICommand.java:336)
        at org.tizen.ncli.subcommands.packages.PackageNativeCLICommand.call(PackageNativeCLICommand.java:84)
        at org.tizen.ncli.subcommands.packages.PackageNativeCLICommand.call(PackageNativeCLICommand.java:48)
        at org.tizen.ncli.subcommands.AbstractSubCommand.runCommand(AbstractSubCommand.java:76)
        at org.tizen.ncli.ide.shell.PackageCLI.doPackageForTpk(PackageCLI.java:1155)
        at org.tizen.ncli.ide.shell.PackageCLI.execute(PackageCLI.java:1260)
        at org.tizen.ncli.ide.shell.AbstractCLI.execute(AbstractCLI.java:91)
        at org.tizen.ncli.ide.shell.Main.run(Main.java:188)
        at org.tizen.ncli.ide.shell.Main.main(Main.java:121)
Caused by: java.lang.RuntimeException: Unable to evaluate expression using this context
        at com.sun.org.apache.xpath.internal.axes.NodeSequence.setRoot(NodeSequence.java:266)
        at com.sun.org.apache.xpath.internal.axes.LocPathIterator.execute(LocPathIterator.java:214)
        at com.sun.org.apache.xpath.internal.XPath.execute(XPath.java:341)
        ... 12 more

Note: No error occurs when signing a tpk with the default certificate (without creating a security profile). The error occurs only when you have any active profile.

This error could be related to the error in https://github.com/flutter-tizen/flutter-tizen/issues/79#issuecomment-848106353 reported by @allan175.


Changes TTS so the output is not closed every time.

Changes the TextToSpeech class to use a single SourceDataLine instead of many Clips.
Therefor the Line does not need to be closed after each speech output, which messes with PulseAudio, which is the audio manager under most linux distributions.
Fixes #158
Minor change.
Pull request status:

No Tests added/updated, because TTS works with AudioLines, which are not mockable.
[ ] Doku required and added
[x] Ready for review

After the changes by @Legion2 Amy hears herself again in my setup.
I will commit some changes to fix this shortly.

@MakinZeel It still works under linux.


Sonoff T1 3 gang wall light switch

Hi,
is is possible somehow to control Sonoff T1 UK: 3 Gang WiFi & RF 86 Type Smart Wall Touch Light Switch ?
https://www.itead.cc/sonoff-t1.html
I can see that accessory on Homekit but cannot be control?
Thank you

Please let me know what model is your HomeKit showing and I can try to add support for the 3 Gang one.
I've marked in a circle the model field.
My current code from issue #14 supports up to 2 gang switches.

I have the same problem, can you help me solve it?

hi, has updated all the content of MrTomAsh / homebridge-ewelink and it is already working correctly
thank you

can someone approve this PR?
https://github.com/MrTomAsh/homebridge-ewelink/pull/3

Also same issue with PSF-B04-GL
Sonoff T1 UK3C

I have the same problem, the accessory appears as unknown.


Release v1.1.20

Release PR
Demo: https://s3.amazonaws.com/vitessce-data/demos/2022-04-21/1c3d890b/index.html
Docs: http://vitessce-data.s3-website-us-east-1.amazonaws.com/docs/2022-04-21/1c3d890b/index.html
Checklist

[ ] Ensure PR works with all demos on the dev.vitessce.io homepage
[ ] Open (draft) PR's into vitessce-python and vitessce-r if this is a release PR
[ ] Documentation added or updated

Looks good - let's see if we can get in https://github.com/vitessce/vitessce/pull/1205

New releases
docs:http://vitessce-data.s3-website-us-east-1.amazonaws.com/docs/2022-04-22/0cb9bea1/index.html
demo: http://vitessce-data.s3-website-us-east-1.amazonaws.com/demos/2022-04-22/0cb9bea1/index.html


Feature Request: Add vislaud.com/[streamer name] to Quick access links

xayo.pl doesn't work for any of the streamers that I watch because I watch English streamers.

thanks for reporting this i completely forgot to add this
906bffba5a3def58e1d2d974379f5a57c8f1de89


Adding a new use case for sensitive info types

@aahill

@rlagh2 : Thanks for your contribution! The author(s) have been notified to review your proposed change.

Hi @rlagh2
Microsoft contributors need to make content contributions through the private repository so the content can be staged and validated by the current validation rules.
After you review staging and fix all validation issues, you can add the sign-off comment to let PR reviewers know that the updates are ready to be merged.
For more information, see Should I work in a private or a public repo?
Would you create a pull request in the private repo to make these updates? We'll close this PR. Thank you.


Feature: Support VB-CABLE Virtual Audio Device

Hi,
Support VB-CABLE Virtual Audio Device.
To link the main microphone to the virtual to use it instead of the main Mic.

I'm not sure I understand this, could you elaborate on how MicMute would use VB-CABLE?

Benefits:

when toggle mic for example in teams or zoom..etc (it’s appear icon mute or not) but if i used VB-CABLE as main when toggle original mic (will not appear icon mute) tricky to show you umuted but actually you are muted
I can send an audio or some sound through this VB-CABLE (for fun 😄)


[Bug]: Mocks should not inherit from classses

What happened?
This line:
https://github.com/catalystneuro/neuroconv/blob/a872ae5885d672dc72c3eb48c6c6c88ef137e9ab/src/neuroconv/tools/testing/mock_interfaces.py#L10
is problematic because we are not calling the super()__init__ in the init. This is causing problems as I am trying to push features upstream into BaseRecordingInterface. I was making the assumption that all children of that class call the class __init__, which is an assumption I should be able to make as this is best practice for OOP in Python.
Steps to Reproduce
Mocks really shouldn't me children of the classes they mock. See how I built mocks in PyNWB, e.g. here:
https://github.com/NeurodataWithoutBorders/pynwb/blob/dev/src/pynwb/testing/mock/behavior.py
this is a better way to build mocks because it doesn't violate OOP best practices.
Traceback
No response
Operating System
Windows
Python Executable
Conda
Python Version
3.7
Package Versions
No response
Code of Conduct

[X] I agree to follow this project's Code of Conduct
[X] Have you ensured this bug was not already reported?

this is a better way to build mocks because it doesn't violate OOP best practices.

You can do that in PyNWB because the signatures and __init__ behavior are the same except for different defaults
Here, we need the MockSpikeGLXNIDQInterface to behave in every way like a normal SpikeGLXNIDQInterface after initialization, but we don't have an actual .nidq.bin file so we synthesize the recording extractor in-memory
Which means the __init__ signatures don't match between the mock and the actual
What other way would you recommend around this?
I'd just say add es_key to the __init__ of https://github.com/catalystneuro/neuroconv/blob/main/src/neuroconv/tools/testing/mock_interfaces.py#L14 and then set self.es_key = es_key to mimic what the non-mock would do at that step

You can do that in PyNWB because the signatures and init behavior are the same except for different defaults

I don't see why that would prevent you from using the same strategy here.

Here, we need the MockSpikeGLXNIDQInterface to behave in every way like a normal SpikeGLXNIDQInterface after initialization

I don't see why the other approach would be a problem for this.

oh, now I get it. You can't initialize because you don't have an actual file. Hmm.


config/config.js

If you know how to fix the issue, make a pull request instead.

[ ] Before submitting your issue add logs from your MagicMirror by running command pm2 log MagicMirror

i am using raspberry pi 3 to setup this. done all the steps but in the end it says update your config/config.js  where is that? i dont see it in mmm-awesome-alexa module

config/config.js is the MagicMirror one
MagicMirror/config/config.js

oops yes.. few questions on alexa configuration:

does it have to configured for "alexa for standalone app" or "Alexa enabled device" ?
for running avs helper i provide redirect url as http://google.com just to fulfil. this gives me a code. is that the one to use in the next step in config.js ?
i did a bluetooth speaker pairing with raspberry pi. now i can hear the sound. what option i can use for the mic ? its a raspberry pi 3 B+ ?
for testing can i type as well somehow until my point 3 is resolved.

kindly advise...

any help on this plz?

Alexa enabled device

yes it is
check out this guide: https://github.com/dolanmiu/MMM-awesome-alexa/blob/master/docs/AudioSetup.md
no typing, sorry!

for point 3. yes i saw that, my question was more of what hardware do i need. i went ahead and ordered https://www.amazon.com/gp/product/B06XVMP7FF/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1
does this look ok?

Yup, that is the exact same one I've got

i got the mic today and it works fine as it can record. however, i am into a different issue now.  i am using a bluetooth speaker for audio.
To get mic working i changed the settings exactky as you mentioned above in as ~/.asoundrc and it starts working. but then the bluetooth speaker does not work any more. also what i have seen is that if i disconnet/reconnect the bluetooth speaker the settings in my .asoundrc gets wiped and come back to original they had with mic broken,
Another question: i can see when i speak to alexa it is listening and then the dot animates to show that it is responding back as well. I thought it displays the text on the screen as well. I dont see that. What i am missing?

plz advise on this one

The speaker I have no idea, its out of the scope of this module
I use the simple headphone port on my setup
Nope, it does not display text at all, the text in the video in the homepage u see is just "subtitles", it does not resemble the actual module

ok any ideas how to see the text ?

so i moved off from bluetooth speaker for now and using the audio jack for the audio. i can hear audio very well when i try opening youtube in browser. but with magic mirror i cannot hear the alexa response in my headphones.
what i am missing ?how to debug

Is the Alexa circle animating? When you say Alexa, a circle should appear
what does it say when you start MagicMirror with npm start dev? Show me the logs
It should say "Listening", "Busy", "Idle", which means its working, if not then it is another issue

yes it animates . in fact i am sure it is working as my alexa app on mobile shows the correct card.
but the issue is with the sound. i can hear sound on youtube via browser in raspberry pi but does not when alexa speaks back,

Can you check if in the modules/MMM-awesome-alexa/temp folder has any sound files?
There should be one with your voice, and one with Alexa's voice. If they're there, then I have no idea, it should work.
If it is not there, then this is a bug

Sound is out of scope of this module
Closing


fix: #21 test failed

Codecov Report

Merging #22 (5fc5e26) into main (b96c5d7) will not change coverage.
The diff coverage is n/a.

@@             Coverage Diff             @@
##                main       #22   +/-   ##
===========================================
  Coverage     100.00%   100.00%
  Complexity        15        15
===========================================
  Files              6         6
  Lines             91        91
===========================================
  Hits              91        91

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 b96c5d7...5fc5e26. Read the comment docs.


How to change the render mode?

Questions
It seems that the environment cannot modify its rendering mode. We tested two ways and both failed.
Like the new way in gymnasium library:
env = safety_gymnasium.make(env_name, render='rgb_array')
which gets
TypeError: __init__() got an unexpected keyword argument 'render'
Or the old way in gym library:
env.render(render_mode='rgb_array')
which gets
TypeError: env_render_passive_checker() got an unexpected keyword argument 'render_mode'.
Checklist

[x] I have checked that there is no similar issue in the repo. (required)
[x] I have read the documentation. (required)

We just added support for render mode and refactored part of the safety_gymnasium/safety_gym_v2 code in #5 ,  which is now used as follows,
import argparse
import safety_gymnasium

def run_random(env_name):
    env = safety_gymnasium.make(env_name, render_mode='rgb_array')
    # env.seed(0)
    obs, _ = env.reset()
    terminled = False
    ep_ret = 0
    ep_cost = 0
    while True:
        if terminled:
            print('Episode Return: %.3f \t Episode Cost: %.3f' % (ep_ret, ep_cost))
            ep_ret, ep_cost = 0, 0
            obs, _ = env.reset()
        assert env.observation_space.contains(obs)
        act = env.action_space.sample()
        assert env.action_space.contains(act)
        # Use the environment's built_in max_episode_steps
        if hasattr(env, '_max_episode_steps'):
            max_ep_len = env._max_episode_steps

        obs, reward, cost, terminled, truncated, info = env.step(act)

        ep_ret += reward
        ep_cost += cost

if __name__ == '__main__':

    parser = argparse.ArgumentParser()
    parser.add_argument('--env', default='SafetyPointGoal0-v0')
    args = parser.parse_args()
    run_random(args.env)

then,

If you use render_mode = 'human', then,

Thx, this improvement has helped me a lot.


Be able to disable zoom transition and replace it with another customized one

Added two new protocol methods to be able to disable the zoom transition, and let the navigation delegate return another customized transition animator controller.
Added a detection to check if both from/to views are available. If anyone of them is nil, we should disable the zoom transition animation.
Here's a possible situation to return nil in Swift.
func viewForZoomTransition(isSource: Bool) -> UIView? {
    if let imageView = self.imageView {
        return imageView
    }
    return nil
}

And by the way, the pan gesture recognizer will be added multiple times if we go back and forth multiple times. Just fixed that.

Hey again, thanks for contributing)
I released 0.3.0 version with those changes.

Thanks! 😊


Performance on large HTML graphs.

Opening a new issue only to get this on the radar; I am not able to prioritize this for the next two weeks as the CEO is in town an I am demoing the proof-of-concept and will be in strategic meetings. However, I will definitely come back to this...
On another (only tangentially related) thread I said:

I do have to say, for my mildly complex view of a few thousand nodes there is noticeable lag that, so far, I can only attribute to view generation and downstream. But I haven't looked into it deeply since function is a much higher priority to me.

It turns out that when I dumped and formatted the HTML my "few thousand" is closer to 8K. I have all the major details of my UI in place, now.
I am seeing a rendering time of about 500ms to render. And about 700 ms in paint. This is on Firefox 47 and may be directly related to that. Chrome seems quite spritely by comparison, though still not quite as snappy as I'd hoped. The total is about a second of latency.
I'll report back here as I make progress. The reformatted HTML is attached if you are curious. Please understand that this is still just a prototype.
Screen-80x24.txt
Also for the curious, the perf graph:

That's a doozy for sure.
But before getting into the weeds, here is something you can try that might help. The thousands of empty cells with placeholders:

could be converted to
.cell {min-width: 5px} &

This will cut your tree size by 50%. I don't know if this is workable in your case, but I would certainly strive to do this since the wins would be huge. It looks like this interface would be one where a fixed-width font can be used. In this case you could also set your table layout to fixed in the css and gain some paint performance there.
After this, i would probably turn every row into a subview and create an algorithm that returns false from the the render() of any row that has 0-diff.
I used an older gist [1] to convert the html to one large domvm template and got around 330ms of scripting and 64ms in painting (Chrome).
[1] https://gist.github.com/leeoniya/d9bfcf12a88c8261f19b

They're good ideas. It is a fixed width font and I already am using fixed on the table. I have a note to convert text runs to a single div spanning multiple columns.
At present the placeholders are for uniformity, but now it's working I am thinking they turn out to be unnecessary.
One problem I have in Chrome is that the table cells are a couple of pixels wider than the characters on their own, which makes spanning unworkable unless I can solve it. Doesn't happen on Firefox or Edge.

@leeoniya

The thousands of empty cells with placeholders ... could be converted to &nbsp	.

Attempting to do that is proving fragile because of the ambiguity between:
["td","\u00A0"] // content value

and
["td", [ "\u00A0" ]] // content tag

largely because I have program-generated sub-values that are difficult to make aware of this difference -- they just want to return an array of contents.
Is there really no good way to make the graph uniform without this ambiguity?
I know that this is probably impossible, but I am being consistently struck with the fact that an array tuple is a poor data-model for an HTML tag, which is logically:
{ tag: "xx", atr: { ... }, con: [ ... ] }

It's the fact that this is modeled as:
[ "xx", { ... }, [ ... ] ]

that causes the ambiguity with a tag and a simple text value. [ ... ] is now not clearly either an inner tag or an inner text value. That ambiguity is the sole reason I've wrapped the text values in a "div".
Am I missing something subtle?

Am I missing something subtle?

Not really. I mean, the ambiguity is there and I cannot remove it without breaking all the things (tm). There are two good ways to avoid it and maintain explicit arrays: https://jsfiddle.net/ot0jh69s/1/. You can easily do the necessary pre-checks in your hyperscript wrapper to use either of these methods.

I guess it's going to have to be new String, since concatenating to the parent array makes an absolute mess of addressing in to the structure, something I have to do.
It's so much cleaner if the content of a cell is consistently displayGrid[row][CON][col][CON][n] rather that either that or displayGrid[row][CON][col][CON+n]. Which impacts everything, where to look for content, how to add and delete content, etc.

That makes sense, just make sure you only use new String on the the first child to disambiguate the array rather than for all strings everywhere since it is 88% slower than a string literal [1]. This may not matter much in your specific case, but as always: profile, profile, profile!
[1] https://esbench.com/bench/576974dadb965b9a00965b45 (see results -> run)

make sure you only use new String on the the first child

Yes, of course.

@leeoniya : Would you be willing to consider any of the following special values to indicate "no tag, simple content"?
[ null   , "some text" ]
[ ""     , "some text" ]
[ "!text", "some text" ]

how about i add support for tagging explicit child arrays?
it will be cheap to check and easy to add with no side-effects.
enumerable in for-in loops (if you don't use them, this is cleaner)
var x = [1,2,3];

x._expl = true;

for (var k in x)
	console.log(k);

x.forEach(function(v, i) {
	console.log(i);
});

non-enumerable
var y = [1,2,3];

Object.defineProperty(y, '_expl', { enumerable: false, value: true });

for (var k in y)
	console.log(k);

y.forEach(function(v, i) {
	console.log(i);
});

how about i add support for tagging explicit child arrays?

That seems like it will be brittle in the case of duplicating existing fragments of the tree (which I am doing during post-construction manipulation for dynamic enhancements). Some that was an explicit child array will silently become not one when it's copied.
I far prefer the more obvious use of a special tag name for text. Since trying to use [null] right now fails with a type error, it seems like null is a safe and reasonably intuitive choice. What else could a "null tag name" mean, if not "no tag, thanks"?

(Completely BTW, I have duplicated the functionality of about 20K likes of Java in 1.6K lines of JavaScript, so far).

What about an option which subtly changes how the contents are processed. So for example:
["td", {_expl: true}, ["plain_text"]]

would produce:
plain_text

instead of:
<plain_text/>

and:
["td", {_expl: true}, [["span", "plain_text"]]] // note additional array

would give:
plain_text

Client code could constant the {_expl: true} to reduce extra trivial object creation.
This seems less magic/surprising than adding a marker prop to the child array, and looks like it should be comparable for performance impact.

That's a little better and would work in this specific case, though it would mean that every tag will now have properties, of at least that value.
To me, it more intuitive to express "the tag for this node is null" than "the content has explicit arrays for sub-tags" which in and of itself needs explaining in the context of why there's even an ambiguity.
The null tag results in every child being a tuple [3] where two and/or three can be omitted. Which in turn make addressing 100% consistent. Even trying the new String approach I am having to add conditionals that say, "if the first element is a String", which is already starting to get ugly.
It's also completely backward compatible so there's no gain there.
It seems like it should be just as efficient as any other proposed way of expressing a text node, which is, in the end, I think what I want to be able to do. To me what I am trying to indicate is a text node, not something about the children of the parent. I think that's the clincher -- if the parent expresses this fact there's a brittle relationship with it's children. If the node expresses this fact, it's self-contained.
This is (far?) more obvious and consistent (and succinct):
["td", [
    [null  , "plain text"]
    ["span", "more plain text"]
],["td", [
    ["hr"]
    [null  , "plain text"]
    ["span", "more plain text"]
]

than:
["td", {_expl: true}, [
    ["plain text"]
    ["span", "more plain_text"]
]],["td",
    ["hr"]
    ["plain text"]
    ["span", "more plain_text"]
]]

@tamasnet

Client code could constant the {_expl: true} to reduce extra trivial object creation.

Currently, props objects are absorbed into the vtree and mutated, so this won't work.
@lawrence-dol
I definitely want to avoid in-band signaling within strings, so "!text" and other special characters are a non-starter, but [null,...] or ["",...] may be workable.

That seems like it will be brittle in the case of duplicating existing fragments of the tree (which I am doing during post-construction manipulation for dynamic enhancements). Some that was an explicit child array will silently become not one when it's copied.

Can you provide an example (code) of how this happens? I cannot imagine a situation where an explicit array would need to morph into a unary tag. Doesn't this defeat the purpose of having it be uniform?
My reasoning behind tagging an existing array is that i'm not trying to accommodate a manually-authored-template style but rather want to provide a path for children generators to return a uniform structure that doesnt need an offset of 1/null. If you're making a generator already, then tagging the array before return is not that grotesque.

Can you provide an example (code) of how this happens?

Note: In my specific use case, I can control this, but...
I need to create the visual effect of a window panel on top of the main display. To do that I create a new div containing a table in the top-left cell with a higher z-index, spanning the rows and columns for the content, then move the cell contents into the new table sort of like this:
wdwrow.push(["td", displayGrid[row][2][col][2] ]);

With the proposed change to the td attributes, I would have to "remember" to do:
wdwrow.push(["td", {_expl: true },displayGrid[row][2][col][2] ]);

That's a brittle dependency because the parent is expressing something concrete about the formation of it's children. My hypertext wrapper could take care of this, but not everyone will be using one.
In other words, the correctness of the formation of a child node should not be dependent on a flag in its container... just as a general rule of thumb.

not trying to accommodate a manually-authored-template style but rather want to provide a path for children generators to return a uniform structure

Right. And to do that what a generator wants is to simply return a uniform 3-tuple for every node. What if the child node generation was a separate concern from the container and/or child-array? Then neither tagging the parent node or the child-array is clean.
And even machine-generated structures will be inspected for debugging and/or reference, and walked and processed. In my case every node is a 3-tuple and what I am aiming to do is to drop the individual letter-per-cell and change them to a text-run-spanning-cells, which means that many cells will now not contain a text element at at.

@leeoniya

not trying to accommodate a manually-authored-template style but rather want to provide a path for children generators to return a uniform structure

Further on this, I would like both, because in the end even the generator is code I need to write, look at and understand, and I would like a node to look consistent regardless of where I am seeing it.

@lawrence-dol why not just generate your uniform tuple templates and have a recursive post-procrssing step in the top-level render() that tags an ._expl = true flag to all child arrays before returning the final template? you would get both uniformity, no intermediate decision making and good perf.
let's leave {_expl: true } alone to reduce noise. it was a decent idea, but i'm thinking [null,...] will be the way to go as the signal...i'm actually pretty sure this already happens, is there a case when  this os not working for you?

Of the three options, I prefer this order:

Explicit node formulation: [ null, "plain text" ].
Parent node flag [ "td", {_expl: true }, [["plain text"]]].
Array tag: [ "td", [["plain text"]]._expl=true].

What if one wants HTML entities? There it seems that the explicit node is helpful:
[ null, { _raw: true }, "plain text" }

?

i'm actually pretty sure this already happens, is there a case when this os not working for you?

I'll try it again, but when I've had it in the past (accidentally and I think I tried it because it was, to me, the obvious thing), the result has been a type-error.

the whole point of an array tag would be so you dont have ["td", [["plain text"]]._expl=true] but ["td", ["plain text"]._expl=true]
right now [null, {_raw: true}, "plain text"] will not work. i think it would get flattened, the null then spliced out leaving you with a props as a child. this can be changed to work. [null, "text"] should work though.

[null, "text"] should work though.

You are right; it does. I'm pretty sure it didn't at one point, though. But I could be mistaken.
[null,null,"text"] works too, which meets my current 3-tuple uniformity requirement. I am back in business. :-)
Thanks.

(side-bar

the whole point of an array tag would be so you don't have [the first child as an array].

Then that's exactly what I don't want. I am specifically looking for uniformity in the structure so that the first node is not an exception, but doesn't have to be wrapped in a tag for that to be true.
What happens to the array after I hand it over to DOMVM is not my concern.
/)

flagging an explicit child array gives you the uniformity because every element in the array can be presumed to be a node. and you can transplant literal strings knowing they will always ve treated as nodes regardless of if they are the first child or not.
while it's not turtles all the way down, for the purpose of node removal/replacement/transplanting it is.
[null, null, "moo"] will be much more expensive because it will need to not only allocate/GC but also to flatten and splice out the nulls during processing (some of this can be optimized if we decide a null-tag subarray is always a text node).
anyways, i'll work on adding both features and you can pick the option that provides the desired tradeoffs in each case.

@lawrence-dol
So if we assume that all arrays with [0] === null are text nodes, we fail a test. Taking a trip down memory lane [1][2], we see why. The question is, how many conditions must we test that will be both performant and non-confusing?
Testing for a length == 2 or 3 and ensuring there are no sub-arrays? The rabbit hole actually goes deeper and gets more expensive since there can be getter functions to test for each array element. Only handling explicit text nodes inside of explicit child arrays (NO)?
[1] https://github.com/leeoniya/domvm/issues/50#issuecomment-206049356
[2] https://github.com/leeoniya/domvm/blob/1.x-dev/test/tests.js#L1643-L1662

@leeoniya
Ahhh, the joy that is engineering complex, yet intuitive systems. The golden rule of intuition is context, context, context.
I guess the first point is that I did indeed take your advice and no longer need the first null to be considered a null-child. I suppose "null" tags are currently working due to flattening?
I think I would consider my original expectation to be infeasible due to the imprecision of using array tuples for nodes instead of objects. With that edge-case dropped, doesn't an array with [0]==null work?
Hmmm. Would a solution that allows object nodes without requiring them be lean enough to be acceptable and would it be unambiguous, I wonder?
[ "td",[{ tag: null, con: "plain text" }]]

Then someone in my situation could use objects for all nodes:
{ tag:"td", con:[{ tag: null, con: "plain text" }] }

Along similar lines, what about making the content array one of the props?
["td", {_content: ["whatever text", ["span", "maybe some tags"]]}]

I suppose "null" tags are currently working due to flattening?

They work because all non-tag arrays gets flattened, and nulls are always removed from everywhere.

Hmmm. Would a solution that allows object nodes without requiring them be lean enough to be acceptable and would it be unambiguous, I wonder?

Perhaps, though my concern is that always testing if everything is an object may impact performance. If this were to happen, though, the signature would match the to-be-created vnode which can be absorbed: { tag:"td", body:[{ tag: null, body: "plain text" }] }. But this bypasses the object pooling that was responsible for a significant perf improvement in 1.2.4+. In this scenario, you'd want domvm to give you a hyperscript function that takes params and can re-use objects from the internal pool.
First, https://github.com/leeoniya/domvm/commit/1c761eb07c23b0ca69255a0a25a16c2db6e9f21c painlessly implements explicit array tagging...which also keeps 100% of performance.
Second, https://github.com/leeoniya/domvm/tree/explicit-text-nodes uses "" in [0] to infer that the node is text. This kind of works, but brings some other things out of the woodwork that must be tested for. For isomorphism to work, domvm merges adjacent text nodes, which requires testing (literal = cheap, else expensive). If a text node is an only child, there is no createTextNode called (it's slow), this only happens for interspersed text nodes where there is no choice. If you want complete uniformity WRT a tuple, and still be able to pass a null for props...which currently is not supported (["", null, "text..."], this must be added. Basically there's some work to do here which I am not sure is worth the benefit.
The same problems with assumed text nodes exist regarding the fact that their length must be 1-3, their props object can really only be used for _raw, they cannot have any children that are also arrays. They would have to have a structure that is a subset of domvm templates, which makes them more fragile, and the entire system less performant (almost certainly). You guys can take a stab at handling these cases, but for me explicit sub-array tagging is sufficient. I think the point about a parent controlling how children are rendered isnt accurate. You're just telling the parent how to parse its body and tagging the body container with this hint, which should always be known at the time of body generation.

@tamasnet
i would like to avoid stuffing things into props, since creating these objects is not free and iterating each of them and nulling the special props (which is done internally) becomes more expensive as more are added.

Using [null,null,"plain text"] is working fine for me.
80% to 90% of the time per host screen is in Gecko and Graphics, which suggests to me that the real low hanging fruit is in simplifying the HTML.
I am currently at 600 ms per host screen (in Firefox) and I really need to be at 250 for acceptable performance and 100 or less for great performance. Chrome is much faster (easily fast enough). Edge is similar to Firefox, but fails on one of my screens in hydrate node with:
SCRIPT5007: Unable to get property 'removed' of undefined or null reference
AppScript (176,79)
Same content works with both Firefox and Chrome.

you're at 600 ms after the  	 simplification? is this with using the [null, null, text] signature for all text nodes? if you have any did* hooks, you could try setting domvm.view.config({repaint: false}) which prevents a forced repaint before flushing the did* hook queue...but you will lose dom liveness guarantees, (which you may not need though, i dunno for your app).
unfortunately without anything to look at i cannot provide further guidance aside from generic advice to simplify your tree and do selective redraw, maybe occlusion culling, maybe ditch absolute uniformity.

SCRIPT5007: Unable to get property 'removed' of undefined or null reference AppScript (176,79)

this is pretty useless to me since i have no testcase to debug, ff and chrome work fine and all written tests pass down to ie9. please open an separate issue for this when you have more info.

you're at 600 ms after the  	 simplification?

Yes. Surprisingly, there was no noticeable difference.

is this with using the [null, null, text] signature for all text nodes?

Yes, though performance measurements in Firefox show the lion's share of the time being in the graphics and browser rendering, not in the JavaScript code.
Conversely, Chrome and Edge show 99% of the time being in redraw and an unidentified "Anonymous" function. But Chrome hardly counts as that redraw time is between 40ms and 100ms. Edge spends 1.7 seconds in redraw; but it unaccountably takes 217ms just to set the focus on the active input field.

if you have any did* hooks

None.

this is pretty useless to me since i have no testcase to debug

Of course, I was just mentioning in passing why I can't get good numbers for Edge.
What you might be able to comment on is the fact that Edge shows every single table cell being individually removed and re-added on each host screen transition. This is a bit surprising because the whole display panel is keyed and that key changes for each screen.

@lawrence-dol

whole display panel is keyed

as in, every cell has a key? if that's the case, you should consider removing the keys if possible and have a function that can locate them by position. the key lookup is basically a for loop since re-building the hash on each redraw is also expensive.
Another thing you should definitely try is to verify that domvm is doing exactly what you expect it to do (as if you were writing the DOM code by hand). There are numerous ways you could mis-structure your template that could prevent domvm from doing the optimal set of DOM operations...and I think that your quest for textNode uniformity may be preventing some significant optimizations.
I've made a tool that i use in all my tests that instruments the DOM to count how many times various operations are invoked [1] during a mount/redraw. It can tell you if you (or the lib) is doing too much. I've put together a simple example [2] that shows how burying the text nodes inside arrays kills performance by forcing "createTextNode + insertBefore" rather than a simple "textContent", and how the redraw perf takes a 2-3x hit because of it.
Open the console and look at the DOM ops and timings. Note that the resulting DOM is identical in both cases.
[1] https://github.com/leeoniya/domvm/blob/1.x-dev/test/lib/dominstr.js
[2] https://jsfiddle.net/79mvnv6p/

@leeoniya

as in, every cell has a key

Oh, no. Just the div that contains the table, as a whole.

I think that your quest for textNode uniformity may be preventing some significant optimizations

Fair enough, but it not uniformity for it's own sake; is for the sake of the code that has to manipulate the grid before it's handed off to DOMVM.
I suppose I could process out the cell arrays before I hand it off, but I think by then the damage is done. Still it could avoid the doubled up insertBefore calls (why are there two for every node?).
BTW, I've tried using DOMInstr following your fiddle and it just logs Object { _time: 0 } to the console. I wrapped the redraw call like you did:
/**/instr.start();
vm.redraw();
/**/console.log(instr.end());

BTW, I've tried using DOMInstr following your fiddle and it just logs Object { _time: 0 } to the console.

you have to either do domvm.view.config({debounce: false}); to disable rAF and make the redraw synchronous, or do start() in a willRedraw hook and stop in a didRedraw hook.

Huh. That's pretty cool.
Firefox:
_time: 113
className: 1961,
createElement: 1961,
createTextNode: 1920,
insertBefore: 3881,
nodeValue: 2,
removeChild: 3880,
setAttribute: 21,
textContent: 5,

Edge:
_time: 736,
className: 1961,
createElement: 1961,
createTextNode: 1920,
insertBefore: 3881,
nodeValue: 2,
removeChild: 3078,
setAttribute: 21,
textContent: 5

Chrome:
_time : 98
className : 1961
createElement : 1961
createTextNode : 1920
insertBefore : 3881
nodeValue : 2
removeChild : 3880
setAttribute : 21
textContent : 5

if your interface/data is mostly static, that's waaay too much stuff going on for a redraw call. usually you'd want to see a bunch of nodeValue/className maybe a few setAtteibute and textContent. if you open up the console on the dbmonster bench in domvm's repo and use "step" for 100% mutations, you'll get the idea.

No, that's not the case. Every new set of data from the host completely rewrites the UI.
However, I don't understand why there are 3880 removeChild calls and about the same insertBefore calls when there are only 1920 cells (maybe one for the content and one for the td itself, for remove and insert?); I expected that the table element itself would be deleted wholesale in one hit and then rebuilt since the key of the panel containing the table changes.
I think I'll try creating plain text nodes next and normalizing them into an array of nodes when/if I need to append something to that cell.

@leeoniya
Post-processing the tree to flatten text-nodes after I am done manipulating it, results in:
Firefox (same time):
_time: 113
className: 1960
createElement: 1960
createTextNode: 5
insertBefore: 1965
nodeValue: 2
removeChild: 1962
setAttribute: 21
textContent: 1919

Edge (worse time by 100%):
_time: 1388,
className: 1960,
createElement: 1960,
createTextNode: 5,
insertBefore: 1965,
nodeValue: 2,
removeChild: 1962,
setAttribute: 21,
textContent: 1919

Chrome (same time):
_time : 66
className : 1960
createElement : 1960
createTextNode : 5
insertBefore : 1965
nodeValue : 2
removeChild : 1962
setAttribute : 21
textContent : 1919

Despite the number of operations dropping by half for removeChild, and half the insertBefore operations becoming textContent.

I did find a 250ms delay I had hacked in and forgotten to remove, which wasn't showing up in the performance numbers, but was contributing to the overall sluggish feel. That's gone now.

if we assume, the timing is inaccurate (perhaps it is, 113 seems wrong from your prior timeline estimates anyhow), can you feel any difference or see it in the timeline? just this change should have already yielded a massive perf difference.
why are there are high removeChild counts? it has to do with the possibility of hooks needing to be fired on any deep child nodes or subviews. we can probably explicitly indicate that there are no deep hooks and have the lib kill everything in one go.
removeChild : 1962 and createElement : 1960 makes me also think that this table is in fact largely static and a lot of the cells can be reused between screens. no?

can you feel any difference or see it in the timeline? just this change should have already yielded a massive perf difference.

Yes to both. Edge is still awful, barely usable now instead of unusable.

a lot of the cells can be reused between screens. no?

Yeah - I'd forgotten about that. There are only two display "resolutions" 80x24 (1920 cells) and 132x27 (3564 cells). The cell classes, attributes and contents change, but the structure only changes when we transition from one to the other.
I still have the task of joining text runs together, which will help further since only about 10% of the cells correspond to the start text. But that requires I figure out why Chrome puts an extra pixel or so on either side of a character rendered in a table cell as compared to that same character rendered in a text string.

But that requires I figure out why Chrome puts an extra pixel or so on either side of a character rendered in a table cell as compared to that same character rendered in a text string.

try using normalize.css to get uniform behavior across browsers.

Yeah - I'd forgotten about that. There are only two display "resolutions" 80x24 (1920 cells) and 132x27 (3564 cells). The cell classes, attributes and contents change, but the structure only changes when we transition from one to the other.

you should be able to reuse the full 1920 cells across both views which would eliminate 1920 removes, 1920 creates and 1920 inserts. currently view unmounting will destroy the dom & state but there are a couple ways to have the old dom recycled.

@lawrence-dol here's the best-case naive scenario for these two table sizes (without app-specific optimizations, isolated redraw, etc) [1]
I get ~30ms switching time in FF and Chrome and sub-10ms redraw(). Edge does a lot worse with ~300ms craziness. Maybe there are some MS-specific optims, or just reducing the removeChild count could be sufficient...there's definitely some DOM op that Edge is just very slow at.
[1] https://jsfiddle.net/sr4cptjv/4/

I can replicate your results, but I can't see why my DOM structure is not differenced and yours is; indeed many of the cells are identical and should not need to be replaced.
Is it because the key to the parent has changed? But I need that change to re-init the view so that the pre-computed stuff happens only when the host-data changes. Do I need to key the table within the div?

  // this is keyed (it's the view)

 // this is not
        ...

@leeoniya
What's the principle(s) behind how DOMVM decides that a specific HTML node has changed? I seem to be able to get it to replace everything wholesale, or not at all, depending on whether I have a key (being the host data identity) on the VM root or not.
Strangely, it does always update the cells that have augmented contents added to them after the fact. But if a cell just has a text value, it's not being changed. See pics.

(* BTW, your DOMInstr is copyrighted. Do you have any objection with me lifting it verbatim into my JavaScript library for future use without a dependency on the DBMonster demo? *)

Is it because the key to the parent has changed?

yes. if the view's key/handle changes, the view and its dom gets destroyed. this is done to ensure that any unmanaged DOM state is also destroyed (focused elements, partial values in fields, custom added attrs/style/classes, etc). The reason that in my example the DOM is reused is because the view does not change its key/model/handle, (but it also never re-inits because of this).

What's the principle(s) behind how DOMVM decides that a specific HTML node has changed?

The patching process is like this:

Build new tree, this is now source of truth.
Walk new tree and old tree in parallel.
a. Check old tree in same parent/index for a compatible DOM node donor.
b. When donor is found, transplant DOM node to into new tree and patch props based oldVnode <> newVnode diff
Walk old tree and clean up/remove any non-transplanted nodes, unmount any components that have disappeared.
Force repaint, fire did* hooks.

How donor is found is based on whether it's a view or tag, but are only searched within the same parent. Views are matched by the tuple [viewFn, handle] where handle defaults to the model that's passed into the view (arg 2) else by any explicitly provided key (arg 3), including false. Tags are matched on tag type and/or node _key. This glosses over a lot of intricacies, but basically if [viewFn, handle] cannot be found in the new vtree, it is unmounted and its DOM is cleaned up.
So, how can we indicate that 2 views can be considered DOM-similar even if their identity tuples don't match? Because this is what would be needed to retain/recycle the DOM in the face of old view disappearance. One option is to ignore the key and assume that if the viewFns match, (essentially contructors), then the DOM can be similar enough. I have this kind of on the todo [1] but it only solves the matching-contructor case. If the keys change and the viewFns change, then domvm would need help.
What I could do is provide some callback by which the user could indicate if the incoming vm (or view definition) can be treated as a "similar" to the current view, which would force the old view's DOM to be recycled by returning a donor match.

(* BTW, your DOMInstr is copyrighted. Do you have any objection with me lifting it verbatim into my JavaScript library for future use without a dependency on the DBMonster demo? *)

It's MIT licensed. Though I would appreciate if you can keep the attribution there in some form, feel free to use and/modify/distribute as you see fit. It has no DBmonster dependency, the file is fully self-contained.
[1] https://github.com/leeoniya/domvm/blob/1.x-dev/src/view.js#L590

if the view's key/handle changes, the view and its dom gets destroyed.

I appreciate that there's going to subtle details here I am unaware of, but it seems to me that reinit'ing the view is orthogonal to whether the DOM structure (vs. the content) is materially different. At least insofar as I understand the nature of the key.
My present understanding is that the key governs whether the model has been updated in such a way as to require that the view be reinitialized. In my case (and OMMV) the view-init pre-calcs a bunch of stuff needed by the view which does not need to happen on every redraw, greatly reducing the per-redraw work.
Perhaps this insight indicates that the concerns of view-model changes and DOM structure have been inadvertently conflated?

I would appreciate if you can keep the attribution

Copyright and license comment retained. Thank you.

@leeoniya
A puzzling thing (to me) that remains though. If I make the view unkeyed, I can detect the data change in the view render function and do the recalc's there, returning the same structure with different content in the cells (and some cells changed with respect to classes), but that gives me the results above in my pics.
Is that because only the td elements which themselves have changed are updated? That would make sense because the classes on a cell containing fields are different from one containing only a character.

Perhaps this insight indicates that the concerns of view-model changes and DOM structure have been inadvertently conflated?

They're conflated for the purposes of ensuring that any DOM state that is added ad-hoc (rather than through domvm's templates) is destroyed when another view re-inits over the old DOM. Additionally, we need to evaluate how cheap it would be to reuse the DOM, so component similarity also needs to be taken into consideration when deciding whether different-viewFn views are cheaply compatible.

If I make the view unkeyed, I can detect the data change in the view render function and do the recalc's there, returning the same structure with different content in the cells (and some cells changed with respect to classes)

Yes, you can definitely do this (and my sample does this), but it's a hack to detect model changes from within render. I would prefer to at least provide a willUpdate hook to the vms that would be invoked when the model gets swapped so you can put your re-init/state-reset logic into that.
But even with that, it's still kind of a hack, you should be able to swap another keyed view in and have the DOM reused either by viewFn-sameness or an explicit signal like canRecycle(newView).
In your case, do both views use the same viewFn, just with different models/keys or different viewFns with different models/keys? Might be useful to have some form of OOP-like instanceof or vm.kind property to help with swappability determination.
I'm currently testing a change to the recycling algo that would do an pre-pass to mark removed views that can be DOM-reused based on viewFn sameness, but since the search needs to be exhaustive, the speed penalty may be too large.

Is that because only the td elements which themselves have changed are updated? That would make sense because the classes on a cell containing a field are different from one containing only a character.

If the view stays in place, then any template returned by render should be patched properly regardless of the needed mutations. If this is not happening try to make a reproducible testcase, it could be a bug.

In your case, do both views use the same viewFn, just with different models/keys or different viewFns with different models/keys?

It's the same view and structurally identical, except for the consideration of 80x24 vs 132x27 row/column count, with different contents. Literally the same view, but a new function since it's following the usual pattern of returning a closed-over anonymous function.

by viewFn-sameness or an explicit signal like canRecycle(newView)

I would lean towards both options, though I am not sure how you'd detect "sameness" in a way that consistent and reliable. It seems like a canRecycle hook would be perfect in this case. What would that look like?
return ["div.display-panel",{
    _hooks: {
        canRecycle          : function(vFn) { return true; }
        }
    onkeydown               : inpHandler.keyDownEvent,
    onclick                 : clkhdl,
    style                   : { zIndex: Z_DISPLAY_GRID },
    },[
    ["table.grid.C"+hstdta.dspCol(),displayGrid],
    ]];

If this is not happening try to make a reproducible testcase, it could be a bug.

I'll work on that now, it's definitely not being patched to be fully consistent with the returned view. The trick will be winnowing it down to the smallest replication, since the obvious basic case is demonstrably working.

i've pushed a willUpdate hook to 1.x-dev. it will get invoked when the model changes on false-keyed views. this should allow you to keep your render clean in persistent views and still reset internal state.
function A(vm, model) {
	vm.hook({
		willUpdate: function(vm, newModel) {
			model = newModel;
		}
	});

	return function() {
		return ["div", model.text];
	};
}

have a peek a the tests [1] to see how it works with both explicit vm.update(newModel) and implicit model swapping if the view is declarative: [View, newModel, false].
[1] https://github.com/leeoniya/domvm/commit/51cded65d60a20463089bc7ef82b6e08da9bf1cd

It seems like a canRecycle hook would be perfect in this case. What would that look like?

var hooks = {
	canRecycle: function(viewFn, model, key) {
		// ...test similarity
		return true;
	}
}

// imperative
vm.hook(hooks);

// declarative
[myView, model, key, {hooks: hooks}]

There would be some more internal tweaking to do since currently will/didUnmount fires as part of the final cleanup pass, but we would need to fire it for recycling in this case as well. willUnmount -> canRecycle -> didUnmount

@leeoniya
The willUpdate hook appears to be working, with the false key. And the problem with not updating nodes is not there.
If I omit the key, the willUpdate hook never fires which, I presume, is expected.
An screen-to-screen transition now looks like:
Firefox:

{ _time: 97, createElement: 8, createTextNode: 4, removeChild: 5, insertBefore: 12, setAttribute: 16, textContent: 10, nodeValue: 500, className: 614, value: 1 }

Chrome

{ _time : 41 className : 616 createElement : 10 createTextNode : 5 insertBefore : 15 nodeValue : 500 removeChild : 4 setAttribute : 21 textContent : 9 }

Edge

{_time: 332, className: 616, createElement: 10, createTextNode: 5, insertBefore: 15, nodeValue: 500, removeChild: 4, setAttribute: 21, textContent: 9}

Which brings Edge just into the tolerable range. Hopefully they will improve significantly by the end of the year.

The name may also be different to be more clear, maybe canDonateTo

From my (admittedly limited and outside-in) perspective, canRecyle or canReuse is much clearer. FWIW.

If I omit the key, the willUpdate hook never fires which, I presume, is expected.

this is expected, because an omitted (or null) key causes the model itself to become the key/handle (domvm opts for assumptions of model persistence, and you have to opt out of this if you have model swapping without implying view destruction).
For update to be allowed, the key must be set to something that is persistent across redraws, so..false, some fixed value (string/number), false, but the model itself.

something that is persistent across redraws

Is there a conflict if two sub-views in the same parent have the same key?

only if they also have the same viewFn [1],
but in general, they're called keys for a reason ;)
[1] https://github.com/leeoniya/domvm/blob/1.x-dev/src/utils.js#L145

By "viewFn" you mean the view-constructor, right, not the view-renderer that it returns?
function MyView(vm) {   // <= constructor
    // ...
    return function() { // <= renderer
        return ["h1","Hello"];
    }
}

right

Please let me know (here) when the canReuse (or whatever) feature is available, and I'll switch to it. But my problem is resolved.

@lawrence-dol

An screen-to-screen transition now looks like...

ah, that's more like it :) plus you can optimize this further by creating self-diffing subviews for each row. which would shave another 10-20%. i'll ping you when/if i can get canReuse implemented with negligible reconciliation overhead.
plz keep this discussion in mind for writing docs, as the model/key/handle concept [and how it affects view recycling/destruction] is probably the most thorny topic to understand in the lib.

I can't edit other peoples issues, but you should add a reference in #83 to this.

btw, DOMInstr could probably be replaced by MutationObservers in newer browsers. Though i'm not sure if it would be possible to get the needed level of detail out of them.
[1] https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver


Added new floalt light panels and roller blinds with basic control functions

Also misc devices like repeaters and open/close remotes.

Hi @Jared87 Thanks for your contribution!
I remove the "line too long" checks but some easy fixes are needed,
you can check them here: https://codeclimate.com/github/WebProject-xyz/ikea-tradfri-php/pull/67


[Backport 2.x] Fix broken osd functional test repo (#189)

Backport PR

moved constants to common folder

Signed-off-by: Riya Saxena<EMAIL_ADDRESS>
fix broken osd functionaltest Repo

Signed-off-by: Riya Saxena<EMAIL_ADDRESS>
fixing the UT's

Signed-off-by: Riya Saxena<EMAIL_ADDRESS>
fixing the UT's

Signed-off-by: Riya Saxena<EMAIL_ADDRESS>
Signed-off-by: Riya Saxena<EMAIL_ADDRESS>Signed-off-by: Riya<EMAIL_ADDRESS>(cherry picked from commit e59708146ddb77b350a9b79a465af3bd5725892b)
Description
[Describe what this change achieves]
Issues Resolved
[List any issues this PR will resolve]
Check List

[ ] Commits are signed per the DCO using --signoff

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
For more information on following Developer Certificate of Origin and signing off your commits, please check here.

Based on the error on this line, I think you may need to rebase your branch to have PR https://github.com/opensearch-project/dashboards-notifications/pull/182
https://github.com/opensearch-project/dashboards-notifications/actions/runs/8837257125/job/24272015225?pr=190#step:18:26


JSON POST not working

I just tried to add some Home Assistant toggles to HTTP Push. It failed and always gave me an error.
In order to debug the issue I tried sending the request on my computer the way you do in your code, it failed with an internal server error. Sending the JSON data as a string by adding JSON.stringify seems to fix it... Any ideas?
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
		document.body.appendChild( document.createTextNode(xhr.responseText) );
};
xhr.open("POST", "http://xxxx:8123/api/services/switch/toggle?api_password=xyz");
xhr.setRequestHeader('Content-Type', 'application/json');
payload = JSON.stringify({"entity_id": "switch.verstarker"})
xhr.send(payload);

https://github.com/skonagaya/HTTP-Push/blob/master/src/js/pebble-js-app.js#L19

You're referencing the code for PUT. The POST code is a few lines down line 42.
In the HTTP Push app, try configuring a POST with only the Endpoint URL http://xxxx:8123/api/services/switch/toggle and enter this in the JSON field {"api_password":"xyz","entity_id":"switch.verstarker"}.
The code for the POST (line 42) actually breaks out the JSON content into a query string. So in our case, it'll generate the following request URL http://xxxx:8123/api/services/switch/toggle?api_password=xyz&entity_id=switch.verstarker. And the content-type header will be application/x-www-form-urlencoded
Let me know if that was helpful.

This does not seem to work with Home Assistant... :/
Any chance real json posting will be added? Or is there a reason it is not?

It's one of the items that was on the roadmap for future release.
-Sean

@paviro Sorry about that bummer. I'll bump this up and try to have a release pushed out to fix this soon.
-Sean

Thank you Sean that would be amazing! If there is a way I can help let me know :) never done any Pebble related work yet but I worked on JS projects before.
Of topic question: Is it normal that the app has no icon on the watch?

Thanks Pav. I keep this repo up-to-date with all the releases so you're more than welcome to contribute. I tend to use pull requests to see checkout what goes into a release and what doesn't. It's hard to get motivated to support Pebble apps these days with the acquisitions and whatnot.
To answer your question, I didn't notice that there's no icon on the watch. Nice catch!

Any tips / links on how to get started with pebble development with the Linux/Mac SDK you liked? :)

Am 27.06.2017 um 18:32 schrieb Sean Konagaya<EMAIL_ADDRESS>Thanks Pav. I keep this repo up-to-date with all the releases so you're more than welcome to contribute. I tend to use pull requests to see checkout what goes into a release and what doesn't. It's hard to get motivated to support Pebble apps these days with the acquisitions and whatnot.
To answer your question, I didn't notice that there's no icon on the watch. Nice catch!
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or mute the thread.

This video is all I needed to get started. It builds a simple app from start to finish in a Linux environment. I only go back to online docs when I needed it; Most of the questions I had were answered on stackoverflow as usual.
If I can do this all over again, I'd go use Pebble.js instead of C.
Good luck!

But doesn’t pebble js use way more battery power since the views are rendered on the phone?

Am 27.06.2017 um 19:06 schrieb Sean Konagaya<EMAIL_ADDRESS>This video is all I needed to get started. It builds a simple app from start to finish in a Linux environment. I only go back to online docs when I needed it; Most of the questions I had were answered on stackoverflow as usual.
If I can do this all over again, I'd go use Pebble.js instead of C.
Good luck!
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or mute the thread.

Ah, I didn't know that. It also looks like PebbleJS has limited Watch API access. I retract my statement, C is the way to go!
I was just remembering the painfully large amount of time troubleshooting memory leaks. Segfaults are a nightmare to troubleshoot.

Didn’t read much but I think it is a small c app running on the watch and the js code running on the phone.
So if you for example press a button in your watch interface it sends the event to the phone and the phone sends back the new UI.

Am 27.06.2017 um 19:44 schrieb Sean Konagaya<EMAIL_ADDRESS>Ah, I didn't know that. It also looks like PebbleJS has limited Watch API access. I retract my statement, C is the way to go!
I was just remembering the painfully large amount of time troubleshooting memory leaks. Segfaults are a nightmare to troubleshoot.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or mute the thread.

Great news @paviro !
A new release has been pushed out to address this issue. You can now select a content-type when configuring a request. Alternatively, you can specify a custom header.

That’s awesome thank you!

Am 12.08.2017 um 04:04 schrieb Sean Konagaya<EMAIL_ADDRESS>Great news @paviro !
A new release has been pushed out to address this issue. You can now select a content-type when configuring a request. Alternatively, you can specify a custom header.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or mute the thread.

I'm glad to hear you got things working.
I also started using Home Assistant myself. I love it!


appendChild null when using modals from ember-engines

When using modals from an engine, the engine routes produces this error if {{bs-modal}} is used:
error-handler.js:436 TypeError: Cannot read property 'appendChild' of null
    at appendContainerElement (modals-container.js:413)
    at Object.initialize (modals-container.js:422)
    at ember.debug.js:4564
    at Vertices.each (ember.debug.js:2630)
    at Vertices.topsort (ember.debug.js:2597)
    at DAG.topsort (ember.debug.js:2542)
    at Class._runInitializer (ember.debug.js:4592)
    at Class.runInitializers (ember.debug.js:4553)
    at Class.ensureInitializers (ember.debug.js:4499)
    at Class.buildInstance (ember.debug.js:4513)

The host app has no issues.  Ember 2.10, Ember-engines 0.4.0

I have not worked with engines yet, unfortunately.
The null error comes from ember-bootstrap's initializer that created a
 to put the modals into. In this case application.rootElement (http://emberjs.com/api/classes/Ember.Application.html#property_rootElement) seems to be null.
Maybe this is normal when using it in an engine, I can't tell. You could try to disable the initializer by setting insertEmberWormholeElementToDom to false:
let app = new EmberApp({
        'ember-bootstrap': {
            insertEmberWormholeElementToDom: false
        }
    });

Then you would have to manually add a div like shown above at the highest DOM level, so probably into the application template. Maybe this would solve it?

Guarding against the null seems to be what works:
  if( application && application.rootElement ){
  	appendContainerElement(application.rootElement, modalContainerElId);
  }

should I submit a PR?

Would be welcome!

So far the workaround above only helps with the null issue.  Once the view displays, ember-wormhole does not shuttle the modal to the container.  I wonder how I'm going to open that issue... ;-)

Do you have a
 somewhere? Maybe in the application template of the host app?

The initializer's job is to create it, but as this is failing in your case, it should be added somewhere, otherwise the modals will be inserted into the DOM where the component is defined, which is in general not the best place (think of a parent having `overflow: hidden')

Yes I do have the div. All of the host app's modals work. I can inspect the DOM and see the container with all my other modals.  However, the modal that comes from the engine will render in place (like you mentioned above). This lead me to believe that the issue may reside in ember-wormhole

This might be the case. It looks up the wormhole destination element here: https://github.com/yapplabs/ember-wormhole/blob/master/addon/components/ember-wormhole.js#L28. Maybe it somehow cannot "see" the div of the host app, just a sub tree of the DOM? (just guessing, not sure how engines work in detail)
But you can try with a simple single wormhole:
{{#ember-wormhole to="ember-bootstrap-modal-container"}}
    Hello world!
{{/ember-wormhole}}

If that does not work, the underlying problem could indeed be in ember-wormhole itself!

Drilling down even more today it seems that
{{#ember-wormhole to="ember-bootstrap-modal-container"}}
    Hello world!
{{/ember-wormhole}}

works just about everywhere (route templates, components) but as soon as I use {{bs-modal}}, It just displays in place and ignores the wormhole in the {{bs-modal}} template.  Any Ideas?  I think I will need to head over to ember-wormhole and add an issue there.  Hopefully I cant make some headway.

Hm, strange...
The modal checks for the existence of the container element, if that is not found, falls back to "renderInPlace". This is done in a computed property here: https://github.com/kaliber5/ember-bootstrap/blob/master/addon/components/bs-modal.js#L359-L361
It might be the case that when evaluating that property for the first time, that the container does not exist yet, and afterwards the property is cached as every CP, so does not reevaluate...
Does this make any difference:
{{#bs-model _renderInPlace=false}}...{{/bs-modal}}

Nada. :-(

@simonihmig after many days of more hacking it looks as though you have to import the layout

 import layout from '../templates/components/bs-modal';

export default Ember.Component.extend({
	layout,
...

to get the engine to wormhole the modal.  I'm not too sure why the hbs for the modal lives in app while others live in addon.  Could you explain?

Hm, interesting, thanks for investigating!
There is no real reason other than putting the templates into app was the default of ember-cli in the early days when those components were created, while the newer ones use the different setup in addon (+ importing the layout).
I have refactored all of this already for the upcoming 1.0 release (see #158). But I am hesitant to change this for the current version because I am unsure if that could be a breaking change for current users which maybe rely on just overriding a compotent template by putting it into their app/templates folder.

No worries!  I have forked this addon and patched what was needed to stay compatible with my app. I'd be happy to test drive the 1.0 release and see if meets my needs. Let me know if you are interested in any PR's from my fork but otherwise I think we can close the issue.

OK. So by explicitly importing the layout into bs-modal the modals were finally running without any further issues in an engine?
If that is all it took, then I would not need a PR as this has already been done for the 1.0 branch as I said. But thanks anyway!

Ok!  Btw the initializer is still an issue and the guard I mention earlier in the thread is viable but it has the issue of not being able to get the app context from the engine. I may look into this and submit real fix once I find one. Thank you!


upgrade the xlsforms to xform parser

potentially use or upgrade xform parser with the official one from ODK.
https://github.com/uw-ictd/pyxform
https://github.com/XLSForm/pyxform
cc @hallahan thoughts?

Looks like they merged in the OSM media type, so it should be good.


Some relative links are incorrectly treated as external

Links that start with a slash are correctly treated as relative, but ones that don't are interpreted as having a hostname of the first part of the link and therefore are seen as external links by the plugin.
e.g.
/projects/ -> projects
projects/ -> projects

This is because it is not possible to unambiguously determine whether it is a path or a domain name by parsing the URL string.
There are two options for solving the problem:

Use a forward slash ("/", "./", or "../") to specify the path and domain name without the double slash.
Using a double slash to denote a domain name ("//www.exapmle.com").

The first option is used by browsers (domains without explicit protocol and double slashes) - currently used. The second option is closer to RFC 1738 and might be worth switching to.


brpc communicat mysql

Is there a good way to communicate brpc with MYSQL? Any suggestions?

just use myclient

The mysql client library is not a mult-thread safe api. The brpc was used in mult-thread and bthread, it is really need to consider the multhread.

Thread-safety is a specific problem that should be solved by the official client in principle. In common practices, you can use a connection pool (of mysql clients) to work around the issue. It's possible that brpc supports mysql's protocol directly as we've investigated before. However the priority is low and the ticket is suspended. If you're interested in extending brpc with the protocol by yourself, we could offer detailed suggestions. For example: a easier solution is to wrap libmysqlclient as part of the implementation.


ENDTOEND_ENABLE env value is not working

Hi,
First of all, thank you for this amazing exporter.
docker run -p 9080:8080 -e ENDTOEND_ENABLED=true -e KAFKA_TLS_ENABLED=true -e KAFKA_BROKERS=b-1.xxxxx.amazonaws.com:9094 vectorized/kminion:v2.2.1

But the end to end monitoring is not working because the yaml config says endToend and in the config parser, all config is converted to small case.
Would it help to change the endToEnd to endtoend ?

Hey @rjshrjndrn ,
we had the same issue in https://github.com/redpanda-data/console . We fixed this as shown here: https://github.com/redpanda-data/console/blob/a0408520cedfdd73f4f444ddbfd364faceeb0b5f/backend/pkg/config/config.go#L162-L177
Are you interested in contributing something similar in KMinion?

Sure. I'll give it a go. Thanks for the reference.

We had a similar problem. However, we wanted to overwrite values from the config file using environment variables. I submitted a fix for this in #231.
However, I was correctly pointed out by @weeco that this does not fix the problem here. The workaround he linked and suggested fixes it in any case and not only when a config file is specified using CONFIG_FILEPATH. That's why I submitted his workaround in #245.


Service Discovery Architecture uses kubedns instead of CoreDNS

Service Discovery architecture page uses kubedns instead of CoreDNS. We should change references to CoreDNS.

In addition to the diagram, we also need to modify the test on this page and replace KubeDNS with CoreDNS.

@aswinsuryan can you take a look at this?

@nyechiel yes I can.

@aswinsuryan this PR takes care of the text part: https://github.com/submariner-io/submariner-website/pull/345
You still need to update the diagrams.

@aswinsuryan this PR takes care of the text part: #345
You still need to update the diagrams.

ok, thanks for addressing it.


frontend looks not good

wants to contribute for frontend .
allow me to contribute in this project.

@Kheria1509, Sure!, I had this in my mind!


Got "ParseError: Unexpected token" while using yield

Pretty sure i did not get the concept of generators, but why the heck I get a parse error in this method?

yield Database.from('admin').insert({access_token: tokens.access_token}); ^ ParseError: Unexpected token

getToken(code) is called from within a controller.
oauth2Client.getToken responds correctly, access_token is properly logged.
Parse error
const Database = use('Database');
const google = require('googleapis');
const googleAuth = require('google-auth-library');

class GoogleCalendarService {

  constructor() {
      let OAuth2 = google.auth.OAuth2;
      this.oauth2Client = new OAuth2(CLIENT_ID, CLIENT_SECRET, REDIRECT_URL);
  }

  * getToken(code) {
    let oauth2Client = this.oauth2Client;
    oauth2Client.getToken(code, function (err, tokens){
      if (!err) {
        oauth2Client.setCredentials(tokens);
        console.log(`Save ${tokens.access_token} to database`);
        //yield Database.from('admin').insert({'access_token': tokens.access_token});
      }
    });
  }
}

Found a workaround using https://github.com/tj/co

how are you calling getToken in your controller ?

This is the controller:
'use strict';
const GoogleCalendarService = use('App/Services/GoogleCalendarService');

class CalendarController {

  constructor() {
    this.calendarService = new GoogleCalendarService();
  }

  * authorize(request, response) {
    let params = request.get();
    this.calendarService.getToken(params.code);

    const view = yield response.view('index.html');
    response.ok(view);
  }

  * index(request, response) {
    const view = yield response.view('index.html', {url: this.calendarService.generateAuthenticationUri()});
    response.ok(view);
  }

}

module.exports = CalendarController;

And here the appropriate route:
Route.get('/auth', 'CalendarController.authorize');

You will have to use the yield while using getToken since it is a generator method
yield this.calendarService.getToken(params.code);

I tried it already, but it did not work out. In this case i got the parse error:
yield Database.from('admin').insert({'access_token': tokens.access_token}); ^ ParseError: Unexpected token

Ohh got it, coz you are trying to run it inside the callback of oauth2Client.getToken and generators needs to be at the first level of * method.
I am not a big fan of callbacks and if you are interested you can make use of https://github.com/tj/node-thunkify. It will convert your callbacks to generator friendly methods. Something like this
const oauthToken = thunkify(oauth2Client.getToken)
try {
  const tokens = yield oauthToken(code)
  oauth2Client.setCredentials(tokens);
  console.log(`Save ${tokens.access_token} to database`);
  yield Database.from('admin').insert({'access_token': tokens.access_token});
}
catch (e) {
  console.log(e)
}

I'll try that... :) Thank you for your fast and helpful support bro! :+1:


Link redirection does'nt work for one link

[Enter feedback here]
The link for "Note that we won't discuss enabling guest sharing settings in this article. See Collaborating with people outside your organization for details about enabling guest sharing for different scenarios." doesn't work, there's no redirection so the visitor gets a 404 Not Found error. Other links int he same article that contain 'Office365' in the URL seems to redirect correctly.
Link in article:
https://docs.microsoft.com/en-us/Office365/Enterprise/collaborate-with-people-outside-your-organization

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: a4945844-0f8f-2691-1092-0025cc19c683
Version Independent ID: adc60afc-fb2a-dd5c-9217-6e074abc8dc0
Content: Create a secure guest sharing environment
Content Source: microsoft-365/solutions/create-secure-guest-sharing-environment.md
Product: microsoft-365-enterprise
GitHub Login: @MikePlumleyMSFT
Microsoft Alias: mikeplum

Thanks for catching that, @MacKender. I've submitted a pull request to update the link to point here.

@MacKender - Thank you for submitting feedback.
From our understanding, the issue you raised has been resolved by the author @MikePlumleyMSFT so we will close this issue.
Thank you for your contribution to make the docs better! Much appreciated!


misc: Remove lunarg_debug_marker extension

This device extensions was not completely supported in any layer. It had partial
support (intercept) in draw_state  and device_limits. This extension is being
changed and has a formal proposal in Khronos as debug_marker_ext. Removing
the existing extension since it is deprecated; once the debug_marker_ext gets
registered by Khronos, layers might want to start using the ObjectTag/ObjectName
commands to supplement error report messages in debug_report_ext. Since
debug_report_ext might get changed as part of Khronos review, don't add it yet.

Mark and Tobin:
Can you review this change to remove lunarg_debug_marker  extension?  Draw_state partially intercepted the extension  but didn't fully implement it. Device_limits had dead code partially supporting it.

Looks good to me.  +1.


Transpiler: Implement elapsed

Several issues that make this harder to fix compared to other aggregate functions:

The default unit is 1s in Flux [Doc] but 1ns in InfluxQL [Doc]
Flux preserves the _value column and add a new column elapsed while InfluxQL does not preserve the _value column. In mapFields() phase during trasnpilation, the normal routine is to rename _value to elapsed which is not correct. The trasnpiler needs to treat this function in a special way.

To clarify, the elapsed function doesn't overwrite the old column. It creates a new column that is next to the value so when we see elapsed we need a different pattern to drop the old value column and rename the new column to the value column.

Because elapsed seems to be a bit special, we should find an end to end test with elapsed and write the pure flux end to end test as a model for what to do with the transpiler.

I wrote the end to end test for elapsed right here and I can move on to trying to work on fixing the transpiler to work properly with this function today. I appreciate the discussion here, gives me a little bit more direction for this one.

What I actually ended up doing in the end to end test is just dropping the _value column. The elapsed() function produces a column with the default name elapsed and the expected values, so I didn't need to rename anything.


Use "log" crate, remove a couple feature flags

One small step on the path to stable Rust...

Thanks!
Apart from the using the log crate, I think you can have these changes merged into rustc's compiletest as well.

They won't be, since rustc can't depend on cargo crates.
So there's a lot of growing interest in compiletest (including https://internals.rust-lang.org/t/proposing-compiletest-for-the-nursery/2681), so perhaps we should allow it to deviate from rustc, and maintain it as a separate lib. What do you think?

@Manishearth Yes, but I think 272ad53 could be merged into rustc
I think we should just merge this...

Sure, sounds good to me!


Darwin guest kernel panics

TLDR: Darwin guest "panic(cpu 0 caller 0xC017DF16): timeRDTSC() calibation failed with 2 attempts"
Host Environment
Host is NetBSD 8.0, HAXM built from latest cvs checkout of /usr/pkgsrc/emulators/haxm (3bdfd1a39021df9b4dfe69e05a277e4e6456494anb2) and using wip/qemu-haxm 3.0.0 with sdl and gtk3 enabled.
Hardware is Dell Latitude E6510 with cpu0: "Intel(R) Core(TM) i7 CPU       M 640  @ 2.80GHz" and 8 GB RAM.
To Reproduce
What I ran:
qemu-system-x86_64 --accel hax -cdrom darwinx86-801.iso
What I expected:

VM booting to installer

What actually happened:

VM started bootloader
VM loaded kernel, kexts
Guest kernel panic, with error "panic(cpu 0 caller 0xC017DF16): timeRDTSC() calibation failed with 2 attempts"

I reproduced this in 7 of 7 attempts. Notably, if I remove the --accel hax option, then it works.
The only message from qemu is "HAX is working and emulator runs in fast virt mode."
Note: that ISO is from https://sourceforge.net/projects/darwinsource/ - https://sourceforge.net/projects/darwinsource/files/Darwin/8.0.1/darwinx86-801.iso.gz/download
HAXM log:
Only line that's added to dmesg when I rerun is this:
haxm_warning: hax_alloc_pages: HAX_MEM_LOW_4G is ignored

Thanks for the report. Darwin is an untested/unsupported guest for HAXM. If you are familiar with its code and want to see it boot on HAXM (which will also benefit #149), maybe you can look into timeRDTSC() and figure out why the calibration fails.

Unfortunately, I am not qualified; I'm a mediocre programmer and certainly no kernel dev. I completely understand if you prefer to view this as out of scope for the project.

I can boot this Darwin image... http://netbsd.org/~kamil/haxm/darwinx86-801-in-haxm-2019-02-18.png
But indeed this timeRDTSC() sometimes breaks on boot. It seems to be related to timing issues with apic in some guests.

OK, this is hardware issue. No hypervisor can precisely emulate TSC.
This bug has to be handled in the darwin guest kernel. Please close this report.

@krytarowski ,

No hypervisor can precisely emulate TSC.

Do you mean it impossible at fundmental level (such as stretching from Popek-Goldberg theorem) or that it is just very hard to implement?
Judging by the opposing comments about faking the TSC:
http://theinvisiblethings.blogspot.com/2006/06/introducing-blue-pill.html
... and two "Simple Anti-VMM detection" measures mentioned by Joanna a year later:
https://web.archive.org/web/20100109031241/http://bluepillproject.org/
... I guess it's possible to do so with a reasonable precission (only if complex, challenging, yes).

My source of this statement is from @m00nbsd.


chore(release): 0.0.4

Description
Release 0.0.4
License
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:

Project coverage is 100.00%. Comparing base (5a53fda) to head (7b368d9).

Additional details and impacted files
@@            Coverage Diff            @@
##              main       #33   +/-   ##
=========================================
  Coverage   100.00%   100.00%
=========================================
  Files           34        34
  Lines          733       733
=========================================
  Hits           733       733

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.


[FEAT] Add edit my profile data screen

Add new screen and update/fix some UI issues

Empty
Filled

Empty screenshot is broken :(


flit==3.7.0 breaks pre-commit hook

flit==3.7.0 was released ~3 hours ago and with that version, usort errors during installation from source. This happens for example if it is installed through a pre-commit hook. See for example this CI run.
Quick fix would be to pin
https://github.com/omnilib/ufmt/blob/0e05a95cc8700812b15c3eb71fe3f43c36d2806f/pyproject.toml#L2
to
requires = ["flit_core >=3,<3.7"]

Digging deeper, this is not a fix. The problem is that flit and flit-core are not in sync. Although we pin
https://github.com/omnilib/ufmt/blob/0e05a95cc8700812b15c3eb71fe3f43c36d2806f/requirements-dev.txt#L5
pip install flit==3.6.0 installs flit-core==3.7.0. Thus, we should add a pin for flit-core==3.6.0 into requirements-dev.txt.

Turns out, this is actually pypa/flit#530 because µfmt uses a dynamic __version__ imported from a relative module in ufmt.__init__. It looks like there's a fix for this upcoming in flit 3.7.1. I've just updated the PEP518 spec to just disallow 3.7.0, which should be sufficient, and I'll cut a point release for use with pre-commit configs.

v1.3.2 is released now.


VS Code Intellisense when input boolean value

Hi,
when input boolean value intellisense does not show the right value for true or false.

the value considered as text value.

Hi @hydhart, this seems to have been fixed in our latest master.

I was meaning our internal master for the AL extension. This is not a VS Code issue, IntelliSense only depends on your current AL extension. I believe this issue should be fixed when using the AL extension version 2.0.41872 from the August Preview.


Update dependencies to the latest releases.

Updates the versions and also adds the lock file now which should be committed to source control. Fixes issue #143.

Going to just open one PR with all of these changes.