Add/Delete shopping list items with assistant

I would like to start using the shopping list with Assistant. My idea is to add or delete items via voice, so when I'm on the supermarket, I can check the shopping list.
I've readed the documentation regarding the Assistant, but I cannot see how can I use variables in order to say for example:

Add eggs to the shopping list (or just "add eggs")

Is there any way to do it?

Adding items to shopping lists was done in #1466 and will be available in HA 2023.8
Deleting items through voice is a little risky, I think. If the STT engine misunderstands you, you might end up with some items you didn't want removed.
Completing items from a shopping list will be assessed later on.

Adding items to shopping lists was done in #1466 and will be available in HA 2023.8
That's great!

Deleting items through voice is a little risky, I think. If the STT engine misunderstands you, you might end up with some items you didn't want removed.
I'm using right now alexa and its shopping list, and it works great deleting items, even when you have duplicate items, it deletes just the newer one, not all occurrences.

Completing items from a shopping list will be assessed later on.
That will be great, as well.

Thank you.

Deleting items through voice is a little risky, I think. If the STT engine misunderstands you, you might end up with some items you didn't want removed.

FYI: I've just deleted via voice an item from alexa, and it does NOT delete de item, it just mark as checked.


Example

Hello,
I'm a bit lost and I wonder if a basic usage example could be added to the README?
Maybe showing a simple  RDF  file for the first step, then the program using wbsync to convert the RDF to wikibase, then the result into wikibase, maybe with a screenshot showing the few generated Property/Item.
Thanks a lot for the good work.

Hi @kerphi! Thanks for your comment.
There is README with an example in  wbsync and in rdfsync.
I´m afraid there is not any screenshot of the results yet but hopefully, there will be soon.
If you need any help, please let us know :)

Thanks for your quick answer.
The example in https://github.com/weso/wikibase-sync/tree/master/wbsync is
a bit strange for me. I don't understand the source_content and target_content
idea?
Moreover maybe putting a real RDF could help more because "original rdf
content goes here" don't help to understand.
However i'not a RDF and wikibase expert so it's also hard for me to get the
big picture.
And maybe you know ? But this link to the notebook is a 404:
Additional examples about synchronizing RDF files with a Wikibase instance
can be seen in the Synchronization notebook
https://github.com/weso/wikibase-sync/blob/master/wbsync/notebooks/Synchronization.ipynb
.
Le sam. 17 avr. 2021 à 11:41, Pablo Menéndez ◔_◔ @.***>
a écrit :

Hi @kerphi https://github.com/kerphi! Thanks for your comment.
There is README with an example in wbsync
https://github.com/weso/wikibase-sync/tree/master/wbsync and in rdfsync
https://github.com/weso/wikibase-sync/tree/master/rdfsync.
I´m afraid there is not any screenshot of the results yet but hopefully,
there will be soon.
If you need any help, please let us know :)
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/weso/wikibase-sync/issues/10#issuecomment-821797154,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AACQENFEU5AHIXLGSXZNKP3TJFJTZANCNFSM43C4ICWA
.

wbsync receives the RDF data before and after the modifications. For example, if you want to synchronize for the first time a
RDF file with a wikibase instance the source_content must be empty (because it´s the first time) and the target_content must be the content of the file.  After setting that, wbsync calculates the differences between the original_content and the target_content in order to know which operations are needed to make the wikibase instance consistent with the RFD file.

Ok thanks a lot. That is more clear.
One more question: should the RDF respect a specific model to match wikibase model? Or is it possible to import any RDF then a specific mapping is maybe needed?

Mmmm I´m not sure at all but I think wbsync deals with the mappings between the RDF and the Wikibase, so you don´t need to look for it.
Maybe @alejgh knows more about it

There is also https://github.com/HerculesCRUE/ib-hercules-sync which can act as an example on how to use this library.


Can't input decimal numbers manually

I wanted to fill a form manually. I can't input decimal numbers with a "," as a decimal separator. The Google keyboard enables only to use dot "." and the form require "," The result is I can't send decimal numbers to Garmin connect portal.
The solution is to accept , as well . as separator and change it to correct form internally before sending to Garmin.
Android 12, CS language settings, Google keyboard.

Hi @holecekjan
Thanks for your feedback.
It will be fixed in the next release (probably this weekend). The code is already on the main branch. Both comma and dot will be accepted by the application, no matter what Gboard allows you to write. Somehow Gboard still allows to enter only dots, but this will no longer be a problem for the application.

Hi @holecekjan
Version 2.0.2 should work fine with this problem
https://github.com/lswiderski/mi-scale-exporter/releases/tag/v2.0.2
Please let me know if it works properly.

Hello Lukasz,
thank you for fixing decimal separator bug. I confirm that now I can manually input decimal values instead of integer value. Manual input is useful when you have measurement from external BIA device.


Update not-log-on-error-rpc-server-unavailable.md

Fixed "Verity" as "Verify".

@paulbaber : Thanks for your contribution! The author(s) have been notified to review your proposed change.


Test ctz under OpenCL 3.0

Regarding the work item "Test ctz under OpenCL 3.0":
The existing test_integer_ops should pretty much work as-is, it just needs to be updated to pass -cl-std=CL3.0 for an OpenCL 3.0 device rather than -cl-std=CL2.0.  The integer_ops tests are already running for OpenCL 1.x devices, so I don't think any other changes will be required.

@bashbaug I actually have a local patch for this I was working on yesterday but haven't opened a PR for yet.

Fixed by #917 - closing.


Adding workflow execTimeout and keepActive properties

Signed-off-by: Tihomir Surdilovic<EMAIL_ADDRESS>Many thanks for submitting your Pull Request :heart:!
Please specify parts this PR updates:

[x ] Specification
[x ] Schema
[ ] Examples
[ ] Extensions
[ ] Roadmap
[ ] Use Cases
[ ] Community
[ ] TCK
[ ] Other

What this PR does / why we need it:
Adds the workflow "execWindow" . This property defines execution limitations of a single workflow instance.
Adding "adhoc" prop for start definitions
Adding "core concepts" sections to specification document
Special notes for reviewers:
Additional information (if needed):

This flow control is pretty neat, but I think it could use a bit more text around the example.
How are temperature data collected? Is the instance looping an event state to consume events or does each temperature reading invoke the workflow? (see uniqueness of a workflow #146 ) in terms of the example: what if there's not just one living room temperature, but other rooms' temperature sensors that should use the same workflow, but concurrent instances for each room?
Also, after the time interval, a report should be created and sent by another workflow. The property to invoke this is a workflowId, but it's unclear if the current state is carried over to invoke it. Also, it says Id of a workflow to be executed before workflow instance is terminated, so if the window is not interrupting, then it sounds as if the next workflow would be triggered while the instance is still executing, i.e. before workflow instance is terminated.
What starts the workflow?
What happens during the time the report is being generated? The old instance still exists (hasn't been terminated), but is no longer functional.

This flow control is pretty neat, but I think it could use a bit more text around the example.
How are temperature data collected? Is the instance looping an event state to consume events or does each temperature reading invoke the workflow? (see uniqueness of a workflow #146 ) in terms of the example: what if there's not just one living room temperature, but other rooms' temperature sensors that should use the same workflow, but concurrent instances for each room?
Also, after the time interval, a report should be created and sent by another workflow. The property to invoke this is a workflowId, but it's unclear if the current state is carried over to invoke it. Also, it says Id of a workflow to be executed before workflow instance is terminated, so if the window is not interrupting, then it sounds as if the next workflow would be triggered while the instance is still executing, i.e. before workflow instance is terminated.
What starts the workflow?
What happens during the time the report is being generated? The old instance still exists (hasn't been terminated), but is no longer functional.

@manuelstein yeah i will add a proper full example in our examples markdown very soon, then things will be much more clear.
To answer some of your questions inline:
How are temperature data collected?: most likely case is that sensor data is in form of CE when it reaches the workflow end. Note that there has to be event correlation, so each event for a specific room is correlated to the same workflow instance.
What if there's not just one living room temperature, but other rooms' temperature sensors that should use the same workflow - this is just a small / simple example, yes you can correlate events from multiple sensors / sources with correlation (on the room id for example)
What starts the workflow? events
What happens during the time the report is being generated? The old instance still exists (hasn't been terminated), but is no longer functional. - in 100% of cases execution of a workflow instance is not async! So yes that workflow instance will remain active until its finished (report done) note that depending on the interrupting parameter this determines if during that time new events may still be processed or not..this depends on the use case, in this uses no new events should be processed.
then it sounds as if the next workflow would be triggered while the instance is still executing: I don't fully understand that paragraph but for this part of it alone: yes, there can be multiple instances of a workflow :)

@manuelstein yeah i will add a proper full example in our examples markdown very soon, then things will be much more clear.
To answer some of your questions inline:
How are temperature data collected?: most likely case is that sensor data is in form of CE when it reaches the workflow end. Note that there has to be event correlation, so each event for a specific room is correlated to the same workflow instance.
What if there's not just one living room temperature, but other rooms' temperature sensors that should use the same workflow - this is just a small / simple example, yes you can correlate events from multiple sensors / sources with correlation (on the room id for example)
What starts the workflow? events
What happens during the time the report is being generated? The old instance still exists (hasn't been terminated), but is no longer functional. - in 100% of cases execution of a workflow instance is not async! So yes that workflow instance will remain active until its finished (report done) note that depending on the interrupting parameter this determines if during that time new events may still be processed or not..this depends on the use case, in this uses no new events should be processed.
then it sounds as if the next workflow would be triggered while the instance is still executing: I don't fully understand that paragraph but for this part of it alone: yes, there can be multiple instances of a workflow :)

I see the usefulness here, but I think the context provided is focusing on events state use-cases, where-as I think we should think broadly about this as a 'global timeout for a workflow instance' feature.
Imho, max-runtime or global-timeout, or execution-timeout seem to make more sense as a name for this attribute that 'execution window'.  ExecWindow to me implies that this would limit when a workflow is allowed to be invoked, rather than for how long it is expected to be running for.
In this PR, it looks like the intent is for a secondary workflow to be invoked when the execWindow has elapsed.  Some things that aren't clear to me:

What happens to the main workflow?  Does it just end at this point, or does it also transition at the point where the window has elapsed?
Passing data; it's not clear to me, what data will be passed to that sub-workflow (sendlivingroomtempreport, in the example).  How will the user transform/filter what data should be passed to it?

I see the usefulness here, but I think the context provided is focusing on events state use-cases, where-as I think we should think broadly about this as a 'global timeout for a workflow instance' feature.
Imho, max-runtime or global-timeout, or execution-timeout seem to make more sense as a name for this attribute that 'execution window'.  ExecWindow to me implies that this would limit when a workflow is allowed to be invoked, rather than for how long it is expected to be running for.
In this PR, it looks like the intent is for a secondary workflow to be invoked when the execWindow has elapsed.  Some things that aren't clear to me:

What happens to the main workflow?  Does it just end at this point, or does it also transition at the point where the window has elapsed?
Passing data; it's not clear to me, what data will be passed to that sub-workflow (sendlivingroomtempreport, in the example).  How will the user transform/filter what data should be passed to it?

@jorgenj

after the subworkflow referenced by workflowId completes, the workflow instance is terminated
the current workflow data. it can be filtered by states of the subworkflow thats references

this change deals with a single workflow instance, so "global" maybe confusing. "execution" to me at least makes more sense as workflow execution happens inside a workflow instance. I do like "executionTimeout" what you suggested. Will update

@jorgenj

after the subworkflow referenced by workflowId completes, the workflow instance is terminated
the current workflow data. it can be filtered by states of the subworkflow thats references

this change deals with a single workflow instance, so "global" maybe confusing. "execution" to me at least makes more sense as workflow execution happens inside a workflow instance. I do like "executionTimeout" what you suggested. Will update

rebased

rebased

updated per recommendations
@jorgenj will work on an additional example per your suggestion and update pr so we can take a look at it next meet

updated per recommendations
@jorgenj will work on an additional example per your suggestion and update pr so we can take a look at it next meet

@ricardozanini @jorgenj @manuelstein: added a lot of explanations around what is being added with this pr in the spec doc. Also added two new examples that showcase the added features.
You can see the added examples parsed here: https://github.com/tsurdilo/specification/blob/workflowtimeout/examples/examples.md
(look at the last two)
Please take a look again and let me know if there are still any concerns.

@ricardozanini @jorgenj @manuelstein: added a lot of explanations around what is being added with this pr in the spec doc. Also added two new examples that showcase the added features.
You can see the added examples parsed here: https://github.com/tsurdilo/specification/blob/workflowtimeout/examples/examples.md
(look at the last two)
Please take a look again and let me know if there are still any concerns.

Wouldn't it be a better design for ExecTimeout to let the user define an error to throw, rather than this interrupt and runBefore stuff? Then the implementation can just throw this error when the timeout is reached and it's up to the workflow to decide whether or not to terminate or "run before" using onErrors. Just like optionally defining a SIGINT handler in traditional programs.
Also, why is any of this keepActive "adhoc" stuff necessary? Loops can already be created trivially using transitions that point back to states that have appeared earlier in the workflow. As an example, I tested Tic-Tac-Toe implemented in a workflow just to see if I could:
id: tictactoeGame
name: "Tic-Tac-Toe Game"
description: "Run a game of tic-tac-toe."
functions:
- name: PlayGameTurn
  metadata:
    image: vorteil/tictactoe
events:
- name: TurnPlayed
  type: tictactoeTurnPlayed
  source: tictactoeGame
states:
- name: StartGame
  type: inject
  data:
    game: ""
    player: 1
    board: [0, 0, 0, 0, 0, 0, 0, 0, 0]
    winner: ""
  start:
    kind: default
  transition:
    nextState: RequestPlayerTurn
- name: RequestPlayerTurn
  type: subflow
  waitForCompletion: false
  workflowId: tictactoePublish
  transition:
    nextState: ReceivePlayerTurn
- name: ReceivePlayerTurn
  type: switch
  eventTimeout: 1H
  eventConditions:
  - eventRef: TurnPlayed
    transition:
      nextState: ComputerTurn
  default:
    transition:
      nextState: AbortGame
- name: ComputerTurn
  type: operation
  actions:
  - functionRef:
      refName: PlayGameTurn
      parameters:
        game: "{{ $.game }}"
        winner: "{{ $.winner }}"
        player: "{{ $.player }}"
        board: "{{ $.board }}"
  transition:
    nextState: CheckForGameEnd
- name: CheckForGameEnd
  type: switch
  dataConditions:
  - condition: "$[?(@.winner=='player')]"
    transition:
      nextState: GameEnd
  - condition: "$[?(@.winner=='draw')]"
    transition:
      nextState: GameEnd
  - condition: "$[?(@.winner=='flux')]"
    transition:
      nextState: GameEnd
  default:
    transition:
      nextState: RequestPlayerTurn
  stateDataFilter:
    dataOutputPath: "$.after"
- name: AbortGame
  type: inject
  data:
    winner: "aborted"
  transition:
    nextState: GameEnd
- name: GameEnd
  type: subflow
  waitForCompletion: false
  workflowId: tictactoePublish
  end:
    kind: default

The only thing here I can understand adding to the spec is a global timeout.

Wouldn't it be a better design for ExecTimeout to let the user define an error to throw, rather than this interrupt and runBefore stuff? Then the implementation can just throw this error when the timeout is reached and it's up to the workflow to decide whether or not to terminate or "run before" using onErrors. Just like optionally defining a SIGINT handler in traditional programs.
Also, why is any of this keepActive "adhoc" stuff necessary? Loops can already be created trivially using transitions that point back to states that have appeared earlier in the workflow. As an example, I tested Tic-Tac-Toe implemented in a workflow just to see if I could:
id: tictactoeGame
name: "Tic-Tac-Toe Game"
description: "Run a game of tic-tac-toe."
functions:
- name: PlayGameTurn
  metadata:
    image: vorteil/tictactoe
events:
- name: TurnPlayed
  type: tictactoeTurnPlayed
  source: tictactoeGame
states:
- name: StartGame
  type: inject
  data:
    game: ""
    player: 1
    board: [0, 0, 0, 0, 0, 0, 0, 0, 0]
    winner: ""
  start:
    kind: default
  transition:
    nextState: RequestPlayerTurn
- name: RequestPlayerTurn
  type: subflow
  waitForCompletion: false
  workflowId: tictactoePublish
  transition:
    nextState: ReceivePlayerTurn
- name: ReceivePlayerTurn
  type: switch
  eventTimeout: 1H
  eventConditions:
  - eventRef: TurnPlayed
    transition:
      nextState: ComputerTurn
  default:
    transition:
      nextState: AbortGame
- name: ComputerTurn
  type: operation
  actions:
  - functionRef:
      refName: PlayGameTurn
      parameters:
        game: "{{ $.game }}"
        winner: "{{ $.winner }}"
        player: "{{ $.player }}"
        board: "{{ $.board }}"
  transition:
    nextState: CheckForGameEnd
- name: CheckForGameEnd
  type: switch
  dataConditions:
  - condition: "$[?(@.winner=='player')]"
    transition:
      nextState: GameEnd
  - condition: "$[?(@.winner=='draw')]"
    transition:
      nextState: GameEnd
  - condition: "$[?(@.winner=='flux')]"
    transition:
      nextState: GameEnd
  default:
    transition:
      nextState: RequestPlayerTurn
  stateDataFilter:
    dataOutputPath: "$.after"
- name: AbortGame
  type: inject
  data:
    winner: "aborted"
  transition:
    nextState: GameEnd
- name: GameEnd
  type: subflow
  waitForCompletion: false
  workflowId: tictactoePublish
  end:
    kind: default

The only thing here I can understand adding to the spec is a global timeout.

@alankm

Regarding expressing with error handling: - no, as you do not know which part of your workflow will be active when execTimeout is triggered. So you rather in a large workflow explicitly define this in every single workflow state?
Also this has nothing to do w/ errors. Errors represent actual business issues which are in SW declarative (explicitly defined in the workflow definition).
This is more of an instance-level timeout, nothing to do w/ errors, but its still explicitly defined. Runtimes impl can vary of course as how you want to define this internally.

Regarding loops - this has nothing to do with loops really. Yes there could be multiple ways to model some business requirements. This has to do with workflow instances. You might want in some cases to have workflow instances which just hold data. You cannot do that with loops. This has many use cases that go beyond looping.

@alankm

Regarding expressing with error handling: - no, as you do not know which part of your workflow will be active when execTimeout is triggered. So you rather in a large workflow explicitly define this in every single workflow state?
Also this has nothing to do w/ errors. Errors represent actual business issues which are in SW declarative (explicitly defined in the workflow definition).
This is more of an instance-level timeout, nothing to do w/ errors, but its still explicitly defined. Runtimes impl can vary of course as how you want to define this internally.

Regarding loops - this has nothing to do with loops really. Yes there could be multiple ways to model some business requirements. This has to do with workflow instances. You might want in some cases to have workflow instances which just hold data. You cannot do that with loops. This has many use cases that go beyond looping.

@tsurdilo "So you rather in a large workflow explicitly define this in every single workflow state?"
Definitely. Different behaviour is likely to be necessary based on what state the workflow is currently in.
"This has many use cases that go beyond looping."
Can you provide a few different examples? The two you've added are trivial to implement with the global timeout being the only necessary addition. Even @jorgenj's example suggestion relies only on this global timeout.
We shouldn't add more and more ways to model the same business requirements just because we can.
Even collecting/holding data can be handled easily using only what's already in master. But I'm ignoring that because the topic of data collection seems like an anti-pattern to me -- something beyond the scope of serverlessworkflows now and forever. I certainly hope so, anyway.

@tsurdilo "So you rather in a large workflow explicitly define this in every single workflow state?"
Definitely. Different behaviour is likely to be necessary based on what state the workflow is currently in.
"This has many use cases that go beyond looping."
Can you provide a few different examples? The two you've added are trivial to implement with the global timeout being the only necessary addition. Even @jorgenj's example suggestion relies only on this global timeout.
We shouldn't add more and more ways to model the same business requirements just because we can.
Even collecting/holding data can be handled easily using only what's already in master. But I'm ignoring that because the topic of data collection seems like an anti-pattern to me -- something beyond the scope of serverlessworkflows now and forever. I certainly hope so, anyway.

@alankm sorry this is not how you express requirements to a workflow language in a domain specific way. The requirement "after 30 minutes of execution collecting data and create a report" is much better expressed this way than putting an error handler on 100 workflow states (and even subflows which are reusable and thus using errors can make them specific to this the parent instance if used as you mentioned).
Regarding "We shouldn't add more and more ways to model the same business requirements just because we can", i agree with this general statement, but at the same time allowing users to model business requirements in easier way is not a bad thing. I understand his might not present a valid use cases for yourself, but does not mean it will not be useful by others.
Regarding  "something beyond the scope of serverlessworkflows now and forever" - I do not understand this. SW states that its use are both stateless as well as stateful workflows. This may not have use for stateless workflows/orchestration but has very important use for stateful orchestration. If you are worried about memory or something, not sure this is an issue as for stateful workflow the runtime in most cases would not hold instances in memory, but persist them anyways and resume from file/disc/db when they need to be resumed.

@alankm sorry this is not how you express requirements to a workflow language in a domain specific way. The requirement "after 30 minutes of execution collecting data and create a report" is much better expressed this way than putting an error handler on 100 workflow states (and even subflows which are reusable and thus using errors can make them specific to this the parent instance if used as you mentioned).
Regarding "We shouldn't add more and more ways to model the same business requirements just because we can", i agree with this general statement, but at the same time allowing users to model business requirements in easier way is not a bad thing. I understand his might not present a valid use cases for yourself, but does not mean it will not be useful by others.
Regarding  "something beyond the scope of serverlessworkflows now and forever" - I do not understand this. SW states that its use are both stateless as well as stateful workflows. This may not have use for stateless workflows/orchestration but has very important use for stateful orchestration. If you are worried about memory or something, not sure this is an issue as for stateful workflow the runtime in most cases would not hold instances in memory, but persist them anyways and resume from file/disc/db when they need to be resumed.

@alankm and off topic -  do you have this tic tac toe workflow running? Would make a really cool demo for community!

@alankm and off topic -  do you have this tic tac toe workflow running? Would make a really cool demo for community!

@alankm here is the image of your presented workflow generated in https://serverlessworkflow.io/editor.html (or you can use the vscode extension to see the same) - very nice!

I do see your point better now i think, for your case you can keep the state of one single game while that game is active. When the game ends you will loose the context of that game, and start a new game with a new workflow instance.
KeepAlive deals with a little bit of a different business problem: let's say you have your game workflow deployed
in 3 different casinos. Your business problem is that you want to collect game data from each game in each casino and produce daily reports to your manager.
You can create a workflow which has keepAlive set to true, which would receive events containg single game data and casino location for each game played. This would allow you to use this alongside execTimeout to create your daily/monthly/whatever reports.
This present a pure workflow solution to the problem. Yes in your case you can say no thanks i can just persist this data and do the reports that way, but that's not the point of what we are doing. We are writing a workflow language and as such our goal is to provide solutions for problems expressed as workflows where there is a possibility.
You can still persist your data if you want as part of the workflow, but the actual representation of your business requirements is contained in the workflow language and not 2,3, 100 different places. Hope this helps.

@alankm here is the image of your presented workflow generated in https://serverlessworkflow.io/editor.html (or you can use the vscode extension to see the same) - very nice!

I do see your point better now i think, for your case you can keep the state of one single game while that game is active. When the game ends you will loose the context of that game, and start a new game with a new workflow instance.
KeepAlive deals with a little bit of a different business problem: let's say you have your game workflow deployed
in 3 different casinos. Your business problem is that you want to collect game data from each game in each casino and produce daily reports to your manager.
You can create a workflow which has keepAlive set to true, which would receive events containg single game data and casino location for each game played. This would allow you to use this alongside execTimeout to create your daily/monthly/whatever reports.
This present a pure workflow solution to the problem. Yes in your case you can say no thanks i can just persist this data and do the reports that way, but that's not the point of what we are doing. We are writing a workflow language and as such our goal is to provide solutions for problems expressed as workflows where there is a possibility.
You can still persist your data if you want as part of the workflow, but the actual representation of your business requirements is contained in the workflow language and not 2,3, 100 different places. Hope this helps.

The motivational use case has 2 workflows - one is the event collection, which starts and terminates for each event and the other one is a cron-triggered report generation. Putting both workflows in a single workflow definition is only necessary, because the report generation wants to access workflow data of the event collection workflow. This no longer describes a workflow, but an application. The solution to shift control between the two workflows assumes a computation model of a process with shared data (workflow data) among all individual event collections and the report generation (after which it forcefully terminates the instance, btw). But when I get 10k events/sec, I want to be able to scale this to parallel instances of the workflow. This is no longer possible when the workflow language prescribes/controls the termination of the workflow instance. In fact, it shouldn't contain any keep-alive semantic beyond having reached an end state. Instead, it should be possible to re-enter a previous application context.
IMHO, it's okay to want to share application data for different workflows. It may even be possible to allow multiple flows in a single state chart by collating the states into a single workflow definition. But there should be no assumption built-in on the process model.
We first have to clarify the Uniqueness constraint for workflows #146.

The motivational use case has 2 workflows - one is the event collection, which starts and terminates for each event and the other one is a cron-triggered report generation. Putting both workflows in a single workflow definition is only necessary, because the report generation wants to access workflow data of the event collection workflow. This no longer describes a workflow, but an application. The solution to shift control between the two workflows assumes a computation model of a process with shared data (workflow data) among all individual event collections and the report generation (after which it forcefully terminates the instance, btw). But when I get 10k events/sec, I want to be able to scale this to parallel instances of the workflow. This is no longer possible when the workflow language prescribes/controls the termination of the workflow instance. In fact, it shouldn't contain any keep-alive semantic beyond having reached an end state. Instead, it should be possible to re-enter a previous application context.
IMHO, it's okay to want to share application data for different workflows. It may even be possible to allow multiple flows in a single state chart by collating the states into a single workflow definition. But there should be no assumption built-in on the process model.
We first have to clarify the Uniqueness constraint for workflows #146.

@manuelstein:
This no longer describes a workflow, but an application. - what does this mean? A workflow is a representation for a solution of your business requirements. Out of workflows you can build services...yes.
**This is no longer possible when the workflow language prescribes/controls the termination of the workflow instance. ** - I would argue that it has to be, how would you otherwise have portability? The runtimes can define custom exec but the outcome should be same as expressed in the workflow language.
it shouldn't contain any keep-alive semantic beyond having reached an end state. Instead, it should be possible to re-enter a previous application context.- i dont understand what this means. each workflow instance contains its own context
We first have to clarify the Uniqueness constraint for workflows #146.: this pr introduced workflow definition, workflow instance and clearly describes the lifetime of the instance. it is the starting point of that conversation and not the other way around

@manuelstein:
This no longer describes a workflow, but an application. - what does this mean? A workflow is a representation for a solution of your business requirements. Out of workflows you can build services...yes.
**This is no longer possible when the workflow language prescribes/controls the termination of the workflow instance. ** - I would argue that it has to be, how would you otherwise have portability? The runtimes can define custom exec but the outcome should be same as expressed in the workflow language.
it shouldn't contain any keep-alive semantic beyond having reached an end state. Instead, it should be possible to re-enter a previous application context.- i dont understand what this means. each workflow instance contains its own context
We first have to clarify the Uniqueness constraint for workflows #146.: this pr introduced workflow definition, workflow instance and clearly describes the lifetime of the instance. it is the starting point of that conversation and not the other way around

By application, I mean it defines more than one workflow in a single document. One is triggered by an Event and the other one is triggered by a timeout. When no event is being received, the example assumes an ongoing execution, hence the "execTimeout". But I would want my workflows to persist the workflow data and go full serverless (i.e. remove all my running processes, no resource consumption) until I receive the next event. So, in my Serverless realization, there's no application process running that could perceive an execution timeout.
The workflow specification should make no assumptions about the engine implementation. I find it too limiting to specify that there should be a continuing execution while the workflow definition is not in any of its designed states.
A lot is currently hinting that a workflow instance is a running process. But if two requests/events correlate to the same instance, then it should be possible for the platform to persist the workflow context between the two event processings.
Yes, this is the starting point of the workflow instance lifecycle, but I think we should clarify first what triggers a new instance vs. what reuses an existing instance. E.g. when would a scheduled start state reuse an instance vs. create a new instance. How do I say that during one day, I want my hourly executions to reuse the old context and on the next day start fresh?
I think this would play well into this example with report generation. To me, reporting is a cron-like execution and it could be well coupled with an event collection by using two starting states in the same workflow document.

By application, I mean it defines more than one workflow in a single document. One is triggered by an Event and the other one is triggered by a timeout. When no event is being received, the example assumes an ongoing execution, hence the "execTimeout". But I would want my workflows to persist the workflow data and go full serverless (i.e. remove all my running processes, no resource consumption) until I receive the next event. So, in my Serverless realization, there's no application process running that could perceive an execution timeout.
The workflow specification should make no assumptions about the engine implementation. I find it too limiting to specify that there should be a continuing execution while the workflow definition is not in any of its designed states.
A lot is currently hinting that a workflow instance is a running process. But if two requests/events correlate to the same instance, then it should be possible for the platform to persist the workflow context between the two event processings.
Yes, this is the starting point of the workflow instance lifecycle, but I think we should clarify first what triggers a new instance vs. what reuses an existing instance. E.g. when would a scheduled start state reuse an instance vs. create a new instance. How do I say that during one day, I want my hourly executions to reuse the old context and on the next day start fresh?
I think this would play well into this example with report generation. To me, reporting is a cron-like execution and it could be well coupled with an event collection by using two starting states in the same workflow document.

@manuelstein ok ..i no longer have the energy to exaplain this pr any more....
from my part LGTM ...and the is another LGTM from maintainer......

@manuelstein ok ..i no longer have the energy to exaplain this pr any more....
from my part LGTM ...and the is another LGTM from maintainer......

@manuelstein @ricardozanini so what we do with this pr? commit it / keep it around to discuss more in meetings / close it / wait for more discussions here / break it up into smaller prs / anything else ?
I think this pr brings a lot of improvements to our specification. If needed i can create more examples and demos around it so value is seen. Just would like to know what the end-result from our last meeting was on this. Please let me know

@manuelstein @ricardozanini so what we do with this pr? commit it / keep it around to discuss more in meetings / close it / wait for more discussions here / break it up into smaller prs / anything else ?
I think this pr brings a lot of improvements to our specification. If needed i can create more examples and demos around it so value is seen. Just would like to know what the end-result from our last meeting was on this. Please let me know

+1 to merge it, and I believe that we can always discuss this topic in our meetings to improve it. Others can also suggest modifications by sending new PRs around this topic.

+1 to merge it, and I believe that we can always discuss this topic in our meetings to improve it. Others can also suggest modifications by sending new PRs around this topic.

@manuelstein ^ are you ok with this as well? I think we should move forward with this and start working on the expression language discussions in our meets.

@manuelstein ^ are you ok with this as well? I think we should move forward with this and start working on the expression language discussions in our meets.

@manuelstein any inputs? I'd like to move this forward please.

@manuelstein any inputs? I'd like to move this forward please.

rebased

rebased

@manuelstein @ricardozanini @jorgenj
Imma go ahead and more forwards with this. Understand that there might still be some open questions etc but there
were no suggestions on how to change this stuff and we can always revise these sections before next release if needed.
So if you have any outstanding issues with this please open an issue and/or submit PRs against the spec/schema and we can get those in asap.
I just cant sit on this and have to constantly rebase these big prs its just taking way too much time.

@manuelstein @ricardozanini @jorgenj
Imma go ahead and more forwards with this. Understand that there might still be some open questions etc but there
were no suggestions on how to change this stuff and we can always revise these sections before next release if needed.
So if you have any outstanding issues with this please open an issue and/or submit PRs against the spec/schema and we can get those in asap.
I just cant sit on this and have to constantly rebase these big prs its just taking way too much time.

Workflow instance lifecycle will be the topic next Monday, Feb 1st, in our weekly call, @jorgenj @alankm @tsurdilo. I'll sum up what we discussed when we talked about this PR.
I'm also okay to have it merged now. Not that I'd agree with the functionality ;-) But merging it now will make it easier to work on. Otherwise we'd have to draft a change that has to consider a lot of different hanging PRs.

Workflow instance lifecycle will be the topic next Monday, Feb 1st, in our weekly call, @jorgenj @alankm @tsurdilo. I'll sum up what we discussed when we talked about this PR.
I'm also okay to have it merged now. Not that I'd agree with the functionality ;-) But merging it now will make it easier to work on. Otherwise we'd have to draft a change that has to consider a lot of different hanging PRs.

@manuelstein I agree to have discussions about this if you guys wish, but please make sure that discussion points are  related to some parts of this pr that need more explanation for example.
I think that if ppl want to discuss some generic topics around this it's much better to first do a PR about that and then discuss it in a meeting. I do not want to go off into some directions that are not related to a specific PR so everyone can relate.

@manuelstein I agree to have discussions about this if you guys wish, but please make sure that discussion points are  related to some parts of this pr that need more explanation for example.
I think that if ppl want to discuss some generic topics around this it's much better to first do a PR about that and then discuss it in a meeting. I do not want to go off into some directions that are not related to a specific PR so everyone can relate.

Got your point

Got your point


⚠ SceneTime has degraded performance

In fb0e29f, SceneTime ($ST) experienced degraded performance:

HTTP code: 200
Response time: 1153 ms

Resolved: SceneTime performance has improved in 268e280 after 6 minutes.


Added new highlight and path particles

Pretty sure I messed up some of the particles (the children weren't set and I wasn't sure how to asemble them).

I've taken a brief look and the particles look okay (in terms of assembling to children and such).
Do they not work?


Check for for missing back-ticks in doc links in CI

Unfortunately, docs.rs renders [Foo] and [`Foo`] differently. https://cdn.discordapp.com/attachments/743559241461399582/924406539584942100/unknown.png
We want the latter, and our CI should check for this.

Image inline:

@alice-i-cecile is there a clippy config file somewhere? We don't seem to have a clippy.toml.

Nevermind, I guess we don't need one

There isn't one yet
For this ticket there is this pedanting lint in clippy: https://rust-lang.github.io/rust-clippy/master/index.html#doc_markdown

Might this be a good moment to add a clippy.toml? That way one doesn't have to remember all of
cargo clippy -- -D warnings -A clippy::type_complexity -W clippy::doc_markdown

you should be able to just run cargo clippy right?

I was wrong. clippy.toml does not provide a way to turn lints on or off. They must be passed at the command line.

yup that's why there is the ci package so that people can run cargo run -p ci to use the lints Bevy wants


Y24-044 Remove 'asset' terminology

Describe the Housekeeping
The word 'asset' is used throughout Sequencescape and is confusing / non-intuitive as it refers to a historical concept in the product.
Task: Research an approach to remove the word asset from the product (apart from a few exceptions, noted below), and create stories to do so.
A couple of example approaches / stories I can think of:

By database vs code: Re-name all the foreign keys called asset_id on database tables at once (then do code references as a separate story).
By table / object: Take one database table that has a column called asset_id, and rename that column and any reference to it in the code (then repeat with other tables, one by one).

History:
There used to be a table / model called Asset. Several years ago is was split into Labware (a piece of plastic used in the lab) and Receptacle (the hole(s) in that plastic that holds samples). In the database, there is a table called labware and a table called receptalces, but no table called assets. There is still a class called Asset, but it has minimal functionality. Wherever you find the word asset in the code, or as part of the name of a database table or column, it normally means receptacle; however, occasionally it means labware.
Exceptions:
This is a exercise in re-naming terminology within Sequencescape. To prevent scope creep, I think we should leave the following alone for now:

Anything referring to Asset Audits - this is the name of another app, so references to this are OK
The actual class called Asset - this story is about re-naming, not modifying functionality, so leave the name of this class and any references to it alone.

Additional context
This came out of a retrospective on 27/3/2024.
Data model:

A possible approach:
Considerations:

Focus first on the tables that have asset_id as a foreign key. I think these cause the most confusion because you have to work out which table they link to (Labware or Receptacle).
Do one table / model first (e.g. barcodes), then reassess the approach.
Run database migration past the DBAs before running it in prod.
Out of scope - changing app names (e.g. Asset Audits) or any repos outside Sequencescape (e.g. Limber or Sequencescpae Client API).

Steps:

Add an alias ‘labware_id’ / receptacle_id to the . Will use ‘asset_id’ column behind the scenes.
Update code at your leisure to use the new attribute name.
Disable the use of the old attribute name in code (e.g. override method, raise exception). This should catch any remaining references and be easier to roll back (ideally feature flag) than a db migration.
Rename column and remove alias.

Uncertainties:

How to make sure we get all the code references?
Is an alias equivalent to a database field for all types of code reference?
alias vs alias_method vs alias_attribute

Testing out using alias_attribute as a stepping stone. Using the Barcode model.
Added this to the Barcode model:
# needed to add 2 aliases, so that both labware and labware_id could be successfully used.
alias_attribute :labware_id, :asset_id
alias_attribute :labware, :asset

Tested retrieving the linked labware using the above methods (the 'getter'):
plate = Purpose.find_by(name: 'Stock Plate').create!
barcode = plate.barcodes.first

# using the existing / old way
barcode.asset_id
barcode.asset

# using the aliases / new way
barcode.labware_id
barcode.labware

Tested linking the labware upon creation, using the above methods (the 'setter'):
plate = Purpose.find_by(name: 'Stock Plate').create!
barcode_format = 7 # use fluidx foreign barcode for testing

# using create!
Barcode.create!(labware: plate, barcode:'MA21052401', format: barcode_format)
Barcode.create!(labware_id: plate.id, barcode: 'MA21052402', format: barcode_format)

# using create
Barcode.create(labware: plate, barcode: 'MA21052403', format: barcode_format)
Barcode.create(labware_id: plate.id, barcode: 'MA21052404', format: barcode_format)

# using new then save!
Barcode.new(labware: plate, barcode: 'MA21052405', format: barcode_format).save!
Barcode.new(labware_id: plate.id, barcode: 'MA21052406', format: barcode_format).save!

plate.barcodes.count # should be 7

All the above test code worked as expected.

Testing overriding asset / asset_id methods as a stepping stone to renaming the fields (in addition to aliases created in previous comment):
def asset_id
    raise "Use 'labware_id' instead. 'asset_id' is deprecated."
  end

  def asset
    raise "Use 'labware' instead. 'asset' is deprecated."
  end

This does not work, because when you use the aliases, Rails uses the original field names behind the scenes, and therefore accesses these methods. e.g.
plate = Plate.create!

Barcode.create!(labware: plate, barcode:'MA21052408', format: 7)
=> RuntimeError: Use 'labware' instead. 'asset' is deprecated.

The output of this story is the following 2 stories, which will tackle the first of many models!

https://github.com/sanger/sequencescape/issues/4121
https://github.com/sanger/sequencescape/issues/4123

The plan is to do these first, and reassess the approach. Then create stories for the next model.

Hi @StephenHulme
Thanks for looking!
I made a hopefully comprehensive list of the affected tables in an earlier comment in this issue - https://github.com/sanger/sequencescape/issues/4072#issuecomment-2098445620
And a recommendation in this comment - https://github.com/sanger/sequencescape/issues/4072#issuecomment-2098455567 - to focus first on the tables that have a foreign key called asset_id, which will be a subset of the list above.
I found looking through the schema.rb file to be v helpful in discovering affected tables.
Katy


⚠ Bofrost.at has degraded performance

In ca81dd7, Bofrost.at (https://www.bofrost.at) experienced degraded performance:

HTTP code: 200
Response time: 2295 ms

Resolved: Bofrost.at performance has improved in 2d9f77e.


Select location by combobox

The location selection component should allow users to either enter GPS coordinates or type in city name. Textbox, into which the user types the city name, should have autocomplete. In the background, the component should automatically convert city name into GPS coordinates.

Instead of autocomplete the component should have a fuzzy search of cities. After user selects a city an event should be propagated with the city name.


Username error mooode 8.3.9

I'm running into this error when installing on a fresh image of moOde 8.3.9 Raspberry Pi 4b.
Installing mpd2chromecast user:pi pwd:/home/pi
Downloading mpd2chromecast...
environment: line 4: git: command not found
purging old crontab entries
Systemd steps for ~/home/pi/mpd2chromecast/mpd2chromecast.service
sed: can't read /home/pi/mpd2chromecast/mpd2chromecast.service: No such file or directory
Failed to enable unit: Unit file /etc/systemd/system/mpd2chromecast.service is masked.
Failed to restart mpd2chromecast.service: Unit mpd2chromecast.service is masked.

"line 4: git: command not found"
Install git ...

Still no joy with your fork, i'm root user (not pi, as there seems to be no user pi in moode?!)
Downloading or updating mpd2chromecast...
fatal: could not create work tree dir '/mpd2chromecast': Permission denied

@ajaykay
Check with this patch and let me know:
curl -s https://raw.githubusercontent.com/papampi/mpd2chromecast/papampi-patch-1/install.sh  | sudo bash

As far as I can see the latest moode build doesn't have a built in user, just the one you create when you set it up.
So my username is the only one on the device when I list it apart from 'root'.
atl@moode:~ $ curl -s https://raw.githubusercontent.com/papampi/mpd2chromecast/papampi-patch-1/install.sh | sudo bash
The script is running as root user.
Detected User:atl
Detected User Home:/home/atl
Installing mpd2chromecast user: pwd:
Downloading or updating mpd2chromecast...
fatal: could not create work tree dir '/mpd2chromecast': Permission denied
purging old crontab entries
Hit:1 http://security.debian.org/debian-security bullseye-security InRelease
Hit:2 http://deb.debian.org/debian bullseye InRelease
Hit:3 http://archive.raspberrypi.org/debian bullseye InRelease
Get:4 http://deb.debian.org/debian bullseye-updates InRelease [44.1 kB]
Get:5 https://dl.cloudsmith.io/public/moodeaudio/m8y/deb/raspbian bullseye InRelease [5,199 B]
Fetched 49.3 kB in 2s (28.2 kB/s)
Reading package lists... Done
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
python3-pip is already the newest version (20.3.4-4+rpt1+deb11u1).
0 upgraded, 0 newly installed, 0 to remove and 59 not upgraded.
bash: line 68: cd: /home/atl/mpd2chromecast: No such file or directory

I installed with this script on latest yesterday.
Some thing is strange it detects user and set home directory:
Detected User:atl
Detected User Home:/home/atl

But later it shows them empty :
Installing mpd2chromecast user: pwd:
Let me check and make some changes.

@ajaykay ajaykay
Found and fixed it, has forgotten to export variables.
Should be ok now, test the patch again.

Perfect! All looks good to me.
_atl@moode:~ $ curl -s https://raw.githubusercontent.com/papampi/mpd2chromecast/papampi-patch-1/install.sh | sudo bash
The script is running as root user.
Detected User:atl
Detected User Home:/home/atl
Installing mpd2chromecast user:atl pwd:/home/atl
Downloading or updating mpd2chromecast...
Cloning into '/home/atl/mpd2chromecast'...
remote: Enumerating objects: 651, done.
remote: Counting objects: 100% (103/103), done.
remote: Compressing objects: 100% (52/52), done.
remote: Total 651 (delta 82), reused 51 (delta 51), pack-reused 548
Receiving objects: 100% (651/651), 2.04 MiB | 1.48 MiB/s, done.
Resolving deltas: 100% (403/403), done.
purging old crontab entries
Hit:1 http://security.debian.org/debian-security bullseye-security InRelease
Hit:2 http://deb.debian.org/debian bullseye InRelease
Hit:3 http://archive.raspberrypi.org/debian bullseye InRelease
Hit:4 http://deb.debian.org/debian bullseye-updates InRelease
Get:5 https://dl.cloudsmith.io/public/moodeaudio/m8y/deb/raspbian bullseye InRelease [5,199 B]
Fetched 5,199 B in 2s (3,037 B/s)
Reading package lists... Done
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
python3-pip is already the newest version (20.3.4-4+rpt1+deb11u1).
0 upgraded, 0 newly installed, 0 to remove and 59 not upgraded.
Usage:
pip3 install [options]  [package-index-options] ...
pip3 install [options] -r  [package-index-options] ...
pip3 install [options] [-e]  ...
pip3 install [options] [-e]  ...
pip3 install [options] <archive url/path> ...
no such option: --break-system-packages
Systemd steps for /home/atl/mpd2chromecast/mpd2chromecast.service
Created symlink /etc/systemd/system/multi-user.target.wants/mpd2chromecast.service → /etc/systemd/system/mpd2chromecast.service.
_

no such option: --break-system-packages

It seems like it couldn't install requirements.txt with pip
Does it working ok?

All seems fine to me, MPD and URL streams work 👍
Big thanks!

So version 9.0.2 just came out (was previously on v8).
Upgraded and it's broken the fix.
_atl@moode:/$ curl -s https://raw.githubusercontent.com/papampi/mpd2chromecast/master/install.sh | sudo bash
The script is running as root user.
 Done
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
chromium-browser chromium-browser-l10n chromium-codecs-ffmpeg-extra
linux-headers-rpi-2712 linux-headers-rpi-v8 linux-image-rpi-2712
linux-image-rpi-v8 shairport-sync upmpdcli
0 upgraded, 0 newly installed, 0 to remove and 9 not upgraded.
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
python3-pip is already the newest version (23.0.1+dfsg-1+rpt1).
0 upgraded, 0 newly installed, 0 to remove and 9 not upgraded.
bash: line 74: cd: /home/atl/mpd2chromecast: No such file or directory
atl@moode:/$
_

Upgraded to moode v.9.02 from v8 and it's broken whatever the fix was.
Installed git, then the original mpd2chromecast, then your fix, and it returns:
_The script is running as root user.
 Done
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
chromium-browser chromium-browser-l10n chromium-codecs-ffmpeg-extra
linux-headers-rpi-2712 linux-headers-rpi-v8 linux-image-rpi-2712
linux-image-rpi-v8 shairport-sync upmpdcli
0 upgraded, 0 newly installed, 0 to remove and 9 not upgraded.
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
python3-pip is already the newest version (23.0.1+dfsg-1+rpt1).
0 upgraded, 0 newly installed, 0 to remove and 9 not upgraded.
bash: line 74: cd: /home/atl/mpd2chromecast: No such file or directory
atl@moode:/$
_

Are you sure you are running this command:
curl -s https://raw.githubusercontent.com/papampi/mpd2chromecast/master/install.sh | sudo bash
I just tried it on 9.0.2 and installed with no problem.

Yes, see the full log. Looking at it I'm not sure if something is screwy with my install as it can't CH to the home dir.
_Last login: Fri Jun 14 13:49:57 2024 from <IP_ADDRESS>
Could not chdir to home directory /home/atl: No such file or directory
atl@moode:/$ curl -s https://raw.githubusercontent.com/papampi/mpd2chromecast/master/install.sh | sudo bash
The script is running as root user.
 Done
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
chromium-browser chromium-browser-l10n chromium-codecs-ffmpeg-extra
linux-headers-rpi-2712 linux-headers-rpi-v8 linux-image-rpi-2712
linux-image-rpi-v8 shairport-sync upmpdcli
0 upgraded, 0 newly installed, 0 to remove and 9 not upgraded.
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
python3-pip is already the newest version (23.0.1+dfsg-1+rpt1).
0 upgraded, 0 newly installed, 0 to remove and 9 not upgraded.
bash: line 78: cd: /home/atl/mpd2chromecast: No such file or directory
atl@moode:/$
_

So you are logged in with user atl but there is no /home/atl folder?

Correct. I don't even know at this stage.
Will try and reflash from scratch.

Add home directory for your user
mkdir /home/atl

Nada, tried adding both dirs via sudo, /home/atl and /home/atl/mpd2chromecast
_
0 upgraded, 0 newly installed, 0 to remove and 9 not upgraded.
ERROR: Could not open requirements file: [Errno 2] No such file or directory: 'requirements.txt'
Setting up systemd service for mpd2chromecast
sed: can't read /home/atl/mpd2chromecast/mpd2chromecast.service: No such file or directory
Failed to enable unit: Unit file /etc/systemd/system/mpd2chromecast.service is masked.
Failed to restart mpd2chromecast.service: Unit mpd2chromecast.service is masked.
mpd2chromecast installation and setup complete.
atl@moode:/$
_

Try to reflash ... seems like that's easier than debugging this problem

Not to self - never do an in place upgrade.
All sorted, once again.

Hi folks, sorry I'm late to party here. I never get notifications from github on these issues etc.
I'm flashing a fresh image now from the latest bookworm image for moode and will go through the install and sort out any issues it has.
The original install.sh probed detection of moode and volumio files and then toggled between there being a pi user (moode) or volumio user. Then it goes from there in running a sed on the service file to customise the install location (home dir) as it runs the mpd2chromecast agent as this non-root user.
I'll try and rework it as required so that it just works again.

@dresdner353
I already made some changes and improvements in this PR:  https://github.com/dresdner353/mpd2chromecast/pull/12

Thanks for the submissions. I took a different approach as your changes were likely to do some damage with the pip3 breakage.
so the cron stuff was removed.. that was ancient stuff I had done with running this script from cron and was trying to undo that config for someone upgrading... at this stage, it can be taken out.
So the user git commands are pure rm -rf and git clone as before. No pull attempts.
the package installs are pure direct python pre-built packages as they do not want the pip approach any longer with the rpi.. thankfully all I need is there in apt and just added git as you had done. No need to test git.. install the package, if its there already no harm done.
apt-get update
apt-get -y install git python3-cherrypy3 python3-mpd2 python3-pychromecast
Lastly the sed updates on the service record had to be bit smarter as they needed to sub a user and home directory.. the old approach in that template was assuming the home was in /home and really that can't be done any longer. The user could be anywhere now given this new model
create a user-specific variant of service file
using % as sed delimiter as paths use "/"
sed -e "s%USER%${HOME_USER}%g"
-e "s%HOME%${HOME_DIR}%g"
${HOME_DIR}/mpd2chromecast/mpd2chromecast.service >/tmp/mpd2chromecast.service
Thanks for all the troubleshooting you went through and apologies for not being able to chime in earlier. I'll do more testing on moode tonight and tackle volumio tomorrow.. thats always got some more nonsense to address

Changes now made for Volumio, tested (painfully) and pushed.
Volumio as usual lags behind on rpi images. So the new changes now source the /etc/os-release file to get the ${VERSION_ID} env var... if that is >= 12 (Bookworm or later), it pulls in packages from apt only. Not sure if the intention of the /etc/os-release  is to act as an env file, but it most definitely works that way when sourced.
For everything else (Volumio or older Moode installs), it will detect the VERSION_ID < 12, pull in python, pip3 and git only from apt and use pip then for the python modules installation.
In fairness, the new approach of pushing the official apt packages is just much faster with the install now happening quite quickly on Bookworm (the apt-get update is the slowest part of that).
The pip approach takes a ridiculuously long time on my pi4 between whatever it's doing to pull the module code and probably compiling some of the Python C-source code along the way.  Even to move to a pyenv approach here would get worse again as we'd end up compiling Python from scratch on the rpi.
The new changes to make things play nice between Moode and Volumio or more correctly Bookworm versus older Raspi-OS versions:
# source the /etc/os-release file to
# collect various platform variables
. /etc/os-release

# refresh package sources
apt-get update

if [ "${VERSION_ID}" -ge "12" ]
then
    # install all packages from apt
    # bookworm and presumably beyond
    echo "Performing Bookworm or later package install (all from apt)"
    apt-get -y install git python3-pip python3-cherrypy3 python3-mpd2 python3-pychromecast
else
    # everything prior to bookworm
    # git, python/pip from apt and pip for the modules
    echo "Performing pre-Bookworm install (pip3 for python modules)"
    apt-get -y install git python3-pip
    pip3 install pychromecast cherrypy python-mpd2
fi


Update parameters for Deploy-ASC-Config initiative

This PR moves the logic for determining values for resourceGroupName and resourceGroupLocation parameters associated wtih the /providers/Microsoft.Authorization/policyDefinitions/ffb6f416-7bd2-4488-8828-56585fef2be9 Policy Definition referenced in Deploy-ASC-Config Policy Set Definition.
This is to ensure the configured values are determined through the assignment, rather than with statically assigned default values within the Policy Set Definition.
This is to fix a downstream issue when converting this Policy Set Definition for use within the ES Terraform module.

@hjscherer do we need to update Trey Research? This one didn't come up when I was checking for references to the Deploy-ASC-Config Policy Set Definition.


Updated tablib links and usage

tablib recently changed home (code and docs).

I cannot explain the test failures on Travis, any hint?

@claudep yes, see here: https://github.com/django-import-export/django-import-export/pull/1056/commits/a23478c005c7b114a14607819944c643bd0351d0

@claudep changes for tablib look great. I've raised a PR including only the fix for Travis https://github.com/django-import-export/django-import-export/pull/1062

@claudep can you please rebase your branch now that we have included the Travis fix?

Done, I quickly rebased without addressing your other comments. Will do that tonight.

Coverage increased (+0.1%) to 95.915% when pulling c863ed978adab9cb31ef9bce76b673c9408a176e on claudep:tablib into 3f9a430ea3f67791197592d48e6db7379d00e3b3 on django-import-export:master.

Coverage increased (+0.1%) to 95.915% when pulling c863ed978adab9cb31ef9bce76b673c9408a176e on claudep:tablib into 3f9a430ea3f67791197592d48e6db7379d00e3b3 on django-import-export:master.

I think this is a first step in supporting tablib > 0.14. Feel free to ping me in every ticket where tablib 1.0 broke django-import-export.

I plan to add a new format.is_available API to test for format availability, but I don't know if you prefer that commit in this PR or in a new one after this one has been committed.


Add leungmichael.com

Project details:

Club: Austin High School
Name: leungmichael.com
Description: Leungmichael.com is just a personal website I made from the skills I learned at HackEDU's Hack Camp. On this website, I will be posting current and already finished coding projects.
URL: http://leungmichael.com/
GitHub: https://github.com/MiLeung/MiLeung.github.io
Authors:

Michael Leung

:shipit:

Awesome! I'll cherry pick this over to master when I get to a computer.
--
Zach Latta
http://zachlatta.com
https://github.com/zachlatta
https://twitter.com/zachlatta
On Aug 18, 2015, 11:53 PM -0700, Michael<EMAIL_ADDRESS>wrote:

Project details:
Club: Austin High School
Name: leungmichael.com
Description: Leungmichael.com is just a personal website I made from the skills I learned at HackEDU's Hack Camp. On this website, I will be posting current and already finished coding projects.
URL:http://leungmichael.com/
GitHub:https://github.com/MiLeung/MiLeung.github.io
Authors:
Michael Leung
You can view, comment on, or merge this pull request online at:
https://github.com/hackedu/shipped/pull/76
Commit Summary
projects: add leungmichael.com
File Changes
A_data/projects/austin_high_school/leungmichael.com.yml(https://github.com/hackedu/shipped/pull/76/files#diff-0)(6)
Patch Links:
https://github.com/hackedu/shipped/pull/76.patch
https://github.com/hackedu/shipped/pull/76.diff
—
Reply to this email directly orview it on GitHub(https://github.com/hackedu/shipped/pull/76).

By the way, my club should be HackEDU Hack Camp!
On Wed, Aug 19, 2015 at 6:08 PM, Zach Latta<EMAIL_ADDRESS>wrote:

Awesome! I'll cherry pick this over to master when I get to a computer.
--
Zach Latta
http://zachlatta.com
https://github.com/zachlatta
https://twitter.com/zachlatta
On Aug 18, 2015, 11:53 PM -0700, Michael<EMAIL_ADDRESS>wrote:

Project details:
Club: Austin High School
Name: leungmichael.com
Description: Leungmichael.com is just a personal website I made from the
skills I learned at HackEDU's Hack Camp. On this website, I will be posting
current and already finished coding projects.
URL:http://leungmichael.com/
GitHub:https://github.com/MiLeung/MiLeung.github.io
Authors:
Michael Leung
You can view, comment on, or merge this pull request online at:
https://github.com/hackedu/shipped/pull/76
Commit Summary
projects: add leungmichael.com
File Changes
A_data/projects/austin_high_school/leungmichael.com.yml(
https://github.com/hackedu/shipped/pull/76/files#diff-0)(6)
Patch Links:
https://github.com/hackedu/shipped/pull/76.patch
https://github.com/hackedu/shipped/pull/76.diff
—
Reply to this email directly orview it on GitHub(
https://github.com/hackedu/shipped/pull/76).

—
Reply to this email directly or view it on GitHub
https://github.com/hackedu/shipped/pull/76#issuecomment-132841932.

Cherry picked to master with small modifications in 38d2f6327c76ce7b6e74ff2e0de828727fbfa3cd.
Thanks Michael!

Would love to talk about the possibility! I'll shoot you an email.
On Wed, Aug 19, 2015 at 6:40 PM, Michael Leung<EMAIL_ADDRESS>wrote:

By the way, my club should be HackEDU Hack Camp!
On Wed, Aug 19, 2015 at 6:08 PM, Zach Latta<EMAIL_ADDRESS>wrote:

Awesome! I'll cherry pick this over to master when I get to a computer.
--
Zach Latta
http://zachlatta.com
https://github.com/zachlatta
https://twitter.com/zachlatta
On Aug 18, 2015, 11:53 PM -0700, Michael<EMAIL_ADDRESS>,
wrote:

Project details:
Club: Austin High School
Name: leungmichael.com
Description: Leungmichael.com is just a personal website I made from
the
skills I learned at HackEDU's Hack Camp. On this website, I will be
posting
current and already finished coding projects.
URL:http://leungmichael.com/
GitHub:https://github.com/MiLeung/MiLeung.github.io
Authors:
Michael Leung
You can view, comment on, or merge this pull request online at:
https://github.com/hackedu/shipped/pull/76
Commit Summary
projects: add leungmichael.com
File Changes
A_data/projects/austin_high_school/leungmichael.com.yml(
https://github.com/hackedu/shipped/pull/76/files#diff-0)(6)
Patch Links:
https://github.com/hackedu/shipped/pull/76.patch
https://github.com/hackedu/shipped/pull/76.diff
—
Reply to this email directly orview it on GitHub(
https://github.com/hackedu/shipped/pull/76).

—
Reply to this email directly or view it on GitHub
https://github.com/hackedu/shipped/pull/76#issuecomment-132841932.

—
Reply to this email directly or view it on GitHub
https://github.com/hackedu/shipped/pull/76#issuecomment-132846522.

--
Zach Latta
hackEDU |<EMAIL_ADDRESS>


Rebase on https://github.com/kubevirt/libguestfs-appliance

We should consume https://github.com/kubevirt/libguestfs-appliance as the base image for this.
Reasoning is that somebody is taking care of the appliance, we can benefit from this

/remove-lifecycle stale

/lifecycle frozen

Fixed by https://github.com/kubevirt/kubevirt-tekton-tasks/pull/108


Allocation of 989331456 exceeds 10% of free system memory.

my memory is 8 GB (DDR4 2400MHz),however it's still not enough.how can i deal with this problem?
C:\Users\jack\Desktop>python lal.python
2020-05-22 21:32:45.116443: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'cudart64_101.dll'; dlerror: cudart64_101.dll not found
2020-05-22 21:32:45.123360: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.
Looking for C:\Users\jack\.keras-ocr\craft_mlt_25k.h5
2020-05-22 21:32:49.432400: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library nvcuda.dll
2020-05-22 21:32:49.655481: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1561] Found device 0 with properties:
pciBusID: 0000:08:00.0 name: GeForce GTX 1070 Ti computeCapability: 6.1
coreClock: 1.683GHz coreCount: 19 deviceMemorySize: 8.00GiB deviceMemoryBandwidth: 238.66GiB/s
2020-05-22 21:32:49.669996: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'cudart64_101.dll'; dlerror: cudart64_101.dll not found
2020-05-22 21:32:49.679463: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'cublas64_10.dll'; dlerror: cublas64_10.dll not found
2020-05-22 21:32:49.689185: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'cufft64_10.dll'; dlerror: cufft64_10.dll not found
2020-05-22 21:32:49.698681: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'curand64_10.dll'; dlerror: curand64_10.dll not found
2020-05-22 21:32:49.708758: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'cusolver64_10.dll'; dlerror: cusolver64_10.dll not found
2020-05-22 21:32:49.720601: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'cusparse64_10.dll'; dlerror: cusparse64_10.dll not found
2020-05-22 21:32:49.864803: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudnn64_7.dll
2020-05-22 21:32:49.869587: W tensorflow/core/common_runtime/gpu/gpu_device.cc:1598] Cannot dlopen some GPU libraries. Please make sure the missing libraries mentioned above are installed properly if you would like to use GPU. Follow the guide at https://www.tensorflow.org/install/gpu for how to download and setup the required libraries for your platform.
Skipping registering GPU devices...
2020-05-22 21:32:49.891023: I tensorflow/core/platform/cpu_feature_guard.cc:143] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
2020-05-22 21:32:49.910393: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x23463246ba0 initialized for platform Host (this does not guarantee that XLA will be used). Devices:
2020-05-22 21:32:49.919019: I tensorflow/compiler/xla/service/service.cc:176]   StreamExecutor device (0): Host, Default Version
2020-05-22 21:32:49.925290: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1102] Device interconnect StreamExecutor with strength 1 edge matrix:
2020-05-22 21:32:49.933877: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1108]
WARNING:tensorflow:From C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\keras\backend.py:5871: sparse_to_dense (from tensorflow.python.ops.sparse_ops) is deprecated and will be removed in a future version.
Instructions for updating:
Create a `tf.sparse.SparseTensor` and use `tf.sparse.to_dense` instead.
Looking for C:\Users\jack\.keras-ocr\crnn_kurapan.h5
2020-05-22 21:32:52.801406: W tensorflow/core/framework/cpu_allocator_impl.cc:81] Allocation of 989331456 exceeds 10% of free system memory.
2020-05-22 21:32:53.587524: W tensorflow/core/framework/cpu_allocator_impl.cc:81] Allocation of 989331456 exceeds 10% of free system memory.
2020-05-22 21:32:55.642606: W tensorflow/core/framework/cpu_allocator_impl.cc:81] Allocation of 494403584 exceeds 10% of free system memory.
2020-05-22 21:32:56.336303: W tensorflow/core/framework/cpu_allocator_impl.cc:81] Allocation of 494403584 exceeds 10% of free system memory.
2020-05-22 21:33:05.276918: W tensorflow/core/framework/cpu_allocator_impl.cc:81] Allocation of 741605376 exceeds 10% of free system memory.

plus, thers has CUDA9.2 , Need i update it to CUDA10.1?

Hi there!
If you're using TensorFlow 2.x, please note that CUDA 9 is not supported. So if you wish to use the GPU, you will need to upgrade.
That said, the logs you're pointing to here are warnings indicating that you're using a large amount of system memory but are normal. Once you get your GPU configuration up and running, I expect they'll go away.
Hope this helps!

Closing as this does not appear to point to a bug or feature request for keras-ocr.

Hi, thanks!
when i update CUDA9.2 to CUDA10.1 and cudnn, the  version of cudnn loaded is 7.5.0,however there  has cudnn v7.1.4 for  CUDA9.2 and  has cudnn v7.6.5 for  CUDA10.1.
2020-05-23 22:23:09.758126: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudart64_101.dll
Looking for C:\Users\有对象真好\.keras-ocr\craft_mlt_25k.h5
2020-05-23 22:23:14.446656: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library nvcuda.dll
2020-05-23 22:23:14.470724: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1561] Found device 0 with properties:
pciBusID: 0000:09:00.0 name: GeForce GTX 1070 Ti computeCapability: 6.1
coreClock: 1.683GHz coreCount: 19 deviceMemorySize: 8.00GiB deviceMemoryBandwidth: 238.66GiB/s
2020-05-23 22:23:14.475854: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudart64_101.dll
2020-05-23 22:23:14.501773: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cublas64_10.dll
2020-05-23 22:23:14.515525: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cufft64_10.dll
2020-05-23 22:23:14.527552: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library curand64_10.dll
2020-05-23 22:23:14.539852: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cusolver64_10.dll
2020-05-23 22:23:14.555317: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cusparse64_10.dll
2020-05-23 22:23:14.584781: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudnn64_7.dll
2020-05-23 22:23:14.588281: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1703] Adding visible gpu devices: 0
2020-05-23 22:23:14.591930: I tensorflow/core/platform/cpu_feature_guard.cc:143] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
2020-05-23 22:23:14.607133: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x24171b62870 initialized for platform Host (this does not guarantee that XLA will be used). Devices:
2020-05-23 22:23:14.610707: I tensorflow/compiler/xla/service/service.cc:176]   StreamExecutor device (0): Host, Default Version
2020-05-23 22:23:14.619303: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1561] Found device 0 with properties:
pciBusID: 0000:09:00.0 name: GeForce GTX 1070 Ti computeCapability: 6.1
coreClock: 1.683GHz coreCount: 19 deviceMemorySize: 8.00GiB deviceMemoryBandwidth: 238.66GiB/s
2020-05-23 22:23:14.632733: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudart64_101.dll
2020-05-23 22:23:14.637275: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cublas64_10.dll
2020-05-23 22:23:14.643415: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cufft64_10.dll
2020-05-23 22:23:14.648087: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library curand64_10.dll
2020-05-23 22:23:14.654401: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cusolver64_10.dll
2020-05-23 22:23:14.658880: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cusparse64_10.dll
2020-05-23 22:23:14.665943: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudnn64_7.dll
2020-05-23 22:23:14.671485: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1703] Adding visible gpu devices: 0
2020-05-23 22:23:15.173514: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1102] Device interconnect StreamExecutor with strength 1 edge matrix:
2020-05-23 22:23:15.176237: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1108]      0
2020-05-23 22:23:15.180192: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1121] 0:   N
2020-05-23 22:23:15.186064: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1247] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 6285 MB memory) -> physical GPU (device: 0, name: GeForce GTX 1070 Ti, pci bus id: 0000:09:00.0, compute capability: 6.1)
2020-05-23 22:23:15.200484: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x2411a2f3d10 initialized for platform CUDA (this does not guarantee that XLA will be used). Devices:
2020-05-23 22:23:15.206422: I tensorflow/compiler/xla/service/service.cc:176]   StreamExecutor device (0): GeForce GTX 1070 Ti, Compute Capability 6.1
2020-05-23 22:23:17.259729: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudnn64_7.dll
2020-05-23 22:23:18.011912: E tensorflow/stream_executor/cuda/cuda_dnn.cc:319] Loaded runtime CuDNN library: 7.5.0 but source was compiled with: 7.6.5.  CuDNN library major and minor version needs to match or have higher minor version in case of CuDNN 7.0 or later version. If using a binary install, upgrade your CuDNN library.  If building from sources, make sure the library loaded at runtime is compatible with the version specified during compile configuration.
2020-05-23 22:23:18.032912: E tensorflow/stream_executor/cuda/cuda_dnn.cc:319] Loaded runtime CuDNN library: 7.5.0 but source was compiled with: 7.6.5.  CuDNN library major and minor version needs to match or have higher minor version in case of CuDNN 7.0 or later version. If using a binary install, upgrade your CuDNN library.  If building from sources, make sure the library loaded at runtime is compatible with the version specified during compile configuration.
Traceback (most recent call last):
  File "lal.python", line 8, in <module>
    boxes = detector.detect(images=[image])[0]
  File "C:\ProgramData\Anaconda3\lib\site-packages\keras_ocr\detection.py", line 679, in detect
    boxes = getBoxes(self.model.predict(np.array(images), **kwargs),
  File "C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\keras\engine\training.py", line 88, in _method_wrapper
    return method(self, *args, **kwargs)
  File "C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\keras\engine\training.py", line 1268, in predict
    tmp_batch_outputs = predict_function(iterator)
  File "C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\eager\def_function.py", line 580, in __call__
    result = self._call(*args, **kwds)
  File "C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\eager\def_function.py", line 650, in _call
    return self._concrete_stateful_fn._filtered_call(canon_args, canon_kwds)  # pylint: disable=protected-access
  File "C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\eager\function.py", line 1665, in _filtered_call
    self.captured_inputs)
  File "C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\eager\function.py", line 1746, in _call_flat
    ctx, args, cancellation_manager=cancellation_manager))
  File "C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\eager\function.py", line 598, in call
    ctx=ctx)
  File "C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\eager\execute.py", line 60, in quick_execute
    inputs, attrs, num_outputs)
tensorflow.python.framework.errors_impl.UnknownError:  Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above.
         [[node model_1/basenet.slice1.0/Conv2D (defined at C:\ProgramData\Anaconda3\lib\site-packages\keras_ocr\detection.py:679) ]] [Op:__inference_predict_function_3683]

Function call stack:
predict_function

It is actually a memory error(your python may stopped) and you need to increase virtual memory about 10~50GB


Error donload file with AzureStorageExplorer

I have this error while I'm trying to download a file
{
"name": "Error",
"message": "getaddrinfo ENOTFOUND saeusceprod01.blob.core.windows.net saeusceprod01.blob.core.windows.net:443",
"stack": "Error: getaddrinfo ENOTFOUND saeusceprod01.blob.core.windows.net saeusceprod01.blob.core.windows.net:443\n    at errnoException (dns.js:50:10)\n    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:92:26)",
"code": "ENOTFOUND",
"errno": "ENOTFOUND",
"syscall": "getaddrinfo",
"hostname": "saeusceprod01.blob.core.windows.net",
"host": "saeusceprod01.blob.core.windows.net",
"port": "443",
"innerError": {
"code": "ECONNRESET",
"errno": "ECONNRESET",
"syscall": "read"
}
}

Hi @TonyPuga , are you working behind a proxy?

Closing due to lack of response. Please open a new issue if you are still having problems.


skybox: Improve default skybox color

Closes #7481
This PR changes the default overworld skybox color from #8AD2DF to #B9D6FF, which is less cyan and gives a more realistic haze/fog appearance.
Before:

After:

Can you provide screenshots without 117?

117 HD is disabled in the screenshots. Skybox and GPU plugins are enabled.

I agree this is an improvement, though I'd like to see what a couple other colors might look like. Searching online yields a number of results that lie somewhere between these two colors. One easily-replicated example would be the CSS colors lightskyblue ( #87cefa) and skyblue ( #87ceeb). Alternatively, what does using a color somewhere between the current and proposed look like? Let's say, a perfect average between them, like  #a1d4ef?

Here are the alternative colors. I chose #B9D6FF because it is the default "117 HD Blue" color from the 117 HD plugin (source). Of the proposed colors, it is still my favorite because with the limited render distance in OSRS, I feel the skybox acts more as a haze/fog layer, rather than clear blue sky. I am definitely still open to suggestions though.
#87CEFA:

#87CEEB:

#A1D4EF:


[Frontend] The lack of a device specific decomposition logic

We currently serve all backend devices in a way that they all support an identical set of quantum gates. This design assumption would lead to the failure of decomposition rules for the OpenQasm3/Braket device. We may need to implement a device specific decomposition logic for every supported backend devices in the frontend to properly tackle this issue.
Check the test_unsupported_gate_braket test unit in test_aws_braket_devices.py for an example.

Possible implementation
    def __call__(self, *args, **kwargs):
        if isinstance(self, qml.QNode):
            if self.device.short_name not in QFunc.RUNTIME_DEVICES:
                raise CompileError(
                    f"The {self.device.short_name} device is not "
                    "supported for compilation at the moment."
                )
            ...
            # instead of generating the same QJITDevice with the same supported operations
            # we can easily pass the list of supported operations from the QNode.
            device = QJITDevice(
                self.device.shots, self.device.wires, self.device.short_name, backend_kwargs
                # we can easily access:
               , self.device.operations
               , self.device.observables
            )


Tls connection

Add units tests from #35

@x-cubed what do you think? CC @Digi-Cazter

Going to switch to https://github.com/nicdex/node-eventstore-client (supports TLS and Persistent Subscriptions)

Thanks @morrislaptop, that looks good.
It's a bit concerning that the tests need to disable NODE_TLS_REJECT_UNAUTHORIZED, but I think that's the simplest approach for the moment. We'd need to generate a new certificate and install it as a trusted root in a Docker container running the client to get around that.


Add android-emulator-runner tests to CI

Codecov Report

Merging #18 (ef4ff48) into main (6a95ac4) will not change coverage.
The diff coverage is n/a.

:exclamation: Current head ef4ff48 differs from pull request most recent head 0cac944. Consider uploading reports for the commit 0cac944 to get more accurate results

@@           Coverage Diff           @@
##             main      #18   +/-   ##
=======================================
  Coverage   13.71%   13.71%
=======================================
  Files          17       17
  Lines         605      605
  Branches       79       79
=======================================
  Hits           83       83
  Misses        516      516
  Partials        6        6

Continue to review full report at Codecov.

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


How can I handle the case when the website tries to open a new browser tab?

Currently my MAUI app simply does nothing when I click a button which opens a new tab using a browser.
Document Details
⚠ Do not edit this section. It is required for learn.microsoft.com ➟ GitHub issue linking.

ID: ace91785-d304-f161-408e-34511fb75ce3
Version Independent ID: ace91785-d304-f161-408e-34511fb75ce3
Content: WebView - .NET MAUI
Content Source: docs/user-interface/controls/webview.md
Product: dotnet-mobile
Technology: dotnet-maui
GitHub Login: @davidbritch
Microsoft Alias: dabritch

Hi @nicholasyin
I'm not entirely sure what you're trying to do here. Can you elaborate?

Hi @nicholasyin
I'm not entirely sure what you're trying to do here. Can you elaborate?

Sorry about missing the details. I'm using a WebView control to display a remote website, where there's a button whose behavior on a web browser is to open a new tab to display an image. When using the WebView to view the website, clicking the button does nothing on an Android emulator. When running on Windows, clicking the button launches the web browser and displays the image correctly, though.

Hi @nicholasyin
WebView on Android doesn't support tabs. That's not a .NET MAUI limitation - it's a limitation of Android's WebView control. So there's only really two solutions that spring to mind:

Add a bit of code that opens what you want to open in a new tab in the system browser instead.
Add a bit of code that replaces the content displayed in the WebView with the content that should be opening in a new tab.

Both are possible. (2) is less code than (1).

Hi @nicholasyin
WebView on Android doesn't support tabs. That's not a .NET MAUI limitation - it's a limitation of Android's WebView control. So there's only really two solutions that spring to mind:

Add a bit of code that opens what you want to open in a new tab in the system browser instead.
Add a bit of code that replaces the content displayed in the WebView with the content that should be opening in a new tab.

Both are possible. (2) is less code than (1).

Thanks for the reply David.
I actually thought about solution 1. The problem is that I need to be able to capture the event when users click the link from inside the WebView control so that I can kind of cancel it and replace with the action to open the system browser, passing the URL.
I don't quite understand your solution 2 though.

Actually I think the bottleneck for both 1 & 2 solutions is the same, i.e. handling the 'new tab' event. Did you mean to write code using native Android, i.e. Java, or using C# in MAUI? Mind sharing if it's C#? I've no idea how to get notified of the action to open a new tab inside WebView.

It's native Android code in C#. I'll share a zip.
@nicholasyin
MyWebViewApp1.zip - look at MauiProgram.cs. and Platforms/Android/MyWebChromeClient.
MyWebViewApp2.zip - look at MauiProgram.cs

Thanks for sharing. Sorry about no update.


linux SDL canvas offset bug

fixes #2117
Where the canvas was at offset when window resolution was greater than system resolution.

As has been pointed out, the padding won't account for a menu bar that uses a font much larger than the standard used in menu for GUI editor and world editor tools. I could call for menu height but no menu exists yet. I suggest we merge the padding hack until I can figure out exactly what the heck is going on with the canvas when a menu is added.

The hack is no longer necessary.

New problem resulting from this. Now the offset is positive and only occurs when you resize manually. This is the polar opposite problem of the problem I was attempting to solve in the first place.

I don't know why the magic number 10 is necessary for it to play nice in gnome and fluxbox but it is. The magic number hack makes for smoother experience on linux than without it at least on those two managers.


Added a command called "TransparentPart", which allows you to make individual parts and more transparent

Added a command called "TransparentPart", which allows you to make individual parts including all accessories and the face.
I've tested the command, it works both on R15 and R6. I've also made it that if someone would be specifying "LeftArm" on a R15 model, that it would delete "LeftArm" from the given input and add "LeftUpperArm, LeftLowerLeg and LeftHand". And for R6 it does the opposite, it would keep "LeftArm" and remove the R15 ones.
However, the part at where I clean up the input, is actually not that optimal. I think I should just put a check if it is R15 and then R6 and then remove everything that would be from R15, and for removing the R6 things, convert them into R15.
Regarding this individual parts thing, I think whenever the actual function for it seems more optimal to keep as a function in Adonis, that it should be implemented, so that more commands can easily be created, without having to copy paste the entire part validations over and over again.

If this gets merged, I would consider removing the all argument from this :transparentpart command. And make it so that :transparency makes everything transparent, including face and accessories. And let :transparentpart be the more advanced version of :transparency

However, the part at where I clean up the input, is actually not that optimal. I think I should just put a check if it is R15 and then R6 and then remove everything that would be from R15, and for removing the R6 things, convert them into R15.

Done that now

Make it so that if you say LeftArm on an R15 model, it changes the transparency of the upper and lower left arm, and the opposite on r6 models

Make it so that if you say LeftArm on an R15 model, it changes the transparency of the upper and lower left arm, and the opposite on r6 models

It is already doing that?


Rounding with no warnings when using BoolVar (and probably IntVar) in a linear context

Hi,
I tried to solve problem which was originally in an integer setting, in a linear continuous settings, assuming that BoolVars would be just treated as variables in [0,1] instead of {0;1}. Everything compiled and executed fine and fast. The problem was that the solution_value() returned by all variables had been silently rounded, which I only found after a long investigation on why some constraints were not satisfied (most of my constraints were satisfied, and it was a constraint that I prettyprinted as "(lb=0) <= (coeff=1)(value=1) + (coeff=1)(value=1) <= (ub=1)"  after a Solve() call (and I checked with gdb that there were no other variables involved in the constraints) that completely puzzled me; no matter whether GLOP_LINEAR_PROGRAMMING or GLPK_LINEAR_PROGRAMMING was used).
It was only when I tried NumVars that I realized that the offending constraints were in fact round(0.5)+round(0.5) ...
It would be nice to either have a warning when using Bool or Int in a linear context and/or treat them as NumVars without rounding
Thanks!

We have added unrounded_solution_value().
I agree with the warning, but it cannot be too verbose.


PostgresSQL Interactive: Error in interactive-create-validation-parameters.sh

Thanks @szarnyasg to checking my issue.
I got an error about Error: Could not find or load main class com.ldbc.driver.Client
when implementing driver/interactive-create-validation-parameters.sh.
I checked the data loaded by ldbc_snb_datagen (CSVMergeForeign serializer)
and verified that driver worked with modified command
Is there a need to modify interactive-create-validation-parameters.sh?

This is currently broken on dev, we're working on this in the coming weeks. If you need something working this year, I'd suggest using the stable branches across the LDBC repos.

@szarnyasg


typo: build -> built

Signed-off-by: Jin-Hwan Jeong<EMAIL_ADDRESS>

[merge]
Thanks @jhjeong-kr !


Examples of using Compute with RealityView and MetalView

Would you be interested in taking PRs for examples showing how to display a texture created by a compute shader in a RealityView and a MetalView? I've been trying out some code and I can clean it up to make it into stand alone examples in the Examples-folder if that would be of any help.

Happy to take a look. It would be great if the sample was pretty small though.

See PR #11 for a RealityKit example.
I can also make an example of how to use a MTKView where you can draw to the entire view and not just a texture on a plane. Maybe the GameOfLife example can be reused for that?
One thing I'm not really sure on how to do is that the GameOfLife example uses two textures that swaps between being input and output but with both RealityView and MTKView you have just one output texture. I guess one needs to blit from the resulting texture to the actual output texture like:
guard let blitEncoder = commandBuffer.makeBlitCommandEncoder() else {
   fatalError("could not create blit encoder")
}

blitEncoder.copy(from: outputTexture, to: renderTexture)
blitEncoder.endEncoding()

but then again one needs either to create a new MTLCommandBuffer or expose the one Compute.Task already have.

I tested making Task.commandBuffer public and then adding a blit in the end like this.
It seems to work but strangely i get worse performance than just creating a new command buffer and doing the blit on that.
     try compute.task { task in
                try task { dispatch in
                    try dispatch(pipeline: somePipeline,
                                 threadgroupsPerGrid: MTLSize(width: outputTexture.width, height: outputTexture.height, depth: 1),
                                 threadsPerThreadgroup: MTLSize(width: threadsPerThreadgroupWidth, height: threadsPerThreadgroupHeight, depth: 1))
                }

                guard let blitEncoder = task.commandBuffer.makeBlitCommandEncoder() else {
                    throw ConfigurationError("could not create blit encoder")
                }

                blitEncoder.copy(from: outputTexture, to: renderTexture)
                blitEncoder.endEncoding()
            }


Arrangement and execution of the meeting (issue #219 related)

The goal is to execute a meeting on dynamic  systems programming

Issue can be closed


feat: add by suffix to last updated timestamp

This PR adds extra text to the last updated timestamp by ejecting the PageEdit component.
Closes #90

Image optimization came back clean!
Vuepress build was successful!
No markdown files were changed, so no page checks were run!

Image optimization came back clean!
Vuepress build was successful!
No markdown files were changed, so no page checks were run!

Thank you very much!