Add WebWorker Support

Add ability to load WebWorkers (and SharedWorkers?) via the react-scripts. My use-case is for using latency (and debug) sensitive protocols over WebSocket which may get dumped by the server if no activity occurs.
There has been a lot of discussion regarding this on #1277 but no definitive answer and now closed. Also, I'm a server-side dev so JavaScript PR is not my forte, and neither is ejecting the scripts as that looks scary.

In the past I had to eject and configure "worker-loader". I used it to process some routines on datasets and still allow users to interact with the main UI.

I use Web Workers to implement a solver using genetic algorithms for a SPA. The solver can run for up to a minute or two, so it needs to be in a "background thread" -- i.e. Web Worker -- to not freeze the browser page while it's running.

Is there anything that needs to be done before this pull request can be merged into the next branch (2.0 release)?  I might have missed it, but I could not find Web Workers on the 2.0 Projects roadmap.  I would love to be able to try it out in one of the alpha releases 🙂

I think there's still some debate about using worker-loader vs. workerize-loader. worker-loader is more low-level and powerful but workerize-loader is incredibly easy to use and probably covers the majority of use-cases.

I couldn't get workerize-loader to work with Typescript, but I may have simply failed at the appropriate incantations.

@iansu I'm not sure about workerize-loader covering the majority of use-cases. Unless I'm understanding incorrectly, it doesn't allow sending messages in the middle of a loop (this is extremely important for making realistic progress bars).

I realize there is a desire to make a 'simpler' API for web workers, but honestly, the basic subset is more than sufficient.  I have a data intensive app, and want to use web workers to do the data fetches, parsing, and pass massaged data back to the main thread often.
A 'run once - read once' methodology may work for some applications, but nothing that I am involved with.

Ah, yeah, workerize will not work (heh) for me. I need to keep a web worker running and exchange messages back and forth. Progress bars is one of the uses as @Narvey mentioned.

Granted a distinction between "physical" threads and "software" threads, such that creating many web workers may result in more software threads than available physical threads, a developer may wish to mind the user's hardware utilization and create fewer or no more than the available number of physical threads, e.g., https://github.com/josdejong/workerpool/blob/master/lib/Pool.js.
So, here are two React pooling attempts:

worker-loader: https://github.com/gpolyn/react-and-worker-loader/blob/master/src/workerPool2.js.
workerize-loader: https://github.com/gpolyn/react-and-workerize-loader

Would love to also see some support for newly introduced AudioWorklet, which are basically web worker for audio processing 😃

Another use case:
Desktop Chrome (~75% global market share) throttles setInterval in unfocused tabs. If you want to ensure that something is running the easiest way is to run it in a Worker.

I wrote an app for work that has to be able to do background update, so I poll the backend for changes every so often on an interval timer. Got reports that it was wonky in Chrome (worked fine in FF/Safari) and discovered that (this was before serviceworker). Runs fine in a webworker. Now I'm porting the front end to react and discovered this problem.

I'm wondering if we could write something like workerize, but with the following changes:

exporting a function from a worker module that is not async will cause a build time error (as opposed to workerize "silently" turning it async for you)
Supports async generator functions. That is if a function is an async generator than it can communicate intermediate results or progress to the main thread. The main thread can even pass information in via the next method.

I think these changes would achieve the following goals:

For simple use cases we keep the simplicity and elegance of workerize.
I think this should be nearly as expressive as the low-level api of web workers, but nicer to work with.
The module would work exactly the same if the worker loader would disappear, except it would run on the same thread (but async). This would make it relatively low commitment and also easy to test, since the test framework doesn't need to worry about worker support (which can be slightly tricky in node).

How does that sound?

That does sound useful but it also sounds like it's outside the scope of Create React App. Have you considered proposing these changes to Workerize?

I was more thinking of building this as a separate library. But I'm quite interested if that proposed design would fit the needs that people have for webworkers and if something like that would fit into cra?

All I really want is just for the existing WebWorker APIs to work and to be able to load a js/ts file as a web worker. Anything beyond that lies outside the scope of CRA as far as I’m concerned. That forms the basis on which everything else can be built.

I know most of the conversation is around implementing support for Web Workers, but Web Worker usage is the gateway to then needing to use SharedWorkers, so it would be really amazing if there was a way to handle the ad-hoc solutions needed today if you want to utilize Web Workers, SharedWorkers, or AudioWorklets - or in my case, the combination of all three. Conventions for special treatment such as *.worker.js, *.sharedworker.js, *.worklet.js (or *.awn.js?) would work wonders for those of us using CRA for more advanced cases.

https://github.com/GoogleChromeLabs/worker-plugin

Yeah I think we should probably add it

Sounds good. I’ll update this PR.

Does that plugin not break referential transparency in a rather bad way?

@gampleman

Does that plugin not break referential transparency in a rather bad way?

Could you give an example that demonstrates this?

Kind of ironic, but it's written by the same author who created workerize and workerize-loader, which presented itself when referencing self in the worker I tested it out with:
Warning (workerize-loader): output.globalObject is set to "window". It should be set to "self" or "this" to support HMR in Workers.

I ran into difficulty yesterday adding it and testing it out in our company's ejected CRA project. We originally tried to go the route of workerize but ran into an issue getting it to work at all in standard Chrome, and it was a bit concerning for us that the author showed there - and on several other GitHub issues I've observed for his tools - he may never respond at all to a question. In our case we demonstrated errors using workerize identically to his example, but the only response we ever got was it only works in Chrome Canary (docs never updated though).
But for this plugin (worker-plugin) I'm currently not able to complete a build with a worker instantiated as {type: 'module'}, identical to his example.
It throws this error about Dedicated Worker not being supported yet and kicks it over the wall to a Chromium bug thread that doesn't look like it's going anywhere for awhile
Uncaught TypeError: Failed to construct 'Worker': Module scripts are not supported on DedicatedWorker yet. You can try the feature with '--enable-experimental-web-platform-features' flag (see https://crbug.com/680046)

I mean that
const worker = new Worker('./foo.js', { type: 'module' });

will work, but
const workerPath = './foo.js';
const worker = new Worker( workerPath, { type: 'module' });

will not. Neither will
const options =  { type: 'module' };
const worker = new Worker('./foo.js', options);

Any update on that?
I saw that the related PRs have been closed without comments, so I'm wondering if I should move away from create-react-app if I want to use web workers or if there is still a plan to support it!
Thanks

I agree that worker-loader is probably the best solution right now. I've created an updated version of my previous PR that adds worker-loader: https://github.com/facebook/create-react-app/pull/5886

OK, thanks!
The sad part is that it all requires create-react-app to be ejected which voids the warranty :)
Thanks anyway!!

Yes exactly, using your PR we do not need to eject.
Hopefully, that will be integrated at some points since those are now an important part of the web ecosystem!

@NicolasRannou Until a solution is created, have you tried using react-app-rewired to allow you to add in worker-loader? I had luck with that tool when I wanted to use workbox earlier this year (before CRA switched over to use it). I'm sure it'll still void your warranty, but it won't be as messy to drop it as it would to un-eject later.

Hey guys! I see all 3 solutions you've mentioned handle only WebWorker, but not SharedWorker, that's not so sweet. One of greatest usecases of SharedWorker is sharing websocket connection between multiple tabs, that reduces network traffic dramatically https://github.com/pusher-community/pusher-with-shared-workers. Now it's the only one reason we're still ejected. @viankakrisna @gaearon @iansu can I help you guys to implement and release it?

Hey all, I'd be excited to see this land in create-react-app.
One potential problem I encountered was that when running npm run build, the build output is empty if and only if I am importing a worker in my project code. More specifically, when the build script completes, my build/ folder will only contain the contents copied from public/ and nothing else.
This happens both when I use react-app-rewire AND when I clone iansu:worker-loader and link react-scripts locally.
Has anyone else encountered this?

same here. Build passes without errors, but only public files are copied. Removing the import sorts the build out. Any way to get some verbose build logs to find the culprit here?

Is there any working solution (whether or not a workaround) on this issue?
I tried scenarios that I foıund online but none worked properly. (I don't want to eject CRA.)
So any suggestion or guidence are appreciated...

For my project I'm using solution with blob. Here is example:
https://github.com/petersobolev/cra-worker

Are webworkers supported in the latest v3?

Any update on this?

For anyone using the react-app-rewired, just paste this into config-overrides.js (mostly stolen from @iansu)
const fs = require('fs');
const path = require('path');
const appDirectory = fs.realpathSync(process.cwd());
const resolveApp = relativePath => path.resolve(appDirectory, relativePath);
const getCacheIdentifier = require('react-dev-utils/getCacheIdentifier');

const isEnvProduction = true // TODO: insert your implementation
const isEnvDevelopment = false // TODO: insertyour implementation

module.exports = function override(config, env) {
  config.module.rules[2].oneOf.splice(1, 0, {
      test: /\.worker\.js$/,
      include: resolveApp('src'),
      use: [{ loader: require.resolve('worker-loader'), options: {
        inline: false
      } },
        {
          loader: require.resolve('babel-loader'),
          options: {
            customize: (
              require.resolve('babel-preset-react-app/webpack-overrides')
            ),
            babelrc: false,
            configFile: false,
            presets: [require.resolve('babel-preset-react-app')],
            // Make sure we have a unique cache identifier, erring on the
            // side of caution.
            // We remove this when the user ejects because the default
            // is sane and uses Babel options. Instead of options, we use
            // the react-scripts and babel-preset-react-app versions.
            cacheIdentifier: getCacheIdentifier(
              isEnvProduction
                ? 'production'
                : isEnvDevelopment && 'development',
              [
                'babel-plugin-named-asset-import',
                'babel-preset-react-app',
                'react-dev-utils',
                'react-scripts',
              ]
            ),
            plugins: [
              [
                require.resolve('babel-plugin-named-asset-import'),
                {
                  loaderMap: {
                    svg: {
                      ReactComponent:
                        '@svgr/webpack?-prettier,-svgo![path]',
                    },
                  },
                },
              ],
            ],
            // This is a feature of `babel-loader` for webpack (not Babel itself).
            // It enables caching results in ./node_modules/.cache/babel-loader/
            // directory for faster rebuilds.
            cacheDirectory: true,
            cacheCompression: isEnvProduction,
            compact: false
          },
        }
      ]
    })
  config.output['globalObject'] = 'self';

  return config;
}

Update?

Any good resolutions?

If anyone felt blocked to use a Web Worker with CRA right now, you could already do that with placing the worker file in the public folder and referencing it on the Worker constructor as described here https://github.com/facebook/create-react-app/issues/1277#issuecomment-267322485
ie:
// public/counterWorker.js
var i = 0;

function timedCount() {
  i = i + 1;
  postMessage(i);
  setTimeout("timedCount()",500);
}

timedCount();

// src/index.js
const counterWorker = new Worker("/counterWorker.js");
counterWorker.onmessage = (event) => {
   console.log(event.data)
}

The worker file won't be transpiled and minified when deploying, you'll need to handle that yourselves.

small clarification
// public/worker.js

// some worker

// src/index.js
const getPathFromPublic = path => `${process.env.PUBLIC_URL}/${path}`;

const workerPath = getPathFromPublic('worker.js');
const worker = new Worker(workerPath);

FYI, I use 'worker-loader' + 'comlink' to manage my web-workers and it seems to work fine.
The trick is to use the inline syntax to use the 'worker-loader' so we do not have to edit the webpack configuration.
main.ts file

/* eslint-disable import/no-webpack-loader-syntax */
import Worker from 'worker-loader!../util/worker/Welcome';
import * as Comlink from 'comlink';
import { WorkerType } from '../util/worker/Welcome';

...

      async function startDummyWorker() {
        const workesr = new Worker();
        const obj = Comlink.wrap<WorkerType>(workesr);
        const finished = await obj.busy(10000000000000000000);
        window.console.log(finished);
      }
      startDummyWorker();
...

Worker.ts
export interface WorkerType {
busy(value: number): number;
}
const obj: WorkerType = {
busy(value: number) {
let j = 0;
const start = Date.now();
for (let i = 0; i < value; i++) {
  //
  j++;
  const end = Date.now();
  // if it has been busy for more than 10s return
  if (end - start > 10000) {
    return 42;
  }
}
return j;

},
};
Comlink.expose(obj);

For anyone using react-app-rewired who wants to React Refresh and Web Workers:
$ yarn add --dev customize-cra @pmmmwh/react-refresh-webpack-plugin react-refresh

// config-overrides.js

const {
	override,
	addBabelPlugin, getBabelLoader,
	addWebpackPlugin, addWebpackModuleRule,
} = require('customize-cra')
const ReactRefreshPlugin = require('@pmmmwh/react-refresh-webpack-plugin')

module.exports = (config, env) => {
	const prod = config.mode === 'production'
	const babelLoader = getBabelLoader(config)

	return override(
		// You can choose to just use worker-loader! instead if you want
		addWebpackModuleRule({
			test: /\.worker\.[jt]sx?$/,
			use: [
				{ loader: 'worker-loader' },
				{ loader: babelLoader.loader, options: babelLoader.options },
			],
		}),

		!prod && addBabelPlugin('react-refresh/babel'),
		!prod && addWebpackPlugin(new ReactRefreshPlugin()),
	)(config, env)
}

This works fine!

small clarification
// public/worker.js

// some worker

// src/index.js
const getPathFromPublic = path => `${process.env.PUBLIC_URL}/${path}`;

const workerPath = getPathFromPublic('worker.js');
const worker = new Worker(workerPath);

However, can you put the worker.js file in /src and prevent its minification/transpilation by another way?

If anyone is looking for a solution with Typescript, you could try with react-app-rewired.  Here you are the code working:
https://github.com/educartoons/creact-react-app-typescript-web-workers
It generates the build folder properly.
🍎

@NicolasRannou thanks for sharing your experience!
works fine for me as well and I am super happy that don't need to eject or use react-app-rewired hacks.

up!

+1 for Audio worklets, createScriptProcessor is deprecated so at some point we'll be unable to record audio without support for them.

Thanks for the tip @NicolasRannou! (https://github.com/facebook/create-react-app/issues/3660#issuecomment-603922095)
In case it helps anyone, I've used this tip to set up a create-react-app typescript demonstration application with the minimum configuration necessary to consume Web Workers using Comlink: https://github.com/FLGMwt/comlink-web-worker-in-create-react-app. I couldn't get it to work importing the project through CodeSandbox, but you can try it out here: https://comlink-web-worker-in-create-react-app.netlify.app/

Version 5 of create-react-app added support for webpack 5. webpack 5 added support for webworkers. This works for my use case and hopefully for the others! Now to figure out how to mock/inject into jest tests...

ref to APP PixelShapeRN commit react -> react-native: let Web Worker with Support for CRA v5 (and Webpack 5) and doc Upgrade to react-scripts@5 and Add Web Workers support


Incompatible checkpoint being restored on estimator with keras model

System information

Have I written custom code: yes
OS Platform and Distribution: Archlinux
TensorFlow installed from (source or binary): binary
TensorFlow version (use command below): 1.12.0
Python version: 3.7.1
CUDA/cuDNN version: 10.0.130-2/<IP_ADDRESS>-2
GPU model and memory: 11GB GTX 1080 Ti

Describe the current behavior
I am running a Keras Model within a custom estimator and giving the size of a hidden layer as a parameter.
After each run with the estimator, a checkpoint is stored, saving the weights of that run.
However, if the architecture of the model is changed between runs, instead of receiving an error due to incompatible checkpoints, tensorflow is loading the old checkpoint into the new model even though new dimension is being considered.
Describe the expected behavior
According to the guide, "restoring a model's state from a checkpoint only works if the model and checkpoint are compatible" and it is given an example of how the described situation (changes in the model architecture) should generate an InvalidArgumentError.
However no error is raised, being unclear the behaviour - are the new weights (in case of increased size) initialised and trained? Are they simply ignored?
Code to reproduce the issue
Below is a minimum working example to reproduce the problem:
import tensorflow as tf
import numpy as np
from tensorflow.keras import layers

def main(argv):
    steps = 1000
    # Generate random data
    train_x = np.random.randn(100, 4).astype('float32')
    train_y = np.random.randint(0, 3, 100).astype('int32')

    # First estimator, with *10* hidden units
    classifier = tf.estimator.Estimator(
        model_fn=model_fn,
        model_dir="tmp",
        params={'hidden': 10}
    )

    # train first model and store checkpoints on "tmp"
    classifier.train(
        input_fn=lambda: tf.data.Dataset.from_tensors((train_x, train_y)),
        steps=steps)

    # second estimator, with *20* hidden units and same model_dir output
    # BUG: should break as model_dir is the same as previous estimator!!!
    classifier = tf.estimator.Estimator(
        model_fn=model_fn,
        model_dir="tmp",
        params={'hidden': 20}
    )

    classifier.train(
        input_fn=lambda: tf.data.Dataset.from_tensors((train_x, train_y)),
        steps=steps)

def model_fn(features, labels, mode, params):

    # create model with params[hidden] units on hidden layer
    model = tf.keras.Sequential([layers.Dense(params["hidden"], activation='relu'),
                                 layers.Dense(3)])
    logits = model(features)
    loss = tf.losses.sparse_softmax_cross_entropy(labels=labels, logits=logits)
    optimizer = tf.train.AdagradOptimizer(learning_rate=0.1)
    train_op = optimizer.minimize(loss, global_step=tf.train.get_global_step())

    return tf.estimator.EstimatorSpec(mode, loss=loss, train_op=train_op)

if __name__ == '__main__':
    tf.logging.set_verbosity(tf.logging.INFO)
    tf.app.run(main)

Other info / logs
Log output (abbreviated)
# RUN 1
...
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Create CheckpointSaverHook.
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Saving checkpoints for 0 into tmp/model.ckpt.
INFO:tensorflow:loss = 1.1404053, step = 0
INFO:tensorflow:Saving checkpoints for 1 into tmp/model.ckpt.
INFO:tensorflow:Loss for final step: 1.1404053.
...
# RUN 2
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Create CheckpointSaverHook.
INFO:tensorflow:Graph was finalized.

INFO:tensorflow:Restoring parameters from tmp/model.ckpt-1
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Saving checkpoints for 1 into tmp/model.ckpt.
INFO:tensorflow:loss = 1.112431, step = 1
INFO:tensorflow:Saving checkpoints for 2 into tmp/model.ckpt.
INFO:tensorflow:Loss for final step: 1.112431.

Removing comp:gpu since this does not look like a GPU specific issue.  Please add it back if you disagree.

Just an educated guess, but Keras Layers are numbered globally within the Python process. So if you re-create the Model you'll get totally new variable names each time. Then there's no conflict: it just looks like there are a bunch of new variables and the old ones don't match. Sad but a known incompatibility between Keras and name-based variable matching.
I'm somewhat more confused as to why Estimator isn't complaining or at least warning about variables that aren't in the checkpoint (given that it is restoring a checkpoint). Is that expected behavior? @k-w-w @karmel

All the checkpoint values are being loaded, but as a result the variable shapes are changed.
It appears to be an unintentional bug from tf.train.Saver, not just a quirk of Estimator or Keras. The restore op doesn't do any shape checking. We should add a warning to saver.restore if any of the variables are reshaped.

Assignment ops definitely do shape checking, though. Restores into variables with different shapes do fail.

tf.train.Saver uses RestoreV2/RestoreTensorsV2 instead of assign ops. Is this a bug with the restore ops?

RestoreV2 just returns a Tensor with the value of the variable. Then that feeds into an assignment here: https://github.com/tensorflow/tensorflow/blob/55e68264ba670301fb861aa4d28f9642b251c6fc/tensorflow/python/training/saving/saveable_object_util.py#L113
There is a reshape, but in this case there'd be a different number of elements, so even if restored_shapes wasn't None (I think it is) that'd be an error.

I ran this and you're right, the restored_shapes is None.
Looks like it is being set to None here: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/training/saver.py#L336
So fixing this would just require creating savers with reshape=True.

I don't think we want to reshape. shape_safe_assign_variable_handle does a shape check, so if we passed a restored_shapes argument we'd be doing less checking than we are now (exact shape match vs. only checking the number of elements). I've seen that error come up a bunch when refactoring models...

Ah, I see. The shapes that come from RestoreV2 are completely undefined (None) so they're compatible with the variable's shape when in a tf.Graph().
Given that we always run RestoreV2 eagerly in 2.x except for Estimator, we should probably just make whichever tweak fixes this for Estimator. Maybe you're right that reshape=True is an easy workaround.

@allenlavoie Do any of the TF releases include a fix for this issue?

No, and AFAIK nobody is working on it. Since it only affects Estimator (in 2.x), maybe @karmel has someone who could take a look. I have a queue of other things that look like higher priorities at the moment.
Most of the work is going to be working to migrate existing code which breaks with new shape checking (or maybe we get lucky and it's fine). As @k-w-w mentioned, the Saver flag change itself is a pretty simple fix to try.

@allenlavoie Thanks

@kurka,
Documentation of Estimators state:

There is limited support for training with Estimator using all strategies except TPUStrategy. Basic training and evaluation should work, but a number of advanced features such as v1.train.Scaffold do not. There may also be a number of bugs in this integration and there are no plans to actively improve this support (the focus is on Keras and custom training loop support).

Can you please confirm if this issue is still relevant, as Estimators are not actively supported in Tensorflow 2.x? Thanks!


Empty HTML Emails In German

1- HTML is on
2- German Language is selected
3- Template "Forgot Password" and "Closed Ticket" are not displaying anything when these are sent
4- The emails will come in but will only have a subject but no content at all
5- In German it will work if "HTML" is off (plain text)
6- Three Ticket Systems show this behavior

It appears that the HTML-formatted version is lost when trying to automatically add link tags to links in the template.  The link generated when set to German has random whitespace (http :// localhost/admin/password.php h=...), instead of being altogether, which may be the issue. I'll need to look into why the whitespace is appearing, since it makes no sense to me without digging deeper.
If you try another language (such as Dutch), does this issue occur?

Not in Dutch and not in English this problem occurs. Only in German

Ok, thanks. I'll investigate further in a little bit. I've been quite busy lately :laughing:

Ok I figured it out. The templates are saved in ANSI format, instead of UTF-8 without BOM (byte order mark).  I'm working on converting them now, and will be re-uploaded to the Mods for HESK website in a little bit.

Ok the fixed de-DE translation is up on the website. If you can download and test it, that would be great.


Notification blinks when changing song (in Spotify), Polish translation has issues

When I change songs in Spotify, the notification from SLS blinks usually twice and then disappears. All notifications are disabled in settings.
Also, Polish translation has issues. Many sentences are badly translated (like from translator). I can help you with translation if you want.

#288
#292
Use the following file to translate.
https://github.com/tgwizard/sls/blob/master/app/src/main/res/values-pl/strings.xml
Get the translations to me in any form and I will update them.

https://play.google.com/apps/testing/com.adam.aslfms


rttr and dlls.

I have a question. If i have some classes with reflection in my app. Then load a .dll with other classes with reflection. Will the ones loaded from a dll be available for me? Or can i somehow introduce their reflection data to my app?

When your app and the loaded DLL linked against the same version of RTTR you will have to reflection information available. No matter whether it is loaded explicitly or implicit.

ok then when my app doesnt link against the rttr, but the dll does, then can i still use the reflection data from the dll?

Of course not, that's not possible in C++ at all. Think about RTTR as wrapper around your library, you have to have access to the wrapper otherwise it won't work.
However, when you would make a C wrapper around my library, I think you would be able to explicitly load RTTR and can then load also you library explicitly too.

Thanks.


drivers/stm32f0x_ll_clock: Enable SYSCFG in clock_control

Enable System Configuration Controller clock in clock_control
instead of gpio controller when we set a gpio as interrupt.
We use System Configuration Controller to manage external
interrupts and enable PIN pair PA11/12, used in USB device,
mapped instead of PA9/10.
Also, add a check to raise an error if SYSCFG is disabled,
before doing the pin remaping for F0 SoCs on QFN28
and TSSOP20 packages in USB device driver.
Marked as DNM because it is not tested on HW.

@zhaozhongchen Could you please check it on your board?

Codecov Report

Merging #7501 into master will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##           master    #7501   +/-   ##
=======================================
  Coverage   55.25%   55.25%
=======================================
  Files         467      467
  Lines       51659    51659
  Branches     9889     9889
=======================================
  Hits        28543    28543
  Misses      19206    19206
  Partials     3910     3910

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 329c00d...2b1d380. Read the comment docs.

@ydamigos I has STM32F070RB NUCLEO board, but it doesn't QFN28 or TSOP20, I can't test because it doesn't need remap pin pairs.

@zhaozhongchen Could you test that this PR still works on nucleo_f070rb?


Adds PolicyProgrammingTimeoutSeconds option to CalicoNetwork

Sibling PR to be merged first
Description

Adds option to CalicoNetwork to enable a policy-delay timeout in the CNI/Felix.
Felix's new option EndpointStatusPathPrefix should be set to it's /var/run/calico dir to enable the feature, where-in it will create a directory "status".
CNI should have its timeout configured according to the CalicoNetwork field, and it's EndpointStatusDir should be set to Felix's /var/run/calico dir plus "/status".
For PR author

[ ] Tests for change.
[ ] If changing pkg/apis/, run make gen-files
[ ] If changing versions, run make gen-versions

For PR reviewers
A note for code reviewers - all pull requests must have the following:

[ ] Milestone set according to targeted release.
[ ] Appropriate labels:

kind/bug if this is a bugfix.
kind/enhancement if this is a a new feature.
enterprise if this PR applies to Calico Enterprise only.

Going to mark this PR as Ready for Review, although there are still two merge tests that are failing, that I'm a little confused about.

Removing "merge-when-ready" label due to new commits


Able to change the highlighted areas

Hey! Very good job with your implementiation. It seems really solid. But still I found a way to change the highlighted sections:
https://www.youtube.com/watch?v=MhQWv1Gmnr4
To reproduce: Click into an editable area. Press Cmd+A, then press backspace.
Environment: Mac OS Big Sur + Chrome latest

@johannesfritsch Thanks for reporting the issue.
Highlight is given for developers to make sure that their range configuration is properly working, and here I think the range restrictions are working fine and only the highlighted lines are having mismatch.
I will fix this soon


UI polish: Spacing around main "Web API Confluence" heading

Fixed in https://github.com/GoogleChrome/confluence/commit/f89746711ded58fb4de6a64c2a435d5598a9e601


Support DevStorage with TypeScript files

Describe the feature
DevStorage runs at runtime and thous needs to be plain js.
It would be nice to support .ts files as well.
This issue references: https://github.com/nuxt/nuxt/issues/22990
You'll find more information over there.
Additional information

[ ] Would you be willing to help implement this feature?

### Tasks

is there any news about that? since many people are already running their projects in typescript, but this might block people from having the same functionality in development as well as in production, thanks to have any news about this and thanks for the great effort you put into nitro and of course the whole unjs environment :)


Add 1.2.0 Compiler features

Purpose

Describe the problems, issues, or needs driving this feature/fix and include links to related issues.

Fixes #
Approach

Describe how you are implementing the solutions along with the design details.

Samples

Provide high-level details about the samples related to this feature.

Remarks

List any other known issues, related PRs, TODO items, or any other notes related to the PR.

Check List

[ ] Read the Contributing Guide
[ ] Updated Change Log
[ ] Checked Tooling Support (#)
[ ] Added necessary tests

[ ] Unit Tests
[ ] Spec Conformance Tests
[ ] Integration Tests
[ ] Ballerina By Example Tests

[ ] Increased Test Coverage
[ ] Added necessary documentation

[ ] API documentation
[ ] Module documentation in Module.md files
[ ] Ballerina By Examples

Codecov Report

Merging #21659 into master will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##           master   #21659   +/-   ##
=======================================
  Coverage   14.72%   14.72%
=======================================
  Files          51       51
  Lines        1399     1399
  Branches      214      214
=======================================
  Hits          206      206
  Misses       1177     1177
  Partials       16       16

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 860fe93...3901439. Read the comment docs.

Fixed #20704 #20703 #21238 #21257 #20198


No direct method error, any idea?

hello,
when trying to implement the konfetti to my app(kotlin) i'm encountered error:
java.lang.NoSuchMethodError: No direct method (ILjava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V in class Lkotlin/jvm/internal/FunctionReferenceImpl; or its super classes (declaration of 'kotlin.jvm.internal.FunctionReferenceImpl' appears in /data/app/com.keisardevs.myapplication-jop33ftEpDAYvlt_i4oD6w==/base.apk!classes3.dex)
maybe got any idea what make this to happen?

Hey @keisa97, this is a possible duplicate of this issue. Please check: https://github.com/DanielMartinus/Konfetti/issues/193#issuecomment-691765015
Let me know if it helped

@DanielMartinus  thanks that great!
changing Kotlin to 1.4.10 solved the problem!


variableWidth:true + centerMode: false need more cloned slides to fill white space

Example 1: (bug) http://jsfiddle.net/avumhxg4/1/
Example 2: (working) http://jsfiddle.net/avumhxg4/2/
Hey there, i just found a bug, when I use:
{ centerMode: false, variableWidth: true }
the slider show a white space after the last slide. But if I use centerMode: true the number of cloned slides increase and the problem don't happen anymore.
Is possible create a param to control how many cloned slides we need to fill all white space?

Hey @gtso86 check out the discussion in #1207 that's the active issue for this particular bug. I'm going to close this to avoid duplication, but thanks for the bug report!


PowerToys can't be run at startup when the "Task Scheduler" service is disabled.

Description of the new feature/enhancement
Hi, I disabled the "Task Scheduler" service because my laptop is weak and I don't want apps to update in the background.

Now PowerToys can't be run at startup.
To run the PowerToys at startup, do it through "Registry Editor" not "Task Scheduler" (like other apps)

Scenario when would this be used?
When the "Task Scheduler" service is disabled.
Supporting information
No response

@xmha97
This is how it works. We are creating a task to do the autostart thing for us. So if you disable the task scheduler it won't work.

We run via task scheduler to do the run as admin route which a lot of people do.
I do not believe we will change this behavior as this is an expected service to be running.


Switching IdP from Keycloak to Zitadel, errors

I have a fully working self hosted Netbird setup behind Traefik, with Keycloak as the identity provider. I want to switch that to Zitadel, so I ran the configuration script for new values in my compose and management files. I did a docker compose down and up command, but it seems Netbird is still expecting Keycloak as the IdP, because there are many errors in the management log like this:
Error: failed retrieving a new idp manager with err: keycloak IdP configuration is incomplete, AdminEndpoint is missing
I can put that AdminEndpoint back in to management.json with the original Keycloak value, but then there is still Keycloak related errors even though there is no more Keycloak configuration present in both my compose file and management.json.
My Zitadel service is running on another subdomain from Keycloak, and the management log does show that it is actually loading the correct endpoints, like this:
2024-08-10T11:05:00Z INFO [context: SYSTEM] management/cmd/management.go:500: loaded OIDC configuration from the provided IDP configuration endpoint: https://zd.my-domain/.well-known/openid-configuration
Is there perhaps a configuration setting that I can use to force Netbird to switch over to the new IdP?

My bad, I overlooked the ManagerType key in management.json, its value was still set to "keycloak".


Use gettext_lazy in modeladmin views where required

Class-level strings were using gettext, which meant that they were not respecting user language settings.

@gasman  looks great, I tested the behaviour before and after and this change works well.
Thanks heaps, I have pushed release notes to your branch and will rebase/merge


Cach all exceptions in advices

closes elastic/apm-agent-java#351

Codecov Report

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

@@             Coverage Diff              @@
##             master     #380      +/-   ##
============================================
- Coverage     72.44%   72.19%   -0.25%
+ Complexity     1196     1191       -5
============================================
  Files           131      131
  Lines          4485     4485
  Branches        459      459
============================================
- Hits           3249     3238      -11
- Misses         1027     1036       +9
- Partials        209      211       +2

Impacted Files
Coverage Δ
Complexity Δ

...m/agent/plugin/api/TransactionInstrumentation.java
52.38% <ø> (ø)
3 <0> (ø)
:arrow_down:

...astic/apm/agent/jdbc/StatementInstrumentation.java
55.55% <ø> (ø)
6 <0> (ø)
:arrow_down:

...esttemplate/SpringRestTemplateInstrumentation.java
40.9% <ø> (ø)
4 <0> (ø)
:arrow_down:

...agent/plugin/api/ElasticApmApiInstrumentation.java
52% <ø> (ø)
3 <0> (ø)
:arrow_down:

...lastic/apm/agent/servlet/AsyncInstrumentation.java
65.21% <ø> (ø)
7 <0> (ø)
:arrow_down:

...stic/apm/agent/jdbc/ConnectionInstrumentation.java
84.61% <ø> (ø)
7 <0> (ø)
:arrow_down:

...g/webmvc/SpringTransactionNameInstrumentation.java
53.33% <ø> (ø)
5 <0> (ø)
:arrow_down:

...m/agent/jdbc/PreparedStatementInstrumentation.java
52.63% <ø> (ø)
6 <0> (ø)
:arrow_down:

...ent/jaxrs/JaxRsTransactionNameInstrumentation.java
79.16% <ø> (ø)
7 <0> (ø)
:arrow_down:

.../plugin/api/CaptureTransactionInstrumentation.java
39.13% <ø> (ø)
7 <0> (ø)
:arrow_down:

... and 9 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 47f0b68...75564c5. Read the comment docs.


Static engine support

Codecov Report

Merging #2 into master will increase coverage by 0.68%.
The diff coverage is 0%.

@@            Coverage Diff             @@
##           master       #2      +/-   ##
==========================================
+ Coverage   66.31%   66.99%   +0.68%
==========================================
  Files           9        9
  Lines        1134     1221      +87
==========================================
+ Hits          752      818      +66
- Misses        382      403      +21

Impacted Files
Coverage Δ

src/tpm2tss-genkey.c
57.79% <ø> (ø)
:arrow_up:

src/tpm2-tss-engine.c
56.25% <0%> (-1.22%)
:arrow_down:

src/tpm2-tss-engine-rsa.c
69.73% <0%> (-0.72%)
:arrow_down:

src/tpm2-tss-engine-common.c
78.82% <0%> (+0.08%)
:arrow_up:

src/tpm2-tss-engine-ecc.c
62.55% <0%> (+0.36%)
:arrow_up:

src/tpm2-tss-engine-tcti.c
56.19% <0%> (+3.3%)
:arrow_up:

src/tpm2-tss-engine-err.c
72% <0%> (+24%)
:arrow_up:

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 568d700...2f48db7. Read the comment docs.


Typescript 4.0.2 No problems detected

VSCode Version: 1.48.2
OS Version: Debian 10

Steps to Reproduce:

Install globally typescript using npm install -g typescript.
Set typescript version:

{
  "typescript.tsdk": "/usr/local/lib/node_modules/typescript/lib"
}

No errors are shown or marked on screen

Try to create a file tsconfig.json in the project's root path and the behavior is the same:

{
  "compilerOptions": {
    "module": "commonjs",
    "target": "es2016",
    "jsx": "preserve",
    "checkJs": true,
    "allowJs": true,
    "sourceMap": true
  },
  "exclude": ["node_modules", "**/node_modules/*"]
}

Does this issue occur when all extensions are disabled?: Yes

Does this reproduce in the latest VS Code insiders build?

Hi,
It looks like it is working using that version, just uninstall previous version install new version using .deb package.
Regards.

Closing since 1.49 is the first build we officially support TS 4.0. Older builds usually work with newer TS version but this may not always be the case


update subdomain tests

Problem: there are duplicated attributes for subdomain/networksubdomain, and setting the subdomain on the result should be done by the JobSet.
Solution: remove the duplicate (subdomain) and manual setting.
This should hopefully help with https://github.com/kubernetes-sigs/jobset/pull/181 if the issue is related!

Looks like the gcr registry might be having a moment!

I suspect it's crying because of the impending loss of it's colleagues, Google Domains and Google Album Archive! :sob: A moment of silence for our friends.

/retest-required

/test pull-jobset-test-e2e-main-1-24

That's weird it is based on the container build (and finding packages).

/retest
Yeah I'm hoping #191 will help resolve the unit test flakiness (for some reason apt update fails to update all package repositories somewhat frequently).

I don't know the details of the differences, but fwiw I usually do apt-get update always first, and I don't mix apt and apt-get. They are supposed to be mostly the same (and apt alone has extra UI niceties) but I seem to remember command line warnings sometimes that there may be issues in a headless environment. So my goto is always:
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y <package>

Or I may just be an old crusty linux person, that is very likely too! :laughing:

/retest

/retest all

/test all

I think we should typically use apt-get in Dockerfile and scripts, e.g.,:

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

That's the warning I was mentioning earlier. I'm going to try running this manually to see if I can reproduce.

okay looks like you already did that! https://github.com/kubernetes-sigs/jobset/pull/192/files

What is / where is the base image that this testing setup called prow is using?

What is / where is the base image that this testing setup called prow is using?

here: https://github.com/kubernetes/test-infra/blob/master/config/jobs/kubernetes-sigs/jobset/jobset-presubmit.yaml

here: https://github.com/kubernetes/test-infra/blob/master/config/jobs/kubernetes-sigs/jobset/jobset-presubmit.yaml

Thank you - perfect! And I actually I saw (I think?) the same populated one here: https://prow.k8s.io/prowjob?prowjob=9c8ca3c0-37c3-4ba5-b35e-76b15bf25415 (albeit it's not as nice to look  at!). Okay so if we are using the golang 1.20 base, I can reproduce:
root@0f2340563f52:/go# apt-get update && apt-get install -y openjdk-11-jdk
Get:1 http://deb.debian.org/debian bookworm InRelease [147 kB]
Get:2 http://deb.debian.org/debian bookworm-updates InRelease [52.1 kB]
Get:3 http://deb.debian.org/debian-security bookworm-security InRelease [48.0 kB]
Get:4 http://deb.debian.org/debian bookworm/main amd64 Packages [8904 kB]
Get:5 http://deb.debian.org/debian-security bookworm-security/main amd64 Packages [28.3 kB]
Fetched 9180 kB in 3s (3169 kB/s)
Reading package lists... Done
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
E: Unable to locate package openjdk-11-jdk

I tried explicitly adding the repository - it didn't seem to work (but here are the steps if anyone is interested)
apt-get update && apt-get install -y software-properties-common python3-launchpadlib

To add the repository:
add-apt-repository ppa:openjdk-r/ppa

(DEBIAN_FRONTEND=nonteractive I think would be important for that because it usually asks you to press ENTER)
But it's still not found. So I stepped back and checked this page:
And it seems opendjk-11-jdk is going EOL this year - it's a long term support version but seems to end in 3 months:
https://endoflife.date/java.
Perhaps we can use openjdk-17-jdk instead? That works for me in a fresh image:
apt-get install -y openjdk-17-jdk

I'm going to poke around and see if there are any notices for why the package isn't found. But I think we might do well to update to a version that isn't going EOL soon anyway.

okay more debugging - this shows a lot of results (for version 17)
$ apt search openjdk

This shows no results:
$ apt search openjdk-11

Sorting... Done
Full Text Search... Done

And I don't see the package under "bookworm" https://packages.debian.org/bookworm/openjdk-11-jdk.
It's definitely there for buster! https://packages.debian.org/buster/openjdk-11-jdk
And maybe this is the underlying issue - the golang base images for 19 and 20 were updated to have bookworm and not buster. https://github.com/docker-library/golang/commit/db757a0fae9caa7efcd64c120c432e6f83b6eb24 So I don't think we did anything here - we just need to update the libraries we used based on what is available.

A suggestion from the Chainguard Dev CEO is to try their wolfi images: https://twitter.com/lorenc_dan/status/1670535938240389121?s=20. They are fairly minimalist, and not sure if it would greatly help with the EOL, but I thought I'd bring it up for discussion in case there is interest!

What I am confused about is how an error like "Unable to locate package openjdk-11-jdk" cases a flake? why would the test ever succeed if the package doesn't exist?

Because the golang images when they were buster did have the package. You likely were hitting a cache with the older images if it worked.

btw, in bookworm it is openjdk-17: https://packages.debian.org/bookworm/openjdk-17-jdk, so we just need to change the script at https://github.com/kubernetes-sigs/jobset/blob/main/hack/python-sdk/gen-sdk.sh#L48 to point to 17, right?

Yes! That's what I suggested we do here: https://github.com/kubernetes-sigs/jobset/pull/194#issuecomment-1596255901

Perhaps we can use openjdk-17-jdk instead? That works for me in a fresh image:
apt-get install -y openjdk-17-jdk

And the follow-up thread was just an exercise to understand why version 11 was not around!

Would you like me to put in a quick PR to do that update, or is that planned for https://github.com/kubernetes-sigs/jobset/pull/192/files?

yeah, to make it a bit more robust during this transition period, perhaps the script can try 11 first then if not successful try 17?

Sure, but I can almost guarantee since the images have been deployed (golang 19 and 20, specifically) to use bookworm, it will be unlikely. But I could see someone keeping a cache somewhere, so +1 to try 11 and fall back to 17.

https://github.com/kubernetes-sigs/jobset/pull/201

/retest

I likely need to do a rebase here, but I can wait for the recently triggered tests to run.

/lgtm
/approve


Getting around "Max retries exceeded"

I tried to use Server List Ping with various Minecraft servers and got a plenty of "Max retries exceeded" exceptions.
As it seems to me the reason is the fact that socket.recv doesn't guarantee to return data of the same size as its bufsize parameter. It often fails when a server has a "heavy" favicon, like 5 kBs. So BaseClient._recv method often signalize a packet loss, but SLPClient._status_request method can't deal with it, I think you need to rewrite BaseClient._recv like this (search for 'myreceive' method). This approach or just adding some empty print statements  helped me avoid the expection above 😄

@alexpavloff  This issue has been fixed in version 1.1.1. I apologize for the delay in resolving this matter.

@alexpavloff This issue has been fixed in version 1.1.1. I apologize for the delay in resolving this matter.


python311Packages.pyoverkiz: 1.7.8 -> 1.7.9

Diff: https://github.com/iMicknl/python-overkiz-api/compare/refs/tags/v1.7.8...v1.7.9
Changelog: https://github.com/iMicknl/python-overkiz-api/releases/tag/v1.7.9
Description of changes

Things done

Built on platform(s)

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

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

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

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

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[ ] Fits CONTRIBUTING.md.

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

3 packages built:

home-assistant-component-tests.overkiz
python310Packages.pyoverkiz
python311Packages.pyoverkiz


KISS games?

Yo,
there's a lot of good stuff here hidden in the depth's of git history:
https://github.com/sdsddsd1/kiss-games
kiss-games repo became a broken mess due to wayland switch and
stuff was deleted, lucklily I know where to look. Most of the games support
Xorg only and it's very unlikely any of them be updated with wayland.
I saw you package xlennart-git
that's *in hilarious bro! Keep up good work with the repo, it's getting more popular XD.
If we were to adopt X11 games into this repo, does it deserve it's own folder? I think so.

I'm on board with resurrecting some old packages, you may find my tools kiss-tombstones and kiss-resurrect to be useful. I think packaging them under games/ is reasonable.

Just moved all of the games that were under community/ to games/

Cool, I'll add more games later ~

are some of these Xorg specific? because it'd be weird to have some games that aren't related or have support for Xorg

They are, because we specify xorg depends in this repo. Some of them may compile without libX11 for example and just run on framebuffer thanks to sdl2, but the build system will link to X11 by default if it finds it on the system.

Either way, kiss-games is dead so we just add and maintain our favorite games in this repo.


Update launcher to run highest installed version of node.

The behavior of the updated launcher:

At startup, launcher scans for the installed versions of the node
If at least two versions are found, two most recent ones are selected and config migration process is started
The most recent node is started

Notes:

Launcher state file is no longer needed
The config migration process could be run multiple times without impacting the result (idempotence)

Nice to have:

Add the ability to override the launcher default behavior and force it to run a version other than the latest

Here's a proposal:

Have a text file (or launcher state file) that indicates which version should be launched.
Network runs on 1.5, goes down for upgrade, causing the launcher to indicate in the state file that 1.6 should be launched next.
When it restarts, the state file will cause 1.6 to be launched. All is fine.
Problematic scenario: Someone installs the 1.5+1.6 package with a 1.5 state file, but the network has progressed to 1.6. In this case, we crash and require the operator to manually set 1.6 in the state.

Here's an even better proposal:

Assume that all data migrations are not backwards compatible (we've been silently assuming this for the longest time, but we really should not). This means that we can only go forward, not backward with versions.
The node itself and outside parties should be able to identify the version of its database state (we could simply add a text file data_version to the storage directory).
If a node starts on an incompatible database version, it exits with an error.
The launcher always launches the highest version available that is >= 1.5 (or whatever version first implements this scheme) if there is no data_version file available, otherwise it requires and launches the correct binary specified in data_version.
(optional) If there is no database available at all, it launches the highest version available instead of the lowest.
If a running node observes a transition (activation point), it returns a special exit code, causing the launcher to run the data migration (which will change data_version). As a result, the next time the launcher launches, it will require the correct version to be started.
Launcher commands need to exist to trigger data migrations manually, as well as running a different version on an empty database.

This scheme protects against accidental data migrations and premature launches of later versions.
Use cases are:

New installation, but no upcoming upgrade: Launching the highest version will result in the correct behavior.
New installation, but upgrade already staged: The user will have to manually specify that they want to create an "old" installation.
Existing installation going through upgrade: All should work out correctly by itself.
Existing installation was down during upgrade: User runs migration manually once, then the launcher picks up automatically.

Launching an old version of a node will cause it to be "stuck", as it cannot connect to any known nodes, once rejection of older nodes is in. Heuristics can be added to automatically exit in a separate ticket, but I believe a WARN level message about the version mismatch when connecting to a known_addresses should be enough.

There will be only a single change in the launcher behavior required:

if there's no existing launcher state file, have the launcher pick the highest installed version of node and run that (in normal mode, not data-migration mode)

Additionally, we should add support for the command line argument for overriding the state file.


"readOnly must be true"???

I am getting this error:
F0202 22:33:22.114793   23129 create.go:78] replicationController "elasticsearch-data" is invalid: spec.template.spec.volumes.GCEPersistentDisk.ReadOnly: invalid value 'false': must be true

id: elasticsearch-data
kind: ReplicationController
apiVersion: v1beta1
desiredState:
  replicas: 1
  replicaSelector:
    component: elasticsearch
    role: data
  podTemplate:
    labels:
      component: elasticsearch
      role: data
    desiredState:
      manifest:
        version: v1beta1
        id: elasticsearch-data
        volumes:
          - name: es-persistent-storage
            source:
              persistentDisk:
                pdName: elasticsearch-data
                fsType: ext4
        containers:
          - name: elasticsearch-data
            image: pires/elasticsearch:data
            ports:
              - name: transport
                containerPort: 9300
            volumeMounts:
              - name: es-persistent-storage
                mountPath: /data

I've never seen this before, and my understanding is that a persistentDisk can be read-and-write... that is the default after all.

Oh, Skelterjohn on IRC clarified something for me. The issue is that RC is incompatible with read/write, it must be read-only.
I'm going to verify that this indeed works if written as a Pod resource.
Chat transcript below:
09:43 +skelterjohn: jasonkuhrt: is this a volume that would be available to all replications of your pod?
09:43 (jasonkuhrt) Most likely the problem is at the Kubernetes level, maybe I'm using it wrong or a bug, but maybe there is a GCE PD specific explaination too
09:43 (jasonkuhrt) The volume would be available to all replicas yes
09:43 (jasonkuhrt) but note that
09:43 (jasonkuhrt) the replica count is 1
09:43 +skelterjohn: then it must be ro
09:43 (jasonkuhrt) even if the count is 1?
09:43 +skelterjohn: well, that's a special case that shouldn't get special code
09:43 +skelterjohn: because you can resize a rc whenever you want
09:43 +skelterjohn: and you expect it to continue working
09:44 (jasonkuhrt) oh so are you saying that a pod created by an RC
09:44 (jasonkuhrt) must be RO PDs only
09:44 (jasonkuhrt) hm
09:44 +skelterjohn: a disk can only be mounted to more than one GCE VM if it's mounted ro
09:44 (jasonkuhrt) kind of makes sense, I understand
09:44 (jasonkuhrt) yeah
09:44 (jasonkuhrt) ok, and so is there a case wherein
09:44 +skelterjohn: otherwise things you take for granted with disks stop being true
09:44 (jasonkuhrt) yep, fair enough
09:44 (jasonkuhrt) so if I used that same pod manifest
09:44 (jasonkuhrt) and created it as a resource type of Pod
09:45 (jasonkuhrt) instead of Pod inside RC
09:45 (jasonkuhrt) it should work, right?
09:45 +skelterjohn: it might, but i think probably not
09:45 (jasonkuhrt) really?
09:45 +skelterjohn: k8s is designed to be a replication mechanism
09:45 +skelterjohn: if you want to run one container, don't use k8s
09:45 +skelterjohn: you can use gce directly
09:45 (jasonkuhrt) so how would I mount a R/W disk for elasticsearch?
09:45 +skelterjohn: there are even some bootstrapping methods for that
09:45 PSG_Luna: I need to mess with k8s and container engine more
09:46 (jasonkuhrt) skelterjohn: I think you might be wrong
09:46 +skelterjohn: jasonkuhrt: about what in particular?
09:46 (jasonkuhrt) https://github.com/GoogleCloudPlatform/kubernetes/blob/master/docs/volumes.md#creating-a-pd
09:46 (jasonkuhrt) skelterjohn: This is a R/W example
09:46 (jasonkuhrt) And this warning only says avoid multiple pods using the same volume: https://github.com/GoogleCloudPlatform/kubernetes/blob/master/docs/volumes.md#gcepersistentdisk
09:46 (jasonkuhrt) it doesn't say anything about it being impossible
09:47 +skelterjohn: jasonkuhrt: ok, sure it looks like they let it happen
09:47 +skelterjohn: RCs must have ro
09:47 (jasonkuhrt) and frankly if its impossible that's quite shocking, it would mean kubernetes doesn't support Elasticsearch and a lot of other stuff
09:47 +skelterjohn: but a pod can have have r/w, but if you try to do it with 2 pods the 2nd will fail
09:47 (jasonkuhrt) ^ Yeah I think that's it
09:47 (jasonkuhrt) ^ yeah sounds like that's the case
09:47 (jasonkuhrt) that's what I will try next
09:47 +skelterjohn: well, i think that k8s is just not that useful for elastic search
09:47 +skelterjohn: since you can't have any pod replication
09:47 +skelterjohn: you just want to deploy a container
09:48 +skelterjohn: though i think that right now k8s is the easiest way to deploy a container
09:48 +skelterjohn: so you're not being silly or anything :)
09:48 (jasonkuhrt) skelterjohn: kubernetes is supposed to be a simpler and more standard alternative to e.g. mesos (correct me if I am wrong)
09:48 +skelterjohn: but be aware that for deploying a single container, k8s requires 2 VMs
09:48 +skelterjohn: i'm not familiar with mesos, so i can't say exactly
09:48 (jasonkuhrt) its a cluster system that should make deploying clustered apps easy
09:48 +skelterjohn: but i'm talking about basically 'docker run' in the cloud
09:49 +skelterjohn: GCE has a way to do that on just one vm, but then it won't be managed by k8s
09:49 josie: jasonkuhrt, that's more of my understanding. (I could be wrong, I'm a newb here too)
09:49 +skelterjohn: and that management (bring it up if it goes down, etc) is nice
09:50 (jasonkuhrt) skelterjohn: I am 99% that stateful services are intended to be run on kubernetes sooner or later, spark, hadoop, casandra, ES, etc.
09:50 (jasonkuhrt) 99% sure*
09:50 (jasonkuhrt) I'm not saying its trivial
09:50 +skelterjohn: well, i guess everyone wants to be everything
09:50 +skelterjohn: :)
09:50 josie: jasonkuhrt, I'm not sure how elasticsearch works, but you may be able to have have the master be outside of k8s, and put the replicas on k8s.
09:50 (jasonkuhrt) I'm working with https://github.com/pires/kubernetes-elasticsearch-cluster
09:50 (jasonkuhrt) the way its done there is
09:50 +skelterjohn: josie: good point. what's the distributed architecture of elastic search like?
09:51 (jasonkuhrt) there is this node-data https://github.com/pires/kubernetes-elasticsearch-cluster/tree/master/node-data
09:51 (jasonkuhrt) which launches a node that is data only, not master https://github.com/pires/kubernetes-elasticsearch-cluster/blob/master/node-data/elasticsearch.yml
09:51 (jasonkuhrt) and there is a load-balancer https://github.com/pires/kubernetes-elasticsearch-cluster/blob/master/node-lb/elasticsearch.yml
09:51 (jasonkuhrt) which I'm not 100% clear on
09:52 (jasonkuhrt) And of course there is the master https://github.com/pires/kubernetes-elasticsearch-cluster/blob/master/node-master/elasticsearch.yml
09:52 (jasonkuhrt) the point is
09:52 (jasonkuhrt) the data-node can be worked with in isolation
09:52 (jasonkuhrt) so my plan right now is to launch it as as single pod (no rc, thanks skelterjohn!) and attach a 2TB disk to that container
09:53 +skelterjohn: i think it would be nice to have an RC that was specified single-forever, and just took care of bringing it back up when it went down
09:53 +skelterjohn: basically, a managed pod
09:53 +skelterjohn: rather than a managed pod set
09:53 (jasonkuhrt) skelterjohn: well, when you deploy a pod kubernetes does a pretty good job of keeping going forever
09:53 +skelterjohn: oh? pods do that themslves?
09:53 +skelterjohn: i thought RCs did that
09:53 +skelterjohn: but i guess i never experimented
09:54 +skelterjohn: very cool, thanks
09:54 +skelterjohn: your solution sounds like the right one, then
09:54 (jasonkuhrt) skelterjohn: RC only adds value from point of view of making sure n-number exist
09:54 josie: so this example that you linked, jasonkuhrt, doesn't provide any data persistence if you shut down the cluster?
09:54 (jasonkuhrt) but if you say "create a pod" kubernetes is going to make reallllly sure that that 1 pod is running
09:54 (jasonkuhrt) josie: Correct, I'm working on a fork that uses PD
09:54 josie: gotcha
09:55 (jasonkuhrt) josie: in Pires's current setup, if you delete the pod, bye-bye
09:55 (jasonkuhrt) of course, pods cannot accidently go away : )
09:55 (jasonkuhrt) but it would be nice to have the guarnatees of PD anyways, duh
09:55 (jasonkuhrt) since maybe you want to move the ES somewhere else, later, backup, etc.
09:55 josie: yeah.
09:56 (jasonkuhrt) skelterjohn: Thanks again, I think I overlooked the fact that kubernetes does NOT special case RC replicas=1 case, which is totally reasonable...
09:56 (jasonkuhrt) Kubernetes is protecting me from me : )
09:56 +skelterjohn: :)
09:56 +skelterjohn: sure thing!

Sure enough, it works as a Pod resource.
⧑ kubectl create -f kubernetes-resources/elasticsearch-data-persistent-pod.yaml
elasticsearch-data

We can reorient this issue to be about better error messaging.
Here is an example error message improvement:
F0202 22:33:22.114793   23129 create.go:78] replicationController "elasticsearch-data" is invalid: spec.template.spec.volumes.GCEPersistentDisk.ReadOnly: invalid value 'false': must be true.

Explanation:
Disks that can be written to or read from can only be associated with one Pod, and so by design do not work with ReplicationControllers even in the case where replicas is set to 1. In the case of 1 use a Pod instead.

Assigning to Brendan to get the special case of replication controller size=1 working again, since he said he would take care of it in the email thread.

Just a quick update on this, it looks like there may be problems with mounting a PD into multiple containers.  I'm still experimenting.  Will update when there are more details.
Sorry for the delay!
--brendan

Ok, I think my cluster was just messed up.
I've updated the validation code and the docs in https://github.com/GoogleCloudPlatform/kubernetes/pull/4151
Thanks for the patience.
--brendan

@brendanburns Thanks for looking into this so directly. No problem on the wait... cheers.

https://github.com/GoogleCloudPlatform/kubernetes/pull/4221 is merged, closing.


Upgrade to pVACtools version 4.0.5

@evelyn-schmidt and myself are both testing the 4.0.5 image in different GCP workflow runs.

All of our testing seems to be succeeding.  Merging this.


Server connection error

Whenever I try to connect to a server, I get the error message “Error encountered. Error message: Encoding error: decoding failed. Please reload the page”
Reloading and clearing cache does not do anything.

Can you reproduce this on another server? If it's only one server you'll need to provide the address for the server


Solution for Concatenated Words #404 under LGM-SOC

Description
Given an array of strings words (without duplicates), return all the concatenated words in the given list of words.A concatenated word is defined as a string that is composed entirely of at least two shorter words in the given array.
Fixes #(404)
Type of change
Please delete options that are not relevant.

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

Checklist:

[x] My code follows the style guidelines(Clean Code) of this project
[x] I have performed a self-review of my own code
[x] I have commented my code, particularly in hard-to-understand areas
[x] I have created a helpful and easy to understand README.md
[x] I have made corresponding changes to the documentation
[x] My changes generate no new warnings
[x] I have added tests/screenshots(if any) that prove my fix is effective or that my feature works

Message for reviewers please also look into the issue number improvement Bug/ proper formatting needed #524 I have included a sample for the same here @Amit366


Tags displayed in the popup window

In VS Code Insider 1.17.10 x64 for Windows, in a plain text file, when there is some certain grammar error in the file, the popup window shows some tags, that I believe shouldn't show up. Please refer to the screenshot below:

Here I think the <suggestion></suggestion> tags should not be shown. Please look into this issue.
Thank you.

I agree doing some processing of xml tags when present, rather than rendering them directly would be a better user experience.  Do you have a suggestion on how they be rendered?


enter the pre-population data on initial setup of the app

As a fisherman I would like to enter the pre-population data on initial setup of the app https://github.com/StAResComp/sifids/issues/6

Must


docker geckodriver path

i am using docker
when i run the command:
docker run --network selenium -it -e SELENIUM='http://firefox:4444/wd/hub' -v $(pwd):/app  webwhatsapi /bin/bash -c "pip install ./;pip list;python sample/echo.py"
i get the following error:
selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH.
i tried to put geckodriver in /usr/bin , /usr/local/bin and in the script path location and i have the same error

You need to relog/relaunch terminal after putting geckodriver to your path, if you have not tried it yet. That fixed it for me.

You need to relog/relaunch terminal after putting geckodriver to your path, if you have not tried it yet. That fixed it for me.

can you send me how please?


[P2P Distance] Enable split distance requests

Enable split distance requests following this plan
Upwork Automation - Do Not Edit

Upwork Job URL: https://www.upwork.com/jobs/~017fd731ba8df719c5
Upwork Job ID:<PHONE_NUMBER>878371840
Last Price Increase: 2024-02-20

Chill, Melv :v:

I'm starting on this now. I will split up the plan into multiple PRs to keep each one small and focused. I will start with moving split participant normalization to Auth.
Actually, now that I look more closely, it makes sense to move the creation of an individual payer account to Auth first. Then we can re-use that Auth function to create all split accounts as needed. Therefore I'll HOLD this issue on the issue to implement that part [P2P Distance] Move creating the payer account for money requests from Web-E to Auth

I need to learn a bit more about what the partner list is and how it operates before I can fully understand this. I'll look in SO and ask a question if there isn't something there already. I'll also share to engineering chat for help and look into the code myself.
I'll come back to this issue later.

On hold for a bit, moving to weekly

still holding

Yep, still on hold. Backend refactors are slowing things down.

Holding. I'm hoping to start on the blocking issue next week.

I'm planning to get started today

I got a draft Web-E PR up, processing splits data and passing it to Auth. Next time I'll get started on the Auth PR. After that's done I'll have to go back to Web-E to make sure the rest of the command finishes up properly.

Yesterday I got a little Auth draft PR up. Lot's more work to do there, so it will be my top focus today.

I made a little bit of progress today. It's pretty tricky because the doc was written before the strict 1:1 requirement, so I keep having to look into stuff related to that. For example I found out that pushing the personal details is hard to move to Auth due to phone number formatting stuff,  and so I think it should stay in Web-E for now. I may need to formally ask for an exception, since it is existing code, but added to a new api command.
Next time I'll keep working on sending split data in Web-E. I should try to follow the design doc as closely as possible, but diverge from it where needed. Breaking it up into smaller functions will help readability too.

There was still a bunch to do in Auth today, so I worked there and got CreateDistanceRequest and CreateIOUSplit to use the same util functions to create split requests. I haven't tested any of it yet, so I'm planning to do a lot of testing both manual and automated after finishing sending data back from Web-E.

I didn't work on this as much as I would have like to today because other stuff popped up, but I did sort out the error handling a bit more, and finish sending data back from Web-E.  There is some error handing in ReportAPI::splitBill which handles the case where a split participant email or accountID is invalid. The code is very odd to me and I think I've found several errors in it so far, but ultimately I decided not to bother with it because the only way that flow can occur is if the frontend is quite broken. So it's not worth it.
I want to manually test manually across the full stack next, so I'm working to enable splits from App. I suspect I will find many errors while testing, and I plan to slowly build up automated tests as I learn form manual testing.

I'm able to send split requests from App now, and I got a simple automated test written for Web-E so I can start iterating fast there. It's where I'm finding most of the errors right now.
Next up I need to use the chatType in computeRouteAndCustomUnit to determine whether the request should use a p2p rate or not.

I've been working on this a lot today. I fixed a bunch of errors today in Auth and got a basic test hitting the assertions finally. One thing I find odd is that looking at the existing code from CompleteSplitBill, the transaction data seems to be saved on the parent split transaction, and then also saved on the individual transactions with each split participant. That data duplication bothers me a bit, but I'll assume we did that for a reason and do the same for distance splits.

I'm still chugging away at the automated Auth tests

I worked on this for an hour this morning. Company priorities have shifted towards reliability again, and so I'm going to move away from this as my top focus. I will finish what I started, but at a weekly cadence.

I've been focused on other things this week, but planning to focus on this tomorrow

Picking this back up for a couple hours now

I worked on this quite a bit yesterday and this morning. Distance splits are being successfully created. This morning I fixed copying receipts to the child transactions and I'm working on splitting the distance for each child transaction instead of showing a split amount and the full distance.
There's an annoying bug in App on dev main right now where receipt images load but keep showing the loading spinner. I think I'll create an external issue for that because it's making things hard to test.

I think the feature is working very well at this point. I'm encountering a handful of bugs that I believe come from the frontend and are present on main, but I will have to go through and verify that for each bug. Going to work on this today.

I fixed the style and some tests on the backend after updating my branches with main. I determined that one bug is also present on main. I think I fixed a bug where the route wasn't showing optimistically for the distance splits, but there's now another bug with the split shares so I need to fix that before I can properly test.
I'll put in another concerted effort on the fronted, and then hopefully I can get all the PRs up for review this week.

I've been dealing with the following problem for a long time today.
Problem: Splitting a distance expense with new accounts doesn't navigate to a new group chat with the split participants. The following flow takes place.

On the confirmation page, call IOU.createDistanceRequest passing the current report which has the value {"reportName": "Chat Report"}
Within that function, after creating the request, navigate to the new chat report  which is the activeReportID. Since the report is not a money request report, we use the parameters.chatReportID. That comes from the splitData here
Above createSplitsAndOnyxData is called to get the splitData
splitData.chatReportID comes from the splitChatReport, which comes from the call to getOrCreateOptimisticSplitChatReport. The existingSplitChatReportID will default to '', because it comes from report.reportID with createDistanceRequest and that is undefined
Within getOrCreateOptimisticSplitChatReport the existingChatReportID is set to undefined because the empty string is falsey and the first participant doesn't have a reportID
💥 When we get the value at the key report_undefined from all reports we get a result back, wtf? Why?
After carefully checking to see when this key gets set I noticed that it happens when selecting a waypoint. That's because the reportID is undefined when getting the route to navigate to a waypoint editor page. Side note, this is the only route which allows an optional reportID, e.g. reportID?: string. We should probably fix that.

Solution:
So with all that, what's the solution? To fix the particular problem for group chat distance splits, I wrote this commit which ensure that we default to an empty reportID instead of undefined, which avoids the problem for now since we don't seem to have any code opening a report with an empty id.
However, it still seems problematic that withWritableReportOrNotFound called from the IOURequestStepDistance page doesn't really seem to be working correctly. I guess I'm not really sure what the intention of this higher order component is. If we have an invalid reportID shouldn't we show the not found page? If you navigate to https://dev.new.expensify.com:8082/r/undefined you get a not found page, but report_undefined is permanently stored in Onyx, because we return a not found error on the report instead of removing it from Onyx as we used to. If you navigate to /r/0 then you get a not found page, but that report also stick around in Onyx forever.

I worked on this a lot today and fixed several thorny frontend bugs. It's going to take a good bit more time of testing and debugging on the frontend before this is ready.

I found that the frontend is sending optimistic one on one chat reportIDs for each split participants when creating a split with an existing group. It's happening after a fresh sign in because getChatByParticipants tries to find the report in the allReports cache, but that only contains a few reports returned by OpenApp in focus mode, and it doesn't contain the existing 1:1 DMs. I think this will need a backend fix to use the existing chat without throwing an error. I'll also likely have to make sure the optimistic data is clean up properly.

I worked on this for a couple hours this morning. I fixed an Auth test and a bunch of phan/psalm errors on Web-E.
I tested on app main and the new group chat won't load report actions for a bit. You have to sign out and back in. It remains to be seen whether that's a problem on main. I also noticed that the 1:1 transaction was put on HOLD. I need to figure out why the Auth branch is causing Web-E tests to fail on main.
My new goal is to get the mainline cases working, document any existing bugs on main, and make sure it doesn't break the existing flows.

This morning I ran through all the tests on the App PR, uploaded videos, and noted any bugs. Next I need to check which bugs are present on main, fix failing gh actions, do the checklist, and then I can get it up for review. I'll also aim to get the backend PRs up for review.

I got all the PRs up for review. 🎉  It was a lot of work and there will be some more to do 😅
[Auth] [HOLD Web-E 42700] Enable distance splits
[Web-Expensify] [HOLD Auth 10851] Enable splits for distance expenses
[App] [HOLD Web-E 41977] Enable distance splits

Head's up, I'll be working 50% for the rest of this week and next 🌲

@twisterdotcom would you please handle payment for the C+ @mananjadhav

Head's up, I'll be working 50% for the rest of this week and next 🌲

@neil-marcellini what are we pricing this at? Normal $250?

Going to go with $250 as normal here.
Payment Summary:

@mananjadhav paid $250 via newDot requests (C+)

$250 approved for @mananjadhav


Updated the usage of camera capture inside cra-template

ALL CONTRIBUTIONS WILL BE REVIEWED BY AT LEAST ONE OF OUR FRONTEND TEAM MEMBERS.

Technical description

Fixed camera Capture usage inside cra-template
Added a full explanation for using UploadCenter

Related to

This PR is related to Camera capture.
About Tests

Tested on the following devices

Chrome web browser

Steps to reproduce

Finish the camera tour

Screenshots (optional):
This Pull Request template has been written and generated by Monk JS repository.

To do so, I believe we'll have to publish all other packages to NPM using that version... 1.4.4


Remove unused fields

These fields were likely added in error. They are needed in the corresponding transaction formats but not in the ledger formats.

:+1:

:+1:

Merged as ff7a2c63f23be0b98a1d010571b2621d91e96fe7


Api key creds

Added possibility to specify SF API version in creds

Please don't merge this PR yet, it need more attention

Why is this ability required?


Improve audio latency on mobile

Load times on mobile are quite sluggish. It currently takes several seconds from the page loading to the bonang pots being playable.
Looking through the repository, this is probably due to the size of the audio files (1.3 MB in total). By reducing these file sizes we should be able to improve performance.
There is plenty of scope to minimise the audio file size. Each sound is roughly 4 seconds long and is encoded as a 200-250 kb/s MP3. By trimming the source audio and re-encoding at a lower bit-rate we should be able to reduce the bundle size considerably.

Looks like installing Howler.js solved this issue!


Strategy should know if it runs in backtesting or not

I'm submitting a ...
[ ] bug report
[x] feature request
[ ] question about the decisions made in the repository

Action taken
I built a strategy which caches calculations to reuse certain parameters after restart. When running my strategy using historical data (backtesting), then my strategy doesn't work anymore because it uses cached data from the last live trade (which was not in the past, so when doing backtesting afterwards the data is not accurate anymore). To be able to reevaluate my strategy with historic data, my strategy would need to know if it runs in a backtesting environment. Is there such a flag that I could query?
Expected result
I would like to be able (from within a Strategy) to know if I am running in a backtesting environment or not.
Actual result
Backtesting environment and live trades are treated the same.

I think util.gekkoMode might be what you're after

I think util.gekkoMode might be what you're after

This worked like a charm! Thanks @zappra.
Sample:
var util = require('../core/util');
var mode = util.gekkoMode();
if (mode === 'backtest') console.log('In backtesting mode.');


Make project more inviting for developers

What is needed to make this project more developer-friendly?

I have no experience in display servers but interested in contributing, what can i do to help?

Basically all the things that I think need attention are recorded as issues.
If you want to avoid having to dive into wayland documentation for a few weeks before you can get started, then I think #1, #2 and #6 are the most important issues right now.
#1 is an issue that a number of Haskell projects are suffering from, and likely requires work on cabal. So what I'd really like at this stage is a decent workaround (some kind of Makefile? autotools? but how do these interact with cabal?).
I'm not sure how to do #2 yet and personally don't consider it top priority: "simply" having a drop-in replacement of the wayland library will attract more attention than some arcane new library in a language that only a fraction of programmers know how to use.
#6: this shouldn't be too difficult (although there is quite some work involved). It would be nice if our drop-in replacement of libwayland were able to match the speed of libwayland. I don't think anyone is really benchmarking libwayland at the moment, but when they do, we should not come out an order of magnitude slower. In essence the binary (de)serialization code is already there; it just needs converting to use a different library.


Add .travis.yml

This is a simple Travis configuration for verifying that the site still builds.  For now, the tests are just grep.   You could use html-proofer or some such to lint the site more thoroughly.

😎


[blocked] CI: Update base-ipu docker image

What does this PR do?

Resolves timeout in master due to very slow dependency resolution by conda. (from >100min to <10min)
Most of the change comes from the base-cuda dockerfile.

Does your PR introduce any breaking changes? If yes, please list them.
None
Before submitting

[ ] Was this discussed/approved via a GitHub issue? (not for typos and docs)
[x] Did you read the contributor guideline, Pull Request section?
[x] Did you make sure your PR does only one thing, instead of bundling different changes together?
[n/a] Did you make sure to update the documentation with your changes? (if necessary)
[n/a] Did you write any new necessary tests? (not for typos and docs)
[n/a] Did you verify new and existing tests pass locally with your changes?
[n/a] Did you list all the breaking changes introduced by this pull request?
[n/a] Did you update the CHANGELOG? (not for typos, docs, test updates, or minor internal changes/refactors)

PR review
Anyone in the community is welcome to review the PR.
Before you start reviewing, make sure you have read the review guidelines. In short, see the following bullet-list:

[x] Is this pull request ready for review? (if not, please submit in draft mode)
[x] Check that all items from Before submitting are resolved
[x] Make sure the title is self-explanatory and the description concisely explains the PR
[x] Add labels and milestones (and optionally projects) to the PR so it can be classified

Did you have fun?
Make sure you had fun coding 🙃
cc @carmocca @akihironitta @borda

I'll keep this PR as draft so that we don't merge it before verifying it in the IPU CI.

I'll keep this PR as draft so that we don't merge it before verifying it in the IPU CI.

This PR is basically ready, but I'd like to check in advance if the docker image built from this dockerfile works in our CI...

Hi, @akihironitta, what do you need help with? I'm here :slightly_smiling_face:

For the note, the only task left here is to validate the change in the IPU server:

[ ] Replace the agent runner with the new docker image in the IPU CI server.

@akihironitta blocked in title does not do anything :)
so what needs to be done, publish the newly built image?

@akihironitta is this still relevant? Otherwise feel free to close it :)

Closing this PR since #14934 fixed the original issue which this PR was trying to resolve.


[Container Apps] Secrets: app and image name should use lowercase

Under the Using secrets section,
Two problems -

Both container app name and image name should be lowercase:

Invalid Container App name 'myQueueApp'. A name must consist of lower case alphanumeric characters
or '-', start with an alphabetic character, and end with an alphanumeric character and cannot have '--'.
The length must not be more than 32 characters.

secretRef should be lowercase secretref, otherwise the string literal secretRef gets added:

This fix applies to both Azure CLI and PowerShell tabs and probably to the ARM template one as well.

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

ID: 735a0e03-0632-feb7-8787-e62118809072
Version Independent ID: 938a7233-56e5-dd1b-05c0-2a15b8920f12
Content: Manage secrets in Azure Container Apps
Content Source: articles/container-apps/manage-secrets.md
Service: container-apps
GitHub Login: @craigshoemaker
Microsoft Alias: cshoe

@snobu - Thanks again for bringing this to our attention. We have updated the Doc and it will be live once its merged.  We will now proceed to close this thread. If there are further questions regarding this matter, please tag me in your reply. We will gladly continue the discussion and we will reopen the issue.


Handle library with Bloc Library

Describe the bug
A clear and concise description of what the bug is.
First of all thank you so much @fayaz07 for published this great library.Really appreciated to you.
Now a days there is Bloc library is used for handling the state management, can you suggest us with one example where we are handle this library with Bloc Library. We need your example to support our production app.

@fayaz07 are you considering my issue?

I already had an idea to manage it with provider bloc, but that requires complete changing the core of the library, I will find a solution for it.

Sure. Hope that I'll get your response as soon as possible.
On Tue, May 26, 2020 at 8:44 AM Mohammad Fayaz<EMAIL_ADDRESS>wrote:

I already had an idea to manage it with provider bloc, but that requires
complete changing the core of the library, I will find a solution for it.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/fayaz07/progress_dialog/issues/65#issuecomment-633785574,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/APGW34X7YVNSSV2TMXGFWD3RTMX2PANCNFSM4NIN5T7Q
.

@visual-velocity
Can't you just create 3 states for the Bloc?
e.g. When accessing an API:
Handle it through BLoC listener:
GetAPILoading

show progress dialog

GetAPILoaded
-hide progress dialog
-GetAPIFailed
-hide
body: BlocListener<ProfileBloc, ProfileState>(         bloc: bloc,         listener: (context, state) {           if (state is ProfileInfoUpdateLoading) {             pr.show();           }           if (state is ProfileInfoUpdateFailed) {             pr.hide();             SnackBarHelper.showErrorSnackBar(context, 'Update Profile Failed');           }           if (state is ProfileInfoUpdateLoaded) {             pr.hide();             updateUserInfo(state.user);             isUpdated = true;             SnackBarHelper.showSnackBar(context, 'Succesfully Updated Profile');           }         },

I had already tried and it's worked.
Where will i create the object of progress_dialog is correct if I have to call an event in initState.
Inside Either InitState or BLoC listener(if (state is ProfileInfoUpdateLoading) { pr.show(); })
But i'm not able to update the content of progress dialog continuously with bloc.

@visual-velocity It is possible. I'm currently using in this way:
  Widget build(BuildContext context) {
    _downloadDialog ??= ProgressDialog(
      context,
      type: ProgressDialogType.Download,
      isDismissible: true,
    )..style(message: 'Downloading flight data...');

    return BlocConsumer<ManageFlightDataDownloadsBloc, ManageFlightDataDownloadsState>(
      bloc: _bloc,
      builder: _buildView,
      listener: (context, state) async {
        if (state.isDownloadInProgress) {
          await _downloadDialog.show();
          _downloadDialog.update(progress: state.progress);
        } else {
          await _downloadDialog.hide();
        }
      },
    );
  }```


Documentation

Any documentation, examples other than the tests?

Not yet unfortunately.
We have been using this package internally but I plan to create examples and documentation in the future as soon as I have the time for it.
The tests pretty much cover each state and use case for the package.
I plan also to add more debugging data and add a visual improvement to allow to see and potencially build statecharts via visual nodes.
Let me know if you have any questions I can help you with 👍

Not yet unfortunately.
We have been using this package internally but I plan to create examples and documentation in the future as soon as I have the time for it.
The tests pretty much cover each state and use case for the package.
I plan also to add more debugging data and add a visual improvement to allow to see and potencially build statecharts via visual nodes.
Let me know if you have any questions I can help you with 👍


Possibly a new problem with ip address validation

Hi,
the ip addy detection was changed away from akamai to ipinfo.io but that one seems to also have problems for certain hosts - while akamai works for such hosts :/
Note: I'm creating the cluster from a proxy host inside hetzner, which itself is created before by a github action, which sets up the whole cluster from scratch. Just got the second failure for a specific host, within the last days:

https://github.com/axgkl/hk3sf/actions/runs/10908523881/job/30274697386#step:5:103
https://github.com/axgkl/hk3sf/actions/runs/10891195853/job/30221585972#step:5:104

the ip assigned by hetzner for those two runs was the same, <IP_ADDRESS>, while others do work.
Logging into the host reveals that akamai works, while ipinfo rejects it.

root@citest-proxy:~# curl
root@citest-proxy:~# curl "http://whatismyip.akamai.com""
> ^C
root@citest-proxy:~# curl "http://whatismyip.akamai.com"
<IP_ADDRESS>root@citest-proxy:~# curl "http://whatismyip.akamai.com"
<IP_ADDRESS>root@citest-proxy:~# curl https://ipinfo.io/ip"

<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>403 Forbidden</title>

Error: Forbidden

Your client does not have permission to get URL /ip from this server.

root@citest-proxy:~# curl ifconfig.me
2a01:4f9:c012:6c6::1
# curl icanhazip.com
2a01:4f9:c012:6c6::1
root@citest-proxy:~# curl ipinfo.io/ip

<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>403 Forbidden</title>

Error: Forbidden

Your client does not have permission to get URL /ip from this server.

root@citest-proxy:~# curl ipecho.net/plain
2a01:4f9:c012:6c6::1

I wanted to report early, so that you are aware of it - by nature of the problem, it's practically not testable. I'll will get back to it, if it happens again, for other IPs.
Lastly, I think we could skip that pub ip validation all togehter, when allowed networks is set to <IP_ADDRESS>/0, like in my case, with a pub ip anyway only on that jump host(?)

Hi, I guess the problem might be that ipinfo rejects requests made form hosts that it detects as servers or something like that. If you can find another service that works in your context and also in China (the reason why I changed it from Akamai) I can change it and make a release.

up to now ipinfo works with any server i created in that location (helsinki) - except that one. so in general i would leave it. just wanted to report that they seem to do maintain a blacklist or sth like that and maybe others run into that problem as well, so u r informed.
in general i'd say that we could skip that check alltogether if

allowed networks is <IP_ADDRESS>/0 AND
you don't need that ip for other purposes later in the install

or at least not hard exit the install, when the lookup fails in such cases (?)
closing for now and would re-open if it happens again for other ips.
as we say in here: "einmal is keinmal" (only once is like nothing at all or so) ;-)

I work for IPinfo. If you can let me know which IP addresses you can't access our service from, we will look into it.
Reach out to me:

Email<EMAIL_ADDRESS>Twitter/x: https://x.com/reincdr
IPinfo Community: https://community.ipinfo.io/u/abdullah/activity

I work for IPinfo. If you can let me know which IP addresses you can't access our service from, we will look into it.
Reach out to me:

Email<EMAIL_ADDRESS>Twitter/x: https://x.com/reincdr
IPinfo Community: https://community.ipinfo.io/u/abdullah/activity

Thanks for offering help!

Hi Abdullah,

I work for IPinfo. If you can let me know which IP addresses you can't access our service from, we will look into it.
Reach out to me:

do you mind discussing it here? note, the ip is not mine, but from within a hetzner owned pool and they allocated it to one server i created there, meanwhile destroyed again.
Here are the infos, for this one akamai lookup worked, ipinfo rejected:
root@citest-proxy:~# curl "http://whatismyip.akamai.com"
<IP_ADDRESS>

root@citest-proxy:~# curl https://ipinfo.io/ip

<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>403 Forbidden</title>

Error: Forbidden

Your client does not have permission to get URL /ip from this server.

root@citest-proxy:~# curl ifconfig.me
2a01:4f9:c012:6c6::1

in general your service works very well, this is the only ip i ever had that problem with...
Cheers,
gunther

Hi @axgkl I think we have a clue on what is going on.
GCP mislocates some Hetzner IP ranges to Iran. Now, we as an IP geolocation service correctly can locate IP addresses of Hetzner. However, our service infrastructure is based on GCP.
So, GCP itself is blocking these ranges as they think they are located in Iran.
Context: https://community.ipinfo.io/docs?topic=303
There is a discussion going on HN on a similar issue with Cloudflare mislocating Hetzner IPs  in Iran as well: https://news.ycombinator.com/item?id=41585249

crazy. i'm a boomer and i once, long ago, thought the internet would bring people together. and now politics like this, built right into major infra...
anyways, thanks for the find, we won't be able to change such things, unfortunately.

@axgkl I know what you mean exactly. I am a boomer in spirit as well ;)
Thank you for having a conversation with me. If you have any questions about IP data, you now know me. Reach out to me if you have any issues. I will be happy to investigate the issue. You can find my contact information on my Github profile.

you do a crazy good job for your company, had already a look. we might use your services, i.e. more than ip addy lookups in my company as well...
thanks again!!


MICA and MICB

Hello,
Can the current software type MICA and MICB genes?

Hi, currently, SpecHLA does not support these two genes.

Thank you for your reply. Although these two genotypes cannot be typed, I have to say that Spechla is really a good software. ---- Replied Message ----FromWANG @.>Date01/30/2024 20:48 @.> CcSiqi<EMAIL_ADDRESS>[deepomicslab/SpecHLA] MICA and MICB (Issue #22)
Hi, currently, SpecHLA does not support these two genes.
—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you authored the thread.Message ID: @.>
[
{
@.": "http://schema.org",
@.": "EmailMessage",
"potentialAction": {
@.": "ViewAction",
"target": "https://github.com/deepomicslab/SpecHLA/issues/22#issuecomment-1916773997",
"url": "https://github.com/deepomicslab/SpecHLA/issues/22#issuecomment-1916773997",
"name": "View Issue"
},
"description": "View this Issue on GitHub",
"publisher": {
@.***": "Organization",
"name": "GitHub",
"url": "https://github.com"
}
}
]

Thank you so much. Your appreciation means a great deal to us.


Unable to open the file "../demo_template.ipynb"

Unable to open the file "../demo_template.ipynb"

Thanks for reporting. I fixed the link.


Find and Replace - make dialog resizable

The Find and Replace in files dialog is resizable (and remembers it's size even across restarts - great! I like to make it bigger than default.
It would be great if the Find and Replace dialog would also have the same features. Sometimes it's way too small, especially when using RegExps.

Done.

Hey Mika, nice work! It's great :)


wallet: add remark14 option to migrate UTXO assets to N3

N3 migration works via sends to blackhole ANeo2toNeo3MigrationAddressxwPB2Hz
address with Remark14 attribute set to target N3 address 1. This option
allows to create such transaction (but it doesn't check target address in any
way, if you make a mistake there you'll lose your assets forever). It works
like this:
$ neo-go wallet transfer -p file.wallet -r https://rpc-node:10331 --from AZ81H31DMWzbSnFDLFkzh9vHwaDLayV7fU --to ANeo2toNeo3MigrationAddressxwPB2Hz --asset NEO --amount 10 --remark14 NVTiAjNgagDkTr5HTzDmQP9kPwPHN5BgVq

Also, I think that we should add a warning message in case if transfer amount exceeds 10 NEO (20 GAS). Such transfers require 1 GAS extra fee.

It's the other way around, transfers of less than 10 NEO or 20 GAS require additional fee. It's not an easy question, technically one can always add it, there is nothing preventing that. And technically we should also be checking for destination N3 address. But that would be like creating a complete migration solution instead, while this just exposes some attribute to the outside world and they way you use it is completely your problem.