Training slows down dramatically as epochs proceed in CPU

The speed of a training dramatically slows down as epochs proceed in the CPU mode, especially when the batch size is small. In the example below, the 1st epoch took 30 seconds while the 3rd one took 39 seconds.
The same was observed with multiple CPU models (Core i5 6400, Xeon E5-2699v3), multiple Python versions (2.7.13, 3.6.0), and multiple chainer versions (1.23, 2.0.0b1).
~/src/chainer/examples/mnist $ export OMP_NUM_THREADS=1
~/src/chainer/examples/mnist $ ./train_mnist.py -g -1 -b 50 -e 3
GPU: -1
# unit: 1000
# Minibatch-size: 50
# epoch: 5

epoch       main/loss   validation/main/loss  main/accuracy  validation/main/accuracy  elapsed_time
1           0.179801    0.108207              0.94595        0.9655                    30.1475
2           0.0772594   0.0726388             0.976          0.9757                    67.1415
3           0.0519136   0.0821774             0.983467       0.9756                    106.503

The OS is Debian 9 and gcc is 6.3 (which might be too new). Python runtime and libraries were installed via Anaconda. export OMP_NUM_THREADS=1 limits the number of threads invoked by BLAS to 1 (I use this because using more than 1 thread does not improve the performance as the matrices processed are too small in mnist).
The below is profiling results of update_core_cpu() in optimizers/adam.py using line_profiler. The Time column shows the elapsed time for each line in micro seconds, which shows that in the 3rd epoch, lines 60 and 62 took almost twice as long time as in the 1st epoch.

1st epoch

Total time: 14.883 s
File: /home/soramichi/src/anaconda2/lib/python2.7/site-packages/chainer/optimizers/adam.py
Function: update_core_cpu at line 52

Line #      Hits         Time  Per Hit   % Time  Line Contents
==============================================================
    52                                               @profile
    53                                               def update_core_cpu(self, param):
    54      7200        14427      2.0      0.1          grad = param.grad
    55      7200         4218      0.6      0.0          if grad is None:
    56                                                       return
    57      7200         3815      0.5      0.0          hp = self.hyperparam
    58      7200        11194      1.6      0.1          m, v = self.state['m'], self.state['v']
    59
    60      7200      4065881    564.7     27.3          m += (1 - hp.beta1) * (grad - m)
    61      7200      3986827    553.7     26.8          v += (1 - hp.beta2) * (grad * grad - v)
    62      7200      6796601    944.0     45.7          param.data -= self.lr * m / (numpy.sqrt(v) + hp.eps)

3rd epoch

Total time: 22.6429 s
File: /home/soramichi/src/anaconda2/lib/python2.7/site-packages/chainer/optimizers/adam.py
Function: update_core_cpu at line 52

Line #      Hits         Time  Per Hit   % Time  Line Contents
==============================================================
    52                                               @profile
    53                                               def update_core_cpu(self, param):
    54      7200        14359      2.0      0.1          grad = param.grad
    55      7200         4162      0.6      0.0          if grad is None:
    56                                                       return
    57      7200         3933      0.5      0.0          hp = self.hyperparam
    58      7200        11482      1.6      0.1          m, v = self.state['m'], self.state['v']
    59
    60      7200      7869889   1093.0     34.8          m += (1 - hp.beta1) * (grad - m)
    61      7200      3928259    545.6     17.3          v += (1 - hp.beta2) * (grad * grad - v)
    62      7200     10810785   1501.5     47.7          param.data -= self.lr * m / (numpy.sqrt(v) + hp.eps)

How to reproduce the profiling results:

Run the mnist example and save a snapshot at the end of every epoch:  ./train_mnist.py -g -1 -b 50 -e 3 -f 1.
Put @profile decorator to update_cpu_core function of optimizers/adam.py.
In order to take a profile only for the target epoch (epoch 1 or 3), add an extension, to the mnist example, that raises an exception at the end of the target epoch.

# train_mnist.py
...
def die(trainer):
    raise ValueError("die")
...
def main():
    ...
    # die after the 1st epoch
    trainer.extend(die, trigger=(1, 'epoch'))
    ...

Resume the mnist example from the target epoch, using kernprof command (usable after pip install line_profiler).

# dies after the 1st epoch finishes,
# so that the profiling result contains only the 1st epoch
$ kernprof -v -l ./train_mnist.py -g -1 -b 50 -e 3

# resume from the end of 2nd epoch, dies when the 3rd epoch finishes
# (don't forget to change the trigger of the die extension)
$  kernprof -v -l ./train_mnist.py -g -1 -b 50 -e 3 --resume result/snapshot_iter_2400

Thank you very much for reporting the issue!
It has reproduced in my environment.
It's still under investigation, but I'd like to share more detail of the situation.
I divided the computation in update_core_cpu() into more lines and ran line profiler.
(The result of all lines is at the end of this post.)
Below is excerpt from the result:
            Line #      Hits         Time  Per Hit   % Time  Line Contents
==============================================================
1st epoch:      67      3600       551386    153.2      7.1          t3 = t1 * t2
10th epoch:     67      3600      1980032    550.0     18.3          t3 = t1 * t2

1st epoch:      76      3600       579130    160.9      7.4          t4 = t1 * t3
10th epoch:     76      3600       570233    158.4      5.3          t4 = t1 * t3

1st epoch:      82      3600       676824    188.0      8.7          t1 = lr * m
10th epoch:     82      3600      2057452    571.5     19.0          t1 = lr * m

1st epoch:      84      3600       652750    181.3      8.4          t3 = t1 / t2
10th epoch:     84      3600       990012    275.0      9.2          t3 = t1 / t2

As can be seen from above, two multiplication (scalar * tensor) operation at line 67 and 82 is mostly responsible for the slow down. Division (matrix / tensor) at 84 also slowed down, but no so much.
I wonder why multiplication at line 76 did not slow down at alll (also scalar * tensor)...
1st epoch:
Line #      Hits         Time  Per Hit   % Time  Line Contents
==============================================================
    53                                               def update_core_cpu(self, param):
    54      3600         7329      2.0      0.1          grad = param.grad
    55      3600         2095      0.6      0.0          if grad is None:
    56                                                       return
    57      3600         2003      0.6      0.0          hp = self.hyperparam
    58      3600         4937      1.4      0.1          m, v = self.state['m'], self.state['v']
    59
    60      3600        17336      4.8      0.2          beta1 = hp.beta1
    61      3600         5532      1.5      0.1          beta2 = hp.beta2
    62      3600         5843      1.6      0.1          eps = hp.eps
    63
    64                                                   global count
    65      3600         3466      1.0      0.0          t1 = (1 - beta1)
    66      3600       851747    236.6     10.9          t2 = (grad - m)
    67      3600       551386    153.2      7.1          t3 = t1 * t2
    68      3600         7734      2.1      0.1          count += t2.size
    69      3600       509310    141.5      6.5          m += t3
    70      3600         5853      1.6      0.1          del t1, t2, t3
    71
    72                                                   #m += (1 - hp.beta1) * (grad - m)
    73      3600         3180      0.9      0.0          t1 = (1 - beta2)
    74      3600       686510    190.7      8.8          t2 = (grad * grad)
    75      3600       765957    212.8      9.8          t3 = t2 - v
    76      3600       579130    160.9      7.4          t4 = t1 * t3
    77      3600       514649    143.0      6.6          v += t4
    78                                                   #v += (1 - beta2) * (grad * grad - v)
    79      3600         5311      1.5      0.1          del t1, t2, t3, t4
    80
    81      3600        69732     19.4      0.9          lr = self.lr
    82      3600       676824    188.0      8.7          t1 = lr * m
    83      3600      1184428    329.0     15.2          t2 = (numpy.sqrt(v) + eps)
    84      3600       652750    181.3      8.4          t3 = t1 / t2
    85      3600       678157    188.4      8.7          param.data -= t3
    86      3600         5743      1.6      0.1          del t1, t2, t3

10th epoch:
Line #      Hits         Time  Per Hit   % Time  Line Contents
==============================================================
    53                                               def update_core_cpu(self, param):
    54      3600         7037      2.0      0.1          grad = param.grad
    55      3600         2180      0.6      0.0          if grad is None:
    56                                                       return
    57      3600         1984      0.6      0.0          hp = self.hyperparam
    58      3600         4895      1.4      0.0          m, v = self.state['m'], self.state['v']
    59
    60      3600        16885      4.7      0.2          beta1 = hp.beta1
    61      3600         5588      1.6      0.1          beta2 = hp.beta2
    62      3600         6001      1.7      0.1          eps = hp.eps
    63
    64                                                   global count
    65      3600         3495      1.0      0.0          t1 = (1 - beta1)
    66      3600       796798    221.3      7.4          t2 = (grad - m)
    67      3600      1980032    550.0     18.3          t3 = t1 * t2
    68      3600         7005      1.9      0.1          count += t2.size
    69      3600       498478    138.5      4.6          m += t3
    70      3600         5239      1.5      0.0          del t1, t2, t3
    71
    72                                                   #m += (1 - hp.beta1) * (grad - m)
    73      3600         3170      0.9      0.0          t1 = (1 - beta2)
    74      3600       749467    208.2      6.9          t2 = (grad * grad)
    75      3600       758018    210.6      7.0          t3 = t2 - v
    76      3600       570233    158.4      5.3          t4 = t1 * t3
    77      3600       505351    140.4      4.7          v += t4
    78                                                   #v += (1 - beta2) * (grad * grad - v)
    79      3600         5294      1.5      0.0          del t1, t2, t3, t4
    80
    81      3600        68229     19.0      0.6          lr = self.lr
    82      3600      2057452    571.5     19.0          t1 = lr * m
    83      3600      1172954    325.8     10.9          t2 = (numpy.sqrt(v) + eps)
    84      3600       990012    275.0      9.2          t3 = t1 / t2
    85      3600       587421    163.2      5.4          param.data -= t3
    86      3600         5275      1.5      0.0          del t1, t2, t3

@niboshi Thank you for the investigation.
I suspect this post might be relevant. What it says is numpy gets slower when the operands are super small (called denormal), which require special handling because they do fit in the normal format of floating point numbers.

@soramichi
Thank you for helpful information!
I confirmed that adding tiny number to tensors before multiplication improves the performance.
So it's almost certain that denormal numbers are responsible for the issue, as you suggested.
We're considering how to resolve it.

@niboshi
Hi, how is this thing going on?
I guess the right way to go is "won't fix" because it only happens when some of the parameter values are extremely close to zero. This means that the NN is extremely confident of its prediction, but I don't think it happens so often in real large networks. Also, it seems to me that the only way to fix it is to add a tiny value to the almost-zero variables, which affects the learning result thus this way is not easily adopted.
However it is good to know how the core developers thought about this issue and concluded, and that information can be beneficial for similar issues that may or may not appear in the future or in similar frameworks.
Thanks.

How about setting these CPU flags?
https://software.intel.com/en-us/articles/x87-and-sse-floating-point-assists-in-ia-32-flush-to-zero-ftz-and-denormals-are-zero-daz
Maybe, you can use Cython.

I got following result on my patched branch.
-[7473]% ./train_mnist.py -g -1 -b 50 -e 3
GPU: -1
# unit: 1000
# Minibatch-size: 50
# epoch: 3

epoch       main/loss   validation/main/loss  main/accuracy  validation/main/accuracy  elapsed_time
1           0.183173    0.0848753             0.943833       0.9744                    31.0003
2           0.0797964   0.0882871             0.974933       0.9723                    61.4667
3           0.0537355   0.0915037             0.983383       0.9707                    91.8465
./train_mnist.py -g -1 -b 50 -e 3  94.00s user 0.37s system 100% cpu 1:34.31 total

Please check this branch.
This is very simple patch.

Thanks for the patch and the link. It perfectly works in my environment too and the training speed no longer degrades (still got a good accuracy).
Now the reason of this issue is clear and a solution is given, so I will close this issue.
Do you have any plan to enable these CPU flags in the upstream? Maybe giving users a choice on if the the flags are enabled is a reasonable thing to do (rather than automatically enabling them)?

I reopen the issue. It should be closed only after the fix is merged to the code.

Can we use this patch for GPU as well? If not, would you please provide one. I am observing the same issue while running on GPU. I should note that I am using latest Cupy.

@MahdiKalayeh
No, _mm_setcs is to set a control register of SIMD instructions equipped in CPUs.
Also, as I don't observe the same phenomenon when I run the same code in a GPU,
it will be helpful if you could report what you did and what you observed in detail.

@soramichi Below you can see the log of my code while training
train rcnn after 0.10 hours: 001/0500 >>  loss:0.1925  ap:0.0420
train rcnn after 0.21 hours: 001/1000 >>  loss:0.1595  ap:0.0509
train rcnn after 0.31 hours: 001/1500 >>  loss:0.1581  ap:0.0535
train rcnn after 0.42 hours: 001/2000 >>  loss:0.1534  ap:0.0551
train rcnn after 0.53 hours: 001/2500 >>  loss:0.1550  ap:0.0619
train rcnn after 0.65 hours: 001/3000 >>  loss:0.1523  ap:0.0641
train rcnn after 0.75 hours: 001/3500 >>  loss:0.1503  ap:0.0688
train rcnn after 0.88 hours: 001/4000 >>  loss:0.1471  ap:0.0677
train rcnn after 1.03 hours: 001/4500 >>  loss:0.1495  ap:0.0813
train rcnn after 1.19 hours: 001/5000 >>  loss:0.1438  ap:0.0804
train rcnn after 1.34 hours: 001/5500 >>  loss:0.1454  ap:0.0846
train rcnn after 1.49 hours: 001/6000 >>  loss:0.1484  ap:0.0884
train rcnn after 1.65 hours: 001/6500 >>  loss:0.1494  ap:0.0880
train rcnn after 1.82 hours: 001/7000 >>  loss:0.1454  ap:0.0908
train rcnn after 1.98 hours: 001/7500 >>  loss:0.1463  ap:0.0948
validation rcnn >>  loss:0.1957  ap:0.1162
train rcnn after 0.30 hours: 002/0500 >>  loss:0.1432  ap:0.1104
train rcnn after 0.64 hours: 002/1000 >>  loss:0.1381  ap:0.1110
train rcnn after 1.01 hours: 002/1500 >>  loss:0.1397  ap:0.1116
train rcnn after 1.37 hours: 002/2000 >>  loss:0.1444  ap:0.1125
train rcnn after 1.75 hours: 002/2500 >>  loss:0.1420  ap:0.1191
train rcnn after 2.13 hours: 002/3000 >>  loss:0.1420  ap:0.1094
train rcnn after 2.52 hours: 002/3500 >>  loss:0.1434  ap:0.1166
train rcnn after 2.90 hours: 002/4000 >>  loss:0.1413  ap:0.1219
As you can see, 500 iterations initially takes 0.1 hours while this number increases to 0.16 at the last 500 instances of the first epoch. Beginning of the second epoch, it takes 0.3 hours for 500 iterations which continuously increases to 0.48. I am using chainer 2.0.0 and cupy <IP_ADDRESS>. Clearly, training is drastically slowing down despite I thought it should take less time due to caching of IO. Can a CPU bottleneck grow in time? I am using iterators.MultiprocessIterator but I can see that GPU utilization fluctuates.

Well obviously your case includes too much factors and the problem cannot be really clear.
I recommend you to do (1) make the case simpler to dig the real problem (for example making your network smaller, using only 1 GPU, ...) and (2) profile your code after it has been made sufficiently simple.
About the denormal numbers discussed in this issue, you can see if they appear in your network by dumping the parameters from the network with params method.

Update: I noticed that 1) each instance which iterator creates, is very large (~ 200 MB) as I am dealing with videos and 2) I do not use ~25% of read data (e.g I read some images from disk but never use them due to some sub-sampling).
Modifications: I simply reduced the number of frames per video (e.g do not read images that you won't use later) and now each instance is approximately 10 MB. I do not see growing execution time anymore. It is almost constant after 4 epochs and I tried it on three different machines. This is with exact same network but with a lighter iterator load and no unnecessary IO.
Next: As soon as I have some time, I will do the recommended profiling.

@niboshi said they "reopen the issue. It should be closed only after the fix is merged to the code". Closing staled issues makes the status look cleaner but it actually helps nothing.

Yes, this issue should be kept open.
(Please consider the stale bot as a moderate notification of forgotten issues. It's completely up to those participated whether issues are to be closed or not. Just say something and the stale label will be canceled.)

I made a Python package called daz. It has function that control CPU flags.


Add support for php7.4

Changes to match the internal changes for PHP 7.4

There is one issue. Although the extension compiles, classes and their methods are not visible in PHP space. I've confirmed this with the Examples/CppClassesInPhp as well as my own module. I'm not sure why that is the case. I've added Php::Public to all .method() calls but since the class isn't there (as per get_declared_clases()) it doesn't really do anything.

So it looks like some flags have changed, I'm not sure if my solution is the correct fix however I've seen other extensions doing the same with the ce_flags. Instead of assigning directly its bitwise assigned and then the classes are now visible. So either that is the fix or the ClassType constants need to be updated. There is so much different between 7.3 and 7.4 in zend_compile.h I wasn't sure what should be done.

Looks like lots #define's for ZEND_ACC_PUBLIC etc values have changed in this commit: https://github.com/php/php-src/commit/0fbd2e6a168a5cfacec6c44f4c179879a52428f3#diff-bb1c0392a5de04576925c02a7c078dc1
So I'm guessing my |= (int)_type; is incorrect and what actually needs to happen is a change to classtype.h however when looking at zend_compile.h I can't 100% be sure that the numbers set there correspond to the old zend_compile.h. I think this is the last thing to solve for this to work with php 7.4.
Some insight would be great. Even comments in classtype.h on how the values were calculated or what constants they were derived from would be great.

Ok, so I've dug a bit more and found the root cause of the issue.
In PHP 7.4 zend_API.c the function that registers classes there are a number of constants being or'd.
In PHP 7.3 zend_API.c has fewer options being set.
So perhaps my |= (int)_type; may be the appropriate solution. However its also possible that the ClassType values are updated to the combination of their value and the defaults in the zend_API.c

mkdir -p shared/common mkdir -p shared/zend g++ -Wall -c -std=c++11 -fvisibility=hidden -DBUILDING_PHPCPP -Wno-write-strings -MD -g php-config --includes -fpic -o shared/zend/classimpl.o zend/classimpl.cpp zend/classimpl.cpp: In static member function ‘static int Php::ClassImpl::getClosure(zval*, zend_class_entry**, zend_function**, zend_object**)’: zend/classimpl.cpp:307:35: error: ‘zend_empty_string’ was not declared in this scope      function->function_name     = zend_empty_string;            // should not be null, as this is free'ed by zend when doing exception handling                                    ^ make: *** [shared/zend/classimpl.o] Error 1
why

I'm not sure why that is there, I've noticed it but haven't dug into it

So I dug a bit more and it looks like I was confusing the class visibility with the method visibility. I need to look at modifiers.cpp I think.

I confirmed with last dev src
$ php -dextension=./test.so test.php
PHP Warning:  Invalid access level for Class1::__construct() - access must be exactly one of public, protected or private in Unknown on line 0
PHP Warning:  Invalid access level for Class1::method1() - access must be exactly one of public, protected or private in Unknown on line 0
OK

$php -v
PHP 7.4.0-dev (cli) (built: Oct  2 2019 22:33:30) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0-dev, Copyright (c) Zend Technologies

$

#include <phpcpp.h>

class Class1 : public Php::Base
{
	public:
		Class1() = default;
		~Class1() = default;

		void __construct() { printf("__construct\n"); }

		void method1() { printf("method1\n"); }
};

extern "C" {

    PHPCPP_EXPORT void *get_module()
    {
        // Register
        static Php::Extension extension("test", "1.0");

        // Create class
		Php::Class<Class1> class1("Class1");
			class1.method<&Class1::__construct>("__construct");
            class1.method<&Class1::method1>("method1");

		extension.add(std::move(class1));

        // return
        return extension;
    }
}

I'm investigating why too. You got a nice direction. However, your changes works fine

Hey @scorninpc yeah so I've re-pushed with my latest changes. It doesn't fix the issue but I think is required. I've based it off the difference of Zend/zend_compile.h in php from 7.3 to 7.4 branch.
https://pastebin.com/FXBPt7U1
This shows that PHP changed the values for public, protected, private etc. However with this change I still get the errors. I haven't tracked the code setting the actual php visibility flag for a class method but the error message you get on the console will take you to where it is issued in the php-cpp file. I haven't had time to finish looking at that.
Any additional insight/help on this would be awesome

Thank you to start it. I'v small time too, but i'm investigating the php-src. I'v see this change on constant of visibility types, changed, but nothing to.
I'll keep you alive

The visibility modifiers for PHP 7.4 weren't applied  because the PHP_VERSION_ID constant wasn't defined for files in the  common target. PR https://github.com/NobletSolutions/PHP-CPP/pull/1 fixes the issue by using the appropriate include flags and including the php header files.

@danog's patch indeed fixes the issue for me. I've incorporated it, squashed it and pushed here. Our CI now seems to work with PHP74 and the extension we wrote based off php-cpp...  Merging this would be great with a new patch release.

@gnat42 Trying to build this, however I receive many compilation errors.
g++ -Wall -c -std=c++11 -fvisibility=hidden -DBUILDING_PHPCPP -Wno-write-strings -MD -g 'php-config --includes' -fpic -o shared/zend/inivalue.o zend/inivalue.cpp In file included from zend/includes.h:120,                  from zend/inivalue.cpp:8: zend/callable.h: In constructor ‘Php::Callable::Callable(Php::ZendCallback, const char*, const Arguments&)’: zend/callable.h:56:18: error: ‘struct _zend_internal_arg_info’ has no member named ‘is_variadic’
I've attached a full build log here: https://pastebin.com/MGpWKVSd
PHP 7.4.0 (cli) (built: Nov 30 2019 10:43:49) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies     with Xdebug v2.8.1, Copyright (c) 2002-2019, by Derick Rethans
Any thoughts?

I can't say I've ever seen an error like that in trying to get this to build against php 7.4.0.
I just rebuilt php-cpp against 7.4.0 without issues. I've pasted the patch I was using and the build logs:
Build Log: https://pastebin.com/0DzU9bLw
Patch: https://pastebin.com/jTMVmzCM

Works a lot fine, why no merge?

Ping please merge

Please, merge, we do need 7.4 support, your work is highly appreciated.

Is this project dead?

This project are dead by author, but people are making that work. I think someone need to create a new project to make that updated. I'm non-git user, so if anyone can to that better, i help

This branch works very well thank you! :bow:

The dev is away alot time. I'm mergeing branchs here https://github.com/scorninpc/PHP-CPP until the author appears

The dev is away alot time. I'm mergeing branchs here https://github.com/scorninpc/PHP-CPP until the author appears

It is a pity that the author went into inactive, I hope he is doing well.
@scorninpc I've used the fork in the extension, and everything seems to be working fine.
https://travis-ci.com/yaroslavche/phptdlib/jobs/283203070
$ php --version
PHP 7.4.3-dev (cli) (built: Jan 23 2020 12:06:04) ( ZTS )

Could you check also #399 please?

The dev is away alot time. I'm mergeing branchs here https://github.com/scorninpc/PHP-CPP until the author appears

Man, you're awesome. Rebuilt php-tdlib with your fork. Works like a charm.

The dev is away alot time. I'm mergeing branchs here https://github.com/scorninpc/PHP-CPP until the author appears

Man, you're awesome. Rebuilt php-tdlib with your fork. Works like a charm.

Thank you, but i'm only a "merger" hahhhah, thanks for all community. When main dev appear I send only one pull request

@EmielBruijntjes Any plans for a new release with this patch applied?


Dynamic config object

What if we could use drivers dynamically, that's to say we can change authenfiticated user in case of FTP, AWS Driver for instance in runtime
Imagine my application need to store data to users ftp, so with the current config object I dont see any way to change the authentification credentials
Would be good if al driver with authentification provides a method with(credentials|config) so that we can change dynamically configuration object, or maybe the Storage manager provide a way to change the configuration when getting the driver instance in the method disk(name)

Hey @molobala! 👋
Would be happy to accept a PR that manage this 👍

Closing since no answer from issue reporter.


feat: Add support for windows cli

I think there is still some work to do in optimize go ( specifically around XDG_HOME and Kubectl binary name) , but login and generate install work.
Didn't have a Kubernetes cluster on windows to test with :D
Signed-off-by: Brad Beam<EMAIL_ADDRESS>

Not a fan of this because we don't have the capacity to test it, in the past we have said you should just use the Docker image for the CLI on Windows (similar to what we do to build the Helm chart).
I'm glad the generate install works with the embedded file system stuff, that would have been a concern.
Hopefully optimize-go isn't doing too much with file paths aside from the initial determination of the path, however like you said we probably need a platform specific alternative to XDG_CONFIG.
The run command output should be tested (hopefully the libraries handle this for us, but needs testing).
Experiment generation isn't fully exposed anymore, however in a few places I believe it is dependent on the "path" annotation formatting. I think we are good with using filepath. with those values, but again, it isn't tested.
Actions should be uploading built artifacts (e.g. here; it's worth noting actions/upload-artifact might support better syntax for uploading multiple artifacts since those Actions were first written.


Add support for other input types

I’d say adding support for at least input[type=“color”] and input[type=“range”] would make the plugin twice as useful as it is now.
input[type=“file”] would also be cool but I’m not sure how much can you style the button and not loose the ability to display the selected file name without using any JS.
Then there’s all those inputs for date, time, week, month… Not even sure what could be done for those (I’ve never styled them without using any JS library). Just mentioning them in case someone else sees this and has some experience doing it or something.

I wouldn’t mind looking into it this evening. @adamwathan interested in reviewing a PR for this in the near future?

FWIW I have this in my CSS:
.form-input[type=file] {
  padding-top: calc(0.5rem - 3px);
  padding-bottom: calc(0.5rem - 3px);
}

👍 for range input type.

Has good browser support https://caniuse.com/#feat=input-range

@khuongduybui @GeoffSelby I was wondering if you made any local progress in your project towards adding support for range type that you could share?

@viperfx I haven't had the time to dig too deep yet. I have some time later today to try and figure it out. I know a range input is the only of the 3 listed by OP that doesn't require JS to work with custom styles. This article may be helpful until then.

Leaving this from an old project where I had to customize input[type="range"]. I'm sorry I don't have a cleaner version (without vendor prefixes), but maybe it will help:
/* Input Range */
input[type=range] {
  -webkit-appearance: none;
  width: 100%;
  height: 40px;
  padding: 8px 0;
  position: relative;
}

input[type=range]::after {
  content: '';
  position: absolute;
  right: 0;
  top: calc(100% - 36px);
  bottom: calc(100% - 36px);
  display: inline-block;
  width: calc(100% / 1.6);
  background: #84c1f5;
  z-index: 0;
}

input[type=range] *,
input[type=range]:focus,
input[type=range]:focus-within {
  outline: none;
}

input[type=range]::-webkit-slider-runnable-track {
  width: 100%;
  height: 16px;
  cursor: pointer;
  box-shadow: 0 0 0 #0342ad, 0 0 0 #034cc6;
  background: #0342ad;
  border-radius: 0;
  border: 0 solid #0342ad;
}

input[type=range]::-webkit-slider-thumb {
  transform: translateZ(0);
  box-shadow: 0 0 0 #0342ad, 0 0 0 #034cc6;
  border: 4px solid #0342ad;
  height: 32px;
  width: 32px;
  border-radius: 50px;
  background: #fff;
  cursor: pointer;
  -webkit-appearance: none;
  margin-top: -8px;
  position: relative;
  z-index: 1;
}

input[type=range]:focus::-webkit-slider-runnable-track {
  background: #0342ad;
}

input[type=range]::-moz-range-track {
  width: 100%;
  height: 16px;
  cursor: pointer;
  box-shadow: 0 0 0 #0342ad, 0 0 0 #034cc6;
  background: #0342ad;
  border-radius: 0;
  border: 0 solid #0342ad;
}

input[type=range]::-moz-range-thumb {
  transform: translateZ(0);
  box-shadow: 0 0 0 #0342ad, 0 0 0 #034cc6;
  border: 4px solid #0342ad;
  height: 32px;
  width: 32px;
  border-radius: 50px;
  background: #fff;
  cursor: pointer;
}

input[type=range]::-ms-track {
  width: 100%;
  height: 16px;
  cursor: pointer;
  background: transparent;
  border-color: transparent;
  color: transparent;
}

input[type=range]::-ms-fill-lower {
  background: #0342ad;
  border: 0 solid #0342ad;
  border-radius: 0;
  box-shadow: 0 0 0 #0342ad, 0 0 0 #034cc6;
}

input[type=range]::-ms-fill-upper {
  background: #0342ad;
  border: 0 solid #0342ad;
  border-radius: 0;
  box-shadow: 0 0 0 #0342ad, 0 0 0 #034cc6;
}

input[type=range]::-ms-thumb {
  transform: translateZ(0);
  box-shadow: 0 0 0 #0342ad, 0 0 0 #034cc6;
  border: 4px solid #0342ad;
  height: 32px;
  width: 32px;
  border-radius: 50px;
  background: #fff;
  cursor: pointer;
}

input[type=range]:focus::-ms-fill-lower {
  background: #0342ad;
}

input[type=range]:focus::-ms-fill-upper {
  background: #0342ad;
}

There is an issue with styling <input type="range"> aka slider due to it contains shadow dom e.g. ::webkit-slider-thumb. There is an example of slider based on tailwindcss that is similar to default blue button from examples.
Html:
<input type="range" class="appearance-none w-full h-1 bg-gray-400 rounded outline-none slider-thumb">

Css:
.slider-thumb::-webkit-slider-thumb {
    @apply appearance-none w-6 h-6 rounded-full bg-blue-500 cursor-pointer;
}

.slider-thumb::-webkit-slider-thumb:hover {
    @apply bg-blue-700;
}

We could also include here <input type="date"> which is also missing.


Add favicon to /donate page

There should be a favicon on the donation page
Related to #52

@hoganri it looks like there was a bit of overlap on this one. I hope that this does not discourage you from further contribution, there are still plenty of stuff we can do to improve the website, so if you have any ideas, feel free to open a new issue and we can discuss it.


Ensure a valid langauge is always used

This fixes an issue where user might select a new language, then revert to older version of mod that doesn't have that language; it would try using the previously selected language, not find it, and crash.

This PR ensures default language will be used in any case where selected language is not available.
Note, however, this will obviously only fix the issue from version 11.0-alpha11 and above. There is no way to retroactively fix it on older versions of the mod.

Unfortunately your fix doesn't change anything :wink: You can make quick test: change manually your current language code to xx in Global config and run the game :smiley:

Ah, I should have also checked the method below... will update PR in a few moments after doing some extra testing.

I suggest adding new method to Translation class which will set current code to null if `(currentCode != null && currentCode != "en" && GetValidLanguageId(currentCode) == "en") Save and reload Global config and call this method as first in method which builds options menu

Here is stack trace, will update PR once fixed.
KeyNotFoundException: The given key was not present in the dictionary.
  at System.Collections.Generic.Dictionary`2[System.String,System.Collections.Generic.Dictionary`2[System.String,System.String]].get_Item (System.String key) [0x00000] in <filename unknown>:0
  at TrafficManager.UI.Localization.LookupTable.Get (System.String lang, System.String key) [0x00000] in <filename unknown>:0
  at TrafficManager.UI.Localization.LookupTable.Get (System.String key) [0x00000] in <filename unknown>:0
  at TrafficManager.State.OptionsGeneralTab.T (System.String key) [0x00000] in <filename unknown>:0
  at TrafficManager.State.OptionsGeneralTab.MakeSettings_General (TrafficManager.UI.Helpers.ExtUITabstrip tabStrip) [0x00000] in <filename unknown>:0
  at TrafficManager.State.Options.MakeSettings (UIHelperBase helper) [0x00000] in <filename unknown>:0
  at TrafficManager.TrafficManagerMod.OnSettingsUI (UIHelperBase helper) [0x00000] in <filename unknown>:0
  at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (object,object[],System.Exception&)
  at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in <filename unknown>:0
Rethrow as TargetInvocationException: Exception has been thrown by the target of an invocation.
  at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in <filename unknown>:0
  at System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) [0x00000] in <filename unknown>:0
  at OptionsMainPanel.AddUserMods () [0x00000] in <filename unknown>:0
UnityEngine.DebugLogHandler:Internal_LogException(Exception, Object)
UnityEngine.DebugLogHandler:LogException(Exception, Object)
UnityEngine.Logger:LogException(Exception, Object)
UnityEngine.Debug:LogException(Exception)
OptionsMainPanel:AddUserMods()
OptionsMainPanel:CreateCategories()
OptionsMainPanel:Awake()
UnityEngine.Object:Internal_CloneSingle(Object)
UnityEngine.Object:Instantiate(GameObject)
ColossalFramework.UI.UIDynamicPanels:Init(UIView)
ColossalFramework.UI.UIView:Awake()

Also updated global config docs in wiki

It might look a bit different on current Labs and Stable :wink:

In latest commit, I made following changes:

Internal IsLanguageCodeVerified, defaults to false, tracks whether language is validated in the current C:SL app session
When calling GetCurrentLanguage(), if we've not yet verified the language code it does all the relevant checks, updating GlobalConfig.Instance.LanguageCode in the process (to a valid language code)

Subsequent calls to GetCurrentLanguage() shortcut to just returning GlobalConfig.Instance.LanguageCode as they know it's been validated by that point

Also, I didn't get any errors on TM:PE STABLE (and I assume LABS will be similar).
I think the issue only occurs on TM:PE 11.0-alpha7 to 11.0-alpha10. In other words, the error was specific to the new localisation system, as far as I can tell.

@kvakvs While I'm in here editing stuff, what is the purpose of GetMenuWidth() in Translation.cs? And how were the magic numbers derived? I'd like to add a code comment just to clarify that for anyone editing in future.

@aubergine10 This is legacy function, I did not create it. It is used by DebugMenuPanel.[Start, CreateTextField, CreateButton]

Committed some changes that hopefully fix the outstanding issues.
It now works as follows:

When first used, it will do full verification
If user changes game locale, it will first check if TM:PE is using game language, and if so it will do the game language-specific verification
If user changes TM:PE language setting, it will update as applicable (game language or specific TM:PE language) doing verification in the process
After any change to language (game or TM:PE) the current, verified language code, is cached so translation .Get() calls no longer incur per-call verification overheads.

@kvakvs any comments before I merge this?

The version jump from alpha4 to alpha11 is confusing, otherwise i'm ok with that

@aubergine10 I don't support level crossing (#575). I just added code to show error message regarding this unsupported scenario.


[visualizer-admin] Minor css edit in visualizer

Initially:

Now:

Coverage remained the same at 100.0% when pulling 6560a4292b2548a068e855c4908ff0341a049c15 on rohithasrk:switcher-css-admin into e7e555594a5161e9081e273b3cf24c441123e6f0 on netjson:master.

Coverage remained the same at 100.0% when pulling 6560a4292b2548a068e855c4908ff0341a049c15 on rohithasrk:switcher-css-admin into e7e555594a5161e9081e273b3cf24c441123e6f0 on netjson:master.


WSL 2 Network configuration

I have 2 computers, both with WSL 2 installed, on the same version at the time (Novemeber 2019). WSL 2 networking only works on 1 of them, and I don't understand why. I am aware of many network open issues, but nothing explains why the networking works on my one PC and not the other.
I have tried turning off firewall, editing resolv.conf, reset networking, uninstalling / installing WSL 2 & virtual machine platform and various other prosposed solutions but nothing has worked yet. If I can find the difference between the 2 PC's, I could find the fix on the broken PC which I'm sure will help microsoft as well.
I don't know if this is a problem on WSL2 side or not. If it works on 1 PC, there must be something on the other PC that prevents the network from working in WSL 2, however, when I convert back to WSL1 the newtorking works.
PC 1: Working WSL 2 (Slow ring, latest version) Work laptop
PC 2: Broken WSL 2 (Fast ring, currently build 19569) Home laptop
Both have windows defender firewall turned on. I have tested both PC's on the same wifi network, PC 1 still works. No VPN used on either PC's.
The error I get on PC 2 when I try run $ sudo apt update:
Err:2 http://archive.ubuntu.com/ubuntu bionic InRelease                                                                                Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1560:8001::11). - connect (101: Network is unreachable) Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1560:8001::14). - connect (101: Network is unreachable) Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8001::21). - connect (101: Network is unreachable) Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8001::17). - connect (101: Network is unreachable) Could not connect to archive.ubuntu.com:80 (<IP_ADDRESS>), connection timed out Could not connect to archive.ubuntu.com:80 (<IP_ADDRESS>), connection timed out Could not connect to archive.ubuntu.com:80 (<IP_ADDRESS>), connection timed out Could not connect to archive.ubuntu.com:80 (<IP_ADDRESS>), connection timed out Could not connect to archive.ubuntu.com:80 (<IP_ADDRESS>), connection timed out Could not connect to archive.ubuntu.com:80 (<IP_ADDRESS>), connection timed out

Networking information for both laptops looks like it is set up the same way (This is all default):
PC 1 vEthernet:
Ethernet adapter vEthernet (WSL):

Connection-specific DNS Suffix .   : No
Autoconfiguration Enabled . . . .   : Enabled

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet <IP_ADDRESS> netmask <IP_ADDRESS> broadcast <IP_ADDRESS>
inet6 fe80::215:5dff:fe7b:4a98 prefixlen 64 scopeid 0x20<link>
ether 00:15:5d:7b:4a:98 txqueuelen 1000 (Ethernet)
RX packets 1180920 bytes<PHONE_NUMBER> (1.1 GB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 401318 bytes 153760624 (153.7 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

PC 2 (Broken WSL 2) vEthernet:
Ethernet adapter vEthernet (WSL):

   Connection-specific DNS Suffix  .   : No
   Autoconfiguration Enabled . . . .   : Enabled

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet <IP_ADDRESS>  netmask <IP_ADDRESS>  broadcast <IP_ADDRESS>
        inet6 fe80::215:5dff:fe14:20f6  prefixlen 64  scopeid 0x20<link>
        ether 00:15:5d:14:20:f6  txqueuelen 1000  (Ethernet)
        RX packets 124  bytes 11948 (11.9 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 15  bytes 1146 (1.1 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

PC 2 resolve.conf
This is the default, and changing that breaks DNS resolving.
nameserver <IP_ADDRESS>

What other information can I provide to get any clues as to why this doesn't work in PC 2?
Thanks in advance.

Finally, this is solved in my case.
In powershell I ran the cmd Get-NetNat to list NAT networks. I found that I had 3 NAT networks set up (probably from previous VM's). I ran the Remove-NetNat cmd which has fixed the no network issue in my case.


Sgx properties

This adds platform property verification to Gramine enclaves

It looks you decided to logically separate Gramine with and without platform evidence. This might be a simplification for now. But the result is that we either have to have platform properties in the policy or not. I don't think this is the right way to go. The choice should be handled given whether platform properties are present in the policies and this alone.
The current code will fail if I don't supply any platform properties. Additionally, I think we might have a bug in constructing the platform properties. If we remove a property from the policy (e.g., remove qeSVN, which should be valid), the verification should just treat it as if the specific property does not matter. However, the current code fails the verification. I'll dig deeper to see what went wrong.


Nice! I have downloaded all images data

Thanks for your work!  I have downloaded all images of YouTube-GDD and uploaded them to the google drive. Welcome to access！

Also, thanks for your contribution to the community!


Unable download Highlights and IGTV with the KeyError "edge_felix_video_timeline"

Describe the bug
Unable to download highlights and IGTV with the error
To Reproduce
Running the command instaloader username --highlights --igtv --load-cookies=firefox
Expected behavior
Able to download Highlights and IGTV of that profile
Error messages and tracebacks
Retrieving IGTV videos for profile wanna._b.
Traceback (most recent call last):
  File "C:\Users\ARTHUR\AppData\Roaming\Python\Python312\site-packages\instaloader\structures.py", line 969, in _metadata
    d = d[key]
KeyError: 'edge_felix_video_timeline'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "C:\Users\ARTHUR\AppData\Roaming\Python\Python312\Scripts\instaloader.exe\__main__.py", line 7, in <module>
  File "C:\Users\ARTHUR\AppData\Roaming\Python\Python312\site-packages\instaloader\__main__.py", line 541, in main
    _main(loader,
  File "C:\Users\ARTHUR\AppData\Roaming\Python\Python312\site-packages\instaloader\__main__.py", line 283, in _main
    instaloader.download_profiles(profiles,
  File "C:\Users\ARTHUR\AppData\Roaming\Python\Python312\site-packages\instaloader\instaloader.py", line 1478, in download_profiles
    self.download_igtv(profile, fast_update=fast_update, post_filter=post_filter,
  File "C:\Users\ARTHUR\AppData\Roaming\Python\Python312\site-packages\instaloader\instaloader.py", line 1292, in download_igtv
    igtv_posts = profile.get_igtv_posts()
                 ^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ARTHUR\AppData\Roaming\Python\Python312\site-packages\instaloader\structures.py", line 1232, in get_igtv_posts
    self._metadata('edge_felix_video_timeline'),
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ARTHUR\AppData\Roaming\Python\Python312\site-packages\instaloader\structures.py", line 975, in _metadata
    d = d[key]
        ~^^^^^
KeyError: 'edge_felix_video_timeline'

Instaloader version
4.11

Does IGTV even exist yet? I do not see that tab anymore in that profile (or in any other).
There are reels, which sometimes appear in the profile and sometimes not. Is that what you mean?
For the record, downloading of reels has been requested, but is not implemented yet: #812

Roger that
But I got the same error message while trying to download highlights

how do i know which metadata pertains to igtv? i cannot put print statements for debugging because i dont know which variable stores the response from IG


vm-informant binary size is big

It's ~40MB, and probably doesn't need to be? At a glance, depending on various k8s.io packages (both directly and indirectly) is probably not helping.

The vm-informant no longer exists since #442, so this issue is no longer relevant.


Wrong import of Scipy´s Simpson method

It seems like the naming of that method has changed from "simps" to "simpson". In the file spectral.py the import is still using the old name.
In spectral.py: from scipy.integrate import simps
New way: from scipy.integrate import simpson as simps
or change all occurrences to simpson

See https://github.com/raphaelvallat/yasa/pull/171


Adds missing tests for envoy access logs options

Fixes #475
Signed-off-by: Amarnath<EMAIL_ADDRESS>

Thank you for reviewing my changes @davecheney. I have addressed your review comments and pushed the changes again.


Ability to change text colour using config.text_color

Description of proposed feature

To change the background colour, config.background_color=COLOUR can be used. Adding support to change the text colour would be convenient when changing the background colour, and the default white text doesn't show well.
How can the new feature be used?

Maybe a command like config.text_color=COLOUR
Additional comments

I see the need - it would be great to set the color of a type of Mobject exactly once in the code or stylesheet configuration.
However, the dev team has decided that config is not the right place for background_color and we want to deprecate it soon. There isn't yet a solidified plan for a "stylesheet" type interface, though I agree I'd like one.
Last time this came up on Discord, the two kinds of workarounds were subclassing Tex with different defaults or defining a partial function that modifies kwargs if a value is unset.
If you want to take on a larger project, feel free to suggest some alternatives and start developing one of them. I'd be happy to have stylesheets in Manim.

One positive thing about setting so many attributes as keyword arguments is that you can easily make your own version of a mobject constructor with different defaults:
def myText(*args, color=PURPLE, **kwargs):
    return Text(*args, color=color, **kwargs)

and the use myText instead of Text.

One possibly better solution might be to add a new config property config.default_mobject_color which would replace the currently hardcoded color value of WHITE in Mobject.__init__:
https://github.com/ManimCommunity/manim/blob/dbb62129b620d17d1828aefd5c6e1ade3d9e0c9e/manim/mobject/mobject.py#L67

I think I'm a fan of the config.default_mobject_color idea, but should it also override all colours for mobjects? There are quite a few which have colourful defaults (RED for Circle). One way of doing it is to remove all default colours and have everything be WHITE


implement abstract automatic training manager

no database stuff, use pd.DataFrame as your interaction layer.

Example: https://github.com/AllenNeuralDynamics/aind-foraging-behavior-bonsai-automatic-training/blob/ef3ee668ad0532d509a7e61160d68df7b68c15a5/code/aind_auto_train/auto_train_manager.py#L27

@jwong-nd, notes from 3/26:

update to ensure that multiple policies can be active at once
@bruno-f-cruz said something about tuple[Policy,Stage] "is for analysis" that I didn't understand
need to more extensive test cases (backwards transitions, manual transitions)
do we need policy constraints? need to discuss.

Basically make sure that the history output structure is formalized somewhere instead of a generic Tuple object. I suspect that people might want to use this for analysis.

Recently updated with multiple active policies, see bae0d32

Adding final tests in branch 'trainer-tests'

Testing complete

This is done, closing.


Ability to use several parameter files per stack

It would be nice if there would be an option to use several parameter files:
Our stacks belong to an application and an environmet - so i have a lot of parameters that are identical for the whole application (and all their stacks), some are the same for each stack of an environment and only some are stack specific.
So it would be nice to have a parameter file for all parameters that are shared by all stacks for the application, the environment and then for each stack. They could simple be merged together.
I thought of a custom parameter resolver for this - but i think merging them together would be more easy.

This behaviour reminds me of Puppet's Hiera implementation and I have a lot of opinions about that so bare with me :)
Firstly, it obscures the final value in use, such that it's not obvious (short of running the command) what the resulting value is. I would prefer, for improved experience of the software from someone unfamiliar with how things are setup, that the parameter in use is obvious.
That does not mean though we cannot add some kind of "pointer" though. If some value is re-used a lot, pointing to some "constant" value in another parameter file seems logical and easy for a person unfamiliar with the environment to follow.

Since version 2.7.0 and added in #338, StackMaster provides the ability to explicitly specify multiple parameter files for a given stack in the stack_master.yml configuration file. This explicit definition will allow you to configure your stacks and share parameter files as you have suggested.


pykafka.exceptions.SocketDisconnectedError: when call function broker.list_groups().groups.keys()

Hello,
The environment is as below:
PyKafka version:
pykafka-tools (0.1.8)  - The pykafka-tools extend the functionalities of python pykafka module.
pykafka (2.7.0)        - Full-Featured Pure-Python Kafka Client
Kafka version: <IP_ADDRESS>
And I used python 2.7 and when I call function as below:
client = KafkaClient(hosts=kafka_brokers)
topics = client.topics
brokers = client.brokers
consumer_groups = []
for broker_id, broker in brokers.iteritems():
        consumer_groups = consumer_groups + broker.list_groups().groups.keys()

seems all work well except  broker.list_groups().groups.keys()
the stack trace message are below:
Traceback (most recent call last):
  File "/opt/kafka_consumer_offset_check.py", line 49, in <module>
    consumer_groups = consumer_groups + broker.list_groups().groups.keys()
  File "/usr/lib/python2.7/site-packages/pykafka/broker.py", line 45, in wrapped
    return fn(self, *args, **kwargs)
  File "/usr/lib/python2.7/site-packages/pykafka/broker.py", line 544, in list_groups
    return future.get(ListGroupsResponse)
  File "/usr/lib/python2.7/site-packages/pykafka/handlers.py", line 74, in get
    raise self.error
pykafka.exceptions.SocketDisconnectedError: <broker ip:9092>

And I can guarantee  to connect broker ip and port, and the same code works well when request kafka 1.0 version.

@foreversunyao The administrative API, which contains the ListGroupsRequest you're trying to use, is only supported in Kafka >=0.10. Since you're using 0.8, it won't work.


Error on yarn add on node 14.17.0

Error on yarn add on node 14.17.0
error<EMAIL_ADDRESS>The engine "node" is incompatible with this module. Expected version ">=18.16.0". Got "14.17.0"
error Found incompatible module.
MacOS Sonoma

switch to latest node LTS available

yes, it will fix the problem. But some of my running adonis projects built on 14.17, and updating node version brings a lot of errors and warnings.
Seems like no solutions (?)


Remove our special aiias handling as Calcite 1.13 should support this directly

Currenty we process and manage aliases in sql ourselves via manipulation in the Calcite parser interface.  We should not have to do this as Calcite 1.13 should now allow for aliases in group by etc..
Remove our code and confirm all works with native Calcite.

Is this fixed by efd1e5504aa482e9c39a169dd7f6085d9b704189?

This is closed with https://github.com/mapd/mapd-core/commit/efd1e5504aa482e9c39a169dd7f6085d9b704189


Add new tab followed by $('.toBeTabbedClass').refresh() fails

When dynamically adding a new tab via ajax (done by adding a new  and  entries in the appropriate place) and followed by $('.toBeTabbedClass').refresh() fails to add the new tab. The result is un-styled  and  data following the current  and  data's respectively.

Closing this in favor of #11


Flake and pep8 error fixing (WIP)

This is gonna take for ever...

Forever is hereby redefined.

Jesus mother of all that is holy. What drugs are you on?

One full can of coffee and a couple of beers :+1:


fix: integration test formatting

The latest release version of the parachains-integration-tests tool (v2.1) added yaml test file format validation (enforcement).

Seems to be issues with CI downloading ubuntu packages, probably due to some network outage. Will try again later...


Safari11.0.3 compatibility issue

upload:
Spring源码深度解析.pdf
download:
Spring%E6%BA%90%E7%A0%81%E6%B7%B1%E5%BA%A6%E8%A7%A3%E6%9E%90.pdf.html

That's a localization issue, which is outside of Spring's realm.


random yawing after takeoff

In simulation (make posix_sitl_default gazebo) the vehicle randomly yaws after an auto takeoff.

fixed in https://github.com/PX4/Firmware/pull/10208


Update precommit hooks & CI

Update precommit hooks
Replace lint and mypy CI workflows with a precommit task in the test workflow
Sort imports with ruff

Hi @gsakkis,
Thank you for the PR.
I think having a pre-commit check instead of separate MyPy and lint checks is good. However, it's better to have it in a separate GH action. It doesn't depend on Python or MongoDB versions, but it will run with each of them.
As often happens with formatter PRs, there are many conflicts. Could you please resolve them? Once you've done so, ping me on Discord before I merge anything else; this will help avoid creating more conflicts.

Hi @roman-right, I updated the PR and moved the precommit to a separate job. Thanks!

Thank you very much for your PR. Merged


bring error_bar into limit calculations

related to #433

This was actually fixed in #428. However, we will need to make sure that when #448 is completed, the absolute values for x and y should be used in limit calculations.


Crash

Version
3.0.9 (4d8d5d6)
Seed
R730-W41W-TN584RCJUWB00LR6UUR0000000000WZZ02Y
Scenario
RE 3 (Jill)
Player Character
Claire
What happened?
Game crashed upon entering the large area with the bus (first pass through).  In og, theirs normally 3 dogs on first pass, and crows bust through window on way back for pharmacy trip.  Unfortunately, i don't have a saved game.

02_2023-07-25 00^10.17.zip
The save file

When I loaded the saved game and jumped to 200, which I assume is the room you are referring to. I can't reproduce any crash.


I need to display image (loader) on button click in React-Native

Version
Tell us which versions you are using:

react-native-router-flux v4.?.? (v3 is not supported)
react-native v0.?.?

Expected behaviour
Actual behaviour
Steps to reproduce
For non-obvious bugs, please fork this component, modify Example project to reproduce your issue and include link here.
1.
2.
3.

Not related to RNRF.
Read the react-native docs or use Stackoverflow.


PEIS params : duration

Hello
I don't understand the
"duration" parameter of a PEIS technique.
It doesn't appears in  EC-lab development package doc  :
In this doc there is
vs_initial
vs_final
initial_voltage_step
final_voltage_step
duration_step
step_number
record_every_dT
record_every_dI
final_frequency
initial_frequency
sweep
Amplitude_Voltage
Frequency_number
Average_N_times
Correction
Wait_for_steady
Can you explain how this parameter works ?
It seems to be a timeout like, but it's difficult to estimate the duration of this kind of technique.
Thanks

I trys following settings (inxml in my soft) but a can't get more than 4 frequency result, despite that I set 10 points by decade.
<amplitude_voltage>0.1</amplitude_voltage>
<initial_frequency>1000000</initial_frequency>
<final_frequency>0.1</final_frequency>
<time_interval>1.5</time_interval>
<voltage>0</voltage>
<frequency_number>10</frequency_number>
<average_n_times>2</average_n_times>
<duration>1000</duration>

The duration parameter maps to the Duration_step PEIS parameter (Sec. 7.11.2 in the EC-Lab Development Package
User's Guide Version 6.00 – April 2017) which has the description of "Step duration in seconds". Does that help answer the question?

Due to the lack of activity in this thread I will close it. However, if you have any other issues, please feel free to open a new issue.


Using old version of universal_io library

This is not an issue but as you are using old version of universal_io, it is getting incompatible with cryptography ^2.0.1.  Although cryptography is not part of this library but most of the flutter apps uses this to support GCM encryption. If you update the universal_io to version 2.0.4 it will get resolved.

Part of pull request #27

Closing this since #27 addressed this and was merged and release in v1.0.0 of the package!

Is https://github.com/drenther/upi_pay/issues/38 relevant and important for you?
If yes, could you please respond to my twitter thread with UPI and NPCI handles included in your response asking how these must be solved and how it helps you? https://twitter.com/reeteshr08/status/1488746633068089345
@thakurmayur


[SPARK-49682][BUILD] Upgrade joda-time to 2.13.0

What changes were proposed in this pull request?
The pr aims to upgrade joda-time from 2.12.7 to 2.13.0.
Why are the changes needed?
The version DateTimeZone data updated to version 2024bgtz.
The full release notes: https://www.joda.org/joda-time/changes-report.html#a2.13.0
Does this PR introduce any user-facing change?
No.
How was this patch tested?
Pass GA.
Was this patch authored or co-authored using generative AI tooling?
No.

Thank you, @panbingkun and @LuciferYang .
Merged to master.


Why hydra github homepage crash when I visit ( while scrolling down)

I think every time I visit hydra github homepage, while scrolling down a half page,  the tab is crash, even my browser and whole system becomes no response ( I do wait for a long time(5 minutes) to recover ) ( I have experience that I have to restart my computer to recover )
I'm sure it happen many times. I don't know why hydra is special, Others github repositories are fine
Is that hydra have special contents?
os: windows7
chrome:Version 54.0.2840.71 m (64-bit)

Unofrtunately, I can't reproduce this issue with the same chrome version. We are only using standard markdown in the readme (try opening it on it's own here). What usually helps is setting up a new chrome profile or cleaning cookies/cache. If nothing helps, please contact GitHub support

(try opening it on it's own here).

The provided link is okay, no problem,  I tried open the that homepage in incognito is okay too
This time I tried open the hydra github homepage again, it is okay, no problem ( even though I don't know why )
Sorry if I report the issue at wrong place ) ( by the way, I send the feedbacks to the chrome too, before I create the issue here )

While I doing check the chrome version, I guess I just got an updated version ( when I doing verify above), So the problem may fixed by the new chrome version (Version 55.0.2883.87 m (64-bit))


feat: Favicon is updated based on status page logo

Description
Closes #483
Also partially #443
This is a proposed change to update the favicon of the status page to the configured logo of the status page.
It will automatically update whenever the logo is changed.
Minimal change to the code, no new dependencies, or database/backend changes. Just using the favico.js library that was added recently for the badge counter.
Type of change

User interface (UI)
New feature (non-breaking change which adds functionality)

Checklist

[x] My code follows the style guidelines of this project
[x] I ran ESLint and other linters for modified files
[x] I have performed a self-review of my own code and tested it
[ ] I have commented my code, particularly in hard-to-understand areas
[x] My changes generate no new warnings
[ ] My code needed automated testing. I have added them (this is optional task)

Simple and elegant solution!

Hey, just tried the new Beta release with this feature.
If i load the status page and have set a custom logo first the standard logo loads and then it updates to my custom logo, could you make it that it instantly is the custom logo and not uptime kuma standard logo?

Hi @mathiskir
The favicon should update as soon as the Logo on the page is loaded. The default favicon will be displayed before that happens.
Changing that behavior is not as trivial as the current solution, as far as I can tell. Might even not be possible at all, at least not if you want to have different icons per status page, because only when the info about the status page is loaded (eg the name of the icon) it can change the favicon. The original icon is loaded before any JavaScript is executed, I think (at least that is how it usually works in Angular).
So the only alternative would be having the default "no icon" icon of you browser before it changes to the desired one.


VJP support

Before submitting
Please complete the following checklist when submitting a PR:

[x] All new features must include a unit test.
If you've fixed a bug or added code that should be tested, add a test to the
tests directory!

[ ] All new functions and code must be clearly commented and documented.
If you do make documentation changes, make sure that the docs build and
render correctly by running make docs.

[x] Ensure that the test suite passes, by running make test.

[x] Add a new entry to the .github/CHANGELOG.md file, summarizing the
change, and including a link back to the PR.

[x] Ensure that code is properly formatted by running make format.

When all the above are checked, delete everything above the dashed
line and fill in the pull request template.

Context:
lightning.kokkos has native support for expval(H) in adjoint method now.
Description of the Change:
Benefits:
Possible Drawbacks:
Related GitHub Issues:

Have merged PR #31 into this PR to avoid CI failures.

Please review PR#31 first since PR#31 was merged into this PR.

Hi @multiphaseCFD, thank you for putting this together. Nice work so far!

Thanks @AmintorDusko for the review. Just updated based on your comments.

Thanks @vincentmr for the comments! Please check the updated code.

Thank you for your nice work, @multiphaseCFD! I have nothing more to include here.
Happy to approve!


Test method are interleaved at runtime when "dependsOnGroups" is used

Hi,
my application's test suite is based on testng 6.9.10 & uses a combination of classes which variously do and do not groups tests together.
When the entire suite is executed, tests are executed out of order. Ie. some tests in one class may be executed, then some tests in another class may be executed, before the remainder of tests declared in the first class are executed. I have forked the testng repo (see https://github.com/andrewah/testng) & put a test case together to demonstrate this in action - the files that I have added/changed are:
src/test/java/test/interleaving/TestInterleaving.java
src/test/java/test/interleaving/TestLegacyShredding.java
src/test/java/test/interleaving/TestPurging.java
src/test/resources/testng.xml
When the test is executed the tests are executed in the following order:
TestPurging/TestLoadRefData
TestLegacyShredding/testFileWithEmptyBody
TestLegacyShredding/testIncorrectHashValue
TestLegacyShredding/testIncorrectRecordCount
TestLegacyShredding/testSingleValidFile
TestPurging/TestShredAfterPurgeDate
TestPurging/TestShredEarlierThanPurgeDate
TestPurging/TestShredEqualToPurgeDate
TestPurging/TestShredRecordToError
TestPurging/TestShredRecordToFix
TestPurging/TestStandardiseData
TestPurging/TestLoadExtraRefData
TestPurging/TestStandardiseErrorRecord
TestPurging/TestPurge
I was expecting for the all of the tests in the "TestPurging" class to have been executed in consecutive order, but unfortunately that is not happening.
It would be great if you could look at the unit test I've put together and let me know if there is anything that can be done.
Thanks,
Andrew.

This looks like the expected output to me. According to Cedric in this google group thread the default behavior of preserving test order is ignored if other ordering mechanisms are used, such as dependsOnMethods/dependsOnGroups.
If you want to ensure that tests within the same test class are not being split up, you can use TestNG.setGroupByInstances(true), or group-by-instances="true" if using a testng.xml.

Thanks for the response, I'll take a look at the options that you've presented. We don't use a testing.xml - we just invoke our tests via gradle using either the "test" task (to run all tasks) or via the "--tests" switch (ti invoke a single, or a subset of the test suite).
It's disappointing to hear that this is the expected behaviour. To echo the sentiments of many commentators to #106 , the fact that I've declared dependencies between tests implies that the success/failure of a test will be dictated by the success/failure of tests which it depends upon. That is certainly the case for me, where I use testng to drive three consecutive days of test file loads into a database. Day 3 depends on day 2, & day 2 depends upon day 1.
It would be to hear from one of the core developers to find out whether the interleaving of test methods declared in different classes is truly the correct behaviour, or whether it is something that is going to be changed.
Thanks,
Andrew.

It would be great to hear from one of the core developers to find out whether the interleaving of test methods declared in different classes is truly expected/correct behaviour, or whether it is something that is going to be changed, and if it is going to be changed, when that will happen.

I'm already working on it, but I've no idea when something will be available because fixing the "issue" (which is not one) will open anothers: everything is about order and currently there is no priority rules between dependsOn, priority, preservOrder or groupByInstance.

Thank you for letting me know that it is being worked on. I do appreciate that any change must be preceded by an impact analysis, that it can take time to resolve issues & that it is difficult to predict when resolutions to issues will be released. It is reassuring to know that you are investigating, irrespective of when a resolution will be made available.
However, with all due respect, the interleaving of test methods declared in different classes is an issue for me, my team & the project that I'm leading. Based on issue #106 evidently others consider the interleaving of test methods to be an issue as well.
Thanks,
Andrew.


Faux pollutes implementation blocks that are not mocked

Not sure if if I'm using this crate ok, but given something like this:
#[cfg_attr(test, faux::create)]
pub struct MyStruct {
    pub something: i32,
}

impl MyStruct {
    pub fn new() -> Result<Self, Box<dyn std::error::Error>> {
        Ok(Self { something: 3 })
    }
}

I get the error struct `subscriber::MyStruct` has no field named `something` field does not exist in the unmocked MyStruct::new function
If I try to mock the impl too like:
#[cfg_attr(test, faux::methods)]
impl MyStruct {
    pub fn new() -> Result<Self, Box<dyn std::error::Error>> {
        Ok(Self { something: 3 })
    }
}

I get the error
mismatched types
expected enum `std::result::Result<mymodule::MyStruct, _>`
   found enum `std::result::Result<mymodule::_FauxOriginal_MyStruct, _>`

in the faux::methods proc attribute

Hi,
This is expected behavior. Once a struct has been tagged with faux::create, any function that refers to its fields needs to be in an impl block that is tagged by faux::methods.
In your first example new is referring to the field something when trying to create that struct but it fails because the impl block is not tagged by faux::methods.
I called this out in the docs for faux::create but I understand maybe that was too hidden.
The second example is slightly trickier and I tried to call out for this in these docs. But again I understand that api docs are not the most searchable thing, especially as you start digging outside of the root docs. In summary the workaround for this is to have two functions. The one that returns Self is inside an impl block tagged by faux::methods. The one that returns Result<Self, Error> is in an impl not tagged by faux::methods and just prxoies to the former function after all of the fallible stuff have been resolved.
#[cfg_attr(test, faux::create)]
pub struct MyStruct {
    pub something: i32,
}

#[cfg_attr(test, faux::create)]
impl MyStruct {
    fn private_new(something: i32) -> Self {
        MyStruct { something }
    }
}

impl MyStruct {
    pub fn new() -> Result<Self, Box<dyn std::error::Error>> {
        let something = load_something()?;
        Ok(Self::private_new(something))
    }
}

This avoids the issue because new() doesn't refer to the struct fields directly, and private_new returns Self not wrapped in Result.
I think it may be possible for faux to get around this for things that return Result and maybe even Option but it would be tricky so I haven't prioritized it yet, but I can take a look at it. For now this is expected behavior however.
In your opinion, where would it have been best for this to be documented so it would have been more accessible?

Thanks @nrxus for looking into this!
Sadly, I've tried the example you've given and it doesn't work for me.
For this one
#[cfg_attr(test, faux::create)]
impl MyStruct {
    fn private_new(something: i32) -> Self {
        MyStruct { something }
    }
}

error says that faux::create expects a struct not a impl block. If I change it to faux:methods then I've gone back to square 1, as it complains that return type should not be Self
As for the docs, I find crates with a lot of examples very helpful. For example, the tonic crate has so many that I've always found something that would tell me how to do it and/or where to look

As I misspoke in my last comment. Do faux::methods in the impl block.

I added a test in: https://github.com/nrxus/faux/blob/f317aab3ab11baf4bf19047896d05bc28f53e658/tests/simple.rs#L35-L40
This proves that it can be done. I have been adding this kind of things inside the crate integration tests rather than examples since I view them as proving that the library works, not just examples on how to use them. Although maybe adding something on examples would also be helpful, I'll think about it (:
Let me know if this solves your issue.

that's great! thanks a lot


Colocation does not work after following Configuration instructions

In order to use colocation and make sure objects were correctly synced, not only did I have to make sure that Share Point Cloud Data and Spatial Data were enabled, I also had to upload a test apk to the meta quest app manager and add test users to the build. After that, I could build and run directly from Unity onto my Quest 3s and get colocation to work correctly.
I followed the instructions listed in this forum thanks to the thread in #12.

We updated the documentation to mention that an apk needs to be uploaded to use certain features like shared spatial anchors.
https://github.com/oculus-samples/Unity-Discover/blob/main/Documentation/Configuration.md#upload-to-release-channel
Thanks for bringing this up.


Add WASM support

Please add support for WASM & WASI targets

Vouch for this. We'd like to add wasmJs and wasmWasi as test targets.

I'll look into it soon. 👍

Blocked on this, but I'm hoping there is a straightforward workaround (e.g., using a Canary version of Node). I've asked on Kotlin's Slack as well.

@goncalossilva using Canary is what official Kotlin libs are doing, yup!

Yeah, that's the way to move forward. I've rewritten ResourceNode but it appears I'll also have to rewrite ResourceBrowser if I want it shared between JS and Wasm.

Left a couple comments in the new commits.

@goncalossilva please update to support this feature. I really need this to enable wasm targets on our repos

@iTanChi I'm afraid I've been travelling for work and unavailable to continue working on this, but I plan to pick it up again later this month, before the upcoming KotlinConf.

Any news on this front? I'd like to see support for wasmJs to get some of my tests working.

No progress on my end, I'm afraid. I haven't been able to prioritize this, as I'm not actively using WASM on any personal or work project. I still want to get around to it eventually, but of course, contributions would be most welcome.

I am also not yet really using WASM too but I am trying to pick up the necessary pieces and see where we are :-)


Added support for setting operator fader levels and muting

Still testing the change fully works as exspected, will ready PR once confirmed fully working.

Tested on using atdm-1012.

Looks fine to me. Can you update @companion-module/base and /tools dependencies?

I did it. And version bumped to v1.1.0, tagged a release, and pushed to betas


⚠ ClamAV has degraded performance

In 1667315, ClamAV (https://spamassassin.apache.org/) experienced degraded performance:

HTTP code: 200
Response time: 98 ms

Resolved: ClamAV performance has improved in 302a077.


Online demo url specified in readme file throws an error

The online demo(store front) url mentioned in the README.md throws an error.
URL : http://demo.simplcommerce.com/
Screen shot of the error message is attached.

It looks fine on my side. @Pramod2392  Could you please help me check it again


Add option for more thyme.

Required for new versions (and possibly old versions) of the thyme library cause clang drops it's bundle.
https://github.com/liyang/thyme/issues/23

:cake:

Going to rebase and merge this one


Enhancement: Disabling HMD Mode when not in VR Mode

While AFrame is primarily a VR framework, I find the declarative nature of AFrame in building Three.js scenes much more readable and maintainable.  For that reason, I suggest that this library does not assume the Leap Motion is being used as part of an HMD.
I have, as an experiment, already created listeners for the scene that will change the transform to HMD when put in VR mode.  However, it may be more desirable to have the HMD mode to exist independent of the mode in which AFrame is operating.
Either way, let me know if you think this is a feature worth considering.

I like the idea of supporting non-VR use cases, that seems very reasonable. But I'd rather not autodetect when HMD mode should be enabled or disabled — this would make debugging harder, for one thing, since my Leap Motion is taped to my headset. 🙂
Let's add an option to the leap-system.js schema so that it can be disabled explicitly. Usage would be:
<a-scene leap="hmd: false">
  <a-entity leap-hand="hand: left"></a-entity>
  <a-entity leap-hand="hand: right"></a-entity>
</a-scene>

I hope to be able to do that late next week, or feel free to send a PR if you're interested and have time!

I have some code that adds it to the leap-system.js, but my experience with WebPack is incredibly limited. I have just been testing it by altering the disto files directly. I would be happy to work on it directly if I can better understand how you are resolving your external references to 'leapjs' and 'circular-array',
In lieu of that, feel free to copy the relevant lines (28 - 69) from here.
Lines 28-38 cover augmentation of the transform plugin.
The enableDesktopMode method disables HMD and sets the transform to an arbitrary position I found to work for me.
The enableHMDMode method enables HMD and sets the transform to the position that you had originally used.
As for the setting for HMD, perhaps create 3 enumeration: true, false, and toggle.
In regards to the toggle setting, the setAutoToggleHMD method hooks up to the EnterVR and ExitVR events to automatically toggle the switch between desktop mode and HMD mode.

There's no need to worry about WebPack really, PRs don't update dist files. My release script automatically updates dist/* when I increment the version number, which would be done on my end later.
In terms of testing code, simply:
# Downloads leapjs, circular-array, and dev dependencies from NPM
npm install

# Starts a local development build/refresh server with Browserify and Budo
npm run dev

# Build a dist script (which should not be committed)
npm run dist

These scripts are defined here.
I had in mind something like this, as a starting point.
/**
 * Leap Motion system for A-Frame.
 */
module.exports = {
  schema: {
    hmd: {default: true}
  },

  init: function () {
    this.controller = Leap.loop()
      .setOptimizeHMD(this.data.hmd)
      .use('aframeSystem');
  },

  getFrame: function () {
    return this.controller.frame();
  }
};

Adding support for position/rotation/scale transforms seems like a good idea, as you've done, but let's get to that separately from this change, because assumptions like scale=.001 seem a bit subjective.


V4 with Python 3.6, PuppetDBs < 5.2 support drop and Flask (and more) upgrade

With a recent first release of Requests that drops support for Python 3.6 I realized that we should also drop it in the Puppetboard or else we will not be able to apply possible future security updates. Python 3.6 had its EOL in December 2021 so we already supported it for about 1/2 year extra.
The only well-known to me and officially maintained system that doesn't have Python 3.7+ is Centos 7, but for that I am hoping to provide a solution using Python 3.8 and HTTPD 2.4 from the open-suorce version of Red Hat Software Collections 3.8  downloaded from https://www.softwarecollections.org/en/. Or alternatively you can just use Docker.
As for the old PuppetDB versions drop: this is being done for code simplification and because we cannot reasonably claim that we support versions older than 5.2 if we don't have automatic acceptance tests that verify that the app works with them and we (or at least I) don't have the capacity to manually test old versions.
Finally, this is a nice opportunity to upgrade Flask and other core dependencies. We will have a few pre-releases of this major app version so hopefully we will root out the bugs created during this upgrade in these beta tests.

We should probably combine it with #664...

Hm, not sure why the tests are passing for me locally but not in GHA... Do I have to mock the response from the PuppetDB version endpoint for all the tests? 🤔

Please let me know what you think about this, @kenyon @bastelfreak @sebastianrakel @mterzo. Is the scope ok? Or should we add some other backward-incompatible change while we are doing major uptick? (Ping more people if needed, of course.)

Please check out a pre-release v4.0.0b1.
(Note: because of a PyPI issue I had to install it from the URL https://files.pythonhosted.org/packages/09/9d/5e59c13b3c9bb4ab250440b7fb1fd7385ece9213946983de41ac2e186ff0/puppetboard-4.0.0b1-py2.py3-none-any.whl )

Ping also @smortex and @buzzdeee as the maintainers of Puppetboard packages.

I see no objections and I have an approval (thanks @bastelfreak!), so I am moving forward with this.


fix(v2): removes hardcoded sidebar width

Motivation
This PR removes the hardcoded width:20rem value in the sidebar css in D2.
Also, it was brought up in #1530
Have you read the Contributing Guidelines on pull requests?
Yes
Test Plan
Local Testing.

Before removing sidebar width

After removing sidebar width

Related PRs
None

Also, I noticed that removing the hardcoded width leaves a lot of whitespace.
With the html structure as (3 by 9 ratio)

SideBar

Main Content

The page looks like this right now

If we modify the classes to have (2 by 10 ratio)

SideBar

Main Content

Then the page looks like below

#1530

Just noticed that this will cause the menu item text to overflow when it is too long as it won't inherit any width from the parent (.sidebar) as we will have removed it. That means we need to set some width on the .sidebar class. [See Sidebar in Image Below]

So I'd suggest that instead of removing width: 20rem; we set its (.sidebar) width as width: var(--ifm-col-width); where --ifm-col-width is the same variable used to set width of its(.sidebar) parent i.e col col--3. This will resolve this overflowing issue too and also the width won't be harcoded.
Another suggestion would be to use 2(sidebar) by 10(main) ratio rather than 3(sidebar) by 9(main). I've added pictures of that in my last comment.

Thanks for the PR! While I appreciate the initiative in helping out, there are good reasons why we didn't add the "help wanted" label to the issue, e.g for the above reasons you mentioned and it could involve fixing the CSS library that we are using internally (which is not open sourced yet) instead of Docusaurus code.
I've been working on a fix and agree that this issue is not easy to fix. I haven't had time to come up with a proper solution yet, and since you're keen on working on it and have spent significant time looking into it, I'll let you take over. Do be prepared that this PR will take a while to merge with a few rounds of back-and-forth as this issue is pretty tricky. I'll follow up with a suggested approach later on.
In future, we would appreciate that you drop us a note before jumping on issues so that efforts don't overlap or end up non-fruitful. Thank you for the understanding!

I've been working on a fix and agree that this issue is not easy to fix. I haven't had time to come up with a proper solution yet, and since you're keen on working on it and have spent significant time looking into it, I'll let you take over. Do be prepared that this PR will take a while to merge with a few rounds of back-and-forth as this issue is pretty tricky. I'll follow up with a suggested approach later on.

My bad, I should have first asked on the issue thread before spending time working on it. I am still new to open source so everything is pretty much a learning for me :)  You can comment on this thread and I will follow up with you.

In future, we would appreciate that you drop us a note before jumping on issues so that efforts don't overlap or end up non-fruitful.

I'll take note of that 👍
Thanks for the valuable feedback @yangshun

I personally like the 3-9 ratio.
My fix suggestion is to hide the nav for situation described in #1530
We will most likely need to work on the sidebar menu on mobile as well.
what do yall think

Hi @tusharf5,
Thanks for helping and sorry about the delayed reply.
The page's grid layout is intended to give the sidebar a 25% space. But sidebar is not respecting that due to its position: fixed, its (external) width calculation is gonna on viewport. And we do want to keep the position: fixed to keep the scrolling and positioning behavior. Therefore the fluid layout is not used.
So please keep the fixed width and remove the grid layout instead. Please also make sure that the page layout is stable on edge cases such as no content or very long texts on the sidebar, then we're good to land.

Just as a reference I'll also drop my notes here. Wanted to look at how other non-Docusaurus sites are doing it.
RequireJS uses a fixed width, width: 220px, but that is likely due to its design that needs a specific width

w3.org also uses a fixed with of 23em. It does have a max-width but is computed tocalc(100% - 58px), probably for mobile.

ReactJS is a flex on 300px

@wgao19 I've removed the flex layout and bring back fixed width sidebar. I had to make little changes in CSS at some places to accommodate this change. Please have a look.

Hey @tusharf5 thanks for the updates! A few tweaks and then we're good to go :)

Thanks for the help 🔥


Does Response.envelope really need include the message object too?

  constructor (robot, message, match) {
    this.robot = robot
    this.message = message
    this.match = match
    this.envelope = {
      room: this.message.room,
      user: this.message.user,
      message: this.message
    }
  }

The Response constructor sets envelope with the message but Response already has that message property. It's duplicated. Does it really need to be in envelope?

I see your point. The envelope contains the original message object, and since the envelope is the thing that gets passed around, that's how other objects can get the message. I'll review other adapters to see how and if it's being used in the wild.
I agree with your point about keeping it a POJO instead of codifying it as a Class. Hubot, in general, is a message connector between two systems, so it makes sense to "just pass it through".


Does vform 1.0.0 support file upload?

I cannot do upload a file by post, put or patch with vform
but it work on vform 0.8.1
Request payload
{"file":{}}
instead of form-data
Content-type is:
Content-Type:application/json;charset=UTF-8
instead of
Content-Type:multipart/form-data;
if there are another way to upload file. please teach me.
thank you.

The conversion to FormData was removed in 1.0.0 because you can use axios transformRequest option. See the upload example.

thank you very much for solving my problem.


Remove unneccesary things in AndroidManifest.xml

Including these properties will cause potential AndroidManifest.xml errors, and are unneeded.

感谢


[Backport 1.3] Manually install zlib for win CI (#1513)

Description
(cherry picked from commit 231ad934e6b0f4e62ee0ca68bcb160534262d401)
Issues Resolved
Fix the failing Windows build on https://github.com/opensearch-project/k-NN/pull/1526
Check List

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

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

Closing this PR as these changes will be addressed in this PR https://github.com/opensearch-project/k-NN/pull/1616


"make slides" stalls on "reading sources... [100%] index"

$ make slides
Running Sphinx v1.6.3
loading pickled environment... done
building [mo]: targets for 0 po files that are out of date
building [slides]: targets for 1 source files that are out of date
updating environment: 0 added, 1 changed, 0 removed
^Cading sources... [100%] index
interrupted!
Makefile:20: recipe for target 'slides' failed
make: *** [slides] Interrupt

it blocks on "reading sources" (then I did ctrl-C)
With added verbosity I get :
[snip]
0 added, 1 changed, 0 removed
[app] emitting event: 'env-before-read-docs'(<sphinx.environment.BuildEnvironment object at 0x7f945f235c50>, ['index'])
reading sources... [100%] index
[app] emitting event: 'env-purge-doc'(<sphinx.environment.BuildEnvironment object at 0x7f945f235c50>, 'index')
[app] emitting event: 'source-read'('index', [".. QA documentation master file, created by\n   sphinx-quickstart on Tue Sep 26 15:56:54
^C
Traceback (most recent call last):
  File "/home/arthur/.virtualenvs/formation/lib/python3.5/site-packages/sphinx/cmdline.py", line 306, in main
    app.build(opts.force_all, filenames)
  File "/home/arthur/.virtualenvs/formation/lib/python3.5/site-packages/sphinx/application.py", line 339, in build
    self.builder.build_update()
  File "/home/arthur/.virtualenvs/formation/lib/python3.5/site-packages/sphinx/builders/__init__.py", line 331, in build_update
    'out of date' % len(to_build))
  File "/home/arthur/.virtualenvs/formation/lib/python3.5/site-packages/sphinx/builders/__init__.py", line 344, in build
    updated_docnames = set(self.env.update(self.config, self.srcdir, self.doctreedir))
  File "/home/arthur/.virtualenvs/formation/lib/python3.5/site-packages/sphinx/environment/__init__.py", line 583, in update
    self._read_serial(docnames, self.app)
  File "/home/arthur/.virtualenvs/formation/lib/python3.5/site-packages/sphinx/environment/__init__.py", line 602, in _read_serial
    self.read_doc(docname, app)
  File "/home/arthur/.virtualenvs/formation/lib/python3.5/site-packages/sphinx/environment/__init__.py", line 723, in read_doc
    pub.publish()
  File "/home/arthur/.virtualenvs/formation/lib/python3.5/site-packages/docutils/core.py", line 217, in publish
    self.settings)
  File "/home/arthur/.virtualenvs/formation/lib/python3.5/site-packages/sphinx/io.py", line 74, in read
    self.parse()
  File "/home/arthur/.virtualenvs/formation/lib/python3.5/site-packages/docutils/readers/__init__.py", line 78, in parse
    self.parser.parse(self.input, document)
  File "/home/arthur/.virtualenvs/formation/lib/python3.5/site-packages/docutils/parsers/rst/__init__.py", line 191, in parse
    self.statemachine.run(inputlines, document, inliner=self.inliner)
  File "/home/arthur/.virtualenvs/formation/lib/python3.5/site-packages/docutils/parsers/rst/states.py", line 171, in run
    input_source=document['source'])
  File "/home/arthur/.virtualenvs/formation/lib/python3.5/site-packages/docutils/statemachine.py", line 239, in run
    context, state, transitions)
  File "/home/arthur/.virtualenvs/formation/lib/python3.5/site-packages/docutils/statemachine.py", line 460, in check_line
    return method(match, context, next_state)
  File "/home/arthur/.virtualenvs/formation/lib/python3.5/site-packages/docutils/parsers/rst/states.py", line 2753, in underline
    self.section(title, source, style, lineno - 1, messages)
  File "/home/arthur/.virtualenvs/formation/lib/python3.5/site-packages/docutils/parsers/rst/states.py", line 327, in section
    self.new_subsection(title, lineno, messages)
  File "/home/arthur/.virtualenvs/formation/lib/python3.5/site-packages/docutils/parsers/rst/states.py", line 395, in new_subsection
    node=section_node, match_titles=True)
  File "/home/arthur/.virtualenvs/formation/lib/python3.5/site-packages/docutils/parsers/rst/states.py", line 282, in nested_parse
    node=node, match_titles=match_titles)
  File "/home/arthur/.virtualenvs/formation/lib/python3.5/site-packages/docutils/parsers/rst/states.py", line 196, in run
    results = StateMachineWS.run(self, input_lines, input_offset)
  File "/home/arthur/.virtualenvs/formation/lib/python3.5/site-packages/docutils/statemachine.py", line 239, in run
    context, state, transitions)
  File "/home/arthur/.virtualenvs/formation/lib/python3.5/site-packages/docutils/statemachine.py", line 460, in check_line
    return method(match, context, next_state)
  File "/home/arthur/.virtualenvs/formation/lib/python3.5/site-packages/docutils/parsers/rst/states.py", line 2328, in explicit_markup
    self.explicit_list(blank_finish)
  File "/home/arthur/.virtualenvs/formation/lib/python3.5/site-packages/docutils/parsers/rst/states.py", line 2358, in explicit_list
    match_titles=self.state_machine.match_titles)
  File "/home/arthur/.virtualenvs/formation/lib/python3.5/site-packages/docutils/parsers/rst/states.py", line 312, in nested_list_parse
    **state_machine_kwargs)
  File "/home/arthur/.virtualenvs/formation/lib/python3.5/site-packages/docutils/statemachine.py", line 167, in __init__
    self.add_states(state_classes)
  File "/home/arthur/.virtualenvs/formation/lib/python3.5/site-packages/docutils/statemachine.py", line 485, in add_states
    self.add_state(state_class)
  File "/home/arthur/.virtualenvs/formation/lib/python3.5/site-packages/docutils/statemachine.py", line 478, in add_state
    self.states[statename] = state_class(self, self.debug)
  File "/home/arthur/.virtualenvs/formation/lib/python3.5/site-packages/docutils/parsers/rst/states.py", line 216, in __init__
    StateWS.__init__(self, state_machine, debug)
  File "/home/arthur/.virtualenvs/formation/lib/python3.5/site-packages/docutils/statemachine.py", line 963, in __init__
    State.__init__(self, state_machine, debug)
  File "/home/arthur/.virtualenvs/formation/lib/python3.5/site-packages/docutils/statemachine.py", line 620, in __init__
    self.add_initial_transitions()
  File "/home/arthur/.virtualenvs/formation/lib/python3.5/site-packages/docutils/statemachine.py", line 979, in add_initial_transitions
    State.add_initial_transitions(self)
  File "/home/arthur/.virtualenvs/formation/lib/python3.5/site-packages/docutils/statemachine.py", line 649, in add_initial_transitions
    self.initial_transitions)
  File "/home/arthur/.virtualenvs/formation/lib/python3.5/site-packages/docutils/statemachine.py", line 745, in make_transitions
    transitions[namestate[0]] = self.make_transition(*namestate)
  File "/home/arthur/.virtualenvs/formation/lib/python3.5/site-packages/docutils/statemachine.py", line 718, in make_transition
    pattern = re.compile(pattern)
  File "/home/arthur/.virtualenvs/formation/lib/python3.5/re.py", line 224, in compile
    return _compile(pattern, flags)
  File "/home/arthur/.virtualenvs/formation/lib/python3.5/re.py", line 281, in _compile
    p, loc = _cache[type(pattern), pattern, flags]
KeyboardInterrupt

interrupted!

Found it... I had a loop in the includes. (a job for doc8 checker or rst-lint I guess)
Using for i in `ls *.rst` ; do echo .. include:: $i; done  and including index.rst is not a good idea.


nxppy.WriteError= Write failed: 201

block=10
number = 1000
while 1
try:
mifare.write_block(block, str(number) )
print "write block ",str(number)
return(1)
except nxppy.WriteError, ex:
print "nxppy.WriteError=", ex
return(0)
...
 number = number -1

read_block etc

nxppy.WriteError= Write failed: 201
This happens intermittently about 1 in 20 times
It writes correctly to the card but gives this error.
ideally if it writes correctly then it shouldnt create an exception ???

The write command will raise if it receives an error status from the NXP Reader Library.  The 0x200 piece of the return code indicates that it's an error from the HAL component code:
#define PH_COMP_HAL                     0x0200U /**< HAL Component Code. */

And the error code is:
#define PH_ERR_IO_TIMEOUT               0x0001U /**< No reply received, e.g. PICC removal. */

So it looks as if the reader did not receive a response from the tag indicating that the write succeeded.  It did, in fact, succeed, but there's no way to ensure that status.  My recommendation would be to implement a retry mechanism when this error code is encountered.