docs: review google vertex integration

Proposed Changes

fix https://github.com/deepset-ai/haystack/issues/7136
fix https://github.com/deepset-ai/haystack/issues/7189

title: Google Vertex
excerpt: Google Vertex integration for Haystack
category: placeholder-integrations-api
slug: integrations-google-vertex
parentDoc:
order: 100
hidden: false

Module haystack_integrations.components.generators.google_vertex.gemini

VertexAIGeminiGenerator
@component
class VertexAIGeminiGenerator()

VertexAIGeminiGenerator enables text generation using Google Gemini models.
VertexAIGeminiGenerator supports both gemini-pro and gemini-pro-vision models.
Prompting with images requires gemini-pro-vision. Function calling, instead, requires gemini-pro.
Usage example:
from haystack_integrations.components.generators.google_vertex import VertexAIGeminiGenerator

gemini = VertexAIGeminiGenerator(project_id=project_id)
result = gemini.run(parts = ["What is the most interesting thing you know?"])
for answer in result["answers"]:
    print(answer)

>>> 1. **The Origin of Life:** How and where did life begin? The answers to this ...
>>> 2. **The Unseen Universe:** The vast majority of the universe is ...
>>> 3. **Quantum Entanglement:** This eerie phenomenon in quantum mechanics allows ...
>>> 4. **Time Dilation:** Einstein's theory of relativity revealed that time can ...
>>> 5. **The Fermi Paradox:** Despite the vastness of the universe and the ...
>>> 6. **Biological Evolution:** The idea that life evolves over time through natural ...
>>> 7. **Neuroplasticity:** The brain's ability to adapt and change throughout life, ...
>>> 8. **The Goldilocks Zone:** The concept of the habitable zone, or the Goldilocks zone, ...
>>> 9. **String Theory:** This theoretical framework in physics aims to unify all ...
>>> 10. **Consciousness:** The nature of human consciousness and how it arises ...

VertexAIGeminiGenerator.__init__
def __init__(*,
             model: str = "gemini-pro-vision",
             project_id: str,
             location: Optional[str] = None,
             generation_config: Optional[Union[GenerationConfig,
                                               Dict[str, Any]]] = None,
             safety_settings: Optional[Dict[HarmCategory,
                                            HarmBlockThreshold]] = None,
             tools: Optional[List[Tool]] = None)

Multi-modal generator using Gemini model via Google Vertex AI.
Authenticates using Google Cloud Application Default Credentials (ADCs).
For more information see the official Google documentation.
Arguments:

project_id: ID of the GCP project to use.
model: Name of the model to use.
location: The default location to use when making API calls, if not set uses us-central-1.
generation_config: The generation config to use.
Can either be a GenerationConfig
object or a dictionary of parameters.
Accepted fields are:

temperature
top_p
top_k
candidate_count
max_output_tokens
stop_sequences

safety_settings: The safety settings to use. See the documentation
for HarmBlockThreshold
and HarmCategory
for more details.
tools: List of tools to use when generating content. See the documentation for
Tool
the list of supported arguments.

VertexAIGeminiGenerator.to_dict
def to_dict() -> Dict[str, Any]

Serializes the component to a dictionary.
Returns:
Dictionary with serialized data.

VertexAIGeminiGenerator.from_dict
@classmethod
def from_dict(cls, data: Dict[str, Any]) -> "VertexAIGeminiGenerator"

Deserializes the component from a dictionary.
Arguments:

data: Dictionary to deserialize from.

Returns:
Deserialized component.

VertexAIGeminiGenerator.run
@component.output_types(answers=List[Union[str, Dict[str, str]]])
def run(parts: Variadic[Union[str, ByteStream, Part]])

Generates content using the Gemini model.
Arguments:

parts: Prompt for the model.

Returns:
A dictionary with the following keys:

answers: A list of generated content.

Module haystack_integrations.components.generators.google_vertex.captioner

VertexAIImageCaptioner
@component
class VertexAIImageCaptioner()

VertexAIImageCaptioner enables text generation using Google Vertex AI imagetext generative model.
Authenticates using Google Cloud Application Default Credentials (ADCs).
For more information see the official Google documentation.
Usage example:
import requests

from haystack.dataclasses.byte_stream import ByteStream
from haystack_integrations.components.generators.google_vertex import VertexAIImageCaptioner

captioner = VertexAIImageCaptioner(project_id=project_id)

image = ByteStream(data=requests.get("https://raw.githubusercontent.com/silvanocerza/robots/main/robot1.jpg").content)
result = captioner.run(image=image)

for caption in result["captions"]:
    print(caption)

>>> two gold robots are standing next to each other in the desert

VertexAIImageCaptioner.__init__
def __init__(*,
             model: str = "imagetext",
             project_id: str,
             location: Optional[str] = None,
             **kwargs)

Generate image captions using a Google Vertex AI model.
Authenticates using Google Cloud Application Default Credentials (ADCs).
For more information see the official Google documentation.
Arguments:

project_id: ID of the GCP project to use.
model: Name of the model to use.
location: The default location to use when making API calls, if not set uses us-central-1.
Defaults to None.
kwargs: Additional keyword arguments to pass to the model.
For a list of supported arguments see the ImageTextModel.get_captions() documentation.

VertexAIImageCaptioner.to_dict
def to_dict() -> Dict[str, Any]

Serializes the component to a dictionary.
Returns:
Dictionary with serialized data.

VertexAIImageCaptioner.from_dict
@classmethod
def from_dict(cls, data: Dict[str, Any]) -> "VertexAIImageCaptioner"

Deserializes the component from a dictionary.
Arguments:

data: Dictionary to deserialize from.

Returns:
Deserialized component.

VertexAIImageCaptioner.run
@component.output_types(captions=List[str])
def run(image: ByteStream)

Prompts the model to generate captions for the given image.
Arguments:

image: The image to generate captions for.

Returns:
A dictionary with the following keys:

captions: A list of captions generated by the model.

Module haystack_integrations.components.generators.google_vertex.code_generator

VertexAICodeGenerator
@component
class VertexAICodeGenerator()

This component enables code generation using Google Vertex AI generative model.
VertexAICodeGenerator supports code-bison, code-bison-32k, and code-gecko.
Usage example:
    from haystack_integrations.components.generators.google_vertex import VertexAICodeGenerator

    generator = VertexAICodeGenerator(project_id=project_id)

    result = generator.run(prefix="def to_json(data):")

    for answer in result["answers"]:
        print(answer)

    >>> ```python
    >>> import json
    >>>
    >>> def to_json(data):
    >>>   """Converts a Python object to a JSON string.
    >>>
    >>>   Args:
    >>>     data: The Python object to convert.
    >>>
    >>>   Returns:
    >>>     A JSON string representing the Python object.
    >>>   """
    >>>
    >>>   return json.dumps(data)
    >>> ```

VertexAICodeGenerator.__init__
def __init__(*,
             model: str = "code-bison",
             project_id: str,
             location: Optional[str] = None,
             **kwargs)

Generate code using a Google Vertex AI model.
Authenticates using Google Cloud Application Default Credentials (ADCs).
For more information see the official Google documentation.
Arguments:

project_id: ID of the GCP project to use.
model: Name of the model to use.
location: The default location to use when making API calls, if not set uses us-central-1.
kwargs: Additional keyword arguments to pass to the model.
For a list of supported arguments see the TextGenerationModel.predict() documentation.

VertexAICodeGenerator.to_dict
def to_dict() -> Dict[str, Any]

Serializes the component to a dictionary.
Returns:
Dictionary with serialized data.

VertexAICodeGenerator.from_dict
@classmethod
def from_dict(cls, data: Dict[str, Any]) -> "VertexAICodeGenerator"

Deserializes the component from a dictionary.
Arguments:

data: Dictionary to deserialize from.

Returns:
Deserialized component.

VertexAICodeGenerator.run
@component.output_types(answers=List[str])
def run(prefix: str, suffix: Optional[str] = None)

Generate code using a Google Vertex AI model.
Arguments:

prefix: Code before the current point.
suffix: Code after the current point.

Returns:
A dictionary with the following keys:

answers: A list of generated code snippets.

Module haystack_integrations.components.generators.google_vertex.image_generator

VertexAIImageGenerator
@component
class VertexAIImageGenerator()

This component enables image generation using Google Vertex AI generative model.
Authenticates using Google Cloud Application Default Credentials (ADCs).
For more information see the official Google documentation.
Usage example:
from pathlib import Path

from haystack_integrations.components.generators.google_vertex import VertexAIImageGenerator

generator = VertexAIImageGenerator(project_id=project_id)
result = generator.run(prompt="Generate an image of a cute cat")
result["images"][0].to_file(Path("my_image.png"))

VertexAIImageGenerator.__init__
def __init__(*,
             model: str = "imagegeneration",
             project_id: str,
             location: Optional[str] = None,
             **kwargs)

Generates images using a Google Vertex AI model.
Authenticates using Google Cloud Application Default Credentials (ADCs).
For more information see the official Google documentation.
Arguments:

project_id: ID of the GCP project to use.
model: Name of the model to use.
location: The default location to use when making API calls, if not set uses us-central-1.
kwargs: Additional keyword arguments to pass to the model.
For a list of supported arguments see the ImageGenerationModel.generate_images() documentation.

VertexAIImageGenerator.to_dict
def to_dict() -> Dict[str, Any]

Serializes the component to a dictionary.
Returns:
Dictionary with serialized data.

VertexAIImageGenerator.from_dict
@classmethod
def from_dict(cls, data: Dict[str, Any]) -> "VertexAIImageGenerator"

Deserializes the component from a dictionary.
Arguments:

data: Dictionary to deserialize from.

Returns:
Deserialized component.

VertexAIImageGenerator.run
@component.output_types(images=List[ByteStream])
def run(prompt: str, negative_prompt: Optional[str] = None)

Produces images based on the given prompt.
Arguments:

prompt: The prompt to generate images from.
negative_prompt: A description of what you want to omit in
the generated images.

Returns:
A dictionary with the following keys:

images: A list of ByteStream objects, each containing an image.

Module haystack_integrations.components.generators.google_vertex.question_answering

VertexAIImageQA
@component
class VertexAIImageQA()

This component enables text generation (image captioning) using Google Vertex AI generative models.
Authenticates using Google Cloud Application Default Credentials (ADCs).
For more information see the official Google documentation.
Usage example:
from haystack.dataclasses.byte_stream import ByteStream
from haystack_integrations.components.generators.google_vertex import VertexAIImageQA

qa = VertexAIImageQA(project_id=project_id)

image = ByteStream.from_file_path("dog.jpg")

res = qa.run(image=image, question="What color is this dog")

print(res["answers"][0])

>>> white

VertexAIImageQA.__init__
def __init__(*,
             model: str = "imagetext",
             project_id: str,
             location: Optional[str] = None,
             **kwargs)

Answers questions about an image using a Google Vertex AI model.
Authenticates using Google Cloud Application Default Credentials (ADCs).
For more information see the official Google documentation.
Arguments:

project_id: ID of the GCP project to use.
model: Name of the model to use.
location: The default location to use when making API calls, if not set uses us-central-1.
kwargs: Additional keyword arguments to pass to the model.
For a list of supported arguments see the ImageTextModel.ask_question() documentation.

VertexAIImageQA.to_dict
def to_dict() -> Dict[str, Any]

Serializes the component to a dictionary.
Returns:
Dictionary with serialized data.

VertexAIImageQA.from_dict
@classmethod
def from_dict(cls, data: Dict[str, Any]) -> "VertexAIImageQA"

Deserializes the component from a dictionary.
Arguments:

data: Dictionary to deserialize from.

Returns:
Deserialized component.

VertexAIImageQA.run
@component.output_types(answers=List[str])
def run(image: ByteStream, question: str)

Prompts model to answer a question about an image.
Arguments:

image: The image to ask the question about.
question: The question to ask.

Returns:
A dictionary with the following keys:

answers: A list of answers to the question.

Module haystack_integrations.components.generators.google_vertex.text_generator

VertexAITextGenerator
@component
class VertexAITextGenerator()

This component enables text generation using Google Vertex AI generative models.
VertexAITextGenerator supports text-bison, text-unicorn and text-bison-32k models.
Authenticates using Google Cloud Application Default Credentials (ADCs).
For more information see the official Google documentation.
Usage example:
    from haystack_integrations.components.generators.google_vertex import VertexAITextGenerator

    generator = VertexAITextGenerator(project_id=project_id)
    res = generator.run("Tell me a good interview question for a software engineer.")

    print(res["answers"][0])

    >>> **Question:**
    >>> You are given a list of integers and a target sum.
    >>> Find all unique combinations of numbers in the list that add up to the target sum.
    >>>
    >>> **Example:**
    >>>
    >>> ```
    >>> Input: [1, 2, 3, 4, 5], target = 7
    >>> Output: [[1, 2, 4], [3, 4]]
    >>> ```
    >>>
    >>> **Follow-up:** What if the list contains duplicate numbers?

VertexAITextGenerator.__init__
def __init__(*,
             model: str = "text-bison",
             project_id: str,
             location: Optional[str] = None,
             **kwargs)

Generate text using a Google Vertex AI model.
Authenticates using Google Cloud Application Default Credentials (ADCs).
For more information see the official Google documentation.
Arguments:

project_id: ID of the GCP project to use.
model: Name of the model to use.
location: The default location to use when making API calls, if not set uses us-central-1.
kwargs: Additional keyword arguments to pass to the model.
For a list of supported arguments see the TextGenerationModel.predict() documentation.

VertexAITextGenerator.to_dict
def to_dict() -> Dict[str, Any]

Serializes the component to a dictionary.
Returns:
Dictionary with serialized data.

VertexAITextGenerator.from_dict
@classmethod
def from_dict(cls, data: Dict[str, Any]) -> "VertexAITextGenerator"

Deserializes the component from a dictionary.
Arguments:

data: Dictionary to deserialize from.

Returns:
Deserialized component.

VertexAITextGenerator.run
@component.output_types(answers=List[str],
                        safety_attributes=Dict[str, float],
                        citations=List[Dict[str, Any]])
def run(prompt: str)

Prompts the model to generate text.
Arguments:

prompt: The prompt to use for text generation.

Returns:
A dictionary with the following keys:

answers: A list of generated answers.
safety_attributes: A dictionary with the safety scores
of each answer.
citations: A list of citations for each answer.

Module haystack_integrations.components.generators.google_vertex.chat.gemini

VertexAIGeminiChatGenerator
@component
class VertexAIGeminiChatGenerator()

VertexAIGeminiChatGenerator enables chat completion using Google Gemini models.
VertexAIGeminiChatGenerator supports both gemini-pro and gemini-pro-vision models.
Prompting with images requires gemini-pro-vision. Function calling, instead, requires gemini-pro.
Authenticates using Google Cloud Application Default Credentials (ADCs).
For more information see the official Google documentation.
Usage example:
from haystack.dataclasses import ChatMessage
from haystack_integrations.components.generators.google_vertex import VertexAIGeminiChatGenerator

gemini_chat = VertexAIGeminiChatGenerator(project_id=project_id)

messages = [ChatMessage.from_user("Tell me the name of a movie")]
res = gemini_chat.run(messages)

print(res["replies"][0].content)
>>> The Shawshank Redemption

VertexAIGeminiChatGenerator.__init__
def __init__(*,
             model: str = "gemini-pro",
             project_id: str,
             location: Optional[str] = None,
             generation_config: Optional[Union[GenerationConfig,
                                               Dict[str, Any]]] = None,
             safety_settings: Optional[Dict[HarmCategory,
                                            HarmBlockThreshold]] = None,
             tools: Optional[List[Tool]] = None)

VertexAIGeminiChatGenerator enables chat completion using Google Gemini models.
Authenticates using Google Cloud Application Default Credentials (ADCs).
For more information see the official Google documentation.
Arguments:

project_id: ID of the GCP project to use.
model: Name of the model to use, defaults to "gemini-pro-vision".
location: The default location to use when making API calls, if not set uses us-central-1.
Defaults to None.
generation_config: Configuration for the generation process.
See the [GenerationConfig documentation](https://cloud.google.com/python/docs/reference/aiplatform/latest/vertexai.preview.generative_models.GenerationConfig
for a list of supported arguments.
safety_settings: Safety settings to use when generating content. See the documentation
for HarmBlockThreshold
and HarmCategory
for more details.
tools: List of tools to use when generating content. See the documentation for
Tool
the list of supported arguments.

VertexAIGeminiChatGenerator.to_dict
def to_dict() -> Dict[str, Any]

Serializes the component to a dictionary.
Returns:
Dictionary with serialized data.

VertexAIGeminiChatGenerator.from_dict
@classmethod
def from_dict(cls, data: Dict[str, Any]) -> "VertexAIGeminiChatGenerator"

Deserializes the component from a dictionary.
Arguments:

data: Dictionary to deserialize from.

Returns:
Deserialized component.

VertexAIGeminiChatGenerator.run
@component.output_types(replies=List[ChatMessage])
def run(messages: List[ChatMessage])

Prompts Google Vertex AI Gemini model to generate a response to a list of messages.
Arguments:

messages: The last message is the prompt, the rest are the history.

Returns:
A dictionary with the following keys:

replies: A list of ChatMessage objects representing the model's replies.


I cant run umi ocr without running it on cmd

title as it is, using 2.0.1 paddleocr edition on windows10 pro 22h2

This bug occurs in systems where the system language is not Simplified Chinese and will be fixed in the next release. In the meantime, you can manually update the code to fix the bug:

Open UmiOCR-data/main.py with Notepad or any text editor.

Find these lines of code:

    # 尝试获取控制台的输出对象
    try:
        fd = os.open("CONOUT$", os.O_RDWR | os.O_BINARY)
        fp = os.fdopen(fd, "w")
    except Exception as e:
        fp = open(os.devnull, "w")

Add 【, encoding="utf-8"】 after the two "w"s, so it looks like this:

    # 尝试获取控制台的输出对象
    try:
        fd = os.open("CONOUT$", os.O_RDWR | os.O_BINARY)
        fp = os.fdopen(fd, "w", encoding="utf-8")
    except Exception as e:
        fp = open(os.devnull, "w", encoding="utf-8")

Save the file. You should now be able to start the Umi-OCR.exe normally.

thanks!


Rename TruffleHog to lowercase

https://github.com/iterative/helm-charts/pull/128#discussion_r1268480788

Codecov Report
Patch and project coverage have no change.

Comparison is base (329a56a) 100.00% compared to head (0d1de7b) 100.00%.

Additional details and impacted files
@@            Coverage Diff            @@
##              main       #67   +/-   ##
=========================================
  Coverage   100.00%   100.00%
=========================================
  Files            1         1
  Lines          154       154
  Branches         6         6
=========================================
  Hits           154       154

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Do you have feedback about the report comment? Let us know in this issue.


ImageStyle - Fill/stroke color adjustment does not work

Dynamically adjustment the style while rendering features does not work.
See example: https://codesandbox.io/s/cold-silence-lbcpg?file=/main.js
The circles should be red or green, unfortunately they are gray.

RegularShapes are rendered only once (in the constructor call) to an intermediate canvas which is cached.
Changing its style is not supported, there is also no setFill/setStroke. If you need different styles you can create multiple RegularShapes which will be better for your performance anyway.

You can force a render of Circle style by calling .setRadius() after changing other properties.  That would typically be used to size a circle based on a feature property (e.g. population of a city), it is not an efficient way of changing between a small range of colors.

I have a large spread of radius and colors, so I don't know if keeping separate styles in the cache makes sense. Thank you @M393, @mike-000 for the explanation.


error while pip3 install glue:  error in glue setup command: use_2to3 is invalid.

I'm using Python 3.10.6 installed on Ubuntu 22.04
pip3 install glue
Defaulting to user installation because normal site-packages is not writeable
Collecting glue
  Downloading glue-0.13.tar.gz (295 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 295.4/295.4 KB 375.4 kB/s eta 0:00:00
  Preparing metadata (setup.py) ... error
  error: subprocess-exited-with-error

  × python setup.py egg_info did not run successfully.
  │ exit code: 1
  ╰─> [1 lines of output]
      error in glue setup command: use_2to3 is invalid.
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed

× Encountered error while generating package metadata.
╰─> See above for output.

note: This is an issue with the package mentioned above, not pip.
hint: See above for details.

@reisenmachtfreude Can you test with the latest update?

@reisenmachtfreude You are confusing this project with the python library GLUE for multi-dimensional linked-data exploration. See readme on how to install and configure this project.


JSON roundtrip property broken for TxMetadataWithSchema.

Version
fae66a56f33ab7497c19830d3fcf4803173691f4
Description
The JSON encoding roundtrip property is not always satisfied for the TxMetadataWithSchema type.
Here's a PR that demonstrates the failure:

https://github.com/cardano-foundation/cardano-wallet/pull/4646

This appears to be specific to the TxMetadataNoSchema constructor.
Given the following imports from cardano-api:
> import Cardano.Api.TxMetadata

And the following metadata:
> m =
    TxMetadata
      { unTxMetadata = fromList
        [ ( 0
          , TxMetaMap
            [ ( TxMetaText "k", TxMetaText "v1" )
            , ( TxMetaText "k", TxMetaText "v2" )
            ]
          )
        ]
      }

It is possible to perform a round trip with the DetailedSchema option:
> metadataFromJson TxMetadataJsonDetailedSchema
   (metadataToJson TxMetadataJsonDetailedSchema m)
   == Right m
True

But not possible to perform a round trip with the NoSchema option.
> metadataFromJson TxMetadataJsonNoSchema
   (metadataToJson TxMetadataJsonNoSchema m)
   == Right m
False

This is because the NoSchema option encodes a TxMetaMap as a JSON object, which does not permit duplicate keys:
> metadataToJson TxMetadataJsonNoSchema m
Object (fromList [("0",Object (fromList [("k",String "v2")]))])

Which when rendered as JSON produces the following string:
> BL.putStrLn $ Aeson.encode $ metadataToJson TxMetadataJsonNoSchema m
{"0":{"k":"v2"}}

The preservation of only the latest key-value mapping is consistent with the behaviour of Data.Aeson.object.

From the perspective of the upstream cardano-api library, this behaviour seems to be by design:
https://github.com/IntersectMBO/cardano-api/blob/2b5e9485df5a771fef4b15e0e1a4ba936c5d20d6/cardano-api/test/cardano-api-test/Test/Cardano/Api/Metadata.hs#L186
Extract:
-- This uses the \"no schema\" mapping. Note that with this mapping it is /not/
-- the case that any tx metadata can be converted to JSON and back to give the
-- original value.


Playground: fix incorrect search shortcut key

Currently, pressing the K key will trigger global search dialog. Need to add CMD modifier.

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.

TODO: search listening logic should not not be at the component level. Will in the future refactor to probably add a SearchProvider to App.tsx.


Incorrect merge status

Says some checks failed when in fact all are in progress
As seen in #1530

I think this is just b/c a pending state doesn't exist, and that status is just a reduction to success/failure. Should be easy to fix.

Yeah, thought so too. Looking into it. Any idea what an "expected" commit status is?

@BasThomas lol I wondered too! I have no idea. The docs leave a lot to be desired 😐
Thanks for picking this up!
Sent with GitHawk

Yeah exactly 😂

Unrelated, but how do you get the check image? (read: why is it a user avatar sometimes?)

Noticed that too, it’s from this.
Maybe we can find whatever the V3 API is using or figure out if it’s a bug and submit a ticket. This is all that exists.
Sent with GitHawk

Seems to be roughly the same in v3.


[vuex] do not mutate vuex store state outside mutation handlers

Steps to reproduce
<template>
  <div>
    <input name="name" v-model="name" />
  </div>
</template>
<script>
export default {
    computed: {
        name: {
            set(value){
                this.$store.commit('x/setName', value);
            },
            get(){
               return this.$store.state.x.name
            }
        }
    },
}
</script>

Expected behavior
The state should change i guess.
Actual behavior
[vuex] do not mutate vuex store state outside mutation handlers
Module versions (especially the part that's not working):
{
"@feathersjs/authentication-client": "^4.5.9",
"@feathersjs/feathers": "^4.5.9",
"@feathersjs/rest-client": "^4.5.9",
"@feathersjs/socketio-client": "^4.5.9",
"@nuxtjs/axios": "^5.12.2",
"@vue/composition-api": "^1.0.0-beta.16",
"cookie-storage": "^6.1.0",
"cookie-universal-nuxt": "^2.1.4",
"core-js": "^3.6.5",
"feathers-hooks-common": "^5.0.4",
"feathers-vuex": "^3.13.0",
"nouislider": "^14.6.2",
"nuxt": "^2.14.6",
"nuxt-client-init-module": "^0.1.9",
"nuxt-i18n": "^6.15.1",
"socket.io-client": "^2.3.1"
}

Hey :)
I cannot see how this is related to FeathersVuex. Could you provide more information? How do you define your vuex module x? Where is your mutation setName defined?

Hi, @Peras795, feel free to reopen if you have some more information for us.  If you can provide additional information, we'll be able to see if there's a problem with feathers-vuex.

Thank you for you comments I updated the post with new information.

Hi, @Peras795, feel free to reopen if you have some more information for us. If you can provide additional information, we'll be able to see if there's a problem with feathers-vuex.

How can i reopen this issue?

It must be something else causing this.  I don't see you setting state anywhere other than the mutations.

Fixed it using one way binding + Object.assign in the mutation.
I happened because I was changing a nested property in a v-model maybe?

Thanks for the update


[Snyk] Security upgrade php from 7.0-apache to 7.4.26-apache

This PR was automatically created by Snyk using the credentials of a real user.![snyk-top-banner](https://github.com/andygongea/OWASP-Benchmark/assets/818805/c518c423-16fe-447e-b67f-ad5a49b5d123)
Snyk has created this PR to fix 2 vulnerabilities in the dockerfile dependencies of this project.
Keeping your Docker base image up-to-date means you’ll benefit from security fixes in the latest version of your chosen image.
Snyk changed the following file(s):

base/php/php7.0/Dockerfile

We recommend upgrading to php:7.4.26-apache, as this image has only 303 known vulnerabilities. To do this, merge this pull request, then verify your application still works as expected.
Vulnerabilities that will be fixed with an upgrade:

Issue
Score

Server-Side Request Forgery (SSRF) SNYK-DEBIAN9-APACHE2-1585735
  929

Server-Side Request Forgery (SSRF) SNYK-DEBIAN9-APACHE2-1585735
  929

Server-Side Request Forgery (SSRF) SNYK-DEBIAN9-APACHE2-1585735
  929

Server-Side Request Forgery (SSRF) SNYK-DEBIAN9-APACHE2-1585735
  929

Out-of-bounds Write SNYK-DEBIAN9-APACHE2-2322062
  886

[!IMPORTANT]

Check the changes in this PR to ensure they won't cause issues with your project.
Max score is 1000. Note that the real score may have changed since the PR was raised.
This PR was automatically created by Snyk using the credentials of a real user.

Note: You are seeing this because you or someone else with access to this repository has authorized Snyk to open fix PRs.
For more information:
🧐 View latest project report
📜 Customise PR templates
🛠 Adjust project settings
📚 Read about Snyk's upgrade logic

Learn how to fix vulnerabilities with free interactive lessons:
🦉 Server-Side Request Forgery (SSRF)

Checkmarx One – Scan Summary & Details – 4c715ff3-60e8-44c7-92cc-7f1ba8a5a852
New Issues

Severity
Issue
Source File / Package
Checkmarx Insight

Path_Traversal
/base/oracle-java/utils/list-versions.py: 57
Attack Vector

Fixed Issues

Severity
Issue
Source File / Package

Client_DOM_XSS
/electron/CVE-2018-15685/src/index.html: 17

Client_Potential_XSS
/electron/CVE-2018-15685/src/index.html: 17

Path_Traversal
/python/PIL-CVE-2017-8291/app.py: 37

Path_Traversal
/base/oracle-java/utils/list-versions.py: 57


Volume?

How can I set volume (using a rotary encoder) while CarPlay is running?

Hi, this will have to be done at the OS level rather than via CarPlay, it doesn't provide any functionality for that.

Hi, maybe a bit off-topic, but assume carplay is running maps for navigation and music is being played simultaniously via carplay (e.g via spotify), how would one reduce the music volume while nav audio is in progress? Thanks!

@pakikii you can adjust the default volumes here
https://github.com/rhysmorgan134/react-carplay/blob/4884982f97c31a28969c342704cf88db653721a7/src/renderer/src/components/useCarplayAudio.ts#L14
You will then need to rebuild using npm run build:armLinux

Thank you Rhys!


Delist portal doesn't trigger an email

The portal here is not sending a verification email after the form is submitted: https://sender.office.com/
I have tried this two dozen times with different emails and have enlisted other employees and friends to try to see if they can get the portal to work. Nope. We have all checked our junk folders as well.
This is of course frustrating because this is the block message we're getting. Opening up support tickets with Office and Outlook postmaster have been fruitless, they have no idea how to help us.

550 5.7.606 Access denied, banned sending IP [XXX.XX.XXX.XXX]. To request removal from this list please visit https://sender.office.com/ and follow the directions. For more information please go to http://go.microsoft.com/fwlink/?LinkID=526655 (AS16012609) [SN1NAM04FT033.eop-NAM04.prod.protection.outlook.com]

@bcebulla - May we know which Microsoft document link you used in reference to this issue?
Please share it with us so we can investigate further. Thank you.

https://docs.microsoft.com/en-us/microsoft-365/security/office-365-security/use-the-delist-portal-to-remove-yourself-from-the-office-365-blocked-senders-lis

@bcebulla - Thank you for submitting feedback.
I think the best way forward is if you can open a service ticket in your tenant so this can get resolved ASAP. Based on outcome, let me know if it is something that can be called out in the docs.
If you don't mind please keep us posted here on the resolution and I really want to get this information you are discovering back into the docs.

Creating a service ticket was not helpful unfortunately, they did not know how to help us.
I did, however, solve this problem, it might be worth either fixing this issue, or updating your documentation to mention that mailbox providers may be blocking MSFT's email verification email because it's poorly configured.
The problem is that MSFT's form is sending a misconfigured email (https://twitter.com/snootgirl/status/1177037875260612608), so Gmail is blocking MSFT's email, which is super ironic.
I solved this by using a made up email address at http://www.yopmail.com/en/, they'll accept anything. Sure enough, got the email immediately.

@bcebulla - Can you please share with us the MS support ticket number when you were troubleshooting with the MS support rep?
Thank you.

Ticket #: 17404814

@bcebulla - We have already engaged with the author and the product engineering team to look into the Delist portal issue. I will close this issue now but please refer to issue #592 on updates on the status.
Thank you for your contribution to make the docs better! We truly appreciate it.


added Suse

Not much, but I hope it helps :-)

Thanks for the pull request, I added a Suse box in the Vagrantfile. As soon as the tests are passing I will merge.
Thanks for contributing, don't forget to ⭐ the repo!

Hi, which version of Suse did you try.
I tried opensuse-13.2 and I get Could not find the requested service iptables when executing:
- name: Ensure iptables service is enabled & started
  service: name=iptables enabled=yes state=started

Aaaahh!!
Tried SLES 11.3 and SLES 11.4. Servicename is "SuSEfirewall2"
Sorry for that :-(

No worries. What about ip6tables?

I think we can drop that one.  Apparently SuSEfirewall2 takes care of both ipv4 and ipv6.
There are two configuration options in /etc/sysconfig/SuSEfirewall2 for ipv6 though:
FW_IPv6 defaults to the ipv6 support by the Kernel when the option is empty.
FW_IPv6_REJECT_OUTGOING default configuration is yes (rejecting)
So these probably need a "lineinfile"

added 2 "lineinfile"-Blocks

This PR is to incomplete to be able to merge. I don't know SUSE enough to make good calls. Will close.


Update Set-AutoSensitivityLabelPolicy.md

Update per email request

Docs Build status updates of commit 4592592:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

exchange/exchange-ps/exchange/Set-AutoSensitivityLabelPolicy.md
:white_check_mark:Succeeded
View (exchange-ps)

For more details, please refer to the build report.
Note: Broken links written as relative paths are included in the above build report. For broken links written as absolute paths or external URLs, see the broken link report.
For any questions, please:Try searching the docs.microsoft.com contributor guidesPost your question in the Docs support channel


Header changed

Description
header added and changes rectified accordingly.
Type of Changes

Type

:bug: Bug fix

✔
:sparkles: New feature

:hammer: Refactoring

:100: Add tests

:link: Update dependencies

:scroll: Docs

Since you have not answered by now, I will close the PR.


Revise Platformatic DB Authorization docs

Fixes #437.

@mcollina @marcopiraccini This PR is ready for review, but there are a couple of things to note:

I've completely reorganised the Platformatic DB Authorisation docs. I'm sorting out a preview site as it will be much easier for you to review these docs if you can see them in context on the OSS site.
There are lots of TODOs in comments. Most of them won't be addressed in this PR as it's already quite large, but I've noted them as things to be addressed in follow up PRs.

There are conflicts now

@mcollina I've made revisions based on your feedback.
Unfortunately I've not been able to easily set up a preview version of the OSS site with these docs as the static site that Docusaurus generates is 50MB+.
I think there's plenty more that we can do to improve the Platformatic DB Authorization docs (including some use case specific guides), but this is hopefully a good foundation for us to move forward with.
Are you comfortable with landing this PR and then iterating on these docs in future PRs?


[Feature][Connection]: make sure the connection endpoint ends with "/"

Summary
make sure the connection endpoint ends with "/"
Does this close any open issues?
Closes #4996
Screenshots
Include any relevant screenshots here.
Other Information
Please review carefully, I'm not sure it is the best way.
I noticed that currently, after receiving JSON information from the frontend, the decoding, validation, and saving to the database are done together, making it difficult to implement custom logic here.

I also observed that all connections call the NewApiClientFromConnection function and pass connection.GetEndpoint() as the base URL. So, instead of modifying the records in the database, I'm trying to automatically add a / when the endpoint is needed on the backend.

cc @Startrekzky @mindlesscloud


error: duplicate member ‘connect_host

Ⅰ. Issue Description
This error occurs when the make command is executed,I can use nginx version 1.21.0
Ⅱ. Describe what happened

Ⅲ. Describe what you expected to happen
Ⅳ. How to reproduce it (as minimally and precisely as possible)

Ⅴ. Anything else we need to know?

If applicable, add nginx  debug log.

Ⅵ. Environment:

Tengine/Nginx/OpenResty version (use sbin/nginx -v):
Which patch do you use?

I doest not reproduce this problem for nginx-1.21.1.
I guess you patch twice the patch file to nginx source.
You can re-download nginx-1.21.1, and patch it with this patch:  proxy_connect_rewrite_102101.patch

think it resolved. feel free to reopen if u still have the same problem

Removing the nginx directory and rebuilding it again will still reproduce this issue.


Localizations

You need to add localizations in multiple languages for the app :->

I'd be more than happy to translate the app to Polish!

I'd be happy to translate the app in Dutch.
If you'd be interested in crowd-sourcing this in a peer-reviewed open-source friendly way, consider https://translatewiki.net/. They're mainly known as the translate hub for the web apps of Wikipedia and OpenStreetMap, and translate many other open-source projects as well. I have set up projects with TWN as developer before, and am also a translator there. I'd be happy to help out or answer any questions you might have.

I could help to translate NNW in Italian

I could help translate NNW into French!

On Nov 28, 2020, at 05:30, damrtom<EMAIL_ADDRESS>wrote:
I could help translate NNW into French!

Considering that the original version of NNW was entirely localized in French, I suspect a good chunk of the current app has strings that already have a match. There are also extensive glossaries that could help easy the work tremendously.
For the record, it’s not that I “abandoned” localizing the app at some point. I offered repeatedly when it changed hands and never got any reply… And then it came back home and my understanding is that needed some work to be localizable again.
Corentin

When you start working on this I can help with Brazilian Portuguese.

I'd be happy to do Catalan

I could do Swedish.

I could help translate NNW into Chinese!

Count with me to translate it to Spanish 🙌🏻

I could help translate NNW into simplified Chinese and traditional Chinese

Current State
The codebase makes extensive use of NSLocalizedStrings, generally in the format of:
NSLocalizedString("Are you sure you want to delete the “%@” feed?", comment: "Feed delete text")
or, in SwiftUI:
Text("Are you sure you want to delete the “%@” feed?", comment: "Feed delete text")
With no changes to the above, a Localization Export would generate an en.xcloc file using the NSLocalizedString value as the key and English (development language) translation:

Key
English
Comment

Are you sure you want to delete the “%@” feed?
Are you sure you want to delete the “%@” feed?
Feed delete text

Further, all NSLocalizedStrings—just over 300 for the iOS target—would end up in a single Localizable.strings file.

Proposal
Keys

Keys should be keys and not a mirror of the development language.

This ensures that changes to the base translation don't affect the key. (If the base language is used as the key, and the base translation changes, all translations for the old key would need to be reapplied to the new key. With this approach, you can change the base translation without impacting the key or other language translations.)
This makes it easier to spot non-localized strings at runtime.
It removes English norms from the keys (grammar, punctuation).

They should follow as consistent a format as possible:

<ui_element>.<ui_position>.<optional_action>.<optional_variables>

Concretely, non-localized strings would display as keys, while localized strings would display translated:

In code, this approach would manifest as follows:
NSLocalizedString("button.title.markallasread.%@, comment: "Mark All as Read in ”feed”. The variable is the feed name.")
In *.strings:
/* Mark All as Read in ”feed”. The variable name is the feed name. */
"button.title.markallasread.%@" = "Mark All as Read in ”%@”";

In xcloc:

Key
English
French
Comment

button.title.markallasread.%@
Mark All as Read in “%@”
Marquez tout comme lu dans “%@”
Mark All as Read in ”feed”. The variable name is the feed name.

Important: with this approach, we will need to audit all strings, convert them to the above convention, and provide base (English) translations.
Comments

All strings that require localization should be audited to ensure that their comment clearly articulates the purpose.
All strings that require localization from here on must include a clear comment.
Where strings have multiple variables, the comment must describe the ordering.

Organisation
As discussed above, without changes everything will end up in a single Localizable.strings file.
For the main targets, this proposal suggests (though it is not required) taking an active approach and defining where our strings will live based on the screen/major feature in which they are being used:
Feeds.strings
Timeline.strings
Article.strings
Settings.strings
NSLocalizedString("alert.message.deletefeed.%@", tableName: "Feeds" comment: "Alert: delete feed confirmation message")
The only exclusion to this would be strings that are common, e.g., basic button titles like "Done", "Dismiss", or "Cancel". They can be included in a Shared.strings file and shared amongst the targets.
NSLocalizedString("button.title.done", tableName: "Shared" comment: "Button title: Done")
String(localized: "button.title.done", table: "Shared", comment: "Button title: Done")
Text("button.title.done", table: "Shared", comment: "Button title: Done")
Extensions (Share, Widget, etc.) are small enough that their translations can be stored in their own Localizable.strings file.
Future Translations
For each release, we will need to be disciplined to ensure that new strings are localized. The way I see this working is as follows:

Text("button.title.addmastodonuser", table: "Settings", comment: "Button title: adds a Mastodon user feed")
We do an Export Localization
Add the Base Localization (English) and Import
Prior to Release, Export again and translators update es, fr files (etc)
We import, test...
...and then we should be good to go.

Updates to Existing Translations
Updates to existing translations must be done in existing .strings files. Xcode will not overwrite existing translations on import.

So @stuartbreckenridge, @vincode-io we have to follow this to contribute on NNW Localization?
We just fork, add Lang.strings and create a PR?

@kevinm6 No decisions have been made yet on how we will be implementing localization.

A proof of concept is available on this branch.
It converts NetNewsWire (both iOS and macOS) to key-based strings and includes, for ease of a demo, both English (US/base) and English (UK). Adding a new language is done via the Project Inspector, which will automatically add the appropriate .strings resources for that language.
Translation can then be done via Export Localizations, and then an import of the language specific xcloc.

I seted up rss on my mum's phone so she can read NYT and the WSJ from China, I would be more than happy to help localize the app to Chinese both simplified and traditional.

Help translate to Chinese +1

@stuartbreckenridge hi!
Are there any guidelines to contribute with localization, so far?

@kevinm6 The guidelines are in the Technotes
https://github.com/Ranchero-Software/NetNewsWire/blob/main/Technotes/Localization.md

@kevinm6 The guidelines are in the Technotes
https://github.com/Ranchero-Software/NetNewsWire/blob/main/Technotes/Localization.md

Oh, perfect!
Thank you, @Jerry23011 , I didn't notice them.

@kevinm6 Are you planning on providing a localization?

@stuartbreckenridge yes!
I could provide an Italian localization

Sorry, @Jerry23011 , I’m noticing that some keys are left original (like “On My iPhone” and similar)!
Is that a choice or also that keys are going to be localized in the future?

I already had them ready (see file below), but if you check the source file, you'll notice that they can't be imported yet.
Account.xcloc.zip

@kevinm6 As per this PR I still have some work to do on the Account package.

@Jerry23011 / @kevinm6 I will have Account internationalized tomorrow. #4018

@Jerry23011 / @kevinm6 I will have Account internationalized tomorrow. #4018

Thanks!

I'll start from the files that are already localized from the PRs in Chinese of @Jerry23011

I will probably PR to make two new changes in the near future.
P.S. @kevinm6 Could you perhaps join in the #work channel in Slack? I feel that it would be more convenient for us to chat there

@brentsimmons I can help for french ;)
(see https://github.com/Ranchero-Software/NetNewsWire/issues/850#issuecomment-2443583244)


Implement Netflix Clone

The goal of this project is to create a functional clone of the Netflix platform. This clone should mimic the core features of Netflix, including user authentication, browsing of movie/TV show catalogs, streaming video content, and user-specific recommendations.
Key Features:
1.Header Section
2.Hero Section
3.Content Sections
4.Footer Section
Technical Stack:
1.Frontend
2.Responsive Design
3.Consistent Theme
Additional Notes:
Collaborate with the design team to ensure visual fidelity.
Ensure cross-browser compatibility (Chrome, Firefox, Safari, Edge).
Solicit feedback from team members and potential users to refine the design.
https://github.com/dhairyagothi/50_days_50_web_project/assets/140265777/aa70757c-1047-4a1b-ba83-2fddc20d58c9
https://github.com/dhairyagothi/50_days_50_web_project/assets/140265777/fb63ee10-6ebe-4a6f-ba74-ddb8cdcc8f0d

Issue #102

resolve this

Done bro resolved pr it


No Timeout or Error, Just Hangs

Problem reported:

I’m using the library but when we run the status call it just holds there when no device is online, it doesn’t fail or error it just hangs there waiting for it? Is there a way for it to throw an error or just return “false” or something if a Tuya device isn’t present?

Hey there! I am working on the same project as the person who submitted this issue. Here is the problem. Like it says, it just hangs. We have a python script that runs led screens like a scoreboard. When the scripts get to checking the status of the Siren Plug, the script just hangs, and waits for the siren to be found indefinitely. Here is an example.
# Connect to device
        sirenGPO = tinytuya.OutletDevice(
             dev_id='106030143c6105f6f7d7',
             address=sirenGPOIP,
             local_key='9b0609b0cfe49d5c',
             version=3.3)

        apiResponse = requests.get(url="http://localhost/getSirenAvailability.php")

        sirenPresentJson = apiResponse.json()

        if sirenPresentJson['SirenPresent'] == "1":
            sirenGPO.status(nowait=True)
            sirenGPO.turn_off(nowait=True)
            sirenPresent = True

We had to bypass this issue by adding a coloum in our SQL Database and use the getSirenAvailability.php file to see if the siren is there based on the user. If you run our entire script and remove all of the SQL calls, the script just hangs until it can find the siren. This solution by bypassing it took some time to figure out, as I feel like that there should be a timer on the status() call, and so that if it returns false or an error, we can just skip that can put it into a variable for example:
sirenPresent = sirenGPO.status()

This will help as then we can set the variable as the return variable and check to see if there is a status after the timeout limit has been reached. Hopefully, you can fix this issue relatively soon, but thanks anyways.
Kind Regards.

Hi there again. I had just tested the timeout and it in fact does timeout, however it takes 45 seconds. I feel like this is too long in some circumstances, and that you either make like 10 seconds, or add a argument that the user could change the time for the timeout to occur in. here is the script that i used to time. I measured the time on my phone and it took exactly 45 seconds.
import tinytuya

def main():
    sirenGPO = tinytuya.OutletDevice(
        dev_id='106030143c6105f6f7d7',
        address='<IP_ADDRESS>',
        local_key='9b0609b0cfe49d5c',
        version=3.3)

    gpoStatus = sirenGPO.status()
    print(gpoStatus)

if __name__ == '__main__':
    main()

It does print an error, but I feel like that is way too long for 45 seconds. Anyways, thanks for your help with this issue. We just believe that for a scoreboard, 45 seconds is just too long for our needs.

or add a argument that the user could change the time for the timeout to occur in

This already exists.  There are 3 variables that control how long it will take to timeout: connection_timeout (default: 5), connection_retry_limit (default: 5), and connection_retry_delay (default: 5).  Add one or more of those to the tinytuya.OutletDevice( ... ) line to reduce the amount of time it will spend trying to connect.

or add a argument that the user could change the time for the timeout to occur in

This already exists. There are 3 variables that control how long it will take to timeout: connection_timeout (default: 5 seconds), connection_retry_limit (default: 5), and connection_retry_delay (default: 5 seconds). Add one or more of those to the tinytuya.OutletDevice( ... ) line with lower values to reduce the amount of time it will spend trying to connect.
Total timeout = (connection_timeout * connection_retry_limit) + (connection_retry_delay * (connection_retry_limit - 1))

Thanks for the help! I didn't know that beforehand, now when i test it works great. Thanks for the assistance :)

Thanks @uzlonewolf and thanks @GamerPeggun for opening this.  We should add some documentation on this to make it easier to find. I'll flag that.
Also...

I feel like that is way too long for 45 seconds.

Understandable. I wonder, is the current "default" is this too long?  Because the Tuya devices can be difficult to reach at times, the retry is often necessary. And the longer timeouts and delays are also often necessary to get a connection. But perhaps they are too high or 5 retries is too much?
I think we can leave this Issue open and gather feedback from the community if there is interest in lowering the default.

Now that i have noticed that you can change the time, for our circumstance, with a high pace game that is stop and start, and when you press a button it waits 45 seconds after the game has started to find it, it was too long. However, with the TinyTuya devices being too long to find, and that we can change it, it is understandable for the search of the devices to be something like 45 seconds.
Thanks for all of the help on this @jasonacox and @uzlonewolf ! :)

Released: https://pypi.org/project/tinytuya/1.14.0/
pipx install tinytuya


Subtitle Downloader

Subtitle Downloader -
A Python3 script that fetches youtube video subtitles and downloads them to current directory
Instructions

Create a new folder for your script and file/folder name should be appropriate.
Create a README.md in your folder for program Instructions
add requirements.txt if needed

Programming Language

[x] Python

Happy Coding

If you want i can make a subtitle downloader without youtube-dl, with plain youtube webscraping. I've made youtube downloader in other languages in past, its easy :)
So you can make one with youtube-dl module :)
Hacktoberfest is for everyone 😄

Hey @Hariprasad19036. I was wondering are you still looking for this project?
I can hand this issue over to you if you want, I have some things to learn and I won't be able to give this project it's time :)

@pawangeek I would like @Hariprasad19036 to take over this project please.
HacktoberFest is for everyone, I alone don't want 2 PR in a single repo :)

Hey! @pawangeek, I have submitted a PR for this issue, and it says flake8 tests have failed. On checking the details, it shows me this:  There is no except statement in my code. Why is it running script.py and not my file for the flake8 test? Am i missing something? Please let me know so that I can drop another valid PR.

You need to make sure that except is followed by

except Exception as e:
    print("Error Occurred:" + e)

You need to add new line at the end of the file.


Fixes missing staticdns query parameters

Fixes #2575

Refer to this link for build results (access rights to CI server needed):
https://builds.apache.org/job/trafficcontrol-PR/2135/
Test PASSed.

Refer to this link for build results (access rights to CI server needed):
https://builds.apache.org/job/trafficcontrol-PR/2136/
Test PASSed.

Refer to this link for build results (access rights to CI server needed):
https://builds.apache.org/job/trafficcontrol-PR/2137/
Test PASSed.

Refer to this link for build results (access rights to CI server needed):
https://builds.apache.org/job/trafficcontrol-PR/2138/
Test PASSed.

@rawlinp @dangogh I updated the validation rules accordingly.  @rawlinp Lemme know about the type validations, because we'll need to coordinate that PR as well.

Refer to this link for build results (access rights to CI server needed):
https://builds.apache.org/job/trafficcontrol-PR/2141/
Test PASSed.


major changes across the board

I started down the path of just removing the class variables and getting notify/listen to be more granular, and as i mentioned at Waza what might happen, I ended up rewriting pretty much the whole thing.
I kept a semblance of compatibility. If you are using the rake files and putting jobs on the queues in the same json format, then you'll probably have an easy transition. If you were using it from the Ruby API level, then you'll have a bit of a change.
The concepts is very similar, and the implementation is a whole lot different. I can completely understand if you want to ignore this pull request. I wanted to give you first refusal. If you do, I'll be happy to start up a new project with what I have here and give queue_classic loads of credit.
From a feature perspective, this is what it boils down to:

Removal of all the static class variables from the original code base.
Automatic Queue creation, when a producer or consumer (see terminology below) attaches to a queue, it is automatically created, like beanstalk.
NOTIFY/LISTEN is now per queue based, and notifications are only received by consumers that are listening on the appropriate channel.
Stats on what is being done where. We can do a little bit of introspection into the system now.
Connected clients are recognized via the pg_stats_activity table and used to populate fields in the stats.
The relative_top of the Fuzzy FIFO algorithm is now automatically calculated based upon the stats table.
Runnable Jobs are created from Mesasge bodies enableing queue classice to be used wither with its own style jobs or with Resqueue style jobs (see the json format for the payload).
The Worker forking process is implemented using Servolux::Piper and can listen on multiple queues in the same way that Resque can listen on multipel queues.

There is a more comprehensive list of what is different at https://github.com/copiousfreetime/queue_classic/blob/feature/multi-queue/differences.md

ZOMG!!!!

This commit is like going on a first date and asking your date for marriage and then presenting a 75-year plan for life together.
But in all seriousness, I kind of like where this is going. Lemme continue to grok and digest, but I don't see why we can't accommodate these changes in queue_classic. My primary motivation being that these changes make queue_classic more robust. Now, things are a bit more complicated with these changes but at the end of the day, queue_classic exists because I needed a robust message queue that was backed by PostgreSQL. (More generally, backed by Heroku's PostgreSQL)

Feel free to hit me up with any questions or comments. I'm on the mailing list now too.

I am excited about multiple queues and having some of my workers have different priorities amongst those queues.
What is the motivation of the history table? I push just under 0.25 million jobs an hour through queue classic, and keeping all of those around forever would quickly lead to a huge operational burden. Having to periodically prune them would also be an extra, unwanted complexity. In fact, I'm using 9.1 unlogged tables for my queue, since the data in my queue is very ephemeral and I don't need it backed up with wal-e.
If your motivation was debugging, I would suggest using streamed logs instead.
I am in favor of more and more of this just being database functions. The next major version of queue classic should be CREATE EXTENSION queue_classic;. As an extension it will be available to anyone on any language with a postgres database.

@will Most of my reasoning use for the history table is for debugging and/or metrics. I'm not beholden to it. It is sort of a nice-to-have in my case.
I completely understand the operational burden of pruning tables :-). With 0.25 million jobs an hour, I would definitely not even use it a history table at all. How about the use of it being an option? And/Or having there be a 'failed jobs' table or something along those lines.
Using unlogged tables sounds like a great idea, make it an option if you are using 9.1 (I'm not up on all the 9.1 features yet).

@lmarburger It wouldn't take much to add a specific message_failures table to what is here. What we would want to to do is probably split the finalize() either into two methods maybe success() and failure(), or use a parameter to distinguish between the two cases.


[TS migration] Migrate 'compose.js' lib to TypeScript

Details
Migration of 'compose.js' to Typescript. This function was copied from Redux codebase (link). However these types didn't work when I tested it, so I adjusted them in this commit according to how lodash.flow is typed here.
The problem is that compose wraps functions from right, meanwhile lodash.flow works the other way around (f1(f2(f3(...))) vs f3(f2(f1(...)))). I tried using lodash.flowRight types but it has almost the same type definition as redux.compose, both doesn't work.

Code for testing:
// src/libs/test.ts

/* eslint-disable @typescript-eslint/no-unused-vars */
import {ComponentType, ForwardRefExoticComponent, ForwardRefRenderFunction, PropsWithoutRef, RefAttributes} from 'react';
import compose from './compose';

type TranslateUtilsProps = Record<string, unknown>;

declare function withLocalize<T>(wrappedComponent: ComponentType<T>): ForwardRefRenderFunction<unknown, T & TranslateUtilsProps>;

declare function withWindowDimensions<T extends JSX.IntrinsicAttributes>(wrappedComponent: React.ComponentType<T>): ForwardRefExoticComponent<PropsWithoutRef<T> & RefAttributes<unknown>>;

type WithThemeProps = {
    primaryColor: string;
};

declare function withTheme<TProps>(wrappedComponent: ComponentType<TProps>): ComponentType<Omit<TProps, keyof WithThemeProps>>;

type WithSomethingProps = {
    something: string;
};

declare function withSomething<TProps>(wrappedComponent: ComponentType<TProps>): ComponentType<Omit<TProps, keyof WithSomethingProps>>;

type AvatarWithDisplayNameProps = {test: string} & WithThemeProps & WithSomethingProps;

declare function AvatarWithDisplayName(props: AvatarWithDisplayNameProps): React.JSX.Element;

const composeTest1 = compose(withTheme, withSomething, withWindowDimensions, withLocalize)(AvatarWithDisplayName);
const normalTest1 = withTheme(withSomething(AvatarWithDisplayName));

const composeTest2 = compose(withTheme, withSomething)(AvatarWithDisplayName);
const normalTest2 = withTheme(withSomething(AvatarWithDisplayName));

declare function flowRight<A extends unknown[], R1, R2>(f2: (a: R1) => R2, f1: (...args: A) => R1): (...args: A) => R2;
declare function flowLeft<A extends unknown[], R1, R2>(f1: (...args: A) => R1, f2: (a: R1) => R2): (...args: A) => R2;

const composeTest3 = flowRight(withSomething, withTheme)(AvatarWithDisplayName);
const composeTest4 = flowLeft(withSomething, withTheme)(AvatarWithDisplayName);

Fixed Issues
$ https://github.com/Expensify/App/issues/24788
PROPOSAL: N/A
Tests

[x] Verify that no errors appear in the JS console
[x] Verify that the app works as expected overall

Offline tests
N/A
QA Steps
N/A
PR Author Checklist

[x] I linked the correct issue in the ### Fixed Issues section above
[x] I wrote clear testing steps that cover the changes made in this PR

[x] I added steps for local testing in the Tests section
[x] I added steps for the expected offline behavior in the Offline steps section
[x] I added steps for Staging and/or Production testing in the QA steps section
[x] I added steps to cover failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
[x] I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
[x] I tested this PR with a High Traffic account against the staging or production API to ensure there are no regressions (e.g. long loading states that impact usability).

[x] I included screenshots or videos for tests on all platforms
[x] I ran the tests on all platforms & verified they passed on:

[x] Android / native
[x] Android / Chrome
[x] iOS / native
[x] iOS / Safari
[x] MacOS / Chrome / Safari
[x] MacOS / Desktop

[x] I verified there are no console errors (if there's a console error not related to the PR, report it or open an issue for it to be fixed)
[x] I followed proper code patterns (see Reviewing the code)

[x] I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick)
[x] I verified that the left part of a conditional rendering a React component is a boolean and NOT a string, e.g. myBool && <MyComponent />.
[x] I verified that comments were added to code that is not self explanatory
[x] I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
[x] I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method

[x] If any non-english text was added/modified, I verified the translation was requested/reviewed in #expensify-open-source and it was approved by an internal Expensify engineer. Link to Slack message:

[x] I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
[x] I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is approved by marketing by adding the Waiting for Copy label for a copy review on the original GH to get the correct copy.
[x] I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
[x] I verified the JSDocs style guidelines (in STYLE.md) were followed

[x] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
[x] I followed the guidelines as stated in the Review Guidelines
[x] I tested other components that can be impacted by my changes (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar are working as expected)
[x] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
[x] I verified any variables that can be defined as constants (ie. in CONST.js or at the top of the file that uses the constant) are defined as such
[x] I verified that if a function's arguments changed that all usages have also been updated correctly
[x] If a new component is created I verified that:

[x] A similar component doesn't exist in the codebase
[x] All props are defined accurately and each prop has a /** comment above it */
[x] The file is named correctly
[x] The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
[x] The only data being stored in the state is data necessary for rendering and nothing else
[x] If we are not using the full Onyx data that we loaded, I've added the proper selector in order to ensure the component only re-renders when the data it is using changes
[x] For Class Components, any internal methods passed to components event handlers are bound to this properly so there are no scoping issues (i.e. for onClick={this.submit} the method this.submit should be bound to this in the constructor)
[x] Any internal methods bound to this are necessary to be bound (i.e. avoid this.submit = this.submit.bind(this); if this.submit is never passed to a component event handler like onClick)
[x] All JSX used for rendering exists in the render method
[x] The component has the minimum amount of code necessary for its purpose, and it is broken down into smaller components in order to separate concerns and functions

[x] If any new file was added I verified that:

[x] The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory

[x] If a new CSS style is added I verified that:

[x] A similar style doesn't already exist
[x] The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(themeColors.componentBG))

[x] If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
[x] If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
[x] If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
[x] If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
[x] If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
[x] If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.
[x] I have checked off every checkbox in the PR author checklist, including those that don't apply to this PR.

Screenshots/Videos

Web
https://github.com/Expensify/App/assets/46095609/9d880b6c-9215-428c-be82-57515dd0d2d2

Mobile Web - Chrome
https://github.com/Expensify/App/assets/46095609/2913c325-0811-4d85-8482-bcc4619ad170

Mobile Web - Safari
https://github.com/Expensify/App/assets/46095609/ec37398d-ad08-4ca6-a070-18a39485c1ce

Desktop
https://github.com/Expensify/App/assets/46095609/c676de2f-6fd8-4569-a525-4f23f54cf8bd

iOS
https://github.com/Expensify/App/assets/46095609/48b65a4a-e90f-42cd-8944-0ed1d8332b83

Android

Hi @blazejkustra, could you provide more info about why Redux and flowRight types didn't work? What type of problems are you having?

let me know if you need input from me @blazejkustra @fabioh8010 🙇

type Func<T extends unknown[], R> = (...a: T) => R;

export default function compose(): <R>(a: R) => R;

export default function compose<F extends Function>(f: F): F;

/* two functions */
export default function compose<A, T extends unknown[], R>(f1: (a: A) => R, f2: Func<T, A>): Func<T, R>;

/* three functions */
export default function compose<A, B, T extends unknown[], R>(f1: (b: B) => R, f2: (a: A) => B, f3: Func<T, A>): Func<T, R>;

/* four functions */
export default function compose<A, B, C, T extends unknown[], R>(f1: (c: C) => R, f2: (b: B) => C, f3: (a: A) => B, f4: Func<T, A>): Func<T, R>;

/* rest */
export default function compose<R>(f1: (a: unknown) => R, ...funcs: Function[]): (...args: unknown[]) => R;

export default function compose<R>(...funcs: Function[]): (...args: unknown[]) => R;

export default function compose(...funcs: Function[]): Function {
    if (funcs.length === 0) {
        // infer the argument type so it is usable in inference down the line
        return <T>(arg: T) => arg;
    }

    if (funcs.length === 1) {
        return funcs[0];
    }

    return funcs.reduce(
        (a, b) =>
            (...args: any) =>
                a(b(...args)),
    );
}

const composed = compose(withInjected, withInjected2); // Func<unknown[], unknown>
const y = composed(AvatarWithDisplayName); // unknown

@fabioh8010 I can't get it to work at all, I either get errors or unknown as in the snippet above.

Reviewer Checklist

[x] I have verified the author checklist is complete (all boxes are checked off).
[x] I verified the correct issue is linked in the ### Fixed Issues section above
[x] I verified testing steps are clear and they cover the changes made in this PR

[x] I verified the steps for local testing are in the Tests section
[x] I verified the steps for Staging and/or Production testing are in the QA steps section
[x] I verified the steps cover any possible failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
[x] I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)

[x] I checked that screenshots or videos are included for tests on all platforms
[x] I included screenshots or videos for tests on all platforms
[x] I verified tests pass on all platforms & I tested again on:

[x] Android / native
[x] Android / Chrome
[x] iOS / native
[x] iOS / Safari
[x] MacOS / Chrome / Safari
[x] MacOS / Desktop

[x] If there are any errors in the console that are unrelated to this PR, I either fixed them (preferred) or linked to where I reported them in Slack
[x] I verified proper code patterns were followed (see Reviewing the code)

[x] I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick).
[x] I verified that the left part of a conditional rendering a React component is a boolean and NOT a string, e.g. myBool && <MyComponent />.
[x] I verified that comments were added to code that is not self explanatory
[x] I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
[x] I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method
[x] I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
[x] I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is approved by marketing by adding the Waiting for Copy label for a copy review on the original GH to get the correct copy.
[x] I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
[x] I verified the JSDocs style guidelines (in STYLE.md) were followed

[x] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
[x] I verified that this PR follows the guidelines as stated in the Review Guidelines
[x] I verified other components that can be impacted by these changes have been tested, and I retested again (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar have been tested & I retested again)
[x] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
[x] I verified any variables that can be defined as constants (ie. in CONST.js or at the top of the file that uses the constant) are defined as such
[x] If a new component is created I verified that:

[x] A similar component doesn't exist in the codebase
[x] All props are defined accurately and each prop has a /** comment above it */
[x] The file is named correctly
[x] The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
[x] The only data being stored in the state is data necessary for rendering and nothing else
[x] For Class Components, any internal methods passed to components event handlers are bound to this properly so there are no scoping issues (i.e. for onClick={this.submit} the method this.submit should be bound to this in the constructor)
[x] Any internal methods bound to this are necessary to be bound (i.e. avoid this.submit = this.submit.bind(this); if this.submit is never passed to a component event handler like onClick)
[x] All JSX used for rendering exists in the render method
[x] The component has the minimum amount of code necessary for its purpose, and it is broken down into smaller components in order to separate concerns and functions

[x] If any new file was added I verified that:

[x] The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory

[x] If a new CSS style is added I verified that:

[x] A similar style doesn't already exist
[x] The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(themeColors.componentBG)

[x] If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
[x] If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
[x] If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
[x] If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
[x] If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
[x] If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.
[x] I have checked off every checkbox in the PR reviewer checklist, including those that don't apply to this PR.

Screenshots/Videos

Web
https://github.com/Expensify/App/assets/25230417/47f095e1-5059-4f56-a0f4-d8657fc93c30

Mobile Web - Chrome
https://github.com/Expensify/App/assets/25230417/7da666a2-057a-44d3-a507-f653be0e454c

Mobile Web - Safari
https://github.com/Expensify/App/assets/25230417/4ad6acc0-e4fa-4009-ac53-02e331388fe8

Desktop
https://github.com/Expensify/App/assets/25230417/f80a10b5-1db6-4bea-bf4d-8e605150ac2b

iOS
https://github.com/Expensify/App/assets/25230417/2569a3e7-4427-4983-a7a9-e3c6707d7444

Android
https://github.com/Expensify/App/assets/25230417/1d86f27d-1376-410e-a0b1-dc2e553b2921

@mananjadhav can you approve the PR so that an internal is assigned?

@mananjadhav TS process was changed recently and now C+ are responsible for the reviewer checklist.

Thanks for notifying @blazejkustra I missed the notification regarding C+ enabled for TS PR. I'll work on the checklist.

Reviewer Checklist

[x] I have verified the author checklist is complete (all boxes are checked off).
[x] I verified the correct issue is linked in the ### Fixed Issues section above
[x] I verified testing steps are clear and they cover the changes made in this PR

[x] I verified the steps for local testing are in the Tests section
[x] I verified the steps for Staging and/or Production testing are in the QA steps section
[x] I verified the steps cover any possible failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
[x] I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)

[x] I checked that screenshots or videos are included for tests on all platforms
[x] I included screenshots or videos for tests on all platforms
[x] I verified tests pass on all platforms & I tested again on:

[ ] Android / native
[x] Android / Chrome
[x] iOS / native
[x] iOS / Safari
[x] MacOS / Chrome / Safari
[x] MacOS / Desktop

[x] If there are any errors in the console that are unrelated to this PR, I either fixed them (preferred) or linked to where I reported them in Slack
[x] I verified proper code patterns were followed (see Reviewing the code)

[x] I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick).
[x] I verified that the left part of a conditional rendering a React component is a boolean and NOT a string, e.g. myBool && <MyComponent />.
[x] I verified that comments were added to code that is not self explanatory
[x] I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
[x] I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method
[x] I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
[x] I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is approved by marketing by adding the Waiting for Copy label for a copy review on the original GH to get the correct copy.
[x] I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
[x] I verified the JSDocs style guidelines (in STYLE.md) were followed

[x] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
[x] I verified that this PR follows the guidelines as stated in the Review Guidelines
[x] I verified other components that can be impacted by these changes have been tested, and I retested again (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar have been tested & I retested again)
[x] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
[x] I verified any variables that can be defined as constants (ie. in CONST.js or at the top of the file that uses the constant) are defined as such
[x] If a new component is created I verified that:

[x] A similar component doesn't exist in the codebase
[x] All props are defined accurately and each prop has a /** comment above it */
[x] The file is named correctly
[x] The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
[x] The only data being stored in the state is data necessary for rendering and nothing else
[x] For Class Components, any internal methods passed to components event handlers are bound to this properly so there are no scoping issues (i.e. for onClick={this.submit} the method this.submit should be bound to this in the constructor)
[x] Any internal methods bound to this are necessary to be bound (i.e. avoid this.submit = this.submit.bind(this); if this.submit is never passed to a component event handler like onClick)
[x] All JSX used for rendering exists in the render method
[x] The component has the minimum amount of code necessary for its purpose, and it is broken down into smaller components in order to separate concerns and functions

[x] If any new file was added I verified that:

[x] The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory

[x] If a new CSS style is added I verified that:

[x] A similar style doesn't already exist
[x] The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(themeColors.componentBG)

[x] If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
[x] If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
[x] If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
[x] If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
[x] If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
[x] If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.
[x] I have checked off every checkbox in the PR reviewer checklist, including those that don't apply to this PR.

Screenshots/Videos

Web
https://github.com/Expensify/App/assets/3069065/491407f2-9f0c-4eaa-bbeb-a99c782386e3

Mobile Web - Chrome
https://github.com/Expensify/App/assets/3069065/0d7eb5f3-7be3-4562-9c1e-ef1ed7c886da

Mobile Web - Safari
https://github.com/Expensify/App/assets/3069065/d46db2cb-d098-4ee3-a469-44a97a24a540

Desktop
https://github.com/Expensify/App/assets/3069065/a3a34344-0adb-4f01-ac7a-e505b05c7d7a

iOS
https://github.com/Expensify/App/assets/3069065/a8b4bbda-3acf-43d3-99d1-41b95db18b8e

Android

@stitesExpensify All yours.
🎀 👀 🎀 C+ reviewed.

:hand: This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release.

🚀 Deployed to staging by https://github.com/stitesExpensify in version: 1.3.77-0 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅

🚀 Deployed to production by https://github.com/mountiny in version: 1.3.77-7 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
failure ❌

🕸 web 🕸
success ✅


Otel sql: Go query instrumentation, traces, metrics, test-app

Incomplete/draft PR, this is just showing progress so far: eBPF prints out the SQL query.

One initial thought, we shouldn't add the pq vendor information in our main repo. You can create a go module for the testcase, so that the dependency is only there.

Sorry for the commit noise.  I had merged main into the branch but that still required rebasing, so I started over and rebased to main to keep things more in order.

This PR is starting to look very goo. I think some of the conversations have been lost, I just wanted to re-iterate that we don't want to be reading twice for the SQL buffer, it should happen once in the 'returns' uprobe.

Thanks Nikola. I've added all those tests from the otel java sanitizer. I've also added a set of parameterized queries.  I'm feeling more confident that we'll have the correct db operation and table name.

Into another PR, I'd add some new integration tests. Coverage dropped from ~80% to 72% and seems that SQL traces are lacking integration tests. E.g. https://app.codecov.io/gh/grafana/beyla/tree/main/pkg%2Finternal%2Fsqlprune


Change mentions of PucklaMotzer09 -> PucklaJ, due to change of username

I just changed my username to PucklaJ. And therefore I wanted to reflect that in xmake-repo. This also completely removes the mention of my name in the patch of libsdl_gfx

you need fix patch checksum


Add version 3.27.7.

New release is out today!
https://www.kitware.com/cmake-3-27-7-available-for-download/

@hyoklee thank you for the notice, released<EMAIL_ADDRESS>


Telegraf is still not mentioned on the plugin list

Telegraf received an output plugin to ADX november last year (https://techcommunity.microsoft.com/t5/azure-data-explorer-blog/new-azure-data-explorer-output-plugin-for-telegraf-enables-sql/ba-p/2829444) but there's no mention of it on the docs.

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

ID: 7c758ab8-a66a-0d9d-af7a-a0fbe43ec6f4
Version Independent ID: 62e4d091-8261-eb79-0f50-92a302487dd0
Content: Azure Data Explorer data ingestion overview
Content Source: data-explorer/ingest-data-overview.md
Service: data-explorer
GitHub Login: @shsagir
Microsoft Alias: shsagir

@KhaoticMind  Thanks for the feedback! We are investigating and will update you shortly.

@KhaoticMind Thanks for contacting us with feedback about our product documentation. Depending on the complexity, it could take from a few business days to a few weeks to look further into your question, issue, or suggestion. We'll contact you if we need further information, and you'll receive an email message each time we "@mention" you in a comment.
Thanks again for submitting your feedback. Your suggestions help improve our documentation.

@KhaoticMind Thanks so much for taking the time to leave us your comment on our documentation. We're researching your issue and will be updating the page based on your suggestions. Changes will be made in the next possible publish.
We're closing this as an open issue for now, but feel free to continue to comment here as necessary. We appreciate your contribution to our community.
#please-close


Add Infura faucet

Replace Alchemy's faucet with Infura's new faucet in the Snaps txn insights tutorial.

@metamaskbot publish-preview


Return either user info or anon user (resolves #66)

This makes a cleaner interface for boardwalk.
This is currently deployed at jesse.ucsc-cgp-dev.org and Dave Rogers approves

Pinged on Slack as well, but @NoopDog , but in the case of an non-whitelisted user, why do you want \me to return anonymous user when we know who you are?

@coverbeck fixed.


[Ubuntu] Install yq to /usr/bin

Description
It turned out that installation to /usr/local/bin can break some workflows as well as installation from PPAs such as https://launchpad.net/~rmescandon/+archive/ubuntu/yq/+packages because yq is usually installed in /usr/bin, but we have it in the /usr/local/binthat is later in the $PATH thus overrides yq from the /usr/bin.
https://github.com/actions/virtual-environments/pull/3646#pullrequestreview-711489340
Related issue:
https://github.com/actions/virtual-environments-internal/issues/2472
Check list

[x] Related issue / work item is attached
[ ] Tests are written (if applicable)
[ ] Documentation is updated (if applicable)
[ ] Changes are tested and related VM images are successfully generated

/azp run ubuntu1804, ubuntu2004


QKC/OP Devs Meeting #9 Agenda

Meeting Info

July 6, 2024, 10:00 UTC+8
Duration: 60 minutes
Meeting link
Anyone can comment on the agenda where they would like this to be discussed.

Agenda

Protocol/App/Research progress

created a branch management flow
deployed a new testnet, but SoulGasToken was not enabled, need to redeploy
investigate Recaptcha token for faucet, need to register here and the token is bound to a specific domain.

Cross Validation Summary
Research on pre-confirmation and bolt implementation helder testnet, deployed geth+lighthouse sync node.

Review Bill's code
Write a summary of OP zk fault proof
Study e2e test of OP fault proof

fix test case


Feature: Use Generalised Scaling Relation in RuptureSet and InversionSolutions

SRM team want to compare new Scaling relation with others.
Done When:

[ ] configure scaling as required
[ ] add to Rupset Generation for Subduction
[ ] add to Inversions for Subduction
[ ] add to Rupset Generation for Crustal
[ ] add to Inversions for Crustal

Note if possible use same solution in Crustal/Subduction cases

@thingbaijam it looks like we must set either one or two arguments whenever we use the new class ssc.setRegime("interface");
e.g.
Stirling_2021_SimplifiedNZ_MagAreaRel ssc = new Stirling_2021_SimplifiedNZ_MagAreaRel();

ssc.setEpistemicBound("lower"); //use "lower" or "upper"
ssc.setRegime("interface"); //use "interface" for subduction and anything else (e.g. "crustal" for non-interface regime.

So I imagine that  we'll want to run both rupture sets and inversions using the two different epistemic bounds?

@chrisbc  Yes - we must set these two arguments for interface ruptures.


Cia unify part one

@gleckler1 @durack1 it's now using CIA for monsoon and dirunal
But in order for this to pass we need to reslove: https://github.com/PCMDI/pcmdi_metrics/pull/527

@doutriaux1   The big leap is getting monsoon and dirunal working with CIA using a parameter file.   It looks like these changes are just for the command line (argparse) path.   Is that correct?

@doutriaux1 not sure I'm going to get to run this to thoroughly check - is the test suite testing this new code?

@gleckler1 they should work with a parameter file. I'll check.

@doutriaux1   Need to get this to work.   Now setup.py won't run on branch origin/cia_unify_part_one.   looks like a py3 issue...
I've been trying to create an env (below) with pcmdi_metrics and cia and a parameter file... I've blown 1/2 so far, still can't do it...
conda create -n pmp_mar21 -c uvcdat/label/nightly -c conda-forge -c uvcdat -c pcmdi/label/nightly -c pcmdi vcs vcsaddons pcmdi_metrics cia

@gleckler1 let's look in the morning


about paypal address

@starry-shivam

fdroid app lists https://www.paypal.com/paypalme/starryrays
i am unable to find it in readme history [ my search might be inadequate ]
is paypal address still valid?

Sorry, no, that PayPal account is dead as they've banned it, I've tried multiple times to get in touch with PayPal to provide reasoning behind the ban but they never responded so i just gave up and settled with GitHub sponseres instead for donations. I don't know how to update it on F-Droid now maybe I'll try creating an issue sometimes later on F-Droid Gitlab about it.

Update: I've created a merge request in F-Droid data repository to get this fixed.


Argument of type 'string' is not assignable to parameter of type 'Partial<ZodOpenAPIMetadata<{ name: string; id: string; age: number; }, { name: string; id: string; age: number; }>>'

When I tried the basic example here, it gives:
TS2345: Argument of type 'string' is not assignable to parameter of type 'Partial<ZodOpenAPIMetadata<{ name: string; id: string; age: number; }, { name: string; id: string; age: number; }>>'.
import {
	OpenAPIGenerator,
	OpenAPIRegistry,
	extendZodWithOpenApi,
} from '@asteasolutions/zod-to-openapi';
import { z } from 'zod';

const UserSchema = z
	.object({
		id: z.string().openapi({ example: '1212121' }),
		name: z.string().openapi({ example: 'John Doe' }),
		age: z.number().openapi({ example: 42 }),
	})
	.openapi('User');

package.json:
{
  "name": "test-zod-api",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@asteasolutions/zod-to-openapi": "^4.6.2",
    "@types/node": "^20.1.2",
    "ts-node": "^10.9.1",
    "zod": "^3.21.4"
  }
}

Hello @elbassel I am glad you are using this library. What you are trying to do is not yet released. It would be as a new major release (v5.0.0). However we want to make a few other improvements before releasing it. I imagine you saw that from the README in github which references master. You can follow the latest released README instead for the time being.
See the same being reported here


child tables are not found with dbeaver 7.2.2

Connection specification:

Database name and version : greenplum 6.5
Driver name : postgresql.42.2.18

the child tables are not found with dbeaver 7.2.2 .
but, the child tables are found properly with dbeaver 7.0.1

thanks for the bug report

Fixed. Both partitions and child tables now must load correctly.

Fixed. Both partitions and child tables now must load correctly.

verified

verified


ci-ipsec-upgrade: run no-unexpected-packet-drops for patch downgrades

Currently we disable the no-unexpected-packet-drops test because for 1.11 the necessary APIs are missing to execute that test. Because the flag is unconditionally set, this applies to downgrades between patch AND minor versions. However, it should only apply to minor (1.12 -> 1.11) downgrades. On downgrades between patch versions (1.12.x -> 1.12.y) we should run this test and allowlist certain reasons that are known to fail.

/test-backport-1.12


Add dashboard to visualize the output of the derotation after suite2p processing

Description
What is this PR

[ ] Bug fix
[x] Addition of a new feature
[ ] Other

Why is this PR needed?
See linked issue
What does this PR do?
Adds processed data loaders and dashboard
References
Resolves #18
How has this PR been tested?
TODO
Is this a breaking change?
No
Does this PR require an update to the documentation?
TODO
Checklist:

[ ] The code has been tested locally
[ ] Tests have been added to cover all new functionality
[ ] The documentation has been updated to reflect any changes
[ ] The code has been formatted with pre-commit

Suggestions received on contours: 1 2 3


argo cluster install failed to create S3 bucket

Argo cluster install in us-west-2 failed to create the S3 bucket. We created the bucket by hand to complete the install. This seems odd since we install clusters in us-west-2 all the time.
One interesting note, our user may have first tried to install in us-east-1 before completing the install in us-west-2. It may be possible that something didn't get cleaned up properly and confused the second install.
Note that when creating buckets in regions outside us-east-1, one must specify a location constraint.
https://stackoverflow.com/questions/42936553/cannot-create-amazon-s3-bucket-in-specified-region

If an installation was attempted in one region, the installer creates a bucket in that region. To re-install in a different region, the user needs to first uninstall the cluster (which will delete the bucket). Then the installation should work in the alternate region.
Since, bucket names are global in AWS, some time needs to pass before AWS can create the bucket with the same name in a different region. Most likely, this is what happened here.
We should document that if the installation failed in one-region, the user should uninstall first and re-attempt installation in a different region after a few minutes.

Looks like https://github.com/argoproj/argo/issues/428 is caused by the same issue. @edlee2121 can you please confirm ?

@alexmt Yes, it could be the same issue.

Currently, you can only instal Argo V 1.x in one region at a time.


Update index.html

Adding 'data-' prefix to remove w3c validator error.
Based upon https://github.com/utterance/utterances/issues/109#issuecomment-457964487 by @jdanyow
Reference: https://validator.w3.org/nu/?showsource=yes&doc=https%3A%2F%2Futteranc.es

Can we have a response or update on this please?
@jdanyow
Though this isn't causing an operational issue but everyone loves a clean console log I guess.

Utterances permits folks to prefix the attributes with data- if they choose to do so. I do not plan to prefix them by default because there’s no real requirement.
https://html.spec.whatwg.org/multipage/syntax.html#syntax-attribute-name
Is the validator you're using up to date?

Utterances permits folks to prefix the attributes with data- if they choose to do so. I do not plan to prefix them by default because there’s no real requirement.
https://html.spec.whatwg.org/multipage/syntax.html#syntax-attribute-name
Is the validator you're using up to date?

It's the W3C official validator. When new standards are released, the validator is updated.

Utterances permits folks to prefix the attributes with data- if they choose to do so. I do not plan to prefix them by default because there’s no real requirement.
https://html.spec.whatwg.org/multipage/syntax.html#syntax-attribute-name
Is the validator you're using up to date?

I know not using data attribute is ok just Chromium still hasn't updated it. Also I don't see any issues using aata prefix. Anyways it's personal choice.