GH-3687 add external url configuration property

GitHub issue resolved: #3687
Briefly describe the changes proposed in this PR:
I have added an optional property to configure the external base URL of the server.

PR Author Checklist (see the contributor guidelines for more details):

[X] my pull request is self-contained
[x] I've added tests for the changes I made
[x] I've applied code formatting (you can use mvn process-resources to format from the command line)
[X] I've squashed my commits where necessary
[X] every commit message starts with the issue number (GH-xxxx) followed by a meaningful description of the change

Is the application.properties file in the right place? I couldn't test it.

Is the application.properties file in the right place? I couldn't test it.

Looks correct to me - I can't remember if we do any specific resource filtering in the maven war packaging setup  so we may want to double-check that it actually ends up in the war.

Fwiw I am seeing a failure of the war plugin when trying to package this locally, using JDK 16:
ERROR] Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.1.1:war (default-war) on project rdf4j-http-server: Execution default-war of goal org.apache.maven.plugins:maven-war-plugin:2.1.1:war failed: Unable to load the mojo 'war' in the plugin 'org.apache.maven.plugins:maven-war-plugin:2.1.1' due to an API incompatibility: org.codehaus.plexus.component.repository.exception.ComponentLookupException: Cannot access defaults field of Properties
[ERROR] -----------------------------------------------------
[ERROR] realm =    plugin>org.apache.maven.plugins:maven-war-plugin:2.1.1
[ERROR] strategy = org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy
[ERROR] urls[0] = file:/home/jeen/.m2/repository/org/apache/maven/plugins/maven-war-plugin/2.1.1/maven-war-plugin-2.1.1.jar
[ERROR] urls[1] = file:/home/jeen/.m2/repository/org/apache/maven/reporting/maven-reporting-api/2.0.6/maven-reporting-api-2.0.6.jar
[ERROR] urls[2] = file:/home/jeen/.m2/repository/org/apache/maven/doxia/doxia-sink-api/1.0-alpha-7/doxia-sink-api-1.0-alpha-7.jar
[ERROR] urls[3] = file:/home/jeen/.m2/repository/commons-cli/commons-cli/1.0/commons-cli-1.0.jar
[ERROR] urls[4] = file:/home/jeen/.m2/repository/org/codehaus/plexus/plexus-interactivity-api/1.0-alpha-4/plexus-interactivity-api-1.0-alpha-4.jar
[ERROR] urls[5] = file:/home/jeen/.m2/repository/org/apache/maven/maven-archiver/2.4.1/maven-archiver-2.4.1.jar
[ERROR] urls[6] = file:/home/jeen/.m2/repository/org/codehaus/plexus/plexus-archiver/1.2/plexus-archiver-1.2.jar
[ERROR] urls[7] = file:/home/jeen/.m2/repository/org/codehaus/plexus/plexus-io/1.0.1/plexus-io-1.0.1.jar
[ERROR] urls[8] = file:/home/jeen/.m2/repository/org/codehaus/plexus/plexus-interpolation/1.13/plexus-interpolation-1.13.jar
[ERROR] urls[9] = file:/home/jeen/.m2/repository/junit/junit/3.8.1/junit-3.8.1.jar
[ERROR] urls[10] = file:/home/jeen/.m2/repository/com/thoughtworks/xstream/xstream/1.3.1/xstream-1.3.1.jar
[ERROR] urls[11] = file:/home/jeen/.m2/repository/xpp3/xpp3_min/1.1.4c/xpp3_min-1.1.4c.jar
[ERROR] urls[12] = file:/home/jeen/.m2/repository/org/codehaus/plexus/plexus-utils/2.0.5/plexus-utils-2.0.5.jar
[ERROR] urls[13] = file:/home/jeen/.m2/repository/org/apache/maven/shared/maven-filtering/1.0-beta-2/maven-filtering-1.0-beta-2.jar
[ERROR] Number of foreign imports: 1
[ERROR] import: Entry[import  from realm ClassRealm[project>org.eclipse.rdf4j:rdf4j:3.7.5-SNAPSHOT, parent: ClassRealm[maven.api, parent: null]]]

I want to take a closer look at this before we go ahead and merge.

Thanks for checking and merging!


"Plugin incompatible"

I'm having trouble getting this plugin to work, I keep getting this error message:
The following plugin is incompatible with the current KeePass version: /usr/lib/keepass2/KeePassQuickUnlock.plgx

Have a look at the plugin's website for an appropriate version.

I'm running KeePass 2.34 on a freshly installed Ubuntu 16.04 LTS (literally have only used apt-get update, upgrade and dist-upgrade before installing KeePass), and all four of your releases give the same error. I've tried placing the plugin in both /usr/lib/keepass2 and /usr/lib/keepass2/Plugins to the same effect.

Found the solution in a previous Issue:
$ sudo apt-get install mono-complete


Prepare for scpcaTools release v0.4.1

This release should be just the docker update... do we want it as 0.4.1 or something like 0.4.0a, I wonder, if there are no code changes?
Update, there was a code change to fix how we handle unset seeds, so 0.4.1 will be the release!
Steps for a new release of scpcaTools
Preparing for the release and testing

[x] Are all of the issues planned for this release resolved? If there are any issues that are unresolved, mark this issue as blocked by those on ZenHub.
[x] Update DESCRIPTION with new version number.
[x] Did all automated tests and the Docker build in this repo pass in CI? You may have to wait for the docker image to build. Check Github actions before proceeding to the next step.
[x] Test the new docker build in scpca-nf

[x] Create a branch in scpca-nf for testing the latest Docker version from the main branch.
[x] Update containers.config with the edge version of the scpca-tools container: SCPCATOOLS_CONTAINER = 'ghcr.io/alexslemonade/scpca-tools:edge' and push the branch to github.
[x] If necessary, update the scpca-nf workflow to accommodate changes in the scpcaTools package
[x] Perform a test run of the workflow with:
nextflow run AlexsLemonade/scpca-nf -r "<TESTBRANCH>" -profile batch,ccdl
If the [default run_ids](https://github.com/AlexsLemonade/scpca-nf/blob/main/config/profile_ccdl.config#L12-L13 for the workflow do not cover expected changes in this tools package, you may want to specify particular test samples or projects with the --run_id option (use your judgement).

Creating a release

[x] On the releases page, choose Draft a new release.
[x] In Choose a tag, type a new release number using semantic versioning (vX.X.X) (you did update the title of this issue to match, right?), then click Create a new tag: vX.X.X on publish.
[x] Write a description of the major changes in this release. You may want to start with the Auto-generated release notes to save time.
[x] Save a draft to return to later if testing isn't done yet, otherwise:
[x] Publish the release!

Done: https://github.com/AlexsLemonade/scpcaTools/releases/tag/v0.4.1


🐛 BUG:parse error/incomplete input in D1

Which Cloudflare product(s) does this pertain to?
D1
What version(s) of the tool(s) are you using?
wrangler 3.15.0
What version of Node are you using?
v16.18.1
What operating system are you using?
Linux
Describe the Bug
The following trigger definition throws an error: incomplete input, works fine in sqlite
CREATE TRIGGER my_table_after_insert_trigger    AFTER INSERT ON my_table   BEGIN     SELECT CASE WHEN NOT EXISTS(       SELECT 1 FROM pragma_table_list(new."table")     )     THEN RAISE (ABORT , 'Exception, table does not exist') END ;   END ;
I found a workaround by enclosing the case statement with parentheses:
CREATE TRIGGER my_table_after_insert_trigger    AFTER INSERT ON my_table   BEGIN     SELECT (CASE WHEN NOT EXISTS(       SELECT 1 FROM pragma_table_list(new."table")     )     THEN RAISE (ABORT , 'Exception, table does not exist') END) ;   END ;
Please provide a link to a minimal reproduction
No response
Please provide any relevant error logs
No response

Adding a bit more info since this came up in the Discount guild:
I believe that the issue arises from the compound statements only being started on BEGIN in the splitter:
https://github.com/cloudflare/workers-sdk/blob/4a735c46fdf5752f141e0e646624f44ad6301ced/packages/wrangler/src/d1/splitter.ts#L86
It might be easily solvable by changing this line to:
https://github.com/cloudflare/workers-sdk/blob/4a735c46fdf5752f141e0e646624f44ad6301ced/packages/wrangler/src/d1/splitter.ts#L156
return /\sBEGIN|CASE\s$/.test(str);

https://www.sqlite.org/lang_expr.html


Per-project aliases

New aliases section in a project
Example here
So useful when I started on my own Christmas lights project
If you exclude the new test, there are 14 lines code less and more functionality

Ping!


Not Working :(

i get the channeling block and most of it works but when i use it in creative a vex spawns and dies quickly
and if i do it in survival it just plays a glass break sound. am i doing something wrong i need help

The Channeler requires 3 things to function:

1 experience level (not required in creative)
A Pumpkin on the player's head (configurable) (not required in creative)
Task items in the Channeler block's inventory

Tasks will be executed left to right, top to bottom.
There is no delay between each task unless you add Wait Tasks in between others.

Tasks that perform actions over time have no inherent delay. e.g. If you place a stack 60 movement tasks (which is equivalent to holding the move forward key for 3 seconds), you'll want a stack of at least 60 wait tasks after them if you want the previous task to run on its own for the full 3 seconds, otherwise the movement task will begin moving you forward but will then terminate once the Channeler runs out of any remaining Wait Tasks and reaches end of the Task list.
This allows you to use, for example, a stack of 40 move forward tasks followed by 20 jump tasks, 20 delay tasks, 20 sneak tasks, and then 20 more delay tasks, which will result in 1 second of moving forward while jumping followed by one second of moving forward while sneaking.


Max GPU 0% & Idle GPU 100% does not clear VRAM

So as the title says. In order to avoid detection, I've set Max GPU to 0% (so once the PC is being actively used and not in Idle, the Miner should shutdown, stop and clear the VRAM), but this doesn't happen anymore since 1.4.2. I tested this on my own Rig as well in order to prove this, and I took a screensnippet of this. As you can clearly see in the Miner Builder config, I set all parameters correctly, yet while I am using my PC to write this and when I obviously took the screensnippet while writing this, my GPU is still sitting at about 4.7GB VRAM used. A rig I installed this on to test this (a friend's PC) also is facing this issue, as when he plays CoD: Warzone, the lag is insane. He's not getting his usual about 100FPS on average, he's getting about 20-40FPS because the Miner doesn't stop even though the PC is active and it is said to stop whenever the PC is not idle.
Note: This is also happening inconsistently. While writing this, my GPU usage did suddenly drop to only a few hundred MB from the 4.7GB VRAM usage, but I was clearly & actively using my PC for quite a while and the Miner did not stop immediately or at all sometimes, and I am not sure whatever is wrong but I have the feeling that whatever detects PC activity/input is heavily flawed. Again this doesn't happen on just my Rig, it happens on that of all I installed this on.

Hmm, that feature should work. What detect input/activity is Windows itself so that shouldn't be flawed. I don't have the old source code for the miner but I did discover a bug with that in the new one, there was an accidental ! in the if check so it got negated so maybe that is in the older version as well?

Hmm, that feature should work. What detects input/activity is Windows itself so that shouldn't be flawed. I don't have the old source code for the miner but I did discover a bug with that in the new one, there was an accidental ! in the if check so it got negated so maybe that is in the older version as well?

I don't have the old Miner build anymore but I do have an old compiled build with that Miner I made, if you want to check it against the new one then I can send you both (ofc don't infect yourself, but you're aware of that 😂).

Yeah sure. I believe I might have missed to remove the ! in
if (!Farm::f().isMining())
{
      Farm::f().stop();
 }

which is what would make it stop.

Hate to ask, but do you mind releasing a hotfix for it so that I can quickly update all my Rigs so that they stop removing the Miner 😅?

Well, I can see if I have any backups from back then left, I'm currently working on the new version so I've changed a lot of the code. If I find one then I'll release a hotfix.

The new update should clear VRAM on 0% GPU.


Gooey cursor

Describe the bug
The font and its style are not very appealing.
Expected behavior
Proper styling and size of elements.
Screenshots

Additional context
@TusharKesarwani @zugzwang03 @harshit-paneri Please assign me this issue for gooey cursor site

@TusharKesarwani please assign me this issue under ssoc2.0


env: node\r: No such file or directory

Hi - I am trying to use this on a mac and get the following error: env: node\r: No such file or directory. Do you have any suggestions?
thanks!
greg

vim  /usr/local/bin/convertSnippets
:set ff=unix
:wq

Same problem here, @slysenko I could't figure out how to fix the issue with your suggestion.
I guess the files need to be converted from windows format to unix? is that the issue?

the suggestion that worked for me is to set the file format to Unix.
so what you want to do is to open the file in vim editor, type ':' then type in 'set ff=unix', press Enter, then type ':'  then type in 'wq' to save and exit

@slysenko thanks for the clarification, that's what I was doing but it was not creating any effect for some reason.
I ended up using this:
 awk '{ sub("\r$", ""); print }' winfile.txt > unixfile.txt
Thanks

Wasn't really clear from the discussion on how to resolve the issue. I was able to convert my extensions by installing the module locally and running the command. example:
node node_modules/convert-atom-snippets-to-vscode/src/command.js snippets/ vs-snippets/

this converts all the atom snippets in the snippets directory and creates VS Code snippets in a vs-snippets directory


fix: prevent invitations from being case-sensitive

Since the user_id field in the invitations table is of type text, it is prones to mismatches due to being case sensitive. This field usually takes the value of an email (can also take in any text we choose to pass), which are not case-sensitive in the real world.
This PR removes the case-sensitivity of that field, and ensures that we store and fetch invitations in lowercase.
Pre-PR:

Invite<EMAIL_ADDRESS>to an organization
User tries to login with Google or enters their email as<EMAIL_ADDRESS>-> we are unable to fetch any invitations

Post this PR:

Invite<EMAIL_ADDRESS>to an organization
User tries to login with Google or enters their email as<EMAIL_ADDRESS>-> The invitation is shown

Pull Request Test Coverage Report for Build<PHONE_NUMBER>
Details

0 of 4 (100.0%)  changed or added relevant lines in 1 file are covered.
No unchanged relevant lines lost coverage.
Overall coverage remained the same at 40.634%

Totals

Change from base Build<PHONE_NUMBER>:
0.0%

Covered Lines:
5987

Relevant Lines:
14734

💛  - Coveralls


Support multi tenant route configuration selection based on HTTP attributes

Problem Statement
Envoy currently supports route configuration isolation in multi tenant environments by allowing a Listener FilterChain to specify a FilterChainMatch based on IP, TCP and TLS layer attributes.
When tenancy can be determined via these types of attributes, a FilterChain can be instantiated with a corresponding HttpConnectionManager RouteConfiguration proto (via static config or RDS) that corresponds to the tenant.
This issue tracks a design proposal to also support tenant differentiation via HTTP layer attributes, such that a single Listener -> HttpConnectionManager filter can be used to process requests for multiple tenants, each of which must be assigned its own RouteConfiguration.
Design Proposal
The design proposal extends Envoy with a Scoped Route Discovery Service API, which supports creating route configuration "scopes" indexed via a dynamically generated key extracted from HTTP layer attributes.
The proposed enhancement can be used to satisfy other use cases as well, such as #4690.

This has +1 from me and other Googlers, so looking for community input.

+1. I had one question about SRDS vs. building directly into RDS, and it seems to me the real problem is incremental delivery. There was discussion in the doc about field deprecation for this approach which I didn't fully understand and might be clarified a bit.

@htuch @mattklein123 thanks for the reviews and feedback.
I responded to comments in the doc and made some adjustments based on the feedback. I have been tied up with other work, but will be starting with implementation work on this shortly.

LGTM, anyone else wants to weigh in before we move forward? CC @envoyproxy/maintainers

Implementation work is ongoing. I am working on tests for the first PR which I am targeting for next week, although US holidays and a higher priority task are likely to delay this until the week after.

@AndresGuedez is this issue done or is there further work to do?

@stevenzzzz is working on two more PRs for this: #7451 is out for review now.

Although this scheme can well classify route configurations based on HTTP attributes, I am a bit skeptical about whether it really works for multi-tenant scenarios. For example, if I have five hundred tenants, different tenants have only one plugin with different configurations, and all other configurations are the same. So based on this solution, I need to create five hundred scopes, copy all the configurations to five hundred copies, and only one plugin configuration is different in all copies. @mattklein123 @AndresGuedez

@wbpcode this is probably a distinct problem to what SRDS wants to solve. I think you're interested in deduplication of shared configuration across distinct RouteConfigurations. That's pretty interesting to think about. There are also alternatives, e.g. using lazy loading via SRDS when implemented, and only having the working set of configurations in memory, reducing the need to scale to very large numbers of configurations.

I think this is done so closing this and we can track other improvements in new issues.


Update setup.py author, e-mail

Coverage: 100.0%. Remained the same when pulling 8c0fc8ce8d0aa0a9d1bf99abbd9c85668efa8ea9 on bmihelac-patch-1 into f59c2e515c62f88399e98fbad177117e21aebb26 on main.


Cannot call method on a null value?

Hello,
Not sure what I'm running up against here, currently my chia plotter has 8 individual drives for plotting. But anytime I try to go past 6 simultaneous jobs I get a popup with the message "cannot call method on a null value" I've looked in the app trying to see if I am missing a setting for max jobs but I'm not seeing anything.

I'm also including a screenshot of my system specs, as I don't believe it's related to my systems ability but who knows?

I think you would benefit from creating a storage pool with your 6 sas drives (or better yet if you have a raid card) and set them up in a raid 0 config. This would give you ~1.8TB and 6x read and write speed gain. This would also help with parallel plotting and queue delay. Would more than likely see an increase in plots per day.
As for the error I am not 100% sure but I don't think you have enough free space on G:, H:, E:, & F: for the temporary files. Run time is only a few minutes and your free space is under 120GB.

As for the error I am not 100% sure but I don't think you have enough free space on G:, H:, E:, & F: for the temporary files. Run time is only a few minutes and your free space is under 120GB.

I agree, doesn't look like enough space on the drives. It at least fits the code criteria where it errors.

I think you would benefit from creating a storage pool with your 8 sas drives (or better yet if you have a raid card) and set them up in a raid 0 config. This would give you ~2.4TB and 8x read and write speed gain. This would also help with parallel plotting and queue delay. Would more than likely see an increase in plots per day.
As for the error I am not 100% sure but I don't think you have enough free space on G:, H:, E:, & F: for the temporary files. Run time is only a few minutes and your free space is under 120GB.
It looks like you tried to start 8 jobs at the same time with 4 threads each, You only have a total of 32 threads not sure if this would have any impact or not but its usually not good to leave nothing left for other OS functions. Although when I "over-provision" my threads it does not seem to much care.
I also can not replicate the issue that you are seeing at 6 current runs. What is the status of your other jobs (the ones after 6) in the "Job Queues"?

I will try putting all the drives into raid 0 as you suggested, I'm still quite new to Chia plotting so learning on the fly lol. I was watching some videos on youtube that suggested this config I'm using now but it seems quite slow as you have pointed out. Monday I'm adding two nvme drives into the config so I'm hoping that speeds the process up. As for drive space what happened was I paused the plots and tried creating a new job to get the error for the screen shot, looking back I think what happened is I possibly chose the same drive twice in a row without realizing it and  that is what caused the error,


First presentation slide using codio

I teach coding at a middle school. I made this welcome slide for students to see as they join our zoom class.

Slide markdown and text of .yml file below.

<!-- fg=green bg=black -->
# Welcome to Coding
![codio](start_class.yml)

speed: 6
lines:

prompt: Mr.H $
in: pwd
color: green
out: '    home'
color: green
bold: True
prompt: Mr.H $
in: cd DATA/coding/
color: green
out: '    cwd = DATA/coding/'
color: green
bold: True
prompt: Mr.H $
in: run --start_class
color: green
out: '    Please Login to Canvas'
color: green
bold: True
out: '    Students are logging in'
color: green
bold: True
progress: true
progressChar: █

I teach coding at a middle school. I made this welcome slide for students to see as they join our zoom class.

This is awesome! Thank you for making this. I hope the students liked it, and also hope that it got them excited for the class!

I've added it to the gallery! https://present.readthedocs.io/en/latest/gallery/


README: Add node-webpinfo

I've made webp container parser which parses webp container ;) it helped me a lot. thanks <3

hmm it looks like current node.js versions on Travis is too old to install deps.

okay now build is passing. it would be nice if we cleanup old stream (before streams2) code stuffs (e.g.  old TransformStream#push)


feat(ip): logContextChanged event added to the insight client

In the service console inside Salesforce, when a user updates one of the case fields, the insight panel should automatically trigger a new search query and send the following analytic event:

A new logContextChanged method is now added to the insight client.

Are you merging this PR with this one as well?
https://coveord.atlassian.net/browse/SFINT-4570

Are you merging this PR with this one as well?
https://coveord.atlassian.net/browse/SFINT-4570

Yes I'm planning to do that.

It all looks pretty good to me. Using different format for the customData > caseContext information might be a problem for reporting though. Including the data of the hosted insight panel into an existing report would be problematic.
@erocheleau Any thoughts on this?

Totally right! I'm currently working on it to assure that we keeping the exact same format.

It all looks pretty good to me. Using different format for the customData > caseContext information might be a problem for reporting though. Including the data of the hosted insight panel into an existing report would be problematic.
@erocheleau Any thoughts on this?

Totally right! I'm currently working on it to assure that we keeping the exact same format.

The events are now updated to exactly match what we currently send in the C4SF package.


FLEX-5302: Adds the possibility to update the simulators process image

SonarQube analysis reported 1 issue
Note: The following issues were found on lines that were not modified in the pull request. Because these issues can't be reported as line comments, they are summarized here:

 DefaultControlledStationAsduFactory.java#L105: Complete the task associated to this TODO comment.

SonarQube analysis reported 1 issue

 1 info

Watch the comments in this conversation to review them.


Add support for Video Transport Stream Files .ts

I tried adding 'ts', into main-filenames.ts and it seems to work.

Feel free to make a Pull Request with this change! 😄

Fixed with #302 - Thanks again @gitnew2018! 😄


cli: expose rad fetch

Make rad fetch accessible via the command line.  It appears to be accidently left out.

:brain:


Avoid re2-wasm

While re2-wasm is better than re2, it still requires a trick to run with esbuild that is commonly used by CDK constructs like:
CDK
https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_lambda_nodejs-readme.html#install-modules
This code works:
    const main = new NodejsFunction(this, "MainFunction", {
      entry: "./src/main.ts",
      bundling: {
        nodeModules: ["re2-wasm"],
      },
    });

Projen
https://projen.io/awscdk.html#aws-lambda-functions
No way to workaround as nodeModules type of operation isn't supported yet.

It would be better to use only pure JS packages for SSDK libraries so that esbuild can easily bundle all required files for AWS Lambda without extra effort.

In general, I agree; if there's a safe regex implementation in pure JS I'd love to switch to it.

Note earlier discussion on https://github.com/awslabs/smithy-typescript/pull/667

Just curious: If I release a new module just inlining the re2-wasm's WASM binary to avoid runtime file access, is it acceptable?

Assuming there's no licensing issues, I don't see a problem with that offhand.


Run ONNX

Please, write a code, which converts GigaAM-RNNT to ONNX and launchs it, I am trying to do id for a long time without any results(((

Please see
https://k2-fsa.github.io/sherpa/onnx/pretrained_models/offline-ctc/nemo/russian.html


Printing output without loop for non-interactive contexts

Hi all,
I'm looking to build a CLI for use in a CI pipeline. Is there a way to have termui print its output to the screen without a loop and not clear the output on exit? I'm new to fancy terminal UI apps so apologies if I'm missing something obvious.

To rephrase, is it possible for termui to operate in non-full screen mode?


agent: collect + send billing metrics

Haven't tested it, still need to add more comments.

Did some manual testing, made some fixes, seems ok now. Also made some non-required but good to have changes - refer to the commit message on a46ca8b ("Some fixes, some changes").
Something I missed in the commit message: Decided to go back to an earlier approach w.r.t. batching, so that we preserve idempotency keys — it's essentially now equivalent to what I proposed here: https://github.com/neondatabase/autoscaling/pull/49#discussion_r1111314682. AFAICT, there's no way to respect idempotency that isn't equivalent to this approach.


RNN tflite model doesn't work when deployed on a microcontroller

System information

Tensorflow version: 2.9.1

Describe the feature and the current behavior/state.
RNN tflite model not working when deployed on a microcontroller unless it is unrolled which increases the size of the model tenfold.
I want to compare different types of RNN tflite-micro models. I have created a custom RNN cell that I want to compare with the LSTM cell, GRU cell, and SimpleRNN cell.
The following code shows how the network is created and converted to tflite model
import tensorflow as tf

# create the rnn cell using one of these RNN cells
units = <value>
#RNNcell = tf.keras.layers.SimpleRNNCell(units)
#RNNcell = tf.keras.layers.GRUCell(units)
RNNcell = tf.keras.layers.LSTMCell(units)

# create the model using the cell in an RNN layer
timesteps = <value>
n_features = <value>
dropout = <value>
dense_units = <value>
outputs = <value>

model = tf.keras.Sequential([
    tf.keras.layers.RNN(RNNcell, input_shape=(timesteps, n_features),
    tf.keras.layers.Dense(dense_units, activation='relu'),
    tf.keras.layers.Dense(outputs, activation='softmax', name="output")
])

# then create model for inference with a fixed batch size
model = tf.keras.Sequential([
    tf.keras.layers.RNN(RNNcell, batch_size=1, input_shape=(timesteps, n_features),
    tf.keras.layers.Dense(dense_units, activation='relu'),
    tf.keras.layers.Dense(outputs, activation='softmax', name="output")
])

#train the model
EPOCHS = <value>
BATCH_SIZE = <value>
LEARNING_RATE = <value>

opt = tf.keras.optimizers.Adam(learning_rate=LEARNING_RATE)
model.compile(optimizer=opt, loss='categorical_crossentropy', metrics=['accuracy'])

model.fit(
    train_X, train_y,
    epochs=EPOCHS,
    validation_data=(validation_X, validation_y),
    shuffle=False,
    batch_size=BATCH_SIZE)

# move weights to model with fixed batch_size
model_inference.set_weights(loaded_model.get_weights())
model_inference.compile(optimizer=opt, loss='categorical_crossentropy', metrics=['accuracy'])

# save to tflite format
converter = tf.lite.TFLiteConverter.from_keras_model(model_inference)
tfmodel = converter.convert()
open(f'model.tflite', 'wb').write(tfmodel)

## EXTRA
# test operations with tflite interpreter in python
input_data = <value>

interpreter = tf.lite.Interpreter(model_content=tfmodel)
interpreter.allocate_tensors()

_input_index = interpreter.get_input_details()[0]['index']
interpreter.set_tensor(_input_index, input_data)
interpreter.invoke()

The tflite model works in the python interpreter but does not run on a microcontroller (nRF5340) unless the RNN layer is unrolled, which increases the size of the model significantly.
This is how the model looks in Netron and the error from the interpreter on the microcontroller indicates that INT32 is not supported for ADD in the WHILE operator.
Type INT32 (2) not supported
Node ADD (number 0) failed to invoke with status 1
Node WHILE (number 1) failed to invoke with status 1

Will this change the current api? How?
don't know
Who will benefit with this feature?
Everybody who needs and thought RNNs were supported in Tensorflow Lite Micro.
Any Other info.
Similar to issue #907 but in that issue that person is unrolling.
Also, a tflite model with created with tf.keras.layers.LSTM creates the operator unidirectionalLSTM but the model is created with a tf.keras.layers.LSTMCell in a tf.keras.layers.RNN layer then it has a reshape and a while operator instead.
Is it possible to use the unidirectionalLSTM operator for the other cells as well somehow?

When I run the analyser on the tflite model:
tf.lite.experimental.Analyzer.analyze(model_path='model.tflite')

this is what I get
=== model.tflite ===

Your TFLite model has '3' subgraph(s). In the subgraph description below,
T# represents the Tensor numbers. For example, in Subgraph#0, the RESHAPE op takes
tensor #0 and tensor #11 as input and produces tensor #13 as output.

Subgraph#0 main(T#0) -> [T#23]
  Op#0 RESHAPE(T#0, T#11) -> [T#13]
  Op#1 WHILE(T#3, T#3, T#1, T#4, T#4, T#13, Cond: Subgraph#1, Body: Subgraph#2) -> [T#14, T#15, T#16, T#17, T#18, T#19]
  Op#2 STRIDED_SLICE(T#16, T#8, T#9, T#10) -> [T#20]
  Op#3 FULLY_CONNECTED(T#20, T#12, T#5) -> [T#21]
  Op#4 FULLY_CONNECTED(T#21, T#7, T#6) -> [T#22]
  Op#5 SOFTMAX(T#22) -> [T#23]

Tensors of Subgraph#0
  T#0(serving_default_lstm_input:0) shape:[1, 128, 6], type:FLOAT32
  T#1(sequential_1/lstm/TensorArrayV2_1) shape:[1, 1, 100], type:FLOAT32 RO 400 bytes
  T#2(sequential_1/lstm/strided_slice_1) shape:[], type:INT32 RO 4 bytes
  T#3(sequential_1/lstm/time) shape:[], type:INT32 RO 4 bytes
  T#4(sequential_1/lstm/zeros) shape:[1, 100], type:FLOAT32 RO 400 bytes
  T#5(sequential_1/dense_1/BiasAdd/ReadVariableOp) shape:[40], type:FLOAT32 RO 160 bytes
  T#6(sequential_1/output/BiasAdd/ReadVariableOp) shape:[6], type:FLOAT32 RO 24 bytes
  T#7(sequential_1/output/MatMul) shape:[6, 40], type:FLOAT32 RO 960 bytes
  T#8(sequential_1/lstm/strided_slice_3) shape:[3], type:INT32 RO 12 bytes
  T#9(sequential_1/lstm/strided_slice_31) shape:[3], type:INT32 RO 12 bytes
  T#10(sequential_1/lstm/strided_slice_32) shape:[3], type:INT32 RO 12 bytes
  T#11(sequential_1/lstm/transpose) shape:[3], type:INT32 RO 12 bytes
  T#12(sequential_1/dense_1/MatMul) shape:[40, 100], type:INT8 RO 4000 bytes
  T#13(sequential_1/lstm/transpose1) shape:[128, 1, 6], type:FLOAT32
  T#14(sequential_1/lstm/while) shape:[], type:INT32
  T#15(sequential_1/lstm/while1) shape:[], type:INT32
  T#16(sequential_1/lstm/while2) shape:[1, 1, 100], type:FLOAT32
  T#17(sequential_1/lstm/while3) shape:[1, 100], type:FLOAT32
  T#18(sequential_1/lstm/while4) shape:[1, 100], type:FLOAT32
  T#19(sequential_1/lstm/while5) shape:[128, 1, 6], type:FLOAT32
  T#20(sequential_1/lstm/strided_slice_33) shape:[1, 100], type:FLOAT32
  T#21(sequential_1/dense_1/MatMul;sequential_1/dense_1/Relu;sequential_1/dense_1/BiasAdd) shape:[1, 40], type:FLOAT32
  T#22(sequential_1/output/MatMul;sequential_1/output/BiasAdd) shape:[1, 6], type:FLOAT32
  T#23(StatefulPartitionedCall:0) shape:[1, 6], type:FLOAT32

Subgraph#1 sequential_1/lstm/while_cond(T#1_0, T#1_1, T#1_2, T#1_3, T#1_4, T#1_5) -> [T#1_7]
  Op#0 LESS(T#1_1, T#1_6) -> [T#1_7]

Tensors of Subgraph#1
  T#1_0(arg0) shape:[], type:INT32
  T#1_1(arg1) shape:[], type:INT32
  T#1_2(arg2) shape:[1, 1, 100], type:FLOAT32
  T#1_3(arg3) shape:[1, 100], type:FLOAT32
  T#1_4(arg4) shape:[1, 100], type:FLOAT32
  T#1_5(arg5) shape:[128, 1, 6], type:FLOAT32
  T#1_6(sequential_1/lstm/strided_slice_11) shape:[], type:INT32 RO 4 bytes
  T#1_7(sequential_1/lstm/while/Less) shape:[], type:BOOL

Subgraph#2 sequential_1/lstm/while_body(T#2_0, T#2_1, T#2_2, T#2_3, T#2_4, T#2_5) -> [T#2_13, T#2_11, T#2_31, T#2_30, T#2_28, T#2_5]
  Op#0 ADD(T#2_1, T#2_6) -> [T#2_11]
  Op#1 FULLY_CONNECTED(T#2_3, T#2_10, T#-1) -> [T#2_12]
  Op#2 ADD(T#2_0, T#2_6) -> [T#2_13]
  Op#3 GATHER(T#2_5, T#2_1) -> [T#2_14]
  Op#4 FULLY_CONNECTED(T#2_14, T#2_9, T#-1) -> [T#2_15]
  Op#5 ADD(T#2_15, T#2_12) -> [T#2_16]
  Op#6 ADD(T#2_16, T#2_7) -> [T#2_17]
  Op#7 SPLIT(T#2_6, T#2_17) -> [T#2_18, T#2_19, T#2_20, T#2_21]
  Op#8 LOGISTIC(T#2_18) -> [T#2_22]
  Op#9 LOGISTIC(T#2_19) -> [T#2_23]
  Op#10 MUL(T#2_23, T#2_4) -> [T#2_24]
  Op#11 LOGISTIC(T#2_21) -> [T#2_25]
  Op#12 TANH(T#2_20) -> [T#2_26]
  Op#13 MUL(T#2_22, T#2_26) -> [T#2_27]
  Op#14 ADD(T#2_24, T#2_27) -> [T#2_28]
  Op#15 TANH(T#2_28) -> [T#2_29]
  Op#16 MUL(T#2_25, T#2_29) -> [T#2_30]
  Op#17 RESHAPE(T#2_30, T#2_8) -> [T#2_31]

Tensors of Subgraph#2
  T#2_0(arg0) shape:[], type:INT32
  T#2_1(arg1) shape:[], type:INT32
  T#2_2(arg2) shape:[1, 1, 100], type:FLOAT32
  T#2_3(arg3) shape:[1, 100], type:FLOAT32
  T#2_4(arg4) shape:[1, 100], type:FLOAT32
  T#2_5(arg5) shape:[128, 1, 6], type:FLOAT32
  T#2_6(sequential_1/lstm/while/add/y) shape:[], type:INT32 RO 4 bytes
  T#2_7(sequential_1/lstm/while/lstm_cell/BiasAdd/ReadVariableOp) shape:[400], type:FLOAT32 RO 1600 bytes
  T#2_8(sequential_1/lstm/while/TensorArrayV2Write/TensorListSetItem) shape:[3], type:INT32 RO 12 bytes
  T#2_9(sequential_1/lstm/while/lstm_cell/MatMul1) shape:[400, 6], type:INT8 RO 2400 bytes
  T#2_10(sequential_1/lstm/while/lstm_cell/MatMul_1) shape:[400, 100], type:INT8 RO 40000 bytes
  T#2_11(sequential_1/lstm/while/add) shape:[], type:INT32
  T#2_12(sequential_1/lstm/while/lstm_cell/MatMul_11) shape:[1, 400], type:FLOAT32
  T#2_13(sequential_1/lstm/while/add_1) shape:[], type:INT32
  T#2_14(sequential_1/lstm/while/TensorArrayV2Read/TensorListGetItem;sequential_1/lstm/time) shape:[1, 6], type:FLOAT32
  T#2_15(sequential_1/lstm/while/lstm_cell/MatMul2) shape:[1, 400], type:FLOAT32
  T#2_16(sequential_1/lstm/while/lstm_cell/add) shape:[1, 400], type:FLOAT32
  T#2_17(sequential_1/lstm/while/lstm_cell/BiasAdd) shape:[1, 400], type:FLOAT32
  T#2_18(sequential_1/lstm/while/lstm_cell/split) shape:[1, 100], type:FLOAT32
  T#2_19(sequential_1/lstm/while/lstm_cell/split1) shape:[1, 100], type:FLOAT32
  T#2_20(sequential_1/lstm/while/lstm_cell/split2) shape:[1, 100], type:FLOAT32
  T#2_21(sequential_1/lstm/while/lstm_cell/split3) shape:[1, 100], type:FLOAT32
  T#2_22(sequential_1/lstm/while/lstm_cell/Sigmoid) shape:[1, 100], type:FLOAT32
  T#2_23(sequential_1/lstm/while/lstm_cell/Sigmoid_1) shape:[1, 100], type:FLOAT32
  T#2_24(sequential_1/lstm/while/lstm_cell/mul) shape:[1, 100], type:FLOAT32
  T#2_25(sequential_1/lstm/while/lstm_cell/Sigmoid_2) shape:[1, 100], type:FLOAT32
  T#2_26(sequential_1/lstm/while/lstm_cell/Tanh) shape:[1, 100], type:FLOAT32
  T#2_27(sequential_1/lstm/while/lstm_cell/mul_1) shape:[1, 100], type:FLOAT32
  T#2_28(sequential_1/lstm/while/lstm_cell/add_1) shape:[1, 100], type:FLOAT32
  T#2_29(sequential_1/lstm/while/lstm_cell/Tanh_1) shape:[1, 100], type:FLOAT32
  T#2_30(sequential_1/lstm/while/lstm_cell/mul_2) shape:[1, 100], type:FLOAT32
  T#2_31(sequential_1/lstm/while/TensorArrayV2Write/TensorListSetItem1) shape:[1, 1, 100], type:FLOAT32

---------------------------------------------------------------
Your TFLite model has ‘1’ signature_def(s).

Signature#0 key: 'serving_default'
- Subgraph: Subgraph#0
- Inputs:
    'lstm_input' : T#0
- Outputs:
    'output' : T#23

---------------------------------------------------------------
              Model size:      58128 bytes
    Non-data buffer size:       8004 bytes (13.77 %)
  Total data buffer size:      50124 bytes (86.23 %)
          - Subgraph#0  :       6000 bytes (10.32 %)
          - Subgraph#1  :          4 bytes (00.01 %)
          - Subgraph#2  :      44016 bytes (75.72 %)
    (Zero value buffers):        804 bytes (01.38 %)

* Buffers of TFLite model are mostly used for constant tensors.
  And zero value buffers are buffers filled with zeros.
  Non-data buffers area are used to store operators, subgraphs and etc.
  You can find more details from https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/schema/schema.fbs

did you find the solution for this?

You have to unroll the network

From: TayyabaZainab0807 @.>
Sent: Monday, June 26, 2023 6:02:02 PM
To: tensorflow/tflite-micro @.>
Cc: jkaldal @.>; Author @.>
Subject: Re: [tensorflow/tflite-micro] RNN tflite model doesn't work when deployed on a microcontroller (Issue #1570)
did you find the solution for this?
—
Reply to this email directly, view it on GitHubhttps://github.com/tensorflow/tflite-micro/issues/1570#issuecomment-1607783518, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AQXGIDLBMCXF3JMP26475LLXNGW7VANCNFSM6AAAAAASDH5JNU.
You are receiving this because you authored the thread.Message ID: @.***>

How does one unroll the network?

It is an argument in tf.keras.layers.RNN
Not a good solution for large networks.

From: Jon Nordby @.>
Sent: Wednesday, July 12, 2023 11:19:27 AM
To: tensorflow/tflite-micro @.>
Cc: jkaldal @.>; Author @.>
Subject: Re: [tensorflow/tflite-micro] RNN tflite model doesn't work when deployed on a microcontroller (Issue #1570)
How does one unroll the network?
—
Reply to this email directly, view it on GitHubhttps://github.com/tensorflow/tflite-micro/issues/1570#issuecomment-1632152316, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AQXGIDK7KQ3RQXQFRV2EBZLXPZTZ7ANCNFSM6AAAAAASDH5JNU.
You are receiving this because you authored the thread.Message ID: @.***>


Dependabot can't parse your go.mod

Wasn't sure that I was following what was going on here. Dependabot has been running fine over the past few weeks. Is there a way to reproduce this locally?
https://github.com/transcom/mymove/issues/3008
The error Dependabot encountered was:

go<EMAIL_ADDRESS>requires
<EMAIL_ADDRESS>requires
<EMAIL_ADDRESS>invalid version: git -c protocol.version=0 fetch --unshallow -f origin refs/heads/*:refs/heads/* refs/tags/*:refs/tags/* in /opt/go/gopath/pkg/mod/cache/vcs/748bced43cf7672b862fbc52430e98581510f4f2c34fb30c0064b7102a68ae2c: exit status 128:
	fatal: The remote end hung up unexpectedly

I was able run go get<EMAIL_ADDRESS>locally, but I couldn't tell if that was the package causing the error.

It looks like that was a temporary blip - while the Go tool was trying to fetch one of the modules its connection to gopkg.in was interrupted.
I'll close this for now, but if it reoccurs, feel free to reopen this and we'll see if we can handle transient failures more elegantly.

I'm getting on average 3 of these issues filed per month (3 in December, 4 in January, 2 this month) across all the repos I maintain. They're mostly from gopkg.in but there's one from golang.org as well.
Is there any way dependabot could check for this specific error and either retry or just not report an issue?


Book library

Modified app with javascript class

Thank you
Sent from Yahoo Mail on Android
On Thu, Jan 19, 2023 at 1:09 PM, Muhammad @.***> wrote:
@mukhammadrizooff approved this pull request.
Hi @Divinity-dev,
Your project is complete! There is nothing else to say other than... it's time to merge it
Congratulations! 🎉
Highlights
Optional suggestions

[OPTIONAL] Good job so far! As the second code reviewer, I would like to give you a piece of advice, according to which you should work as a group with your partner on this project. Remember, listen to my advice in the next group projects, it is very important 🙏🏼🙏🏼🙏🏼

Cheers and Happy coding! 👏 👏 👏
Feel free to leave any questions or comments in the PR thread if something is not 100% clear.
Please, remember to tag me in your question so I can receive the notification.
As described in the Code reviews limits policy you have a limited number of reviews per project (check the exact number in your Dashboard). If you think that the code review was not fair, you can request a second opinion using this form.
—
Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you were mentioned.Message ID: @.***>


The method Profiler Framework calculate the memory seems to be a little more complex than the method Apple Staff suggest.

Hello Leo:
Our discuss before is here:https://github.com/wix/DetoxInstruments/issues/53.
Now I find something new about the method of calculate the memory.
The method Profiler Framework calculate the memory(and the method from debugserver) seems to be a little more complex than the method Apple Staff suggest。
The method from Apple Staff:https://forums.developer.apple.com/message/357415#357415（Re: how XCode to calculate Memory）.It just return vmInfo.phys_footprint.
The definition of phys_footprint:
https://github.com/apple/darwin-xnu/blob/master/osfmk/kern/task.c#L914
You can learn more about the philosophy behind this in WWDC 2018 Session 416 iOS Memory Deep Dive

Ha, this is actually even better! It's the same result that is shown when running an application in Xcode.
I header it says /* added for rev1 */. I wonder what that means.

Using phys_footprint now.


proposed String extensions

Same as before. Give me a bit of feedback and I'll put together a PR if there's interest. Two methods:
// like base64Encoded, but safe for URL parameters
// https://en.wikipedia.org/wiki/Base64#URL_applications
var base64UrlEncoded: String?`

// collapses runs of whitespace to a space, then trims. Helpful for normalizing user input.
var squished: String

String already has a base64Encoded property.
squished sounds nice, but I usually find the only requirement is to trim white spaces, and we have the trimmed property for that.

base64UrlEncoded is different from base64Encoded. It's a variant for url query parameters. Something like:
var base64UrlEncoded: String? {
    guard let s = base64Encoded else {
      return nil
    }

    // https://en.wikipedia.org/wiki/Base64#URL_applications
    let map = ["+": "-", "/": "_", "=": ""]
    return map.reduce(s) { $0.replacingOccurrences(of: $1.0, with: $1.1) }
  }

squished normalizes all whitespace, including runs of whitespace:
"  hello    world  " => "hello world"
This cleans up many common user input errors. We don't need it, though.

I still don't understand the use case of base64UrlEncoded. Can you please show an example?

The problem arises when you want to send a URL query parameter with base 64 encoded data, like a = base64("something"):
base64("something") => "c29tZXRoaW5n"
or
https://example.com/q?a=c29tZXRoaW5n
but what if the value of a is base64("q0?ml")? The standard base 64 encoding is:
base64("q0?ml") => "cTA/bWw="
If you aren't careful the URL will become something invalid like:
https://example.com/q?a=cTA/bWw=
To avoid this problem you have to URL encode the base 64 encoded value, which would then be:
https://example.com/q?a=cTA%2FbWw%3D
This is both inefficient and error prone for the unwary. Eventually a variant of base 64 encoding emerged as described here - https://en.wikipedia.org/wiki/Base64#URL_applications. A few characters are altered from the standard base 64 output, to produce:
https://example.com/q?a=cTA_bWw
Many languages and libraries support this variant because the use case is so common. In fact, the tool I'm using right now has a button for URL safe encode & decode - https://www.base64encode.org/
We should support it too!

Just giving this one another nudge... should I proceed? I'm fine if you want to close it and focus energy elsewhere. I won't be offended, I promise 😄

Sorry we've missed that @gurgeous, I'll try to take a look at this soon :)

My two cents:

base64UrlEncoded: If I understood correctly, I see that what you may want is to encode the URL escaping the base64 values. I see the point, but I think it would be actually more general to have an extension on the string that does the URL escaping. Think about it that way, instead of a string.base64UrlEncoded we could have a string.base64Encoded.urlEscaped. This way we could have both functionalities well separated instead of coupled together so we can use urlEscaped for other scenarios.
squished: What is the difference of this and " hello world ".trimmingCharacters(in: .whitespaces)? I know that it is Foundation stuff, so maybe the idea is to have some native string extension?

@gurgeous Sorry it took a while, I totally forgot about this 😅


Fixing up WIN64 volatile/non-volatile registers handling.

Sorry for the delay with my answer.  I was and am still busy with other projects.
Thank you for your pull request.  I've merged it into the repository.

What about using (mask & (1 << reg)) in such cases?

Sorry, I thought this question for logzero but as he is silent I decide to answer it.
I think it is a micro-optimization.  The current code is fine.  There are lot of performance trouble spots in MIR-generator and all machine-dependent code is nowhere close to them.

I didn't feel like it was something for me to decide.
Btw gcc does some fun stuff with
return !(hard_reg == BX_HARD_REG || hard_reg == SI_HARD_REG || hard_reg == DI_HARD_REG
            || (hard_reg >= R12_HARD_REG && hard_reg <= R15_HARD_REG)
            || (hard_reg >= XMM6_HARD_REG && hard_reg <= XMM15_HARD_REG));

It figures out to use a bitmask, but kind of gives up on it halfway. Probably because it uses bit test instruction:
if (hard_reg <= 15) { // gp regs
  if (0xf0c8 & (1 << hard_reg)) // bit test gp regs bitmask
    return 0;
} else { // xmm regs
  hard_reg -= 22;
  return (hard_reg < 9); // xmm6 - xmm15
}

Actually GCC does use a 32 bit register bitmask if MIR_reg_t is uint32_t as defined in mir. I've used int for esting, duh.
It generates
if (hard_reg > 31) return 1;
return !(0xFFC0F0C8 >> hard_reg) & 1;

Which is pretty cool.


some words for a word game

I used the Readlex to make a word game. These additions are words I've tried to guess but found out that are not in the dictionary.
Some of these words are relatively new words (like "exome" and "arowana"), while others are missing forms of words (e.g. "gnarled" is in the lexicon, but not "gnarl" or "gnarling"; "blogger" is in the lexicon, but not "blog", "blogs", or "blogging"). Here's an extract of the Python code I wrote to add words to my word game:
additional_words = [
  ["𐑩𐑚𐑤𐑵𐑑",   "ablute",    0],
  ["𐑩𐑚𐑤𐑵𐑑𐑩𐑛", "abluted",   0], # back formed from "ablution"; washed clean
  # ["𐑭𐑡𐑦",    "aji",      0], # too short, but not in the lexicon
  ["𐑭𐑡𐑦𐑟",    "ajis",      0],
  ["𐑨𐑯𐑕𐑨𐑑𐑕",  "ansatz",    0], # a kind of mathematical assumption
  ["𐑨𐑯𐑑𐑰𐑓𐑩",  "antifa",    0], # an anti-fascist organization
  ["𐑨𐑯𐑑𐑦𐑓𐑭",  "antifa",    0],
  ["𐑨𐑮𐑩𐑢𐑪𐑯𐑩", "arowana",   MIN_FREQ], # a freshwater fish; Scrabble accepts many alternate spelling
  ["𐑨𐑕𐑐𐑦",    "aspie",     0], # someone who has Asperger's syndrome
  ["𐑨𐑕𐑐𐑦𐑟",   "aspies",    0],
  ["𐑷𐑛𐑦𐑟𐑩𐑯",  "audism",    0], # discrimination towards the deaf
  ["𐑚𐑰𐑑𐑛𐑬𐑯",  "beatdown",  MIN_FREQ], # a severe beating; noun form of "to beat down"
  ["𐑚𐑰𐑑𐑛𐑬𐑯𐑟", "beatdowns", MIN_FREQ],
  ["𐑚𐑧𐑯𐑛𐑦",   "bendy",     0], # easily bent into new shapes without breaking; e.g. "bendy straw"
  ["𐑚𐑧𐑕𐑑𐑦",   "bestie",    MIN_FREQ], # best friend
  ["𐑚𐑧𐑕𐑑𐑦𐑟",  "besties",   MIN_FREQ],
  # ["𐑚𐑲𐑒𐑘𐑫𐑼𐑾𐑕",  "bi-curious",0], # too long, but not in the lexicon
  ["𐑚𐑲𐑪𐑯𐑦𐑒",  "bionic",    0], # using artificial materials/methods to enhance a biological body
  ["𐑚𐑲𐑪𐑯𐑦𐑒𐑕", "bionics",   0],
  ["𐑚𐑦𐑟𐑡𐑧𐑑",  "bizjet",    0], # business jet plane
  ["𐑚𐑦𐑟𐑡𐑧𐑑𐑕", "bizjets",   0],
  ["𐑚𐑤𐑪𐑜",    "blog",      MIN_FREQ], # a type of personal website; short for "web log"
  # why is just "blogger" in there?
  ["𐑚𐑤𐑪𐑜𐑟",   "blogs",     MIN_FREQ],
  ["𐑚𐑤𐑪𐑜𐑦𐑙",  "blogging",  MIN_FREQ],
  ["𐑚𐑴𐑒𐑱",    "bokeh",     0], # artistic use of blurring in photography
  ["𐑚𐑮𐑲𐑯𐑛",   "brined",    0], # preserved in brine (past tense/part. of "to brine")
  ["𐑒𐑨𐑤𐑟",    "cals",      0], # short for "calories"
  ["𐑒𐑩𐑐𐑰𐑖",   "capisci",   0], # also spelled capiche, capeesh, capishe, etc: "Understood?"
  ["𐑗𐑫𐑼𐑴",    "churro",    0], # a Spanish fried dough confection
  ["𐑗𐑫𐑼𐑴𐑟",   "churros",   0],
  ["𐑒𐑩𐑤𐑨𐑚",   "collab",    0], # short for "collaboration" or "to collaborate"
  ["𐑒𐑪𐑯𐑤𐑨𐑙",  "conlang",   0], # constructed language
  ["𐑒𐑮𐑦𐑯𐑡𐑦",  "cringy",    0], # also "cringey": causing the viewer to feel secondhand embarrassment
  ["𐑒𐑮𐑦𐑯𐑡𐑦𐑼", "cringier",  0],
  ["𐑛𐑨𐑖𐑒𐑨𐑥",  "dashcam",   0], # small camera mounted on a car's dashboard; driving recorder
  ["𐑛𐑨𐑖𐑒𐑨𐑥𐑟", "dashcams",  0],
  ["𐑛𐑧𐑥𐑴𐑛",   "demoed",    0], # past tense of "to demo" (to demonstrate, as a political march or a computer program)
  ["𐑛𐑧𐑥𐑩𐑯𐑦𐑥", "demonym",   0], # the name for the inhabitants of a place (e.g. a demonym for "Britain" is "Brits")
  ["𐑛𐑲𐑴𐑛",    "diode",     MIN_FREQ], # a device that allows electricity to flow in only one direction
  ["𐑛𐑲𐑴𐑛𐑟",   "diodes",    MIN_FREQ],
  ["𐑛𐑪𐑯𐑼",    "doner",     MIN_FREQ], # as in döner kebab: flat pieces of cooked meat served with salad in pitta
  ["𐑛𐑵𐑓𐑩𐑕",   "doofus",    0], # a stupid person
  ["𐑛𐑴𐑐𐑦𐑤𐑦",  "dopily",    0], # adv form of "dopey": acting as if drowsy or on drugs
  ["𐑛𐑴𐑑𐑼𐑛𐑤𐑦", "dotardly",  0], # like a dotard
  # "dox" is in there as "docks"
  ["𐑛𐑪𐑒𐑟𐑑",   "doxed",     0], # to dox or doxx: to publish personal identifying information without consent online
  ["𐑛𐑪𐑒𐑟𐑦𐑙",  "doxing",    0],
  ["𐑛𐑢𐑰𐑚",    "dweeb",     0], # an inconfident, awkward person
  ["𐑛𐑢𐑰𐑚𐑟",   "dweebs",    0],
  ["𐑛𐑲𐑨𐑛",    "dyad",      0], # a group of two; related to "triad"
  ["𐑛𐑲𐑨𐑛𐑟",   "dyads",     0],
  ["𐑛𐑦𐑕𐑓𐑹𐑾",  "dysphoria", 0], # feeling of severe unhappiness, as in "gender dysphoria"
  ["𐑧𐑯𐑾𐑜𐑮𐑨𐑥", "enneagram", 0], # a 9-pointed star, or a personality test based on nine archetypes
  ["𐑧𐑯𐑾𐑜𐑪𐑯",  "enneagon",  0], # a 9-sided polygon
  ["𐑧𐑯𐑾𐑜𐑪𐑯𐑟", "enneagons", 0],
  ["𐑧𐑒𐑕𐑴𐑥",   "exome",     0], # the part of the genome excluding introns
  ["𐑧𐑒𐑕𐑴𐑥𐑟",  "exomes",    0],
  ["𐑲𐑤𐑲𐑯",    "eyeline",   0], # the horizontal portion of the face along the eyes
  ["𐑲𐑤𐑲𐑯𐑼",   "eyeliner",  MIN_FREQ], # makeup that lines the eyes
  ["𐑓𐑱𐑒𐑼",    "faker",     0], # someone who fakes (emotions, illness, objects, etc.)
  ["𐑓𐑱𐑒𐑩𐑕𐑑",  "fakest",    0], # the most fake
  ["𐑓𐑧𐑛𐑟",    "feds",      0], # (US) federal officers; (UK) police officers
  ["𐑓𐑰𐑓𐑦",    "fifi",      0], # "fleshlight"
  ["𐑓𐑰𐑓𐑦𐑟",   "fifis",     0],
  ["𐑓𐑦𐑜𐑦",    "figgy",     0], # like or containing figs, as in "figgy pudding"
  ["𐑓𐑦𐑯𐑑𐑧𐑒",  "fintech",   0], # financial technology
  ["𐑓𐑤𐑰𐑒",    "fleek",     0], # as in "on fleek": perfectly styled. unknown origin
  ["𐑓𐑤𐑰𐑒𐑕",   "fleeks",    0], # "makes on fleek"
  ["𐑓𐑮𐑬𐑯𐑦",   "frowny",    MIN_FREQ], # frowning
  # ["𐑯𐑸𐑤",     "gnarl",     0], # too short, but not in the lexicon ("gnarled" is, but not "gnarl")
  ["𐑯𐑸𐑤𐑦𐑙",   "gnarling",  0],
  ["𐑜𐑮𐑷𐑤𐑦𐑒𐑕", "grawlix",   MIN_FREQ], # words censored using assorted symbols (like Q*bert)
  ["𐑣𐑧𐑯𐑗",    "hench",     0], # the narrow side of a chimney stack; (UK) big, strong, and muscular
  ["𐑣𐑹𐑗𐑭𐑑𐑩",  "horchata",  0], # a Spanish/LatAm milk-like drink made from nuts or rice
  ["𐑣𐑫𐑜𐑩",    "hygge",     0], # Danish concept of convivial cosiness
  ["𐑣𐑵𐑜𐑩",    "hygge",     0],
  ["𐑣𐑿𐑜𐑩",    "hygge",     0],
  ["𐑦𐑒𐑔𐑦𐑦𐑒",  "ichthyic",  0], # of or like a fish
  ["𐑦𐑒𐑔𐑦𐑶𐑛",  "ichthyoid", 0], # a fish or something resembling a fish
  # ["𐑦𐑒𐑔𐑦𐑪𐑤𐑩𐑡𐑦",  "ichthyology", 0], # the study of fish
  ["𐑦𐑯𐑕𐑧𐑤",   "incel",     0], # "involuntary celibate": an online subculture of men who define themselves as wanting but not able to get a romantic or sexual partner
  ["𐑦𐑯𐑕𐑧𐑤𐑟",  "incels",    0],
  ["𐑦𐑯𐑕𐑐𐑴",   "inspo",     0], # short for "inspiration"
  ["𐑦𐑑𐑩𐑛",    "it'd",      MIN_FREQ], # it would
  ["𐑡𐑳𐑥𐑐𐑕𐑵𐑑", "jumpsuit",  0], # a one-piece garment originally used by parachutists, but now worn by skiers and prisoners
  # ["𐑡𐑳𐑥𐑐𐑕𐑵𐑑𐑕", "jumpsuits",  0], # too short, but not in the lexicon
  ["𐑒𐑲𐑑𐑩𐑛",   "kited",     0], # past tense/part. of "to kite"
  ["𐑤𐑨𐑒𐑕𐑑",   "laxed",     0], # (phonetics) made lax
  ["𐑤𐑨𐑒𐑕𐑦𐑙",  "laxing",    0], # (phonetics) the process where a tense vowel becomes lax
  # ["𐑤𐑽𐑦",     "leery",     0], # too short, but not in the lexicon
  ["𐑤𐑽𐑦𐑼",    "leerier",   0], # more "leery": cautious, suspicious, or weary
  ["𐑤𐑽𐑦𐑩𐑕𐑑",  "leeriest",  0],
  ["𐑥𐑩𐑒𐑪𐑒",   "macaque",   0], # a type of monkey; Wiktionary says this is UK
  ["𐑥𐑩𐑒𐑨𐑒",   "macaque",   0], # Wiktionary says this is US
  ["𐑥𐑨𐑒𐑼𐑪𐑯",  "macaron",   MIN_FREQ], # "macaroon": a French baked goods known for varied colors
  ["𐑥𐑧𐑗𐑩",    "matcha",    0], # powdered green tea served in hot water
  ["𐑥𐑭𐑗𐑩",    "matcha",    0],
  ["𐑥𐑦𐑕𐑥𐑨𐑗𐑑", "mismatched",MIN_FREQ], # of two objects or people, unsuitable for each other
  ["𐑥𐑴𐑯𐑨𐑛",   "monad",     0], # a group of one; related to "triad"
  ["𐑥𐑴𐑯𐑨𐑛𐑟",  "monads",    0],
  ["𐑯𐑳𐑯𐑗𐑳𐑒",  "nunchuck",  MIN_FREQ], # also "nunchuk". a traditional Japanese weapon consisting of two sticks joined on one end by a chain or rope
  ["𐑵𐑚𐑤𐑧𐑒",   "Oobleck",   0], # a non-newtonian fluid made of starch and water
  ["𐑴𐑐𐑦𐑶𐑛",   "opioid",    0], # any drug with opium-like effects
  ["𐑴𐑑𐑭𐑒𐑵",   "otaku",     MIN_FREQ], # a geek, usually obsessed with anime, manga, or Japanese video games
  ["𐑐𐑸𐑥𐑦",    "parmie",    0], # (AU) also "parmi": (chicken) parmigiana
  ["𐑐𐑭𐑕𐑒𐑴𐑛",  "passcode",  0], # a combination of numbers or motions used to unlock a device (trap-bath split)
  ["𐑐𐑧𐑛𐑦",    "pedi",      0], # pedicure
  ["𐑐𐑦𐑒𐑳𐑐",   "pickup",    MIN_FREQ], # a device that picks up vibrations to be amplified; pickup truck; the act of picking someone or something up
  ["𐑐𐑦𐑒𐑳𐑐𐑕",  "pickups",   MIN_FREQ],
  ["𐑐𐑦𐑤𐑒𐑮𐑴",  "pilcrow",   0], # the paragraph symbol: ¶
  ["𐑐𐑪𐑤𐑦𐑥𐑼",  "polymer",   0], # substance made of large molecules made of many smaller molecules
  ["𐑐𐑪𐑤𐑦𐑥𐑼𐑟", "polymers",  0],
  ["𐑐𐑪𐑑𐑐𐑲",   "potpie",    0], # "pot pie": pastry filled with vegetables and usually meat
  ["𐑐𐑮𐑧𐑜𐑴",   "preggo",    0], # short for "pregnant"
  ["𐑮𐑨𐑜𐑛𐑪𐑤",  "ragdoll",   0], # "rag doll": a cat breed and toy
  ["𐑮𐑧𐑑𐑮𐑴",   "retro",     0], # with an aesthetic that is from, or mimics being from, the past
  ["𐑮𐑶𐑛𐑟",    "roids",     0], # short for hemorrhoids or steroids
  ["𐑕𐑱𐑓𐑒𐑰𐑐",  "safekeep",  0], # back formed; the act of safekeeping
  ["𐑕𐑧𐑤𐑓𐑦",   "selfie",    MIN_FREQ], # photo of oneself using the inward camera of a device
  ["𐑕𐑧𐑤𐑓𐑦𐑟",  "selfies",   MIN_FREQ],
  ["𐑕𐑧𐑑𐑳𐑐",   "setup",     568], # a situation that has been "set up" for some purpose; the act of setting up a computer program
  ["𐑕𐑧𐑑𐑳𐑐𐑕",  "setups",    43],
  ["𐑕𐑦𐑑𐑳𐑐",   "sit-up",    0], # a type of abdominal exercise
  ["𐑕𐑦𐑑𐑳𐑐𐑕",  "sit-ups",   0],
  ["𐑕𐑒𐑿𐑛",    "skewed",    MIN_FREQ], # not accurate or exact; with a "skew"
  ["𐑕𐑒𐑿𐑦𐑙",   "skewing",   MIN_FREQ], # applying skew
  ["𐑕𐑒𐑿𐑯𐑩𐑕",  "skewness",  0], # (statistics) asymmetry of probability distribution
  ["𐑕𐑳𐑥𐑢𐑳𐑯𐑟", "someone's", 0], # of someone
  ["𐑕𐑐𐑱𐑕𐑥𐑩𐑯", "spaceman",  0], # astronaut or extraterrestrial
  ["𐑕𐑐𐑱𐑕𐑥𐑧𐑯", "spacemen",  0],
  ["𐑕𐑐𐑦𐑯𐑼",   "spinner",   MIN_FREQ], # someone or something that spins; "Game of Life" has a spinner on its board
  ["𐑕𐑐𐑦𐑯𐑼𐑟",  "spinners",  MIN_FREQ],
  ["𐑕𐑐𐑹𐑒",    "spork",     MIN_FREQ], # a utensil resembling a spoon with prongs cut into the end
  ["𐑕𐑐𐑹𐑒𐑟",   "sporks",    MIN_FREQ],
  ["𐑕𐑑𐑦𐑒𐑩𐑤",  "stickle",   0], # to obsess over a particular type of behavior
  ["𐑕𐑢𐑴𐑤",    "swole",     0], # buff
  ["𐑑𐑨𐑜𐑤𐑲𐑯",  "tagline",   0], # a catchphrase in advertising
  ["𐑑𐑮𐑴𐑡𐑩𐑯",  "trojan",    0], # a type of computer virus that remains inactive for an extended amount of time before showing harmful behavior
  ["𐑑𐑻𐑯𐑑",    "turnt",     0], # energetic, especially from alcohol or drugs (or music)
  ["𐑑𐑿𐑐𐑤𐑩𐑑"   "tuplet",    0], # a musical term not found on cambridge dictionary
  ["𐑑𐑢𐑻𐑒",    "twerk",     MIN_FREQ], # a type of hip-shaking dance
  ["𐑑𐑢𐑻𐑒𐑑",   "twerked",   MIN_FREQ],
  ["𐑑𐑢𐑻𐑒𐑦𐑙",  "twerking",  MIN_FREQ],
  ["𐑑𐑢𐑻𐑒𐑕",   "twerks",    MIN_FREQ],
  # ["𐑵𐑥𐑱",    "ume",       0], # too short, but not in the lexicon
  ["𐑵𐑥𐑱𐑟",    "umes",      0], # Japanese apricots
  ["𐑿𐑯𐑦𐑚𐑮𐑬",  "unibrow",   0], # eyebrows that connect above the nose
  ["𐑿𐑯𐑦𐑚𐑮𐑬𐑟", "unibrows",  0],
  ["𐑳𐑯𐑕𐑷",    "unsaw",     0],
  ["𐑳𐑯𐑕𐑰",    "unsee",     0], # to undo the act of seeing
  ["𐑳𐑯𐑕𐑰𐑦𐑙",  "unseeing",  0],
  ["𐑝𐑨𐑒𐑕",    "vax",       0], # short for vaccine or vaccination
  ["𐑝𐑨𐑒𐑕𐑑",   "vaxed",     0], # vaccinated
  ["𐑝𐑨𐑒𐑕𐑩𐑟",  "vaxes",     0], # vaccinates
  ["𐑝𐑨𐑒𐑕𐑦𐑙",  "vaxing",    0], # vaccinating
  ["𐑢𐑱𐑒𐑚𐑹𐑛",  "wakeboard", 0], # to take part in wakeboarding; the board used for wakeboarding
  ["𐑢𐑱𐑒𐑚𐑹𐑛𐑟", "wakeboards",0],
  ["𐑢𐑪𐑗𐑓𐑫𐑤𐑦", "watchfully",0], # in a watchful way
  ["𐑢𐑧𐑑𐑕𐑵𐑑",  "wetsuit",   0], # a close-fitting garment worn to insulate oneself from cold water
  ["𐑢𐑧𐑑𐑕𐑵𐑑𐑕", "wetsuits",  0],
  ["𐑢𐑲𐑑𐑢𐑷𐑑𐑼", "whitewater",0], # water turbulent enough to induce fine bubbles, as in "whitewater rafting"
  # ["𐑢𐑲𐑼𐑤𐑩𐑕𐑤𐑦","wirelessly",0], # too long, but not in the lexicon
  ["𐑢𐑬𐑟𐑩",    "wowza",     0], # wow
  ["𐑘𐑬𐑟𐑩",    "yowza",     0], # wow
  ["𐑟𐑧𐑯𐑟",    "zens",      0], # approaches to instruction or understanding emphasizing simplicity and intuition
  ["𐑟𐑪𐑥𐑚𐑶𐑛",  "zomboid",   0], # resembling a zombie
]

Thanks, this is a great resource. I will add these to ReadLex. It does still reflect the sources I drew on, mostly a few decades old.

I've added the words and accepted your spellings in the vast majority of cases. Some more slangy or not-obviously naturalised words I have added to addendum.dict. If you're happy with this, please feel free to close the issue.

I think ‹𐑛𐑪𐑒𐑟𐑑› cannot be correct.

Thanks, I missed that in the Shavian. Fixed.


Suggestion: add /esb reload command

Simple enough, add the /esb reload command that will reload the config.

It was already implemented a while ago, but it is common practice to just use the GameReloadEvent, so I removed it in the newer versions.
You can simply use the command /sponge plugins reload


Trying to Join from Fabric Server

When I try to join the server, if the minecraft instance and server instance don't have the same config, it gives a list of different ID's that are missing. I managed to make it work by just cloning the config, but I thought I'd let you know.

It shouldn't be a problem in the latest version. Thanks for the report!


Login validation, multi-service removal and image name shortening

Added login form validation and split into form and view components
Multi service remove action and shorten image names

/cc @ehazlett @cloutiertyler

Added a few more things to this:

Fitted status icons to save some space in our tables
Shorten long content trust image names to save some screen space, otherwise they often end up overflowing off the screen in list views
Fleshed out container inspect page

lgtm


[New Feature] Indicator of number of other rooms with unread messages

Description
In many chat applications, one is given an indication of other "rooms" that have unread messages inside a given "room" like the "4" to the right of the back arrow in this screenshot:

I recently tried to get my daughter to use Rocket.chat Android and she said she couldn't switch b/c it didn't have this feature -- not sure it is so crucial for everyone but that is one user's experience.

@thiagosanchz Adding Thiago here, I also like this (iOS has it).

@bizzbyster This is how it looks now. I'll try to move the badge a little left. Any other suggestions?

Code is @ https://github.com/ubarsaiyan/Rocket.Chat.Android/tree/notif-count

I think if you show all unread message on the header of the room will be a lot of distraction to the users.
We created this solution:

@thiagosanchz The FAB button would only notify the users of the new messages in the current room but the unread badge in the top will notify the users of new messages in other rooms. I think we can make it more subtle if it is distracting.

I prefer the first one (rounded square with number)

@thiagosanchz @filipedelimabrito Please take a look on these ideas ^^


AppleSignin.authorize() produces an OK alert dialog instead of showing apple sign in screen

Hi,

We are getting an issue with apple sign in. AppleSignin.authorize() produces an OK alert dialog instead of showing apple sign in screen. Can you please help?

Below are some details:

To integrate apple sign we performed the following steps.

Installed the ti.applesignin module
Added the entitlement section to tiapp.xml

        com.apple.developer.applesignin

          Default

added the following code

var AppleSignIn = require('ti.applesignin');

AppleSignIn.addEventListener('login', function (event) {
 Ti.API.warn(event.error);
 console.warn(loginevent: ${JSON.stringify(event, null, 2)});
 if (!event.success) {
   alert(event.error);
   return;
 }

  Ti.API.warn(event);
});

var win = Ti.UI.createWindow({
  backgroundColor: '#fff'
});

var btn = AppleSignIn.createLoginButton({ width: 280, height: 38 });

btn.addEventListener('click', function () {
  AppleSignIn.authorize();
});

win.add(btn);
win.open();

Enabled the sign in option in provisioning profile on https://developer.apple.com/ and downloaded and installed that provisioning profile to run our app.

Titanium SDK version: 8.3.0

The "Sign In" button shows up but on clicking it gives only ‘OK’.

The event object logs show success: false and cancelled: true and there is no error field (see log below):

loginevent: {
[WARN] :     "success": false,
[WARN] :     "cancelled": true,
[WARN] :     "bubbles": true,
[WARN] :     "type": "login",
[WARN] :     "source": {},
[WARN] :     "cancelBubble": false
[WARN] :   }

It does, because you always alert with event.error:
AppleSignIn.addEventListener('login', function (event) {
 Ti.API.warn(event.error);

Why did the login screen from Apple login screen not show up on button click?am I missing something?

@khehrarajbirgaa If you take a closer look at the event data, you can see that cancelled: true is set. This either means that the user canceled the login request or that it failed with an unknown error due to wrong configuration. I'd suggest to check your device logs using Console app for more infos about what might be going wrong.


Docs: various improvements

Did this render? Those drafts are referencing cue files (for the code samples) that weren't moved as well.

You're right, it broke. That's why the netlify preview failed. I just pushed a fix.

The plans dir should move to guides to keep the links, or to tests like the others. The point of tests is to add a bats file later and test those plans.

Thank you @gerhard !


Change platform and Swift version shields.io badge colour

Discussed in https://github.com/SwiftPackageIndex/SwiftPackageIndex-Server/discussions/3410
Change the colour of the background for the badges to blue to indicate information rather than any other kind of status.

The logo colour should not be changed, only the background.

The mid-blue is far too strong 😬

What about the blue at the button you use?

That's the same mid-blue, just the dark mode version of it.
Shields.io have a standard "blue". I'm trying that, but it takes a while to iterate as it needs to be deployed to staging every time.


"automatically group imports on save" conflict with vscode auto save

I configure my with code with config as below

vscode will save constantly
This is my vscode version:
Version: 1.46.1 (system setup)
Commit: cd9ea6488829f560dc949a8b2fb789f3cdc05f5d
Date: 2020-06-17T21:13:20.174Z
Electron: 7.3.1
Chrome: 78.0.3904.130
Node.js: 12.8.1
V8: 7.8.279.23-electron.0
OS: Windows_NT x64 10.0.18362

Hey @linyihai,
I wasn't able to reproduce it. I tried to apply the same settings and played with a few more options but it was working fine. Can you confirm that it's still happening?


Possibility to scroll the event popover when it doesn't fit the screen

It's still not working in some cases 🤔


Wrong data in useData after client side navigation

Using examples/full:

navigate to http://localhost:3000/star-wars/1 (page must be server loaded, without client navigation - so please reload page)
navigate to 'Data fetching' using link in sidebar

An error will occur.
useData will return the original object from http://localhost:3000/star-wars/1 combined with the array from http://localhost:3000/star-wars (because the base structure is an object the array content is converted to objects keys also)
I think the data should always be re-created

Up for a PR?

I cannot understand where it happens

:+1: Let me have a look

I see, it's a regression introduced by https://github.com/vikejs/vike-vue/commit/a29d481dd81a8095ccb0dd5432e31a1844e35037.
Good catch.
We could delete all props before assigning the new ones.
I wanted to try whether https://github.com/vikejs/vike/discussions/1662#discussioncomment-9641666 could be a solution.
WDYT?

I think that even if we delete all props before the shape of the original target remains.
So if an object/array was made reactive it'll stay object/array

I tried 2 approaches:

make dataReactive a ref(reactive(data)); set dataReactive.value = reactive(data) in changePage; make sure to return data.value in useData
make dataReactive a reactive({ data }); set dataReactive.data = data in changePage

For 1. we'll not get reactivity for data acquired with useData before a changePage
For 2. all usage should be data.data

I think that even if we delete all props before the shape of the original target remains. So if an object/array was made reactive it'll stay object/array

Yes, that was actually a breaking change we introduced in 0.6.7, see CHANGELOG.md.
About 2, would it keep the current DX? In other words:
<template>
  id: {{ data.product.id }}
</template>
<script setup>
import { useData } from 'vike-vue/useData'
const data = useData()
console.log('id', data.product.id)
</script>

I like the simplicity of 1 a lot and I don't think we would need to make it reactive() anymore (I think we can and should assume data to be immutable). Although it would mean that the user would have to append .value right? In other words:
  <template>
    id: {{ data.product.id }}
  </template>
  <script setup>
  import { useData } from 'vike-vue/useData'
  const data = useData()
- console.log('id', data.product.id)
+ console.log('id', data.value.product.id)
  </script>

create dataReactive as dataReactive = ref(reactive(data)); set dataReactive.value = reactive(data) in changePage; make sure to return data.value in useData

<template>
  id: {{ data.product.id }}
</template>
<script setup>
  import { useData } from 'vike-vue/useData'
  const data = useData()
  console.log('id', data.product.id)
</script>

We lose reactivity for data read with useData before changePage.

create dataReactive as dataReactive = reactive({ data }); set dataReactive.data = data in changePage

<template>
-  id: {{ data.product.id }}
+  id: {{ data.data.product.id }}
</template>
<script setup>
  import { useData } from 'vike-vue/useData'
  const data = useData()
-  console.log('id', data.product.id)
+  console.log('id', data.data.product.id)
</script>

A little strange when used.

create dataReactive as dataReactive = ref(data); set dataReactive.value = data in changePage

<template>
  id: {{ data.product.id }}
</template>
<script setup>
  import { useData } from 'vike-vue/useData'
  const data = useData()
-  console.log('id', data.product.id)
+  console.log('id', data.value.product.id)
</script>

Everything should be fine (I removed the reactive wrapper as you said above - we can keep it and I think it's exactly the same thing).

BTW, can you think of any root level keys in pageContextReactive / pageContext that might be present when pageContextReactive is first created as reactive and missing when updating in changePage - if there are then Object.assign(pageContextReactive, pageContext) should have a cleaning stage before.

BTW, can you think of any root level keys in pageContextReactive / pageContext that might be present when pageContextReactive is first created as reactive and missing when updating in changePage - if there are then Object.assign(pageContextReactive, pageContext) should have a cleaning stage before.

Yes custom properties. I also think we should add a cleaning stage.

That's actually what I was worried about solution 2. A bit (too?) strange indeed.
So far I think ref() without reactive() is the most natural fit. In other words: I don't see why data would need to be reactive. I'd even say that making it non-reactive is a good thing as it discourages users from doing weird things with data. So, yea, the issue here is that users have to use .value outside of <template> but maybe Vue users are used to this?

create dataReactive as dataReactive = ref(reactive(data)); set dataReactive.value = reactive(data) in changePage; make sure to return data.value in useData

Interesting trick. From a DX perspective I guess it's the best solution?

I wonder if there is a way to use ref() without using reactive() in a way that preserves the "perfect DX" of solution 1.

create dataReactive as dataReactive = ref(data); set dataReactive.value = data in changePage; make sure to return data.value in useData

<template>
  id: {{ data.product.id }}
</template>
<script setup>
  import { useData } from 'vike-vue/useData'
  const data = useData()
  console.log('id', data.product.id)
</script>

[!WARNING]
Same caveat as for 1 - we lose reactivity for data read with useData before changePage.
Is it possible that this happens (useData to be called before changePage)?

I'd be surprised if 4 works: AFAIK .value returns the plain value (without any wrapper) so I can't think of how Vue can track the dependency between <template> and the ref().

It looks good to me

Hm, let me try.


Allow the LV to be set to error when full

Related to #103, setting the lv_when_full behavior to error and pre-allocating the LV to use the whole VG seems to have better behavior when the VG is not used for other LVs.

I am not sure how does this benefit. When pool gets full, default behavior of thin pool is to queue IO for 60 seconds as it is hoping that soon thin pool will be expanded. If not, then IO errors out after 60 seconds.
If you disable this queuing behavior and error starts returning immediately, how do we benefit?

This is beneficial when you have a fixed-size LV (i.e., setting AUTO_EXTEND_POOL=no) and don't want to wait for 60 seconds for the IO errors to timeout.

XFS will still hang if pool is full (with AUTO_EXTEND_POOL=no). so how does it help?

Yes, but ext4 will not.  #103 allows us to set ext4.

In case of ext4, pool will grow just fine and when pool is full ext4 will go to read only mode. So in case of ext4, there does not seem to be a reason to set AUTO_EXTEND_POOL=n
See, we can provide hundredes of knobs if we want in docker-storage-setup. maintaining and parsing all that will become very messy pretty soon. So I really want to focus on knobs which really matter and make a difference and not try to support every possible configuration/setting.

I'll run some tests with ext4 and these options unset.  I'm just not sure why I wouldn't want to size the LV up to the full available space and set AUTO_EXTEND_POOL=no if the whole PV and VG are dedicated to the single LV.

I am not completely opposed to adding an option like that. Just want to make sure that it is really useful for people and there are more than one users/consumers.

I would imagine that anyone who is setting a fixed size for the thin pool would probably prefer immediate error rather than queuing for 60s.  With that said, would it make more sense to change the logic to just key from the value of AUTO_EXTEND_POOL rather than a separate environment variable?

One might have AUTO_EXTEND_POOL=no, but I think thin pool can still be extended driven by global lvm policy. Look at /etc/lvm/lvm.conf  thin_pool_autoextend_threshold. So disabling queueing of IO just based on AUTO_EXTEND_POOL might not be best.

Closing this for now. Open it again if need be.


Add camel-jetty component

Upgrade jetty to the 12.0.6 version as in camel 4.4.0. camel-cxf had to be repaired in the process
Add camel-jetty feature and integration test

I think we should use TCCL to avoid conflict with pax-web jetty. It means we would have a new port used, but not a problem. I gonna do the review.

This one is outdated

Updated PR to contain only the integration test.


feat: add flag to enable faster manifest paths

The new V2 manifest path scheme makes discovering the latest version of a table constant time on object stores, regardless of the number of versions in the table. See benchmarks in the PR here: https://github.com/lancedb/lance/pull/2798
Closes #1583

It might be nice if there were some way to inspect a table to see if it is using the v2 manifest naming scheme or not. I know the operation is idempotent but it still requires setting up a quiet period to use so it might be convenient for a user to check if it needs to be performed before they go and do it.

Thanks, this is a good point. I've exposed a method to let users check this.


Provide Hyperlink to Bing Maps ToU instead of Bing Maps top page

Problem or user concern
According to Section 7 of the *** Microsoft Bing Maps Platform APIs Terms Of Use*** ( https://www.microsoft.com/en-us/maps/product ), a Hyperlink to End user Terms of Use is required within the application or Application terms of use.
Currently, we found the link to the Microsoft Bing top page but have not found the link to the end user ToU ( https://www.microsoft.com/en-us/maps/product/enduserterms)
Requested feature
Provide Hyperlink to Bing Maps ToU instead of Bing Maps top page.
Please replace the current link to the Bing Maps page with Bing Maps end user ToU.
Link: https://www.microsoft.com/en-us/maps/product/enduserterms

This Bing maps URL comes from the cesium npm package. Currently it is hard coded to the current URL. Request you to replace the URL to  https://www.microsoft.com/en-us/maps/product/enduserterms
Changes are required only in one file https://github.com/CesiumGS/cesium/blob/main/packages/engine/Source/Scene/BingMapsImageryProvider.js at #L180
Replace http://www.bing.com (https://github.com/CesiumGS/cesium/blob/main/packages/engine/Source/Scene/BingMapsImageryProvider.js#L180) to https://www.microsoft.com/en-us/maps/product/enduserterms

Thanks for the report @Lakshmi0710! We'd be happy to review a PR with this change.


Add a new enum type to jerryx_arg_* routines

Folks,
tl;dr: I need to "un-pop" the argument stack -- go to the last paragraph (starting with "Finally,...") for my suggested addition to the jerryx_arg routines...
I'm working extensively with the jerryx_arg routines/types, and I've hit a snag:
I need to query the argument stack without changing it.  For example, I might be expecting a parameter that is either a number or a string.
Thus, I'd like to do something like (simplified, not accurate :-) :
result = jerryx_arg_number(...)
if (jerry_value_is_error(result))
    result = jerryx_arg_string(...)

I could write my own "jerryx_arg_number_or_string", but the permutations of all the arguments are too numerous, it'd be a copy of a whole lot of code that already exists, and I don't get the continuity of behavior with my own code -- specifically, it's not easy to mimic the behavior of the JERRYX_ARG_COERCE flag, so a simple call to jerryx_arg_number vs my own homegrown version of the above code would likely give different results given certain inputs.
One solution would be to give more power to the JERRYX_ARG_OPTIONAL flag -- if a type check fails, that jerryx_arg_* function would not pop the stack.  I dislike that solution, b/c it would mean overloading the meaning of that flag.
A second solution would be to add a flag to all of the jerryx_arg_* functions to specify whether the stack top should be popped on failure.  We could add a new enum type like jerry_arg_coerce_t, etc., to control this behavior.  I think this solution has the some merit: it keeps the minimalistic interface of the jerryx_arg_* functions and lets us maintain the current behavior as the default.  Its downside is that it adds some logic to the jerryx_arg_* routines...
To implement this solution, I propose adding a new enum type in the extension code, the documentation for which would read as follows:

jerryx_arg_pop_on_failure_t
Enum that indicates whether a failed transformation attempt modifies the stack.

JERRYX_ARG_POP_ON_FAILURE -- calling the transform has the effect of popping the top value off of the argument stack
JERRYX_ARG_DO_NOT_POP_ON_FAILURE -- if the transform returns an error, the stack is left unchanged

Finally, the solution I'd like to propose is to add a new call to the custom-validation support routines that would let us "restore" the value just popped.  This solution would normally not work, but in our case, "pop" just moves a pointer through an array, so like we increment the pointer on a pop, we decrement that pointer on a restore.  I have written this code (and use it now in my work), and it is as follows:
/**
 * Restore the previous JS argument from the iterator.
 * It will change the index and js_arg_p value in the iterator.
 *
 * @return the restored (now current) JS argument.
 */
jerry_value_t
jerryx_arg_js_iterator_restore (jerryx_arg_js_iterator_t *js_arg_iter_p) /**< the JS arg iterator */
{
  if (js_arg_iter_p->js_arg_idx == 0)
    return jerry_create_undefined();
  else
  {
    --js_arg_iter_p->js_arg_idx;
    --js_arg_iter_p->js_arg_p;

    return *js_arg_iter_p->js_arg_p;
  }
} /* jerryx_arg_js_iterator_restore */

Discussion?
Thanks,
Tim

Hi Tim,
first of all sorry for the late responses on your recently opened issues. I would change jerryx_arg_optional_t to jerryx_arg_flags_t. E.g.:
enum {
  JERRYX_ARG_OPTIONAL = (1 << 0),
  JERRYX_ARG_REQUIRED = ~JERRYX_ARG_OPTIONAL,
  JERRYX_ARG_DO_NOT_POP_ON_FAILURE =  (1 << 1),
  JERRYX_ARG_POP_ON_FAILURE = ~JERRYX_ARG_DO_NOT_POP_ON_FAILURE
} jerryx_arg_flags_t;

Lazlo,
Thanks!  And your response is only a day (not even) later; the one
I really(!) needed was how to do the arrays (an earlier post), but
I slogged through to a solution, so all’s good.  (If you have a chance
and want to comment, I’d appreciate any advice on that code, too.)
(I’ve never seen your trick with the enum values before (xor’ing the
false values to double the number of flags created by 1<<x) – thanks;
I like learning new techniques!) (I’m old, and I still learn new stuff...)
The problem I have with the enum solution is that it requires us to go in
and rewrite all of the jerryx_arg_* functions to handle the new enums.
The logic there is complicated enough (and spread across multiple
routines) that it doesn’t seem like the best solution.  Also, mixing flags
with different meanings sounds like a bad design: for example, here,
what if it’s an optional parameter but I don’t want to pop the stack
on failure?  (Since I can only specify one of those two conditions, I
can’t get the behavior I want...)
I know it’s a little weird (read: kludgey :-) to “restore” the stack, but
it fits nicely with the way the stack works (we’re already cheating by
just moving an array pointer! :-).  We could allow the user to “push”
the value back onto the stack – the method would be: grab the
top of the stack with peek, call the jerryx_arg_<> routine, and then
push the grabbed value back onto the stack.  This would look better,
but it wouldn’t really be different than the “restore” option.
Tim
From: László Langó<EMAIL_ADDRESS>Reply-To: jerryscript-project/jerryscript<EMAIL_ADDRESS>Date: Wednesday, October 31, 2018 at 8:37 AM
To: jerryscript-project/jerryscript<EMAIL_ADDRESS>Cc: Timothy Harvey<EMAIL_ADDRESS>Author<EMAIL_ADDRESS>Subject: [EXTERNAL] Re: [jerryscript-project/jerryscript] Add a new enum type to jerryx_arg_* routines (#2581)
Hi Tim,
first of all sorry for the late responses on your recently opened issues. I would change jerryx_arg_optional_t to jerryx_arg_flags_t. E.g.:
enum {
JERRYX_ARG_OPTIONAL = (1 << 0),
JERRYX_ARG_REQUIRED = ~JERRYX_ARG_OPTIONAL,
JERRYX_ARG_DO_NOT_POP_ON_FAILURE =  (1 << 1),
JERRYX_ARG_POP_ON_FAILURE = ~JERRYX_ARG_DO_NOT_POP_ON_FAILURE
} jerryx_arg_flags_t;
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHubhttps://github.com/jerryscript-project/jerryscript/issues/2581#issuecomment-434689550, or mute the threadhttps://github.com/notifications/unsubscribe-auth/AXRGlYaUfL4UVau8hgEjTFYCkZ9zPDYNks5uqad7gaJpZM4YCuJ0.


Electron.IpcMain.Send and Arrays (in Electron.Net Api Demos)

Hello,
i am new to Electron.Net and have a question. I am not very familar with javascript btw.
I used the Electron.Net Api Demos to open a file dialog that allows multiple selection.
I nearly copied everything from DialogsController.
string[] files = await Electron.Dialog.ShowOpenDialogAsync(mainWindow, options);  Electron.IpcMain.Send(mainWindow, "select-directory-reply", files);
files is an array.
I expected to get an array on the javascript side too.
But i only get a string. The related javascript code in the example expect only a single path.
The code in IpcMain goes over the array and creates multiple objects.
I think it was designed to do so. Right?
After i debugged the IpcMain code i decide to use :
'Electron.IpcMain.Send(mainWindow, "select-directory-reply", new object[] { files });'
Is that the simplest solution or do i miss something?
Should the example be edited to make it clearer how parameters should be passed?

Are you able to use the JS inspector/dev tools and provide exactly what your run-time JS object looks like?
I suspect you might want to use JSON.Serialize on your files array in order to send JSON to the front-end, and then use JSON.parse(files) in your JavaScript to get an array instead of a string.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse


v0.3.1: ConfigureJsonSerializerOptions not working properly

Hi!
I'm using the ConfigureJsonSerializerOptions parameter of SurrealDbClient constructor and, while in version v0.2.0 it was working properly, when I upgraded the nuget package to version v0.3.1 it stopped working.
As for example example, I have some configurations done at JsonSerializer and, when I'm calling GetValue from SurrealDbOkResult, the configurations are not working.

It seems that's because of commit cd4ac4d12df3ffcbc5daef46fec54dc0fc7bb000.

Hello Mario,
I added some tests here https://github.com/surrealdb/surrealdb.net/pull/77 to prevent future breaking changes on this.
However, I did not see any breaking change for this. When setting a different JsonNamingPolicy, it works as expected. Are you able to provide more information on your problem or maybe a reproduction repository?

Just reading with a fresh mind this morning. There is indeed an extra #else that skips the custom serializer config. I will fix it.
Sorry for this.

Hello David,
Sorry for my late answer.
After reviewing your PR, probably the problem was that extra #else, nonetheless, I'll check it as soon as possible and I'll confirm you whether the problem was that or not.
Thank you!

Hello Mario,
Should be fixed in v0.4.0.

Thank you!


Cleaned up miscellaneous items

Updated to use getter-only auto property.
Spacing, format, etc.
Added/updated summaries.  Need to complete description of a several method parameters once understood.  Can see where need to update in Error List messages.

@shaggygi thanks for cleaning these, I left a bunch of comments. I didn't review to the end because changes are similar, but I think you have enough info for addressing all feedback.

Yes, thanks for the review/feedback.  I'll continue working on these.

Updated changes based on feedback.  I believe all that is left is the empty summary descriptions.  Reviewing/updating where/when possible.

@shaggygi are you still working on it? There is no pressure, just a ping :smile:

Yes.  I got sidetracked with a new position.  Planned on allocating some time to try and complete this weekend.  I will probably just remove some of the empty parameters and update for now.  Sorry for delay.
-----Original Message-----
From: "Dmitry Turin"<EMAIL_ADDRESS>Sent: 10/21/2015 8:45 AM
To: "NModbus4/NModbus4"<EMAIL_ADDRESS>Cc: "Greg Ingram"<EMAIL_ADDRESS>Subject: Re: [NModbus4] Cleaned up miscellaneous items (#73)
@shaggygi are you still working on it? There is no pressure, just a ping
—
Reply to this email directly or view it on GitHub.

@shaggygi ready for review?

Yes please.  Let me know and I'll update where needed.  Thx

@shaggygi LGTM except comments I left and StyleCop warnings. Thanks for doing this.

Sorry for the delay, was busy at work. I'll merge at this weekends or even earlier.

No worries.  Been really busy, as well.  Thx for update.

Great thanks @shaggygi. Documentation warning suppressed in project settings so we can easily enable it again.

thanks for update!


Refactor and improve code readability

First of all, thanks for the library! I wanted to improve its code quality, so I've decided to open this PR. Here's what I've done:

Made use of Bevy's Rect, Aabb2d and Rust's Range types to make the code more idiomatic;
Extracted some logic into separate functions, which reduced code duplication and also will be helpful in unit-testing later;
Simplified bound handling: it now heavily uses f32::INFINITY and f32::NEG_INFINITY, making calculations seamless and simpler (as opposed to constantly dealing with Options);
Standardized the usage of vec2 over Vec2::new (previously, the code contained both);
Changed single to get_single in camera_zoom (similar to what #58 did for camera_movement);
Reduced if-nesting using if-guards [source];
Formatted comments according to the style guide.

Sorry if this turned out too opinionated. Feel free to discuss any points in the PR :)

Looks great! Thanks!
I have some trouble understanding that one line, but otherwise this should be ready to merge :)


[utils] Don't trust Content-length when Content-encoding is present

IMPORTANT: PRs without the template will be CLOSED
Description of your pull request and other information
Our YoutubeDLHandler is doing auto-decompression, so that we cannot compare Content-length to the size of extracted data. Although HttpFD has specified Youtubedl-no-compression, the web server may still ignore this and return deflated data (as the situation in #3772).
This change attempts to retain the Content-encoding header for later comparison in HttpFD so that we could discard data_len when the web server returns compressed data. I didn't find the reason why this header was previously removed but didn't yet find a counter example either.
Fixes #3772 in my experiments.
Template

Before submitting a pull request make sure you have:

[x] At least skimmed through contributing guidelines including yt-dlp coding conventions
[x] Searched the bugtracker for similar pull requests
[x] Checked the code with flake8 and ran relevant tests

In order to be accepted and merged into yt-dlp each piece of code must be in public domain or released under Unlicense. Check one of the following options:

[x] I am the original author of this code and I am willing to release it under Unlicense
[ ] I am not the original author of this code but it is in public domain or released under Unlicense (provide reliable evidence)

What is the purpose of your pull request?

[ ] Fix or improvement to an extractor (Make sure to add/update tests)
[ ] New extractor (Piracy websites will not be accepted)
[x] Core bug fix/improvement
[ ] New feature (It is strongly recommended to open an issue first)

cc @coletdjnz

note for self: check against urllib3/requests too

... I didn't find the reason why this header was previously removed but didn't yet find a counter example either.

When I worked on this code I inferred that it was trying to handle nested encodings, or perhaps more realistically to avoid decoding an already decoded contents. The old yt-dl code was like this:
if resp.headers.get('Content-encoding', '') == method1:
    #

When I worked on this code I inferred that it was trying to handle nested encodings, or perhaps more realistically to avoid decoding an already decoded contents.

I see. An alternative approach would be moving the info into a custom header like "Youtubedl-decompressed" and check that in HttpFD instead.

urllib3/requests appear to retain the content-encoding header after decompression too, so this should be fine in that regard (needed to check due to #2861 and #3668).

When I worked on this code I inferred that it was trying to handle nested encodings, or perhaps more realistically to avoid decoding an already decoded contents.

Shouldn't be an issue as the data should only be tried to be decoded once (i.e. content-encoding read once for whole decoding process, including multi decoding). I don't see us needing anyway of checking if the content is decoded or not either (and in the case it is in an unsupported encoding, we can catch that elsewhere), so including the header even when decoded should be fine.

assuming you don't use --test (@pukkandan not sure if that is a concern)

Let's not worry about that for now
Make sure to port the change to the networking PR


Items to finish before Jazzy release

This issue puts together the list of items, in rough priority order, that should be completed on rmw_zenoh_cpp before Jazzy.  Not all of these are strictly required, as basic functionality is already there, but having all of these will go a long way towards making rmw_zenoh_cpp something that people can actively try out.

Status
Item
Why?
Related issues/PRs

Complete
Events support
Required for rviz2, ros2 topic, and other tools
https://github.com/ros2/rmw_zenoh/pull/103

Complete
Build rmw_zenoh_cpp on Ubuntu 24.04 with rustc on that OS
Will be necessary to tell users how to use rmw_zenoh
https://github.com/ros2/rmw_zenoh/pull/136

Complete
Implement rmw_take_serialized_message{_with_info}
Required for rosbag2
#113

Complete
Implement rmw_get_gid_for_client
Required to support service introspection
#115

Complete
Implement rmw_get_gid_for_publisher
We are currently lying to the upper levels, so should fix that
#116

Not started
Implement rmw_publisher_wait_for_all_acked
Required to support rclcpp/rclpy wait_for_all_acked, used in tests

Complete
Allow the user to pass a custom config file to init_rmw_zenoh_router
User customization of zenohd will be important
#119

Complete
Fill in the source timestamp and GID for published messages
End-users expect this information to be there
#123

Not started
Restrict Zenoh sessions/router to a specific network interface
Important for certain use cases, like Velodyne sensors which use ethernet

Complete
Run rmw_zenoh_cpp against all tests in the ROS 2 core
This will give us much more confidence in the things we have implemented, and show us weaknesses
https://github.com/ros2/rmw_zenoh/issues/162, https://github.com/ros2/rmw_zenoh/issues/161, https://github.com/ros2/rmw_zenoh/issues/156, https://github.com/ros2/rmw_zenoh/issues/154, https://github.com/ros2/rmw_zenoh/issues/151

Complete
Revisit how and when to start the zenoh router; should we do it all, should we do it automatically, or should we make the user do it?
Starting it automatically makes it more seamless, but gives the user less opportunity to configure.  Need to consider the tradeoffs and what the default should be
https://github.com/ros2/rmw_zenoh/pull/135

This issue has been mentioned on ROS Discourse. There might be relevant details there:
https://discourse.ros.org/t/ros-2-meeting-minutes-2024-02-15/36221/1

Closing this one out, as we are post-Jazzy and working on other parts of rmw_zenoh_cpp now.


Added PragmaControlledCircuit

@mlodi-hqs I've added those two fields in a separate pr that should go up today


[event-hubs] send span peer.address maps to fully qualified namespace

Fixes #7109

/azp run js - eventhubs-client - tests


Suggest a better db setup code

Following the discussions at: https://github.com/paurkedal/caqti-study/pull/1, let's see if I can get rid of connect for a more idiomatic usage of Caqti.

To encourage thinking in terms of connection values which we pass around, I'm thinking of changing the hello-caqti-blocking/bin/main.ml example like such:
(*
  Run with:

    PGHOST=localhost PGDATABASE=caqti_study PGPORT=5433 dune exec ./bin/main.exe
*)

open Printf

let add_with_db conn a b = Result.bind (Repo.Exec.add conn a b) (fun n -> Ok n)

let mul_with_db a b conn =
  let ( let* ) = Result.bind in
  let* n = Repo.Exec.mul conn a b in
  Ok n

let tag_err msg = Result.map_error (fun err -> (msg, err))

let do_work =
  let ( let* ) = Result.bind in
  let* conn = Repo.Init.connect () |> tag_err "could not connect" in
  let* n1 = add_with_db conn 1 2 |> tag_err "could not add" in
  let* n2 = mul_with_db 3 4 conn |> tag_err "could not multiply" in
  printf "1) DB says 1+2 = %d\n" n1;
  printf "2) DB says 3*4 = %d\n" n2;
  Result.ok ()

let () =
  match do_work with
  | Error (msg, caqti_err) ->
      prerr_endline msg;
      prerr_endline (Caqti_error.show caqti_err)
  | Ok () -> print_endline "Finished!"

We get a handle on the connection once, then we pass it around.
Does that sound good to you @paurkedal?
I still keep Repo.Init.connect because we have to put the code somewhere and we can play with in in the REPL that way.
I could put a documentation comment that the function should ideally be called once.

I think it's a decision for the application developer whether to connect where needed or use a single connection, but in a short-lived application like this, using a single connection makes most sense, and I think it's also a common case.  So, yes.
But I'm wondering, why the different position of the conn argument in the two functions?

Oops, I shouldn't have auto-closed this, sorry for the noise.
Ok Petter, I'll use this little improvement then.

But I'm wondering, why the different position of the conn argument in the two functions?

That wasn't intentional, I'll fix this thanks!

Yes, please keep the shared connect; I agree it's better, even if I was a vague about it.

I think we're all good. I think I reopened thinking I had left an inconsistent order of arguments regarding conn.
But I do already pass it as a first parameter everywhere on the main branch.


How to close a specified client connection in Server

Describe your question
I want to close the connection of the specified client in Server, but I can't find any method related.
Any suggestion?
Which project is your question related to?

Server

I also want to know!

This depends on when you want to close the connection. I guess, https://github.com/dotnet/MQTTnet/wiki/Server#validating-mqtt-clients is not what you're searching for?

Is this answered with my message above or not?

There is an API for it. You can make a call like _(await server.GetClientsAsync())[0].DisconnectAsync(); I will also add a new sample for this.


Add SSL_CTX_dup API

Introducing new SSL_CTX_dup API.
This API will allow you to take the settings from an already existing SSL_CTX object and apply a new provider search property and TLS method.

@mattcaswell - does this seem useful?

The commit message needs to be amended.

New pull request created https://github.com/openssl/openssl/pull/23241

New pull request created:
https://github.com/openssl/openssl/pull/23241


Improve blogs page

Issues with current blog page

No proper title or header
The blog card width is not fixed. Initially it has a width and when clicks on it the width increased, which not looks good.
No hover effects.
Expand collapse icons missing.

Please assign this issue to me for the improvement of blog page.
https://github.com/SUGAM-ARORA/UniCollab/assets/139672976/3a06d5b3-b5a2-49da-8287-06768b612461

@DharshiBalasubramaniyam Issue assigned to you


Could not find an option named "no-sound-null-safety".

Steps to reproduce
I'm trying to compile the code and run the app on my smartphone, but I'm having the following problem:
Could not find an option named "no-sound-null-safety".

I started having this problem after I updated flutter.
Expected results
When i was in previous version of flutter everything was working. After I updated to the 3.10.0 version I started having this problem.
flutter --version

Flutter 3.10.0 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 84a1e904f4 (11 days ago) • 2023-05-09 07:41:44 -0700
Engine • revision d44b5a94c9
Tools • Dart 3.0.0 • DevTools 2.23.1

Actual results
When I try to compile the code, I get the error:
Could not find an option named "no-sound-null-safety".

Run 'flutter -h' (or 'flutter <command> -h') for available flutter commands and options.

Flutter Doctor output
Doctor output
flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[√] Flutter (Channel stable, 3.10.0, on Microsoft Windows [versÆo 10.0.22621.1702], locale pt-BR)
[√] Windows Version (Installed version of Windows is version 10 or higher)
[!] Android toolchain - develop for Android devices (Android SDK version 33.0.2)
    ! Some Android licenses not accepted. To resolve this, run: flutter doctor --android-licenses
[X] Chrome - develop for the web (Cannot find Chrome executable at .\Google\Chrome\Application\chrome.exe)
    ! Cannot find Chrome. Try setting CHROME_EXECUTABLE to a Chrome executable.
[!] Visual Studio - develop for Windows (Ferramentas de Build do Visual Studio 2019 16.11.26)
    X The current Visual Studio installation is incomplete. Please reinstall Visual Studio.
[√] Android Studio (version 2022.2)
[√] VS Code (version 1.78.2)
[√] Connected device (3 available)
[√] Network resources

! Doctor found issues in 3 categories.

This is expected behavior; see https://dart.dev/resources/dart-3-migration#100-sound-null-safety


Bump milli to v0.37.4

This PR bumps the milli dependency to v0.37.4 for the next Meilisearch release.

bors merge