configurable app DisplayURL for the UI

What is this PR for? This PR is to enable a new configuration item, DisplayURL which will allow the URL presented in the UI to display something different than the BaseURL or even the URL in the browser window when accessing the app.
The scenario/need for this is when the app runs under a different route than what a user would access it by for going to a shortURL.  For example,
The app runs as http://go-url.apps.myplatform.mydomain.com/ but there is a redirector pointing all traffic of http://go/ to this app.  A user wanting to leverage the shortened URL only need to care about entering http://go/<some shortname>.  The UI will continue to present itself as being http://go-url.apps.myplatform.mydomain.com/<some shortname> for purposes of communicating the new shortlink URL but it is potentially a bad user experience when the actual shortlink being used would be http://go/<some shortname>.

If DisplayURL is not set (the default state), it will default to whatever BaseURL is
The Lookup form will no longer require the user to enter the entire URL of the site when looking up a shortURL

This is a non-trivial change and possibly edge case, so any feedback would be welcomed!  In my own situation, it drives a better end user experience as we cannot CNAME directly to the app and have an intermediate redirect.

Pull Request Test Coverage Report for Build 403

5 of 9 (55.56%)  changed or added relevant lines in 3 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage increased (+0.2%) to 12.931%

Changes Missing Coverage
Covered Lines
Changed/Added Lines
%

internal/handlers/public.go
0
4
0.0%

Totals

Change from base Build 401:
0.2%

Covered Lines:
165

Relevant Lines:
1276

💛  - Coveralls

In my opinion it makes definitely make sense to add such a display URL. Especially for the ha deployment. Thanks!


Different plotting units for the y axis

Most of the plots have units of barns.
But not all of them, see https://github.com/Shimwell/nuclear_xs_viewer/blob/cf49beca08f2047b979fcf95994c1537f6e3b9fd/src/App.js#L92-L101 for previous website logic for MT444 and heating

solved


update password in example to fix sdk credscan error

issue in https://github.com/Azure/azure-sdk-for-js/issues/30232

@kazrael2119 you should also change this folder https://github.com/Azure/azure-rest-api-specs/tree/main/specification/scvmm/ScVmm.Management/examples/2023-10-07

I don't think we really need ARM sign off for the example value change. will merge it, let me know if anyone has any concerns.


build.gradle.kts   Exclude files

Expected Behavior
Exclude these files when generating apk
Current Behavior
of no avail
Context
kotlin {
sourceSets{
named("main"){
resources.exclude("src/main/debug/", "src/main/java/com/test/app/debug/")
}
}
}
or
sourceSets.named("main"){
resources.filter.exclude("src/main/debug/", "src/main/java/com/test/app/debug/")
}

Thank you for your interest in Gradle!
Your issue appears to be a question about how to use Gradle. Your question might be better answered on our forums or StackOverflow. We have several resources on help.gradle.org that you should check out first.
If you think you have come across a Gradle bug, please file a new issue describing the problem and how to reproduce it.
If you think Gradle is missing a feature, please file a new issue describing your use case for the feature.

Thank you for your interest in Gradle!
Your issue appears to be a question about how to use Gradle. Your question might be better answered on our forums or StackOverflow. We have several resources on help.gradle.org that you should check out first.
If you think you have come across a Gradle bug, please file a new issue describing the problem and how to reproduce it.
If you think Gradle is missing a feature, please file a new issue describing your use case for the feature.

All of them have been tried，But  there are still those files in apk

could you try this?
packagingOptions {
        resources.excludes.add("src/main/debug/")
        resources.excludes.add("src/main/java/com/test/app/debug/")
}

What you are filtering are just the resources, not the sources. To filter the sources you need to figure out which language your sources are in and then reference that. So java.exclude or kotlin.exclude. For more question try the Android community. The setup there might be different.


tf.range not works with fixed input parameter on TPU

Please make sure that this is a bug. As per our
GitHub Policy,
we only address code/doc bugs, performance issues, feature requests and
build/installation issues on GitHub. tag:bug_template
System information

Have I written custom code (as opposed to using a stock example script provided in TensorFlow): yes
OS Platform and Distribution (e.g., Linux Ubuntu 16.04): colab
Mobile device (e.g. iPhone 8, Pixel 2, Samsung Galaxy) if the issue happens on mobile device:
TensorFlow installed from (source or binary): colab
TensorFlow version (use command below): 2.4.1
Python version: colab
Bazel version (if compiling from source):
GCC/Compiler version (if compiling from source):
CUDA/cuDNN version:
GPU model and memory:

You can collect some of this information using our environment capture
script
You can also obtain the TensorFlow version with:
v2.4.1-0-g85c8b2a817f 2.4.1
Describe the current behavior
tf.range function cannot compiled on TPU or xla compile option with fixed input value.
The Cloud TPU reference says tf.range is available python api with compile-time constant. However, It cannot compiled on TPU using below code sample. You can know the parameter of tf.range is constant by printed value and I tried and failed compile using constant number as the argument of tf.range directly. It works if I changed tf.range to range.
Describe the expected behavior
Contributing - Do you
want to contribute a PR? (yes/no): no.. I don't know xla...
Standalone code to reproduce the issue
Provide a reproducible test case that is the bare minimum necessary to generate
the problem. If possible, please share a link to Colab/Jupyter/any notebook.
import tensorflow as tf

resolver = tf.distribute.cluster_resolver.TPUClusterResolver()
tf.config.experimental_connect_to_cluster(resolver)
tf.tpu.experimental.initialize_tpu_system(resolver)
strategy = tf.distribute.TPUStrategy(resolver)

class TestModel(tf.keras.Model):
  def __init__(self):
    super().__init__()

    self.embed = tf.keras.layers.Embedding(vocab_size, 32)
    self.dense = tf.keras.layers.Dense(vocab_size)

  def call(self, input, training=None):
    embedding = self.embed(input)
    token_length = embedding.shape[1]
    print("Token Length:", token_length)
    outputs = tf.TensorArray(tf.float32, token_length)

    for i in tf.range(token_length):
    # for i in range(token_length):
      output = self.dense(embedding[:, i, :])
      outputs = outputs.write(i, output)

    return tf.transpose(outputs.stack(), [1,0,2])

with strategy.scope():
  vocab_size = 1000
  batch_size = 32
  sequence_length = 32

  model = TestModel()
  model.compile('adam', tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True))
  model(tf.keras.Input([sequence_length - 1]))

  dataset = tf.data.Dataset.from_tensor_slices(tf.random.uniform([10000, sequence_length], 0, vocab_size, dtype=tf.int32)).map(lambda x: (x[:-1], x[1:]))
  dataset = dataset.batch(batch_size)

  model.fit(dataset)

Other info / logs Include any logs or source code that would be helpful to
diagnose the problem. If including tracebacks, please include the full
traceback. Large logs and files should be attached.
Error logs
InvalidArgumentError: 9 root error(s) found.
  (0) Invalid argument: {{function_node __inference_train_function_161299}} Compilation failure: The number of output elements 128 has to equal to number of input elements that are sliced 1 when input indices are not constant.
	 [[{{node test_model_26/while/strided_slice}}]]
	 [[test_model_26/while]]
	TPU compilation failed
	 [[tpu_compile_succeeded_assert/_1260395280479028058/_5]]
	 [[tpu_compile_succeeded_assert/_1260395280479028058/_5/_197]]
  (1) Invalid argument: {{function_node __inference_train_function_161299}} Compilation failure: The number of output elements 128 has to equal to number of input elements that are sliced 1 when input indices are not constant.
	 [[{{node test_model_26/while/strided_slice}}]]
	 [[test_model_26/while]]
	TPU compilation failed
	 [[tpu_compile_succeeded_assert/_1260395280479028058/_5]]
	 [[tpu_compile_succeeded_assert/_1260395280479028058/_5/_221]]
  (2) Invalid argument: {{function_node __inference_train_function_161299}} Compilation failure: The number of output elements 128 has to equal to number of input elements that are sliced 1 when input indices are not constant.
	 [[{{node test_model_26/while/strided_slice}}]]
	 [[test_model_26/while]]
	TPU compilation failed
	 [[tpu_compile_succeeded_assert/_1260395280479028058/_5]]
	 [[tpu_compile_succeeded_assert/_1260395280479028058/_5/_209]]
  (3) Invalid argument: {{function_node __inference_train_function_161299}} Compilation failure: The number of output elements 128 has to equal to number of input elements that are sliced 1 when input indices are not constant.
	 [[{{node test_model_26/while/strided_slice}}]]
	 [[test_model_26/while]]
	TPU compilation failed
	 [[tpu_compile_succeeded_assert/_1260395280479028058/_5]]
	 [[tpu_compile_succeeded_assert/_1260395280479028058/_5/_185]]

@cosmoquester ,
Please feel free to close the issue once PR is merged.
Thanks!

@cosmoquester ,
On running the given code snippet, I am facing different errors in v2.5,v2.4 and nightly. Please find the gist of it here.

I have run your gist. The all three of versions puts same error of UnavailableError: Socket closed on my execution. When I re-run my example code attached also, puts UnavailableError: Socket closed. So I don't know why, but the error seems to be changed.

Yunxing, can you help to take a look? Thanks!

This is already fixed in internal head a few months ago.

Thanks Yunxing. @cosmoquester can you try it in tf-nightly?

I tested with tf-nightly and it fails with same error UnavailableError: Socket closed
See gist

I also got UnavailableError: Socket closed now

Something seems broken internally ( I suspect some runtime value) and the error is masked out for confidentiality reasons. It'd be good if someone can port the example to internal codebase then we can resume debugging there.

I found out one more thing.
class TestModel(tf.keras.Model):
  def __init__(self):
    super().__init__()

    self.embed = tf.keras.layers.Embedding(vocab_size, 32)
    self.dense = tf.keras.layers.Dense(vocab_size)
    self.dense2 = tf.keras.layers.Dense(vocab_size)

  def call(self, input, training=None):
    embedding = self.embed(input)
    token_length = embedding.shape[1]
    print("Token Length:", token_length)

    output = self.dense(tf.reduce_mean(embedding, axis=1))
    for i in tf.range(token_length):
      output = self.dense2(output)

    return tf.repeat(output[:, tf.newaxis, :], token_length, 1)

When I changed model not to use tf.TensorArray like upper example, It works even without tf-nightly version.

class TestModel(tf.keras.Model):
  def __init__(self):
    super().__init__()

    self.embed = tf.keras.layers.Embedding(vocab_size, 32)
    self.dense = tf.keras.layers.Dense(vocab_size)

  def call(self, input, training=None):
    embedding = self.embed(input)
    token_length = embedding.shape[1]
    print("Token Length:", token_length)

    def cond(i, outputs):
      return i < token_length

    def body(i, outputs):
      output = self.dense(embedding[:, i, :])
      outputs = outputs.write(i, output)
      i += 1
      return i, outputs

    i = 0
    outputs = tf.TensorArray(tf.float32, token_length)
    i, outputs = tf.while_loop(cond, body, [i, outputs])

    return tf.transpose(outputs.stack(), [1,0,2])

Also, I tested changing tf.range to tf.while with tf.TensorArray.
I got error like this.
InvalidArgumentError: 9 root error(s) found.
  (0) Invalid argument: {{function_node __inference_train_function_28361}} XLA compilation requires a fixed tensor list size. Set the max number of elements. This could also happen if you're using a TensorArray in a while loop that does not have its maximum_iteration set, you can fix this by setting maximum_iteration to a suitable value.

	 [[{{node gradient_tape/test_model_9/while/test_model_9/while/Placeholder_0/accumulator}}]]
	 [[TPUReplicate/_compile/_10788351830066829662/_4]]
	 [[tpu_compile_succeeded_assert/_10570558850549437487/_5/_257]]
  (1) Invalid argument: {{function_node __inference_train_function_28361}} XLA compilation requires a fixed tensor list size. Set the max number of elements. This could also happen if you're using a TensorArray in a while loop that does not have its maximum_iteration set, you can fix this by setting maximum_iteration to a suitable value.

	 [[{{node gradient_tape/test_model_9/while/test_model_9/while/Placeholder_0/accumulator}}]]
	 [[TPUReplicate/_compile/_10788351830066829662/_4]]
	 [[TPUReplicate/_compile/_10788351830066829662/_4/_170]]
  (2) Invalid argument: {{function_node __inference_train_function_28361}} XLA compilation requires a fixed tensor list size. Set the max number of elements. This could also happen if you're using a TensorArray in a while loop that does not have its maximum_iteration set, you can fix this by setting maximum_iteration to a suitable value.

So maybe I think this issue occurred when using tf.while with tf.TensorArray.

import tensorflow as tf

resolver = tf.distribute.cluster_resolver.TPUClusterResolver()
tf.config.experimental_connect_to_cluster(resolver)
tf.tpu.experimental.initialize_tpu_system(resolver)
strategy = tf.distribute.TPUStrategy(resolver)

class TestModel(tf.keras.Model):
  def __init__(self):
    super().__init__()

    self.embed = tf.keras.layers.Embedding(vocab_size, 32)
    self.dense = tf.keras.layers.Dense(vocab_size)

  @tf.function
  def train_step(self, inputs):
    input, target = inputs

    token_length = input.shape[1]
    print("Token Length:", token_length)

    total_loss = 0.0
    with tf.GradientTape() as tape:
      embedding = self.embed(input)

      for i in tf.range(token_length):
        output = self.dense(embedding[:, i, :])
        total_loss += self.compiled_loss(target[:, i], output)

    variables = self.trainable_variables
    gradients = tape.gradient(total_loss, variables)
    self.optimizer.apply_gradients(zip(gradients, variables))

    return {"loss":total_loss}

with strategy.scope():
  vocab_size = 1000
  batch_size = 32
  sequence_length = 32

  model = TestModel()
  model.compile('adam', tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True))

  dataset = tf.data.Dataset.from_tensor_slices(tf.random.uniform([10000, sequence_length], 0, vocab_size, dtype=tf.int32)).map(lambda x: (x[:-1], x[1:]))
  dataset = dataset.batch(batch_size)

  model.fit(dataset)

I found one more. I got error even without tf.TensorArray when I tried to train without Model.call with train_step.
Token Length: 31
Token Length: 31
---------------------------------------------------------------------------
UnavailableError                          Traceback (most recent call last)
<ipython-input-1-e4445f47fcd7> in <module>()
     46   dataset = dataset.batch(batch_size)
     47
---> 48   model.fit(dataset)

13 frames
/usr/local/lib/python3.7/dist-packages/six.py in raise_from(value, from_value)

UnavailableError: Socket closed


Inconsistent controls since 4.0.1

Checklist:

[x] I updated to the latest version available
[x] I cleared the cache of my browser

**Release with the issue:4.0.3
**Last working release (if known):3.9.4
Browser and Operating System:

Description of problem:

Your Full Remote Config
type: custom:android-tv-card
title: Clean card
rows:
  - - power
    - home
    - play_pause
    - menu
  - - touchpad
  - - back
    - volume_down
    - volume_up
    - keyboard
custom_actions: []
remote_id: remote.android_tv_192_168_1_216
keyboard_id: media_player.android_tv_192_168_1_216
media_player_id: media_player.android_tv_192_168_1_216

type: custom:mini-media-player
entity: media_player.android_tv_192_168_1_216
name: Main Hall Cast
source: icon
artwork: material
hide:
  power: true
  controls: false
  toggle_power: true
  runtime: false
  jump: false
  play-pause: false
  source: true
  mute: true
shortcuts:
  columns: 4
  hide_when_off: true
  buttons:
    - icon: mdi:youtube-tv
      type: source
      id: com.teamsmart.videomanager.tv
    - icon: mdi:vlc
      type: source
      id: VLC
    - icon: mdi:youtube
      type: source
      id: YouTube
    - icon: mdi:cast
      type: source
      id: HDMI 4
    - icon: mdi:lightbulb
      type: service
      id: light.toggle
      data:
        entity_id: light.main_hall_lights_l2
    - icon: mdi:phone-classic
      type: service
      id: browser_mod.popup
      data:
        deviceID:
          - this
        title: Tablet Setup
        timeout: 900
        dismissable: true
        size: normal
        content:
          type: vertical-stack
          cards:
            - type: custom:android-tv-card
    - icon: mdi:remote-tv
      type: service
      id: browser_mod.popup
      data:
        action: fire-dom-event
        browser_mod:
          command: popup
          data:
            title: Cast Controls
            dismissable: true
            size: normal
            card_mod:
              style: |
                ha-dialog$:
                  div.mdc-dialog div.mdc-dialog__scrim {
                    backdrop-filter: blur(5px);
                  }
                ha-dialog {
                  --vertical-align-dialog: center !important;
                  --mdc-dialog-min-width: 50px;
                  --mdc-dialog-max-width: 400px;
                  --mdc-dialog-min-height: 350px !important;
                  }
            content:
              type: vertical-stack
              cards:
                - type: custom:android-tv-card
                  card_mod:
                    style: |
                      }    ha-card {
                      margin-bottom: 20px;    }
                  remote_id: media_player.android_tv_192_168_1_216
                  keyboard_id: media_player.android_tv_192_168_1_216
                  media_player_id: media_player.android_tv_192_168_1_216
                  rows:
                    - - power
                      - home
                      - menu
                    - - navigation_touchpad
                    - - back
                      - keyboard
                  button_style:
                    '--size': 32px
                    color: grey
                    border-width: 3px;
                    box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.9);
                    border-radius: 50%;
                    backgound-color: black;
                    background-opacity: 50%;
                    padding: 8px;
                  touchpad_style:
                    background-image: url("/local/fingerprint.png")
                    background-size: 150px
                    background-repeat: no-repeat
                    background-position: center
                    opacity: 0.5
                    box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.9);
                    height: 160px
                    width: 160px
                  enable_double_click: true
                  double_click_keycode: menu
                  custom_keys:
                    power:
                      service: androidtv.adb_command
                      service_data:
                        entity_id: media_player.android_tv_192_168_1_216
                        command: POWER
                    back:
                      service: androidtv.adb_command
                      service_data:
                        entity_id: media_player.android_tv_192_168_1_216
                        command: BACK
                    home:
                      service: androidtv.adb_command
                      service_data:
                        entity_id: media_player.android_tv_192_168_1_216
                        command: HOME
                    menu:
                      service: androidtv.adb_command
                      service_data:
                        entity_id: media_player.android_tv_192_168_1_216
                        command: MENU
                    up:
                      service: androidtv.adb_command
                      service_data:
                        entity_id: media_player.android_tv_192_168_1_216
                        command: UP
                    left:
                      icon: local/16x16.png
                      service: androidtv.adb_command
                      service_data:
                        entity_id: media_player.android_tv_192_168_1_216
                        command: LEFT
                    center:
                      icon: mdi:arrow-expand-all
                      service: androidtv.adb_command
                      service_data:
                        entity_id: media_player.android_tv_192_168_1_216
                        command: ENTER
                    right:
                      service: androidtv.adb_command
                      service_data:
                        entity_id: media_player.android_tv_192_168_1_216
                        command: RIGHT
                    down:
                      service: androidtv.adb_command
                      service_data:
                        entity_id: media_player.android_tv_192_168_1_216
                        command: DOWN
group: true
max_volume: '25'
min_volume: '1'
volume_stateless: true
show_progress: true
sound_mode: full
scale: '1.1'
info: scroll
hold_action:
  action: more-info
tap_action:
  action: fire-dom-event
  browser_mod:
    service: browser_mod.popup
    data:
      title: Cast Controls
      dismissable: true
      size: normal
      card_mod:
        style: |
          ha-dialog$:
            div.mdc-dialog div.mdc-dialog__scrim {
              backdrop-filter: blur(5px);
            }
          ha-dialog {
            --vertical-align-dialog: center !important;
            --mdc-dialog-min-width: 50px;
            --mdc-dialog-max-width: 400px;
            --mdc-dialog-min-height: 350px !important;
            }
      content:
        type: vertical-stack
        cards:
          - type: custom:android-tv-card
            remote_id: media_player.android_tv_192_168_1_216
            keyboard_id: media_player.android_tv_192_168_1_216
            media_player_id: media_player.android_tv_192_168_1_216
            rows:
              - - power
                - home
                - play_pause
                - menu
              - - navigation_buttons
              - - back
                - volume_down
                - volume_up
                - keyboard
            custom_actions:
              - type: button
                name: power
                tap_action:
                  action: perform-action
                  perform_action: androidtv.adb_command
                  data:
                    command: POWER
                  target:
                    entity_id: media_player.android_tv_192_168_1_216
                icon: mdi:power
              - type: button
                name: back
                tap_action:
                  action: perform-action
                  perform_action: androidtv.adb_command
                  data:
                    command: BACK
                  target:
                    entity_id: media_player.android_tv_192_168_1_216
                icon: mdi:keyboard-backspace
              - type: button
                name: home
                tap_action:
                  action: perform-action
                  perform_action: androidtv.adb_command
                  data:
                    command: HOME
                  target:
                    entity_id: media_player.android_tv_192_168_1_216
                icon: mdi:home
              - type: button
                name: menu
                tap_action:
                  action: perform-action
                  perform_action: androidtv.adb_command
                  data:
                    command: MENU
                  target:
                    entity_id: media_player.android_tv_192_168_1_216
                icon: mdi:menu
              - type: button
                name: up
                tap_action:
                  action: perform-action
                  perform_action: androidtv.adb_command
                  data:
                    command: UP
                  target:
                    entity_id: media_player.android_tv_192_168_1_216
                hold_action:
                  action: repeat
                icon: mdi:chevron-up
              - type: button
                name: left
                tap_action:
                  action: perform-action
                  perform_action: androidtv.adb_command
                  data:
                    command: LEFT
                  target:
                    entity_id: media_player.android_tv_192_168_1_216
                hold_action:
                  action: repeat
                icon: mdi:chevron-left
              - type: button
                name: center
                tap_action:
                  action: perform-action
                  perform_action: androidtv.adb_command
                  data:
                    command: ENTER
                  target:
                    entity_id: media_player.android_tv_192_168_1_216
                icon: mdi:arrow-expand-all
              - type: button
                name: right
                tap_action:
                  action: perform-action
                  perform_action: androidtv.adb_command
                  data:
                    command: RIGHT
                  target:
                    entity_id: media_player.android_tv_192_168_1_216
                hold_action:
                  action: repeat
                icon: mdi:chevron-right
              - type: button
                name: down
                tap_action:
                  action: perform-action
                  perform_action: androidtv.adb_command
                  data:
                    command: DOWN
                  target:
                    entity_id: media_player.android_tv_192_168_1_216
                hold_action:
                  action: repeat
                icon: mdi:chevron-down
              - type: touchpad
                name: touchpad
                tap_action:
                  action: key
                  key: DPAD_CENTER
                up:
                  tap_action:
                    action: perform-action
                    perform_action: androidtv.adb_command
                    data:
                      command: UP
                    target:
                      entity_id: media_player.android_tv_192_168_1_216
                  hold_action:
                    action: repeat
                  name: up
                  type: button
                down:
                  tap_action:
                    action: perform-action
                    perform_action: androidtv.adb_command
                    data:
                      command: DOWN
                    target:
                      entity_id: media_player.android_tv_192_168_1_216
                  hold_action:
                    action: repeat
                  name: down
                  type: button
                left:
                  tap_action:
                    action: perform-action
                    perform_action: androidtv.adb_command
                    data:
                      command: LEFT
                    target:
                      entity_id: media_player.android_tv_192_168_1_216
                  hold_action:
                    action: repeat
                  name: left
                  type: button
                right:
                  tap_action:
                    action: perform-action
                    perform_action: androidtv.adb_command
                    data:
                      command: RIGHT
                    target:
                      entity_id: media_player.android_tv_192_168_1_216
                  hold_action:
                    action: repeat
                  name: right
                  type: button
                styles: |-
                  toucharea {
                    background-image: url("/local/fingerprint.png");
                    background-size: 150px;
                    background-repeat: no-repeat;
                    background-position: center;
                    opacity: 0.5;
                    box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.9);;
                    height: 160px;
                    width: 160px;
                  }
                double_tap_action:
                  action: key
                  key: menu
            styles: |-
              remote-button {
                --size: 32px;
                color: grey;
                border-width: 3px;;
                box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.9);;
                border-radius: 50%;;
                backgound-color: black;;
                background-opacity: 50%;;
                padding: 8px;;
              }
            card_mod:
              style: |
                }    ha-card {
                margin-bottom: 20px;    }
card_mod:
  style:
    mmp-shortcuts $:
      div.mmp-shortcuts__buttons mmp-button.mmp-shortcuts__button div: |
        img {
          height: 50% !important;
        }

What exactly is inconsistent?

It looks like you didn't click the update old config button for the first popup remote. Here they are cleaned up a little bit.
type: vertical-stack
cards:
  - type: custom:android-tv-card
    remote_id: media_player.android_tv_192_168_1_216
    keyboard_id: media_player.android_tv_192_168_1_216
    media_player_id: media_player.android_tv_192_168_1_216
    rows:
      - - power
        - home
        - menu
      - - touchpad
      - - back
        - keyboard
    custom_actions:
      - type: button
        name: power
        tap_action:
          action: perform-action
          perform_action: androidtv.adb_command
          data:
            command: POWER
          target:
            entity_id: media_player.android_tv_192_168_1_216
        icon: mdi:power
      - type: button
        name: back
        tap_action:
          action: perform-action
          perform_action: androidtv.adb_command
          data:
            command: BACK
          target:
            entity_id: media_player.android_tv_192_168_1_216
        icon: mdi:keyboard-backspace
      - type: button
        name: home
        tap_action:
          action: perform-action
          perform_action: androidtv.adb_command
          data:
            command: HOME
          target:
            entity_id: media_player.android_tv_192_168_1_216
        icon: mdi:home
      - type: button
        name: menu
        tap_action:
          action: perform-action
          perform_action: androidtv.adb_command
          data:
            command: MENU
          target:
            entity_id: media_player.android_tv_192_168_1_216
        icon: mdi:menu
      - type: button
        name: up
        tap_action:
          action: perform-action
          perform_action: androidtv.adb_command
          data:
            command: UP
          target:
            entity_id: media_player.android_tv_192_168_1_216
        hold_action:
          action: repeat
        icon: mdi:chevron-up
      - type: button
        name: left
        tap_action:
          action: perform-action
          perform_action: androidtv.adb_command
          data:
            command: LEFT
          target:
            entity_id: media_player.android_tv_192_168_1_216
        hold_action:
          action: repeat
        icon: mdi:chevron-left
      - type: button
        name: center
        tap_action:
          action: perform-action
          perform_action: androidtv.adb_command
          data:
            command: ENTER
          target:
            entity_id: media_player.android_tv_192_168_1_216
        icon: mdi:arrow-expand-all
      - type: button
        name: right
        tap_action:
          action: perform-action
          perform_action: androidtv.adb_command
          data:
            command: RIGHT
          target:
            entity_id: media_player.android_tv_192_168_1_216
        hold_action:
          action: repeat
        icon: mdi:chevron-right
      - type: button
        name: down
        tap_action:
          action: perform-action
          perform_action: androidtv.adb_command
          data:
            command: DOWN
          target:
            entity_id: media_player.android_tv_192_168_1_216
        hold_action:
          action: repeat
        icon: mdi:chevron-down
      - type: touchpad
        name: touchpad
        tap_action:
          action: key
          key: DPAD_CENTER
        up:
          tap_action:
            action: perform-action
            perform_action: androidtv.adb_command
            data:
              command: UP
            target:
              entity_id: media_player.android_tv_192_168_1_216
          hold_action:
            action: repeat
          name: up
          type: button
        down:
          tap_action:
            action: perform-action
            perform_action: androidtv.adb_command
            data:
              command: DOWN
            target:
              entity_id: media_player.android_tv_192_168_1_216
          hold_action:
            action: repeat
          name: down
          type: button
        left:
          tap_action:
            action: perform-action
            perform_action: androidtv.adb_command
            data:
              command: LEFT
            target:
              entity_id: media_player.android_tv_192_168_1_216
          hold_action:
            action: repeat
          name: left
          type: button
        right:
          tap_action:
            action: perform-action
            perform_action: androidtv.adb_command
            data:
              command: RIGHT
            target:
              entity_id: media_player.android_tv_192_168_1_216
          hold_action:
            action: repeat
          name: right
          type: button
        styles: |-
          toucharea {
            background-image: url("/local/fingerprint.png");
            background-size: 150px;
            background-repeat: no-repeat;
            background-position: center;
            opacity: 0.5;
            box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.9);;
            height: 160px;
            width: 160px;
          }
        double_tap_action:
          action: key
          key: menu
    styles: |-
      remote-button {
        --size: 32px;
        color: grey;
        border-width: 3px;;
        box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.9);;
        border-radius: 50%;;
        backgound-color: black;;
        background-opacity: 50%;;
        padding: 8px;;
      }
    card_mod:
      style: |
        ha-card {
          margin-bottom: 20px;
        }
  - type: custom:android-tv-card
    remote_id: media_player.android_tv_192_168_1_216
    keyboard_id: media_player.android_tv_192_168_1_216
    media_player_id: media_player.android_tv_192_168_1_216
    rows:
      - - power
        - home
        - play_pause
        - menu
      - - navigation_buttons
      - - back
        - volume_down
        - volume_up
        - keyboard
    custom_actions:
      - type: button
        name: power
        tap_action:
          action: perform-action
          perform_action: androidtv.adb_command
          data:
            command: POWER
          target:
            entity_id: media_player.android_tv_192_168_1_216
        icon: mdi:power
      - type: button
        name: back
        tap_action:
          action: perform-action
          perform_action: androidtv.adb_command
          data:
            command: BACK
          target:
            entity_id: media_player.android_tv_192_168_1_216
        icon: mdi:keyboard-backspace
      - type: button
        name: home
        tap_action:
          action: perform-action
          perform_action: androidtv.adb_command
          data:
            command: HOME
          target:
            entity_id: media_player.android_tv_192_168_1_216
        icon: mdi:home
      - type: button
        name: menu
        tap_action:
          action: perform-action
          perform_action: androidtv.adb_command
          data:
            command: MENU
          target:
            entity_id: media_player.android_tv_192_168_1_216
        icon: mdi:menu
      - type: button
        name: up
        tap_action:
          action: perform-action
          perform_action: androidtv.adb_command
          data:
            command: UP
          target:
            entity_id: media_player.android_tv_192_168_1_216
        hold_action:
          action: repeat
        icon: mdi:chevron-up
      - type: button
        name: left
        tap_action:
          action: perform-action
          perform_action: androidtv.adb_command
          data:
            command: LEFT
          target:
            entity_id: media_player.android_tv_192_168_1_216
        hold_action:
          action: repeat
        icon: mdi:chevron-left
      - type: button
        name: center
        tap_action:
          action: perform-action
          perform_action: androidtv.adb_command
          data:
            command: ENTER
          target:
            entity_id: media_player.android_tv_192_168_1_216
        icon: mdi:arrow-expand-all
      - type: button
        name: right
        tap_action:
          action: perform-action
          perform_action: androidtv.adb_command
          data:
            command: RIGHT
          target:
            entity_id: media_player.android_tv_192_168_1_216
        hold_action:
          action: repeat
        icon: mdi:chevron-right
      - type: button
        name: down
        tap_action:
          action: perform-action
          perform_action: androidtv.adb_command
          data:
            command: DOWN
          target:
            entity_id: media_player.android_tv_192_168_1_216
        hold_action:
          action: repeat
        icon: mdi:chevron-down
    styles: |-
      remote-button {
        --size: 32px;
        color: grey;
        border-width: 3px;;
        box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.9);;
        border-radius: 50%;;
        backgound-color: black;;
        background-opacity: 50%;;
        padding: 8px;;
      }
    card_mod:
      style: |
        ha-card {
          margin-bottom: 20px;
        }

Same issue with the updated configs posted.  Layout buttons don't respond consistently.  In the 2nd vertical card, the volume buttons don't respond.  Going to try defining actions but it doesn't seem optimal.

I don't understand what you mean by "Layout buttons don't respond consistently".
It looks like you're using Android ADB / Fire TV instead of the Android TV remote API. You should set the global platform to Fire TV and delete the unneeded custom actions. The center command should be CENTER and according to this list, there are no separate commands for play, pause, or play_pause for Fire TV / ADB. Sending a play/pause/play_pause command to the ADB media player may work.
Were you previously on the v4 beta? I see what looks like some upgrade artifacts/mistakes from when I was still fixing the old config upgrade process in your config. Try this config:
type: custom:android-tv-card
remote_id: remote.android_tv_192_168_1_216
keyboard_id: remote.android_tv_192_168_1_216
media_player_id: media_player.android_tv_192_168_1_216
rows:
  - - power
    - home
    - play_pause
    - menu
  - - touchpad
  - - back
    - volume_down
    - volume_up
    - keyboard
custom_actions:
  - type: touchpad
    name: touchpad
    tap_action:
      action: key
      key: CENTER
    up:
      tap_action:
        action: perform-action
        perform_action: androidtv.adb_command
        data:
          command: UP
      hold_action:
        action: repeat
    down:
      tap_action:
        action: perform-action
        perform_action: androidtv.adb_command
        data:
          command: DOWN
      hold_action:
        action: repeat
    left:
      tap_action:
        action: perform-action
        perform_action: androidtv.adb_command
        data:
          command: LEFT
      hold_action:
        action: repeat
    right:
      tap_action:
        action: perform-action
        perform_action: androidtv.adb_command
        data:
          command: RIGHT
      hold_action:
        action: repeat
    styles: |-
      toucharea {
        background-image: url("/local/fingerprint.png");
        background-size: 150px;
        background-repeat: no-repeat;
        background-position: center;
        opacity: 0.5;
        box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.9);;
        height: 160px;
        width: 160px;
      }
  - type: button
    name: play_pause
    tap_action:
      action: perform-action
      perform_action: media_player.media_play_pause
      target: {}
    icon: mdi:play
    value_attribute: supported_features
styles: |-
  remote-button {
    --size: 32px;
    color: grey;
    border-width: 3px;;
    box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.9);;
    border-radius: 50%;;
    backgound-color: black;;
    background-opacity: 50%;;
    padding: 8px;;
  }
card_mod:
  style: |
    ha-card {
      margin-bottom: 20px;
    }

Works perfectly now. Caught off guard by how involved it is to setup now compared to pre 4.x versions. Thanks


Serial needed

Is this normal behaviour that serial connexion is needed ?

@lakshanthad  any idea?

Hello @svonfeltenDev,
Could you please tell me which hardware you are trying to use with this library?
Also, please explain more about your problem.
Thank you.

Hello, I use the xiao nrf52840 sense and when I disconnect the USB Cable from the Xiao values are freaking out. The same thing with the gyroscope on the board. Is it a material problem or from the code ?

Hello,
I am not sure why you are trying to disconnect the board. Once you disconnect, there will be no serial output.

I use the data to display LEDs colors and not to plot this on serial, there is no serial connected

我使用数据来显示 LED 颜色，而不是在串行上绘制它，没有串行连接

Could you provide some more detailed description of the issue?

Hello,
I'm going to close this issue, feel free to re-open it if you have any other questions.
[Autocommentary]


GetDependenciesAsync throws exception 200, with a json parsing issue.

Pretty much what the title says. I was able to fix this by changing Line 16 of Dependencies.cs from System.Version[] to Models.Version[], not sure if it was intentional for it to be system.version in the first place

Submitted pull request

Not intentional, thank you for the fix! I'll publish a new minor version to NuGet in a moment


Integrate the FreeBSD BuildBot

Gate Bors on the FreeBSD 11 build
Remove the testless FreeBSD build from Travis
Promote x86_64-unknown-freebsd to Tier 1

Fixes #603

This seems to only address x86_64 FreeBSD, do you have plans for i686? Or was #603 really just about x86_64?

After my one comment is resolved, this LGTM.

@Susurrus it would be pretty easy to add an x86 worker.  I'd like to do it, but I haven't gotten around to it yet.  It would also be totally awesome to have an arm64 worker, which will be possible as soon as Scaleway.com's ARM64 VPSes go live.  Right now they're just in preview mode.

Let's do this.
bors r+

Try again? BuildBot didn't build the merge commit (based on clicking the X and seeing fbsd11 not listed), but it built the newer commits done afterward (because fbsd11 is listed under the checkmark).

I noticed that.  I changed one thing in BuildBot's configuration, but I didn't expect it to solve this particular problem.  I guess we may as well try, try again.  The worst case is that BuildBot is intermittent.  If that happens, we'll have to degate Bors on it.
bors r+


Use cross to build linux artifact

By using cross, the build of the artifact will have a more stable ABI because the docker image has a well defined version of libraries that are defined, meaning that updates to "ubuntu-latest" won't impact the compatible version of the built binaries.
This change defines the "toolchain" for rust, meaning that new versions of rust won't automatically be picked up (unless changed to stable).
This also removes the action-rs uses, because they are deprecated and the github actions install rustup by default

Thank you!


Publish pageflow-scrolled storybook via Travis

The storybook generated via GitHub actions (#1392) is missing the seed data
file. Publish as part of Percy storybook job instead.
Use $TRAVIS_BRANCH as $PAGEFLOW_PAPERCLIP_S3_ROOT to make sure
storybook builds for version tags use their own set of files on
S3. Pull requests still use files based on the most recent master
build.
Run Percy job and publishing for all upstream branches and tags (not
just master) to keep a history of published storybooks.
We cannot use Travis gh-pages deploy strategy since it removes all
previously published files on deploy. We want to keep old versions,
though.
REDMINE-17369

Coverage remained the same at 99.204% when pulling 7f8033e5ecdfd86119c4b75260c5919221d7cb26 on tf:gh-travis into 37c79b4ccfd99d698eae1bd52c9b0aca9d220862 on codevise:master.


feat: use an allowlist for validating external commit proposals

This PR validates proposals included in an external commit by using an allowlist rather than a denylist as before. Proposals allowed in an external commit are : ExternalInit, Remove & PreSharedKey.
Note that I merged (and rephrased) ValSem242 & ValSem243 and also shifted the others ValSem[244..247]
Note: There are no tests to verify PSK proposals are supported (and their cardinality) since it is not supported by external commits. And I couldn't find any issue tracking this. Is this in draft-16 scope ? If not we should probably create an issue to track that down.
Fixes #878

Looks like the force push added some files again

Yes, sorry. Should stop with #1090

Looks like there have been changes again in the latest force push. I'll leave it to @kkohbrok to review again.


not supported inside vehicle

what's the reason why it doesn't support when the player is inside of any vehicle?
if(IsPlayerInAnyVehicle(playerid)) return true;

also i've noticed that when the player exits a vehicle the marker or the waze thing disappeared

This went unnoticed, it was a test that ended up remaining, the repository was updated removing this check.
Thanks for the report.

https://github.com/devbluen/WazeGPS-Samp/releases/tag/V.1404
Fix


Add file write mode option

Currently there is no ability to specify if we wish to keep, compress, or delete any existing log files.
A write mode option should be provided to the logger. This mode option should be a flag that lets the user do one of the follow based on what is passed in:

Overwrite the file if it exists
Compress an existing log file if one exists and make a new one
Append to a log file if one exists

Resolved as described


Implement Rascal and DSL syntax highlighting all via the semantic highlighting feature of the vscode lsp

This is to skip the (lossy and semi-manual) mapping of Rascal grammars to tm grammars completely. we can use UPTR parse trees to generate tagged token streams. Code examples can be found in the vi, emacs and eclipse bindings of the Meta-Environment.
Proposal: use tmGrammar standard tags as the @category names in Rascal grammars and Rascal parse tree annotators from now on. And back-port this behavior to the Eclipse plugin as well.

this is done. wiring it for new DSLs will be simple. The current support is language parametric through the UPTR parse tree format.


Generate Client Code is not working

Expected Behavior
Should be possible to generate a code with Generate Client Code dialog or via Copy as cUrl.
Actual Behavior
Generate Client Code dialog is not working - dropdowns are not working as well
Also Copy as cUrl is not working.
https://user-images.githubusercontent.com/179605/171406432-08eff024-8487-4984-a429-c28ced9b773e.mov
Reproduction Steps

Click Generate Code in the request menu
Try to click on dropdowns Shell or Wget

Is there an existing issue for this?

[X] I have searched the issue tracker for this problem.

Additional Information
Version: Insomnia 2022.3.0
Build date: 4/28/2022
OS: Darwin x64 21.4.0
Electron: 17.3.1
Node: 16.13.0
V8: <IP_ADDRESS>-electron.0
Architecture: x64
Insomnia Version
2022.3.0
What operating system are you using?
macOS
Operating System Version
macOS Monterey 12.3.1
Installation method
homebrew
Last Known Working Insomnia version
Not sure which version but it worked previously

Found the reason, one of variables was not defined - but it was not indicating it anywhere.
Need to display an error message.

Hi @relgames, thank you for reporting this! I was able to reproduce this as well.
Indeed this is a bug, we don't warn the user at the very least the same way we do when trying to send a request with an undefined variable.
This happens both for Generate Code and the Copy as Curl options. We are hiding the errors in both cases:

@relgames I would like to encourage you to report any other issues you may find in the meantime 👍

Hi all 👋
I am interested in working on this issue as my first contribution to the project. Is this still relevant? I'm eager to help out where I can.


graph update

Description
Update Libre Graph Api
Motivation and Context
Use the latest version of the spec
How Has This Been Tested?

CI

Types of changes

[ ] Bug fix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to change)
[x] Technical debt
[ ] Tests only (no source changes)

Checklist:

[x] Code changes
[ ] Unit tests added
[ ] Acceptance tests added
[ ] Documentation ticket raised:

@rhafer @butonic our user spec is different than the  spec from https://github.com/yaegashi/msgraph.go
He has a weird Object property.
@rhafer can you check if our spec  https://owncloud.dev/libre-graph-api/ is good, then i could refactor this.

Agree with @wkloucek , that downgrade has to be reverted.


Enable unmanaged-cluster providers to access logger

Feature Request
Currently, the unmanaged-cluster provider API has no way to bubble up log messages or warnings.
We should consider adding some kind of interface that the providers can interact with in order to bubble up important log messages.
Use cases:

One provider cannot implement multiple control planes, but others can. The provider that cannot use this feature should be able to log a warning to the user that the --control-plane-node-count configuration is being ignored.
A provider may want to log a warning about some "failure state" that does not require the deployment of the cluster to cease, but does require some user attention. For example; some resource in the cluster did not reconcile (like a provider specific namespace) but deploying tanzu bits can proceed

Describe alternatives you've considered
As our cluster providers get more and more granular, they may drift in the user and developer experience. The top level tanzu package cannot know about all edge cases or coordinate all possible scenerios between different cluster providers. The cluster package gives us alot of flexability to enable cluster providers to do what they will with certain configurations.
But there is no good way to surface those through the cluster providers into the logger. Right now, the tanzu package (where the logger is initialized and accessible), would need to introspect the provider, determine what special log message may need to be logged, and then log it.
Additional context
This has surfaced as part of #3674

It may be worth adding a context to the standard set of arguments we pass in to the provider interface. That would allow us to add things like timeouts if we need to. Then we could pass around things like the logger similar to https://github.com/kubernetes-sigs/cluster-api/blob/7069af2c806b440bcdc5ef50a9d25dd594db9bbc/internal/log/log.go#L38
Otherwise we could handle passing the logging instance in the calls where we instantiate a new provider.

I like that idea.
I've also considered the idea of adding string channels that the provider could push logs to. Then, the tanzu package could attempt to pop off messages from the channel in the wait loop and log them generically without having to pass in the logger itself.
It'd require a bit more async, parallel programming code, but could be a generic enough approach that doesn't bloat the provider APIs

I also realize that's why this part of the Manager interface is sort of weird:
https://github.com/vmware-tanzu/community-edition/blob/97ac483c2a4884be1c288871cf7059431c88232b/cli/cmd/plugin/unmanaged-cluster/cluster/cluster.go#L44-L46
It returns a slice of strings to be logged by the tanzu package. But we don't want to have one of these methods for every situation. So may be better to approach it more generically and consumable by both the provider and the tanzu package


tegra-common: set OLDEST_KERNEL so that glibc will restrict features

As of the nanbield release, OLDEST_KERNEL is set in meta.conf to version 5.15. This is newer than the version available to us for the tegra machines in the Jetpack 5 releases. As such, some components that use this variable (such as glibc) will be build assuming support for kernel features we don't have.
Override the OLDEST_KERNEL to 5.10, to match the linux-tegra kernel.

As for the particulars of why I did this, I noticed that some multithreaded applications would sporadically crash with the error The futex facility returned an unexpected error code. This was traced back to the use of a syscall that did not exist in 5.10: https://elixir.bootlin.com/glibc/glibc-2.38/source/nptl/futex-internal.c#L155 caused by the inappropriate setting of OLDEST_KERNEL at build time.
Also applicable for Nanbield

Unfortunately, we can't do this.  That's a distro-wide setting, not per-machine.
It might be possible to make it tegra-specific by also modifying the glibc build so it's tegra-specific (and setting tegra-specific PACKAGE_ARCH for all its packages)... that might have some cascading effects on the build, though, and we might have to, at that point, make all userland packages tegra-specific.
We could at least document this issue, and advise folks to set OLDEST_KERNEL to 5.10 in their distro configurations.

Yeah, changing the PACKAGE_ARCH of glibc does require anything that needs it to also share the same PACKAGE_ARCH:
EXTRA_OECONF:append:tegra = " --enable-kernel=5.10"
PACKAGE_ARCH:tegra = "${TEGRA_PKGARCH}"

This failed as soon as glibc-locale, and like you suspected that cascades.
In fact the build already contains a warning about this situation:
WARNING: linux-tegra-5.10.120+git-r0 do_configure: linux-tegra: OLDEST_KERNEL is "5.15" but the version of the kernel you are building is "5.10.120" - therefore glibc as built may not be compatible with this kernel. Either set OLDEST_KERNEL to an older version, or build a newer kernel.

I'm not sure how to move this forward. Having this global setting of OLDEST_KERNEL that will easily differ from what is available to machines, and can't be changed by machine layers, is quite a thorn.

I'm not sure how to move this forward short of adding some documentation and putting this in tegrademo.

I think that's about it, without getting possibly too clever.

Is there anything else we can do?

We could try setting TUNE_PKGARCH to ${TEGRA_PKGARCH} and OLDEST_KERNEL:tegra to 5.10 in tegra-common.inc.  I think that would do the right thing.  The drawback to that approach is that if you have a distro mixing tegras with other aarch64 targets, you'd end up building all the generic target packages twice - once for tegra and once for all the other aarch64 targets.
And I'm not sure how well that would play with some of the build-time stuff that runs under qemu.  Hopefully it wouldn't break that.

Thanks for the suggestion. I think this approach makes sense in general, and it is working for my image build.


Introduce SemVer 2.0.0 package filtering to NuGet.Server

NuGet.Core 2.14.0 introduced SemVer 2.0.0 support for packages. However, old clients don't know how to deal with packages with SemVer 2.0.0 versions. To solve this problem, the following design was introduced:
SemVer 2.0.0 Protocol
See https://github.com/NuGet/Home/issues/3610 for the tracking issue.
Essentially, this adds a SemVerLevel query string to OData package endpoints.
Bumping NuGet.Core version has already happened in dev. This change is just for master so that we can release SemVer 2.0.0 support without switching away from WCF (to Web API) just yet. dev has already switched to Web API so this will be an intermediate release.
One of the complications of filtering out SemVer 2.0.0 packages is what to do with IsLatest and IsAbsoluteLatest properties on OData packages. I resolved this complication by tracking two "views" of IsLatest and IsAbsoluteLatest: one for when SemVer 2.0.0 is filtered out, and one for when SemVer 2.0.0 is not filtered out.
Also, I introduced a schema version concept to the JSON cache file so that breaking changes (such as the one I did to handle the two views of IsLatest) result in a cache rebuild if the package consumer updates their package.
/cc @emgarten @maartenba @yishaigalatzer @skofman1

Hi @joelverhagen, I'm your friendly neighborhood .NET Foundation Pull Request Bot (You can call me DNFBOT). Thanks for your contribution!
You've already signed the contribution license agreement. Thanks!
The agreement was validated by .NET Foundation and real humans are currently evaluating your PR.
TTYL, DNFBOT;

"IsSemVer2" is not realy "IsSemVer2", it's more test to see if the version uses SemVer2 characteristics (1.2.3 is also SemVer2 in theory :-))
Other than that LGTM - when is the client shipping this?

"IsSemVer2" is not realy "IsSemVer2", it's more test to see if the version uses SemVer2 characteristics (1.2.3 is also SemVer2 in theory :-))
Other than that LGTM - when is the client shipping this?

"IsSemVer2" is not realy "IsSemVer2", it's more test to see if the version uses SemVer2 characteristics (1.2.3 is also SemVer2 in theory :-))

That's an good point to make. I agree the property is a little confusing, but the alternative is either IsNotSemVer1 (which breaks down if/when SemVer 3.0 comes out) or HasSemVer2Characteristics, which is more accurate but I questionably more helpful.

Other than that LGTM - when is the client shipping this?

I'm going to talk to @rrelyea and @emgarten about this but I was thinking a 3.5.1 release, if possible and in 4.0.0 RTM.

Any spec? (looked at code and seems the SemVer level query string is now a version itself?)


Parkinson's Disease Prediction Model Using Machine Learning

💥 Proposal
This model is designed to build a system that can predict whether a person has Parkinson's disease or not with the help of Machine Learning. I will use Support Vector Machine(SVM) model for the prediction. I would like to contribute to this project as a part of @GSSOC'23.
Please assign the task to me. Thank you.

In order to identify the early onset of Parkinson's disease it is necessary to build a model with excellent accuracy hence to achieve this I will be using the XGBoost algorithm.
Being a GSSOC contributor I wish to contribute to this project.
Could you assign it to me

In order to identify the early onset of Parkinson's disease it is necessary to build a model with excellent accuracy hence to achieve this I will be using the XGBoost algorithm. Being a GSSOC contributor I wish to contribute to this project. Could you assign it to me

Hi Ritika,
I have raised the issue for myself for GSSOC 23'. Kindly raise an issue for yourself related to another topic or Issue. Thank You

@tushtithakur - you can go ahead! We are assigning you 21 days for this project, after which it will be assigned to someone else if not completed. All the best!
Name the file as: algorithm_dataset.ipynb and link it in the readme of the labeled directory as algorithm - dataset.
@ritikalath30 - since we are following the first-come-first-serve policy, we will not be able to assign you this issue. However, you can create another issue with the different model that you will be using.

Thanks @khusheekapoor

Hi @khusheekapoor
I have opened a pull request.
Kindly merge if everything is fine with my project and give me the GSSOC'23 tag
Thank you.


Nuxt.js Universal / SSR example

Please could you create (or modify the existing) a Nuxt.js example that supports universal mode with SSR.
Thanks

There is no official Nuxt.js builder but there is a Community builder here:
https://github.com/nuxt/now-builder


Update Import-CsUserData.md

Based on tests and feedbacks shared by our customers, if we restart FE servers one by one after this Import-CsUserData cmdlet, the changes may not happen in the environment. It is because the active FE servers which haven't been restarted yet with legacy data may overwrite the new data we imported in backend SQL and other FE severs restarted already with the new data.
Customer would like to have official document regarding this procedure, currently there is no document from Microsoft explaining this yet. Update this cmdlet article with this information accordingly.

Docs Build status updates of commit 8b8b2ef:
:clock10: Full build: the average full build time is 11 min(s) 53 sec(s), this is based on the last 856 build(s) for this repository.

Docs Build status updates of commit 8b8b2ef:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

skype/skype-ps/skype/Import-CsUserData.md
:white_check_mark:Succeeded
View (skype-ps)

For more details, please refer to the build report.
Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.

Docs Build status updates of commit 2bf86eb:
:clock10: Full build: the average full build time is 11 min(s) 53 sec(s), this is based on the last 858 build(s) for this repository.

Docs Build status updates of commit 2bf86eb:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

skype/skype-ps/skype/Import-CsUserData.md
:white_check_mark:Succeeded
View (skype-ps)

For more details, please refer to the build report.
Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.


New package: NKFtool v0.2.4

Registering package: NKFtool
Repository: https://github.com/hsugawa8651/NKFtool.jl
Created by: @hsugawa8651
Version: v0.2.4
Commit: f1e522e67f8ff086cdeecade4a538642db3c1107
Git reference: master

Close PR, please

Close PR, please.

Thanks.
Resolved in #11091


Fix: Enable save button on Importer Form

@ErezBiren I think your PR here includes the code for #427

@baruchiro -  Oops, you are right ... I accidentally added the google sheets  export code

@brafdlog - Sorry for the premature code,
The google sheet code was added unintentionally.


go-modules/packages: Run unit tests under subdirs

Bug Fix:

Due to the way buildGoDir function was repurposed to also run go test, if checkFlags was defined, go test was ran only at the top
level directory.

Only the first element of checkFlags array would get passed to the
go test command as arguments.

Now the first parameter to buildGoDir is handled as the command.
If the command is "test" checkFlags get passed as arguments along
with other build flags like ldflags, tags, etc.

Readability:

Iteratively build a flag array in buildGoDir instead of single long
variable expansion command line.
Bash style: Single line local assignment of positional parameters.

Fix broken packages with newly enabled tests:

kompose: tests require git
gitbatch: test require git & a writable HOME. disable tests requiring
non-localhost networking.
delve: tests require source to be a git repo. fix fortify issues with
cgo.
go-mtpfs: disable tests requiring an android devices connected over
USB.
mmake: disable test. almost all require non-localhost networking.
skeema: tests require coreutils and substitutions. disable tests
requiring non-localhost networking
gucci: disable integrations tests.

Description of changes

Things done

Built on platform(s)

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

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

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

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

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module
[ ] (Release notes changes) Ran nixos/doc/manual/md-to-db.sh to update generated release notes

[x] Fits CONTRIBUTING.md.

Continuation of #171177.
Fixes the test breakages unearthed by the subdirectory fix.
@NixOS/nixos-release-managers: Should build fixes be split into to per-package commits or should they stay as part of this a single commit?

Great work.

Since checkFlags never works, why not use testFlags instead?

Since checkFlags never works, why not use testFlags instead?

Well, this change fixes checkFlags.

I belive most of these checkFlags are added by me. Sorry about that.
The following packages also need to fix:

kube-router
temporal
goconvey
mysqld_exporter
docker-credential-gcr
cloud-sql-proxy

I would like to help to fix it.

You may opt for dropping checkFlags = [ "-short" ]; from these in the master and re-enable tests for their subdirectories. I'm fairly certain they won't break, otherwise it'd be caught by the previous staging-next Hydra run.

The question about whether multiple commits are required is something I cannot really answer because it's not related to the release process.
While I think it's mergable as-is, multiple commits would be cleaner if you want to go the extra steps

@ofborg eval

@ofborg build kompose

Note to committer: Do not squash.

@zowoq may I get your review? In the previous iteration of this, you provided valuable comments. I think this PR addresses all package breakage due to this change. We're out of ZHF, so maybe we can try this in staging?

Looks like an eval error?
% nix-review pr 173702
$ git -c fetch.prune=false fetch --no-tags --force https://github.com/NixOS/nixpkgs staging:refs/nixpkgs-review/0 pull/173702/head:refs/nixpkgs-review/1
remote: Enumerating objects: 37310, done.
remote: Counting objects: 100% (11221/11221), done.
remote: Compressing objects: 100% (37/37), done.
remote: Total 37310 (delta 11196), reused 11188 (delta 11184), pack-reused 26089
Receiving objects: 100% (37310/37310), 59.45 MiB | 24.67 MiB/s, done.
Resolving deltas: 100% (25850/25850), completed with 2706 local objects.
From https://github.com/NixOS/nixpkgs
   7f5523d1333..6905fbbcef2  staging               -> refs/nixpkgs-review/0
 + 90e3c08600e...9d09650cef6 refs/pull/173702/head -> refs/nixpkgs-review/1  (forced update)
$ git worktree add /home/joerg/.cache/nixpkgs-review/pr-173702/nixpkgs 6905fbbcef2f0b123d55a73de83bc4d594c41834
Preparing worktree (detached HEAD 6905fbbcef2)
Updating files: 100% (30856/30856), done.
HEAD is now at 6905fbbcef2 Merge staging-next into staging
$ git merge --no-commit --no-ff 9d09650cef6cf183500d3e4c8ae0356fa0e878e4
Auto-merging pkgs/development/go-modules/generic/default.nix
Auto-merging pkgs/development/tools/delve/default.nix
Auto-merging pkgs/tools/system/skeema/default.nix
Automatic merge went well; stopped before committing as requested
error: Function called without required argument "testVersion" at /home/joerg/.cache/nixpkgs-review/pr-173702/nixpkgs/pkgs/development/tools/jira-cli-go/default.nix:1
(use '--show-trace' to show detailed location information)
nix --experimental-features nix-command --system x86_64-linux eval --json --impure --expr (import /nix/store/p8yz74kbcp1nprrcmxkd2qaczr7givwn-nixpkgs-review-2.7.0/lib/python3.9/site-packages/nixpkgs_review/nix/evalAttrs.nix { allowAliases = false; attr-json = /tmp/tmpdj2jfqm8; }) failed to run, /tmp/tmpdj2jfqm8 was stored inspection
https://github.com/NixOS/nixpkgs/pull/173702 failed to build
$ git worktree prune
nix-review pr 173702  15,41s user 7,21s system 42% cpu 53,838 total

@ofborg eval

Looks like an eval error?
[...]
error: Function called without required argument "testVersion" at /home/joerg/.cache/nixpkgs-review/pr-173702/nixpkgs/pkgs/development/tools/jira-cli-go/default.nix:1
[...]

I'm confused. This PR neither touches the failing package nor anything that'd affect the evaluation of testVersion which is an alias for testers.testVersion as defined in toplevel/aliases.nix.
My caveman test doesn't catch an eval failures:
% git reset --hard upstream/staging
HEAD is now at fe5d77ff39b liburing: 2.1 -> 2.2
% curl -LSsf https://patch-diff.githubusercontent.com/raw/NixOS/nixpkgs/pull/173702.patch | git am
Applying: go-modules/packages: Run unit tests under subdirs
Applying: gucci: Disable integration tests.
Applying: skeema: Disable tests requiring network & fix deps
Applying: mmake: Disable non-localhost network access tests
Applying: delve: Fix tests on Linux, disable tests on Darwin
Applying: go-mtpfs: Disable tests req'ing USB attached devs
Applying: gitbatch: Fix tests requiring .git & writable HOME
Applying: kompose: Fix test dependencies
% nix eval .#jira-cli-go.name
"jira-cli-go-0.3.0"

@ofborg build

@Mic92 thanks to @vcunat I think the problem nixpkgs-review hits this eval issue is because it's disabling allowAliases option. ...but as I said above, this PR doesn't touch any packages relying on aliases.
BTW, I also filed #179226 to remove use of testVersion from master.

I could not test all packages because of broken dependencies:
@ofborg build reproxy
@ofborg build s5cmd
@ofborg build shopify-themekit
@ofborg build toxiproxy
@ofborg build victoriametrics


BUG reports

Dear developers of Moquette,
We are a security research group from HUST China, IU USA, and NKU China. Recently we studied the MQTT service in Moquette of the latest version (https://github.com/moquette-io/moquette/commit/3e6043be04b915879804f2740bd7d500331e2f24) and discovered some security flaws that would lead to unauthorized access to the victim clients (e.g., IoT devices) in Moquette. We elaborate on these problems with the practical threat models as follows.
Threat model
Consider a practical scenario where the Moquette is used to manage multiple IoT devices and applications. An attacker (a.k.a., a malicious user)  registered as a regular user in the system and aims to control devices (e.g., a smart door) that are not belonging to him or are authorized to him.
For example, the attacker “user1” attempts to steal messages from or send commands to the device that belongs to the admin with username “admin” (see below configuration).
# moquette.conf
#*********************************************************************
# The interface to bind the server
#  <IP_ADDRESS> means "any"
#*********************************************************************
host <IP_ADDRESS>

#*********************************************************************
# The file for the persistent store, if not specified, use just memory
# no physical persistence
#*********************************************************************
#persistent_store ./moquette_store.h2

#*********************************************************************
# acl_file:
#    defines the path to the ACL file relative to moquette home dir
#    contained in the moquette.path system property
#*********************************************************************
acl_file config/acl.conf

#*********************************************************************
# allow_anonymous is used to accept MQTT connections also from not
# authenticated clients.
#   - false to accept ONLY client connetions with credentials.
#   - true to accept client connection without credentails, validating
#       only against the password_file, the ones that provides.
#*********************************************************************
allow_anonymous false

#*********************************************************************
# password_file:
#    defines the path to the file that contains the credentials for
#    authenticated client connection. It's relative to moquette home dir
#    defined by the system property moquette.path
#*********************************************************************
password_file config/password_file.conf

# acl.conf
user admin
topic readwrite /topic/test

# password_file.conf
#*********************************************
# Each line define a user login in the format
#   <username>:sha256(<password>)
#*********************************************
#NB this password is sha256(passwd)
# admin:pass
admin:d74ff0ee8da3b9806b18c877dbf29bbde50b5bd8e4dad7a3a725000feb82e8f1
# user1:pass1
user1:e6c3da5b206634d7f3f3586d747ffdb36b5c675757b380c6a5fe5c570c71434

Problem 1: Unauthorized Will message
In Moquette 1.5, any user with correct Credentials can connect to the broker with a malicious Will message in the packet. And the broker simply accepts the request without checking what topic is contained in the Will message and without checking whether the user is authorized to access the topic in the Will message. Consequently, a malicious user can send CONNECT requests to the broker containing a malicious Will message, which will be delivered to the victims (e.g., a smart lock belonging to another victim user)  who subscribes to the topic in the Will message whenever the attacker disconnects himself.
That is, an unauthorized attacker can choose when (e.g. when he disconnects himself) to control which device (e.g., as long as the attacker knows the corresponding topic, which normally is not difficult) at his wishes.
PoC attack of Problem 1
Consider a more practice scenario:
After checking in, the malicious guest has no permissions on topic "A".

The guest connects to the broker with a will message (topic="A", payload="bad will").

The guest stays connected.

The guest can trigger its will message by closing the network or other operations, and then the will message will be delivered to the victim devices who subscribe to the topic “A”.

Possible Defense to Problem 1: add permission check when accepting the Will messages
Before accepting the Will message, the broker should verify whether the user is authorized to access the topic.
Problem 2: Session Takeover
If a new session connects to the broker with the same clientID as an existing session, the broker would close the existing session. This is called “Session taken over” in MQTT specification [MQTT-3.1.4-3]. However, in the Moquette, unauthorized operations can be performed by utilizing this processing due to the lack of permission checks which can cause some harmful effects to the victim devices/applications.
We summarize the possible attacks as follows:

The malicious user can trigger the Will message of the existing session by "Session taken over". Although the malicious user cannot control the content of the Will message, he can choose the timing of triggering the Will message. By the way, the malicious user does not need to have permission to send the will message.

DoS attack, kicking the victim with the same clientID offline

Possible Defense to Problem 2
A possible fix to problem 2 is to add permission checks when accepting the new session, such as checking whether the user in the new session is authorized to PUBLISH and SUBSCRIBE to certain topics.
Regards,
Bin

@andsel curious about whether this has been evaluated and confirmed as a real bug, and if so when it will be or has been fixed.

Hi @Bas83
I just read it. I  haven't tried the POC but Will topic is not evaluated for access, so the problem 1 is still present. The problem 2 is intrinsic of MQTT protocol, as explained and Moquette, as of version0.16 doesn't have any counter measure implemented.

@andsel Yeah that problem 2 is just MQTT makes sense to me, we have our own permissions checks in the IAuthenticator interface implementation to avoid this.

Hi @Bas83 nice! May I ask you how do you use Moquette?

@andsel sure, but maybe not in this bug report?

Great, if you can read my personal email address, write there.
On Wed, Feb 1, 2023 at 8:15 AM Bas83 @.***> wrote:

@andsel https://github.com/andsel sure, but maybe not in this bug
report?
—
Reply to this email directly, view it on GitHub
https://github.com/moquette-io/moquette/issues/689#issuecomment-1411571566,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAH5RUNKG5YZIXBLJXUIHTLWVIESVANCNFSM6AAAAAARYYEGEI
.
You are receiving this because you were mentioned.Message ID:
@.***>

@andsel if your github commit email address is correct, you should have an email now


Languages and technology discussion

Before we can start we need to make some decisions on which languages and which technology we want to use.
Front-end
I believe since we have a lot of people just learning HTML/CSS/JS we should stick to these technologies. For version 2.0 we could introduce a framework/library in the future.
Back-end
Is a little bit tougher, I have no idea what people are learning or interested in. I personally have at least some experience with a lot of the popular languages but no real preference. I believe the languages new developers come across the most, are PHP and NodeJS (JS), if we limit it to these two languages my vote is for NodeJS, not because I think it is better, but because I have more experience with it and I don’t know how much time I have to look into the “harder” requirements for this project. The backend may also be harder, because doing more than the basic stuff without using the ecosystem is unnecessarily hard, therefore there is an additional start difficulty of setting up and understanding the ecosystem/tools.
Data Store
The primary question is if we want to use a SQL (PostgreSQL, MySQL,...) or NoSQL (e.g. document store like MongoDB) data store. I personally worked with both, but lately, I am back on the SQL train. I will support the choice of the majority. There are arguments for both sides, but I believe it mainly comes down to what the majority wants to learn/work with.
Architecture
There are certainly some architectural decisions that make it a lot easier to work in teams. My question is, should more experienced developers provide tools and a ruleset on how to structure an app or are we going to figure it out together?

I use MeteorJS a lot, which is using the Node Stack with MongoDB. I think it's really good for beginners as it has everything you need to dev in one package with an awesome community built around it.
It makes it really easy to prototype and deploy live apps!
However it has some drawbacks, mainly being that its way of doing things aren't like traditional stacks, so it doesn't really teach you best practices in a 'real' full stack environments.
A secoond problem is that is uses the Blaze contemplating language (which is great) which only works in Meteor. ( however it is based on mustache templates )

Don't have much to add but would like to add my vote for Node and PostgreSQL

As far as general language suggestions, i'd swing for Node.js + MongoDB. I know the generals of MySQL personally, but I feel like MongoDB is much easier to pickup and get started with compared to MySQL. Additionally, For the reasons of more potential devpower from everyone knowing the basics of javasript, Node.js for the backend seems like a good choice.
My ideology on tooling for the most part consists of, if the tool fits the job then there's no reason not to use it. If theres a technology choice that makes sense for the project, and more senior devs have experience with it i absolutely feel as though it should be utilized for the project. It would do a good job better simulating a realworld scenario, and learning how things actually happen is just as valuable a learning component as learning learning fundamentals.
The caveat here being that if we do choose to use technology, we should provide good links in the documentation for contributing so that it's easier for those unfamiliar with the tools to get started learning the concepts associated with the tools.

@finchMFG I haven't used Meteor myself, but I know off it. If I remember correctly, it supports other front-end technology than Blaze (React, Angular). Anyway, I think your first drawback disqualifies it for the first project. I think it is a very good framework for getting shit done fast, but if your main objective is to learn the "basics" it's the wrong tool.
@Tor020 I agree that relational databases and SQL are pretty big subjects, which we can certainly do without at the beginning. Anyhow, I still believe almost everyone should learn about RDBs and SQL at some point in there learning process or career.
I believe we should keep tooling to a minimum, without rewriting every library out there. It basically comes down to "Does the expertise of knowing the library outway your ability to write that library on your own". I am currently working on some front-end helpers to make separation easier, but I have the feeling I am essentially writing parts of React, Vue or Angular.

Yeah I agree with you about databases.
I tend to think about learning / understanding frameworks in two pieces. One part of it is to know conceptually what it is the framework is doing. Another is to know what that tool/framework makes possible or makes easier. After those two things are well understood the rest of the logic behind the tool has diminished returns in terms of value from understanding versus time spent recreating all the moving bits behind the scenes. The problem solving ability that comes with being any type of programmer should allow people to take it down the logical path if they need to in the future.
As an example, for React

React is a JavaScript library that aims to help us write user interface(UI) code. React’s fundamental building block is the Component which, in its simplest form, is a JavaScript function that generates UI code (usually HTML). The generated UI code is then rendered by the device. A Component represents a small portion of the UI. Many Components are used together, or composed, to create entire views or applications. React Components can receive data that is used to generate the UI code. Whenever a Component’s data changes, it will automatically regenerate the UI code.  source

Understanding a concept like that I feel is the most significant part of learning a framework, not because you actually know literally what the javascript is doing behind the scenes, but because that gives enough information to rebuild that functionality by figuring out how to break that down into smaller pieces. That does make several assumptions about the developer working on the problem however.
Either way, that's just my take on it though, I'll support your decision here.

We will start with NodeJS and mongo on the back end. I will add around 20 issues today for people to work on and set up the back end.
For people who want to read up on libraries we use on the back-end
ExpressJS (http://expressjs.com/) - A library to write REST APIs
MongooseJS (http://mongoosejs.com/) - Is ODM (Object Document Wrapper) which allows you to work with simple Javascript objects and store them into the datastore.
For the most part, there will be example code for this library in the project (for express there already is) and it will be mostly configured already.

What do you think about using ES6 Javascript? I generally prefer using const, let, arrow function etc. Latest NodeJS supports these features at least for the back-end but it also be added for front-end with babel transpiler.

Personally, I use transpilers and other tools for all of my projects, but here we deliberately made the decision to use just the basic technology supported by the browser. This should allow everyone, even if they are just learning HTML/CSS/JS to contribute.
In the future, either in a later version of this project or a new one, we will introduce new tech and transpilers are certainly one of the first.


Removing support for Google MySQL 5.1.

@enisoc

LGTM. This might be a good time to fix the defaults in bootstrap/dev.env. If MYSQL_FLAVOR is unset or empty, we can default to MariaDB. But we should emit an error if it is an unknown flavor (like we already do in Python).

Great idea, did just that, looks much better. PTAL.

LGTM


python310Packages.ttp: use ttp-templates from modules

Description of changes
Should allow to update ttp-templates during the regular Python updates.

Things done

Built on platform(s)

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

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

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

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

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module
[ ] (Release notes changes) Ran nixos/doc/manual/md-to-db.sh to update generated release notes

[x] Fits CONTRIBUTING.md.

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

2 packages marked as broken and skipped:

python310Packages.pytest-ansible
python39Packages.pytest-ansible

18 packages built:

ansible
ansible-lint (python39Packages.ansible-lint)
ansible_2_13 (python39Packages.ansible-core)
kargo
python310Packages.ansible
python310Packages.ansible-compat
python310Packages.ansible-core
python310Packages.ansible-kernel
python310Packages.ansible-lint
python310Packages.ansible-runner
python310Packages.ttp
python310Packages.ttp-templates
python39Packages.ansible
python39Packages.ansible-compat
python39Packages.ansible-kernel
python39Packages.ansible-runner
ttp (python39Packages.ttp)
python39Packages.ttp-templates


[DOCS] Documentation Request: How to Create Custom Microservices in Isle-dc

There does not appear to be an existing page on how to create custom microservices for dockerized version of Islandora in the current documentation. A new page will need to be created for this content.

If applicable, link to the documentation page relevant to your issue below.
N/A

If this is a request for new documentation, where in the existing documentation does this documentation belong?
This documentation would belong under the ISLE-dc Setup and Maintenance section or a new dedicated section for Custom Microservices.

Describe your documentation request.
There is a need for detailed documentation on how to create custom microservices for Isle-dc. The requested documentation should include:

Prerequisites for development (tools, libraries, basic knowledge).
Steps for creating and configuring a new microservice.
How to setup and utilize the /etc/confd/templates/ file.
Integration with Isle-dc's Docker Compose setup.
Guidelines for testing and deploying the microservice.
Example configuration and templates for a basic custom service.
Troubleshooting tips and common issues.

The documentation should aim to empower developers to extend Isle-dc’s functionality, covering examples like creating alternatives or extensions to services like Cantaloupe (IIIF) or Crayfits (FITS).

Which version of Islandora are you using?
Islandora 2.x with the latest ISLE-dc deployment.

What user roles is this documentation intended for?

Developers
Systems Administrators

What implementations of Islandora does this documentation request apply to?
ISLE-dc deployments of Islandora.

Any related open or closed issues to this bug report?
N/A
Screenshots:
N/A

Possibly an option but I think it would be nice to have a bare bones documentation. https://github.com/lehigh-university-libraries/scyllaridae

@DonRichards I will work on getting the documentation fleshed out. To date I've just been relying on examples but agree step by step would be useful here


No removeRowText on matrixdynamic

There is a setting named "addRowText" on a matrixdynamic question, but there is no corresponding "removeRowText".

I have added the property.
Thank you,
Andrew

After a "git pull" and rebuild from source, this works! Thank you, Andrew!


SpringRoll Seed Template Project Links Broken?

When I click on the links for "PIXI", "Phaser 3", and "CreateJS" in the "Seed Project" section of the README, I get taken to the same Springroll-Seed repo as if I had just clicked on the "Seed Project" link. Are there separate repositories for the PIXI, Phaser 3, and CreateJS template projects?

Closing this as a duplicate of #218


Use windows unicode paths to get around windows 260 char path limit.

libtorch fails to extract on Windows when the project is near the 260 char windows path limit, this adds a windows check and adjusts the path. Secondly, this normalizes paths using to_verbatim, normalizing paths should fix any issues while using a custom CARGO_TARGET_DIR on Windows. This PR still needs some work.

Accidentally closed this. Anyhow while this does fix the extraction issues on windows by using the long unicode paths, it reveals a new issue. MSVC's compiler driver cl.exe fails to find certain include headers when building, which coincidentally are longer than 260 characters on my windows file system. I'm not sure if there's a flag that could be passed through cc that could fix this, might be an unresolved cl issue.
I'm currently working with a much older commit (0.3.1), I've made changes that provide linux function fallbacks without looking as bad as this PR with the cfg macros. Most likely will forward port later when I've resolved the cl issues.


Add-on reviewer tool tips

The page-ranges should have a tool-tip which shows the reviewers' names.

First cut in the tooltips branch.


404 reference to http://pivotal.github.io/jasmine/

In the github.io / readme page, There is a reference to URL http://pivotal.github.io/jasmine/
in "The test runner used is Jasmine with a customized report viewer."
Should that link be http://jasmine.github.io/?

@wilsonmar: You're correct. I just updated the URL. Also, sorry for the delay.


Code Folding shortcuts : Sponsor features

is it possible to create a shortcut to folder all code up to some level ?
Stackoverflow:
https://stackoverflow.com/questions/59943300/keyboard-shortcut-for-code-folding-in-spyder
2018 open issue:
https://github.com/spyder-ide/spyder/issues/6810
https://github.com/spyder-ide/spyder/issues/2430
Honestly, am willing to sponsor and pay for this features.
thanks.
Sponsor Features would be good,
since it incentivies new developpers to do PR
and users willing to support the project....( = saving time)

Hey @pprokevin, thanks for reporting. You said:

is it possible to create a shortcut to folder all code up to some level ?

Yes, it should be possible. Unfortunately, we haven't had time to implement that improvement due to lack of resources.

Honestly, am willing to sponsor and pay for this features.
thanks.

That's very generous, thanks! Please contact me via email (my email is in my profile) to talk about it.

Sponsor Features would be good,
since it incentivies new developpers to do PR
and users willing to support the project....( = saving time)

Yeah, right now we're discussing what would be the best way for users to sponsor certain features in the project. Hopefully, we'll have something in place before the end of the year.

Let me know if that answers all your questions/comments or if you need something else.

For Paid Features Benefits are :
Incentive new developers (ie student,...) to learn / contribute Spyder codebase.
Also, helps fixing issues as side effects as active developper grows/maintained.

Right, that's a good point.

On the github issues, add ["Sponsored Feature"]
and potential add the sponsors total amount or else in the ticket.

Thanks for the suggestion. We're thinking to do something similar, but we don't plan to use Github for this because we don't think it's the right place for it.

When the amount budget is reached (or before), developper can do PR
and retributed back when the PR is merged (ie not sure how Spyder can retribute back...)

There are different platforms for this, like Open Collective and Github Sponsors.

Am pretty sure for Code Folding Shortcut, more than 10 person can sponsor 10 USD each....

I'm sorry but you're underestimating what's needed for this. USD $100 don't cover even a month of salary for a student in a third-world country. But more than that, for our relationship with students to be really fruitful, we prefer to work with them for three or four months. That way we can train them in how Spyder works, assign them certain tasks and oversee their progress so that we can help them if they are blocked.
I'm not saying that implementing this shortcut would require four months. But we could improve several other shortcomings related to folding in that time. That way, the student involvement with Spyder would be really helpful and we could possibly count on them in the future too. In short, we'd need USD $2500 to hire a student in South America to work part time on improving folding for four months.
I think giving small bounties for features, as you suggest, would be detrimental for us maintainers because we'd probably receive many PRs for the same thing, which we'd need to evaluate and then maintain the contributed code afterwards.

If you/your team are ok, we can start with this issue (ie Code Folding shortcut),
refining the behavior specs.

Sorry, I'm not ok with your suggestion, so we're not going to proceed with it.

Since this issue was already reported (as you found out), I'm going to close it because I don't think there's much else to discuss about it.

For PR process, I suggest a more stricter process

I understand your point. But what we don't want to do (because it wouldn't work well for us) is to open up the possibility for any developer to contribute to Spyder and get rewarded for it. Instead, we want to hire and train junior developers that can stay with us for extended periods of time (three to six months, or even more). That would be a more productive way to invest their time for the core developer team.

My view if the user base is big enough, a big amount of small paid contribution
on selected features can be positive impact

Yeah, that's our idea too. We're working with another organization to create a kind of Kickstarter website where people can sponsor the features they'd like to see in Spyder, instead of giving a general donation to it. Once the minimal amount we require for a specific feature is reached, we'd start to work on it.


Allow replacing default components with dependencies

Is your feature request related to a problem? Please describe.
Kepler.gl currently provides a really nice dependency injection, simple default components can be replaced with no issues (e.g. PanelHeaderFactory component like in the example).
However, when I tried to replace a more complex default component, e.g. SidePanel, which has dependencies, things get for complicated.
If I also specified the dependencies in the new component as well (e.g. through PanelHeaderFactory.deps = [...]) , I'll get the following error:
<Some dependency> is required as a dependency of <Some parent component>,
but is not provided to injectComponents. It will not be rendered

And sure enough, I tried to add <Some dependency> to injectComponents method as well and got the same error.
It's not quite clear to me how to replace those components properly, I ended up reconstructed all the dependencies and embedded them in the new component so it requires no dependency but it's quit hacky.
Often times, developers might want to replace only the parent component and specify the same dependencies (or less) as the default component.
Describe the solution you'd like

If a dependency is a default component, it should be automatically discovered and injected.
If a dependency is not a default component, there should be a way to inject the new factory that required.

Describe alternatives you've considered
Maybe there is a better way to do this which is not documented. If so, please treat this a documentation request.

@khwj which version of kepler are you on? component injector should automatically looke for factory.deps and add them to injectComponents

Thanks @heshan0131 . I upgrade from v0.2.1-beta-1 to v0.2.1.

https://github.com/uber/kepler.gl/pull/430
This should address the issue