Build error

Hi
I'm having this error trying to run the task:
FAILURE: Build failed with an exception.

* Where:
Build file '/Users/hamen/code/catapush/library/app/build.gradle' line: 364

* What went wrong:
Execution failed for task ':app:releaseNotes'.
> Error creating extended parser class: null

Line 364 is
def pdp = new PegDownProcessor()

I'm using Java8, Gradle 2.6.
Any help, please?

Hi Hamen,
I'll have a look into it, sorry for the late reply
cheers
peter

:+1:


[android] Numbers stripped from additionalData

Description:

I'm sending p2p notification similar to this:
{"p2p_notification":{"senderId":"MkCRZlyCLSd9kf3oByM5mcOSxrh1","timestamp":1559940935689}}

what the android client receives is this:
"senderId":"MkCRZlyCLSd9kf3oByM5mcOSxrh1"

Strings are working fine, but the number attribute is omitted. I can see that the data is sent correctly from onesignal website 'message report', it's something on the receiving end on Android.
iOS is working properly.
Environment

Latest version, 3.2.14 from npm
Steps to Reproduce Issue:

From one client call this:

const data = { 'senderId': sender, timestamp: unixTime, action: action }
OneSignal.postNotification('test', { string: 'abc', number: 123 }, second_client_id)

in second client listen for the notification
check values in notification.payload.additionalData.p2p_notification
I see only the string value, not the numerical

Hello,
Thank you for reporting this. Sounds like a bug. Thank you for your patience while we reproduce and look further into this issue

Hello,
Taking a closer look at your code snippet, it looks like you aren't following the correct format. It should look something like:
OneSignal.postNotification({"en": "This is the message"}, {key1:"this", key2:"that"}, "81145769-e762-4ad1-89df-02aa4ef466a1");

Please see our docs for more info

That was just a simplification of the snippet, I have the correct format (just as you shown) in my application. It's definitely a bug.

@EskelCz ,
Try putting quotation marks around the number

@rgomezp Sure, I can make it a string and then parse int, that what I use now as a workaround.
The whole purpose of this issue was to avoid this operation.

Right, thanks for bringing up the bug. We will look into getting it fixed

Just curious, what device are you testing with and what's its CPU

One of the cheapest recent Androids, Xiaomi Redmi 6A. CPU is ARM Cortex-A53

After doing some testing, it looks like this happens with P2P notifications on Android devices. Numbers only get excluded if they are 64 bit numbers in additionalData
e.g: If the number is less than<PHONE_NUMBER> (largest possible 32 bit number) but greater than<PHONE_NUMBER>854775807 (largest possible 64 bit number) then it will display correctly, with numbers > 64 bits shown in scientific notation

@rgomezp thanks for doing the testing. in my case it was indeed a 64bit number, to carry a unix timestamp from javascript's Date.valueOf(), which is precise to milliseconds.
I can probably reduce the precision to stay within 32 bits, but still, can this be changed, for the sake of consistency?

Yes. We have already made a note to change this for a future release. Thanks for finding this bug!


Extract rent-collector crate

Problem
rent_collector was moved to the SDK recently but it doesn't belong in the SDK https://github.com/solana-labs/solana/pull/35122
Summary of Changes
Put it in its own crate

Coverage keeps failing somehow but the error goes to /dev/null and there's no artifact to look at /solana/scripts/../ci/intercept.sh: Intercepting stderr into /dev/null, along side tee-d stdout. /solana/scripts/../ci/intercept.sh: command failed; please see /dev/null in artifacts

Putting this on ice since we missed the 2.0 window for breaking changes, and this can't be re-exported in solana-sdk because of circular dependencies


unable to find or specify local ledger secret

Unable to setup and configure the local_ledger configuration using docker-compose
I am very much new with the ewallet and i go through read me to run the ewallet container but i missed some env configuration of local ledger setup and unable to find it any where. can you help me or  provide setup instruction on local ledger connection and secret generation over ewallet
docker running over ubuntu 18.04
problem appears while setting secret configuration on docker-compose.yml and try to run it

Please follow https://github.com/omgnetwork/ewallet#getting-started and on step 3, after running ./docker-gen.sh > docker-compose.override.yml, the secrets should be auto populated into the docker-compose.override.yml file


feat: Strict ECDSA Signatures

Strict signatures contain the following properties:

Signatures encoded as (R,S), S is always smaller than the group order.
The signature is calculated over the hash of the public key and the message

This second property satisfies the requirements for Universal Exclusive Ownership, as defined in this paper (section 3.3).
Strict signatures are more suitable in applications where it's undesirable for s1 = s2 given s1 = sign(k1, msg1) and s2 = sign(k2, msg2). Direct ECDSA permits this condition (even if msg1 = msg2).
Description
Breaking change?
No, it's a new feature.
Example

Checklist

[x] Unit tested updated code paths
[x] Tagged 1 of @janniks or @zone117x for review

Thanks, great change. Maybe we should mention the currently implemented SIP-018 somewhere, this will stay unstrict 🤔

Added some test cases

@fpbgg I notice this PR is in draft. Is it intended for merge?


NamedModulesPlugin is no longer needed

According to the changelog for Webpack 4, NamedModulesPlugin was moved to optimization.namedModules, which is enabled by default in development mode.

Fixed in latest commit along with upgrade to vue-loader 15


uncaught TypeError: Cannot read property 'getInputRef' of undefine

Sorry how can i stop showing this warning.

Could you show me the steps to reproduce this error? @nguyenkhoi2806

i use the natural html code. Not use component in this lib.
my code like this

radio
Submit

but if i use Radio.group it works ok.

i use the natural html code. like this
<ValidationForm className="row"  ref={this.formRef}  >    <input type='radio' name='radio' required/>     <label>radio<label/>    <button>Submit</button> <ValidationForm/>
but if i use radio.group component in this lib. it work ok

Getting the same issue


Fix 2191. Is is not running all services of a docker-compose, when a …

…list of them is provided via withServices(...).

This is a really important part of functionality for people using DockerComposeContainer that is currently broken - can we continue to review this PR and have this eventually merged?

Closing, as #2922 replaces this one.

FYI, we've merged #2922 and will release soon.


Support for SASL

Description
Makes it possible to use Kafka brokers with SASL enabled, Plain or SCRAM, with or without TLS (any combination).
Resolves https://github.com/ConduitIO/conduit/issues/283.
Quick checks:

[x] I have followed the Code Guidelines.
[x] There is no other pull request for the same update/change.
[x] I have written unit tests.
[ ] I have made sure that the PR is of reasonable size and can be easily reviewed. -- If needed, I can split the PR into source+destination, plain+scram.

@hariso Please re-request a review once you want me to have a second look at the changes 👍


Add libmariadb.

Official website: https://github.com/MariaDB/mariadb-connector-c
Related package: https://github.com/Microsoft/vcpkg/tree/master/ports/libmysql
Note: libmysql and libmariadb are incompatible, I created a issue about 'incompatible' here: https://github.com/Microsoft/vcpkg/issues/164.

Hi @sdcb, I'm your friendly neighborhood Microsoft Pull Request Bot (You can call me MSBOT). Thanks for your contribution!
You've already signed the contribution license agreement. Thanks!
The agreement was validated by Microsoft and real humans are currently evaluating your PR.
TTYL, MSBOT;

Good workaround for the "conflict" issue, thanks!


Add travis to run Bassa Python Client library tests

Added Travis CI to run our Client Library unit tests.
But anyhow few tests aren't written properly and being failed due to some issues which I would hunt down in my next pull request.

Travis tests have failed
Hey @kmehant,
Please read the following log in order to understand the failure reason.
It'll be awesome if you fix what's wrong and commit the changes.
TravisBuddy Request Identifier: c01154f0-af2a-11ea-aad4-a340821c2822

Travis tests have failed
Hey @kmehant,
Please read the following log in order to understand the failure reason.
It'll be awesome if you fix what's wrong and commit the changes.
TravisBuddy Request Identifier: 1ff6bd60-af2b-11ea-aad4-a340821c2822


Refactor vertex buffer stuff

@apple502j This PR overwrites some of your recent names. I'd like to hear your thoughts.

It would be nice if there was a javadoc describing the basics of OpenGL so rendering noobs like me can map stuff properly, like uploading 😀

@enbrain Seems like this conflicted with the buffer builder PR?

I will redo this PR.


creating data of Spectrogram

Hi everyone,
i was trying to create a 3d array of data of spectrogram from the FFT module produced by sipeed m1w.
i can create a list of fft amplitude array base on the sample points.
Anyone is doing something similar to my project ? Hope we can share some experience as well.

Hi, Im doing something similar. I've created a realtime spectogram based on the FFT demo.
#68


Exactly-once message propagation.

Not mandatory for release.
Syntax:

 0<2 implies that Node 2 bootstrapped with Node 0.
0<=2 implies that Node 2 sent a message to Node 0.

Say we have a setup 0<1 + 1<2. Proxying means: 0=>1 + 1=>2. Node 0 sends a message to Node 1 who notices the request to have the message proxied/propagated to  Node 2.
To do this, some requirements need to be done:

If we have 1000 nodes, we don't want to redundantly keep having nodes proxy a single particular message multiple times. To do this, our message keeps track of nodes that have already been proxied through via. a space-efficient data structure (Bloom/Cuckoo Filter).
We have a routing table from Kademlia. We can use this to our advantage, as XOR'ing the proxy target node ID with our own node ID will give us the bucket ID filled with nodes most likely closest to the target node. Hence, if the target node is not in our list of nodes, we broadcast and have the closest nodes proxy the message forward. If the target node is in our list of nodes, just send the message directly to it.

Perhaps FindNode + a hop counter in the msg for tuning spread

Hi! Has anyone implemented this yet? We are using Noise for our network, and it'd be helpful to have this feature.
Also, I noticed the given Broadcast(Async) method broadcasts to peers closest to the node itself only, does that mean Noise does not support global broadcasting (gossiping) right now?

I am curious about how this is done in modern Wavelet. When Transactions are gossiped through the network, is it possible for a node to receive the same data several times?


SSLError

Please type any relevant information here
Trace Log

Traceback (most recent call last):
  File "C:\Users\netlfm-work\AppData\Roaming\FlowLauncher\Plugins\ChatGPT-1.0.3\lib\urllib3\connectionpool.py", line 700, in urlopen
    self._prepare_proxy(conn)
  File "C:\Users\netlfm-work\AppData\Roaming\FlowLauncher\Plugins\ChatGPT-1.0.3\lib\urllib3\connectionpool.py", line 996, in _prepare_proxy
    conn.connect()
  File "C:\Users\netlfm-work\AppData\Roaming\FlowLauncher\Plugins\ChatGPT-1.0.3\lib\urllib3\connection.py", line 369, in connect
    self.sock = conn = self._connect_tls_proxy(hostname, conn)
  File "C:\Users\netlfm-work\AppData\Roaming\FlowLauncher\Plugins\ChatGPT-1.0.3\lib\urllib3\connection.py", line 504, in _connect_tls_proxy
    socket = ssl_wrap_socket(
  File "C:\Users\netlfm-work\AppData\Roaming\FlowLauncher\Plugins\ChatGPT-1.0.3\lib\urllib3\util\ssl_.py", line 453, in ssl_wrap_socket
    ssl_sock = _ssl_wrap_socket_impl(sock, context, tls_in_tls)
  File "C:\Users\netlfm-work\AppData\Roaming\FlowLauncher\Plugins\ChatGPT-1.0.3\lib\urllib3\util\ssl_.py", line 495, in _ssl_wrap_socket_impl
    return ssl_context.wrap_socket(sock)
  File "ssl.py", line 500, in wrap_socket
  File "ssl.py", line 1040, in _create
  File "ssl.py", line 1309, in do_handshake
ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:1125)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\netlfm-work\AppData\Roaming\FlowLauncher\Plugins\ChatGPT-1.0.3\lib\requests\adapters.py", line 489, in send
    resp = conn.urlopen(
  File "C:\Users\netlfm-work\AppData\Roaming\FlowLauncher\Plugins\ChatGPT-1.0.3\lib\urllib3\connectionpool.py", line 787, in urlopen
    retries = retries.increment(
  File "C:\Users\netlfm-work\AppData\Roaming\FlowLauncher\Plugins\ChatGPT-1.0.3\lib\urllib3\util\retry.py", line 592, in increment
    raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='api.openai.com', port=443): Max retries exceeded with url: /v1/chat/completions (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1125)')))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\netlfm-work\AppData\Roaming\FlowLauncher\Plugins\ChatGPT-1.0.3\lib\flox\launcher.py", line 44, in run
    results = request_method(*request_parameters) or self._results
  File "C:\Users\netlfm-work\AppData\Roaming\FlowLauncher\Plugins\ChatGPT-1.0.3\lib\flox\__init__.py", line 132, in _query
    self.query(query)
  File "C:\Users\netlfm-work\AppData\Roaming\FlowLauncher\Plugins\ChatGPT-1.0.3\plugin\main.py", line 99, in query
    answer = self.send_prompt(prompt, system_message)
  File "C:\Users\netlfm-work\AppData\Roaming\FlowLauncher\Plugins\ChatGPT-1.0.3\plugin\main.py", line 49, in send_prompt
    response = requests.request("POST", url, headers=headers, data=data)
  File "C:\Users\netlfm-work\AppData\Roaming\FlowLauncher\Plugins\ChatGPT-1.0.3\lib\requests\api.py", line 59, in request
    return session.request(method=method, url=url, **kwargs)
  File "C:\Users\netlfm-work\AppData\Roaming\FlowLauncher\Plugins\ChatGPT-1.0.3\lib\requests\sessions.py", line 587, in request
    resp = self.send(prep, **send_kwargs)
  File "C:\Users\netlfm-work\AppData\Roaming\FlowLauncher\Plugins\ChatGPT-1.0.3\lib\requests\sessions.py", line 701, in send
    r = adapter.send(request, **kwargs)
  File "C:\Users\netlfm-work\AppData\Roaming\FlowLauncher\Plugins\ChatGPT-1.0.3\lib\requests\adapters.py", line 563, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='api.openai.com', port=443): Max retries exceeded with url: /v1/chat/completions (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1125)')))

Thanks for the feedback! Could you share with me the version of Python you are using? You can find this in Settings > General > Python Path. It should look something like: "Python Path: C:\Users[username]\AppData\Local\Programs\Python\Python310\pythonw.exe"

Thanks for the feedback! Could you share with me the version of Python you are using? You can find this in Settings > General > Python Path. It should look something like: "Python Path: C:\Users[username]\AppData\Local\Programs\Python\Python310\pythonw.exe"

I got the similar error and the  Path is "C:\Users[username]\AppData\Roaming\FlowLauncher\Environments\Python\PythonEmbeddable-v3.8.9\pythonw.exe" So is it because I'm using the wrong version of python?

@Redbean3 thanks! @Redbean3 or @netlfm is one of you behind a proxy by any change?
yep, I set http server: <IP_ADDRESS> with port 4780


[FEATURE] Separate globally enabling player tweaks and enemy tweaks

Feature
The new tech really fits in well with the base game, so I want to be able to play around with it in other difficulties while keeping the ultrapain in the designated ultrapain difficulty.
Usage
In the "Global Difficulty Tweaks", instead of just one tickbox you'd have one for enemy tweaks and one for player tweaks.
Extras
Also, maybe add more memes? Like parries playing the "daaaaaaaayuuum" soundbyte?

For now the easiest way would be to untick enemy tweaks before playinhg other difficulties. It makes sense though so thinking of separating the field.
For the memes, I need more info. I don't know it was not even supposed to be in the plugin but funny


ValueError: cannot convert float NaN to integer

Occurs on calling visualize when bounding boxes have nan values:
from IPython.display import Image, display
display(ds.visualize.ShowBoundingBoxes(5))

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
/Users/robin/Documents/GitHub/oil-storage-tank/pylabel.ipynb Cell 7' in <cell line: 2>()
      [1](vscode-notebook-cell:/Users/robin/Documents/GitHub/oil-storage-tank/pylabel.ipynb#ch0000002?line=0)[ from IPython.display import Image, display
----> ]()[2](vscode-notebook-cell:/Users/robin/Documents/GitHub/oil-storage-tank/pylabel.ipynb#ch0000002?line=1)[ display(ds.visualize.ShowBoundingBoxes(5))

File ~/Documents/GitHub/oil-storage-tank/venv/lib/python3.9/site-packages/pylabel/visualize.py:34, in Visualize.ShowBoundingBoxes(self, img_id, img_filename)
     ]()[32](file:///Users/robin/Documents/GitHub/oil-storage-tank/venv/lib/python3.9/site-packages/pylabel/visualize.py?line=31)[ for index, row in df_single_img_annots.iterrows():
     ]()[33](file:///Users/robin/Documents/GitHub/oil-storage-tank/venv/lib/python3.9/site-packages/pylabel/visualize.py?line=32)[     labels.append(row['cat_name'])
---> ]()[34](file:///Users/robin/Documents/GitHub/oil-storage-tank/venv/lib/python3.9/site-packages/pylabel/visualize.py?line=33)[     bboxes.append([int(row['ann_bbox_xmin']),int(row['ann_bbox_ymin']),int(row['ann_bbox_xmax']),int(row['ann_bbox_ymax'])])
     ]()[36](file:///Users/robin/Documents/GitHub/oil-storage-tank/venv/lib/python3.9/site-packages/pylabel/visualize.py?line=35)[ img_with_boxes = bbv.draw_multiple_rectangles(img, bboxes)
     ]()[37](file:///Users/robin/Documents/GitHub/oil-storage-tank/venv/lib/python3.9/site-packages/pylabel/visualize.py?line=36)[ img_with_boxes = bbv.add_multiple_labels(img_with_boxes, labels, bboxes)

ValueError: cannot convert float NaN to integer]()

I guess this occurs as I have images with zero annotations

Yes, I think you are correct. I did some work to make the core import and export work for images with zero annotations but I did not test all of the features. I will try to fix it in the next update. The simplest solution would be to just show the image with no boxes.

Hi @robmarkcole , I released v 0.1.34 which should fix the error when viewing the bounding boxes if there are no annotations.

This issue seems to occur when exporting datasets containing images with no annotations

@Interpause are you hitting a problem when exporting? Or when drawing the bounding boxes?
Would you be able to share your dataset that repos the problem?

The problem is during exporting. When importing a Coco dataset (data_val = importer.ImportCoco(path)) that contains images with no annotations, data_val.df.cat_id appears to be the string nan (not np.nan) for the unannotated images. I got around it by filtering via data_val.df = data_val.df[data_val.df.cat_id != 'nan'].

Hello @Interpause. Yes there can be issues with images that don't have an annotations, but I fixed some bugs and verified that it worked with my test dataset. Would you be able to share your dataset that has the problem?
You have a good workaround but I would like to make it work for images that don't have annotations because that is a valid way to make a dataset for training.

Working on this PR which should fix the issue https://github.com/pylabel-project/pylabel/pull/44

Hello @Interpause. I have release v0.1.36 that should fix the issue https://github.com/pylabel-project/pylabel/releases/tag/v0.1.36
Could you give it a try? Thanks for identifying the root cause of the issue. The nan values should not be converted to strings any longer.

yup it works. thanks!


Manually Defender Installation in Linux dosent support Amazon Linux 2023

Docs path: [microsoft-365-docs]/[microsoft-365]/[defender-endpoint]/linux-install-manually.md (https://github.com/MicrosoftDocs/microsoft-365-docs/tree/public/microsoft-365/security/defender-endpoint/linux-install-manually.md)
Manually Defender Installation in Linux doesn't support Amazon Linux 2023
from docs:
[RHEL and variants (CentOS, Fedora, Oracle Linux and Amazon Linux 2)]
In the RHEL family, it was only supported until Amazon Linux 2 without Amazon Linux 2023.
May I know which repo/Linux version/link should I use for Amazon Linux 2023?
Has Azure defender supported Amazon Linux 2023 yet?
Thx

@Dansimp Please help us in resolving this issue. Thanks

To make it easier for you to submit feedback on articles on learn.microsoft.com, we're transitioning our feedback system from GitHub Issues to a new experience.
As part of the transition, this GitHub Issue will be moved to a private repository. We're moving Issues to another repository so we can continue working on Issues that were open at the time of the transition. When this Issue is moved, you'll no longer be able to access it.
If you want to provide additional information before this Issue is moved, please update this Issue before December 15th, 2023.
With the new experience, you no longer need to sign in to GitHub to enter and submit your feedback. Instead, you can choose directly on each article's page whether the article was helpful. Then you can then choose one or more reasons for your feedback and optionally provide additional context before you select Submit.
Here's what the new experience looks like.
Note: The new experience is being rolled out across learn.microsoft.com in phases. If you don't see the new experience on an article, please check back later.
First, select whether the article was helpful:

Then, choose at least one reason for your feedback and optionally provide additional details about your feedback:

Article was helpful
Article was unhelpful

Finally, select Submit and you're done!


DRS docs break with CSP that blocks inline scripts

(See https://github.com/mozilla-services/push-dev-dashboard/issues/181 for my context)
In my settings.py, I have:
...
ROOT_URLCONF = 'dashboard.urls'
...
INSTALLED_APPS = [
    ...
    'rest_framework',
    'rest_framework_swagger',
    ...
]
...

In my dashboard.urls I have:
urlpatterns = [
    ...
    url(r'^api/docs/', include('rest_framework_swagger.urls')),
    url(r'^api/v1/', include('api.urls')),
    ...
]

urlpatterns += i18n_patterns(
    # our app urls
    url(r'^$', dashboard_views.Home.as_view(), name='home'),
    url(r'^push/', include('push.urls')),
    url(r'^accounts/login/$', dashboard_views.Login.as_view(), name='login'),
)

And in my api.urls I have:
...
router = routers.DefaultRouter()
router.register(r'domains', DomainAuthorizationViewSet)
router.register(r'push-apps', PushApplicationViewSet)

urlpatterns = [
    url(r'^', include(router.urls))
]

But, when I go to my /api/docs/ url I don't see any of the endpoints registered in api.urls?

And I can't tell where the "example.com" value is coming from? My site domain name and display name are both "<IP_ADDRESS>:8000".

I at least found the source of my problem ...
I'm using CSP to prevent inline scripts, and the django-rest-swagger app uses inline scripting to show api endpoints.

Starting a fix branch here: https://github.com/groovecoder/django-rest-swagger/tree/remove-inlines-434
So far I've removed the inline <script> tags, but I still need to remove the inline styling.

I'm trying to fix the last of the JS to work without inline <script> tags. How do I generate swagger-ui.min.js?

Inline scripts have been removed in #470


unable to set the colour on the polyline

Issue description
setting the strokeColor on the polyline dosnt seem to work
Steps to reproduce and a minimal demo of the problem
using the plnkr
http://plnkr.co/edit/YX7W20?p=preview
add this code
<sebm-google-map-polyline [strokeColor]="D2691E" [strokeOpacity]="1" >
<sebm-google-map-polyline-point  *ngFor="let m of markers" [latitude]="m.lat" [longitude]="m.lng">

What steps should we try in your demo to see the problem?
Current behavior
line stays black
Expected/desired behavior
brown color as per the strokeColor

please fork the plunk and add the code so that we can all see what you are trying to do.
that will make it simpler to examine and test.

Hi figuerres,
here's the example http://plnkr.co/edit/sGr5IrxxrrXHY7DLndHN?p=preview
just wanting to change the polyline colour

@RealZimboGuy You need to change [strokeColor]="D2691E" to [strokeColor]="'#D2691E'".
[strokeColor]="D2691E" means passing a variable named D2691E to input strokeColor. This value is undefined, so the color never changes. You need to pass in a string instead (notice the '). You also missed the prefix # for hex colors.

great, thanks for the help, forgot the single quotes


Investigate using Newtonsoft.Json 10 with generated code and republish packages

Description

[ ] Update minimum version in clientruntime to NewtonSOft.Json 10 (private package)
[ ] Update ClientRuntime depenedncy (and newtonsoft.json dependency)in AutoRest acceptance tests and verify no issues with Newtonsoft.Json 10
[ ] Update ClientRuntime tests to use newtonsoft.Json 10 and verify no issues
[ ] Update management packages and tests to Newtonsoft.Json 10 and verify no issues
[ ] Send notice to customers about republishing packages with Newtonsoft.Json 10
[ ] Move packages into PowerShell and verify no issues
[ ] Publish runtime packages with updated Newtonsoft.Json minimum dependency
[ ] Update management package withupdated Newtonsoft.Json 10 depednency (add explicit depednecy to package)
[ ] Publish management packages

Cost: 10

This workItem has been put off for future.
Closing it for now.


Weird Issue with Weighted Sampler and Travis

Hi guys. I have encountered an issue with the Travis checker that I for some reason can't replicate on my machine. I would like some help, if possible.
I recently rewrote the implementation of the genetic algorithm. The PR is #501. The code for the core algorithm was implemented (mostly, I did make some changes) by someone else before me. Here's the code (I blanked the arguments, since it's too long for Github comments):
def genetic_algorithm( ... ):
    """[Figure 4.8]"""
    for i in range(ngen):
        new_population = []
        for j in range(len(population)):
            fitnesses = map(fitness_fn, population)
            p1, p2 = weighted_sample_with_replacement(2, population, fitnesses)
            child = reproduce(p1, p2)
            if random.uniform(0, 1) < pmut:
                child = mutate(child, gene_pool)
            new_population.append(child)

        population = new_population

        if f_thres:
            fittest_individual = argmax(population, key=fitness_fn)
            if fitness_fn(fittest_individual) >= f_thres:
                return fittest_individual

    return argmax(population, key=fitness_fn)

I would like to bring your attention to the following lines:
fitnesses = map(fitness_fn, population)
and
p1, p2 = weighted_sample_with_replacement(2, population, fitnesses)
With these lines we pick randomly the most fit individuals. This line is called in each iteration. As it is right now there are no issues. Since though population doesn't change inside each generation, I thought it would be best to put the line outside the nested for loop, like this:
for i in range(ngen):
    fitnesses = map(fitness_fn, population)
    new_population = []
    for j in range(len(population)):
        p1, p2 = weighted_sample_with_replacement(2, population, fitnesses)
        ...

That way we save the time it takes to map fitnesses. When I ran the above in my machine, no errors are thrown.  Does anyone have any idea why that's happening? I find it weird that it fails when I put the line outside the nested loop and passes when it's inside, since it doesn't make much of a difference, right?
Any help is appreciated.

For the record, I am using a very old machine and it's quite probable some dependency is not up to date. I'm asking to make sure there is not something wrong with Travis.

Updated my system and I caught the error. Closing this, there is nothing wrong with Travis.

Just noting a possible improvement on the code you posted: there's a function utils.weighted_sampler that could be used to hoist some of the work done by weighted_sample_with_replacement, to go along with the hoisting of calculating the fitnesses. After setting the fitnesses you'd also create the sampler; then inside the loop you'd call that sampler. This would speed genetic_algorithm up some, at the cost of making it a little harder to follow.
I don't remember why I wrote the code without any of the hoisting -- maybe it was meant to stay closer to the pseudocode? (Which don't have handy to look at just now.)

Thanks a lot for the suggestion, it sped things up a lot. Also, I believe it is even closer to the pseudocode now.
This is the new code:
def genetic_algorithm( ... ):
    """[Figure 4.8]"""
    for i in range(ngen):
        new_population = []
        fitnesses = map(fitness_fn, population)
        random_selection = weighted_sampler(population, fitnesses)
        for j in range(len(population)):
            x = random_selection()
            y = random_selection()
            child = reproduce(x, y)
            if random.uniform(0, 1) < pmut:
                child = mutate(child, gene_pool)
            new_population.append(child)

        population = new_population

        if f_thres:
            fittest_individual = argmax(population, key=fitness_fn)
            if fitness_fn(fittest_individual) >= f_thres:
                return fittest_individual

    return argmax(population, key=fitness_fn)

Yep, that looks like just how it was meant to be used. I'm glad to hear it's effective.


Front-end doesn't implement new number operation typing rules completely.

Example:
import "dart:async";
T id<T>(T value) => value;

main() async {
  FutureOr<int> x = 1 + id(1);  // Should work, gives error.

  // Checking it!
  FutureOr<int> y = 1 + id(1)..checkStaticType<Exactly<int>>();
  FutureOr<int> z = 1 + contextType(1)..checkStaticType<Exactly<int>>();
}

extension <T> on T {
  void checkStaticType<R extends Exactly<T>>() {}
}
typedef Exactly<T> = T Function(T);
T contextType<T>(Object? o) => o as T;

When compiling this in nullsafety.dartpad.dev, there is a type error at 1 + id(1). It appears the context type of id(1) is num, not int as required by the "new number typing".
This only appears to happen when the context type of the + expression is FutureOr<int> (and likely any number of FutureOr<FutureOr<...<int>...>>s). It works correctly if the context type is int.
The analyzer does not give any warnings or errors (except unused variables).
When I add the ..checkStaticType<Exactly<int>>() above, the front end complains, and if I change it to Exactly<num>, it stops complaining, so the type is definitely num. Ditto for checking the context type (the contextType function captures the context type and makes it the static type of the expression).  That error looks curious, though, because it refers to the type variable of contextType, not its value.

Do you know in what sort of time frame I can expect the fix to be available in google3?

Do you know in what sort of time frame I can expect the fix to be available in google3?

I think within a day or two. Rolls are happening approximately daily again.

I think within a day or two. Rolls are happening approximately daily again.


Many layout and scaling adjustments inside WebView

Resolves #2559
Scaling works automatically on Android but on iOS it needs some work.

Ready for review. Commits are independent of each other.

Thanks @borisyankov !

font-size: 14px;

font-size: 0.9em;

Why not 0.83333em?
 body {
+  font: ${font};
   font-family: sans-serif;
   line-height: 1.4;
   margin: 0;
   width: 100%;
   max-width: 100%;
-  font-size: 15px;
 }

font is a shorthand for several different properties, right?
https://developer.mozilla.org/en-US/docs/Web/CSS/font
Yeah, looks like it.
I'm not 100% sure how this interacts with the font-family line just after it -- I'd guess that the latter overrides this? But I'd want to know.
What happens if you just delete the font-size line?
The last commit also does a number of other things, which should be their own commits so they can be explained in commit messages.

Make border-radius values consistent and scalable

Oh, backing up: do we want to be making all our px measurements in terms of em instead? My sense (but I'm not certain of this) is that that is not the standard or recommended practice -- that that's what we should do for everything that's directly related to the size of text, but other design elements should be in px.
Note that px already mean logical pixels, not real physical pixels -- at least I sure hope they mean the same px we have on the RN side -- and that there are separate system settings where the user can adjust the size of a logical pixel.

Why not 0.83333em?
Do you mean 0.93333em = 14 / 15 ?
Because 14 was an arbitrary number 'a bit less than 15'. 0.9 is the same, while 0.93333 suggests too much specificity (that isn't there)

Oh, backing up: do we want to be making all our px measurements in terms of em instead? My sense (but I'm not certain of this) is that that is not the standard or recommended practice -- that that's what we should do for everything that's directly related to the size of text, but other design elements should be in px.

That is actually quite a recommended practice on the web, if you want to scale things more easily. More often than not, you do want to scale everything proportionally, whether because of a setting or maybe because of responsible design. Often rem is even better, as nested ems can mess up things, and the case we want to scale twice is way rarer than scaling once from the root (rem is newer than em but still quite old and supported on all browsers we care about)

Note that px already mean logical pixels, not real physical pixels -- at least I sure hope they mean the same px we have on the RN side -- and that there are separate system settings where the user can adjust the size of a logical pixel.

Pixels in WebView work exactly as they work on the web. They are totally physical pixels, though sometimes it is a scale of 2x, 3x or some fraction, depending on the zoom.
The power of using em/rem we can say body: 32px and scale everything twice proportionally.

font-family: sans-serif; will indeed mess up with font and I had it removed previously. Doing this now.

Rebased and removed the font-family line.

That is actually quite a recommended practice on the web, if you want to scale things more easily.

Hmm. I guess here's an example on Android: go into system settings -> Accessibility -> Font size, and move it to "Largest".
Elements like the app bar, its icons, and the switch controls in settings don't change size at all, while the text labels do.
That fits with the upstream advice for Android:
https://developer.android.com/training/multiscreen/screendensities

When defining text sizes, however, you should instead use scalable pixels (sp) as your units (but never use sp for layout sizes). ... For example, when you specify spacing between two views, use dp ... When specifying text size, always use sp[.]

Same results when I try a similar experiment on iOS.
So I think we should probably match the platform's behavior.

They are totally physical pixels, though sometimes it is a scale of 2x, 3x or some fraction, depending on the zoom.

That sounds like exactly what I mean by "logical pixels, not real physical pixels". :stuck_out_tongue: I'm not actually sure what you mean when you say "totally physical pixels" but they can have a scale factor.
There's some background here that I wrote a few months ago:
https://github.com/zulip/zulip-mobile/blob/master/docs/background/layout.md

Dimensions in React Native are written without explicit units, and are implicitly in units of logical pixels, which we abbreviate px. (Android calls this a dp or "dip"; iOS calls it a "point".)  One logical pixel corresponds to some number of real physical pixels on the display. [...]

For the normal Android and iOS SDKs, and for React Native which follows them, that scale factor is rarely 1 -- that would be a very low-density display today.

The ratio of physical pixels to a logical pixel may be an integer like 1, 2,
or 3 (the default settings on many devices), or another value like 2.61 or
3.5 (the defaults on the iPhone 6+/7+/8+ and the Pixel 2 XL respectively),
or even 4.5 (the largest setting on a Pixel 2 XL).

This handy guide refreshes me on the parameters of that -- the iPhone 3GS was the last iPhone where the scale factor was 1.
The thing I don't know is whether the px inside a WebView matches the px in React Native. (Which I do know matches the dp or "point" in the underlying platform.)

I'm still a bit confused by the last commit. It seems like it's doing two pretty different things -- we may well want both of them but it seems like the reasons would be pretty separate:

Stop setting font-size; take whatever the browser's default is.
Switch from font-family: sans-serif to either font-family: -apple-system-body or font-family: Roboto, Droid Sans, depending on platform.

In particular both of these values look like they're for font-family, so the switch from saying font: to font-family: looks like it shouldn't mean anything.
Again:

What happens if you just delete the font-size line?

We actually are. The only UI element that should not scale is the #scroll-bottom button, everything else is 'text'.

Well, I asked this question in the first place on the "border-radius" commit. That includes changes to selectors like .avatar img and .loading-avatar. Those don't sound like text to me. Can you explain more what you mean?

For example, on a desktop with lower rez display they are very likely exactly the physical pixel size, and they originated as such. Only after a lot of years, they started having a multiplier added to them.

Hmm OK but we were talking about mobile. You did say "the web" but it did not occur to me that by that you might mean desktop. The web exists just as much on mobile as it does on desktop -- I think a lot of websites see more traffic from mobile than from desktop these days.

In comparison, the size on mobile almost immediately started as a 'not an actual pixel'.

This isn't true, though. As I said above, on the iPhone up through iPhone 3GS (so until iPhone 4, announced in 2010), a logical pixel is (normally) the same as a physical pixel. I believe the same was typically true for Android devices in the same period.
There is a feature to change the scaling -- "Zoom" I think Apple calls it -- but I don't think it's commonly used. And it doesn't represent anything that desktop web doesn't have -- your browser has zoom with Ctrl-+ and Ctrl--.
Anyway. This is all rather afield from the pertinent question.

It don't either, but at least comparing a screenshot of the a 32px in RN 'Send' button and the 32px in WebView Scroll to bottom button, they are the same pixel size in iOS.

That's helpful, thanks.
Here's confirmation in Android docs:
https://developer.android.com/guide/webapps/targeting

The WebView class and most web browsers on Android convert your CSS pixel values to density-independent pixel values

For iOS, the relevant bit appears to be the magnification property here:
https://developer.apple.com/documentation/webkit/wkwebview
which defaults to 1.0, and which isn't mentioned in the RN source. Presumably that means a scale factor relative to the device's normal notion of a pixel, in which case that means it behaves as expected on that side too.

That includes changes to selectors like .avatar img and .loading-avatar. Those don't sound like text to me.

To me, they feel not really like 'text' but they are part of the 'document'. They are not UI elements.
On the other hand some apps I tested do not scale their avatars - Slack, Disqord. The new FB Messenger actually does not scale anything!

I am more willing to agree avatars should not scale inside the WebView, but I don't like that because we will break the consistency between iOS and Android. Android scales everything without even this PR, iOS does not scale anything. In this context it might make sense to make the scroll to bottom button em sized so it is the same for iOS.

After some more testing on iOS/Android with different sizes... Android also behaves similarly with regards to px so it makes sense to turn the avatars to pixels. Will do that.

Merged the first three commits -- thanks! I believe the next few are WIP.

 Most of them are marked WIP, so it'd be very helpful if you'd go through them and make whatever further revisions you think they need, and add explanations of what they're doing and why.
Of the two non-WIP commits:

avatars: This code change looks good!
The commit message doesn't match, though -- it says 35px seems good, but the code says 40px. Would you update the commit message so it reflects your thinking?
(Also, the summary line just says "not scale with font" but the actual change makes the avatars a good bit larger at baseline, which is a more conspicuous change. "webview: Make avatars bigger, and not scale with font" would be good.)

In the "use system fonts" commit, my comment above about the two different things it's doing is the main question I have.

This is ready for review.
I have left a few commits that are 'WIP' and are not essential to implementing the issue, but are good-to-have.
I have split the commit that was doing two things, the 'font-size' and system size change. Only the font-size change turned out to be essential, the other one I am experimenting with and might leave out.
The commits are mostly independent.

Thanks @borisyankov ! This looks very helpful.
f7b1a0cf3 webview: Use 'rem' instead of 'em' for styling sizes

Makes sense, thanks! And thanks for the helpful discussion and the links.

The commit message says this changes all our em units to rem, but that doesn't seem to be true:

$ rg '[0-9]em' src/webview/css/css.js
110:  padding: 0 1em 1em 4rem;
205:  border-top: 1em solid transparent;
206:  border-bottom: 1em solid transparent;
207:  border-left: 1em solid green;
263:  margin: 1em auto;
293:  margin: 0.2em 0 0 0;
318:  margin: 0.4em 0.4em 0.2em 0;
329:  margin: 0.25em 0;
333:  padding: 0.25em 0.5rem;
350:  margin: .25em 0.5rem .25em 0;

(That's from right after this commit. There are also some matches at the tip of the branch, too.)
Should those also be changed the same way?

The commit message asserts that "in our use" rem and em are equivalent. This is a key fact to understanding the reasoning of this commit, so thanks for mentioning it. I think one more step of the reasoning would be quite helpful too, which is: why is it true that in our use rem and em are equivalent? Or: how did you determine that that's true?
I think the answer is that we never have two font-size properties on elements nested inside each other, except body. But it would be good to confirm that that's your thinking, or even more so to hear what your thinking is if that isn't it. :slightly_smiling_face:

4d60e29f4 webview: Make avatars not scale with font

Cool, thanks for the edit.

This bit still applies:

the summary line just says "not scale with font" but the actual change makes the avatars a good bit larger at baseline, which is a more conspicuous change. "webview: Make avatars bigger, and not scale with font" would be good.

a7ba6f57c webview: Make some UI elements have size relative to font size

Cool, this makes sense, except that when the explanation refers to border-radius, it's not really about border-radius vs. other properties, is it? If I'm understanding the rationale correctly, the key distinction is between elements that are basically text and that aren't.

Just scanned through this to see that the affected selectors all feel like "text"... and I see one I don't recognize: .typing-list.
Grepping, it looks like the name typing-list isn't mentioned anywhere else, in either our repo or the server.
Do you recognize this? If it isn't something that currently exists, we should just delete the block.

086104633 webview: Stop setting font-size in the 'html' element

Cool, is this the change that fixes #2559?

If so, a line Fixes: #2559 will be quite helpful for multiple reasons.

Looking at the code, I thought I understood what it would do based on the previous discussion in this PR... but then looking at the commit message I'm not sure I do after all:
The default value of the 'font-size' property is 100%. That makes
it scale on iOS with system settings. (it already scales this way
even with the previously set 15px).
The "it already scales this way ..." sounds like it's saying that already, with the existing code before this change, the font size scales according to system settings. But that's exactly the behavior we didn't have and this is intended to get us, right?
Hmm, perhaps it's missing some words like "On Android,"?

The commit message says the html element, but the code seems to be about the body.

It seems like this will have two effects:

Our font size starts scaling with the system font size, fixing #2559.
In the default case (for the majority of users who haven't made changes to their system font-size setting), our font size will increase from 15px to 16px.

I don't have a strong view on whether our default font size should be 15px or 16px, but I definitely don't want to make that change by accident -- it should be a choice we make.
What are the reasons as you see them for preferring one size over the other? What were your original reasons for choosing 15px? (That was a change you made in 7a6ec3f13 / #1346, when the WebView message list was in alpha.)

In particular, if I'm correctly understanding your explanations of how this works (in this commit message and earlier in this thread), it should be easy to keep the old default size while getting the scaling: write font-size: 93.75%, where I got 93.75% from computing 15/16.
So in fact I'd like to make these changes as two separate changes (assuming you think we should do both) -- that way it's explicit that we're changing the size by choice and not by accident, and also the separation makes it much easier to clearly explain the reasons for each change.

f7b412184 webview: Make padding and margin not scalable with font size

(This comes after a WIP change to use system fonts -- is it also intended as WIP?)

Thanks for the helpful explanation of the pros-and-cons reasoning here!

Thanks also for mentioning that some of the values are being slightly adjusted!

There are a few spots where there are behavior changes (or at least what look in the code like behavior changes) that seem more substantial than rounding like 0.2rem == 3.2px -> 4px:

+  padding: 8px;
...
 .topic-header,
 .private-header {
+  padding: 0 8px;
...
-  border-radius: 10px;
+  border-radius: 0.25rem;
...
-  right: 5px;
-  bottom: 15px;
+  right: 8px;
+  bottom: 8px;

(possibly a few more.)
Those may all be good changes... but it's a lot harder to understand and think about them when they're mixed in with a larger (in lines of code), more sweeping and boring change that is basically a refactor. So it'd be better to have them separate. And unlike the roundings, for a lot of these there's no obvious reason they're related to the rem->px refactor at all.
Plus, these more substantial changes aren't explained at all in the commit message, or even mentioned. And it'd be hard to keep an explanation coherent if mixed in with the pure refactor + small roundings that are explained there now.
So, let's do those separately, with their own explanation.
62a09b2b5 docs: Add webview.md

Cool, this looks helpful! Want to move it forward in the branch to before the WIP changes?

I think the answer is that we never have two font-size properties on elements nested inside each other, except body. But it would be good to confirm that that's your thinking, or even more so to hear what your thinking is if that isn't it.

That is exactly the reason. Historically, only 'em' existed. It was used predominantly for 'root font-size scaling' with the added unwanted benefit that it wasn't relative to the root if anyone had set the font size of another container. 'rem' is a newer unit that solves the problem (but not that new to be a concern for us)
https://caniuse.com/#feat=rem

The commit message says this changes all our em units to rem, but that doesn't seem to be true:

My search/replace procedure had failed me for the last time! I did search the commit again, also the next commits. I pushed an updated version.

At the next commit, I did add the suggested change 'webview: Make avatars bigger, and not scale with font" would be good.`

Grepping, it looks like the name typing-list isn't mentioned anywhere else, in either our repo or the server.
Do you recognize this? If it isn't something that currently exists, we should just delete the block.

Indeed, not used. Added a commit that deletes this and another style that I also found out is not used.

Thanks @borisyankov for the replies and updates!
For b737eb5cd "webview: Make some UI elements have size relative to font size" and later, many of my comments above are still open -- so I think those are still for you to take the next steps on.
For the 4 commits before that:
7b95518ad docs: Add webview.md

Looks good, thanks! About to merge, except:

I'm adding a quick remark in the commit message that this is talking about our near-future practices, not actually our current practices as of this commit. Otherwise it could be pretty confusing for someone trying to understand it and comparing to the code.

eaedf788d webview: Cleanup unused styles

Looks good, thanks! About to merge.

c2b5cfe84 webview: Use 'rem' instead of 'em' for styling sizes

Thanks for the reply about why this is equivalent for us!

As always, answers to "why" questions in review belong in the commit message, so they benefit future readers too. I was preparing to merge this and edited the commit to add that explanation, but then...

Rereading the explanation in context, I noticed a mismatch:

I think the answer is that we never have two font-size properties on elements nested inside each other, except body.

'rem's are based on 'root em' - the font size of <html>

And indeed, MDN confirms rem is based on the font size at the <html> element... but we've been changing the font-size at <body>, which is a child of <html>. So as I understand what the docs are saying, it should actually be the case that rem is not equivalent to em for us -- one is based on the root font-size, and the other is based on the slightly smaller font-size we've had set on the <body>.
Can you help untangle what the story is here? Do you actually find empirically that this change has no effect? If so, can you explain the apparent discrepancy with the docs?
Alternatively, this change really should have no effect if it comes after the "webview: Stop setting font-size in the 'body' element". So if it does have an effect where it currently is, let's finish that other change and stick it after that one.

c103a5cba webview: Make avatars bigger, and not scale with font

Thanks for the edit! About to merge.

c2b5cfe webview: Use 'rem' instead of 'em' for styling sizes
For reference, my edit to the commit message:
    -    This commit changes all our 'em' units to 'rem'. While they are
    -    not equivallent in all cases, in our use they are. This change
    -    is strictly to make the styling more robust and does not change
    -    any elements' size.
    +    This commit changes all our 'em' units to 'rem'.  While they are
    +    not equivalent in all cases, in our use they are, because we never
    +    have a `font-size` property on two elements (other than `body`)
    +    nested inside each other.  This change is strictly to make the
    +    styling more robust and does not change any elements' size.

         'em's are relative to current element's font-size while 'rem's
    -    are based on 'root em' - the font size of `<html>` which is
    +    are based on 'root em' - the font size of `<html>` - which is
         exactly what we want.

And just merged those three ready commits! Thanks again.
8f5e8fb62 webview: Clean up unused styles.
6bed7dea4 docs: Add webview.md
3dd5fb4de webview: Make avatars bigger, and not scale with font

Can you help untangle what the story is here? Do you actually find empirically that this change has no effect? If so, can you explain the apparent discrepancy with the docs?

There indeed is an effect, and the docs are correct. It is just hard to notice the difference between 15px and 16px. (I did confirm it with 150px font-size)
I did move the font-size style from body to html in the same commit to make the unit change really have no effect. Also updated the commit message.

Dropped the 'WIP: webview: Use system fonts on both iOS and Android' commit, not sure it adds anything.

62c99ffb8 webview: Use 'rem' instead of 'em' for styling sizes

Can you help untangle what the story is here? Do you actually find empirically that this change has no effect? If so, can you explain the apparent discrepancy with the docs?

There indeed is an effect, and the docs are correct. It is just hard to notice the difference between 15px and 16px. (I did confirm it with 150px font-size)
I did move the font-size style from body to html in the same commit to make the unit change really have no effect. Also updated the commit message.

Great -- thanks for checking in on that, and that sounds like a good solution!

One further adjustment: I'm going to split the move of font-size from body to html out as its own separate commit to come first. I think that makes the explanation a fair bit easier to follow.

Then about to merge this commit.

In the second and later commits, I think many of my comments above are still open. We probably won't get through all of them in our remaining time, so I'll probably end up finishing them up myself later, which is fine.
There are a few points where I'd be especially glad to hear your thinking (vs. others where I think I understand already and it's just a matter of editing):
fa6ffa992 webview: Stop setting font-size in the 'html' element

What are the reasons as you see them for preferring one [font] size over the other? What were your original reasons for choosing 15px? (That was a change you made in 7a6ec3f / #1346, when the WebView message list was in alpha.)

In this bit of the commit message:
The default value of the 'font-size' property is 100%. That makes
it scale on iOS with system settings. (it already scales this way
even with the previously set 15px).

if I insert "On Android" so it ends with "(On Android, it already scales this way even with the previously set 15px)", does that reflect what you intended to say there? Or did you mean something else?
If you did mean something other than that, then I don't understand, and please explain. :-)

The "it already scales this way ..." sounds like it's saying that already, with the existing code before this change, the font size scales according to system settings. But that's exactly the behavior we didn't have and this is intended to get us, right?

Oh, and another point where I'd be especially glad to hear your thinking:
68828f424 webview: WIP: collapse margins FTW

I have a vague idea what this is doing, but if you could explain your understanding of what it's doing and why that would be quite helpful. :slightly_smiling_face:
In particular: I think at least some of this is intended to cancel out with no net effect on the visible layout. Is that true of all of it, or are there some changes this is intended to make to how things show up for the user?

(The rest of the WIP commits, I think I understand at a mechanical level, and their visual effects will speak for themselves.)

62c99ffb8 webview: Use 'rem' instead of 'em' for styling sizes

Hmm, in fact as I edit this commit message (with the benefit of having separated out the body->html change first for clarity), I see another discrepancy in the logic of why this has no effect!
The reasoning I'd offered above was

I think the answer is that we never have two font-size properties on elements nested inside each other, except body.

and we then corrected body to html there.
But in fact that's still not right -- what we really need in order for rem to mean the same as em is that we never use em or rem on any property on an element that's nested inside any non-root element (i.e. any element other than html) that has its own font-size. That's rather broader.

So, I went back through the places we set font-size, to check if that criterion is actually met. There are 7 places:

html {
code {
pre {
.timestamp {
.loading-spinner, .outbox-spinner {
.message-tags {
#js-error-detailed {

Other than html, I believe most of these we don't stick any elements inside, only text: code, pre, .timestamp, .loading-spinner, .outbox-spinner.
Then #js-error-detailed we stick text and <br> inside, and we have no styling on <br>.
Then there's .message-tags. We do actually put elements inside those! Namely span.message-tag... and in turn we have
.message-tag {
  padding: 0.25em 0.5em;

So I believe this padding is actually affected by the change: as em it's relative to the font-size: 0.7em on .message-tags, but as rem it bypasses that and is relative to the root. So this change makes that padding 1/0.7 = 43% wider.

And merged the change to rem, as cacd51e0e and 6ef229e42 ! Thanks for all your work on this.
As I mentioned in the last few comments, there are a couple of questions where I'd be especially glad to hear your thinking -- other than that, I think this is in good shape for me to finish up later, and other PRs will be the priority where I'd most like to have your help in the time remaining.

I have a vague idea what this is doing, but if you could explain your understanding of what it's doing and why that would be quite helpful. 🙂

The name of the commit is coming from it using the 'collapsable margin' property of block level emenets in css (so not true for flexbox, css grid, or inline).
Two blocks next to each other vertically with margins will not have the distance between them be the margin1 + margin2 but the max(margin1, margin2) - so they collapse onto each other.
This leads to simplification and improvement to the layout, in our case and in general. This is true only for the 'margin' property and not 'padding'.
An example of something desirable: a list of a dozen of these .message-row { margin: 16px; } will result a list with margin 16px on each side and 16px between each row (instead of 16 + 16 = 32px if it was padding, or any other layout that would not result in collapsing)

In particular: I think at least some of this is intended to cancel out with no net effect on the visible layout. Is that true of all of it, or are there some changes this is intended to make to how things show up for the user?

The intention is not to preserve the layout visually 100% but to improve it slightly.

I agree that not all commits are as important, definitely the ones with 'WIP', the reason I didn't polish them or elaborated on them yet (can always do in future).

Very helpful explanation -- thanks!

I've just pushed several changes based on the next few commits in this PR:
642b2d43b msglist: Let font size on iOS scale with system settings.
cbf2e6ce9 msglist: Use default 16px font-size, rather than 15px.
3a9d2aa23 msglist: Make emoji height/width scale with font size.
4955ea5da msglist: Adjust various lengths to multiples of 1/16 rem.
ebaffb456 msglist: Make padding and margin independent of font size.
Thanks again @borisyankov for your work on this!
I'll push here a rough rebased version of the rest.


How to run it with pyton

Describe the solution you'd like
A clear and concise description of what you want to happen.
It does not give skills and how to get different heroes?
Version
What version of the lol-bot are you running?
2.3.1
Additional context
Add any other context or screenshots about the feature request here.
It only takes Tristana and does not add any skills. I can provide these randomly. Also, how to run it from Python. There is launcher.bat in the video on the home page, it is not in the file I downloaded.
not:I installed Python but I can open it from exe. How can I open it from Python?

He doesn't use hero abilities in the trick, he just makes straight hits.

You should look at how to install and run python programs. There are many tutorials on youtube.


changing children from string to node to remove a warning it was raising

I've just changed the children type to node

Corrected this for the future release.


add valid user and admin cache

Look good to me also. It might be good to have a test that uses the functoins that use the caching and test to see if the user or admin roles are stored afterwards

I didn't have test directly calling the cache store function, but I did have tests calling valid_user and is_admin functions which should cache previously checked user. After calling those two functions to check user, the user could be retrieved without calling remote service.


Update shared_preferences pubspec constraints

From here: https://pub.dev/packages/shared_preferences#backward-compatible-100-version-is-coming
Backward compatible 1.0.0 version is coming.
The plugin has reached a stable API, we guarantee that version 1.0.0 will be backward compatible with 0.5.y+z. Please use shared_preferences: '>=0.5.y+x <2.0.0' as your dependency constraint to allow a smoother ecosystem migration. For more details see: https://github.com/flutter/flutter/wiki/Package-migration-to-1.0.0.

Thanks!


"intel corporation alder lake-p pch cnvi wifi (rev 01)" iwlwifi driver missing in ol8.7

The iwlwifi driver for the "intel corporation alder lake-p pch cnvi wifi (rev 01)" adapter is missing from kernels 5.15.0-<IP_ADDRESS>.el8uek.x86_64 (original with release 8.7) and 5.15.0-100.96.32.el8uek.86_64 (current update).  No problem with the 4.18 kernels though.

Still missing in 5.15.0-<IP_ADDRESS>.el8uek.x86_64

The iwlwifi module should be there, but it's possible your device is not included, especially if it's a desktop or laptop device. Do you know its device ID? Can you show any additional troubleshooting you've done?

The adapter is in an HP EliteBook 640 notebook.
Sorry, yes, the iwlwifi module is present (and loaded in both the 4 and 5 kernels), but in 5 the iwlmvm and mac80211 modules do not get loaded automatically by iwlwifi (although they too are present on disk).  It's not actually missing.
If I manually load iwlmvm under the 5 kernel, or if I have it load automatically via /etc/modules-load.d, the wifi interface does not appear when queried by ifconfig.
I'm not sure what else to do to troubleshoot this.    Thanks.
wifi.kernel-5.txt
wifi.kernel-4.txt

What does dmesg show?
dmesg | grep iwlwifi

Bingo!  (newer firmware needed)
typescript.kernel-4_dmesg.txt
typescript.kernel-5_dmesg.txt


Add MAINTAINERS.md file

Please duplicate the file in https://raw.githubusercontent.com/open-horizon-services/web-helloworld-cpp/ac403917069c896f685a317f4ca6b503694f5187/MAINTAINERS.md in this repo.

Please assigned me into this issue.

You got it, @gunjansaha55


fix: fix broken test

This PR resolves []
Description
This PR fixes a test that was set to a date that became in the past

PR Checklist

[ ] I have tested my changes on iOS and Android.
[ ] I hid my changes behind a feature flag, or they don't need one.
[ ] I have included screenshots or videos, or I have not changed the UI.
[X] I have added tests, or my changes don't require any.
[ ] I added an app state migration, or my changes do not require one.
[ ] I have documented any follow-up work that this PR will require, or it does not require any.
[ ] I have added a changelog entry below, or my changes do not require one.

To the reviewers 👀

[ ] I would like at least one of the reviewers to run this PR on the simulator or device.

Changelog updates
Changelog updates

Cross-platform user-facing changes

iOS user-facing changes

Android user-facing changes

Dev changes

update old date test

Need help with something? Have a look at our docs, or get in touch with us.

This PR contains the following changes:

Dev changes (update old date test - MrSltun)

  Generated by :no_entry_sign: dangerJS against eb2785ce5cb3ca2c608153f0215e2f70a74ba6de


WIP: feat(building-utils): adds support for the custom-styles polyfill

Adds support for the custom-styles-interface polyfill. The polyfill enables using a <custom-style> element wrapped around an arbitrary <style> element. This is usually used to provide a theme for your app, by way of css variables. This is needed to support css variables in IE11.

This will probably need a few changes once this PR lands: https://github.com/webcomponents/polyfills/pull/206

webcomponentsjs PR got merged :) so does this need an update now?

Yep! I’ll get it to it tonight hopefully.

This should be good to go, but I'm waiting on the polymer team to publish the shady-css-scoped package to npm.

still not published? 😅

Still not published. 🙁

any luck by now? 😅

nope. Apparently the tests weren't up to snuff and were blocking the release. There's a new PR to fix that: https://github.com/webcomponents/polyfills/pull/221

Adding WIP until it's ready

Closing this to keep the PR lane clean, but definitely still want this in so just reopen when it's ready. Otherwise let's publish it in a separate package to keep things moving.


flickering floating windows for some apps upon workspace swipe transitions

Hyprland Version
 System/Version info

Hyprland, built from branch HEAD at commit 84ab8d11e8951a6551d1e1bf87796a8589da6d47  (props: bump ver to 0.35.0).
Date: Mon Feb 5 01:59:02 2024
Tag: v0.35.0

flags: (if any)

System Information:
System name: Linux
Node name: arch
Release: 6.7.9-arch1-1
Version: #1 SMP PREEMPT_DYNAMIC Fri, 08 Mar 2024 01:59:01 +0000

GPU information:
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GA106M [GeForce RTX 3060 Mobile / Max-Q] [10de:2520] (rev a1) (prog-if 00 [VGA controller])
04:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Cezanne [Radeon Vega Series / Radeon Vega Mobile Series] [1002:1638] (rev c4) (prog-if 00 [VGA controller])

os-release: NAME="Arch Linux"
PRETTY_NAME="Arch Linux"
ID=arch
BUILD_ID=rolling
ANSI_COLOR="38;2;23;147;209"
HOME_URL="https://archlinux.org/"
DOCUMENTATION_URL="https://wiki.archlinux.org/"
SUPPORT_URL="https://bbs.archlinux.org/"
BUG_REPORT_URL="https://gitlab.archlinux.org/groups/archlinux/-/issues"
PRIVACY_POLICY_URL="https://terms.archlinux.org/docs/privacy-policy/"
LOGO=archlinux-logo

plugins:

Bug or Regression?
Bug
Description
windows flicker
How to reproduce

toggle a floating window or multiple floating windows for some apps

swipe gesture to transition to another workspace

window(s) will flicker

I can use git version later.
Crash reports, logs, images, videos
https://github.com/hyprwm/Hyprland/assets/106934605/05ab2997-e565-4693-8bae-b6e9cc3e06db

This is due to drop shadow deco.
https://github.com/hyprwm/Hyprland/assets/106934605/d9192cc2-ff3b-4a27-b483-2d67c9436d1e

dafoq

nope, neither when true nor false

does not occur on newer hyprland


⚠ API - Lens has degraded performance

In 747027b, API - Lens ($LENS_API_URL) experienced degraded performance:

HTTP code: 503
Response time: 341 ms

Resolved: API - Lens performance has improved in 70db409 after 6 minutes.


Use portable-atomic crate on no-std target

This allows removing volatile read/write hack on targets do not support atomic load/store.
https://github.com/taiki-e/atomic-memcpy/blob/6a2a8f63b1339f1e93f07f47199695841615b168/src/lib.rs#L832-L834
refs: portable-atomic

This will reduce performance somewhat for types with smaller alignments, but considering that the current one is technically UB, that atomic load/store support will be added in LLVM on these platforms, and that after the standard library supports it, portable-atomic's version detection can handle them, tend to merge this.
Users who need the same codegen as before can set up an unsafe cfg atomic_memcpy_unsafe_volatile as before.

bors r+


Updates to data table in Cal-Adapt help section

This PR just edits and adds new data to the data on Cal-Adapt table.

See on Netlify: https://compound-events-blogpost--the-great-gif-site-59648.netlify.app/help/get-started/climate-data-and-other-data-on-caladapt


Feature/coupon

Ready to merge.

Ready to merge.

Can't merge since 'dev' is broken for now (from #46). Waiting for fix.


Ability to replay requests (Access and Erasure)

Description
In the scenario of where there is a failure, we will need to support replaying the request, both at the entire Subject Request level and the individual datastore level.

I misunderstood this ticket and assumed we meant "restart from failure" here, but @seanpreston tells me this ticket is primarily for allowing the user to start from an arbitrary point in the graph.  Further product discussion is needed here to refine expected behavior.
Restart from failure has been reticketed here: https://github.com/ethyca/fidesops/issues/574

Let's clarify this tomorrow @pattisdr . Your comment on #863 makes me think that we don't have the abililty to restart from failure, but on this ticket it says that "restart from failure" was ticketed on #574 .

We can "restart from failure" - by that, I mean if a graph fails, when we restart, only the failed collection and any collections that didn't run the first time will run.  For example, if we have collections A, B, and C, and A runs, but then B fails, "restart from failure" will run graphs B and C only.
We can "resume from pause" - in that a graph can exit when a collection indicates it needs manual data and we can resume from the collection.  For example, say we have collections A, B, and C, and A runs, but B pauses the traversal because it is waiting on manual data and C hasn't gotten a chance to run yet.  The user can hit an API endpoint with the manual data to resume, which will get used for collection B and then collection C will run. A will not run again.
We do not support "replay" (using Sean's definition) where a user can arbitrarily say "I want to rerun collection A again"


Hope there are some examples for Azure Storage

I'm trying to get info about how to know contents of backup files on Azure Storage, but all examples in this docuument are about backups on local disk.
Please Add information about how to view contents of backup files on Azure Storage.

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

ID: 7777705d-c967-84ea-0ab2-2fcb1cda1c11
Version Independent ID: d1256d3d-a292-c855-c918-ae7607a74c3f
Content: View backup contents (file or tape) - SQL Server
Content Source: docs/relational-databases/backup-restore/view-the-contents-of-a-backup-tape-or-file-sql-server.md
Product: sql
Technology: backup-restore
GitHub Login: @MashaMSFT
Microsoft Alias: mathoma

@vinixwu -- thank you for your feedback.  Please consider this section for a starting point.

What can I back up?

I am closing this issue now.  You are welcome to @ mention me for any followup.  We hope to hear from you again.


Reponsivity ?

Hi,
Can you please advise us when responsibility will be added? That is the only thing what blocking me to use this nice package..
Thx a lot

Also can you please add some example with localstorage ?

Can you open a new issue for that? Ty

#7


Update Security Matrix & Threat Model for updates.

Service that need to be updated in the document are DynamoDB.  multi_instance_upload #24 or #67.

Documents updated and completed.


Update vue deps for latest template TS support

Vue dependencies are currently at 3.2.6 and a number of updates since have improved template TS support, eg. https://github.com/vuejs/vue-next/issues/4655
Please update Vue deps to 3.2.14, thanks 🙂

Many thanks! 🙂


Card UI Enhancement

Description
This is the new Referring to the previous PR  , I made regarding card
Fixes # 44
Type of change
Please delete options that are not relevant.

[ x] New feature (non-breaking change which adds functionality)

How Has This Been Tested?
Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration

[ ] Test A
[ ] Test B

Test Configuration:

Firmware version:
Hardware:
Toolchain:
SDK:

Checklist:

[ x] My code follows the style guidelines of this project
[ x] I have performed a self-review of my code
[ x] I have commented my code, particularly in hard-to-understand areas
[ x] I have made corresponding changes to the documentation
[ x] My changes generate no new warnings
[ x] New and existing unit tests pass locally with my changes
[ x] Any dependent changes have been merged and published in downstream modules

Screenshots
I Have Provided in previous PR

Hello @Hemant2335!
Thank you for submitting this pull request Your pull request will be reviewed by maintainers shortly. Meanwhile make sure you have referenced the respected issue in this pr Your pr will not be merged if it does not have reference to respected issue
please read our Contributing Guidelines https://github.com/UBA-GCOEN/StichHub/blob/main/CONTRIBUTING.md And Code of Conduct https://github.com/UBA-GCOEN/StichHub/blob/main/CODE_OF_CONDUCT.md

Sir ,
Could you please add gssoc and the respective level


implement Linked List using JavaScript

implement Linked List using JavaScript
Write a JS code to implement LinkedList.

I am interested in working on this issue, can I be assigned?

Please can you assign me this issue?

Looks like @AlexiusTatius has already submitted the solution. Assigning it to @AlexiusTatius
LMK if you want me to assign you a new issue @ShikhaaT44

@ishwarrimal I have solved the issue. Would it take some time to decide whether my pull request be merged or not?

Looks like @AlexiusTatius has already submitted the solution. Assigning it to @AlexiusTatius LMK if you want me to assign you a new issue @ShikhaaT44

No issues. I'll check out other issues then

@ishwarrimal Sir any updates?


Meet with Kevan for Technical Interview

Hi @joethreepwood! In the spirit of step-on-toes/bias-to-action, here is our google meet for the technical interview -- November 13, 4 pm your time. I've also sent you a calendar invite:
https:// meet.google.com/gbo-dbqv-keh
Who is Kevan Gilbert again?
Candidate for the Product Marketer role, who just moved through the culture screen interview with Coua
Why is Kevan sending me this?
I was asked to fill out a bundle of available times via the Ashby interface, but it created a lot of unproductive possibilities given our timezone overlaps. The best time for us us 8 am PST / 4 pm your time. Each time we don't land on a day, we lose a day. Yesterday was a public holiday in Canada (Remembrance Day), shortening the week already.
But why?
Your culture handbook says your Slack is mostly for informal use, and you, like, never use email. Your to-do list says you got a great deal going on, and I wager one of those items shouldn't be "endlessly coordinate next stages of interviews. The recent send from Lenny's Newsletter suggested Tal Raviv's "unfair" secret of just plain-old scheduling things.
What if this time doesn't actually work?
Oh, no worries at all. Here's my Google appointment slots. Feel free to pick one that works better!

Hey Kevan -- Thanks for this, but the proposed time works fine for me as Kendall and Coua have access to my calendar. Looking forward to chatting!
For now, I'm going to close this out as we can discuss everything on the call tomorrow, and remove the Google Meet link as it's a public meeting.


Clarify required packages to range over parameters in a function handler

Related to this issue:
https://github.com/gobuffalo/gobuffalo/issues/487
For a newcomer to go and buffalo, this doesn't work out of the box, it is required to import net/url package.
I think it can be useful to clarify this in the documentation

Thanks!


[Feature Request] Auto Download Avatars

This may be a bit of a niche request, but it would still be really helpful nonetheless. I'm on Satellite internet and have been using the auto-download world feature to cache as many worlds my friends go to as I can because the download speeds are terribly slow sometimes.
It's been super useful, but I still run into the issue of needing to download every avatar or avatar update any of my friends have, which causes me to lag incredibly hard and often time-out. I've had to keep a lot of friends' avatars hidden just to be able to talk to them, or risk timing-out just trying to download them.
Another friend of mine has a pretty slow laptop. He can run the game mostly fine, but when he joins a world with a lot of new avatars, it slows him down considerably, to the point where the frames are low enough he can't see or speak until they're all downloaded. This feature would only help get all his friends downloaded, but it would at least cut that down some.
Unlike the worlds, you can always see what avatar anyone is using at any given time, whether they're in a private world or not. It would be very useful if we could have an option to have VRCX download those as well. I figure some people are in a similar situation to either of us, and I'd hope it wouldn't be too difficult to pull off.

"Unlike the worlds, you can always see what avatar anyone is using at any given time, whether they're in a private world or not." sorry but that is incorrect your able to see the avatar a person is in because we check the Thumbnail URL which is always exposed to the end user the thumbnail provides the name of the avatar its upload date the uploader and course the image problem is this doesn't show the avatars assetURL "the avatars actual unity File the game loads" and this will never be public or accessible to anyone besides the creator outside the game client so this feature will not be possible recent changes to the API also made removed the assetURL of public avatars aswell.

Unfortunately Murkur is correct it would only be possible to cache your own uploaded avatars.

Ahhh, unfortunate.


Small updates to Dub Raycast Extension

Description
Updating the title, description, logo, and auth instructions
Checklist

[x] I read the extension guidelines
[x] I read the documentation about publishing
[x] I ran npm run build and tested this distribution build in Raycast
[x] I checked that files in the assets folder are used by the extension itself
[x] I checked that assets used by the README are placed outside of the metadata folder

Hey @steven-tey , here is the command icon with Raycast masks applied if you want to use that:

@jfkisafk thank you so much, fixed both! 🙏

Hey @steven-tey just a minor comment, otherwise looks good to me.

@jfkisafk TIL about {PR_MERGE_DATE} – thank you!

Hello @mil3na can you please take a look when you find some time and assist in merging this? 🙏


Added continue-on-error to greeting action.

This action isn't something that should cause merge issues if it fails. Adding the continue-on-error attribute to the first-interaction action will prevent this from happening.

Coverage remained the same at 94.788% when pulling 69d7a97f4404f670b1d766a643e40ed15daf006b on tfdahlin:add-continue-on-error into 8464dc15c388e4e425d35cfcd6d736f54adfadc4 on nficano:master.

Coverage remained the same at 94.788% when pulling 69d7a97f4404f670b1d766a643e40ed15daf006b on tfdahlin:add-continue-on-error into 8464dc15c388e4e425d35cfcd6d736f54adfadc4 on nficano:master.

Closing this since it didn't affect the underlying issue with the greeting GitHub Action.


bfcal: init at 1.0

Description of changes

bfcal is a small calendar utility. See the introductory blog post, or it's repo to learn more.
Things done

Built on platform(s)

[x] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

[ ] For non-Linux: Is sandbox = true set in nix.conf? (See Nix manual)
[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[x] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[x] Tested basic functionality of all binary files (usually in ./result/bin/)
22.11 Release Notes (or backporting 22.05 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module
[ ] (Release notes changes) Ran nixos/doc/manual/md-to-db.sh to update generated release notes

[x] Fits CONTRIBUTING.md.

Result of nixpkgs-review pr 195609 run on x86_64-linux 1

1 package built:

bfcal

Thank you!


Add clan-member-list-sort plugin

This plugin adds a sort button to the clan member list.

initWidgets() should be called on the client thread. startUp() and shutDown() are both invoked on the EDT.

Thank you for your feedback. I've fixed the issue in this commit.


Getting Welcome to nginx! page instead of the app page.

I followed everything on the instruction and the video as well, and even when I ran sudo nginx -t everything is ok and successful, but when I visit the foo.bar.com I only get "Welcome to nginx!" page.
Thanks!
P.S.
I setup an A record with the name foo.bar.com and pointed it to the IP on digital ocean. Am using siteground by the way for the hosting.

Hey, @jofftiquez, I saw this issue in the comments thread on the video, and it looks like the other dev was able to resolve it by restarting nginx.
If that's not fixing it for you, I'd raise a question on StackOverflow or your preferred dev channel.
Good luck!

@jlengstorf Actually it did. Thanks again.


Remove alert-library.js

What and why?
We suspected that alert-library.js wasn't being used due to Design System alerting and that seems to be the case. This PR removes it.
How to test?
Smoke test, especially around error handling
Jira

/deploy robinm3


feat(frontend): added game start animation to the scoreboard

Fixes #18
https://github.com/keep-starknet-strange/tsubasa/assets/37301269/6e4830fe-9060-49fd-a133-c85c126016ca

this is awesome, reckon the text moves a bit too fast?

Mmh yes you may be right ! Let's ask @click_save

this is awesome, reckon the text moves a bit too fast?

Mmh yes you may be right ! Let's ask @clicksave

Yo yeah! think it should be a little slower and maybe event contain more letters.
Another small improvement to make it a little nicer would be to add the gradient overlays you can see here when the effect occurs

this is awesome, reckon the text moves a bit too fast?

Mmh yes you may be right ! Let's ask @clicksave

Yo yeah! think it should be a little slower and maybe event contain more letters.
Another small improvement to make it a little nicer would be to add the gradient overlays you can see here when the effect occurs

Ok, on it !

For some reason it gets stuck on goal

For some reason it gets stuck on goal

Oops, I broke it with the rebase, I'm fixing it


Immutable Nodes for Transformers

While transformers should take care to not modify the nodes that are passed to them, we can probably avoid some future bugs by passing immutable nodes to Transformers and Transformations.
There is already an attempt at immutability made, but it is fairly minimal and there is also no easy way to create a mutable node again (if that is something that is needed).
Alternatively, it might make more sense to instead provide some sort of ImmutableNodeView, so that we can provide immutability without copying.

Would Unmodifyable node wrappers like the Collection ones make sense for this?

As long as they also protect the inner nodes, yes.
The collection unmodiyable wrappers only protect the top level structure iirc.

My language is statically type checked, so as long as I don't introduce a way to convert a read-only node to a writable node, that shouldn't be an issue for me. But trusting that no users of your language are gonna (accidentally) try to mutate a node that should be read-only does not seem like a good plan.

The collection unmodiyable wrappers only protect the top level structure iirc.

Well you'd override the get method to also return a wrapped node.

I'll try to implement these

My lanugage is also pure functional, so mutating nodes is impossible, but I'd still rather not rely on it.
Thanks 👍🏽

I've decided to simply copy the nodes for now.
I've marked the two locations in code with a TODO.

I'm working on immutable deep copies.
Should immutable nodes be assignable where mutable nodes are expected, or should mutable nodes be allowed where immutable nodes are expected? At first I thought mutable nodes should be allowed where immutable nodes are expected, like const in C/C++, because they can't be mutated by a method that expects an immutable node, but then I remembered that callers could cast the immutable node to a mutable node if it is one and mutate it.

The sole point of immutable nodes in chasm context is to ensure transformer implementation don't mutate the parameters.
You don't need to worry about typing, it's just that the node implementation should throw an exception if you try to mutate it.

A list of immutable implementation possibilities:

Pure Immutable Nodes

Can be surprisingly performant, as shown by functional languages
May be confusing to bubble node replacements up the tree

----  Deep Copied Nodes ----

Deep copied mutable nodes

Relatively simple
Currently implemented

Deep copied immutable nodes

Probably the slowest
Half implemented by me
Would probably want some kind of lens-type feature to construct nodes with at least one changed child

Paired eager deep copied mutable nodes

All nodes are constructed already paired

One node of the pair is probably constructed first

Make a new field that stores the related node, and make a new copy of both when either changes
This sounds like needless object allocation, but might not be as bad as Deep copied immutable nodes.
May cause problems if different caller methods get the same mutable node and the second one mutates it.

Paired eager deep copied immutable nodes

Probably makes more sense than Paired deep copied mutable nodes
Make a new field that stores the other version of the node
The immutable version doesn't require a field to get back to the mutable one but it would allocate differently
If the mutable version changes, the immutable version gets linked to a new copy (if it has a link), and the mutable version gets a new immutable copy.

Lazy cached deep copied mutable nodes

Nodes have a field that stores a mutable copy of themself.

This field defaults to null

On request of a mutable copy of a node, the mutable copy is cached in the field of the original and the original is cached in the new node.

Because this is a deep copy, this happens for all recursive children as well.
If the cache is occupied, just return the cached copy

If a node is mutated while its cache is occupied, the caches of the linked node and the mutating node are cleared.
May cause problems if different caller methods get the same mutable node and the second one mutates it.
Maybe this is a simpler version of Copy On Write wrappers

Lazy cached deep copied immutable nodes

Nodes have a field that stores the other version of themself with the opposite mutability.

This field defaults to null
The immutable version would benefit from having one as well, but doesn't require it.

On request of a mutable copy of an immutable node or an immutable copy of a mutable node,

The cached node is returned if there is one
Otherwise a new node with the opposite mutability is created and put in the source node's cache

The source node is also put in the new node's cache

If the mutable node is changed while it has a cached immutable node, both the mutable node's cache and the immutable node's cache are cleared.

---- Shallow Copied Nodes ----

Shallow copied mutable/immutable nodes

Copying a node just involves copying the node, and not its children.
Fast but nearly pointless because the child nodes are shared and still exposed.

Lazy shallow copied mutable/immutable nodes

Only copies the root structure of a Node
Child objects will be the original mutable children that reflect any state changes the original node's children undergo.
Accessing child nodes will return a lazy shallow mutable/immutable copy of that node

Lazy cached shallow copied mutable/immutable nodes

On construction, copies the root structure of the mutable node and uses the original mutable children.
On access of child nodes,

If the child node is a lazy cached shallow copied mutable/immutable node, return it.
If the child node is not a lazy cached shallow copied mutable/immutable node, the stored version of that child node is replaced by a new lazy cached shallow copied mutable/immutable node version of it.

Only reflects state changes in children not copied yet

---- Locking Nodes ----
Locking nodes are at least lockable from mutable to immutable. Maybe the implementation can unlock it, but callers shouldn't be able to.

Deep pure locking nodes

No regular nodes, only locking nodes are provided.
Updates all children's lock states recursively when locked or unlocked.

Lazy pure locking nodes

No regular nodes, only locking nodes are provided.
Updates a child's lock state to match its own before returning it.
Doesn't update children when its lock state changes

Deep copied locking nodes
Paired eager deep copied locking nodes
Lazy cached deep copied locking nodes
Shallow copied locking nodes : just as pointless as other simple shallow copies
Lazy shallow copied locking nodes
Lazy cached shallow copied locking nodes

---- Node Wrappers ----
Wrappers can be cached on the Node it wraps or on a parent node wrapper. Wrappers cached on the nodes they wrap are called node-cached, and nodes caching wrappers can be called wrapper-caching nodes. Wrappers caching child nodes' wrappers can be called wrapper-cached.

Deep unmodifiable node wrappers

Constructing a deep unmodifiable wrapper means wrapping the Node's descendant tree from the bottom up to store in the new wrapper node.
Possibly silly: If you're copying the node structure already, why not just call the new copy a copied node like in Deep copied immutable nodes?
Would reflect changes to in

Node-cached deep unmodifiable node wrappers

Nodes will have a field to store an unmodifiable wrapper of themselves.
The unmodifiable node wrappers will never need to be discarded because they reflect all changes to the original.
The deep copy part means all child nodes of a newly wrapped node also have wrappers constructed.

Wrapper-cached deep unmodifiable node wrappers

Wrappers are constructed containing wrapper-cached deep unmodifiable node wrappers wrapping any children of the node the wrapper wraps.

The extra reference seems like an unnecessary cost compared to lazy cached shallow copied immutable nodes, because the cache needs to store the structure anyway. On the other hand, the cache structure means this can be lazier.

---- Locking Node Wrappers ----
Like Locking Nodes, but wrappers instead. The intervening reference means these can perform Copy On Write (COW)! COW wrappers are unlockable by callers, but doing so copies the node underlying the wrapper.
Like Node Wrappers, can be wrapper-cached or node-cached. COW wrappers must not be wrapper-cached, and if they are node-cached must clear themselves from the caches of the nodes they wrap.

Deep copied locking/COW node wrappers
Paired eager deep copied locking/COW node wrappers
Lazy node-cached deep copied locking/COW node wrappers
Lazy wrapper-cached deep copied locking node wrappers
Shallow copied locking/COW node wrappers : just as pointless as other simple shallow copies
Lazy shallow copied locking/COW node wrappers
Lazy node-cached shallow copied locking/COW node wrappers
Lazy wrapper-cached shallow copied locking node wrappers

My favorites from each section are are Pure Immutable Nodes, Paired Eager Deep Copied Immutable Nodes, Lazy Cached Shallow Copied Immutable Nodes, Lazy Pure Locking Nodes, Node-cached Lazy Unmodifiable Node Wrappers, and Lazy Node-Cached Shallow Copied COW Node Wrappers.

I've been working on Lazy Shallow Copied COW Node Wrappers.

I think I finished writing all the parts, but I'm very sure it has inconsistent handling of some things. I've been thinking I might work on the Deep Immutable Nodes PR and turn it into Eager Deep Copied Immutable Nodes where the mutable nodes are constructed with an immutable version but remove their cached immutable version on mutation.

I've realized that putting any kind of caching between mutable and immutable nodes requires an cache clearing update system, which then requires overriding all mutating methods of collection-based node classes with methods that add the list node to the child object's notified parents set. Overriding other mutation sources like ListIterator.add and Map.keySet.add may also be required. This is starting to sound almost as complicated as the cow wrappers version.

I think the only way for this to help would be to give every transformer the same immutable node objects.
I'll remove the parent reference things and caching.

This has been moved far down the road. In fact, this might never happen after all.
Closing this now, if we ever revisit this it, we will create a new issue.


Eclipse Help issue producing toc file

Converted from SourceForge issue 1819660, submitted by easirois
When building for Eclipse, this map works fine (called overview.ditamap):
<map title="something">
  <topicref format="ditamap" href="DITA-articles.ditamap"/>
</map>

However, if I import that into an Eclipse map, it does not work:
<plugin id="com.example.doc">
  <pluginmeta>
    <providerName>IBM</providerName>
    <plugininfo>
      <pluginname>My Component system</pluginname>
      <vrmlist><vrm version="1.0"/><vrm version="2.0"/></vrmlist>
    </plugininfo>
  </pluginmeta>
  <tocref href="overview.ditamap"/>
</plugin>

In that case, the generated file overview.xml is no longer correct. It looks like the override for plugin maps will incorrectly modify processing for the normal map as well.
The issue occurs when we have the following use case:
eclipsemap --> map --> map -->topics
The processing produces the following toc file:
<?xml version="1.0" encoding="utf-8"?>
<?NLS  TYPE="org.eclipse.help.toc"?>
<toc label="Test toc" topic="DITA-articles.ditamap">
   <topic label="DITA-articles.ditamap" href="DITA-articles.ditamap"/>
</toc>

It should instead produce something like this:
<?xml version="1.0" encoding="utf-8"?>
<?NLS  TYPE="org.eclipse.help.toc"?>
<toc label="Test toc" topic="DITA-rm.html">  <!-- New label -->
   <topic label="Introduction to the Darwin Information Typing Architecture" href="DITA-rm.html">
      <topic label="Specializing topic types in DITA" href="DITA-dsf.html"/>
      <topic label="Specializing domains in DITA" href="DITA-domains.html"/>
      <topic label="How to define a formal information architecture with DITA map domains" href="DITA-mapdomains.html"/>
   </topic>
</toc>

I think that this is resolved now - at least, when I do a pluginmap -> mapA -> mapB -> content organization, the generated mapA.xml file has the topics (it does not have a reference to the ditamap). I get new errors from the code that overrides linking for eclipsehelp output, but that seems entirely separate (and may already have an issue open elsewhere. I think we can mark this one obsolete.


Visit Downloads page without docs prefix

Now

TODO
Navigation links need to be slightly modified ,like:

/docs/downloads  to /downloads
/docs/team to /team

such as:

Thanks

This issue relies on #157, should resolve #157 first.

This issue relies on #157, should resolve #157 first.

#157 is fixed, go ahead.


Full outer join (via NonObliviousSortMergeJoin)

Added support for FullOuterJoin via NonObliviousSortMergeJoin.
Tested in SGX simulate mode using:
build/sbt 'test:testOnly *SinglePartitionJoinSuite -- -t "full outer join"'
build/sbt 'test:testOnly *MultiplePartitionJoinSuite -- -t "full outer join"'

Added support for adding a dummy row for the primary table (in addition to having a dummy row for the secondary table) by modifying strategies.scala and operators.scala. This additional dummy row is needed in the case that a foreign table row appears before any primary table row (implying no matches) and thus we need to append a row containing primary row nulls + foreign table row

Build should succeed now; previously there were compilation bugs that I didn't detect due to local configuration issues

LGTM! Thanks for implementing these changes. Please run ./format.sh to lint changed files; we'll merge it in after that.

Should be done now; thought I had installed the pre-commit hook, but must've accidentally been removed.


Use react transform instead of hot reload

https://github.com/gaearon/babel-plugin-react-transform

Woops 6 days late ;)

It's coming.