train autoencoder with keras

I wrote a code for training autoencoder with Keras. I want this autoencoder for feature extraction from images. In my experiment, images are input, which all belong to one class. I have train and validation sets. The following is my code:
from keras.layers import Input, Dense, Convolution2D, MaxPooling2D, UpSampling2D
from keras.models import Model

# dimensions of our images.
img_width, img_height = 256, 256

train_data_dir = '/home/osman/keras_test/train'
validation_data_dir = '/home/osman/keras_test/validation'
nb_train_samples = 200
nb_validation_samples = 50
nb_epoch = 50

input_img = Input(shape=(3, img_width, img_height))

x = Convolution2D(16, 3, 3, activation='relu', border_mode='same')(input_img)
x = MaxPooling2D((2, 2), border_mode='same')(x)
x = Convolution2D(8, 3, 3, activation='relu', border_mode='same')(x)
x = MaxPooling2D((2, 2), border_mode='same')(x)
x = Convolution2D(8, 3, 3, activation='relu', border_mode='same')(x)
encoded = MaxPooling2D((2, 2), border_mode='same')(x)

# at this point the representation is (8, 4, 4) i.e. 128-dimensional

x = Convolution2D(8, 3, 3, activation='relu', border_mode='same')(encoded)
x = UpSampling2D((2, 2))(x)
x = Convolution2D(8, 3, 3, activation='relu', border_mode='same')(x)
x = UpSampling2D((2, 2))(x)
x = Convolution2D(16, 3, 3, activation='relu')(x)
x = UpSampling2D((2, 2))(x)
decoded = Convolution2D(1, 3, 3, activation='sigmoid', border_mode='same')(x)

autoencoder = Model(input_img, decoded)
autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy')

# this is the augmentation configuration we will use for training
train_datagen = ImageDataGenerator(
        rescale=1./255,
        shear_range=0.2,
        zoom_range=0.2,
        horizontal_flip=True)

# this is the augmentation configuration we will use for testing:
# only rescaling
test_datagen = ImageDataGenerator(rescale=1./255)

train_generator = train_datagen.flow_from_directory(
        train_data_dir,
        target_size=(img_width, img_height),
        batch_size=32,
        class_mode=None)

print type(train_generator)

validation_generator = test_datagen.flow_from_directory(
        validation_data_dir,
        target_size=(img_width, img_height),
        batch_size=32,
        class_mode=None)

autoencoder.fit_generator(
        train_generator,
        samples_per_epoch=20,
        nb_epoch=nb_epoch,
        # batch_size=128,
        #shuffle=True,
        validation_data=(validation_generator,validation_generator),
        nb_val_samples=5
        )

I got this expectation,
Found 200 images belonging to 1 classes.
<class 'keras.preprocessing.image.DirectoryIterator'>
Found 50 images belonging to 1 classes.

---------------------------------------------------------------------------
Exception                                 Traceback (most recent call last)
<ipython-input-26-ad3295fdbaae> in <module>()
     68         #shuffle=True,
     69         validation_data=(validation_generator,validation_generator),
---> 70         nb_val_samples=5
     71         )

/home/osman/.virtualenvs/keras/local/lib/python2.7/site-packages/keras/engine/training.pyc in fit_generator(self, generator, samples_per_epoch, nb_epoch, verbose, callbacks, validation_data, nb_val_samples, class_weight, max_q_size, nb_worker, pickle_safe)
   1388                                 '(val_x, val_y, val_sample_weight) '
   1389                                 'or (val_x, val_y). Found: ' + str(validation_data))
-> 1390             val_x, val_y, val_sample_weights = self._standardize_user_data(val_x, val_y, val_sample_weight)
   1391             self.validation_data = val_x + [val_y, val_sample_weights]
   1392         else:

/home/osman/.virtualenvs/keras/local/lib/python2.7/site-packages/keras/engine/training.pyc in _standardize_user_data(self, x, y, sample_weight, class_weight, check_batch_dim, batch_size)
    959                                    self.internal_input_shapes,
    960                                    check_batch_dim=False,
--> 961                                    exception_prefix='model input')
    962         y = standardize_input_data(y, self.output_names,
    963                                    output_shapes,

/home/osman/.virtualenvs/keras/local/lib/python2.7/site-packages/keras/engine/training.pyc in standardize_input_data(data, names, shapes, check_batch_dim, exception_prefix)
     68                             ': data should be a Numpy array, '
     69                             'or list/dict of Numpy arrays. '
---> 70                             'Found: ' + str(data)[:200] + '...')
     71         if len(names) != 1:
     72             # case: model expects multiple inputs but only received

Exception: Error when checking model input: data should be a Numpy array, or list/dict of Numpy arrays. Found: <keras.preprocessing.image.DirectoryIterator object at 0x7f0020899110>...

I would imagine the problem is on this line:
validation_data=(validation_generator,validation_generator).
The fit_generator method expects either a generator or a tuple with numpy arrays for validation data and labels. Using a tuple of generator is wrong on this case, you should just use it as validation_data=validation_generator: the generator will yield tuples of data and labels automatically.

@robertomest I got different error with your solution, could you fix it?
Exception                                 Traceback (most recent call last)
 in ()
67         #shuffle=True,
68         validation_data= validation_generator,
---> 69         nb_val_samples=5
70         )
/home/osman/.virtualenvs/keras/local/lib/python2.7/site-packages/keras/engine/training.pyc in fit_generator(self, generator, samples_per_epoch, nb_epoch, verbose, callbacks, validation_data, nb_val_samples, class_weight, max_q_size, nb_worker, pickle_safe)
1425                     raise Exception('output of generator should be a tuple '
1426                                     '(x, y, sample_weight) '
-> 1427                                     'or (x, y). Found: ' + str(generator_output))
1428                 # build batch logs
1429                 batch_logs = {}
Exception: output of generator should be a tuple (x, y, sample_weight) or (x, y). Found: [[[[ 1.          1.          1.         ...,  1.          1.          1.        ]
[ 1.          1.          1.         ...,  1.          1.          1.        ]
[ 1.          1.          1.         ...,  1.          1.          1.        ]
...,
[ 1.          1.          1.         ...,  1.          1.          1.        ]
[ 1.          1.          1.         ...,  1.          1.          1.        ]
[ 1.          1.          1.         ...,  1.          1.          1.        ]]
[[ 1.          1.          1.         ...,  1.          1.          1.        ]
[ 1.          1.          1.         ...,  1.          1.          1.        ]
[ 1.          1.          1.         ...,  1.          1.          1.        ]
...,
[ 1.          1.          1.         ...,  1.          1.          1.        ]
[ 1.          1.          1.         ...,  1.          1.          1.        ]
[ 1.          1.          1.         ...,  1.          1.          1.        ]]
[[ 1.          1.          1.         ...,  1.          1.          1.        ]
[ 1.          1.          1.         ...,  1.          1.          1.        ]
[ 1.          1.          1.         ...,  1.          1.          1.        ]
...,
[ 1.          1.          1.         ...,  1.          1.          1.        ]
[ 1.          1.          1.         ...,  1.          1.          1.        ]
[ 1.          1.          1.         ...,  1.          1.          1.        ]]]
[[[ 1.          1.          1.         ...,  1.          1.          1.        ]
[ 1.          1.          1.         ...,  1.          1.          1.        ]
[ 1.          1.          1.         ...,  1.          1.          1.        ]
...,
[ 0.97254908  0.97254908  0.97254908 ...,  1.          1.          1.        ]
[ 0.97254908  0.97254908  0.97254908 ...,  1.          1.          1.        ]
[ 1.          1.          1.         ...,  1.          1.          1.        ]]
[[ 1.          1.          1.         ...,  1.          1.          1.        ]
[ 1.          1.          1.         ...,  1.          1.          1.        ]
[ 1.          1.          1.         ...,  1.          1.          1.        ]
...,
[ 0.97254908  0.97254908  0.97254908 ...,  1.          1.          1.        ]
[ 0.97254908  0.97254908  0.97254908 ...,  1.          1.          1.        ]
[ 1.          1.          1.         ...,  1.          1.          1.        ]]
[[ 1.          1.          1.         ...,  1.          1.          1.        ]
[ 1.          1.          1.         ...,  1.          1.          1.        ]
[ 1.          1.          1.         ...,  1.          1.          1.        ]
...,
[ 0.97254908  0.97254908  0.97254908 ...,  1.          1.          1.        ]
[ 0.97254908  0.97254908  0.97254908 ...,  1.          1.          1.        ]
[ 1.          1.          1.         ...,  1.          1.          1.        ]]]
[[[ 1.          1.          1.         ...,  0.98039222  0.98039222
0.98039222]
[ 1.          1.          1.         ...,  0.91764712  0.91764712
0.91764712]
[ 1.          1.          1.         ...,  0.46274513  0.46274513
0.46274513]
...,
[ 0.77647066  0.77647066  0.77647066 ...,  1.          1.          1.        ]
[ 0.78039223  0.78039223  0.78039223 ...,  1.          1.          1.        ]
[ 0.81176478  0.81176478  0.81176478 ...,  1.          1.          1.        ]]
[[ 1.          1.          1.         ...,  0.98039222  0.98039222
0.98039222]
[ 1.          1.          1.         ...,  0.91764712  0.91764712
0.91764712]
[ 1.          1.          1.         ...,  0.46274513  0.46274513
0.46274513]
...,
[ 0.77647066  0.77647066  0.77647066 ...,  1.          1.          1.        ]
[ 0.78039223  0.78039223  0.78039223 ...,  1.          1.          1.        ]
[ 0.81176478  0.81176478  0.81176478 ...,  1.          1.          1.        ]]
[[ 1.          1.          1.         ...,  0.98039222  0.98039222
0.98039222]
[ 1.          1.          1.         ...,  0.91764712  0.91764712
0.91764712]
[ 1.          1.          1.         ...,  0.46274513  0.46274513
0.46274513]
...,
[ 0.77647066  0.77647066  0.77647066 ...,  1.          1.          1.        ]
[ 0.78039223  0.78039223  0.78039223 ...,  1.          1.          1.        ]
[ 0.81176478  0.81176478  0.81176478 ...,  1.          1.          1.        ]]]
...,
[[[ 1.          1.          1.         ...,  1.          1.          1.        ]
[ 1.          1.          1.         ...,  1.          1.          1.        ]
[ 1.          1.          1.         ...,  1.          1.          1.        ]
...,
[ 1.          1.          1.         ...,  1.          1.          1.        ]
[ 1.          1.          1.         ...,  1.          1.          1.        ]
[ 1.          1.          1.         ...,  1.          1.          1.        ]]
[[ 1.          1.          1.         ...,  1.          1.          1.        ]
[ 1.          1.          1.         ...,  1.          1.          1.        ]
[ 1.          1.          1.         ...,  1.          1.          1.        ]
...,
[ 1.          1.          1.         ...,  1.          1.          1.        ]
[ 1.          1.          1.         ...,  1.          1.          1.        ]
[ 1.          1.          1.         ...,  1.          1.          1.        ]]
[[ 1.          1.          1.         ...,  1.          1.          1.        ]
[ 1.          1.          1.         ...,  1.          1.          1.        ]
[ 1.          1.          1.         ...,  1.          1.          1.        ]
...,
[ 1.          1.          1.         ...,  1.          1.          1.        ]
[ 1.          1.          1.         ...,  1.          1.          1.        ]
[ 1.          1.          1.         ...,  1.          1.          1.        ]]]
[[[ 0.98039222  0.98039222  0.98039222 ...,  0.99215692  0.98431379
0.99215692]
[ 0.98039222  0.98039222  0.98039222 ...,  0.99607849  0.98823535
0.99215692]
[ 0.98039222  0.98039222  0.98039222 ...,  0.99215692  0.98823535
0.99215692]
...,
[ 1.          1.          1.         ...,  1.          1.          1.        ]
[ 1.          1.          1.         ...,  1.          1.          1.        ]
[ 1.          1.          1.         ...,  1.          1.          1.        ]]
[[ 1.          1.          1.         ...,  0.00392157  0.          0.00392157]
[ 1.          1.          1.         ...,  0.          0.          0.00392157]
[ 1.          1.          1.         ...,  0.          0.          0.00392157]
...,
[ 1.          1.          1.         ...,  1.          1.          1.        ]
[ 1.          1.          1.         ...,  1.          1.          1.        ]
[ 1.          1.          1.         ...,  1.          1.          1.        ]]
[[ 0.99607849  0.99607849  0.99607849 ...,  0.4784314   0.47058827
0.4784314 ]
[ 0.99607849  0.99607849  0.99607849 ...,  0.4784314   0.47450984
0.4784314 ]
[ 0.99607849  0.99607849  0.99607849 ...,  0.47450984  0.47450984
0.4784314 ]
...,
[ 1.          1.          1.         ...,  1.          1.          1.        ]
[ 1.          1.          1.         ...,  1.          1.          1.        ]
[ 1.          1.          1.         ...,  1.          1.          1.        ]]]
[[[ 0.98431379  0.98431379  0.98431379 ...,  1.          1.          1.        ]
[ 0.98431379  0.98431379  0.98431379 ...,  1.          1.          1.        ]
[ 0.98431379  0.98431379  0.98431379 ...,  1.          1.          1.        ]
...,
[ 0.          0.          0.         ...,  0.92941183  0.90980399
0.91372555]
[ 0.          0.          0.         ...,  0.92941183  0.90980399
0.91372555]
[ 0.          0.          0.         ...,  0.92941183  0.90980399
0.91372555]]
[[ 0.99215692  0.99215692  0.99215692 ...,  0.99607849  0.99607849  1.        ]
[ 0.99215692  0.99215692  0.99215692 ...,  0.99607849  0.99607849  1.        ]
[ 0.99215692  0.99215692  0.99215692 ...,  0.99607849  0.99607849  1.        ]
...,
[ 0.          0.          0.         ...,  1.          0.99215692
0.97254908]
[ 0.          0.          0.         ...,  1.          0.99215692
0.97254908]
[ 0.          0.          0.         ...,  1.          0.99215692
0.97254908]]
[[ 0.98823535  0.98823535  0.98823535 ...,  1.          1.          1.        ]
[ 0.98823535  0.98823535  0.98823535 ...,  1.          1.          1.        ]
[ 0.98823535  0.98823535  0.98823535 ...,  1.          1.          1.        ]
...,
[ 0.          0.          0.         ...,  1.          1.          0.98431379]
[ 0.          0.          0.         ...,  1.          1.          0.98431379]
[ 0.          0.          0.         ...,  1.          1.          0.98431379]]]]

It seems that the generator is now yielding tuples as expected. Could you put the updated code snippet with the modified call so I can check it out? Could you also call next(validation_generator) so we can check what the generator is yielding?

@robertomest  Thank you for quick replying.
autoencoder.fit_generator(
        train_generator,
        samples_per_epoch=20,
        nb_epoch=nb_epoch,
        # batch_size=128,
        #shuffle=True,
        validation_data= validation_generator,
        nb_val_samples=5
        )

the following code returns:
print type(next(validation_generator))
print next(validation_generator).shape

<type 'numpy.ndarray'>
(18, 3, 256, 256)

It seems the iterator is actually returning only the data, instead of a tuple (data, target) as the fit method expects. Can you check how the train_generator is behaving (calling next(train_generator))?
I think that is because of the class_mode=None, but I'd like to see how the train_generator is behaving since it uses the same parameter.

Could you test a quick fix for now? Maybe try something like this
def fixed_generator(generator):
    for batch in generator:
        yield (batch, batch)

and change the fit call to
autoencoder.fit_generator(
        train_generator,
        samples_per_epoch=20,
        nb_epoch=nb_epoch,
        # batch_size=128,
        #shuffle=True,
        validation_data= fixed_generator(validation_generator), # fixed
        nb_val_samples=5
        )

Another weird thing is that you defined samples_per_epoch=20. This should be the same of your dataset, so (from what I could see from what you posted you have 500 training images) that would be samples_per_epoch=500. The same for nb_val_samples (I think the correct value is 50?).

@robertomest  the train set returns same output. After running your modification, I got similar error:
Found 200 images belonging to 1 classes.
<type 'numpy.ndarray'>
(32, 3, 256, 256)
Found 50 images belonging to 1 classes.
<type 'numpy.ndarray'>
(18, 3, 256, 256)
Epoch 1/50

---------------------------------------------------------------------------
Exception                                 Traceback (most recent call last)
<ipython-input-24-fba06bbb2e63> in <module>()
     76         #shuffle=True,
     77         validation_data= fixed_generator(validation_generator), # fixed
---> 78         nb_val_samples=5
     79         )

/home/osman/.virtualenvs/keras/local/lib/python2.7/site-packages/keras/engine/training.pyc in fit_generator(self, generator, samples_per_epoch, nb_epoch, verbose, callbacks, validation_data, nb_val_samples, class_weight, max_q_size, nb_worker, pickle_safe)
   1425                     raise Exception('output of generator should be a tuple '
   1426                                     '(x, y, sample_weight) '
-> 1427                                     'or (x, y). Found: ' + str(generator_output))
   1428                 # build batch logs
   1429                 batch_logs = {}

Exception: output of generator should be a tuple (x, y, sample_weight) or (x, y). Found: [[[[ 1.          1.          1.         ...,  1.          1.          1.        ]
   [ 1.          1.          1.         ...,  1.          1.          1.        ]
   [ 1.          1.          1.         ...,  1.          1.          1.        ]
   ...,
   [ 1.          1.          1.         ...,  1.          1.          1.        ]
   [ 1.          1.          1.         ...,  1.          1.          1.        ]
   [ 1.          1.          1.         ...,  1.          1.          1.        ]]

  [[ 1.          1.          1.         ...,  1.          1.          1.        ]
   [ 1.          1.          1.         ...,  1.          1.          1.        ]
   [ 1.          1.          1.         ...,  1.          1.          1.        ]
   ...,
   [ 1.          1.          1.         ...,  1.          1.          1.        ]
   [ 1.          1.          1.         ...,  1.          1.          1.        ]
   [ 1.          1.          1.         ...,  1.          1.          1.        ]]

  [[ 1.          1.          1.         ...,  1.          1.          1.        ]
   [ 1.          1.          1.         ...,  1.          1.          1.        ]
   [ 1.          1.          1.         ...,  1.          1.          1.        ]
   ...,
   [ 1.          1.          1.         ...,  1.          1.          1.        ]
   [ 1.          1.          1.         ...,  1.          1.          1.        ]
   [ 1.          1.          1.         ...,  1.          1.          1.        ]]]

 [[[ 1.          1.          1.         ...,  1.          1.          1.        ]
   [ 1.          1.          1.         ...,  1.          1.          1.        ]
   [ 1.          1.          1.         ...,  1.          1.          1.        ]
   ...,
   [ 1.          1.          1.         ...,  1.          1.          1.        ]
   [ 1.          1.          1.         ...,  1.          1.          1.        ]
   [ 1.          1.          1.         ...,  1.          1.          1.        ]]

  [[ 1.          1.          1.         ...,  1.          1.          1.        ]
   [ 1.          1.          1.         ...,  1.          1.          1.        ]
   [ 1.          1.          1.         ...,  1.          1.          1.        ]
   ...,
   [ 1.          1.          1.         ...,  1.          1.          1.        ]
   [ 1.          1.          1.         ...,  1.          1.          1.        ]
   [ 1.          1.          1.         ...,  1.          1.          1.        ]]

  [[ 1.          1.          1.         ...,  1.          1.          1.        ]
   [ 1.          1.          1.         ...,  1.          1.          1.        ]
   [ 1.          1.          1.         ...,  1.          1.          1.        ]
   ...,
   [ 1.          1.          1.         ...,  1.          1.          1.        ]
   [ 1.          1.          1.         ...,  1.          1.          1.        ]
   [ 1.          1.          1.         ...,  1.          1.          1.        ]]]

 [[[ 0.47058827  0.47058827  0.47058827 ...,  0.50196081  0.50196081
     0.50196081]
   [ 0.47058827  0.47058827  0.47058827 ...,  0.50196081  0.50196081
     0.50196081]
   [ 0.48235297  0.48235297  0.48235297 ...,  0.50196081  0.50196081
     0.50196081]
   ...,
   [ 1.          1.          1.         ...,  0.58039218  0.58039218
     0.58039218]
   [ 1.          1.          1.         ...,  0.58823532  0.58823532
     0.58039218]
   [ 1.          1.          1.         ...,  0.58039218  0.58039218
     0.58823532]]

  [[ 0.67450982  0.67450982  0.67450982 ...,  0.71372551  0.71372551
     0.71372551]
   [ 0.68235296  0.68235296  0.68235296 ...,  0.71372551  0.71372551
     0.71372551]
   [ 0.68235296  0.68235296  0.68235296 ...,  0.71372551  0.71372551
     0.71372551]
   ...,
   [ 0.97647065  0.97647065  0.97647065 ...,  0.64705884  0.64705884
     0.64705884]
   [ 0.97647065  0.97647065  0.97647065 ...,  0.66666669  0.66666669
     0.64705884]
   [ 0.97647065  0.97647065  0.97647065 ...,  0.66274512  0.66274512
     0.66666669]]

  [[ 0.90980399  0.90980399  0.90980399 ...,  0.98823535  0.98823535
     0.98823535]
   [ 0.91764712  0.91764712  0.91764712 ...,  0.98823535  0.98823535
     0.98823535]
   [ 0.92941183  0.92941183  0.92941183 ...,  0.98823535  0.98823535
     0.98823535]
   ...,
   [ 0.95294124  0.95294124  0.95294124 ...,  0.62352943  0.62352943
     0.62352943]
   [ 0.95294124  0.95294124  0.95294124 ...,  0.63137257  0.63137257
     0.62352943]
   [ 0.95294124  0.95294124  0.95294124 ...,  0.627451    0.627451
     0.63137257]]]

 ...,
 [[[ 1.          1.          1.         ...,  1.          1.          1.        ]
   [ 1.          1.          1.         ...,  1.          1.          1.        ]
   [ 1.          1.          1.         ...,  1.          1.          1.        ]
   ...,
   [ 1.          1.          1.         ...,  1.          1.          1.        ]
   [ 1.          1.          1.         ...,  1.          1.          1.        ]
   [ 1.          1.          1.         ...,  1.          1.          1.        ]]

  [[ 1.          1.          1.         ...,  1.          1.          1.        ]
   [ 1.          1.          1.         ...,  1.          1.          1.        ]
   [ 1.          1.          1.         ...,  1.          1.          1.        ]
   ...,
   [ 1.          1.          1.         ...,  1.          1.          1.        ]
   [ 1.          1.          1.         ...,  1.          1.          1.        ]
   [ 1.          1.          1.         ...,  1.          1.          1.        ]]

  [[ 1.          1.          1.         ...,  1.          1.          1.        ]
   [ 1.          1.          1.         ...,  1.          1.          1.        ]
   [ 1.          1.          1.         ...,  1.          1.          1.        ]
   ...,
   [ 1.          1.          1.         ...,  1.          1.          1.        ]
   [ 1.          1.          1.         ...,  1.          1.          1.        ]
   [ 1.          1.          1.         ...,  1.          1.          1.        ]]]

 [[[ 0.98431379  0.98431379  0.98431379 ...,  0.97647065  0.97647065
     0.97647065]
   [ 0.98431379  0.98431379  0.98431379 ...,  0.97647065  0.97647065
     0.97647065]
   [ 0.98431379  0.98431379  0.98431379 ...,  0.97647065  0.97647065
     0.97647065]
   ...,
   [ 0.98431379  0.98431379  0.98431379 ...,  0.98431379  0.98431379
     0.98431379]
   [ 0.98431379  0.98431379  0.98431379 ...,  0.98431379  0.98431379
     0.98431379]
   [ 0.98431379  0.98431379  0.98431379 ...,  0.98431379  0.98431379
     0.98431379]]

  [[ 0.98431379  0.98431379  0.98431379 ...,  0.97647065  0.97647065
     0.97647065]
   [ 0.98431379  0.98431379  0.98431379 ...,  0.97647065  0.97647065
     0.97647065]
   [ 0.98431379  0.98431379  0.98431379 ...,  0.97647065  0.97647065
     0.97647065]
   ...,
   [ 0.98431379  0.98431379  0.98431379 ...,  0.98431379  0.98431379
     0.98431379]
   [ 0.98431379  0.98431379  0.98431379 ...,  0.98431379  0.98431379
     0.98431379]
   [ 0.98431379  0.98431379  0.98431379 ...,  0.98431379  0.98431379
     0.98431379]]

  [[ 0.98431379  0.98431379  0.98431379 ...,  0.97647065  0.97647065
     0.97647065]
   [ 0.98431379  0.98431379  0.98431379 ...,  0.97647065  0.97647065
     0.97647065]
   [ 0.98431379  0.98431379  0.98431379 ...,  0.97647065  0.97647065
     0.97647065]
   ...,
   [ 0.98431379  0.98431379  0.98431379 ...,  0.98431379  0.98431379
     0.98431379]
   [ 0.98431379  0.98431379  0.98431379 ...,  0.98431379  0.98431379
     0.98431379]
   [ 0.98431379  0.98431379  0.98431379 ...,  0.98431379  0.98431379
     0.98431379]]]

 [[[ 1.          1.          1.         ...,  0.98431379  0.98431379
     0.98431379]
   [ 1.          1.          1.         ...,  0.98431379  0.98431379
     0.98431379]
   [ 1.          1.          1.         ...,  0.98431379  0.98431379
     0.98431379]
   ...,
   [ 0.99607849  0.99607849  0.99607849 ...,  1.          1.          1.        ]
   [ 0.99607849  0.99607849  0.99607849 ...,  1.          1.          1.        ]
   [ 0.99607849  0.99607849  0.99607849 ...,  1.          1.          1.        ]]

  [[ 1.          1.          1.         ...,  0.99215692  0.99215692
     0.99215692]
   [ 1.          1.          1.         ...,  0.99215692  0.99215692
     0.99215692]
   [ 1.          1.          1.         ...,  0.99215692  0.99215692
     0.99215692]
   ...,
   [ 0.99607849  0.99607849  0.99607849 ...,  0.99607849  0.99607849
     0.99607849]
   [ 0.99607849  0.99607849  0.99607849 ...,  0.99607849  0.99607849
     0.99607849]
   [ 0.99607849  0.99607849  0.99607849 ...,  0.99607849  0.99607849
     0.99607849]]

  [[ 1.          1.          1.         ...,  0.98039222  0.98039222
     0.98039222]
   [ 1.          1.          1.         ...,  0.98039222  0.98039222
     0.98039222]
   [ 1.          1.          1.         ...,  0.98039222  0.98039222
     0.98039222]
   ...,
   [ 0.99607849  0.99607849  0.99607849 ...,  1.          1.          1.        ]
   [ 0.99607849  0.99607849  0.99607849 ...,  1.          1.          1.        ]
   [ 0.99607849  0.99607849  0.99607849 ...,  1.          1.          1.        ]]]]

I got it working. We needed to apply the fix for the training generator as well. I did some other small fixes on the code such as:

Output conv should have 3 channels, since the image is RGB.
One of the convolutions was missing the border_mode='same'
Changed the samples_per_epoch to what I assume is the correct value.
Changed nb_val_samples as well accordingly.

Let me know if the code below works for you.
from keras.layers import Input, Dense, Convolution2D, MaxPooling2D, UpSampling2D
from keras.models import Model
from keras.preprocessing.image import ImageDataGenerator

def fixed_generator(generator):
    for batch in generator:
        yield (batch, batch)

# dimensions of our images.
img_width, img_height = 256, 256

train_data_dir = '/home/osman/keras_test/train'
validation_data_dir = '/home/osman/keras_test/validation'
nb_train_samples = 200
nb_validation_samples = 50
nb_epoch = 50
batch_size = 32

input_img = Input(shape=(3, img_width, img_height))

x = Convolution2D(16, 3, 3, activation='relu', border_mode='same')(input_img)
x = MaxPooling2D((2, 2), border_mode='same')(x)
x = Convolution2D(8, 3, 3, activation='relu', border_mode='same')(x)
x = MaxPooling2D((2, 2), border_mode='same')(x)
x = Convolution2D(8, 3, 3, activation='relu', border_mode='same')(x)
encoded = MaxPooling2D((2, 2), border_mode='same')(x)

# at this point the representation is (8, 4, 4) i.e. 128-dimensional

x = Convolution2D(8, 3, 3, activation='relu', border_mode='same')(encoded)
x = UpSampling2D((2, 2))(x)
x = Convolution2D(8, 3, 3, activation='relu', border_mode='same')(x)
x = UpSampling2D((2, 2))(x)
x = Convolution2D(16, 3, 3, activation='relu', border_mode='same')(x)
x = UpSampling2D((2, 2))(x)
decoded = Convolution2D(3, 3, 3, activation='sigmoid', border_mode='same')(x)

autoencoder = Model(input_img, decoded)
autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy')

# this is the augmentation configuration we will use for training
train_datagen = ImageDataGenerator(
        rescale=1./255,
        shear_range=0.2,
        zoom_range=0.2,
        horizontal_flip=True)

# this is the augmentation configuration we will use for testing:
# only rescaling
test_datagen = ImageDataGenerator(rescale=1./255)

train_generator = train_datagen.flow_from_directory(
        train_data_dir,
        target_size=(img_width, img_height),
        batch_size=batch_size,
        class_mode=None)

print type(train_generator)

validation_generator = test_datagen.flow_from_directory(
        validation_data_dir,
        target_size=(img_width, img_height),
        batch_size=batch_size,
        class_mode=None)

autoencoder.fit_generator(
        fixed_generator(train_generator),
        samples_per_epoch=nb_train_samples,
        nb_epoch=nb_epoch,
        validation_data=fixed_generator(validation_generator),
        nb_val_samples=nb_validation_samples
        )

@robertomest  your modification is running. I trained it with small dataset. And tested it with an image. like that,
# test autoencoder

import matplotlib.pyplot as plt
import numpy as np
import cv2

filename = '/home/osman/logo_for_test/2.jpg'
im = cv2.resize(cv2.imread(filename), (256, 256)).astype(np.float32)
im = im * 1./255
im = im.transpose((2,0,1))

datas = np.zeros((1, 3, 256, 256))
datas[0, :, :, :] = im;

decoded_imgs = autoencoder.predict(datas)

finim = (decoded_imgs[0]*255).astype(int)
finim = finim.transpose(1, 2, 0)
plt.imshow(finim)
plt.show()

output is gray image, although the input is RGB image. Could you point out the problem, thank you.

Sorry, I'm not sure I understand. Do you want the image in the output to be gray? If so, you should have targets that are gray images.

@robertomest  I want to compare the input and output for evaluating the trained autoencoder.  My output image is a gray image, it should be a colorful image.

Ok, I understand it now. It is quite interesting that your decoded image has no color. I just trained the autoencoder on a single image, this is the result:

The autoencoder was able to reproduce the colors just fine. Maybe try and fit the autoencoder on few images to see how it goes? Or upload some reconstruced pictures. To get an image to reproduce, I simply got a batch from the Iterator and selected the first image:
img = next(validation_generator)[:1] # Get one image
dec = autoencoder.predict(img) # Decoded image
img = img[0]
dec = dec[0]
img = (img.transpose((1, 2, 0))*255).astype('uint8')
dec = (dec.transpose((1, 2, 0))*255).astype('uint8')

plt.imshow(np.hstack((img, dec)))
plt.title('Original and reconstructed images')
plt.show()

@robertomest Thank you, I think I have not trained enough in big dataset. I am running the again with more epoch.

Firstly I am very thankful for these tools.
In my case I get a problem with the call of:
autoencoder.fit_generator(
fixed_generator(train_generator),
steps_per_epoch=nb_train_samples,
validation_steps=nb_validation_samples,
epochs=nb_epoch,
validation_data=fixed_generator(validation_generator)
)
------------------------------------Error-------------------------------------------
ValueError: Error when checking input: expected input_2 to have shape (None, 3, 256, 256) but got array with shape (32, 256, 256, 3)
-------------------------------------------Console Output---------------------------------------------------------
Python 3.5.2 |Anaconda custom (64-bit)| (default, Jul  2 2016, 17:53:06)
Type "copyright", "credits" or "license" for more information.
IPython 6.1.0 -- An enhanced Interactive Python.
Restarting kernel...
from keras.layers import Input, Convolution2D, MaxPooling2D, UpSampling2D
from keras.models import Model
from keras.preprocessing.image import ImageDataGenerator
def fixed_generator(generator):
for batch in generator:
yield (batch, batch)
dimensions of our images.
img_width, img_height = 256, 256
train_data_dir = 'train_images_prepared'
validation_data_dir = 'test_images_prepared'
nb_train_samples = 46
nb_validation_samples = 12
nb_epoch = 50
batch_size = 32
input_img = Input(shape=(3, img_width, img_height))
x = Convolution2D(16, (3, 3), activation='relu', padding='same')(input_img)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Convolution2D(8, (3, 3), activation='relu', padding='same')(x)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Convolution2D(8, (3, 3), activation='relu', padding='same')(x)
encoded = MaxPooling2D((2, 2), padding='same')(x)
at this point the representation is (8, 4, 4) i.e. 128-dimensional
x = Convolution2D(8, (3, 3), activation='relu', padding='same')(encoded)
x = UpSampling2D((2, 2))(x)
x = Convolution2D(8, (3, 3), activation='relu', padding='same')(x)
x = UpSampling2D((2, 2))(x)
x = Convolution2D(16, (3, 3), activation='relu', padding='same')(x)
x = UpSampling2D((2, 2))(x)
decoded = Convolution2D(3, (3, 3), activation='sigmoid', padding='same')(x)
autoencoder = Model(input_img, decoded)
autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy')
this is the augmentation configuration we will use for training
train_datagen = ImageDataGenerator(
rescale=1./255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True)
this is the augmentation configuration we will use for testing:
only rescaling
test_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory(
train_data_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode=None)
print("------------------Training Set -----------")
print(type(train_generator))
print(type(next(train_generator)))
print(next(train_generator).shape)
validation_generator = test_datagen.flow_from_directory(
validation_data_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode=None)
print("------------------validation Set -----------")
print(type(validation_generator))
print(type(next(validation_generator)))
print(next(validation_generator).shape)
Using TensorFlow backend.
Found 46 images belonging to 1 classes.
------------------Training Set -----------
<class 'keras.preprocessing.image.DirectoryIterator'>
<class 'numpy.ndarray'>
(14, 256, 256, 3)
Found 12 images belonging to 1 classes.
------------------validation Set -----------
<class 'keras.preprocessing.image.DirectoryIterator'>
<class 'numpy.ndarray'>
(12, 256, 256, 3)
autoencoder.fit_generator(
fixed_generator(train_generator),
steps_per_epoch=nb_train_samples,
validation_steps=nb_validation_samples,
epochs=nb_epoch,
validation_data=fixed_generator(validation_generator)
)
Epoch 1/50
Traceback (most recent call last):
File "", line 6, in
validation_data=fixed_generator(validation_generator)
File "/home/riadh/anaconda2/envs/gpuDeepLearning/lib/python3.5/site-packages/keras/legacy/interfaces.py", line 88, in wrapper
return func(*args, **kwargs)
File "/home/riadh/anaconda2/envs/gpuDeepLearning/lib/python3.5/site-packages/keras/engine/training.py", line 1890, in fit_generator
class_weight=class_weight)
File "/home/riadh/anaconda2/envs/gpuDeepLearning/lib/python3.5/site-packages/keras/engine/training.py", line 1627, in train_on_batch
check_batch_axis=True)
File "/home/riadh/anaconda2/envs/gpuDeepLearning/lib/python3.5/site-packages/keras/engine/training.py", line 1305, in _standardize_user_data
exception_prefix='input')
File "/home/riadh/anaconda2/envs/gpuDeepLearning/lib/python3.5/site-packages/keras/engine/training.py", line 139, in _standardize_input_data
str(array.shape))
ValueError: Error when checking input: expected input_1 to have shape (None, 3, 256, 256) but got array with shape (32, 256, 256, 3)
Please Help :(

It is a compact tutorial to learn autoencoder especially colour images.   thank to all

Same as @biswajitcsecu said, this serves as a great tutorial; many thanks @robertomest !

I trained this model for 224*224 images on Scene15 dataset which contains two folders: train and val. Each folder contains 15 sub-folders (representing categories) containing images and trained. Do I need to put all the images from categories into single train and val folder? The reconstruction error is 56% if I don't do so.
from keras.layers import Input, Dense, Convolution2D, MaxPooling2D, UpSampling2D
from keras.models import Model
from keras.optimizers import SGD
from keras.callbacks import ModelCheckpoint, ReduceLROnPlateau
from keras.preprocessing.image import ImageDataGenerator
WEIGHTS_CLASSIFIER = 'cae.h5'
def fixed_generator(generator):
for batch in generator:
yield (batch, batch)
dimensions of our images.
img_width, img_height = 224, 224
train_data_dir = 'C:/Experiment/vggimagenet-finetune(scene15)/data/train'
validation_data_dir = 'C:/Experiment/vggimagenet-finetune(scene15)/data/val'
nb_train_samples = 1320
nb_validation_samples = 180
nb_epoch = 50
batch_size = 32
input_img = Input(shape=(img_width, img_height, 3))
x = Convolution2D(16, 3, 3, activation='relu', border_mode='same')(input_img)
x = MaxPooling2D((2, 2), border_mode='same')(x)
x = Convolution2D(8, 3, 3, activation='relu', border_mode='same')(x)
x = MaxPooling2D((2, 2), border_mode='same')(x)
x = Convolution2D(8, 3, 3, activation='relu', border_mode='same')(x)
#x = Convolution2D(512, 3, 3, activation='relu', border_mode='same')(x)
encoded = MaxPooling2D((2, 2), border_mode='same')(x)
at this point the representation is (8, 4, 4) i.e. 128-dimensional
#x = Convolution2D(512, 3, 3, activation='relu', border_mode='same')(x)
x = Convolution2D(8, 3, 3, activation='relu', border_mode='same')(encoded)
x = UpSampling2D((2, 2))(x)
x = Convolution2D(8, 3, 3, activation='relu', border_mode='same')(x)
x = UpSampling2D((2, 2))(x)
x = Convolution2D(16, 3, 3, activation='relu', border_mode='same')(x)
x = UpSampling2D((2, 2))(x)
decoded = Convolution2D(3, 3, 3, activation='sigmoid', border_mode='same')(x)
autoencoder = Model(input_img, decoded)
print(autoencoder.summary())
opt = SGD(lr=0.1)
autoencoder.compile(optimizer=opt, loss='binary_crossentropy')
this is the augmentation configuration we will use for training
train_datagen = ImageDataGenerator(
rescale=1. / 255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True)
this is the augmentation configuration we will use for testing:
only rescaling
test_datagen = ImageDataGenerator(rescale=1. / 255)
train_generator = train_datagen.flow_from_directory(
train_data_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode=None)
print(type(train_generator))
validation_generator = test_datagen.flow_from_directory(
validation_data_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode=None)
lr_decay = ReduceLROnPlateau(factor=0.9, patience=1, verbose=1)
checkpointer = ModelCheckpoint(filepath=WEIGHTS_CLASSIFIER, save_best_only=True, verbose=1)
autoencoder.fit_generator(
fixed_generator(train_generator),
samples_per_epoch=nb_train_samples,
nb_epoch=nb_epoch,
validation_data=fixed_generator(validation_generator),
nb_val_samples=nb_validation_samples,
callbacks=[lr_decay, checkpointer]
)

I trained this model for 224*224 images on Scene15 dataset which contains two folders: train and val. Each folder contains 15 sub-folders (representing categories) containing images and trained. Do I need to put all the images from categories into single train and val folder? The reconstruction error is 56% if I don't do so.

Hi @csitaula, I think you do not need to put them in a single folder. When instantiating the generator we use the argument class_mode=None which should mean no labels are returned regardless. You could check the images returned by the generator just to make sure they are coming out as expected.
On another note, this was just a simple example on how to train an autoencoder. I just fixed the code so that it would actually run and then tested it on a single image. I am not sure the architecture and/or hyperparameters are adequate for a larger dataset.

@robertomest  can you help me dubug the code? I can provide you code and datasets to see. I changed the architecture a bit and trained. The loss stands around 56%, both training and validation loss. No overfitting, I think. I ran for 50 epochs.

I tried working it in R. How to convert def fixed_generator(generator):
for batch in generator:
yield (batch, batch) into R?

No one talks about  the label which is the generated images themselves, I didn't see the important part of training, aka model.fit_generator(...), what should be put in the parentheses that the training process knows that the labels are just the images generated by the generator itself?

@inspirepassion agree

@robertomest your reply helped me a lot. do you have any suggestion to make data generator directly from .npy files? looking forward your reply.


pushState is not triggering window hashchange event

Describe the bug
When using pushState browser url bar get's updated but window hashchange event never fires
Reproduction
<svelte:window on:hashchange={(event) => { console.log('hash change ', event.newURL) }} />

<button on:click={() => { pushState('#second', { step: 2 }) }} >Second</button>

Logs
No response
System Info
System:
    OS: macOS 14.4.1
    CPU: (8) arm64 Apple M1 Pro
    Memory: 383.73 MB / 16.00 GB
    Shell: 5.9 - /bin/zsh
  Binaries:
    Node: 21.1.0 - ~/Library/Caches/fnm_multishells/15481_1711563273826/bin/node
    Yarn: 1.22.21 - ~/Library/Caches/fnm_multishells/15481_1711563273826/bin/yarn
    npm: 10.2.0 - ~/Library/Caches/fnm_multishells/15481_1711563273826/bin/npm
    pnpm: 8.15.5 - /opt/homebrew/bin/pnpm
    Watchman: 2<IP_ADDRESS> - /opt/homebrew/bin/watchman
  Browsers:
    Chrome: 122.0.6261.129
    Safari: 17.4.1
  npmPackages:
    @sveltejs/adapter-auto: ^3.2.0 => 3.2.0
    @sveltejs/kit: ^2.5.4 => 2.5.4
    @sveltejs/vite-plugin-svelte: ^3.0.2 => 3.0.2
    svelte: ^4.2.12 => 4.2.12
    vite: ^5.2.6 => 5.2.6

Severity
serious, but I can work around it
Additional Information
No response

pushState in sveltekit uses the native history.pushState method which never causes hashchange event to be fired.
https://developer.mozilla.org/en-US/docs/Web/API/History/pushState#description

Silly me.


Remove version: Catacombae.HFSExplorer version 2021.2.22

[Automated] It returns code over 400 in all urls
Microsoft Reviewers: Open in CodeFlow

Close with reason: URL works;


vue-cli使用less出错：This relative module was not found

项目结构是：
-src
-assets
- components
    -index.js
    -style.less
    -template.html

-router
-App.vue
-main.js
使用vue-cli脚手架，想把.vue单文件改成html+js+less形式进行架构的组建，webpack.base.conf.js中less-loader的配置是：
**{         test: /\.less$/,         loader: 'style-loader!css-loader!less-loader'       },**
js引入.less文件是：
**import './style.less'**
在使用less时出现了如下问题：
`$ npm run dev

<EMAIL_ADDRESS>dev D:\work\project\demo\music
node build/dev-server.js

Starting dev server...
ERROR  Failed to compile with 1 errors16:39:26

This relative module was not found:

./style.less in ./src/components/index.js

Listening at http://localhost:8080
`
请问如何解决

Hi, thanks for your interest but Github issues are for bug reports and feature requests only. You can ask questions on the forum, the Discord server, gitter or StackOverflow.

It's telling you the file ./style.less is not there. You may need a different path


Fix scoping for chrome notifications event

This also renames trigger to emit for chrome_browser_api
Fixes #1343

:thumbsup: from @iislucas


cmd/link: TestFallocate fallocate_test error

What version of Go are you using (go version)?

$ go version
go version go1.12.9 darwin/amd64

Does this issue reproduce with the latest release?
no
What operating system and processor architecture are you using (go env)?
go env Output
$ go env
GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/rehack/Library/Caches/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/rehack/go"
GOPROXY=""
GORACE=""
GOROOT="/usr/local/webserver/go"
GOTMPDIR=""
GOTOOLDIR="/usr/local/webserver/go/pkg/tool/darwin_amd64"
GCCGO="gccgo"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/1x/wz0y29vj6wg9frw1vcwb8sl40000gn/T/go-build191766201=/tmp/go-build -gno-record-gcc-switches -fno-common"

What did you do?
Compile Go from source go1.15.src

➜  src ./all.bash

What did you expect to see?
No FAIL
What did you see instead?

ok      cmd/go/internal/renameio        0.505s
ok      cmd/go/internal/search  0.017s
ok      cmd/go/internal/test    0.029s
ok      cmd/go/internal/txtar   0.017s
ok      cmd/go/internal/web     0.022s
ok      cmd/go/internal/work    0.027s
ok      cmd/gofmt       0.046s
ok      cmd/internal/buildid    0.258s
ok      cmd/internal/dwarf      0.019s
ok      cmd/internal/edit       0.015s
ok      cmd/internal/goobj      0.863s
ok      cmd/internal/goobj2     0.015s
ok      cmd/internal/moddeps    1.456s
ok      cmd/internal/obj        0.016s
ok      cmd/internal/obj/arm64  0.131s
ok      cmd/internal/obj/ppc64  0.100s
ok      cmd/internal/obj/riscv  0.096s
ok      cmd/internal/obj/x86    10.811s
ok      cmd/internal/objabi     0.015s
ok      cmd/internal/src        0.016s
ok      cmd/internal/test2json  0.091s
ok      cmd/link        24.156s
ok      cmd/link/internal/benchmark     0.016s
--- FAIL: TestFallocate (0.01s)
    fallocate_test.go:61: unexpected disk usage: got 2040 blocks, want 2048
    fallocate_test.go:61: unexpected disk usage: got 6136 blocks, want 6144
FAIL
FAIL    cmd/link/internal/ld    13.383s
ok      cmd/link/internal/loader        0.034s
ok      cmd/link/internal/sym   0.016s
ok      cmd/nm  7.003s
ok      cmd/objdump     6.613s
ok      cmd/oldlink/internal/sym        0.016s
ok      cmd/pack        3.216s
ok      cmd/trace       0.080s
ok      cmd/vet 15.012s
FAIL
go tool dist: Failed: exit status 1

@codesboy can you confirm that you are using the released 1.15 sources and not the beta/alpha.
cc @cherrymui
As this was supposed to be fixed in #39905

@AlexRouSg YES . I use go 1.15 sources:  https://golang.org/dl/go1.15.src.tar.gz
It fixed in https://github.com/golang/go/commit/a4ba411b19fa0111a3c8fe059fcf5489d3bd6bbf
but this problem has bobbed up again.I need help.

If you need it to compile urgently, you can try editing src/cmd/link/internal/ld/fallocate_test.go and adding a t.Skip("fallocate is not supported") at the start of the function.

Thank you for this report @codesboy and welcome to the Go project! Thank you for the response @AlexRouSg and suggestion for a fix.
@codesboy your report says that you are using Go1.12.9 yet you just replied to @AlexRouSg in https://github.com/golang/go/issues/41127#issuecomment-683302415 that you are using Go1.15. Could you please re-verify the bug report? Could you perhaps run git log | head -n 10 in your Go tree and report that? Thank you.

Hi Emmanuel, I think he's building the 1.15 source tree with 1.12.9.

Thanks @networkimprov for the clarification, my apologies, I missed that in the report (and was reading on my iPad) @codesboy stated the problem.

@networkimprov @odeke-em Yes! i'm installing Go1.15 from source(https://golang.org/dl/go1.15.src.tar.gz) with  go compiler version 1.12.9.
Thanks in advance for your help.

Thanks for the report. What version of macOS are you running? What file system are you running on (if it is not the default)? It is interesting that it got 8 fewer blocks. Is the failure reproducible? Thanks.

macOS version: High Sierra 10.13.6

➜  ~ uname -a
Darwin rehackdeiMac.local 17.7.0 Darwin Kernel Version 17.7.0: Thu Jun 18 21:21:34 PDT 2020; root:xnu-45<IP_ADDRESS>~1/RELEASE_X86_64 x86_64

Files System: APFS
Steps to reproduce

➜  ~ wget https://golang.org/dl/go1.15.src.tar.gz
--2020-09-01 10:07:14--  https://golang.org/dl/go1.15.src.tar.gz
正在连接 <IP_ADDRESS>:1087... 已连接。
已发出 Proxy 请求，正在等待回应... 302 Found
位置：https://dl.google.com/go/go1.15.src.tar.gz [跟随至新的 URL]
--2020-09-01 10:07:15--  https://dl.google.com/go/go1.15.src.tar.gz
正在连接 <IP_ADDRESS>:1087... 已连接。
已发出 Proxy 请求，正在等待回应... 200 OK
长度：23002901 (22M) [application/octet-stream]
正在保存至: “go1.15.src.tar.gz”

go1.15.src.tar.gz                                       100%[============================================================================================================================>]  21.94M  1.21MB/s  用时 22s

2020-09-01 10:07:38 (1019 KB/s) - 已保存 “go1.15.src.tar.gz” [23002901/23002901])

➜  ~ tar zxvf go1.15.src.tar.gz
➜  ~ cd go/src
➜  src ./all.bash
warning: GOPATH set to GOROOT (/Users/rehack/go) has no effect
Building Go cmd/dist using /usr/local/devenv/go. (go1.12.9 darwin/amd64)
Building Go toolchain1 using /usr/local/devenv/go.

Building Go toolchain2 using go_bootstrap and Go toolchain1.
Building Go toolchain3 using go_bootstrap and Go toolchain2.
Building packages and commands for darwin/amd64.
warning: GOPATH set to GOROOT (/Users/rehack/go) has no effect

##### Testing packages.
ok      archive/tar     0.080s
ok      archive/zip     0.082s
ok      bufio   0.103s
ok      bytes   0.415s
ok      compress/bzip2  0.089s
ok      compress/flate  1.462s
ok      compress/gzip   0.039s
ok      compress/lzw    0.030s
ok      compress/zlib   0.046s
ok      container/heap  0.027s
ok      container/list  0.020s
ok      container/ring  0.025s
ok      context 0.035s
ok      crypto  0.020s
ok      crypto/aes      0.043s
ok      crypto/cipher   0.045s
ok      crypto/des      0.026s
ok      crypto/dsa      0.021s
ok      crypto/ecdsa    0.177s
ok      crypto/ed25519  0.107s
ok      crypto/elliptic 0.062s
ok      crypto/hmac     0.020s
ok      crypto/internal/subtle  0.021s
ok      crypto/md5      0.023s
ok      crypto/rand     0.044s
ok      crypto/rc4      0.054s
ok      crypto/rsa      0.120s
ok      crypto/sha1     0.050s
ok      crypto/sha256   0.024s
ok      crypto/sha512   0.019s
ok      crypto/subtle   0.031s
ok      crypto/tls      1.325s
ok      crypto/x509     2.155s
ok      database/sql    0.637s
ok      database/sql/driver     0.022s
ok      debug/dwarf     0.039s
ok      debug/elf       0.047s
ok      debug/gosym     0.021s
ok      debug/macho     0.031s
ok      debug/pe        0.054s
ok      debug/plan9obj  0.022s
ok      encoding/ascii85        0.023s
ok      encoding/asn1   0.042s
ok      encoding/base32 0.035s
ok      encoding/base64 0.023s
ok      encoding/binary 0.151s
ok      encoding/csv    0.029s
ok      encoding/gob    0.041s
ok      encoding/hex    0.022s
ok      encoding/json   0.353s
ok      encoding/pem    0.044s
ok      encoding/xml    0.036s
ok      errors  0.019s
ok      expvar  0.021s
ok      flag    0.131s
ok      fmt     0.151s
ok      go/ast  0.022s
ok      go/build        4.481s
ok      go/constant     0.022s
ok      go/doc  0.103s
ok      go/format       0.030s
ok      go/importer     0.170s
ok      go/internal/gccgoimporter       0.037s
ok      go/internal/gcimporter  0.681s
ok      go/internal/srcimporter 11.453s
ok      go/parser       0.056s
ok      go/printer      0.222s
ok      go/scanner      0.028s
ok      go/token        0.033s
ok      go/types        1.207s
ok      hash    0.021s
ok      hash/adler32    0.025s
ok      hash/crc32      0.021s
ok      hash/crc64      0.021s
ok      hash/fnv        0.020s
ok      hash/maphash    0.111s
ok      html    0.020s
ok      html/template   0.100s
ok      image   0.180s
ok      image/color     0.040s
ok      image/draw      0.096s
ok      image/gif       0.352s
ok      image/jpeg      0.338s
ok      image/png       0.054s
ok      index/suffixarray       0.194s
ok      internal/cpu    0.079s
ok      internal/fmtsort        0.020s
ok      internal/poll   0.043s
ok      internal/profile        0.026s
ok      internal/reflectlite    0.070s
ok      internal/singleflight   0.030s
ok      internal/trace  0.061s
ok      internal/unsafeheader   0.019s
ok      internal/xcoff  0.034s
ok      io      0.053s
ok      io/ioutil       0.044s
ok      log     0.023s
ok      log/syslog      1.249s
ok      math    0.026s
ok      math/big        0.919s
ok      math/bits       0.022s
ok      math/cmplx      0.022s
ok      math/rand       0.165s
ok      mime    0.198s
ok      mime/multipart  0.300s
ok      mime/quotedprintable    0.020s
ok      net     2.240s
ok      net/http        14.766s
ok      net/http/cgi    0.923s
ok      net/http/cookiejar      0.028s
ok      net/http/fcgi   0.024s
ok      net/http/httptest       0.051s
ok      net/http/httptrace      0.022s
ok      net/http/httputil       0.065s
ok      net/http/internal       0.020s
ok      net/http/pprof  5.116s
ok      net/internal/socktest   0.014s
ok      net/mail        0.016s
ok      net/rpc 0.058s
ok      net/rpc/jsonrpc 0.034s
ok      net/smtp        0.030s
ok      net/textproto   0.016s
ok      net/url 0.028s
ok      os      1.210s
ok      os/exec 1.063s
ok      os/signal       2.180s
ok      os/user 0.107s
ok      path    0.030s
ok      path/filepath   0.098s
ok      plugin  0.042s
ok      reflect 0.270s
ok      regexp  0.087s
ok      regexp/syntax   0.685s
ok      runtime 77.568s
ok      runtime/debug   0.077s
ok      runtime/internal/atomic 0.032s
ok      runtime/internal/math   0.022s
ok      runtime/internal/sys    0.024s
ok      runtime/pprof   7.809s
ok      runtime/race    0.430s
ok      runtime/trace   0.885s
ok      sort    0.093s
ok      strconv 1.427s
ok      strings 0.220s
ok      sync    0.431s
ok      sync/atomic     0.053s
ok      syscall 0.189s
ok      testing 0.330s
ok      testing/iotest  0.018s
ok      testing/quick   0.084s
ok      text/scanner    0.022s
ok      text/tabwriter  0.021s
ok      text/template   0.061s
ok      text/template/parse     0.024s
ok      time    2.094s
ok      unicode 0.025s
ok      unicode/utf16   0.020s
ok      unicode/utf8    0.023s
ok      cmd/addr2line   3.549s
ok      cmd/api 11.828s
ok      cmd/asm/internal/asm    1.917s
ok      cmd/asm/internal/lex    0.055s
ok      cmd/compile     0.023s
ok      cmd/compile/internal/gc 24.612s
ok      cmd/compile/internal/logopt     0.756s
ok      cmd/compile/internal/ssa        0.839s
ok      cmd/compile/internal/syntax     0.033s
ok      cmd/compile/internal/test       0.019s [no tests to run]
ok      cmd/compile/internal/types      0.019s
ok      cmd/cover       5.147s
ok      cmd/doc 0.302s
ok      cmd/fix 3.910s
ok      cmd/go  110.720s
ok      cmd/go/internal/auth    0.028s
ok      cmd/go/internal/cache   0.454s
ok      cmd/go/internal/generate        0.034s
ok      cmd/go/internal/get     1.279s
ok      cmd/go/internal/imports 0.029s
ok      cmd/go/internal/load    0.027s
ok      cmd/go/internal/lockedfile      0.121s
ok      cmd/go/internal/lockedfile/internal/filelock    0.060s
ok      cmd/go/internal/modconv 0.042s
ok      cmd/go/internal/modfetch        1.301s
ok      cmd/go/internal/modfetch/codehost       0.028s
ok      cmd/go/internal/modfetch/zip_sum_test   0.036s
ok      cmd/go/internal/modload 0.022s
ok      cmd/go/internal/mvs     0.024s
ok      cmd/go/internal/par     0.039s
ok      cmd/go/internal/renameio        0.759s
ok      cmd/go/internal/search  0.065s
ok      cmd/go/internal/test    0.180s
ok      cmd/go/internal/txtar   0.021s
ok      cmd/go/internal/web     0.043s
ok      cmd/go/internal/work    0.034s
ok      cmd/gofmt       0.103s
ok      cmd/internal/buildid    0.718s
ok      cmd/internal/dwarf      0.019s
ok      cmd/internal/edit       0.044s
ok      cmd/internal/goobj      2.813s
ok      cmd/internal/goobj2     0.024s
ok      cmd/internal/moddeps    4.863s
ok      cmd/internal/obj        0.020s
ok      cmd/internal/obj/arm64  0.326s
ok      cmd/internal/obj/ppc64  0.194s
ok      cmd/internal/obj/riscv  0.114s
ok      cmd/internal/obj/x86    11.026s
ok      cmd/internal/objabi     0.021s
ok      cmd/internal/src        0.022s
ok      cmd/internal/test2json  0.246s
ok      cmd/link        30.221s
ok      cmd/link/internal/benchmark     0.050s
--- FAIL: TestFallocate (0.04s)
    fallocate_test.go:61: unexpected disk usage: got 2040 blocks, want 2048
    fallocate_test.go:61: unexpected disk usage: got 6136 blocks, want 6144
FAIL
FAIL    cmd/link/internal/ld    49.869s
ok      cmd/link/internal/loader        0.083s
ok      cmd/link/internal/sym   0.022s
ok      cmd/nm  10.828s
ok      cmd/objdump     14.224s
ok      cmd/oldlink/internal/sym        0.033s
ok      cmd/pack        6.511s
ok      cmd/trace       0.239s
ok      cmd/vet 21.919s
FAIL
go tool dist: Failed: exit status 1
➜  src

@cherrymui

Thanks. I don't see anything weird. I cannot reproduce it on my machine (macOS 10.15) or the builders. I'm not sure why it got 8 fewer blocks...
@jeremyfaller @aclements any idea?

I am seeing TestFallocate errors moderately often on tip on my GNU/Linux laptop.
--- FAIL: TestFallocate (0.00s)
    fallocate_test.go:61: unexpected disk usage: got 6152 blocks, want 6144

I don't see any failures on the builders.  I don't know what is different about my laptop.

I am seeing TestFallocate errors moderately often on tip on my GNU/Linux laptop.
--- FAIL: TestFallocate (0.00s)
    fallocate_test.go:61: unexpected disk usage: got 6152 blocks, want 6144

I don't see any failures on the builders.  I don't know what is different about my laptop.

Just tried again, and got
--- FAIL: TestFallocate (0.00s)
    fallocate_test.go:61: unexpected disk usage: got 4104 blocks, want 4096
    fallocate_test.go:61: unexpected disk usage: got 6152 blocks, want 6144

Just tried again, and got
--- FAIL: TestFallocate (0.00s)
    fallocate_test.go:61: unexpected disk usage: got 4104 blocks, want 4096
    fallocate_test.go:61: unexpected disk usage: got 6152 blocks, want 6144

Allocating too few blocks is somewhat concerning, but allocating a few too many is much less. I could see unusual file system configurations doing this. E.g., maybe there's some reason the file system reports one block size but actually operates with a bigger block size in some cases, or it speculatively allocates ahead.  Maybe we should make the test just accept that?

Allocating too few blocks is somewhat concerning, but allocating a few too many is much less. I could see unusual file system configurations doing this. E.g., maybe there's some reason the file system reports one block size but actually operates with a bigger block size in some cases, or it speculatively allocates ahead.  Maybe we should make the test just accept that?

SGTM, sent a CL.

SGTM, sent a CL.

There was some bug in our linker that we erroneously allocated too many blocks on Darwin. Maybe we could check that it doesn't allocate way too many blocks?

There was some bug in our linker that we erroneously allocated too many blocks on Darwin. Maybe we could check that it doesn't allocate way too many blocks?

CL 282555 has been merged, but of course feel free to adjust to whatever level you think is appropriate.  As you can see above what I saw on my system was that it sometimes allocated an extra 8 blocks.

CL 282555 has been merged, but of course feel free to adjust to whatever level you think is appropriate.  As you can see above what I saw on my system was that it sometimes allocated an extra 8 blocks.

Is this the same issue as #42005?

I don't think this is the same as #42005 . This is on darwin. #42005 is specifically for ZFS on Linux.
That said, with the CL above I think we can call this issue fixed.


Change directory structure, remove core folder

The Core directory was previously used to contain shared libraries for the domain and application layers.
It is bad practice to have libraries in these layers, so the code was cleaned of dependencies and all that was left was to delete the Core folder.

Completed in 505cfe3
Close 31


Added nvgRoundedRectEllipse and nvgRoundedRectComplex

We needed these to implement Flash API style logic of drawRoundRect (separate width and height for corners) and drawRoundRectComplex (separate radii for each corner), so I thought I'd PR them if you have any use for them too.

+1


CMakeLists.txt: added missing control_toolbox dependencies

The tests of joint_trajectory_controller need to depend on
control_toolbox, oherwise, the
(which should imho be in <> instead of "") will report
No such file or directory when building against ros2_rolling
source compile.
Signed-off-by: Matthias Schoepfer<EMAIL_ADDRESS>

(which should imho be in <> instead of "")

Just out of curiosity, why do you think that?
We are following “the rule” that inside <> are system/std-library dependencies, other deps are in "")

@destogl :
From reading https://gcc.gnu.org/onlinedocs/cpp/Search-Path.html, it would suggest to me to use "" when including header from inside the package, and <> else.


Refactor serializedStringTuples used in the index

Refactor the type along with its methods. Make them more readable, rename variables currently, it's confusing. https://github.com/prometheus/tsdb/blob/master/index/index.go#L929-L933

that would be really useful, Thanks!
looking forward to the PR.

@shubheksha if you are not working I would like to work on this issue.

@knrt10 go ahead!


Tutorial not working as expected, issue with access token and token refresh

I have followed the steps outlined in this Tutorial: Authenticate and authorize users end-to-end in Azure App Service
and successfully deployed both the frontend and backend apps and followed all the instructions provided in the documentation.
The primary distinction from the tutorial is that I configured authentication by providing the details of an existing app registration.
Here is an overview of the steps I performed:

Created AD app for frontend and backend
Added backend app's user_impersonation permission to frontend AD app
Configured authentication on both apps. And added frontend appid in allowed audiences in the backend app.
Applied authSettings property using az webapp auth set. Also updated property in https://resources.azure.com
Updated frontend appsettings

However, after configuring everything and launching the frontend application, I encountered an error related to jwt_decode.
It appears that the access token was not a valid JWT token. So I modified the remaining portions of the code to utilize the ID token id token (x-ms-token-aad-id-token) which is a valid JWT Token. This change allowed the application to function correctly.
However, I encountered an issue when testing the refresh token.
Despite calling the /.auth/refresh endpoint, the ID token failed to refresh, even after its expiration.
Furthermore, the refresh token middleware failed to refresh the token and returned a status code of 401.
I already opened an issue in js-e2e-web-app-easy-auth-app-to-app repo.

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

ID: 28fe407c-980d-6dfc-305c-63202534bf48
Version Independent ID: 09bed06c-ca37-a511-b4a4-0028e76f8919
Content: Tutorial: Authenticate users E2E - Azure App Service
Content Source: articles/app-service/tutorial-auth-aad.md
Service: app-service
GitHub Login: @cephalin
Microsoft Alias: cephalin

@sreejith-ms
Thanks for your feedback! We will investigate and update as appropriate.

@sreejith-ms We understand you are encountering issues with the refresh token. I have put together six items that would be good to check over on your environment.

Double-check the configuration of the token refresh middleware: It's possible that the token refresh middleware was not configured correctly in your backend application. You can verify this by checking the code that handles the token refresh and comparing it to the documentation for the middleware.

Verify that the refresh token is being sent correctly: Make sure that the refresh token is being sent correctly in the request to the /.auth/refresh endpoint. You can verify this by checking the request headers and body1.

Check the expiration time of the refresh token: Make sure that the expiration time of the refresh token is set correctly. You can verify this by checking the configuration of the Azure AD app registration and comparing it to the documentation.

Check the response from the /.auth/refresh endpoint: Make sure that the response from the /.auth/refresh endpoint is returning the expected values. You can verify this by checking the response headers and body1.

Check the logs for any error messages: Check the logs for any error messages related to the token refresh. This can help you identify any specific issues that may be causing the problem.

Verify that the backend app is configured to accept the ID token: Make sure that the backend app is configured to accept the ID token as a valid token. You can verify this by checking the code that handles the authentication and authorization in the backend app.

Let me know if this helps to resolve the refresh token issue. If it does not, having more information from you would be helpful such as error messages/codes and where you are seeing the errors occur. We look forward to your reply.

@BryanTrach-MSFT the suggested steps didn't provide any solution. The main problem I encountered was that the access token was not a valid JWT. So I used the ID token, which doesn't get refreshed once it expires, even after invoking the /.auth/refresh endpoint.
I followed the tutorial steps once again, but this time I chose to create a new app registration instead of using an existing one, as mentioned in the documentation. Then I compared the newly configured app with the existing app, which helped me identify the issue.
I found that the reason the access token was invalid was due to the Issuer URL in the App Service authentication settings. Initially, I used the Issuer URL https://login.microsoftonline.com/{tenantId} as mentioned in this Stack Overflow answer. But in the new app, the Issuer URL was https://sts.windows.net/{tenantId}/v2.0, which provided a valid JWT access token. I updated the old app with the new Issuer URL, and it resolved the issue.


Player's Cant Open Chest

GP Version: 1.10.2-<IP_ADDRESS>6
LE Version: LuckPerms-Sponge-4.2.51.jar
Sponge Version: 1.10.2-2477-5.2.0-BETA-2793
Issue: Players can't open chests when they have claimed a region, and Small Storage Crates (the ones from actually additions) any player can open them.

1.10.2 is not supported. Update to 1.12.2


Option "802.11w Management Frame Protection" in OpenWrt 21.02 on Linksys EA4500 (kirkwood)

Via the menu "Network -> Wireless", then clicking the "Edit" button for one of the radios and then "Interface Configuration -> Wireless Security" I can set the state of "802.11w Management Frame Protection" to either "Disabled", "Optional" or "Required".
Selecting "Required" adds the line "option ieee80211w '2'" to the applicable section of /etc/config/wireless.
Selecting "Optional" adds the line "option ieee80211w '1'" to the applicable section of /etc/config/wireless.
Selecting "Disabled" removes the line "option ieee80211w" from the applicable section of /etc/config/wireless.
However, it appears that with the line "option ieee80211w" missing from the wireless config file the driver actually defaults to the "Optional" state.
In order to disable 802.11w I have to manually edit the file /etc/config/wireless and add the line "option ieee80211w '0'" to the applicable section.
After doing this the dropdown menu for "802.11w Management Frame Protection" in LuCi will show the state as "Disabled".

Duplicate of #5394


External magnetometer requires stm32 tone_alarm driver

After removing the stm32 tone_alarm driver, the external magnetometer no longer showed up
(ls /dev/ only showed mag0)
After re-enabling the stm32/tone_alarm it re-appeared.
External GPS/Compas : https://store.drotek.com/DP0105
Specific compas module: LIS3MDL
FYI @MaEtUgR

Thanks for reporting. @davids5 do you understand that?

@sanderux -
That is a new one!
please post -ver all output and what HW you are running on here.


Share API

Hi,
I have implemented some functions for "Link-Shares". Listing shares, creating and deleting is implemented.

Hello, thanks for the pull request. Please separate the new code for the Share resource from the fopen() issue in the File resource so I can merge the new code, thank you.
Regards
Rene

HI,
I am getting following error when I use it the without the fopen(..., "w"):
PHP Fatal error:  Uncaught exception 'RuntimeException' with message 'Unable to open C:\Users\h44z\Downloads\seaf-php\seaf-php\test\DL_1449502425.txt using mode r+: fopen(C:\Users\h44z\Downloads\seaf-php\seaf-php\test\DL_1449502425.txt): failed to open stream: No such file or directory' in C:\Users\h44z\Downloads\seaf-php\seaf-php\vendor\guzzlehttp\psr7\src\functions.php:275
Stack trace:
#0 [internal function]: GuzzleHttp\Psr7{closure}(2, 'fopen(C:\Users\...', 'C:\Users\h44z\D...', 283, Array)
#1 C:\Users\h44z\Downloads\seaf-php\seaf-php\vendor\guzzlehttp\psr7\src\functions.php(283): fopen('C:\Users\h44z\D...', 'r+')
#2 C:\Users\h44z\Downloads\seaf-php\seaf-php\vendor\guzzlehttp\guzzle\src\Handler\StreamHandler.php(141): GuzzleHttp\Psr7\try_fopen('C:\Users\h44z\D...', 'r+')
#3 C:\Users\h44z\Downloads\seaf-php\seaf-php\vendor\guzzlehttp\guzzle\src\Handler\StreamHandler.php(108): GuzzleHttp\Handler\StreamHandler->createSink(Object(GuzzleHttp\Psr7\Stream), Array)
#4 C:\Users\h44z\Downloads\seaf-php\seaf-php\vendor\guz in C:\Users\h44z\Downloads\seaf-php\seaf-php\vendor\guzzlehttp\guzzle\src\Exception\RequestException.php on line 51
Somehow guzzle tries to open the file in read mode...

Hello h44z,
OK I see, don't understand why this happens though. At first glance this rather looks like a bug in Guzzle.
I will pull the Share code if you remove the fopen() issue so we can treat both topics separately, thanks.
Regards
Rene

Yeah that is indeed a strange problem. Maybe it is related to windows - haven't tested the code on linux yet.
I will remove the code for the fopen issue soon, so you can pull the request.

OK great, looking forward to it!

Closing expired PR.


Add keybindings for CTRL, ALT, SHIFT + UP, DOWN, RIGHT, LEFT, HOME, END, BACKSPACE, DELETE & more

This PR implements some missing key bindings.
In particular all possible combinations of

CTRL
ALT
SHIFT
ALT+SHIFT
CTRL+ALT
CTRL+SHIFT
CTRL+ALT+SHIFT

in conjunction with Up, Down, Left, Right, Home, End, Backspace, Delete, PageUp, PageDown.
I added tests to the LightRenderer beforehand to make sure I wasn't breaking anything, and expanded them when I added new key bindings.
So you can actually do stuff like:
fzf
  --bind 'ctrl-up:up+up+up+up+up'
  --bind 'ctrl-down:down+down+down+down+down'
  --bind 'ctrl-right:forward-word'
  --bind 'ctrl-left:backward-word'
  --bind 'alt-delete:delete-char'
  --bind 'alt-backspace:backward-kill-word'

This PR fixes #1747.

Thanks, I'll review the code when I get some time.
A few things.

We also have to update tcell renderer for Windows
man page needs to be updated accordingly
Terminal emulators I use (kitty, iterm2, etc) don't distinguish between the CTRL-* chords you added from the ones without CTRL. Which terminal emulator do you use on what platform? If these chords are not widely supported by the terminal emulators, we should warn about that on the manual.
Allowing all possible names  (ctrl-alt-shift, alt-shift-ctrl, shift-ctrl-alt, etc) will make the code harder to maintain. I'd just allow one sequence. i.e. ctrl-alt-shift.

No worries, take your time.

We also have to update tcell renderer for Windows

Yep, I checked tcell.go and most of it should be pretty straight forward to implement. My biggest issue is that I do not have any Windows machine to test on. So I can do an implementation, make sure it compiles but that's probably it. Would you mind to assist here and test it? Or is there a way to do this on Linux?

man page needs to be updated accordingly

True. Do you write the man page by hand? I was hoping it might be generated by some docstring, although I didn't find one when I searched for it.

Terminal emulators I use (kitty, iterm2, etc) don't distinguish between the CTRL-* chords you added from the ones without CTRL. Which terminal emulator do you use on what platform? If these chords are not widely supported by the terminal emulators, we should warn about that on the manual.

SGTM. I use gnome-terminal and ddterm both running most of the time zsh + tmux, sometimes just zsh or bash. Platform is Linux.

Allowing all possible names (ctrl-alt-shift, alt-shift-ctrl, shift-ctrl-alt, etc) will make the code harder to maintain. I'd just allow one sequence. i.e. ctrl-alt-shift.

I tried to stick as close to your implementation as possible and saw this case "alt-shift-right", "shift-alt-right": case where you actually support both combinations. But I don't mind removing the redundant ones. Actually I like that choice :smile:

I made the mentioned changes and the remaining exciting question is if the following block (tcell.go:~390) is correct:
case tcell.KeyBackspace2:
	if ctrlAlt {
		return Event{CtrlAltBackspace, 0, nil}
	}
	if ctrl {
		return Event{CtrlBackspace, 0, nil}
	}
	if alt {
		return Event{AltBackspace, 0, nil}
	}
	return Event{Backspace, 0, nil}

My educated guess is that it is actually not and has to be covered in the following block:
case tcell.KeyCtrlH:
	switch ev.Rune() {
	case 0:
		if ctrl {
			return Event{Backspace, 0, nil}
		}
	case rune(tcell.KeyCtrlH):
		switch {
		case ctrl:
			return keyfn('h')
		case alt:
			return Event{AltBackspace, 0, nil}
		case none, shift:
			return Event{Backspace, 0, nil}
		}
	}

Or is there a way to do this on Linux?

You can run go run -tags tcell main.go.

Thanks for the hint!
But I am trying to get my hands on a windows machine as well because it all depends on what the OS is really gonna send. I will report back after that.

is this ready for merging?

Nope, not yet.
The Linux implementation is done. Windows implementation potentially as well, but requires a patch in tcell to make the following shortcuts work:

Ctrl-Alt-*
Ctrl-Alt-Shift-*

That's why this PR currently points to my own fork of tcell and that keeps this from being reviewed and merged. I created a PR upstream and hope for a quick review.
You can build this PR yourself. That should work.


Incorrect inference of ImageMagick exe name

Trying to install/build Images.jl on windows, I get:
INFO: Downloading file http://www.imagemagick.org/download/binaries/ImageMagick-6.9.1-10-Q16-x64-dll.exe">ImageMagick-6.9.1-10-Q16-x64-dll.exe

Followed by a big error messge. Clearly the filename is hosed. I traced the issue to a greedy * in a regexp. I'll make a PR to replace it with *?.

Addressed by #334


decode id uri component matched from react router

This PR fixes decoding id with special chars like "/" in Show, Edit and Delete components.
react-router v4 requires manually decoding uris as opposed to previous version.
Without this change id with special chars are broken in v1.0.0.
Related PR: #209

Thanks!


No 3.0.0 Tag

Version 3.0.0 has been released, however there is no 3.0.0 tag created. Also bower.json still shows 2.0.0 as the latest release.

My bad, thought 3.0 was out, was incorrect.


[SCB-868] Add Kamon metrics to Alpha Server

Follow this checklist to help us incorporate your contribution quickly and easily:

[x] Make sure there is a JIRA issue filed for the change (usually before you start working on it).  Trivial changes like typos do not require a JIRA issue.  Your pull request should address just this issue, without pulling in other changes.
[x] Each commit in the pull request should have a meaningful subject line and body.
[x] Format the pull request title like [SCB-XXX] Fixes bug in ApproximateQuantiles, where you replace SCB-XXX with the appropriate JIRA issue.
[x] Write a pull request description that is detailed enough to understand what the pull request does, how, and why.
[x] Run mvn clean install to make sure basic checks pass. A more thorough check will be performed on your pull request automatically.
[x] If this contribution is large, please file an Apache Individual Contributor License Agreement.

Coverage decreased (-0.3%) to 93.596% when pulling 29054cc4b475dc8cb2f1e2563aeb30193c1ea246 on maheshrajus:master into 6dee5988235181f3b0c90c99b0dc1a73d6b612f7 on apache:master.

Merged the patch by apply some changes on pom files with thanks to maheshrajus.


[Bug Report] el-table component calls summary-method many times when I resize the window

Element UI version
1.3.4
OS/Browsers version
windows7/chrome 58.0.3029.110
Vue version
2.3.3
Reproduction Link
https://jsfiddle.net/zipoopiz/7u0smecs/
Steps to reproduce

open console in dev tool
resize the window that displays contents
there are some log infomations in console

What is Expected?
el-table component should not call summary-method when resizing the window
What is actually happening?
el-table component  call summary-method when resizing the window

This is actually inevitable. On resizing, Table has to rearrange its layout, causing all its cells re-rendering, so summary-methods are called since they are needed in the course of render.
So, it's not a bug and cannot be avoided for now.


Provide Least Privilege Instructions for the discovery Account

This document should more specifically detail what the migrate account requires. Just saying "contributor rights to a subscription" is the equivalent of saying "domain admin" for a domain and is very difficult to get approved in stricter environments. There's no way the assessment needs this level of access so a more refined definition should be provided.

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

ID: 2dc0f9e8-9503-5d8c-e597-66c629e23357
Version Independent ID: 2f6e08f6-8e07-f283-9254-c2152774dd4b
Content: Discover VMware VMs with Azure Migrate Server Assessment - Azure Migrate
Content Source: articles/migrate/tutorial-discover-vmware.md
Service: azure-migrate
GitHub Login: @rayne-wiselman
Microsoft Alias: raynew

@JustinGrote Thanks a lot for taking time to share your feedback , we will further review and get back to you at the earliest.

I'm checking on least privilege for creating a vault. thx!

@rayne-wiselman there are some built in key vault roles in preview, does the migrate account just need a key vault? I would imagine it would need reader permissions on the VMs perhaps as well
https://docs.microsoft.com/en-us/azure/role-based-access-control/built-in-roles

That should have said least privilege for creating Azure Migrate project. Updating text and will report back here with progress.

Hi @JustinGrote. Currently, the information in the article is accurate for creating a migrate project. We'll update the documentation if there are changes to the current requirements. Thanks! Rayne

@rayne-wiselman Are you sure about that? It only took me 15 minutes of research to:

Create a migrate resource
Look at the ARM template to see resources were created
Create an appropriate custom role template to allow for those resources
Assign to a test user
Allow that user to create the migrate resource and nothing else and test successfully

Obviously there are more permissions involved in discovery after this step but certainly less than contributor are required and there should at least be some guidance along these lines.
I would expect Microsoft to be more security conscious then requiring "domain admin" to an entire subscription, that's the realm of ignorant third party ISVs. As an MSP going into a foreign environment and asking for this, especially in a large customer, is a huge ask and would get denied frequently, telling us we don't know what we are doing.
I request a re-review of this request with someone highly familiar with Azure Roles and RBAC permissions and prepare a JSON template for the least privileges required, as well as Azure Policy recommendations as appropriate. Thank you!
Here's the template I used to successfully create an assessment project without requiring contributor rights. This is the full list but it could be truncated by grouping with wildcards.
{
  "Name": "AzureMigrateTest2",
  "Id": "2383af4b-e66c-4753-b72e-83fbbf1bbe00",
  "IsCustom": true,
  "Description": "",
  "Actions": [
    "Microsoft.Migrate/projects/machines/read",
    "Microsoft.Migrate/projects/groups/assessments/assessedmachines/read",
    "Microsoft.Migrate/projects/groups/assessments/downloadurl/action",
    "Microsoft.Migrate/projects/groups/assessments/delete",
    "Microsoft.Migrate/projects/groups/assessments/write",
    "Microsoft.Migrate/projects/groups/assessments/read",
    "Microsoft.Migrate/projects/groups/delete",
    "Microsoft.Migrate/projects/groups/write",
    "Microsoft.Migrate/projects/groups/read",
    "Microsoft.Migrate/projects/assessments/read",
    "Microsoft.Migrate/projects/keys/action",
    "Microsoft.Migrate/projects/delete",
    "Microsoft.Migrate/projects/write",
    "Microsoft.Migrate/projects/read",
    "Microsoft.Migrate/migrateprojects/WebSites/read",
    "Microsoft.Migrate/migrateprojects/WebServers/read",
    "Microsoft.Migrate/migrateprojects/VirtualDesktopUsers/read",
    "Microsoft.Migrate/migrateprojects/privateLinkResources/read",
    "Microsoft.Migrate/migrateprojects/privateEndpointConnectionProxies/delete",
    "Microsoft.Migrate/migrateprojects/privateEndpointConnectionProxies/write",
    "Microsoft.Migrate/migrateprojects/privateEndpointConnectionProxies/validate/action",
    "Microsoft.Migrate/migrateprojects/privateEndpointConnectionProxies/read",
    "Microsoft.Migrate/migrateprojects/privateEndpointConnections/delete",
    "Microsoft.Migrate/migrateprojects/privateEndpointConnections/write",
    "Microsoft.Migrate/migrateprojects/privateEndpointConnections/read",
    "Microsoft.Migrate/migrateprojects/solutions/cleanupData/action",
    "Microsoft.Migrate/migrateprojects/solutions/getconfig/action",
    "Microsoft.Migrate/migrateprojects/solutions/Delete",
    "Microsoft.Migrate/migrateprojects/solutions/write",
    "Microsoft.Migrate/migrateprojects/solutions/read",
    "Microsoft.Migrate/migrateprojects/MigrateEvents/Delete",
    "Microsoft.Migrate/migrateprojects/MigrateEvents/read",
    "Microsoft.Migrate/migrateprojects/machines/read",
    "Microsoft.Migrate/migrateprojects/Databases/read",
    "Microsoft.Migrate/migrateprojects/DatabaseInstances/read",
    "Microsoft.Migrate/migrateprojects/registrationDetails/action",
    "Microsoft.Migrate/migrateprojects/RefreshSummary/action",
    "Microsoft.Migrate/migrateprojects/registerTool/action",
    "Microsoft.Migrate/migrateprojects/delete",
    "Microsoft.Migrate/migrateprojects/write",
    "Microsoft.Migrate/migrateprojects/read",
    "Microsoft.Migrate/locations/assessmentOptions/read",
    "Microsoft.Migrate/locations/checknameavailability/action",
    "Microsoft.Migrate/Operations/read",
    "Microsoft.Migrate/assessmentprojects/vmwarecollectors/delete",
    "Microsoft.Migrate/assessmentprojects/vmwarecollectors/write",
    "Microsoft.Migrate/assessmentprojects/vmwarecollectors/read",
    "Microsoft.Migrate/assessmentprojects/servercollectors/write",
    "Microsoft.Migrate/assessmentprojects/servercollectors/read",
    "Microsoft.Migrate/assessmentprojects/privateLinkResources/read",
    "Microsoft.Migrate/assessmentprojects/privateEndpointConnectionProxies/delete",
    "Microsoft.Migrate/assessmentprojects/privateEndpointConnectionProxies/write",
    "Microsoft.Migrate/assessmentprojects/privateEndpointConnectionProxies/validate/action",
    "Microsoft.Migrate/assessmentprojects/privateEndpointConnectionProxies/read",
    "Microsoft.Migrate/assessmentprojects/privateEndpointConnections/delete",
    "Microsoft.Migrate/assessmentprojects/privateEndpointConnections/write",
    "Microsoft.Migrate/assessmentprojects/privateEndpointConnections/read",
    "Microsoft.Migrate/assessmentprojects/machines/read",
    "Microsoft.Migrate/assessmentprojects/importcollectors/delete",
    "Microsoft.Migrate/assessmentprojects/importcollectors/write",
    "Microsoft.Migrate/assessmentprojects/importcollectors/read",
    "Microsoft.Migrate/assessmentprojects/hypervcollectors/delete",
    "Microsoft.Migrate/assessmentprojects/hypervcollectors/write",
    "Microsoft.Migrate/assessmentprojects/hypervcollectors/read",
    "Microsoft.Migrate/assessmentprojects/groups/assessments/assessedmachines/read",
    "Microsoft.Migrate/assessmentprojects/groups/assessments/downloadurl/action",
    "Microsoft.Migrate/assessmentprojects/groups/assessments/delete",
    "Microsoft.Migrate/assessmentprojects/groups/assessments/write",
    "Microsoft.Migrate/assessmentprojects/groups/assessments/read",
    "Microsoft.Migrate/assessmentprojects/groups/avsAssessments/avsassessedmachines/read",
    "Microsoft.Migrate/assessmentprojects/groups/avsAssessments/downloadurl/action",
    "Microsoft.Migrate/assessmentprojects/groups/avsAssessments/delete",
    "Microsoft.Migrate/assessmentprojects/groups/avsAssessments/write",
    "Microsoft.Migrate/assessmentprojects/groups/avsAssessments/read",
    "Microsoft.Migrate/assessmentprojects/groups/updateMachines/action",
    "Microsoft.Migrate/assessmentprojects/groups/delete",
    "Microsoft.Migrate/assessmentprojects/groups/write",
    "Microsoft.Migrate/assessmentprojects/groups/read",
    "Microsoft.Migrate/assessmentprojects/assessmentsSummary/read",
    "Microsoft.Migrate/assessmentprojects/assessments/read",
    "Microsoft.Migrate/assessmentprojects/assessmentOptions/read",
    "Microsoft.Migrate/assessmentprojects/avsAssessmentOptions/read",
    "Microsoft.Migrate/assessmentprojects/delete",
    "Microsoft.Migrate/assessmentprojects/write",
    "Microsoft.Migrate/assessmentprojects/read",
    "Microsoft.Migrate/register/action",
    "Microsoft.Resources/subscriptions/resourceGroups/validateMoveResources/action",
    "Microsoft.Resources/subscriptions/resourceGroups/moveResources/action",
    "Microsoft.Resources/subscriptions/resourceGroups/read",
    "Microsoft.Resources/subscriptions/resourcegroups/deployments/operationstatuses/read",
    "Microsoft.Resources/subscriptions/resourcegroups/deployments/operations/read",
    "Microsoft.Resources/subscriptions/resourcegroups/deployments/write",
    "Microsoft.Resources/subscriptions/resourcegroups/deployments/read",
    "Microsoft.Resources/deploymentScripts/logs/read",
    "Microsoft.Resources/deploymentScripts/write",
    "Microsoft.Resources/deploymentScripts/read",
    "Microsoft.Resources/deployments/operationstatuses/read",
    "Microsoft.Resources/deployments/operations/read",
    "Microsoft.Resources/deployments/exportTemplate/action",
    "Microsoft.Resources/deployments/whatIf/action",
    "Microsoft.Resources/deployments/validate/action",
    "Microsoft.Resources/deployments/cancel/action",
    "Microsoft.Resources/deployments/write",
    "Microsoft.Resources/deployments/read"
  ],
  "NotActions": [],
  "DataActions": [],
  "NotDataActions": [],
  "AssignableScopes": [
    "/subscriptions/48759ba7-c496-43ac-ba0e-03abf5ef2092/resourceGroups/ARMTest"
  ]
}

I will pass along the feedback. Thanks
Get Outlook for Androidhttps://aka.ms/ghei36

From: Justin Grote<EMAIL_ADDRESS>Sent: Wednesday, October 28, 2020 7:11:35 PM
To: MicrosoftDocs/azure-docs<EMAIL_ADDRESS>Cc: Rayne Wiselman<EMAIL_ADDRESS>Mention<EMAIL_ADDRESS>Subject: Re: [MicrosoftDocs/azure-docs] Provide Least Privilege Instructions for the discovery Account (#65023)
@rayne-wiselmanhttps://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Frayne-wiselman&data=04|01|raynew%40microsoft.com|32f5f4289c0d48b6b9ab08d87b6486aa|72f988bf86f141af91ab2d7cd011db47|1|0|637395018970634208|Unknown|TWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D|1000&sdata=ypNmNkbyCZp4qW2eEMY4WNUyxNXkA4M78qjIGx85ZOQ%3D&reserved=0 Are you sure about that? It only took me 15 minutes of research to:

Create a migrate resource
Look at the ARM template to see resources were created
Create an appropriate custom role template to allow for those resources
Assign to a test user
Allow that user to create the migrate resource and nothing else and test successfully

Obviously there are more permissions involved in discovery after this step but certainly less than contributor are required and there should at least be some guidance along these lines.
I would expect Microsoft to be more security conscious then requiring "domain admin" to an entire subscription, that's the realm of ignorant third party ISVs. As an MSP going into a foreign environment and asking for this, especially in a large customer, is a huge ask and would get denied frequently, telling us we don't know what we are doing.
I request a re-review of this request with someone highly familiar with Azure Roles and RBAC permissions and prepare a JSON template for the least privileges required, as well as Azure Policy recommendations as appropriate. Thank you!
Here's the template I used to successfully create an assessment project without requiring contributor rights. This is the full list but it could be truncated by grouping with wildcards.
{
"Name": "AzureMigrateTest2",
"Id": "2383af4b-e66c-4753-b72e-83fbbf1bbe00",
"IsCustom": true,
"Description": "",
"Actions": [
"Microsoft.Migrate/projects/machines/read",
"Microsoft.Migrate/projects/groups/assessments/assessedmachines/read",
"Microsoft.Migrate/projects/groups/assessments/downloadurl/action",
"Microsoft.Migrate/projects/groups/assessments/delete",
"Microsoft.Migrate/projects/groups/assessments/write",
"Microsoft.Migrate/projects/groups/assessments/read",
"Microsoft.Migrate/projects/groups/delete",
"Microsoft.Migrate/projects/groups/write",
"Microsoft.Migrate/projects/groups/read",
"Microsoft.Migrate/projects/assessments/read",
"Microsoft.Migrate/projects/keys/action",
"Microsoft.Migrate/projects/delete",
"Microsoft.Migrate/projects/write",
"Microsoft.Migrate/projects/read",
"Microsoft.Migrate/migrateprojects/WebSites/read",
"Microsoft.Migrate/migrateprojects/WebServers/read",
"Microsoft.Migrate/migrateprojects/VirtualDesktopUsers/read",
"Microsoft.Migrate/migrateprojects/privateLinkResources/read",
"Microsoft.Migrate/migrateprojects/privateEndpointConnectionProxies/delete",
"Microsoft.Migrate/migrateprojects/privateEndpointConnectionProxies/write",
"Microsoft.Migrate/migrateprojects/privateEndpointConnectionProxies/validate/action",
"Microsoft.Migrate/migrateprojects/privateEndpointConnectionProxies/read",
"Microsoft.Migrate/migrateprojects/privateEndpointConnections/delete",
"Microsoft.Migrate/migrateprojects/privateEndpointConnections/write",
"Microsoft.Migrate/migrateprojects/privateEndpointConnections/read",
"Microsoft.Migrate/migrateprojects/solutions/cleanupData/action",
"Microsoft.Migrate/migrateprojects/solutions/getconfig/action",
"Microsoft.Migrate/migrateprojects/solutions/Delete",
"Microsoft.Migrate/migrateprojects/solutions/write",
"Microsoft.Migrate/migrateprojects/solutions/read",
"Microsoft.Migrate/migrateprojects/MigrateEvents/Delete",
"Microsoft.Migrate/migrateprojects/MigrateEvents/read",
"Microsoft.Migrate/migrateprojects/machines/read",
"Microsoft.Migrate/migrateprojects/Databases/read",
"Microsoft.Migrate/migrateprojects/DatabaseInstances/read",
"Microsoft.Migrate/migrateprojects/registrationDetails/action",
"Microsoft.Migrate/migrateprojects/RefreshSummary/action",
"Microsoft.Migrate/migrateprojects/registerTool/action",
"Microsoft.Migrate/migrateprojects/delete",
"Microsoft.Migrate/migrateprojects/write",
"Microsoft.Migrate/migrateprojects/read",
"Microsoft.Migrate/locations/assessmentOptions/read",
"Microsoft.Migrate/locations/checknameavailability/action",
"Microsoft.Migrate/Operations/read",
"Microsoft.Migrate/assessmentprojects/vmwarecollectors/delete",
"Microsoft.Migrate/assessmentprojects/vmwarecollectors/write",
"Microsoft.Migrate/assessmentprojects/vmwarecollectors/read",
"Microsoft.Migrate/assessmentprojects/servercollectors/write",
"Microsoft.Migrate/assessmentprojects/servercollectors/read",
"Microsoft.Migrate/assessmentprojects/privateLinkResources/read",
"Microsoft.Migrate/assessmentprojects/privateEndpointConnectionProxies/delete",
"Microsoft.Migrate/assessmentprojects/privateEndpointConnectionProxies/write",
"Microsoft.Migrate/assessmentprojects/privateEndpointConnectionProxies/validate/action",
"Microsoft.Migrate/assessmentprojects/privateEndpointConnectionProxies/read",
"Microsoft.Migrate/assessmentprojects/privateEndpointConnections/delete",
"Microsoft.Migrate/assessmentprojects/privateEndpointConnections/write",
"Microsoft.Migrate/assessmentprojects/privateEndpointConnections/read",
"Microsoft.Migrate/assessmentprojects/machines/read",
"Microsoft.Migrate/assessmentprojects/importcollectors/delete",
"Microsoft.Migrate/assessmentprojects/importcollectors/write",
"Microsoft.Migrate/assessmentprojects/importcollectors/read",
"Microsoft.Migrate/assessmentprojects/hypervcollectors/delete",
"Microsoft.Migrate/assessmentprojects/hypervcollectors/write",
"Microsoft.Migrate/assessmentprojects/hypervcollectors/read",
"Microsoft.Migrate/assessmentprojects/groups/assessments/assessedmachines/read",
"Microsoft.Migrate/assessmentprojects/groups/assessments/downloadurl/action",
"Microsoft.Migrate/assessmentprojects/groups/assessments/delete",
"Microsoft.Migrate/assessmentprojects/groups/assessments/write",
"Microsoft.Migrate/assessmentprojects/groups/assessments/read",
"Microsoft.Migrate/assessmentprojects/groups/avsAssessments/avsassessedmachines/read",
"Microsoft.Migrate/assessmentprojects/groups/avsAssessments/downloadurl/action",
"Microsoft.Migrate/assessmentprojects/groups/avsAssessments/delete",
"Microsoft.Migrate/assessmentprojects/groups/avsAssessments/write",
"Microsoft.Migrate/assessmentprojects/groups/avsAssessments/read",
"Microsoft.Migrate/assessmentprojects/groups/updateMachines/action",
"Microsoft.Migrate/assessmentprojects/groups/delete",
"Microsoft.Migrate/assessmentprojects/groups/write",
"Microsoft.Migrate/assessmentprojects/groups/read",
"Microsoft.Migrate/assessmentprojects/assessmentsSummary/read",
"Microsoft.Migrate/assessmentprojects/assessments/read",
"Microsoft.Migrate/assessmentprojects/assessmentOptions/read",
"Microsoft.Migrate/assessmentprojects/avsAssessmentOptions/read",
"Microsoft.Migrate/assessmentprojects/delete",
"Microsoft.Migrate/assessmentprojects/write",
"Microsoft.Migrate/assessmentprojects/read",
"Microsoft.Migrate/register/action",
"Microsoft.Resources/subscriptions/resourceGroups/validateMoveResources/action",
"Microsoft.Resources/subscriptions/resourceGroups/moveResources/action",
"Microsoft.Resources/subscriptions/resourceGroups/read",
"Microsoft.Resources/subscriptions/resourcegroups/deployments/operationstatuses/read",
"Microsoft.Resources/subscriptions/resourcegroups/deployments/operations/read",
"Microsoft.Resources/subscriptions/resourcegroups/deployments/write",
"Microsoft.Resources/subscriptions/resourcegroups/deployments/read",
"Microsoft.Resources/deploymentScripts/logs/read",
"Microsoft.Resources/deploymentScripts/write",
"Microsoft.Resources/deploymentScripts/read",
"Microsoft.Resources/deployments/operationstatuses/read",
"Microsoft.Resources/deployments/operations/read",
"Microsoft.Resources/deployments/exportTemplate/action",
"Microsoft.Resources/deployments/whatIf/action",
"Microsoft.Resources/deployments/validate/action",
"Microsoft.Resources/deployments/cancel/action",
"Microsoft.Resources/deployments/write",
"Microsoft.Resources/deployments/read"
],
"NotActions": [],
"DataActions": [],
"NotDataActions": [],
"AssignableScopes": [
"/subscriptions/48759ba7-c496-43ac-ba0e-03abf5ef2092/resourceGroups/ARMTest"
]
}
[image]https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fuser-images.githubusercontent.com%2F15258962%2F97471206-bbba1f00-1905-11eb-9b64-dd52b1abf328.png&data=04|01|raynew%40microsoft.com|32f5f4289c0d48b6b9ab08d87b6486aa|72f988bf86f141af91ab2d7cd011db47|1|0|637395018970644203|Unknown|TWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D|1000&sdata=u9RfBVDa3ulBNsXiGVZ9VQjd5J%2BqUjzdsEqXjTsqgNw%3D&reserved=0
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHubhttps://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2FMicrosoftDocs%2Fazure-docs%2Fissues%2F65023%23issuecomment-718080393&data=04|01|raynew%40microsoft.com|32f5f4289c0d48b6b9ab08d87b6486aa|72f988bf86f141af91ab2d7cd011db47|1|0|637395018970654197|Unknown|TWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D|1000&sdata=st%2BS8nhVP9s0Zjb8IC3FE0R2AFh9Nlavr9nj92S9DVA%3D&reserved=0, or unsubscribehttps://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fnotifications%2Funsubscribe-auth%2FAA635CGDZI2DNAZ634N5Q33SNBGEPANCNFSM4S7VENTA&data=04|01|raynew%40microsoft.com|32f5f4289c0d48b6b9ab08d87b6486aa|72f988bf86f141af91ab2d7cd011db47|1|0|637395018970654197|Unknown|TWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D|1000&sdata=cA0lPQCb0FDAqkMVRqhHo%2Fb4rKxlcGQ8fcj0LFt7Xq8%3D&reserved=0.

@JustinGrote  thanks for highlighting the need for RBAC permissions. We are working on validating the RBAC permissions required for different operations on Azure Migrate and will be updating the same in docs in a few weeks. I reviewed the permissions you have defined, I just wanted to check what operations were you planning to execute-by that I mean, which of the following:

Creating Azure Migrate project
Adding 1P Azure Migrate tools like Server Assessment and Server Migration
Setting up Azure Migrate appliance for discovery and assessment
Viewing discovered servers, applications and dependencies on the portal
Creating groups and assessments (as on-premises or performance based)
Initiating replication on VMs (agentless or agent-based)
Trying Test replication and final migration
Booting up VMs post migration

@Vikram1988 Thank you and I appreciate your diligence in assisting with this additional documentation. I believe that list of operations looks correct, basically everything required to execute an assessment and migration/optimization of VMs both on premise and in Azure. I look forward to it!

@JustinGrote Hey, I'm going to close this for now. We'll update info across articles in line with the PG timeline. Thanks for your feedback on our docs. Always appreciated!

@rayne-wiselman is their timeline published anywhere? That should be referenced and then this can be closed, otherwise this issue should remain open until the docs are updated.

@justinGrote. I've opened an internal task and will track the doc work there. That internal issue will close when the docs are updated. These public issues track whether the documentation is currently accurate, which it is. The docs should be updated  in line with the timeline Vikram described above.