text:
Concatenate error with multimodal input

Description

Hello,
I have a couple of clinical variables (categorical and float) that I want to use as additional input.
I list them as: multi_input = ["age", "sex", "height", "weight"].
Anyway, when I try to train a (very basic) model, I receive an error saying that tensor shapes don't match:
ConcatOp : Ranks of all input tensors should match: shape[0] = [16,4,1] vs. shape[1] = [16,2048]
[[{{node model/input_merge/concat}}]] [Op:__inference_train_function_35947]
I believe there's something wrong with the way how the clinical variables are introduced into the other layers (slide_feature_input)?
How can I change it? Or am I missing something trivial?
Would be great if anybody could help!
Cheers.
To Reproduce
Steps to reproduce the behavior:
1. Commands
import slideflow as sf
P = sf.load_project('project')
hp = sf.ModelParams(
    tile_px=299,
    tile_um=100,
)
multi_input = ["age", "sex", "height", "weight"]
P.train(
        'category',
        params=hp,
        val_strategy='none',
        input_header= multi_input,
        )

2. Output
[11:45:54] INFO     Training model category-HP0...
INFO     Hyperparameters: {
"augment": "xyrj",
"batch_size": 16,
"drop_images": false,
"dropout": 0,
"early_stop": false,
"early_stop_method": "loss",
"early_stop_patience": 0,
"epochs": [
3
],
"hidden_layer_width": 500,
"hidden_layers": 0,
"include_top": true,
"l1": 0.0,
"l1_dense": 0.0,
"l2": 0.0,
"l2_dense": 0.0,
"learning_rate": 0.0001,
"learning_rate_decay": 0,
"learning_rate_decay_steps": 100000,
"loss": "sparse_categorical_crossentropy",
"manual_early_stop_batch": null,
"manual_early_stop_epoch": null,
"model": "xception",
"normalizer": null,
"normalizer_source": null,
"optimizer": "Adam",
"pooling": "max",
"tile_px": 299,
"tile_um": 100,
"toplayer_epochs": 0,
"trainable_layers": 0,
"training_balance": "category",
"uq": false,
"validation_balance": "none"
}
INFO     Val settings: {
"strategy": "none",
"k_fold": 3,
"k": null,
"k_fold_header": null,
"fraction": null,
"source": null,
"annotations": null,
"filters": null,
"dataset": null
}
INFO     Using 687 training TFRecords, 0 validation
INFO     Adding input variable age as float
INFO     Adding input variable sex as float
INFO     Adding input variable height as float
INFO     Adding input variable weight as float
[11:46:28] INFO     Training with both images and 4 categories of slide-level input
2023-05-21 11:46:28.822013: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1613] Created device /job:localhost/replica:0/task:0/device:GPU:0 with 30948 MB memory:  -> device: 0, nam
e: Tesla V100-SXM2-32GB, pci bus id: 0000:61:00.0, compute capability: 7.0
[11:46:29] INFO     Using pretraining from imagenet
Model: "model"
Layer (type)                   Output Shape         Param #     Connected to
tile_image (InputLayer)        [(None, 299, 299, 3  0           []
)]
xception (Functional)          (None, 2048)         20861480    ['tile_image[0][0]']
slide_feature_input (InputLaye  [(None, 4)]         0           []
r)
post_convolution (Activation)  (None, 2048)         0           ['xception[0][0]']
input_merge (Concatenate)      (None, 2052)         0           ['slide_feature_input[0][0]',
'post_convolution[0][0]']
logits-0 (Dense)               (None, 2)            4106        ['input_merge[0][0]']
out-0 (Activation)             (None, 2)            0           ['logits-0[0][0]']
Total params: 20,865,586
Trainable params: 20,811,058
Non-trainable params: 54,528
[11:46:37] INFO     Beginning training
Epoch 1/3
2023-05-21 11:46:51.242360: I tensorflow/compiler/xla/stream_executor/cuda/cuda_dnn.cc:428] Loaded cuDNN version 8201
Traceback (most recent call last):
File "", line 1, in
File "/data/jjung23/miniconda3/envs/sf_2/lib/python3.9/site-packages/slideflow/project.py", line 3378, in train
self._train_hp(
File "/data/jjung23/miniconda3/envs/sf_2/lib/python3.9/site-packages/slideflow/project.py", line 709, in _train_hp
self._train_split(dataset, hp, val_settings, s_args)
File "/data/jjung23/miniconda3/envs/sf_2/lib/python3.9/site-packages/slideflow/project.py", line 933, in _train_split
project_utils._train_worker(
File "/data/jjung23/miniconda3/envs/sf_2/lib/python3.9/site-packages/slideflow/project_utils.py", line 147, in _train_worker
results = trainer.train(train_dts, val_dts, **training_kw)
File "/data/jjung23/miniconda3/envs/sf_2/lib/python3.9/site-packages/slideflow/model/tensorflow.py", line 1925, in train
self.model.fit(
File "/data/jjung23/miniconda3/envs/sf_2/lib/python3.9/site-packages/keras/utils/traceback_utils.py", line 70, in error_handler
raise e.with_traceback(filtered_tb) from None
File "/data/jjung23/miniconda3/envs/sf_2/lib/python3.9/site-packages/tensorflow/python/eager/execute.py", line 52, in quick_execute
tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name,
tensorflow.python.framework.errors_impl.InvalidArgumentError: Graph execution error:
Detected at node 'model/input_merge/concat' defined at (most recent call last):
File "", line 1, in
File "/data/jjung23/miniconda3/envs/sf_2/lib/python3.9/site-packages/slideflow/project.py", line 3378, in train
self._train_hp(
File "/data/jjung23/miniconda3/envs/sf_2/lib/python3.9/site-packages/slideflow/project.py", line 709, in _train_hp
self._train_split(dataset, hp, val_settings, s_args)
File "/data/jjung23/miniconda3/envs/sf_2/lib/python3.9/site-packages/slideflow/project.py", line 933, in _train_split
project_utils._train_worker(
File "/data/jjung23/miniconda3/envs/sf_2/lib/python3.9/site-packages/slideflow/project_utils.py", line 147, in _train_worker
results = trainer.train(train_dts, val_dts, **training_kw)
File "/data/jjung23/miniconda3/envs/sf_2/lib/python3.9/site-packages/slideflow/model/tensorflow.py", line 1925, in train
self.model.fit(
File "/data/jjung23/miniconda3/envs/sf_2/lib/python3.9/site-packages/keras/utils/traceback_utils.py", line 65, in error_handler
return fn(*args, **kwargs)
File "/data/jjung23/miniconda3/envs/sf_2/lib/python3.9/site-packages/keras/engine/training.py", line 1650, in fit
tmp_logs = self.train_function(iterator)
File "/data/jjung23/miniconda3/envs/sf_2/lib/python3.9/site-packages/keras/engine/training.py", line 1249, in train_function
return step_function(self, iterator)
File "/data/jjung23/miniconda3/envs/sf_2/lib/python3.9/site-packages/keras/engine/training.py", line 1233, in step_function
outputs = model.distribute_strategy.run(run_step, args=(data,))
File "/data/jjung23/miniconda3/envs/sf_2/lib/python3.9/site-packages/keras/engine/training.py", line 1222, in run_step
outputs = model.train_step(data)
File "/data/jjung23/miniconda3/envs/sf_2/lib/python3.9/site-packages/keras/engine/training.py", line 1023, in train_step
y_pred = self(x, training=True)
File "/data/jjung23/miniconda3/envs/sf_2/lib/python3.9/site-packages/keras/utils/traceback_utils.py", line 65, in error_handler
return fn(*args, **kwargs)
File "/data/jjung23/miniconda3/envs/sf_2/lib/python3.9/site-packages/keras/engine/training.py", line 561, in call
return super().call(*args, **kwargs)
File "/data/jjung23/miniconda3/envs/sf_2/lib/python3.9/site-packages/keras/utils/traceback_utils.py", line 65, in error_handler
return fn(*args, **kwargs)
File "/data/jjung23/miniconda3/envs/sf_2/lib/python3.9/site-packages/keras/engine/base_layer.py", line 1132, in call
outputs = call_fn(inputs, *args, **kwargs)
File "/data/jjung23/miniconda3/envs/sf_2/lib/python3.9/site-packages/keras/utils/traceback_utils.py", line 96, in error_handler
return fn(*args, **kwargs)
File "/data/jjung23/miniconda3/envs/sf_2/lib/python3.9/site-packages/keras/engine/functional.py", line 511, in call
return self._run_internal_graph(inputs, training=training, mask=mask)
File "/data/jjung23/miniconda3/envs/sf_2/lib/python3.9/site-packages/keras/engine/functional.py", line 668, in _run_internal_graph
outputs = node.layer(*args, **kwargs)
File "/data/jjung23/miniconda3/envs/sf_2/lib/python3.9/site-packages/keras/utils/traceback_utils.py", line 65, in error_handler
return fn(*args, **kwargs)
File "/data/jjung23/miniconda3/envs/sf_2/lib/python3.9/site-packages/keras/engine/base_layer.py", line 1132, in call
outputs = call_fn(inputs, *args, **kwargs)
File "/data/jjung23/miniconda3/envs/sf_2/lib/python3.9/site-packages/keras/utils/traceback_utils.py", line 96, in error_handler
return fn(*args, **kwargs)
File "/data/jjung23/miniconda3/envs/sf_2/lib/python3.9/site-packages/keras/layers/merging/base_merge.py", line 196, in call
return self._merge_function(inputs)
File "/data/jjung23/miniconda3/envs/sf_2/lib/python3.9/site-packages/keras/layers/merging/concatenate.py", line 134, in _merge_function
return backend.concatenate(inputs, axis=self.axis)
File "/data/jjung23/miniconda3/envs/sf_2/lib/python3.9/site-packages/keras/backend.py", line 3572, in concatenate
return tf.concat([to_dense(x) for x in tensors], axis)
Node: 'model/input_merge/concat'
ConcatOp : Ranks of all input tensors should match: shape[0] = [16,4,1] vs. shape[1] = [16,2048]
[[{{node model/input_merge/concat}}]] [Op:__inference_train_function_35947]

Expected behavior

Successful training of a multimodal model.
Environment:

Slideflow Version (e.g., 1.0): 2.0.3-post1
OS (e.g., Ubuntu): Ubuntu 20.04.5
How you installed Slideflow (pip, source): pip install slideflow[tf] cucim cupy-cuda11x
Python version: 3.9
CUDA/cuDNN version: 11.6
GPU models and configuration: Tesla V100-SXM2-32GB
Any other relevant information:

Additional context

Thanks for raising this issue - we'll build a test dataset over the next day or so and work on reproducing the error, so we can find the source of the problem.
In the meantime, do you see the same error when you train with only a single additional clinical variable? Try training 4 different models, one with each clinical variable as a single additional input, to see if the problem can be isolated to one of the variables.

Thanks for replying!
I tried to feed the model only one clinical variable, for example "age".
What I get is:
/data/jjung23/miniconda3/envs/sf_tensfl/lib/python3.10/site-packages/keras/engine/functional.py:638: UserWarning: Input dict contained keys ['slide_feature_input'] which did not match any model input. They will be ignored by the model.
After that it looks like it's training normally based on the slides but without the clinical variable.

Quick update - I was able to reproduce the problem when using continuous outcomes (like the ones you're using here). Categorical slide inputs (either single or multiple) are working as expected, but there seems to be an issue with continuous outcomes. Our automatic testing included testing categorical clinical variables as additional only, which is why this wasn't caught by our testing protocol.
I should have a patch out shortly that fixes the problem, and I'll expand our testing to include continuous input variables, as well.

Ok - patch has been applied for the Tensorflow backend. If you have the ability to run from source, let me know if it works on your end, as well. Still working on a fix for the PyTorch backend.
If this resolves the issue, I'll incorporate it into the next patch release.

Patch has been released as version 2.0.5.

Hi, sorry for the late replay. Thank you so much for the patch and the messages!
However, I receive the following error:
[22:07:38] INFO     Beginning training                                                                                [31/1476]
Epoch 1/3
Traceback (most recent call last):
  File "/data/jjung23/23_04_30/3_train_1.py", line 29, in <module>
    P.train(
  File "/data/jjung23/miniconda3/envs/sf_tensorflow/lib/python3.9/site-packages/slideflow/project.py", line 3426, in train
    self._train_hp(
  File "/data/jjung23/miniconda3/envs/sf_tensorflow/lib/python3.9/site-packages/slideflow/project.py", line 713, in _train_hp
    self._train_split(dataset, hp, val_settings, s_args)
  File "/data/jjung23/miniconda3/envs/sf_tensorflow/lib/python3.9/site-packages/slideflow/project.py", line 937, in _train_split
    project_utils._train_worker(
  File "/data/jjung23/miniconda3/envs/sf_tensorflow/lib/python3.9/site-packages/slideflow/project_utils.py", line 147, in _train_worker
    results = trainer.train(train_dts, val_dts, **training_kw)
  File "/data/jjung23/miniconda3/envs/sf_tensorflow/lib/python3.9/site-packages/slideflow/model/tensorflow.py", line 1924, in train
    self.model.fit(
  File "/data/jjung23/miniconda3/envs/sf_tensorflow/lib/python3.9/site-packages/keras/utils/traceback_utils.py", line 70, in error_handler
    raise e.with_traceback(filtered_tb) from None
  File "/tmp/__autograph_generated_filevedfejsj.py", line 15, in tf__train_function
    retval_ = ag__.converted_call(ag__.ld(step_function), (ag__.ld(self), ag__.ld(iterator)), None, fscope)
  File "/data/jjung23/miniconda3/envs/sf_tensorflow/lib/python3.9/site-packages/tensorflow/core/function/trace_type/trace_type_builder.py", line 129, in from_value
    return default_types.Tuple(*(from_value(c, context) for c in value))
  File "/data/jjung23/miniconda3/envs/sf_tensorflow/lib/python3.9/site-packages/tensorflow/core/function/trace_type/trace_type_builder.py", line 129, in <genexpr>
    return default_types.Tuple(*(from_value(c, context) for c in value))
  File "/data/jjung23/miniconda3/envs/sf_tensorflow/lib/python3.9/site-packages/tensorflow/core/function/trace_type/trace_type_builder.py", line 129, in from_value
    return default_types.Tuple(*(from_value(c, context) for c in value))
  File "/data/jjung23/miniconda3/envs/sf_tensorflow/lib/python3.9/site-packages/tensorflow/core/function/trace_type/trace_type_builder.py", line 129, in <genexpr>
    return default_types.Tuple(*(from_value(c, context) for c in value))
  File "/data/jjung23/miniconda3/envs/sf_tensorflow/lib/python3.9/site-packages/tensorflow/core/function/trace_type/trace_type_builder.py", line 152, in from_value
    raise TypeError(
TypeError: in user code:

    File "/data/jjung23/miniconda3/envs/sf_tensorflow/lib/python3.9/site-packages/keras/engine/training.py", line 1249, in train_function  *
        return step_function(self, iterator)
    File "/data/jjung23/miniconda3/envs/sf_tensorflow/lib/python3.9/site-packages/keras/engine/training.py", line 1233, in step_function  **
        outputs = model.distribute_strategy.run(run_step, args=(data,))
    File "/data/jjung23/miniconda3/envs/sf_tensorflow/lib/python3.9/site-packages/keras/engine/training.py", line 1222, in run_step  **
        outputs = model.train_step(data)
    File "/data/jjung23/miniconda3/envs/sf_tensorflow/lib/python3.9/site-packages/keras/engine/training.py", line 1027, in train_step
        self.optimizer.minimize(loss, self.trainable_variables, tape=tape)
    File "/data/jjung23/miniconda3/envs/sf_tensorflow/lib/python3.9/site-packages/keras/optimizers/optimizer_experimental/optimizer.py", line 527, in minimize
        self.apply_gradients(grads_and_vars)
    File "/data/jjung23/miniconda3/envs/sf_tensorflow/lib/python3.9/site-packages/keras/mixed_precision/loss_scale_optimizer.py", line 1331, in apply_gradients
        tf.__internal__.smart_cond.smart_cond(
    File "/data/jjung23/miniconda3/envs/sf_tensorflow/lib/python3.9/site-packages/keras/mixed_precision/loss_scale_optimizer.py", line 1329, in apply_fn
        return self._apply_gradients(grads, wrapped_vars)
    File "/data/jjung23/miniconda3/envs/sf_tensorflow/lib/python3.9/site-packages/keras/mixed_precision/loss_scale_optimizer.py", line 1361, in _apply_gradients
        self._optimizer.apply_gradients(
    File "/data/jjung23/miniconda3/envs/sf_tensorflow/lib/python3.9/site-packages/keras/optimizers/optimizer_experimental/optimizer.py", line 1140, in apply_gradients
        return super().apply_gradients(grads_and_vars, name=name)
    File "/data/jjung23/miniconda3/envs/sf_tensorflow/lib/python3.9/site-packages/keras/optimizers/optimizer_experimental/optimizer.py", line 634, in apply_gradients
        iteration = self._internal_apply_gradients(grads_and_vars)
    File "/data/jjung23/miniconda3/envs/sf_tensorflow/lib/python3.9/site-packages/keras/optimizers/optimizer_experimental/optimizer.py", line 1166, in _internal_apply_gradients
        return tf.__internal__.distribute.interim.maybe_merge_call(
    File "/data/jjung23/miniconda3/envs/sf_tensorflow/lib/python3.9/site-packages/keras/optimizers/optimizer_experimental/optimizer.py", line 1216, in _distributed_apply_gradients_fn
        distribution.extended.update(
    File "/data/jjung23/miniconda3/envs/sf_tensorflow/lib/python3.9/site-packages/keras/optimizers/optimizer_experimental/optimizer.py", line 1211, in apply_grad_to_update_var
        return self._update_step_xla(grad, var, id(self._var_key(var)))
    File "/data/jjung23/miniconda3/envs/sf_tensorflow/lib/python3.9/site-packages/tensorflow/core/function/trace_type/trace_type_builder.py", line 129, in from_value
        return default_types.Tuple(*(from_value(c, context) for c in value))
    File "/data/jjung23/miniconda3/envs/sf_tensorflow/lib/python3.9/site-packages/tensorflow/core/function/trace_type/trace_type_builder.py", line 129, in <genexpr>
        return default_types.Tuple(*(from_value(c, context) for c in value))
    File "/data/jjung23/miniconda3/envs/sf_tensorflow/lib/python3.9/site-packages/tensorflow/core/function/trace_type/trace_type_builder.py", line 129, in from_value
        return default_types.Tuple(*(from_value(c, context) for c in value))
    File "/data/jjung23/miniconda3/envs/sf_tensorflow/lib/python3.9/site-packages/tensorflow/core/function/trace_type/trace_type_builder.py", line 129, in <genexpr>
        return default_types.Tuple(*(from_value(c, context) for c in value))
    File "/data/jjung23/miniconda3/envs/sf_tensorflow/lib/python3.9/site-packages/tensorflow/core/function/trace_type/trace_type_builder.py", line 152, in from_value
        raise TypeError(

    TypeError: Python object could not be represented through the generic tracing type. Consider implementing the Tracing Protocol for it: <AutoCastVariable 'block1_conv1/kernel:0' shape
=(3, 3, 3, 32) dtype=float32 dtype_to_cast_to=float32>

I couldn't really find anything when I googled the error.
Maybe (or hopefully) it's something easy to fix?

Hmmm - let me investigate. This looks like a separate issue. Can you paste the contents of the model params.json here?

Yes of course:
{
 "slideflow_version": "2.0.5",
 "project": "MyProject",
 "backend": "tensorflow",
 "git_commit": "ae6ad0e8937207efe60d23a400e88bf12f5db719",
 "model_name": "category-HP0",
 "full_model_name": "category-HP0",
 "stage": "training",
 "img_format": "jpeg",
 "tile_px": 299,
 "tile_um": 100,
 "max_tiles": 0,
 "min_tiles": 0,
 "model_type": "categorical",
 "outcomes": [
  "category"
 ],
 "input_features": [
  "age"
 ],
 "input_feature_sizes": [
  1
 ],
 "input_feature_labels": {
  "age": "float"
 },
 "outcome_labels": {
  "0": "major",
  "1": "minor"
 },
 "dataset_config": "project/datasets.json",
 "sources": [
  "MyProject"
 ],
 "annotations": "project/annotations.csv",
 "validation_strategy": "none",
 "validation_fraction": null,
 "validation_k_fold": 3,
 "k_fold_i": null,
 "filters": null,
 "hp": {
  "augment": "xyrj",
  "batch_size": 16,
  "drop_images": false,
  "dropout": 0,
  "early_stop": false,
  "early_stop_method": "loss",
  "early_stop_patience": 0,
  "epochs": [
   3
  ],
  "hidden_layer_width": 500,
  "hidden_layers": 0,
  "include_top": true,
  "l1": 0.0,
  "l1_dense": 0.0,
  "l2": 0.0,
  "l2_dense": 0.0,
  "learning_rate": 0.0001,
  "learning_rate_decay": 0,
  "learning_rate_decay_steps": 100000,
  "loss": "sparse_categorical_crossentropy",
  "manual_early_stop_batch": null,
  "manual_early_stop_epoch": null,
  "model": "xception",
  "normalizer": null,
  "normalizer_source": null,
  "optimizer": "Adam",
  "pooling": "max",
  "tile_px": 299,
  "tile_um": 100,
  "toplayer_epochs": 0,
  "trainable_layers": 0,
  "training_balance": "category",
  "uq": false,
  "validation_balance": "none"
 },
 "training_kwargs": {
  "save_predictions": "csv"
 }
}

This is btw only with one clinical variable (age).
Thank you so much for taking care!

Nevermind, i think i got it working and am currently training a model with multiple clinical variables.
Apparently it had nothing to do with the patch but rather with the conda environment that i re-installed (and obviously in some wrong way).
Thank you so much for your help! I will let you know how training and testing turns out.
BTW:
Is it possible to have clinical variables and tfrecords both as input - and train for a linear outcome? I know that the keyword argument "input_header" is available in things like Project.train or Project.evaluate... But is there a way to pass that input_header argument to the sf.model.LinearTrainer? Or do I have to use the keyword argument "slide_input"? Apparently, it's supposed to be a dictionary... can i then just do a list of dictionaries? Such as:
csv = 'project/annotations.csv'
df = pd.read_csv(csv)
age_dict = df.set_index('slide').to_dict()['age']
sex_dict = df.set_index('slide').to_dict()['sex']
asa_dict = df.set_index('slide').to_dict()['asa']
height_dict = df.set_index('slide').to_dict()['height']
weight_dict = df.set_index('slide').to_dict()['weight']

multi_input = [age_dict, sex_dict, asa_dict, height_dict, weight_dict]

my_trainer = sf.model.LinearTrainer(
  hp=hp,
  slide_input=multi_input,
  outdir='outputs',
  labels=labels,
)

my_trainer.train(dataset1, None)

It looks like it's running, but i'm not sure if the clinical variables are really being processed... Do you know what I mean?

Glad to hear it!
Training to linear outcomes is super easy. All you have to do is choose a linear loss function in the hyperparameters (eg "mean_squared_error"), and an outcome that can be interpreted as a continuous variable, and it should just work. You can still use the same P.train() and P.evaluate() interface, and clinical variable input will still work, as well.

Alright, thanks for your help! Yeah, i didn't see that i don't really need the LinearTrainer for linear outcome.
Quick question: is it possible to train the MIL and CLAM models for a linear outcome measure?
I've seen that there's this keyword argument bag_loss (Primary loss function) which can be either ‘ce’ or ‘svm’... it's not possible to change it to something like rmse / mean_squared_error, is it?

Training MIL models with linear outcomes is under development! (see PR https://github.com/jamesdolezal/slideflow/pull/287). The plan is to add this in version 2.1, which is still 1-2 months out.

I have another question:
Apparently, all clinical variables that are used as input for the neural network are treated as float variables.
For example, when I look into the params.json it looks like this:
"input_features": [
  "age",
  "sex",
  "asa",
  "bmi"
],
"input_feature_sizes": [
  1,
  1,
  1,
  1
],
"input_feature_labels": {
  "age": "float",
  "sex": "float",
  "asa": "float",
  "bmi": "float"
],

Would it make sense to change the parameters into telling the network that for example things like sex or asa unlike age or bmi are actually categorical (or ordinal) variables and not float? If so, how can I change it?

You can definitely mix float and categorical variables. Any variable that can be interpreted as a continuous variable (eg coded with 0 and 1) will be interpreted as float. Is this how "sex" and "ama" are encoded? If so, you can force categorical interpretation by changing "0" and "1" to "M" and "F", for example.

Hello James,
I have a very quick question:
So I trained a model with default 3-fold cross-validation. It automatically created the splits.json with data[0]['strategy'] stating the strategy method, data[0]['patients'] summing up all patients and data[0]['tfrecords']['k-fold-1'], ['k-fold-2'] and ['k-fold-3'].
Now this might be a stupid question, but: how do I know which two thirds were used for training and which last third was used for validation? There's no such information in the splits.json stating something like: first run is a+b, val on c. second run is a+c, val on b. third run is b+c, val on a. It could be any order and I couldn't figure from the documentation that you provided.
Do you know what I mean?
The reason I want to know this is because I eventually want to generate heatmaps only for the validation group. Because I want to understand what parts of the tissue were relevant related to the validation results. For like the first fold, I would have to take the model that was trained on some two thirds - but I would have to exactly locate the last third of patients that was not used for training. Does that make sense? Maybe you could comment on this as well.
Would greatly appreciate it! Thank you so much so far.
Cheers

Hi Jinny - thanks for the question, this could be better clarified in the documentation.
The best way to determine what data was used for training/validation is to view the slide_manifest.csv file created in the model folder during training. This is a CSV file with three columns - the slide name, the outcome label, and the dataset (training/validation).
You can quickly pull a list of slides that were used for model training or validation using sf.util.get_slides_from_model_manifest(), specifying whether you want to retrieve the training or validation slides using the parameter dataset:
import slideflow as sf

model_path = '/path/to/saved_model'

val_slides = sf.util.get_slides_from_model_manifest(model_path, dataset='validation')

You can then use create a dataset from only those slides, and use that dataset for generating heatmaps, or other downstream tasks:
P = sf.Project(...)
val_dataset = P.dataset(..., filters={'slide': val_slides})

To answer your question more directly though, the splits.json has the slides/tfrecords split into the number of groups equal to your cross-fold (in your case, 3). For k-fold 1, the first group (A) is validation, and the remainder is training (B+C). For k-fold 2, the second group (B) is validation, and the remainder (A+C) is training. And so on.
I appreciate you asking, I realize now that I failed to include this information in the documentation. I'll add a section in the documentation explaining this more clearly.
Let me know if that makes sense or if I can help clarify further!

Thank you, James, this was super fast!
Yes, it totally makes sense =)

authors: jamesdolezal jinnyjuice

repo: jamesdolezal/slideflow


text:
chore: refactor

This commit does two things mainly

Simplifies components. For example, instead of Source and Target now there is CodeEditor
Uses effector for managing the state.

As per our discussion, I removed the use of effector but kept the other changes I made.

We have an initial CSS snippet that is intended to show up initially so that the users can get an idea regarding the usage. Also, it should be the case if the textarea field was cleared (left empty).

This should be fixed now.

Thanks

source: gharchive/pull-request

license: MIT

license_type: permissive

license_source: github-api


text:
[Android 4.4.4 + NETStandard] TakePhotoAsync throws exception

Bug Information
Version Number of Plugin: 3.0.1 (latest stable)
Device Tested On: Google Nexus 10
Simulator Tested On: (tested it on real device, see above)
Version of VS: Visual Studio 2017
Version of Xamarin:  Xamarin Android 7.3.1.2
Versions of other things you are using:
Steps to reproduce the Behavior
call TakePhotoAsync
Expected Behavior
No app crash
Actual Behavior
App crashes with following call stack. Before migrating my core project from PCL to .NETStandard 1.6, it worked fine I think.
07-26 16:35:19.644 I/MonoDroid(13349): UNHANDLED EXCEPTION:
07-26 16:35:19.684 I/MonoDroid(13349): Java.Lang.NullPointerException: Exception of type 'Java.Lang.NullPointerException' was thrown.
07-26 16:35:19.684 I/MonoDroid(13349):   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <3fd174ff54b146228c505f23cf75ce71>:0
07-26 16:35:19.684 I/MonoDroid(13349):   at Java.Interop.JniEnvironment+StaticMethods.CallStaticObjectMethod (Java.Interop.JniObjectReference type, Java.Interop.JniMethodInfo method, Java.Interop.JniArgumentValue* args) [0x00069] in <bd30a18775d94dc8b6263aecd1ca9077>:0
07-26 16:35:19.684 I/MonoDroid(13349):   at Android.Runtime.JNIEnv.CallStaticObjectMethod (System.IntPtr jclass, System.IntPtr jmethod, Android.Runtime.JValue* parms) [0x0000e] in <d855bac285f44dda8a0d8510b679b1e2>:0
07-26 16:35:19.684 I/MonoDroid(13349):   at Android.Support.V4.Content.FileProvider.GetUriForFile (Android.Content.Context context, System.String authority, Java.IO.File file) [0x00078] in <3e239b9681084d42bb949c1e01ef500e>:0
07-26 16:35:19.684 I/MonoDroid(13349):   at Plugin.Media.MediaPickerActivity.OnCreate (Android.OS.Bundle savedInstanceState) [0x0023f] in C:\projects\mediaplugin\src\Media.Plugin.Android\MediaPickerActivity.cs:162
07-26 16:35:19.684 I/MonoDroid(13349): --- End of stack trace from previous location where exception was thrown ---
07-26 16:35:19.684 I/MonoDroid(13349):   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <3fd174ff54b146228c505f23cf75ce71>:0
07-26 16:35:19.684 I/MonoDroid(13349):   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0003e] in <3fd174ff54b146228c505f23cf75ce71>:0
07-26 16:35:19.684 I/MonoDroid(13349):   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x00028] in <3fd174ff54b146228c505f23cf75ce71>:0
07-26 16:35:19.684 I/MonoDroid(13349):   at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x00008] in <3fd174ff54b146228c505f23cf75ce71>:0
07-26 16:35:19.684 I/MonoDroid(13349):   at System.Runtime.CompilerServices.TaskAwaiter`1[TResult].GetResult () [0x00000] in <3fd174ff54b146228c505f23cf75ce71>:0
07-26 16:35:19.684 I/MonoDroid(13349):   at Plugin.Media.MediaImplementation+<TakePhotoAsync>d__16.MoveNext () [0x000c7] in C:\projects\mediaplugin\src\Media.Plugin.Android\MediaImplementation.cs:119
07-26 16:35:19.684 I/MonoDroid(13349): --- End of stack trace from previous location where exception was thrown ---
07-26 16:35:19.684 I/MonoDroid(13349):   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <3fd174ff54b146228c505f23cf75ce71>:0
07-26 16:35:19.684 I/MonoDroid(13349):   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0003e] in <3fd174ff54b146228c505f23cf75ce71>:0
07-26 16:35:19.684 I/MonoDroid(13349):   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x00028] in <3fd174ff54b146228c505f23cf75ce71>:0
07-26 16:35:19.684 I/MonoDroid(13349):   at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x00008] in <3fd174ff54b146228c505f23cf75ce71>:0
07-26 16:35:19.684 I/MonoDroid(13349):   at System.Runtime.CompilerServices.TaskAwaiter`1[TResult].GetResult () [0x00000] in <3fd174ff54b146228c505f23cf75ce71>:0
07-26 16:35:19.684 I/MonoDroid(13349):   at MyApp.Services.Impl.FilePicker+<TakePhotoAsync>d__1.MoveNext () [0x0005b] in XXX

Code snippet
Screenshotst

Oh, I think I know what's going on.
In my Android project I have "Target Android Version" set to Android 7.1 (Level 25).
I need this because I am using anther plugin of yours, Permissions, which requires it, as you also noted in the readme:

You MUST set your Target version to API 24+ and Compile against API 24+:

But why does the Media plugin crashes when Target Android Version is set to Android 7.1?
It seems like it hits an API which is not available on Android 4.4

Works fine on my sample app that I have included in this repo on my 4.4 device just fine.
Ensure you follow all the setup with xml files on android for file permissions.

Thanks.
I'm 100% sure is because of setting "Target Android Version" set to Android 7.1 (Level 25).
If I leave it to the default "Use Compile using SDK version", it doesn't crash.
I don't understand, why would this have to do with setting Android file permissions, since it works when using "Use Compile using SDK version", ?

To be clear, right now, I am not even using Permissions plugin. I was actually preparing to use it.
I am only using the Media plugin.

To summarize:

I am only using the Media plugin. Everything works great on all Android versions.
If I set Android project to have "Target Android Version" to Android 7.1 (Level 25), it crashes on all Android below 7.0

Did you do all this: https://github.com/jamesmontemagno/mediaplugin#android-n ?

Arghhhh! Thanks! Sorry!!
But I have one question:
In step #2, you instruct to have the file_paths.xml with the following content:
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-files-path name="my_images" path="Pictures" />
    <external-files-path name="my_movies" path="Movies" />
</paths>

and you mention

YOUR_APP_PACKAGE_NAME must be set to your app package name!

But note there's no YOUR_APP_PACKAGE_NAME  in your XML content.
However, going to https://developer.android.com/training/camera/photobasics.html they suggest a different name attribute:
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="my_images" path="Android/data/**com.example.package.name**/files/Pictures" />
</paths>

Which one is correct?

That is their package name...
Whatever your package name is in the android manifest is what you should put in there.
Usually it is.... "com.business.company"
It creates a private area that can be shared between apps for security reasons.

source: gharchive/issue

authors: jamesmontemagno opcodewriter

repo: jamesmontemagno/MediaPlugin

license: mit

license_source: bigquery


text:
Just a qestion regarding focus

When using iPad or iPhone, users can tap the screen and the camera will attempt to focus.  We have some users saying their cameras aren't focusing well in our app which uses this plugin, but outside the app, the camera focuses good.  Is there a way to show a focus slider or something that we're not aware of?

This library just pops up the native Camera itself, so it is out of our hands at that point and the OS takes full control. :(

authors: BlackLine-maker jamesmontemagno


text:
Geolocator: Crash on iOS 8.4 on simulator when Location is set to None

If I make the following call
await CrossGeolocator.Current.GetPositionAsync(10000).ConfigureAwait(false);
while running it on the simulator, setting the Location to None on iOS 8.4 makes it crash with a
-[CLLocationManager allowsBackgroundLocationUpdates]: unrecognized selector sent to instance <some hex number>
I haven't been able to create a minimal test case, but it does happen consistently on my app. However, the error seems to be gone if I modify Failed method of GeolocationSingleUpdateDelegate
public override void Failed(CLLocationManager manager, NSError error)
{
	switch((CLError)(int)error.Code)
	{
	case CLError.Network:
		StopListening();
		this.tcs.TrySetException(new GeolocationException(GeolocationError.PositionUnavailable));
		break;
	case CLError.LocationUnknown:
		StopListening();
		this.tcs.TrySetException(new GeolocationException(GeolocationError.PositionUnavailable));
		break;
	}
}

I can add that case in there, but there is no possible way that allowsBackgroundLocationUpdates could be called on iOS 9, I am doing a system number check when setting it and it would only be enabled if you set it to true too.

Committing and pushing today

Awesome, thanks James!


text:
Set AIProxy DeviceCheck bypass token as env variable

The DeviceCheck bypass token is used for AIProxy customers to make requests to AIProxy from the iOS simulator, where DeviceCheck is not available.
If the token leaks into a production build of the app, then attackers can use the bypass token themselves to skip one layer of security that AIProxy provides.
This patch adjusts the way that developers set the bypass token, removing it from the source code and adding it instead as an env variable. Env variables are not packaged up in distribution app bundles, and are therefore harder to make leak into a production release of your app.
Updated the README with new instructions for adding the AIPROXY_DEVICE_CHECK_BYPASS env variable

@lzell oops, this LGTM lets resolve the conflict and I can merge :)

authors: jamesrochabrun lzell

repo: jamesrochabrun/SwiftOpenAI


text:
Deployment does not have minimum availability

Pods "homepage-77cdf87bbc-" is forbidden: error looking up service account default/homepage: serviceaccount "homepage" not found:Deployment does not have minimum availability.

kubectl create serviceaccount homepage
serviceaccount/homepage created
Fix this bug

I also found this bug on a fresh deploy. Simply creating the SA fixed it like @xinmans said.

Since it seems like a misconfiguration, I'm closing this.

authors: jameswynn theeternalrat xinmans

repo: jameswynn/helm-charts


text:
The plugin will no longer work after Nov 1, 2022

Describe the bug
Today the plugin stopped working, I'm getting:
Oh no, something went wrong!
Error: Internal Server Error

Screenshots

Desktop (please complete the following information):
Plugin version: 1.9.0
Obsidian version: 0.15.9
Related to: #177 #157

@pprazzi You are right. It was related to the maintenance.

Any idea if this maintenance is related to #176 ?

As they stated that the v8 will no longer work after November 1

The earlier will no longer be available after November 1

Any idea if this maintenance is related to Todoist api v2 #176 ?

https://groups.google.com/a/doist.com/g/todoist-api/c/33g1sC_ov3Q
This confirms my assumptions that the V1 API will no longer work but it's actually after November 30.

There's an open PR #176  by @gnapse addressing the API migration to V2.

@jamiebrynes7 Any plans for migrating to V2 ?
Thanks to all the people who made this plugin possible.

Thanks for the heads up, I should probably join that google group!
I'll take a look at #176 on the weekend, or earlier if I find some time :)

Hey all, tihs was released in v1.10.0!


text:
Add TextMappingFormat

Extends MappingFormat and allows reading text mapping formats from readers/writers instead of just binary input/output streams.

Merged with https://github.com/jamiemansfield/Lorenz/commit/fa120163db7c81d06e1878ccc41644760a63577d 👍

authors: Minecrell jamierocks

repo: jamiemansfield/Lorenz


text:
Add audio loading and audio source playing

Resolves #25, resolves #22

Codecov Report

Merging #123 into master will increase coverage by 0.28%.
The diff coverage is 75.86%.

@@            Coverage Diff             @@
##           master     #123      +/-   ##
==========================================
+ Coverage   76.83%   77.11%   +0.28%
==========================================
  Files          78       87       +9
  Lines        2357     2618     +261
  Branches      213      233      +20
==========================================
+ Hits         1811     2019     +208
- Misses        373      410      +37
- Partials      173      189      +16

Flag
Coverage Δ

#unittests
77.11% <75.86%> (+0.28%)
:arrow_up:

Impacted Files
Coverage Δ

src/fake/audio_context.ts
53.12% <53.12%> (ø)

src/fake/response.ts
62.50% <62.50%> (ø)

src/fake/gain_node.ts
71.42% <71.42%> (ø)

src/fake/audio_buffer_source_node.ts
77.77% <77.77%> (ø)

src/standard/audio_source/audio_source_system.ts
82.08% <82.08%> (ø)

src/standard/http_audio/http_audio_system.ts
89.79% <89.79%> (ø)

src/standard/audio_source/audio_source.ts
90.00% <90.00%> (ø)

src/audio/audio_asset.ts
100.00% <100.00%> (ø)

src/audio/audio_request.ts
100.00% <100.00%> (ø)

... and 9 more

authors: codecov-commenter jthomperoo

repo: jamjarlabs/JamJar


text:
Make other background colors than (0/"black") possible for fonts

When I tested the embedded graphics library today with my eink I realised that only black background colors for fonts was possible.
This PR make different background colors for fonts possible and adds a default stroke_color (a default for fill_color was already set before, so it's just the opposite) so the panic can be removed.
That means the following changes (only shows the differences):

If no stroke and fill color is set: It doesn't panic anymore and uses 1u8 as stroke color
If stroke color is set but fill color is not: No change
If stroke and fill color are set: now fill color is used instead of the default 0u8 ("black")

Can you also add or edit an example in the simulator examples folder to demonstrate this behaviour?

Yes, I am gonna add an example and some tests.
In the font_builder we are currently using Style::default() which returns None for both of the colors. Should we change this so it's more visible that we use a default fill and stroke color for None values in the next iterator? (https://github.com/jamwaffles/embedded-graphics/blob/master/embedded-graphics/src/fonts/font_builder.rs#L61)
New:
fn render_str(text: &'a str) -> Self {
    Self {
        pos: Coord::new(0, 0),
        text,
        style: Style::default()
            .with_fill(0u8.into())
            .with_stroke(1u8.into()),
        _conf: Default::default(),
    }
}

When I was trying to make a testcase for inverted I might have found a bug in the current implementation:
// produced result:
[0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

// what it should look like (at least thats what i thought)
[1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

That's a bug in master, thanks for surfacing it! Running the simulator with a font where the pixel colour is always set, I see this in master:

The black rectangle to the middle left has its first row shifted by one which obviously shouldn't happen. I'll look at getting a fix into master asap.

where the pixel colour is always set

What do you mean by that?
Can you maybe paste your code in here for that example? That looks like the old behaviour before this PR and shouldn't happen.

I've just merged #53. Can you updated from master? The off-by-one error should be gone now.

What do you mean by that?

Sorry for the confusion, it was just a quick temporary change to help debugging by always setting the pixel black :slightly_smiling_face:

Travis is also happy now :-)

0.4.2 released with these changes in it!

authors: Caemor jamwaffles

repo: jamwaffles/embedded-graphics


text:
Nonblocking implementation

MCU/other hardware in use: STM32h7
Display resolution and interface: I2C, [128x64]

Nonblocking I2C support
Hello, I'm attempting to build an application that utilizes this library in conjunction with doing real-time DAC/ADC functions. I have noticed that my DAC output, which is executed from a Timer producing a simple sine-wave is blocked by the I2C communication that this library executes, which distorts the output of the DAC.
I know that the embedded-hal doesn't support non-blocking for various reasons. What I would like to do is write my own interface adapter and implement I2C interrupt handling within my app to unblock the communication to the display.
Looking at the test_helpers.rs, I see this:
#[allow(dead_code)]
#[derive(Debug, Clone, Copy)]
pub struct StubInterface;

impl WriteOnlyDataCommand for StubInterface {
    fn send_commands(
        &mut self,
        _cmd: display_interface::DataFormat<'_>,
    ) -> Result<(), DisplayError> {
        Ok(())
    }
    fn send_data(&mut self, _buf: display_interface::DataFormat<'_>) -> Result<(), DisplayError> {
        Ok(())
    }
}

I assume that I could use the WriteOnlyDataCommand trait to achieve this?
Kind regards
Oliver

Sorry for the delay! @therealprof maintains the crate that WriteOnlyDataCommand so might be able to offer more insight, but yes I think it's enough to add a custom impl of WriteOnlyDataCommand and pass that into Builder::new().connect(interface).into() instead of the provided blocking implementations.

There's an embedded-hal-async now that provides async/await-compatible bus interfaces. See https://github.com/jamwaffles/ssd1331/pull/13 for a PR adding support to the ssd1311 crate and follow https://github.com/embedded-graphics/embedded-graphics/issues/622 for an upstream embedded-graphics trait.

cc https://github.com/jamwaffles/ssd1306/pull/178

authors: bugadani jamwaffles ostenning quentinmit


text:
Latest release notes / Project visibility

Hello,
I have been asked to evaluate and install this Jenkins plugin, but I cannot find release notes for the latest version 1.13.
The Jenkins plugins directory entry does not provide any issue tracker, and I could only find an indirect link to this GH repo in the Documentation text.
Please, can you enrich the plugin metadata, and add a changelog for newer versions?
IMHO it should require a little effort, but will provide greater visibility to the plugin development health status 😉

I could only find an indirect link to this GH repo in the Documentation text.

The problem is that the update-center generation code is expecting the plugin source-code to be hosted in the jenkinsci organization in GitHub. This is described here: https://www.jenkins.io/doc/developer/publishing/requesting-hosting/#open-hosting-request. However, this plugin was not transferred to that organization.
In the update-center code (https://github.com/jenkins-infra/update-center2/blob/7d77cd45525fe5f9ddbc9ec11b1968c00952a2fa/src/main/java/io/jenkins/update_center/HPI.java#L461), the repository of the plugin is excluded.
The issue tracker problem is because none is documented in https://github.com/jenkins-infra/repository-permissions-updater/blob/master/permissions/plugin-build-monitor-plugin.yml.

add a changelog for newer versions?

The repository is not using release-drafter nor any manual release note file.
@jan-molak would it be ok to transfer the plugin to the jenkinsci organization? The plugin could benefit from dependabot, jep-229, release-drafter, better integration with plugins.jenkins.io..

@alecharp - last time I've spoken with CloudBees regarding transfer there were some challenges that prevented the transfer; happy to get back to this conversation over email though

last time I've spoken with CloudBees

To be specific, this hosting process has nothing to do with CloudBees but with the Jenkins project.
I was here speaking as a Jenkins community member and because I'm working on https://github.com/jenkins-infra/plugin-health-scoring/ which shows that the plugins is not hosted correctly.

Right, thanks for the context. There are several contributors from CloudBees helping out with Jenkins Build Monitor at the moment, so if there are PRs you'd like to propose to improve integration with Jenkins ecosystem we'll be happy to review them?

if there are PRs you'd like to propose to improve integration with Jenkins ecosystem

the transfer of the repository cannot be done with a pull request. For the release-drafter, cd etc., there configurations are easier once in the jenkinsci organization as they can simply extend basic configuration from https://github.com/jenkinsci/.github

Thanks for the explanation, I'll reach out to CloudBees and the Jenkins project to see what's changed since we last discussed this some (long) time ago #418

I'll reach out to CloudBees

I'm not sure why you need to reach out. If so, I can help you, as employee of CloudBees.
For the Jenkins Project, I can also help, as a long time contributor and I'm not also part of the hosting process.
From https://github.com/jan-molak/jenkins-build-monitor-plugin/issues/418, I don't know what you need for your end-to-end tests. For the release process, it's still up to you to use the decide to use semantic versioning or not, but that was also the case back then.

To be clear, this issue would not exist if this repository followed the standard conventions for the Jenkins project:

Repository hosted in the jenkinsci GitHub organization
CI build done on https://ci.jenkins.io
CD done with JEP-229

if there are PRs you'd like to propose to improve integration with Jenkins ecosystem we'll be happy to incorporate them?

We will not be proposing PRs to improve integration with the Jenkins ecosystem for repositories not hosted in the jenkinsci GitHub organization, using GitHub Actions for CI, and using something other than JEP-229 for CD.
If you would like to transfer this repository to the jenkinsci GitHub organization, we will be happy to help move the CI to https://ci.jenkins.io and the CD to JEP-229, which will resolve issues like this.

@alecharp @basil - I appreciate your offering to help and support Jenkins Build Monitor. I'll reach out to people I've spoken with originally to discuss the details of any transfers.

Thanks @jan-molak. To transfer the repository from the jan-molak GitHub organization to the jenkinsci GitHub organization, you can file a ticket at https://github.com/jenkins-infra/helpdesk.

Thanks @basil I'm on holiday at the moment with limited access to the Internet. I'll look into it when I'm back home next week. Thanks for all the details!

Any update on this? As @fabricat I was also looking into this plugin to evaluate it and found the info lacking. It makes the process a bit more difficult and the plugin also looks less attractive (it doesn't look maintained).

From the Jenkins project's perspective, we are still happy to help normalize this plugin's hosting and release process. The only step that is necessary to begin the process is for Jan Molak to transfer the plugin to the jenkinsci GitHub organization.

Build Monitor View is now hosted in the jenkinsci GitHub organization, built on ci.jenkins.io, and deployed with our standard CD process (including changelogs generated with Release Drafter).

authors: alecharp andham basil fabricat jan-molak

repo: jan-molak/jenkins-build-monitor-plugin


text:
Running :Test* using dotnettest in Windows adds a backslash \

Hello, first thanks for this vim plugin. It has been very useful.
I'm having the following issue in Windows:
OS:

Windows 10

_vimrc:
let test#strategy='dispatch'
let g:test#csharp#runner='dotnettest'

Running :Test* using dotnettest in Windows adds a backslash \:

Do not escape ~ on win32
https://github.com/janko-m/vim-test/blob/0941cfc91cdaa896f16f5e32d20940aab902f88c/autoload/test/csharp/dotnettest.vim#L22
https://github.com/janko-m/vim-test/blob/0941cfc91cdaa896f16f5e32d20940aab902f88c/autoload/test/csharp/dotnettest.vim#L24
https://github.com/janko-m/vim-test/blob/0941cfc91cdaa896f16f5e32d20940aab902f88c/autoload/test/csharp/dotnettest.vim#L27

Sorry, but I don't use Windows anymore and I can't help with this one, unfortunately. IIRC escaping ~ was indeed not working for me but I would not say that it is something vim-test specific (I am using neovim, however, so it could have been a neovim issue). @jhonnyslpz, can you confirm what the following command outputs?
echo expand('~')

I wonder if the PR #328 may provider a solution to this

@aignas The command output is: C:\users\jhonnys.lopez my home path.
@codeinabox Do you mean to implement a similar approach?
I believe the issue is in vim-test, the filter format is: --filter FullyQualifiedName~xyz, in OSX/Linux it is necessary to escape ~ but this is not working in Windows because it just adds a \ which is a wrong filter.
Windows CMD Screenshot:

authors: aignas codeinabox jhonnyslpz

repo: janko-m/vim-test


text:
feat(bulk-import): create bulk-import frontend plugin

Rebased https://github.com/janus-idp/backstage-plugins/pull/1271

:+1:
/lgtm
/approve

authors: gashcrumb invincibleJai

repo: janus-idp/backstage-plugins


text:
CI tab: UXD improvement

What do you want to improve?
I would like to see all CI tools configured for service in the radio option if there are multiple instead of showing all in the same screen with scroll
Screenshots:

I don't think a component will use several CI tools.
So if the component is using Jenkins or Tekton (or others), the corresponding plugin will be displayed based on the annotation in the catalog-info yaml file.
If we go that route, it will be a huge amount of work to have all the CI plugins having the same UI.

I don't think a component will use several CI tools. So if the component is using Jenkins or Tekton (or others), the corresponding plugin will be displayed based on the annotation in the catalog-info yaml file.
If we go that route, it will be a huge amount of work to have all the CI plugins having the same UI.

Hi @christophe-f ideally there will be one but if catalog-info.yaml has multiple then now we show one after another as in below

and thus UX came up with this suggestion to show in radio i.e one at at time if there are multiple. Let me know if this is not valid usecase or not on prioirty
cc @ShiranHi

Unassigned myself for now as this is still under exploration if it should be implemented or not.

Closing it for now based on the above discussions and we'll revisit if there is more ask for it.

repo: janus-idp/backstage-showcase


text:
chore(docker): set the NODE_OPTIONS=--no-node-snapshot env variable

Description
Adds the NODE_OPTIONS=--no-node-snapshot env variable so that the scaffolder is usable in nodejs 20.
Which issue(s) does this PR fix

Fixes RHIDP-2436

PR acceptance criteria
Please make sure that the following steps are complete:

[ ] GitHub Actions are completed and successful
[ ] Unit Tests are updated and passing
[ ] E2E Tests are updated and passing
[ ] Documentation is updated if necessary (requirement for new features)
[ ] Add a screenshot if the change is UX/UI related

How to test changes / Special notes to the reviewer

/retest

/test e2e-tests


text:
Provide a GPT to create a Go application managed by Argo, using GH Actions

Goal
Provide a GPT to create a Go application managed by Argo, using GH Action.  Platform engineer can either use this as is or use it as a sample to provide a starting point for their own GPT.
What problem does this solve?
As a Developer
I want a guided UI to create GH repo for a Go application, which will be managed by Argo using GH Actions
So that I can get started quickly with a Go application
Scenario:
Given: A Developer and an existing Backstage application
When: The developer wants to add a new component to the application
Then: A Go GPT is available to select
Given: A Developer and an existing Backstage application
When The developer adds a new Go component to the application
Then: A starting point application is committed to a source repository

completed by https://github.com/janus-idp/software-templates/pull/65

repo: janus-idp/software-templates


text:
dmenu bind?

Hi! Do you have a way to get the paste in the clipboard like clipd menu?
https://mpov.timmorgan.org/clipboard-history-in-sway-window-manager/

Thanks!

repo: janza/wl-clipboard-history


text:
Cannot open the discussion for the new feature

Package version
2.0.1
Describe the bug
I would like to suggest adding the ability to specify the path to the directory for snapshots in options. I wanted to do this via discussion as the manual says.
However, the current page for creating issues does not allow me to do so (image). Because it's a link to a repository (different from this one) that has no discussions.
https://github.com/japa/runner/issues/new?title=Discussion%20for%20a%20new%20feature%20-%20%3CYOUR%20FEATURE%20NAME%3E

Marked this as a bug, as I don't see any other way to communicate.
Reproduction repo
No response

@thetutlage will be able to tell what we should do here. Probably open a discussion forum like on the Adonis organisation?
In the meantime, feel free to open a feature request on this repo if needed.

The ability to specify a directory path is something we already have, via resolveSnapshotPath, see: https://japa.dev/docs/plugins/snapshot#configuration-options

I think we can use the AdonisJS discussions forum for the same. We even have a Japa category there for the same. https://github.com/adonisjs/core/discussions/categories/japa

authors: Julien-R44 mrmlnc thetutlage

repo: japa/snapshot


text:
v1.3.3 Fixes

Breaks up field validation on APIServicesDHCPdUpdate.inc to validate each field within it's own method.
Addresses issue that prevented DHCP configurations from being updated when the default interface DHCP configuration was not initialized. (#178)
Adds staticarp field to APIServicesDHCPdUpdate.inc and adds notes regarding issues with static ARP via API (#129).
Updates documentation for range_from and range_to fields on /api/v1/services/dhcpd to state their conditional requirement. (briefly mentioned in #178)
Updates copyright for 2022 year
Fixes typo in documentation for /api/v1/services/dhcpd endpoint that stated incorrect required privilege name

Beta builds are available:
pfSense 2.5:
pkg add https://github.com/jaredhendrickson13/pfsense-api/files/7747370/pfSense-2.5-pkg-API-1.3_3beta_1.zip && /etc/rc.restart_webgui

pfSense 2.6:
pkg add https://github.com/jaredhendrickson13/pfsense-api/files/7747371/pfSense-2.6-pkg-API-1.3_3beta_1.zip && /etc/rc.restart_webgui

pfSense-2.5-pkg-API-1.3_3beta_1.zip
pfSense-2.6-pkg-API-1.3_3beta_1.zip


text:
?actionBarTheme for Toolbar seems not correct before change the theme

In the demo-main module, we can see that the DrawerActivity includes a Toolbar.
But when first run it (Don't change theme), the toolbar's text color seems not correct. Here are the screenshots:

It's okay, MainActivity don't use Toolbar.

The title text color of Toolbar and other menu icons color is black rather than white.
Devices:

Genymotion Android 8.0
Xiaomi mix2s MIUI 10 Android 9.0

Have same problem.
Launch demo-simple-java. Go to settings. Choose primary color - yellow. Go Back.
And here we go:

How i can fix this??

repo: jaredrummler/Cyanea


text:
Positional parameters cannot follow a no-parameter option

If you have the following scenario:

Option -c that takes no parameters
Positional parameters

The the following command line works:
./example blah -c

However this command line fails:
./example -c blah
Argument ‘blah’ failed to parse

Since the -c option takes no parameters, it would be nice if it could be used anywhere in the command line and not just at the end.
In case it's relevant, if you have another option that takes a parameter then that does work:
./example -c -t test blah

So if a no-parameter option is followed by another dashed option then it works, but when it's followed by a potential positional parameter then it fails.

Just so you know what's going on: this was caused by 6c9bae4a071d6892069e6bd998fbae47193df0a8, which added parsing for boolean values, so that you can write things like --foo=false to explicitly disable an option. The problem is that it treated booleans as taking a parameter now, so -c blah tries to parse blah as a boolean value.
It works in a lot of use cases because you might write something like -c -f file, and the -f looks like an option, so it skips it.
The short story is that the handling of implicit values is a bit broken, and the entire parser loop is a bit of a mess. So I'll have to work out the best way to patch or rewrite this so that it behaves in a sane way.

No worries at all, thanks for the update!
Sounds like it could be tricky if you consider -c true as equivalent to -c.  I guess if only the long variant is allowed and only with an equals sign (--foo=false) then you could get away with it, but as soon as you allow a space I think you'll end up with ambiguity.  Take this for example:
(1) $ ./power-on true true          # Turn on devices 1 and 2
(2) $ ./power-on --delay=true true  # Turn on only device 1 with a delay
(3) $ ./power-on --delay true true  # Turn on devices 1 and 2 with a delay (or maybe only device 1 with a delay?)

I think (3) is always going to be ambiguous unless you require the equals as in (2).

Yes I think that's how I'll fix it. It's too ambiguous otherwise, especially when --delay --foo is parsed as two arguments because of the - at the start of --foo.


text:
reduce test time, fix spelling, add Week()

Reduced the testing time by lowering some of the iterations and sleeps
Spelling fixes
Added Week() it was missing
Use the interval constants named functions

@Streppel

Cool @JohnRoesler! Ideally, working on #88 would fix the long testing time as we'd to wrap the clock and use a stub instead. I'm having some thoughts on the best way to implement it.

authors: JohnRoesler Streppel

repo: jasonlvhit/gocron


text:
@import '_file.scss'; not working

Might be a noobish misunderstanding, but importing a dependency file doesn't work for me.
When trying to import a partial scss file I'm getting the 'file to import not found or unreadable' error.
The main scss file and the partial file are in the same directory.

No need to add the underscore or the file extension for partials. Try @import "file".

Thanks Jason!
It still gives me the error but at least it generates the *.css file correctly.
Also in live preview the changes in the imported *.scss file don't apply until the importing file is changed(re-saved).

Also in live preview the changes in the imported *.scss file don't apply until the importing file is changed(re-saved).
Same problem here. This makes developing and styling tedious

Could you try syncing to the latest https://github.com/jasonsanjose/bourbon-example. I updated it to include a local partial file for importing.

@Belkar also please try the latest 1.0.4-83 update. Are you on mac or win?

Updated the extension, still getting the same behavior.
Bourbon has the same behavior too.
I am running Windows 8.1.

Hmm. I'm on windows and I'm still not seeing an issue. Have you tried quitting and restarting Brackets?

@Belkar also please try the latest 1.0.4-83 update. Are you on mac or win?

Thanks it works now :smile:

@jasonsanjose yes I restarted Brackets several times. Haven't tried a reinstall though. That usually cuts it with programs on Windows.
Here is a demo of my problem.

@Belkar what OS are you running?

I'm using Windows 8.1.

So I tried several things. I uninstalled Brackets; removed the installation folder from Program Files; cleaned the registries, the temp files and the Roaming folder; Installed Brackets; Installed brackets-sass.
Not sure which one of this things helped but it works for me too. I'm still getting the false error but at least it updates the partial styles in live preview.
@Belkar it worked for me with the default config.

Thanks for the help guys.

Glad it's working for you. Sorry for the extra trouble. Closing.

authors: Belkar aivascu jasonsanjose

repo: jasonsanjose/brackets-sass


text:
unable to configure Phonetisaurus

hello,
I try to install /Phonetisaurus on ubuntu 19.04 amd64 to run jasper voice assistant
http://jasperproject.github.io/documentation/installation/
Phonetisaurus on is a jasper project dependences but opebfst isent't found
Here is my configuration :
uname -r
5.0.0-25-generic
ubuntu 19.04
here is Phonetisaurus's configure log
./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /usr/bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking whether to enable maintainer-specific portions of Makefiles... no
checking for style of include used by make... GNU
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking whether gcc understands -c and -o together... yes
checking dependency style of gcc... gcc3
checking for ar... ar
checking the archiver (ar) interface... ar
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking how to print strings... printf
checking for a sed that does not truncate output... /usr/bin/sed
checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E
checking for fgrep... /usr/bin/grep -F
checking for ld used by gcc... /usr/bin/ld
checking if the linker (/usr/bin/ld) is GNU ld... yes
checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B
checking the name lister (/usr/bin/nm -B) interface... BSD nm
checking whether ln -s works... yes
checking the maximum length of command line arguments... 1572864
checking how to convert x86_64-pc-linux-gnu file names to x86_64-pc-linux-gnu format... func_convert_file_noop
checking how to convert x86_64-pc-linux-gnu file names to toolchain format... func_convert_file_noop
checking for /usr/bin/ld option to reload object files... -r
checking for objdump... objdump
checking how to recognize dependent libraries... pass_all
checking for dlltool... no
checking how to associate runtime and link libraries... printf %s\n
checking for archiver @file support... @
checking for strip... strip
checking for ranlib... ranlib
checking command to parse /usr/bin/nm -B output from gcc object... ok
checking for sysroot... no
checking for a working dd... /usr/bin/dd
checking how to truncate binary pipes... /usr/bin/dd bs=4096 count=1
checking for mt... mt
checking if mt is a manifest tool... no
checking how to run the C preprocessor... gcc -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking for dlfcn.h... yes
checking for objdir... .libs
checking if gcc supports -fno-rtti -fno-exceptions... no
checking for gcc option to produce PIC... -fPIC -DPIC
checking if gcc PIC flag -fPIC -DPIC works... yes
checking if gcc static flag -static works... yes
checking if gcc supports -c -o file.o... yes
checking if gcc supports -c -o file.o... (cached) yes
checking whether the gcc linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes
checking whether -lc should be explicitly linked in... no
checking dynamic linker characteristics... GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... yes
checking for g++... g++
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
checking dependency style of g++... gcc3
checking how to run the C++ preprocessor... g++ -E
checking for ld used by g++... /usr/bin/ld -m elf_x86_64
checking if the linker (/usr/bin/ld -m elf_x86_64) is GNU ld... yes
checking whether the g++ linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes
checking for g++ option to produce PIC... -fPIC -DPIC
checking if g++ PIC flag -fPIC -DPIC works... yes
checking if g++ static flag -static works... yes
checking if g++ supports -c -o file.o... yes
checking if g++ supports -c -o file.o... (cached) yes
checking whether the g++ linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes
checking dynamic linker characteristics... (cached) GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking whether g++ supports C++11 features by default... yes
checking for gcc... (cached) gcc
checking whether we are using the GNU C compiler... (cached) yes
checking whether gcc accepts -g... (cached) yes
checking for gcc option to accept ISO C89... (cached) none needed
checking whether gcc understands -c and -o together... (cached) yes
checking dependency style of gcc... (cached) gcc3
checking how to run the C preprocessor... gcc -E
checking whether ln -s works... yes
checking for getgid in -lc... yes
checking for dlopen in -ldl... yes
checking for cos in -lm... yes
checking for pthread_mutex_init in -lpthread... yes
checking stddef.h usability... yes
checking stddef.h presence... yes
checking for stddef.h... yes
checking for stdlib.h... (cached) yes
checking for string.h... (cached) yes
checking for stdbool.h that conforms to C99... no
checking for _Bool... no
checking for inline... inline
checking for size_t... yes
checking for ssize_t... yes
checking for ptrdiff_t... yes
checking for working strtod... yes
checking for memmove... yes
checking for strchr... yes
checking for strrchr... yes
checking for strspn... yes
checking fst/fst.h usability... yes
checking fst/fst.h presence... yes
checking for fst/fst.h... yes
checking for openfst libraries... no
configure: error: Can't find OpenFST or one or more of its extensions. Use --with-openfst-includes and --with-openfst-libs to specify where you have installed OpenFst. OpenFst should have been configured with the following flags: --enable-static --enable-shared --enable-far --enable-ngram-fsts
note : I have been install openfst librery on /usr/local/lib
Could you help me please ?
Thanks for your support
Best regards
Battant

The work on Jasper - specifically making it work as-is and refactoring to Python 3 is being conducted at https://github.com/aplawson/jasper-client -- including a tutorial on how to build it and/or deploy it with a custom Raspbian ISO image. //adam

authors: Battant aplawson

repo: jasperproject/jasper-client


text:
errors：trying to send message larger than max(2179626 vs. 2097152)

I have an error message:
i.joperator.processing.eventDispatcher: Kubernets exception 500 failure eecyting :PUT at http://xxx .message: rpc error :code =trying to send message larger max(2179622 vs. 2097152)
I did not find the configuration item to solve the problem
Please help me

Hi @wangchenglonggithub , this issue seems to me a generic one with Kubernetes API server.
probably the best place to ask is the sig-api-machinery channel on Kubernetes Slack.
see:
https://kubernetes.slack.com/archives/C0EG7JC6T/p1669669822416379

will close this for now. @wangchenglonggithub pls let us know if you found out the problem.

authors: csviri wangchenglonggithub

repo: java-operator-sdk/java-operator-sdk


text:
Little code clean up

Reviewed code style.
Sorted methods. Android methods go first, then user actions and finally bus events.
Added static ChatService assessor to Application.
Started ChatService in background to pass the StrictMode.
Ensured to handle UI events in the main thread.
Refactored common stuff into a BaseActivity.

Looks fantastic! +1

Good work +1
Perhaps we should create some style rules at some point to get everyone on the same page

Maybe we can use Checkstyle

authors: arreche jayseejc jephillips

repo: javabrewery/brew-chat


text:
when i use obfuscator@0.24.5 will cause very strange error.

i have a 4000 lines node code,  i use version 0.18.7 work fine, but use 0.24.5 will cause very strange error.
like:
const { title, permission, group} = req.body;
sometime will cause group is undefined or some other from req.body be undefined, but i post body is work fine.
i have hundreds const {arg1, arg2, arg3...} = req.body;
but when i submit,  some arg will became undefined.
my config:
compact code: true
identifier Names Generator: hexadecimal
self defending: true
control flow flatteing: true
control flow flattening threshold: 0.8
dead code injection: true
dead code injection threshold: 0.4
string array: true
rotate string array: true
string array encoding: rc4
string array threshold: 0.8
unicode escape sequence: true
disable console output: true
debug protection: true
debug protection interval: true
seed:0
target: node

const vipbuys = await Vipbuy.find().populate('group');
will cause TypeError: Cannot read property 'refPath' of undefined.
this like 'group' be undefined.

Hmm. Transform object keys is disabled?

Try to remove all opttions, the error will happen?

I need an example of the code

like:
exports.postadddownload = async (req, res) => {
  const { name, url, type } = req.body;
  await Download.create({
    name,
    url,
    path: './download/' + name + '.mp4',
    status: '等待下载',
    type,
  })
  res.redirect('/admin/download');
}

after post, type property will lost.  i dont know what happen, maybe somewhere type is against this 'type'.

Can you debug:
const { title, permission, group} = req.body;
after this line, group already undefined?

can fix it by obfuscator more times. i think this is because i have more function inclue type property.
like:
exports.posteditad = async (req, res) => {
  const id = req.body.id;
  const { title, type } = req.body;
  let types = [];
  types = types.concat(type);
  console.log(types);
  await Ad.updateOne({ _id: id }, { $set: { title, type: types.join(',') } });
  res.redirect('/admin/ad');
};
exports.postaddapp = async (req, res) => {
  const { title, theimg, link, duration, type } = req.body;
  await App.create({ title, img: theimg, link, duration, type });
  res.redirect('/admin/app');
};

i cant reappear it. sorry. i already fix it by obfusecate more times.


text:
🛑 Rodriguez Marin, 88 is down

In 27c5df0, Rodriguez Marin, 88 (http://159.65.204.200:7057/) was down:

HTTP code: 502
Response time: 18618 ms

Resolved: Rodriguez Marin, 88 is back up in 39b99d1.

repo: javisu/monitor


text:
🛑 Paseo de Extremadura, 298 is down

In cd43365, Paseo de Extremadura, 298 (http://159.65.204.200:7046/) was down:

HTTP code: 0
Response time: 0 ms

Resolved: Paseo de Extremadura, 298 is back up in 9a7918e.


text:
🛑 Rodriguez Marin, 88 is down

In 3796207, Rodriguez Marin, 88 (http://159.65.204.200:7057/) was down:

HTTP code: 502
Response time: 18557 ms

Resolved: Rodriguez Marin, 88 is back up in fe70218.


text:
🛑 Antonio Acuña, 10 is down

In 097c08c, Antonio Acuña, 10 (http://159.65.204.200:7047/) was down:

HTTP code: 502
Response time: 18668 ms

Resolved: Antonio Acuña, 10 is back up in 52191ab.


text:
🛑 Norma, 357 is down

In c593771, Norma, 357 (http://159.65.204.200:7044/) was down:

HTTP code: 502
Response time: 18620 ms

Resolved: Norma, 357 is back up in 4ae971d.


text:
🛑 Colegio Malvar Piscina is down

In 95eecd7, Colegio Malvar Piscina (http://159.65.204.200:7041/) was down:

HTTP code: 0
Response time: 0 ms

Resolved: Colegio Malvar Piscina is back up in 025fa6b.


text:
🛑 Brescia, 4 is down

In 0e68c76, Brescia, 4 (http://159.65.204.200:7051/) was down:

HTTP code: 0
Response time: 0 ms

Resolved: Brescia, 4 is back up in 8ff1787.


text:
Added support for flat data structures

I added support for key value instances, where the li element's text is the value and no complex data structure is used.

Sorry, but this is not a feature I want to add. Thanks anyways!

authors: ermagana javve