chore: trigger CI in PR

Please read contributing guidelines and remove this line.

Benchmark results
No metrics with a significant change found.

Detailed results
All benchmarks are run on txs on the Benchmarking contract on the repository. Each tx consists of a batch call  to create_note and increment_balance, which guarantees that each tx has a private call, a nested private call, a public call, and a nested public call, as well as an emitted private note, an unencrypted log, and public storage read and write.
This benchmark source data is available in JSON format on S3 here.
L2 block published to L1
Each column represents the number of txs on an L2 block published to L1.

Metric
8 txs
32 txs
64 txs

l1_rollup_calldata_size_in_bytes
676
676
676

l1_rollup_calldata_gas
6,388 (-1%)
6,412
6,412

l1_rollup_execution_gas
585,721
585,745
585,745

l2_block_processing_time_in_ms
1,301 (-2%)
4,636 (-3%)
9,093 (-4%)

note_successful_decrypting_time_in_ms
225 (-8%)
535 (+6%)
911

note_trial_decrypting_time_in_ms
24.2 (-45%)
42.6 (-62%)
31.5 (+5%)

l2_block_building_time_in_ms
10,223 (-2%)
36,411 (-2%)
72,489 (-3%)

l2_block_rollup_simulation_time_in_ms
10,111 (-2%)
36,019 (-2%)
71,751 (-3%)

l2_block_public_tx_process_time_in_ms
4,790 (-3%)
18,766 (-3%)
37,606 (-3%)

L2 chain processing
Each column represents the number of blocks on the L2 chain where each block has 16 txs.

Metric
5 blocks
10 blocks

node_history_sync_time_in_ms
14,062 (-3%)
25,730 (-7%)

note_history_successful_decrypting_time_in_ms
1,159 (+4%)
2,208 (-1%)

note_history_trial_decrypting_time_in_ms
41.6 (-5%)
82.5 (+5%)

node_database_size_in_bytes
18,669,648
34,971,728

pxe_database_size_in_bytes
29,859
59,414

Circuits stats
Stats on running time and I/O sizes collected for every circuit run across all benchmarks.

Circuit
circuit_simulation_time_in_ms
circuit_input_size_in_bytes
circuit_output_size_in_bytes

private-kernel-init
142 (-1%)
44,281
26,164

private-kernel-inner
150 (-1%)
71,648
26,164

private-kernel-ordering
108 (-4%)
50,830
39,026

base-parity
3,871
128
311

root-parity
1,082 (-3%)
1,244
311

base-rollup
13,293 (-1%)
110,464
861

root-rollup
49.3 (-1%)
4,359
725

public-kernel-app-logic
79.1 (-1%)
47,599
40,661

public-kernel-tail
112 (-1%)
53,372
7,125

merge-rollup
10.4 (-2%)
2,568
861

public-kernel-teardown
77.4 (+5%)
47,599
40,661

public-kernel-setup
76.8 (+1%)
47,599
40,661

Tree insertion stats
The duration to insert a fixed batch of leaves into each tree type.

Metric
1 leaves
16 leaves
64 leaves
128 leaves
512 leaves
1024 leaves
2048 leaves
4096 leaves
32 leaves

batch_insert_into_append_only_tree_16_depth_ms
9.94
15.9 (-3%)
N/A
N/A
N/A
N/A
N/A
N/A
N/A

batch_insert_into_append_only_tree_16_depth_hash_count
16.8
31.6
N/A
N/A
N/A
N/A
N/A
N/A
N/A

batch_insert_into_append_only_tree_16_depth_hash_ms
0.580
0.491 (-2%)
N/A
N/A
N/A
N/A
N/A
N/A
N/A

batch_insert_into_append_only_tree_32_depth_ms
N/A
N/A
45.7 (-1%)
71.6 (-1%)
227 (-2%)
445
855 (-2%)
1,683 (-3%)
N/A

batch_insert_into_append_only_tree_32_depth_hash_count
N/A
N/A
96.0
159
543
1,055
2,079
4,127
N/A

batch_insert_into_append_only_tree_32_depth_hash_ms
N/A
N/A
0.469 (-1%)
0.442 (-1%)
0.414 (-2%)
0.416
0.406 (-2%)
0.403 (-3%)
N/A

batch_insert_into_indexed_tree_20_depth_ms
N/A
N/A
53.8 (-2%)
106 (-1%)
329 (-2%)
659 (-1%)
1,284 (-2%)
2,569 (-2%)
N/A

batch_insert_into_indexed_tree_20_depth_hash_count
N/A
N/A
105
207
691
1,363
2,707
5,395
N/A

batch_insert_into_indexed_tree_20_depth_hash_ms
N/A
N/A
0.476 (-1%)
0.477 (-1%)
0.449 (-2%)
0.454
0.445 (-2%)
0.447 (-2%)
N/A

batch_insert_into_indexed_tree_40_depth_ms
N/A
N/A
N/A
N/A
N/A
N/A
N/A
N/A
60.6 (-1%)

batch_insert_into_indexed_tree_40_depth_hash_count
N/A
N/A
N/A
N/A
N/A
N/A
N/A
N/A
109

batch_insert_into_indexed_tree_40_depth_hash_ms
N/A
N/A
N/A
N/A
N/A
N/A
N/A
N/A
0.530 (-1%)

Miscellaneous
Transaction sizes based on how many contract classes are registered in the tx.

Metric
0 registered classes
1 registered classes

tx_size_in_bytes
40,372
496,534

Transaction size based on fee payment method

Metric
native fee payment method
fpc_public fee payment method
fpc_private fee payment method

tx_with_fee_size_in_bytes
905
1,161
1,377

Transaction processing duration by data writes.

Metric
0 new note hashes
1 new note hashes
2 new note hashes

tx_pxe_processing_time_ms
1,180 (+3%)
811 (-1%)
4,053 (+6%)

Metric
1 public data writes
2 public data writes
3 public data writes
4 public data writes
5 public data writes
8 public data writes

tx_sequencer_processing_time_ms
416 (-2%)
290 (+5%)
749 (+6%)
371 (+5%)
1,227
436 (+5%)


Can't build custom runtime module that depends on serde in no_std

Sorry if this is the wrong repo to report this in. I can't seem to do a no_std build of a custom runtime module when serde is added as a dependency.
I've isolated the problem in this repo here: https://github.com/attente/substrate-serde. It's just a new repo created via substrate-node-new, and modified to build serde in no_std mode as well.
This is the error message when trying to build it:
[nix-shell:~/substrate-serde]$ scripts/build.sh
Building webassembly binary in runtime/wasm...
   Compiling substrate-serde-runtime v1.0.0 (/home/william/substrate-serde/runtime)
warning: unused doc comment
  --> /home/william/substrate-serde/runtime/src/template.rs:23:1
   |
23 |   /// This module's storage items.
   |   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
24 | / decl_storage! {
25 | |     trait Store for Module<T: Trait> as TemplateModule {
26 | |         // Just a dummy storage item.
27 | |         // Here we are declaring a StorageValue, `Something` as a Option<u32>
...  |
30 | |     }
31 | | }
   | |_- rustdoc does not generate documentation for macro expansions
   |
   = note: #[warn(unused_doc_comments)] on by default
   = help: to document an item produced by a macro, the macro must produce the documentation as part of its expansion

warning: unused import: `serde`
  --> /home/william/substrate-serde/runtime/src/template.rs:11:5
   |
11 | use serde;
   |     ^^^^^
   |
   = note: #[warn(unused_imports)] on by default

error: duplicate lang item in crate `std`: `panic_impl`.
  |
  = note: first defined in crate `sr_io`.

error: duplicate lang item in crate `std`: `oom`.
  |
  = note: first defined in crate `sr_io`.

error: aborting due to 2 previous errors

error: Could not compile `substrate-serde-runtime`.

To learn more, run the command again with --verbose.

It should be possible to do this AFAICT because Serde does support no_std builds: https://serde.rs/no-std.html

Did you disabled the default features, as written in the serde documentation?

Yes, I did it here: https://github.com/attente/substrate-serde/commit/9c010b91d412cf9d79809f07d8aafbac68bf51f8#diff-a3fea9165475a45ebf09566e2842a9dbR119

So, somehow the default and std features are still enabled. I think that this is a problem of the cargo feature resolution. You would need to make sure that these features are disabled for all of your dependencies.
This is the line that tells you that the feature is enabled:
Running `rustc --crate-name serde /home/bastian/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.89/src/lib.rs --color never --crate-type lib --emit=dep-info,metadata,link -C opt-level=3 --cfg 'feature="default"' --cfg 'feature="std"' -C metadata=3c29ed886629a68a -C extra-filename=-3c29ed886629a68a --out-dir /home/bastian/projects/parity/substrate-serde/runtime/wasm/target/release/deps -L dependency=/home/bastian/projects/parity/substrate-serde/runtime/wasm/target/release/deps --cap-lints allow --cfg ops_bound --cfg core_reverse --cfg de_boxed_c_str --cfg de_rc_dst --cfg core_duration --cfg integer128 --cfg range_inclusive --cfg num_nonzero`

Why do you need serde in wasm?

Is there a way to track down which dependency is causing it? FWIW, that example repo is just simply the bare template node with no-std serde (default-features = false) included as a new dependency, so I have to assume that the problem lies somewhere in the template node's dependency tree.
As for why I'd like to use serde in the runtime module, it already provides a bunch of serialization implementations for several primitive data types, as well as the derive macro that automatically allows serialization and deserialization of custom types too, making them easier to work with rather than directly with byte strings.

Are you aware of parity-codec?
You could look into srml-support, as we use serde for the GenesisConfig. Maybe that needs some tweaking. But serde is just enabled on std.

Ok, I'll have to take a deeper look into it. Thanks!


Error handling breaks when using rest fallback

We're currently creating our MetricServiceClient using the rest fallback method, since we're building our code with esbuild and using protos does not seem to be supported. However, if the createTimeSeries call fails, the the error is not handled and emitted by the library. Instead, it causes a crash and an unhelpful error message is emitted.
Stacktrace:
⚠  functions: Error: googleProtobufAnyFromProto3JSON: cannot find type google.monitoring.v3.CreateTimeSeriesSummary: Error: no such type: google.monitoring.v3.CreateTimeSeriesSummary
    at googleProtobufAnyFromProto3JSON (/poggio/node_modules/proto3-json-serializer/build/src/any.js:70:15)
    at fromProto3JSONToInternalRepresentation (/poggio/node_modules/proto3-json-serializer/build/src/fromproto3json.js:58:58)
    at /poggio/node_modules/proto3-json-serializer/build/src/fromproto3json.js:105:48
    at Array.map (<anonymous>)
    at fromProto3JSONToInternalRepresentation (/poggio/node_modules/proto3-json-serializer/build/src/fromproto3json.js:105:33)
    at Object.fromProto3JSON (/poggio/node_modules/proto3-json-serializer/build/src/fromproto3json.js:149:26)
    at GoogleErrorDecoder.decodeHTTPError (/poggio/node_modules/@google-cloud/monitoring/node_modules/google-gax/build/src/googleError.js:198:41)
    at Function.parseHttpError (/poggio/node_modules/@google-cloud/monitoring/node_modules/google-gax/build/src/googleError.js:71:37)
    at decodeResponse (/poggio/node_modules/@google-cloud/monitoring/node_modules/google-gax/build/src/fallbackRest.js:69:49)
    at /poggio/node_modules/@google-cloud/monitoring/node_modules/google-gax/build/src/fallbackServiceStub.js:101:42
⚠  Your function was killed because it raised an unhandled error.

This is roughly how we're using the library:
const client = new MetricServiceClient({ fallback: "rest" });
const dataPoint = {
  interval: {
    endTime: {
      seconds: Date.now() / 1000,
    },
  },
  value: {
    int64Value: 1,
  },
};

const requestArgs = {
  name: metricServiceClient().projectPath('project-name'),
  timeSeries: [
    {
      metric: {
        type: 'custom.googleapis.com/connectors/fivetran_sync_start',
        metricKind: 'GAUGE',
        valueType: 'INT64',
        labels: [
            runId: 'abc1234'
        ],
      },
      resource: {
        type: "global",
        labels: {
          project_id: 'project-name',
        },
      },
      points: [dataPoint],
    },
  ],
};
await metricServiceClient().createTimeSeries(requestArgs);

Environment details

OS: Ubuntu 18.04
Node.js version: 16
npm version:
@google-cloud/monitoring version: 3.0.2

Steps to reproduce

Create a MetricServiceClient with the rest fallback option, e.g. new MetricServiceClient({ fallback: "rest" })
Do something that causes createTimeSeries to error (in our case, I believe we were exceeding the rate limit).
Instead of an error message (which is what you get if you use the proto fallback), you get the following error: Error: googleProtobufAnyFromProto3JSON: cannot find type google.monitoring.v3.CreateTimeSeriesSummary: Error: no such type: google.monitoring.v3.CreateTimeSeriesSummary.

This probably means that the monitoring library needs to have more protos included – namely, the CreateTimeSeriesSummary type. I will take a look.

Hi, is there any movement on this out of curiosity? We are also running into the same issue on v4.0.0 of the library but not in fallback mode (aka. just new MetricServiceClient())


Fixing warnings

Dear Marc,
I've managed to reduce the number of warnings from fourty-something to 9. I've organized my changes in commits according to the change type to make it easier to review.
I've used the following principles:

I've fixed the warning wherever it seemed to be easy to fix
I've suppressed the warnings where it didn't seemed to be likely that the code would change in any ways, or the unused field or method served architectural goals
however I did not suppress the warnings where the code contained a todo, or the field served as an example. In these cases I believe the warning can be an indication that those parts will need more attention

Feel free to add any comments or requests, I'll update my pull request according to those.

Hello,
the getJaxbElement method is used widespread among the code to build a JAXBElement class where a choice type is used.
The original version of this method used an Object parameter what resulted in a war JAXBElement return value, this started to spread along the code. Practically that means that wherever we've received a JAXBElement the compiler did not know what type is inside of it. This can lead to unchecked casts, and possibly runtime exceptions if the cast was incorrect.
What I did in Commit 121e55a that I made the getJaxbElement generic: now the compiler knows if it's called with a SessionSetupReqType then the returned JAXBElement will by a JAXBElement
In the next commit c85a1a8 I could make other methods type safe like verifySignature: now the compiler can check that they are called with the correct JAXBElement, and not with any other element.
I understand that it is harder to read this method now, but on the other side this can help a lot where the method is used.
A short tutorial on generics: https://docs.oracle.com/javase/tutorial/extra/generics/methods.html

Why did you remove the @SuppressWarnings({"unchecked"}) in line 96 of State.java?

It's also a result of the change in getJaxbElement method: because it returns a typed JAXBElement the getV2GMessage could be made typed as well. Now the compiler knows for sure that the parameter contains on object that extends BodyBaseType, this means the method call is not unchecked anymore

All right, thanks for all the input and good suggestions. I'm ready to merge the pull request.


add neus surface rendering method with mono priors

Adding in NeuS surface rendering implementation from sdfstudio. Seems to be working with their provided Replica dataset.

I plan on adding the nerfstudio -> sdfstudio parser script as well. This method is too slow to use with the renderer so I'll also be planning on brining in the NeuS-Facto method. I pretty much followed what they implemented very closely, lmk if things make sense or if you'd like me to change implementation details.
I also need to add in the mesh export to extract .ply file from model

I sent you some comments on discord regarding the integration.

@pablovela5620 @tancik can someone please link discord link here for reference. Thanks in advance.

@pablovela5620 @tancik can someone please link discord link here for reference. Thanks in advance.

it was through a direct message so there's no link that can be shared, id be fine posting it here if that's okay with Tancik as well

It was basically about breaking the PR into multiple smaller PRs so that it is easier to review.

[x]  Dataset/Parser - this will include the depth/normal predictions and download from sdfstudio demo dataset. I will need to eventually add the depth/normal generation via omnidata or through the provided Polycam depth (I think the former is better to start since it means it can still work with COLMAP)
[ ]  Losses - Main additions are the monosdf normal/depth (these don't totally make sense without data above) for indoor scene reconstruction / sparse views
[ ]  Samplers + Models + Fields. I couldn't really find a good way to break this up since the sampler/fields/models are all based on the SDF (which no other current models provide), Unfortunately I think this will probably be a fairly large PR. I'll remove to start everything that doesn't have to do with Neus (since sdfstudio included all other methods that make more complex like VolSDF and Unisurf)
[ ]  Marching Cubes/ Mesh Extraction. To extract mesh from SDF and texture


8Knot users pinned to Gunicorn workers

Describe the bug
User's requests ought to be load-balanced across the Gunicorn pods as possible, allowing for user-request parallelism since the data is equal to all of the server workers. However, we're seeing that a user's requests are all pinned to one Gunicorn pod.
Multiple users can be pinned to multiple pods but this pinning causes 8x parallelism rather than 8x(# pods) parallelism.
There are 8 processes in each of the pods so there is some parallelism but still not optimal.

part of the Redis stabilization milestone, good for future progress.

Best case scenario is to have user's requests routed to pods in the web-server service based on the pod's relative load. An incoming request would always be routed to a specific service, but pods within that service would be load-balanced.
@codekow I think that this is a Sticky Session-type problem but I'm not sure. I set 'haproxy.router.openshift.io/balance: roundrobin' but all of my requests remain routed to the same pod in the service. Any suggestions?
@misc also suggests that default Routes might be insufficient for pod-based load-balancing.

Gunicorn # workers recommendation
The docs say that 4-12 workers can handle 100s to 1000s of concurrent tasks a second so we shouldn't scale up arbitrarily w/ more workers if we don't have to. The docs also say we could use 'async' workers for jobs like ours but those aren't globally recommended.
We'll bulk-down to 4 workers per server pod and have 2-4 pods running for memory considerations for the time being, and close this issue, having figured out the user-request-routing problem.


ITN performance for Icelandic

Describe the bug
The ITN process is terribly implemented for Icelandic:
Given the speech:
"Einar fór einu sinni út í búð með Kofi Annan" which roughly translates to "Einar once went to the store with Kofi Annan".
The returned DisplayText is "1 fór 1 sinni út í búð með kofi 2." this result is wrong because the Inverse Text Normalization (ITN) which should convert numbers written with text to digits is applied without consideration to the actual meaning of the text. None, of the text converted, is actually a number. "Einar" is a name of a person, "einu [sinni]" means once and "Annan" is also a name. All of these words have the same surface form as words which could mean a number in Icelandic.
Compare this to the English version which handles these cases a lot better:
"Once every one of them was ready for one battle." does not change a single word to the digit variant. Clearly, if the server would return "1 every 1 of them was ready for 1 battle." the service would not be acceptible.
To Reproduce
Steps to reproduce the behavior:

State the sentence "Einar fór einu sinni út í búð með Kofi Annan"  in Icelandic and process the result using the SDK.

Expected behavior
The DisplayText "Einar fór einu sinni út í búð með Kofi Annan".
Version of the Cognitive Services Speech SDK
Not applicable
Platform, Operating System, and Programming Language
Not applicable
Additional context
This is probably not the correct place to report this bug but it seems to be the only place where we (Icelandic speakers) can get this important point across. Currently, this speech-to-text service is the best available for Icelandic (according to WER over multiple test sets) but this handling makes the service unusable.
According to the SDK documentation at https://learn.microsoft.com/en-us/azure/cognitive-services/speech-service/display-text-format#itn the Inverse Text Normalization (ITN) is not configurable.
I have tested the REST API and it supports returning text without ITN, which produces text without ITN, making the service usable. Sadly, it does not support (to my knowledge) streaming which is our use-case and many of our customers.
Please forward this bug report to the relevant people.

Hi there,
Thanks for reaching out to us and I can understand how this would be frustrating. In our SDK there is the ability to request detailed results which should include lexical and other forms that might be better suited for your scenario.
Could you try that?
I'm not sure which programming language you are using but here is the c# sample: https://github.com/Azure-Samples/cognitive-services-speech-sdk/blob/master/samples/csharp/sharedcontent/console/speech_recognition_samples.cs#L80
I will also forward this to our speech service team to hopefully help fix the display text issue.

No problem! Glad you have it working! Feel free to open another issue if you run into any problems.


How to set drawer panel background color

...

The Drawer extends Composite, which extends Widget which has a background property.
tabris.ui.drawer.background = 'blue';

Thanks.


[bug] Skip correct number of escape characters

The correct escape characters in strings should be skipped. The current code skips a single character if an escape character is detected but it should skip as many characters as needed.
https://github.com/ianlewis/todos/blob/308b0db71dca8d831168eea5fbd204d6547926a0/internal/scanner/scanner.go#L319-L322
The escapeFunc should return the characters (or number of characters) that were escaped instead of just a bool.
https://github.com/ianlewis/todos/blob/308b0db71dca8d831168eea5fbd204d6547926a0/internal/scanner/languages.go#L57

This doesn't really seem to be an issue for any supported languages.


Support for Prisma 3.13 ETA?

As far as I can tell, the only thing holding us back from installing Umami on Ubuntu 22.04 now is support for Prisma 3.13 (or newer) in Umami?

Next release will have this.

Great to hear. Any ETA, even if just a ball park estimate? Thanks.

Available in v1.32.0


Description is not Optional!

Description is not optional, I think it should be optional. So I want to have just Title!

thanks for the issue and thanks for the heads up on the changing date to time. yes you are right and description can be optional. will consider that in the next update.

@mojienjoyment The update is out on repo now and will be up on f-droid soon. the description is optional now and some other minor changes are added as well.
I hope you enjoy the app and thanks for using the app :heart:


Error during build - babel is not a function

Getting this error on build:
error during build:
Error: _vite_plugin_babel.default is not a function
    at async doBuild (file:///home/projects/vitejs-vite-amhmw2/node_modules/vite/dist/node/chunks/dep-5cb728cb.js:43462:20)
    at async build (file:///home/projects/vitejs-vite-amhmw2/node_modules/vite/dist/node/chunks/dep-5cb728cb.js:43451:16)
    at async CAC.eval (file:///home/projects/vitejs-vite-amhmw2/node_modules/vite/dist/node/cli.js:758:9)

Vite Version: 2
Node Version: 16.4.2
@babel/core version: ^7.18.10
Here's a minimum reproduceable example: https://stackblitz.com/edit/vitejs-vite-amhmw2?file=vite.config.js

Thanks for reproduction! If you remove "type": "module" from package.json it will work for now, but I will make a release of this package that will support it

@DylanMashini new version 1.1.1 was published and should now fix your problem and support "type": "module"


Paket add Thoth.Elmish.FormBuilder.BasicFields fails.

When adding the BasicFields package to a project paket dumps the contents of BasicFields into the ./src directory rather than into ./.fable.  Paket then errors because it cannot resolve the FormBuilder project referenced from the BasicFields project.
There appears to be an additional line in Thoth.Elmish.FormBuilder.BasicFields.fsproj that looks like it could be the cause.

Ah yes sorry. There is probably a tool that touched my *.fsproj...
I just released version 0.1.2. Can you try it and tell me if this solved your problem ?

Yes this is fixed.  Thank you.


CI for Node

add node.js workflows

Contains the compiled JavaScript
Initializes with two players
Starts the game with a random player
Sets the current player to be whoever it is not


Editing Ingress Snippets in cluster.yaml removes line breaks

What kind of request is this (question/bug/enhancement/feature request):
Bug
Steps to reproduce (least amount of steps as possible):

Edit a cluster configuration in Rancher 2 as YAML
Configure multiline strings in ingress.options section (like http-snippet or location-snippet)
Click Save

Result:
"nginx-configuration" ConfigMap is garbled, and nginx-ingress-controller cannot apply it. When inspecting, you can see the snippet line breaks were removed.
Other details that may be helpful:
Example for the ingress section:
ingress:
    options:
      http-snippet: >-
        # caching time for different response codes
        proxy_cache_path /var/lib/nginx/cache levels=1:2 keys_zone=cache:10m
        max_size=4g inactive=360m use_temp_path=off;
        proxy_cache_key $host$request_uri$is_args$args;
        proxy_cache_valid 200 301 302 1m;
        proxy_cache_revalidate on;

If you add a "\n" to each line, it works:
ngress:
    node_selector:
      role: ingress
    options:
      http-snippet: >-
        # caching time for different response codes\n
        proxy_cache_path /var/lib/nginx/cache levels=1:2 keys_zone=cache:10m
        max_size=4g inactive=360m use_temp_path=off;\n
        proxy_cache_key $host$request_uri$is_args$args;\n
        proxy_cache_valid 200 301 302 1m;\n
        proxy_cache_revalidate on;

Environment information

Rancher version: v2.4.2
Installation option: single install

Cluster information

Cluster type: XCP docker-machine driver hosted VMs

Machine type: VMs

Kubernetes version: v1.17.4

Docker version: 18.6.3

The yaml parser is doing what you asked for.  The > means to fold newlines (turn them into single spaces) and the - to strip the trailing newline.  You want http-snippet: | to preserve newlines in the middle and a single one at the end.


Feature/User Profile Page

The story:
As a user of the learn site that wants to change my account information, I want to have a page where I can easily modify my settings.

What we should do:
We should create a new left hand menu used in all the myprofile pages so that all pages have the same links.
We should have editable textbox fields and edit profile picture so that users can update their information.
We should have dropdowns and uneditable fields populated with data from the DB.

To be successful we need to:
Check these off as they are completed:

[ ] Add buttons to the left hand menu used for all myprofile pages
[ ] Have dropdowns for 'practice goals' & 'why?', populated with our predetermined fields
[ ] Both 'date created' & 'longest streak' should be uneditable fields populated from users account data
[ ] Ability to choose a picture from local computer and set it as profile picture
[ ] Add "Saves Changes' button at bottom

Design

LINK TO FIGMA DESIGN

Relies on
N/A

Hey Ellie, I changed the links on the left hand menu for all dashboards. I have attached the new image for them. I removed the following three buttons (change password, reset account, delete account) these will now be under the settings page. Thanks

Changed the dashboard to reflect the newly implemented design change


rendering/flex.dart: assert can fail due to floating point

This problem did not occur on my phone, but did occur on my tablet. (Running in checked mode)
I was using a Scaffold and Material body, which led to a Column flex to fail rendering/flex.dart's line 475 think there are various flexes involved, one of which is a Column flex.
assert(size.height >= _overflow);

When I printed out what size.height and _overflow were, they were both 56.0, and when I changed it to assert(size.height + 0.0001 >= _overflow); the app showed up just fine. Thus, I've concluded that it's a problem with floating point comparison.
Can floating point comparisons be made more tolerant?

I misdiagnosed this.


Defined new revisions for golang dep: github.com/kubernetes/csi-translation-lib

Ran component through the scanners since I noticed it had not been harvested yet. PR matches curation site. Closing.


Evaluate need for deploy_key/private_key and SSH clones...

In order to do anything meaningful with this resource, users need to supply access_token since it's required for API calls (which are used in check, get and put).  Since we already have the access token, and the resource is trusted to handle it securely, is there really a need for supporting SSH clones with deploy keys?

More information here: https://github.com/itsdalmo/github-pr-resource/pull/11

This currently works, and the way it's (intended to be) implemented the token should never be written to disk, and both stdout/stderr is discarded for both pull and fetch - which are the only git operations that use the token as username/password.


lets add a real real time status UI that shows the status and version of the tenant services

here's a screenshot of my current prototype - PR on its way shortly

@jstrachan currently @pmuir is working on the Status, maybe he can add this to it.

My status API is more for the shared services rather than the tenant services.
Shouldn't the version numbers go the About dialog?

Maybe we can combine efforts then (phew glad we were not reimplementing the same thing ;).
I put the version in there too as finding the version and the status require the same kinda thing (finding the pod/deployment) for tenant stuff; but happy to hide the version and add to the about if you prefer. Should be easy to refactor the controller that groks the tenant status information into a service we can share in both UIs

The tenant service stuff is actually much much harder; e.g. finding out the tenant namespace/entity isn't possible from the router on the home page for example :)

Yep - add it to about.
Agreed on the controller, mine is super simple on the UI side, so just PR yours and I can fit around it.

Yes, tenant status stuff is the hard bit. SG has some tenant info on his status API but need to talk to him to find out more.

here's the PR which hopefully gets built soon with my minor PR for fabric8-ui to use this new widget
https://github.com/fabric8-ui/fabric8-runtime-console/pull/501

from the snapshot build deployed at https://fabric8-ui-fabric8-ui-pr-501-fabric8-runtime-console.int.rdu2c.fabric8.io - the status works great!
I wonder if there's a middle ground to the discussion above, rather than having
foo : version 1.2.3
we had
foo : 1.2.3
i.e. omitting the word 'version' so it looks cleaner but keeps the quick indication of what version is running?
Also while users seem to have to click the button to upgrade tenant apps and until we figure out a decent notification or auto update strategy..  I wonder if we should visualise in the status that a new version is available in a nice way?  So folks either have a quick click button on the status menu or at least know to go to the update profile?  It's another PR but figured it was worth mentioning whilst I thought of it.

I like that idea @rawlingsj

I like it; I did wonder if we detect there's a new version we should show the Update Tenant button too.
Though I guess ultimately we'll be automatically upgrading tenants for the user; so it'll just happen in the background anyways?

@rawlingsj the next PR build will have the version text removed and a tool top added in case folks wonder what the number is ;)

I like it!

This looks awesome @jstrachan !
Would there be a way to convey that we are using "Jenkins 2" with 'our distribution' version of '3.0.31' ?

we only use jenkins 2 ;) so I guess that could go on the About page?


Can't compile with fpm

Hi! Thank your for your project! In can be handy tu follow my calculations
I'm having the following compiling error:
build/dependencies/progress-bar/src/progress_bar.F90:10:27:

   10 |     use timer_module, only: timer, sec2hms
      |                           1
Error: Symbol ‘timer’ referenced at (1) not found in module ‘timer_module’
build/dependencies/progress-bar/src/progress_bar.F90:40:20:

   40 |         type(timer), save :: tmr  !! timer
      |                    1
Error: Derived type ‘timer’ at (1) is being used before it is defined
compilation terminated due to -fmax-errors=1.
<ERROR> Compilation failed for object " build_dependencies_progress-bar_src_progress_bar.F90.o "
<ERROR> stopping due to failed compilation
STOP 1

It seems there is some dependency problem on the module?

This is due to the fact that I did not fix the dependent hash in fpm.toml, which has been resolved in the latest commit.


Use async/await

@luin I started working on the PR for #1314, but I'm finding the callback-based code a little difficult to work with.
I noticed that the async/await syntax is not used anywhere in this project.
Is there a reason for not using it? Or would you accept a PR that converts some of the code to this syntax?
I've included a small change in this draft PR, but I'll convert more if I get a green light 🙂

hi @mjomble, thanks for the work!
ioredis still supports Node.js 6 (yeah I know it's pretty outdated...) so async function can't be used otherwise it will introduce a breaking change to codebases that uses v6.
We do have a plan for the next major version of ioredis with a batch of breaking changes, which will definitely include dropping the support of v6 (or maybe also v8...), so we should do the conversion at that point.

With the current TypeScript configuration (target: es6) the async/await code gets transpiled into generator functions that are also supported in Node.js 6, so it should be fine.
To be sure, I ran the entire ioredis test suite on Node v6 and all tests passed (after I downgraded mocha to 6.2.3 since mocha 7 doesn't support Node 6 either).

I pushed a few more commits. These also passed all tests on Node v6.

Yeah that makes sense then. My only concern is whether the generated generators have any negative effects in terms of like performance or bundle size, especially given we're going to release a new major version soon so Node.js 6 won't be supported.
I'll take a look at this PR this week. Good catch for the mocha compatible issue btw!

Fair enough. I just did a quick diff to the generated code and in general it lgtm. Will take a close look this week.


Files copied to s3 mount have different checksum:
wget -c --quiet https://d37ci6vzurychx.cloudfront.net/trip-data/yellow_tripdata_2024-01.parquet

rm ../s3/nyc-data/yellow_tripdata_2024-01.parquet
cp yellow_tripdata_2024-01.parquet ../s3/nyc-data/
shasum yellow_tripdata_2024-01.parquet
shasum ../s3/nyc-data/yellow_tripdata_2024-01.parquet

The output:
a73b714de7672a752a58de34826e08fae203e91b  yellow_tripdata_2024-01.parquet
2cf39315d5c8e2cab85703477c0169ac9785fcb9  ../s3/nyc-data/yellow_tripdata_2024-01.parquet

Relevant log output
https://gist.github.com/snowch/e2fc06bd420d92f060ee6e985ea3ed73

Hi, thanks for reporting the issue. Are the checksums always different when uploading with Mountpoint or only in some occasions?
I also noticed that you are using a third-party storage. Do you know whether they support additional checksums or not?
Mountpoint computes checksums for your data by default and send them along with the data so that data integrity can be verified on server side. However, POSIX file operations like read and write do not offer a built-in integrity mechanism and it's possible for data integrity to be lost in transit between your application and Mountpoint. More details in the SEMANTICS doc.

The checksums are always different.  Thanks for sharing the semantic information - I've used s3cmd for my usecase for now.

Thanks for confirming. The logs you provided only have information up to when the MultipartUpload is complete. Would you be able to also share relevant logs from read operation?


gen_nn_ops.fractional_max_pool_grad aborts with "malloc_consolidate(): invalid chunk size"

Issue type
Bug
Have you reproduced the bug with TensorFlow Nightly?
Yes
Source
binary
TensorFlow version
tf-nightly 2.18.0.dev20240817
Custom code
Yes
OS platform and distribution
Linux Ubuntu 20.04.3 LTS
Mobile device
No response
Python version
3.10.14
Bazel version
No response
GCC/compiler version
No response
CUDA/cuDNN version
No response
GPU model and memory
No response
Current behavior?
I encountered an crash issue in TensorFlow when I used API gen_nn_ops.fractional_max_pool_grad .
I have confirmed that above the code would crash on tf-nightly 2.18.0.dev20240817 (nightly-build). Please find the gist to reproduce the issue.
Standalone code to reproduce the issue
import numpy as np
from tensorflow.python.ops import gen_nn_ops
from tensorflow.python.ops import nn_ops
import tensorflow as tf

_PRNG = np.random.RandomState(341261)
num_batches =1
row_window_size=2
col_window_size=2
num_rows = (row_window_size - 1) * 5 + 1
num_cols = (col_window_size - 1) * 7 + 1
input_shape = (num_batches, num_rows, num_cols, 1)
sess = tf.compat.v1.Session()
with sess.as_default():
    x = np.arange(48, dtype=np.float32)
    _PRNG.shuffle(x)
    input_tensor =  x.reshape(input_shape)
    window_size = [1, row_window_size, col_window_size, 1]
    stride_size = [1, 65536, col_window_size - 1, 1]
    padding = 'VALID'
    output_tensor = nn_ops.max_pool(input_tensor, window_size, stride_size, padding)
    output_backprop = _PRNG.randint(100, size=output_tensor.shape)
    row_seq = list(range(0, num_rows, row_window_size - 1))
    col_seq = list(range(0, num_cols, col_window_size - 1))
    row_seq[-1] += 1
    col_seq[-1] += 1
    gen_nn_ops.fractional_max_pool_grad(input_tensor, output_tensor, output_backprop, row_seq, col_seq, overlapping=True)

Relevant log output
malloc_consolidate(): invalid chunk size
Aborted (core dumped)

@cybersupersoap,
Thank you for reporting the issue. I request you to take a look at this issue and https://github.com/tensorflow/tensorflow/issues/59405 where a similar issue has been proposed and it is still open.Also I request to follow the similar issue which has been proposed to have the updates on the same. Thank you!


Package no longer works on AppEngine (as it needs Go 1.6)

Go on AppEngine is on version 1.6. In the last few months miekg/dns has started to use features only in Go 1.7. As such this no longer compiles when using the AppEngine version.
As far as I can tell there is currently only one compile error:
vendor/src/github.com/miekg/dns/client.go:7:2: cannot find package "context" in any of:
	/Users/bramp/bin/go_appengine/goroot/src/context (from $GOROOT)

I understand the PITA supporting old versions, so I'm not going to argue too hard, but it would be possible to use build tags to move the go 1.7+ features into a separate file which is not compiled on Go 1.6. I'm happy to send a patch over for that if this project is willing.

hmmm, didn't realize at the time that context.Context was using the 1.7 package and not the out of tree one. We try to support the last two go version which now are: 1.8 and 1.7. I'm not a fan of pushing complexity upstream because of downstream issues...

Yes I understand this is not ideal. So for the record, 2d7eb4f050c25a6d4401af9abd939d42ac773331 is the last version that works on AppEngine, and for my case I'll pin my app to using that.
However, I just did some digging, and found that Go 1.8 is current in beta for AppEngine, so this problem will go away soon (I hope).


Types of computed properties seem to be ignored, resulting in run-time errors instead of compile-time errors

Vue version
3.4.31
Link to minimal reproduction
https://play.vuejs.org/#__SSR__eNqFVMtu2zAQ/JUte0gM+IE0PRmOgT4MtD0kQZq2FwI1La0lphJJkKs4gat/75KSHScI3JNNcnd2ZjjUVnxwbnzfoJiKWci8dgQBqXFQKVNcSEFBirk0unbWE2whs7VrCHNoYe1tDSfceyKNNPToEH4E9J9vr+ACttIA6HwKgbw2RVwZVePTuo1Nkwlce7uqsIa3Z1OgEsF5W3hVp0G6wgAbTSUYC+i99UPIMThNCApqHWpFWQkrpA1iB5cwCjTodQaJkxQ9KylAmTwVeJboze7cNFUlxViazJpAPIsueSd2sZCd4FmPMj89HcDFvBPY4yQA0w6ipA6jVo8rPIICf1PT/8Bmk+5O+AZ4QVi7ShHyCmD2ZjSKv/Dk4LspqMDGeAxNRcOkdIWV3cDyQNNY50tQWYYhwFrpijsIfGNI1zjsEGFTogHNUShtU+WpLFb1dwKp9HAW2HWadjhnuRfdg9ZIpc17mZyBpBRGo06Om1+mfGy3hxfAZKFtZxOXHHhV9fkUls/sXoIOPNt7zKh6TJecD6MarmI/mCQXLuGUw9AzUxk1quJabkykNGejjCgq4GAIX65+LX4ubqKjvJmCCNZwvWP5aOg1C2PUIpxl21RTlPTSwAEHDl7IB75CNuCZnHF8N3sTZpODFIghv08O3FoX47tgDT/ilCQp+kH+ypHmQErBuB0xKVip3XxLe+SbHWHuKTH788r+XXiIe1JcR7X+HqXYn5HyBVJ3vPh+iQ/8f39Y27ypuPrI4Q0GWzWRY1f2sTE50z6oS2y/ps8PZ+Y2LB4ITdiJikRjZZvqpeCv0acj0p/ono/fpz5+aezi73v0EZMN5IPx+Zlo/wEBe7jj
Steps to reproduce
Define a computed property with an explicit generic, and a return value that does not match the type of the generic. Additionally, define a computed property that may return null. Like so:

Then, use the computed properties in your template, as such:
<template>

Name: {{ notNullUser.id }}

Name 2: {{ maybeNullUser.name }}

</template>

What is expected?
I expect to receive two compile-time errors:

The first computed call should fail compilation, telling us that null is not assignable to the UserDTO type passed as a generic to the computed method.
The access of maybeNullUser.name in the second p tag should should result in an error saying something along the lines of user is potentially null, and demanding that access to maybeNullUser.name be locked behind a v-if="maybeNullUser" check before being accessed (i.e., the most basic type narrowing)

What is actually happening?
The component compiled without failure, and rendering the component results in an error at runtime: Cannot read properties of null (reading 'id'). This is caused by the access of notNullUser.id in the p tag in the reproduction.
I also presume that the same error would happen as a result of accessing the second p tag, the maybeNullUser.name accessor should fail, as maybeNullUser's type dictates that it can be null.
This behavior occurs regardless of SSR, but I have enabled SSR in the reproduction link because that is what I use in my projects. That being said, I do not believe that this is an issue with SSR itself.
System Info
I made this reproduction on the Vue SFC playground, and shared a link. As a result, I am not sure how relevant the result of npx envinfo is, when ran in an unrelated environment.
Any additional comments?
I noticed that type narrowing of discriminated unions does not work within templates. I decided to investigate further, and found that this reproduction is a lot less complex, and fails in a similar way. This leads me to believe that there is an overall lack of support for type information within the template, despite Vue documentation saying TypeScript is indeed supported within templates.

Maybe this is a bug in the playground


Open Source Docker Desktop

Tell us about your request
Release the source code for Docker Desktop
Which service(s) is this request for?
Docker Desktop
Tell us about the problem you're trying to solve. What are you trying to do, and why is it hard?
The community could help fix bugs faster.
Are you currently working around the issue?
I'm using podman

Thank you for the request, we have no plans to open source Docker Desktop at this time. If you are interested in contributing to Docker Engine this remains open source and we would love your input.


[stress-tests] add service ALOC connectivity stress test

Test setup:

Nodes pings the BR by it's service ALOC and measure the connectivity
Topology

Router x20
FED x10
MED x10
SED x10

Fault Injections:

Nodes are constantly moving
Nodes fail for 60s in every 600s
Packet Loss Ratio set to 0.2

Pass Criteria

Max Delay (of all nodes) <= 3600s

Codecov Report

Merging #95 into master will decrease coverage by 0.08%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master      #95      +/-   ##
==========================================
- Coverage   40.07%   39.99%   -0.09%
==========================================
  Files          16       16
  Lines        2438     2438
==========================================
- Hits          977      975       -2
- Misses       1441     1443       +2
  Partials       20       20

Impacted Files
Coverage Δ

web/web.go
42.02% <0.00%> (-2.90%)
:arrow_down:

Test setup:

Nodes pings the BR by it's service ALOC and measure the connectivity

Topology

Router x20
FED x10
MED x10
SED x10

Fault Injections:

Nodes are constantly moving
Nodes fail for 60s in every 600s
Packet Loss Ratio set to 0.2

Pass Criteria

Max Delay (of all nodes) <= 3600s

@simonlingoogle I'd like this documentation be also at the head of the test script file. So the reader can figure out the test easier. Thoughts?

Test setup:

Nodes pings the BR by it's service ALOC and measure the connectivity

Topology

Router x20
FED x10
MED x10
SED x10

Fault Injections:

Nodes are constantly moving
Nodes fail for 60s in every 600s
Packet Loss Ratio set to 0.2

Pass Criteria

Max Delay (of all nodes) <= 3600s

@simonlingoogle I'd like this documentation be also at the head of the test script file. So the reader can figure out the test easier. Thoughts?

added

@simonlingoogle , please help resolve conflicts.

@simonlingoogle , another conflict after merging #92 :)

@simonlingoogle , another conflict after merging #92 :)

resolved


az network vnet-gateway list-advertised-routes has incomplete data

Describe the bug
Executing az network vnet-gateway list-advertised-routes lists routes, but does not appear to correctly populate 'origin' or 'sourcePeer' for routes learned from other connections.
To Reproduce
Have a VPN Gateway with 2 or more BGP enabled VPN connections, run:
az network vnet-gateway list-advertised-routes -g <rg> -n <name> --peer <peerip> --output json
For routes learned from other connections you will see similar to:
{
  "asPath": "65525-65020",
  "localAddress": "<IP_ADDRESS>",
  "network": "<IP_ADDRESS>/20",
  "nextHop": "<IP_ADDRESS>",
  "origin": "Incomplete",
  "sourcePeer": null,
  "weight": 0
}

Expected behavior
Expected sample should show the correct details of the route, for example:
{
  "asPath": "65525-65020",
  "localAddress": "<IP_ADDRESS>",
  "network": "<IP_ADDRESS>/20",
  "nextHop": "<IP_ADDRESS>",
  "origin": "EBgp",
  "sourcePeer": "<IP_ADDRESS>",
  "weight": 0
}

Environment summary
Installed via apt-get on Ubuntu on WSL on Windows 10 Pro 1809 17763.316
azure-cli 2.0.58
network 2.3.2
Additional context
N/A

Thank you for the report @alexjmoore. This is what is directly returned from the service, so the service team will need to address this.

@radwiv

Are there any updates on this issue please?

@radwiv any update?

@alexjmoore Apologies for the delayed response. This GitHub issue has been open for quite some time. Could you please let us know if you still facing this issue and need assistance? Awaiting your reply.

Unfortunately I no longer worth with Azure (I raised this some years ago), however it should be very easy to validate with someone who has a BGP based configuration to understand if it is correctly returning the right values.


[feature-request] Clicking file tab should maximize file pane.

VSCode Version: 1.16.1
OS Version: Ubuntu/GNU-Linux 17.04

Steps to Reproduce:

Open a file, should open the file in a file tab.
Double click in the file tab does nothing.
Explore pane and bottom pane should be minified to show only the file tab.

Reproduces without extensions: Yes

This feature request will not be considered in the next 6-12 months roadmap and as such will be closed to keep the number of issues we have to maintain actionable. Thanks for understanding and happy coding!

I don't think closing it is a good idea. I think it's better to tag it as 'backlog' or something similar. Closing the issue, puts it in the bucket of 'done or won't do at all',
How will you then separate the 'to do' from the 'done' in 12 months?


Adding support for Zarr datasets

As part of Pangeo's general integration of STAC, we currently have a STAC Catalog roughly mirroring Pangeo's Intake catalogs, as well as support for rendering Zarr metadata with STAC Browser. Another major step forward with this integration would be adding support to load Zarr datasets through Intake-STAC.
What steps need to be taken to make something like this happen? At the moment, Zarr datasets are represented in STAC as Collections with a single asset - a link to the consolidated metadata file of the Zarr dataset, with a role of zarr-consolidated-metadata; an example of this here:
{
  "stac_version": "1.0.0-beta.2",
  "stac_extensions": [
    "collection-assets"
  ],
  "id": "sea_surface_height",
  "title": "sea-surface altimetry data from The Copernicus Marine Environment",
  "description": "",
  "keywords": [],
  "extent": {
    "spatial": {
      "bbox": [
        []
      ]
    },
    "temporal": {
      "interval": [
        []
      ]
    }
  },
  ...
  "assets": {
    "zmetadata": {
      "href": "https://storage.googleapis.com/pangeo-cmems-duacs/.zmetadata",
      "description": "Consolidated metadata file for Zarr store",
      "type": "application/json",
      "roles": [
        "metadata",
        "zarr-consolidated-metadata"
      ]
    }
  }
}

Some random obstacles that come to mind:

How can storage options (such as requester pays status) be specified for an individual dataset?
Should we only be focusing on consolidated Zarr datasets, or generalize Zarr representation in STAC to encompass non-consolidated datasets as well?
Spatial/temporal extent can probably be decided by looking at the Zarr metadata, but if this is impossible should it just default to the widest possible ranges?

Thanks for opening this @charlesbluca ! We definitely want to get this functionality into intake-stac.  Some specific responses and other thoughts below.
First, how is intake-STAC currently structured? We open the entire catalog (or collection) but each asset is mapped to an intake driver (many specified in the intake-xarray library). Your example asset has "type": "application/json", which currently maps to just being opened as a textfile. I understand the metadata is JSON but would it be better to use 'application/zarr': 'zarr' ?
https://github.com/intake/intake-stac/blob/3b0b181501512ffd07f6a867386ae0d678c88098/intake_stac/catalog.py#L36
I think functionality will need to be coordinated with @martindurant's open PR in intake-xarray to use xr.open_dataset(engine='zarr')

How can storage options (such as requester pays status) be specified for an individual dataset?

Not sure this needs to be in the metadata, but this would be specified as a global fsspec/s3fs setting in your code.

Should we only be focusing on consolidated Zarr datasets, or generalize Zarr representation in STAC to encompass non-consolidated datasets as well?

In your current cataloging efforts is there any Collection or Item that points to a simple asset with a .zarr 'href' ? I think we'd want to come up with a solution that works for both

Spatial/temporal extent can probably be decided by looking at the Zarr metadata, but if this is impossible should it just default to the widest possible ranges?

My understanding is that any STAC Item needs a bbox and datetime property, but a collection (your example) does not. I'm not up to speed on the STAC Zarr discussion, so hopefully @rabernat or @matthewhanson can clarify.

Thanks for these clarifications!
The current efforts don't have any .zarr href assets - just for clarity, those are essentially equivalent to an href to the directory containing the Zarr group, right?
I'm interested in the arguments provided within the type for some of the drivers; for example:
https://github.com/intake/intake-stac/blob/3b0b181501512ffd07f6a867386ae0d678c88098/intake_stac/catalog.py#L25
Are things like cloud-optimized=true just there for user clarity, or could they be used to control the behavior of the driver itself? My thought was that we could use .zarr style hrefs as the standard, and have something like 'application/zarr; consolidated=*' used to decide whether the driver will handle the Zarr group as consolidated or not (which in most cases is just the difference between .zmetadata or .zgroup appended to the href).
As for the extent, I was basing the current use of the widest possible ranges on some notebooks @rabernat put together, so I think I'll go ahead with that method unless there's any problems later on.
I'll certainly check out the open PR to intake-xarray.

The current efforts don't have any .zarr href assets - just for clarity, those are essentially equivalent to an href to the directory containing the Zarr group, right?

Yes. Just thinking of how we might get a PR started for this with a couple simple test files, something with consolidated metadata and another without.  Note also, if the STAC Asset omits 'type' we currently make a guess based on URL suffix:
https://github.com/intake/intake-stac/blob/3b0b181501512ffd07f6a867386ae0d678c88098/intake_stac/catalog.py#L446-L450

have something like 'application/zarr; consolidated=*' used to decide whether the driver will handle the Zarr group as consolidated or not (which in most cases is just the difference between .zmetadata or .zgroup appended to the href).

This seems like an interesting idea! I don't know much about media types, it seems there is lengthy discussion on allowable formatting for COG mimetypes here (and linked issues) https://github.com/radiantearth/stac-spec/issues/251
Would be keen to hear @andersy005 and @wildintellect 's thoughts here as well!

If you do end up using the contents type to discriminate, please link with https://github.com/intake/intake/pull/494 , which is a similar idea, but not very fleshed out.

Thanks for sharing the discussion on mimetypes going on within STAC spec - it would probably be good to get some perspective from the general STAC maintainers on what they consider allowable in terms of specifying consolidated versus non-consolidated Zarr (or if it even needs to be done if it can be guessed based on URL).
@martindurant, do you think it would be worthwhile to make progress on the mimetype handling within Intake and use that to handle the functionality of Intake-STAC's initialization of a StacEntry? It seems like they are both accomplishing similar tasks.

do you think it would be worthwhile to make progress on the mimetype handling within Intake and use that to handle the functionality of Intake-STAC's

Maybe? It wasn't too clear how to continue there, since MIME is not a very good spec, but where we do have a good spec, as being discussed here, it would make sense to use a registry for dispatch. It does't make much difference whether this registry lives in intake or here until a broader set of types might be added.


kvm, tun and vhost-net resources are not reported after kubelet restart

/kind bug
What happened:
After systemctl restart kubelet (or systemctl restart origin-node on OpenShift), kvm, tun and vhost-net resources are reported empty.
What you expected to happen:
Those resource should keep their original value.
How to reproduce it:
Prepare the cluster:
make cluster-up
make cluster-sync

List node resources:
./cluster/kubectl.sh get nodes -o yaml

...
    allocatable:
      cpu: "5"
      devices.kubevirt.io/kvm: "110"
      devices.kubevirt.io/tun: "110"
      devices.kubevirt.io/vhost-net: "110"
      hugepages-1Gi: "0"
      hugepages-2Mi: 128Mi
      memory: 4679260Ki
      pods: "110"
...

Restart kubelet:
./cluster/cli.sh ssh node01 'sudo systemctl restart kubelet'

After a while, list node resources again:
./cluster/kubectl.sh get nodes -o yaml

...
    allocatable:
      cpu: "5"
      devices.kubevirt.io/kvm: "0"
      devices.kubevirt.io/tun: "0"
      devices.kubevirt.io/vhost-net: "0"
      hugepages-1Gi: "0"
      hugepages-2Mi: 128Mi
      memory: 4679260Ki
      pods: "110"
...

Anything else we need to know?:
Environment:

KubeVirt version: used master branch
Cloud provider or hardware configuration: local kubevirtci, tested with os-3.11.0-crio and k8s-multus-1.13.3

@rmohr hit this one while debugging #2076

@rmohr ah, sorry, failed finding the duplicate. Closing

@phoracek ha funny, I found #2076 while debugging #2068. :+1:


Discussion

Is there any discussion forum available for ehcache? I need to know whether we can use ehcache without ehcache.xml configuration? If yes what is the default cache configuration that is used by ehcache.

The mailing list is referenced on https://github.com/ehcache/ehcache3/blob/master/CONTRIBUTING.adoc.
No. You need configuration. Not having cache configuration is craziness. However, you can do it programmatically. So without ehcache.xml. See https://github.com/ehcache/ehcache3-samples/blob/master/basic/src/main/java/org/ehcache/sample/BasicProgrammatic.java.


Fix registered paths

LGTM, probably also good to add a test case :)

EDIT: Looks like I already added back in November - ef65d43301e500885da9d4ea95d3fbf3b9439398.
So the only test we are missing is the one which checks that invalid paths are not registered, but that's probably a bit hard to add.


PermissionHandlerPlugin.java: uses or overrides a deprecated API.

🏗 Enhancement Proposal
Hello, please review code of your package, AS claims about deprecated code.
permission_handler-3.3
Platforms affected (mark all that apply)

[ x] :iphone: iOS
[x ] :robot: Android

@menezes85 can you be a bit more elaborate? Maybe you can supply us with some log output?
Do you know that it is specific to our plugin? I know that Flutter itself also makes calls to some deprecated methods which happen to show up in the logs.

hello @mvanbeusekom ,
here follows the part that AS reports deprecation:
PermisionHandlerPlugin.java , Line 182, 616 and 617.
 case Manifest.permission.PROCESS_OUTGOING_CALLS:
public static final String PROCESS_OUTGOING_CALLS
According to documentation:
This constant was deprecated in API level 29.
Applications should use CallRedirectionService instead of the Intent.ACTION_NEW_OUTGOING_CALL broadcast.

when this will be out ??

In my case I got the following error. My project doesn't build, if I add the package.
Note: C:\Users\UserX\flutter.pub-cache\hosted\pub.dartlang.org\permission_handler-3.3.0\android\src\main\java\com\baseflow\permissionhandler\PermissionHandlerPlugin.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Finished with error: Gradle task assembleDebug failed with exit code 1

compileSdkVersion 28
minSdkVersion 23
targetSdkVersion 28


Use of window.location.replace to initiate login call

Issue and Steps to Reproduce
After SSO and redirecting to the webpage, the history stack is duplicated in Safari or IOS due to window.location.href. Is there any way to change this behaviour?

HI @synapxe-siang13, Thank you for your issue,
You can inject your own behavior inside the OidcProvider :
https://github.com/AxaFrance/oidc-client/blob/4f9ca8e903fc286f4d72ce069ad92873624ca2d3/packages/react-oidc/src/OidcProvider.tsx#L44C14-L44C28

@guillaume-chervet Thank you for your reply. I will test this out.


Use PATCH semantics by default to set custom metadata

This changes the default behavior from POST to PATCH so that the custom metadata passed into VM#setMetadata augments what is already set.
Fixes #168

[x] Tests and linter pass
[x] Code coverage does not decrease (if any source code was changed)
[x] Appropriate docs were updated (if necessary)

As was suggested in #168, switching to PATCH semantics may be more appropriate. However, it's unclear to me if this is what was intended by the comment or perhaps this plus some other work.
Specifically, by defaulting to PATCH semantics, it would make it impossible to use VM#setMetadata to delete custom metadata (which is fine for my use case, but I suspect it wouldn't be fine for everyone else's use case).

Thank you for this! Unfortunately, the upstream API only accepts POST. When I said PATCH semantics, I just meant what you were proposing was spot on (doing the merging within our library for the user). Sorry for the confusion!

Specifically, by defaulting to PATCH semantics, it would make it impossible to use VM#setMetadata to delete custom metadata (which is fine for my use case, but I suspect it wouldn't be fine for everyone else's use case).

Great point. I added some flare to the code to support removing and updating values.
Let me know what you think!

@pickypg Thanks for the PR! Could you have a look at the failing lint job?

@fhinkel sure, but I think it’s best to wait for @stephenplusplus (or you) to comment on the feedback to his modifications.

@stephenplusplus this one is ready for you to review :)

LGTM! @pickypg thank you for this! 🥇

Thanks for the handling everyone. I'm excited to see this get into the library so that I can remove the code in my GCF that was doing this manually!


cluster-1.yml#slack attribute

Add a dedicated cluster-1 slack user group attribute to support clusters without GitHub authentication.
Remove slack-cluster-usergroups

Tickets:

slack-cluster-usergroups OIDC support (APPSRE-6575)
Merge slack integrations (APPSRE-6593)

would it make sense to make this implicit?
the reason we manage these user groups is to notify of upgrades. upgrades depend on ocm. so if a cluster has an ocm section, (implicitly) manage the user group <cluster_name>-cluster?
in addition, perhaps we could allow disabling of slack-usergroups in a cluster file (disable.integrations)?
tl;dr in my view, this PR may not be required, if you accept this proposal.

An implicit slack user group name is possible, and I can create a q-r method for that and reuse it in several integrations. 👍  But what about the channel? Currently, it comes from https://gitlab.cee.redhat.com/service/app-interface/-/blob/master/data/dependencies/slack/coreos.yml#L62, which will be gone.

the channel is just a place holder because (i think) there must be at least one channel

Yes, there must be one. Ok, then I'll reuse the slack-workspace config pattern.


PMID:16428435

decreased cyclin-dependent protein kinase activity
A molecular function phenotype in which the observed rate of a cyclin-dependent protein kinase activity is decreased.

@PCarme  I put this session through with a placeholder for the term, so watch out for this (later in the week hopefully)


added swift-server webauthn library

I found this swift library recently which can be used at server end. Not sure whether this is FIDO conformant , but will surely be a good addition.

Looks good @harhitosw. Thanks


Update for 6.2

Hello Ottermandias,
While ichi-obi already made the thread I wanted to add some context to it. I'm speaking for several people in the RP community and we really miss this plugin. While it's called AutoVisor many use this for our cposes instead. It's just nice to differentiate poses between classes/jobs. (A more timid pose for healers, a more daring one for tanks, I'm sure you as developer understands.) Myself personally also used this a lot for the different cposes with weapons drawn.
In short: Myself and others really love your plugin and would like it back! <3
Now we don't want to rush you.  Possibly work on your island sanctuary or the new raids or anything else. But would like to request if you have any plans on updating the plugin in the future. If yes, please take all the time you need. If I can help personally in some way I'd love to. If no that will be a sad day but you shouldn't feel guilty about this. At least we would be having a confirmation on this and will have to seek another solution.
Thanks in advance for any response!

Honestly, I just forgot about it. I don't use AutoVisor myself.
I updated the offsets and did a rudimentary check that everything worked (which it seemed to do). Let me know if anything else broke.

Wow, many thanks for such a fast response and an update even. I just updated it ingame and so far it seems to work just like before.
From myself and a bunch of others: Thank you very much!

Yes, thank you! I use AutoVisor daily on all jobs!


Second memory audit

This is intended to be another step in the general direction of hierarchical ownership, in which objects distribute non-owning handles to the sub-objects they create (e.g. a solver class giving a non-owning reference to an operator it creates).  Primarily this is via the removal of shared_ptrs which introduce incidental data structures.
The only remaining shared_ptrs in the solver classes are for boundary conditions, meshes, and FEStates, which are currently pending the merging of other branches.
This PR also addresses minor style issues like parameter names differing between function declarations and implementations.

This looks good.  I like that it is more explicit on the ownership of each object.  As for my earlier comment, it is fine as long as it is used sparingly and is explicit in comments (which it is).  We should probably write up a small coding guideline on when/where to use each memory pattern for our code specifically.  I think that would help my general concern.

LGTM

LGTM


Any plans for tvos support?

I have used GBDeviceInfo in alot of projects over the years. However, in a recent project that had alot of common code between iOS and TVOS, i had to remove the pod. Do you have any plans for adding TVOS support?

Submit a PR! And I I'll review it promptly.
Sent from my mobile device.
--
Luka Mirosevic | Founder |<EMAIL_ADDRESS>| +43<PHONE_NUMBER>
Goonbee e.U.
Neustiftgasse 108/9, A-1070 Wien
FN 394906w
This email and its attachments may be confidential, privileged and protected from disclosure. If you received this communication by mistake, please don't forward it to anyone else, please erase all copies and attachments, and please let me know that it went to the wrong person. Thanks.

On 19 Jan 2017, at 11:10, Haseeb Yousaf<EMAIL_ADDRESS>wrote:
I have used GBDeviceInfo in alot of projects over the years. However, in a recent project that had alot of common code between iOS and TVOS, i had to remove the pod. Do you have any plans for adding TVOS support?
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub, or mute the thread.


[banuser] Test intervention message sending

Implement test_send_intervention_messages in https://github.com/citizensandtech/CivilServant/blob/staging/tests/test_banneduser_experiment_controller.py#L444
Details to test:

[x] that there is no ExperimentAction before _send_intervention_messages is called
[x] that the new ExperimentAction has (some) expected values, e.g. it's a USER
[x] that the ExperimentThing is updated with a status (query_index) of COMPLETE and metadata message_status
[ ] bonus: would be nice to exercise error cases (by returning an error from a mocked praw)

closing this in favor of the bigger fish we have to fry


UMKPatternMatchingMockRequest unable to add header parameters

Hi,
I want to add parameters in headers in UMKPatternMatchingMockRequest. But I can't find any method or variable which is doing the same.
Is this expected or is there any other way to do this?

Hi,
I’m not 100% sure what you mean by “add parameters in headers in UMKPatternMatchingMockRequest. If you want to verify the HTTP headers, you can do so using by examining the URL request that is passed to the requestMatchingBlock. You can do this using +[NSURLRequest umk_HTTPHeadersAreEqualToHeaders:].
If you want to special HTTP headers for your responder, you can do so using +[UMKMockHTTPResponder mockHTTPResponderWithStatusCode:headers:body:].


Commands to turn the alarm on and off in the protocol Suntech

I added the lines responsible for sending the commands to turn the alarm on and off in the protocol Suntech

What happened to this pull request? Why did you close it?

Anton, I received an error while sending the request, I did not understand
the error, so I decided to close it.
I'll first learn how to use Github and then send the request again.
Thank you
Em sex, 16 de jun de 2017 às 20:45, Anton Tananaev<EMAIL_ADDRESS>escreveu:

What happened to this pull request? Why did you close it?
—
You are receiving this because you modified the open/close state.
Reply to this email directly, view it on GitHub
https://github.com/tananaev/traccar/pull/3262#issuecomment-309168299,
or mute the thread
https://github.com/notifications/unsubscribe-auth/ADu5jtbqJgxUvg29alGI3ayRZEyVb-ldks5sExORgaJpZM4N9Afu
.

--
Att.
Marcio Torres®


Hotkeys: changing keyboard shortcuts for creating streams and toggling stream subscriptions.

fixes #9614
1. The create_stream shortcut has been changed from 'n' to 'ctrl + shift + s'.
Earlier the shortcut could only be triggered from the stream settings modal.This has been fixed.
Now streams can be created without  having to go to the stream settings modal.
2. Also,The toggle subscription hotkey has been changed from 'shift + s ' / ('S') to 'shift + t' / ('T').
GIFs or Screenshots:

shortcut can now be triggered from main message view also.

@zulipbot amended

@timabbott the PR is ready for review.

@timabbott @lonerz the PR is ready for review.

@timabbott @rishig The PR is ready for review.

@victorphoenix3  Is this repository deleted? I see an unknown repository tag.
You should fix the merge conflicts before someone can review the code.
Additionally, the commit messages will need to changed a little bit.
And, checkout the Version Control Guide.

@vinitS101  i had to delete the fork,thus the unknown repository tag.
I have made the required changes and opened a new PR #13379 for this.


add integration tests for eks container insight

Add integration tests for eks container insight

I just realized it's a common pattern to add template files under testcases, yet I don't feel it's the right place for templates used for resource provisioning. I'm not asking changes in this PR but definitely need to optimize the layout in the coming code refactoring.


Help with rendering images within ObsidianVault

Hi, thank you for all your work in getting images inside of Neovim. I am really excited to try and get this working.
I am able to use the minimal setup and also configured my setup to work with this style image:

Inside of my ObsidianVault, I have an Attachments folder at the root where all of my images are stored.
How can I configure image.nvim to look in this directory when it sees something like this?
![[Test.png]]
I am probably missing something obvious or unsure how to configure resolve_image_path to make this work.
Thank you again for your time and work on this plugin!

Hey, we could probably add a hook for the Markdown integration, it must be trying to load the image from the same directory as the document when it should search for it in a special place. You can patch it in the markdown integration meanwhile.

Will do. Here's what I have hard coded and got it to render correctly.
          elseif current_image and key == "url" then
            current_image.url = "~/Documents/ObsidianVault/Attachments/" .. value
            table.insert(images, current_image)
            current_image = nil
          end

@exosyphon In case that helps, you can use the resolve_image_path parameter in your config for this:
          resolve_image_path = function(document_path, image_path, fallback)
            local working_dir = vim.fn.getcwd()
            -- Format image path for Obsidian notes
            if (working_dir:find("path/to/your/vault")) then
              return working_dir .. "/" .. image_path
            end
            -- Fallback to the default behavior
            return fallback(document_path, image_path)
          end,

@exosyphon In case that helps, you can use the resolve_image_path parameter in your config for this:
          resolve_image_path = function(document_path, image_path, fallback)
            local working_dir = vim.fn.getcwd()
            -- Format image path for Obsidian notes
            if (working_dir:find("path/to/your/vault")) then
              return working_dir .. "/" .. image_path
            end
            -- Fallback to the default behavior
            return fallback(document_path, image_path)
          end,

This is very helpful! One addition: find  has an optional flag for the start position and a flag whether the string should be interpreted literally. The latter is important, so vault paths like obsidian-vault are detected. So change the line to this:
            if (working_dir:find("path/to/match",1,true)) then

I'm having a problem getting this to work. The return paths are correct, but the plugin is not rendering any images.
resolve_image_path = function(document_path, image_path, fallback)
	local working_dir = vim.fn.getcwd()
	local notes_dir = vim.fn.expand(vim.env.NOTES_DIR)
	-- Format image path for Obsidian notes
	if working_dir:find(notes_dir, 1, true) then
		return vim.fn.shellescape(notes_dir .. '/' .. image_path)
	end
	-- Fallback to the default behavior
	return fallback(document_path, image_path)
end,

Here is an example doc:
File: $NOTES_DIR/folder/something.md
![[assets/something/hashmd5.png]]

image_path -> assets/something/hashmd5.png
The returned value from the resolve_image_path is correct: '/Users/ahmedelgabri/notes/assets/something/hashmd5.png'
If I run file '/Users/ahmedelgabri/notes/assets/something/hashmd5.png' I get this, so the image exists on disk which means the path is correct.
/Users/ahmedelgabri/notes/assets/something/hashmd5.png: JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, baseline, precision 8, 5170x2802, components 3

But I don't see any previews, if I go an open a different .md file outside of the notes path, for example a README.md inside a repo, I can see image previews just fine.

@ahmedelgabri I investigated your problem a bit. I had to slightly modify your function to set the environment variable to my own Obsidian path:
  vim.env.NOTES_DIR = "/home/fic/second-brain"

I was able to fix your function by removing the call to vim.fn.shellescape. In case it matter, I am on Linux. Please try the following:
local function resolver_ahmed_fixed(document_path, image_path, fallback)
  -- I had to set my own vault root, but you
  -- shouldn't need this line yourself
  -- vim.env.NOTES_DIR = "/home/fic/second-brain"
  local working_dir = vim.fn.getcwd()
  local notes_dir = vim.fn.expand(vim.env.NOTES_DIR)
  -- Format image path for Obsidian notes
  if working_dir:find(notes_dir, 1, true) then
    return (notes_dir .. "/" .. image_path)
  end
  -- Fallback to the default behavior
  return fallback(document_path, image_path)
end

With this I was able to get your function to work with the environment variable.

Better Obsidian.nvim Integration
If you are like me, you often open Neovim in some other directory like $HOME, and then use obsidian.nvim's Quick Switcher to open your notes. In that case, the previous solutions won't work; the conditional check will fail because the vault path isn't in Neovim's cwd string.
The following solution works for me:
local function resolver(document_path, image_path, fallback)
  local vault_dir = "path/to/your/vault"
  -- Format path for Obsidian vault
  if document_path:find(vault_dir, 1, true) then
    return vault_dir .. "/" .. image_path
  end
  -- fallback to default
  return fallback(document_path, image_path)
end

Simply checking whether the vault path is inside the document_path yields much more consistent results.

@ficcdaf thanks, I tried your fix but it still doesn't work. I don't use Obsidian.nvim, but I will give it a look

I found the way to make it work for me, you can try it. Here's the snipppet:
config = function()
    require("image").setup({
        backend = "kitty",
        integrations = {
            markdown = {
                enabled = true,
                clear_in_insert_mode = false,
                download_remote_images = true,
                only_render_image_at_cursor = true,
                filetypes = { "markdown", "vimwiki" }, -- markdown extensions (ie. quarto) can go here
                -- Custom function to resolve image paths
                resolve_image_path = function(document_path, image_path, fallback)
                    -- Define the absolute path to your Assets directory
                    local assets_dir = vim.fn.expand("~/path/to/your/images/dir") -- not the path to vault, but to the assets dir

                    -- Check if the image_path is already an absolute path
                    if image_path:match("^/") then
                        -- If it's an absolute path, leave it unchanged
                        return image_path
                    end

                    -- Construct the new image path by prepending the Assets directory
                    local new_image_path = assets_dir .. "/" .. image_path

                    -- Check if the constructed path exists
                    if vim.fn.filereadable(new_image_path) == 1 then
                        return new_image_path
                    else
                        -- If the file doesn't exist in Assets, fallback to default behavior
                        return fallback(document_path, image_path)
                    end
                end,
            },


Cut player jump short if jump button is released early

resolves Valks-Games/sankari#201
Creating a new branch/PR because my machine was logged in to my old git acct last time.

Resolved by https://github.com/Valks-Games/sankari/commit/a91ce1383ab0a1c86a39609cd068f744359e9943


Include explanation of "fight" mechanics.

Feature Request:
Simple and fun, I love the game :) Great job!
I find it a bit confusing sometimes when a tile beats another.
Maybe a quick explanation in the Readme or the slider, describing the mechanics as to how it works when calculating who beats who. Sometimes a lower number beats a higher.
Is it the bonuspoints that have an influence? or is it random?

Hey @plenge thanks for the feature request; I am working on a tutorial mechanic I think will make this much clearer.
To answer your questions in the meantime

Every battle still has an element of chance - so a 10 tile versus a 9 tile is not guaranteed a win; every point is contested, this favours the attacker 70 percent of the time; so its generally better to attack than be attacked :)

Bonus Points

Yeah Bonus points do have a strong influence - there are two types, Expansion and Capital Bonuses.
When you roll at the end of your turn, you get between a 1 or a 6, your bonus is added to the dice roll
You get an extra bonus point for every 4 tiles under your control
You get 2 extra points for every Capital tile (A tile with 10 or higher points)
So you can choose based on the map layout whether a quick expansion is best, or building stronger tiles instead to begin with.

Hey @plenge thanks for the feature request; I am working on a tutorial mechanic I think will make this much clearer.
To answer your questions in the meantime

Every battle still has an element of chance - so a 10 tile versus a 9 tile is not guaranteed a win; every point is contested, this favours the attacker 70 percent of the time; so its generally better to attack than be attacked :)

Bonus Points

Yeah Bonus points do have a strong influence - there are two types, Expansion and Capital Bonuses.
When you roll at the end of your turn, you get between a 1 or a 6, your bonus is added to the dice roll
You get an extra bonus point for every 4 tiles under your control
You get 2 extra points for every Capital tile (A tile with 10 or higher points)
So you can choose based on the map layout whether a quick expansion is best, or building stronger tiles instead to begin with.

Hi @tommcclean
Ah, then I was on the right path.
Very familiar to board games like Risk, I like it!
But yeah, either a tutorial or an actual animation showing the fight.
My team and I might fork at some point to add a fight animation showing each point contested, for extra suspense, when we get some time off.
Thanks for the explanation, we have had great fun with it here at the office :)
We'll be following the process.
Take care!

Hi @tommcclean
Ah, then I was on the right path.
Very familiar to board games like Risk, I like it!
But yeah, either a tutorial or an actual animation showing the fight.
My team and I might fork at some point to add a fight animation showing each point contested, for extra suspense, when we get some time off.
Thanks for the explanation, we have had great fun with it here at the office :)
We'll be following the process.
Take care!


Parent triple map support

To make nested structures, parenttriple maps need to be added to the DSL, example:
ex:Object rdf:type class:Object ;
prop:lotSize [ 	schema:value 11050.07095540000;
			schema:unitCode 'FTK' ];

The necessary changes to support declaring one or more rr:joinConditions have now been implemented in XRM.
Working example: Starting out from the example in the demo repository ...

demo repo https://github.com/BenjaminHofstetter/xrm-parentTriplesMap

... and applying the following changes:
logical-source ParameterSource {
        referenceables
                id "@field-name"
                comment "@name"
+               stationId "../@number"
 }

map stationMapping from StationSource {
        properties
                ex.name from name ;
                ex.id from id ;
-               ex.hasParameter parent-map parameterMapping ;
+               ex.hasParameter parent-map parameterMapping join id with stationId ;
 }

Great! I will have an XML to try it out as well, will talk to you next week :)

Resolved in xrm version 1.5.0


Update CONTRIBUTING.md to be Clearer, More Concise, and Beginner-Friendly

Our current CONTRIBUTING.md file contains valuable information, but it could benefit from being more clear, concise, and beginner-friendly. This would help encourage more contributions from new developers and ensure that everyone understands the contribution process.
A more organized, clear, and beginner-friendly CONTRIBUTING.md file that lowers the barrier to entry for new contributors and provides all necessary information in a concise manner.

Suggest some changes @NegiSushant


Add support to keyboard navigation in Dropdowns

Description

It was added support to keyboard navigation in the Dropdown component using the arrow down and arrow up keys, so the user can navigate and have real-time feedback from the Themes and Languages using the keyboard. So it closes #154
The Dropdown component was completely reimplemented using the downshift library (as suggested by @mfix22) because it makes the keyboard events handling easier, and it can make future implementation of features like typeahead easy too.

Thanks @bruno02221! This is exactly what we wanted 👍

@bruno02221 this is incredible. Thanks!!! Downshift worked great @kentcdodds

Niiiiice!

👍

@bruno02221 Awesome work bruno! :+1: Sorry for the lack of response on the issue page, I got caught up with work..
Cheers from Brazil :)


Add search capability to docs

Request Type
Other docs enhancement
Description
The docs should have a search bar similar to other docs sites. We can use Docusaurus' default search provider, Algolia.
Description of available methods here:
https://docusaurus.io/docs/search

Have applied for DocSearch through Algolia: https://docsearch.algolia.com/


The quality of the codebase is quite poor

Failings:

There is a lot of duplicate code here and there
So many half-implemented bad ideas as well

Needs:

structure
some of the more ridiculous enums & data structures can/should be simplified
documentation

Instead of using that massive enum for the operation, and then having to specialize some of its behavior from machine to machine, we now have an approach I feel is saner. A struct has the data needed to execute the instruction, plus a pointer to a handler. One handler "executes the instruction" and updates a State appropriately, another handler disassembles it, another randomly mutates it. It's a Copy type, so the basic blocks can be mutated at will.
There are a lot of massive changes here because of this. Hopefully this works out.

I've removed some machines from this branch of strop. They weren't supported anyway, they didn't even work properly and were getting in the way of the work on this branch. These removed machines are PICs, early 8-bit Motorolas and the KR580VM1. I'll want to add most of these back later though.

Took a 10-second look at the current state of the branch; machine.rs still includes what looks like STM8-specific assumptions (R enum). Is this intentional? Maybe I'll want to add support for a fictional architecture with 256 general-purpose registers (of which I know one).

what looks like STM8-specific assumptions (R enum). Is this intentional?

The R enum (and corresponding fields in the State struct not only contain stm8 specific stuff, but also stuff specific to other architectures. It's a part of the design I'm not keen on, and you're right that it feels uneasy.
Can you think of a better way? I am sure there's a better way. But I haven't hit on it. (after all, I am still quite a Rust newbie).
Maybe it would be better to have an Stm8State struct, a Mos6502State struct, and similarly an Stm8Instruction struct, a Mos6502Instruction, and associate these somehow. Then architecture specifics will be better contained. But I don't know.

Ok, so I went ahead and cloned this locally. Here are some observations:

Each file is extremely large. There is too much to take in. So many structs and traits and functions per module.
The library makes assumptions based on the machines it thinks it'll support. It only supports a limited number of registers and flags.
There are large commented-out sections of code, as if you forgot you're using Git.

You don't seem to have any particular code style. Namely, you indent with spaces in some places, and with tabs in others. I'd personally advocate for tabs in all places (reduces file size, semantically more correct, etc) and rustfmt can be configured to do this.
Arch-specific nitpick; strop can generate code that will divide by zero and it doesn't crash/fault/etc the simulation. This means it can generate machine code that won't actually run - unless stm8 allows divisions by zero?
There are a bunch of functions littered around that do things but they're disorganized and I don't know why they're there. If I Find Usages I see they're used in the Instruction statics, but there are definitely better ways to do this!

I haven't really dug into the code yet. It doesn't even compile. ;(

Also regname always returns "a" regardless of the input

Each file is extremely large. There is too much to take in. So many structs and traits and functions per module.

Some of this (especially in machine.rs) is about to go. Others, for example in machine/stm8.rs, I think it's excusable if it's, okay, STM8 support goes in this file; there's a lot to do there so that's why the file is enormous. Do you think that's reasonable or would it be better to chop it up even further?

The library makes assumptions based on the machines it thinks it'll support. It only supports a limited number of registers and flags.

As to your previous comment, I know this is not exactly ... artful, so I want to ask what you would suggest.

There are large commented-out sections of code, as if you forgot you're using Git.

Yeah. I'll be deleting at least some of those next.

You don't seem to have any particular code style.

Do you think there's a better way to format the code? I have never messed around with a rustfmt config before, nor do I have a strong opinion about this. Could you maybe branch off master and put something in?
There is also a github action to make sure the code is properly formatted. Locally, I have precommit hook to do this as well.

unless stm8 allows divisions by zero?

STM8 does blithely compute divisions by zero; this does not trap on the STM8. (doesn't do anything useful either)

There are a bunch of functions littered around that do things but they're disorganized and I don't know why they're there. If I Find Usages I see they're used in the Instruction statics, but there are definitely better ways to do this!

(at least) some of these are handles. The Instruction has these function pointers. One executes the instruction on some State, one makes random mutation to the instruction, another writes the disassembly.
How would you suggest we organize it?

It doesn't even compile. ;(

True. This is an experimental branch that really smashes things up. I've removed some architectures as well. But if I get it to compile then my expectation is that the compiler warnings is going to

But if I get it to compile then my expectation is that the compiler warnings is going to

...guide you through the rest? :P

As to your previous comment, I know this is not exactly ... artful, so I want to ask what you would suggest.

You suggested having each architecture have its own machine state, instructions and etc. - that would be the best solution imho. The common framework would then be the mutation / evolving behavior, some way to put tests through the machine.

Do you think there's a better way to format the code? I have never messed around with a rustfmt config before, nor do I have a strong opinion about this. Could you maybe branch off master and put something in?
There is also a github action to make sure the code is properly formatted. Locally, I have precommit hook to do this as well.

I typically just use IntelliJ's built-in formatter, but I guess that doesn't exist if you don't have access to it (and are using VSCode instead). VSCode doesn't have a formatter so you're out of luck there. Rustfmt can be configured to get 95% of the way there, but it intentionally bans things like single-line where clauses. Not only are they not supported, the idea is not even entertained (i.e. opening an issue about it will get it denied). With that said, it could be an option.
Reformatting would have to happen after this PR; stuff like changing to tabs instead of spaces. I'm fairly sure that you use tabs but just didn't bother to change the Rust defaults; your JSON files are tabs. Please let me know if this assumption is incorrect.

How would you suggest we organize it?

gbemulator uses closures so that an instruction's behavior can be defined at construction. So you would have like Instruction<Stm8State> for an STM8 instruction, which would have closures that take &mut Stm8State.
This is an extremely nice solution imho.

Also wrt tests: There's a way to have don't care bits, floating point comparisons and etc.
The strop API to get a certain function should be that you provide a closure that performs tests to score how "close" a given function is to what you want.
For the current JSON system, strop would just feed its own closure that does the JSON's bidding (i.e. runs those tests), but then strop can also be used as a library by other Rust code with more complex requirements (like floating-point).

Okay, we've lost 6502 support and there's a bajillion warnings, but at least it compiles again now.

Also regname always returns "a" regardless of the input because of a pattern that always matches

Not so; see the const A: Datum = Datum::Register(R::A); at the top of the file.

I typically just use IntelliJ's built-in formatter, but I guess that doesn't exist if you don't have access to it (and are using VSCode instead). VSCode doesn't have a formatter so you're out of luck there. Rustfmt can be configured to get 95% of the way there, but it intentionally bans things like single-line where clauses. Not only are they not supported, the idea is not even entertained (i.e. opening an issue about it will get it denied). With that said, it could be an option.

I'm actually on Vim; I am not using an IDE at all. I prefer all command line. Another contributor could come along in the future and use another IDE, so we should not use an IDE specific solution imho.

Reformatting would have to happen after this PR; stuff like changing to tabs instead of spaces. I'm fairly sure that you use tabs but just didn't bother to change the Rust defaults; your JSON files are tabs. Please let me know if this assumption is incorrect.

That's correct, I use tabs. It's habit; I don't have an actually strong opinion. And rustfmt has reasonable defaults I've found.

gbemulator does a similar thing using closures so that an instruction's behavior can be defined at construction.

That's neat. A couple of concerns about using precisely this approach:

the Instruction needs to be a Copy type, since unlike gbemulator, we're copying the entire struct around when we mutate the program, because we don't have a binary representation of the instruction stream.
An stm8 "add with carry" instruction has precisely the same semantics as a 6502 "add with carry" instruction. Same with Z80 etcetera etcetera. So I see the current strategy of having a function to do this is more amenable to code reuse.
I am not aware of any way to examine a closure at runtime to modify its arguments, or "disassemble" them

Not so; see the const A: Datum = Datum::Register(R::A); at the top of the file.

This doesn't matter because A is an identifier and therefore always matches everything when not qualified.
Also that's not how match works. It matches structure, not identity. You want a if a == A then.

I'm actually on Vim; I am not using an IDE at all. I prefer all command line. Another contributor could come along in the future and use another IDE, so we should not use an IDE specific solution imho.

That's rustfmt like I said. It's a command-line tool, cargo fmt is all you need and it automatically picks up the config and everything.

That's correct, I use tabs. It's habit; I don't have an actually strong opinion. And rustfmt has reasonable defaults I've found.

The stance on tabs vs spaces is that they picked one at random because people will complain either way. Therefore I typically choose to manually enable tabs for correctness' sake.

the Instruction needs to be a Copy type, since unlike gbemulator, we're copying the entire struct around when we mutate the program, because we don't have a binary representation of the instruction stream.

Pure closures are typically Copy.

An stm8 "add with carry" instruction has precisely the same semantics as a 6502 "add with carry" instruction. Same with Z80 etcetera etcetera. So I see the current strategy of having a function to do this is more amenable to code reuse.

Yes but those are completely different architectures with completely different states. Or at least they should be if the library is going to be extensible any time soon. :)

I am not aware of any way to examine a closure at runtime to modify its arguments, or "disassemble" them

Alright so the closure thing I said was incomplete; the closure would also have to take its own arguments. As for the disassembly that can stay another closure. And for mutations obviously that can be a closure too. Just closures all around; it's possible to deduplicate common functionality of course, but you really do want to aim for extensibility.

By the way; that fictional machine I mentioned earlier requires self-modifying code in order to do a lot of trivial operations (like jumping to an address stored in a register). Will strop ever support that? :P

Also that's not how match works

pretty sure it's working okay in the master branch. Eh, maybe not. In any case, this matter should be unit tested. BUT I'm thinking, wouldn't it be better if it were something that implements std::fmt::Display.

I typically choose to manually enable tabs for correctness' sake.

Can you do a pull request to get this in?

I don't think Vec is a Copy type.

Could use arrayvec with something like a length of 4, which is more than enough for most (all?) instructions

It looks as though I'm going to run into this issue. Because I'm using iterators to generate swathes of mutated basic blocks. But Generic Associated Types are not stable rust yet.

I'm not sure if strop can be retrofitted to do this, but it's probably a good way forward.

You were right to wonder about this. I found it really hard to do. But there is another pull request (#33) now. It doesn't do anything, but it does have separate types for each architecture's state and instruction. And it compiles, which this branch doesn't.