Testing/Validating Factory changesets & Repeatable Schema Testing

This isn't an issue, I just wanted to make sure that this code is having the effect for testing that I think it is having. I want to have a test that builds/creates the struct via the factory and check to make sure the changeset is valid, much like the default generated test.  This way my factories are also tested for generating valid data.
For example, this default test which uses a map of attributes to create a struct changeset and validate the data:
  @valid_attrs %{
    email<EMAIL_ADDRESS>    first_name: "some content",
    last_name: "some content",
    password: "some content",
    password_hash: "some content",
    username: "some content",
    mobile: "1112223333"}
  @invalid_attrs %{}

  test "changeset with valid attributes" do
    changeset = User.changeset(%User{}, @valid_attrs)
    assert changeset.valid?
  end

Could it be rewritten with the factory like this?
  test "changeset with ExMachina Factory attributes" do
    user = build(:user)
    changeset = User.changeset(user,%{})
    assert changeset.valid?
  end

As I'm learning Elixir, sometimes the semantics are confusing and I was hoping to get some clarification that this is the right direction to take. Is passing an empty map of attributes, because they are already defined in user by the factory build(:user) function validating the changeset correctly?
My next step would be to do something like I've done in Rails/Rspec/FactoryGirl where I have a FactorySpec which builds each of the models and validates that the model was built correctly. In this example, the factory spec builds each model and validates them.
#spec/models/factory.rb
FactoryGirl.factories.map(&:name).each do |factory_name|
  describe "The #{factory_name} factory" do
    it 'is valid' do
      build(factory_name).should be_valid
    end
  end
end

#spec/models/post_spec.rb
require 'rails_helper'
RSpec.describe Post, type: :model do

end

#spec/models/user_spec.rb
require 'rails_helper'
RSpec.describe User, type: :model do

end

Lastly, Is there any suggestions on how to create a spec/test in ExUnit that repeatable tests all the structs using their respective factories to validate their build/create generation?
I have an issue on stackoverflow as well for cross reference.

After reading the docs, like I should have initially, I was able to create my own solution.
The ExMachina docs have a function titled params_for which generate the attributes map. This way a test can be added in addition to the one created by the Phoneix scaffold model generators.
 test "changeset with valid factory" do
   changeset = User.changeset(%User{}, params_for(:user) )
   assert changeset.valid?
 end


Instruction to add resolver for sbt-spark-package

Currently, resolver for generated spark packages is necessary to resolve sbt-spark-pacakge plugin.
see: https://github.com/databricks/sbt-spark-package/issues/9

Handled by #12. Thanks for the PR. The plugin is part of the sbt plugins, but for some reason it's not linked to the default sbt repo.


ERROR: Unable to parse /db/login.js: Unexpected token =>

I'm running jsdoc ./db/login.js with the following code:
/**
 * login
 * @param {string} email - User email
 * @param {string} password - User password
 * @returns {Object}
 */
server.post('/v1/login', async (req, response) => {
    ...
}

nvm, I'm using this library to document an api which is, I think, not the primary use. Will use a different library.


Port Freeze and Unfreeze to v2

The scope of this issue to port the freeze and unfreeze functionality into rest.bitcoin.com v2. This includes both the route handlers and making the swagger UI work. This issue was broken off from Issue #156.

/dataRetrieval/frozenBalance/{address}/{propertyId} - default input uses invalid address
/dataRetrieval/frozenBalanceForAddress/{address} - default input uses invalid address
/dataRetrieval/frozenBalanceForId/{propertyId} - default input is not a managed token
/payloadCreation/freeze/{toAddress}/{propertyId} - default input causes an error
/payloadCreation/unfreeze/{toAddress}/{propertyId} - default input causes an error

Note: With regard to the swagger UI, this issue applies to both testnet and mainnet. Both of the fixture files need to be updated with working examples.

Wormhole REST is now deprecated. Closing issue.


Not answering correctly according to prompt and writes same answer 3-4 times

This is my current code and it does run however it answers completely differently sometimes and it also writes the answer 3 or 4 times. Please fix it for me and if possible, fix my templates to make my output consistent
from dotenv import load_dotenv
import csv
import PyPDF2
from PyPDF2 import PdfReader
from langchain.document_loaders import DirectoryLoader, PyPDFLoader, PyPDFDirectoryLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.callbacks import get_openai_callback
from langchain.chat_models import ChatOpenAI
from langchain.chains import ConversationalRetrievalChain
from langchain.memory import ConversationBufferMemory
from langchain.prompts import PromptTemplate
import time
from langchain.vectorstores import Qdrant
from langchain.vectorstores import Chroma
from langchain.vectorstores import deeplake
from langchain.chains.qa_with_sources import load_qa_with_sources_chain
from langchain.callbacks import StreamingStdOutCallbackHandler
import pandas as pd
from docx import Document
from nltk.tokenize import sent_tokenize, word_tokenize
from collections import Counter
from nltk.corpus import stopwords
import os
def print_letter_by_letter(text):
for char in text:
print(char, end='', flush=True)
time.sleep(0.02)
def main():
load_dotenv()
my_activeloop_org_id = "yazanrisheh"
my_activeloop_dataset_name = "langchain_course_customer_support"
dataset_path = f"hub://{my_activeloop_org_id}/{my_activeloop_dataset_name}"
# directory_path = input("Copy your directory path here or upload a file: ")
directory_path = "C:\Users\Asus\Documents\Vendolista"
# pdf_loader = DirectoryLoader(directory_path,
#                               glob="**/*.pdf",
#                               show_progress=True,
#                               use_multithreading=True,
#                               silent_errors=True,
#                               loader_cls = PyPDFLoader)

pdf_loader = PyPDFDirectoryLoader(directory_path)

documents = pdf_loader.load()
print(str(len(documents))+ " documents loaded")

llm = ChatOpenAI(temperature = 0, model_name='gpt-3.5-turbo', callbacks=[StreamingStdOutCallbackHandler()], streaming = True)

# Split into chunks
text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=800,
    chunk_overlap=100,
)
chunks = text_splitter.split_documents(documents)

embeddings = OpenAIEmbeddings()

persist_directory = "C:\\Users\\Asus\\OneDrive\\Documents\\Vendolista"
knowledge_base = Chroma.from_documents(chunks, embeddings, persist_directory = persist_directory)
# save to disk
knowledge_base.persist()
#To delete the DB we created at first so that we can be sure that we will load from disk as fresh db
knowledge_base = None
new_knowledge_base = Chroma(persist_directory = persist_directory, embedding_function = embeddings)

# weird_knowledge_base = deeplake(chunks, dataset_path=dataset_path, embedding=embeddings)
# knowledge_base = Qdrant(documents, embeddings)

p_template = """Given the following conversation and a follow up question, rephrase the follow up question to be a standalone question, in its original language.
If the Standalone question is empty or cannot be generated, use the follow up question as Standalone question.
Chat History:
{chat_history}
Follow Up Input: {question}
Standalone question:"""

#CONDENSE_QUESTION_PROMPT = PromptTemplate.from_template(_template)
CONDENSE_QUESTION_PROMPT = PromptTemplate(input_variables=["chat_history","question"],
template=p_template)
memory = ConversationBufferMemory(memory_key="chat_history",input_key="question",output_key='answer',return_messages=True)

chatTemplate = """
Important: You are an intelligent chatbot designed to help agents by answering questions only on Enterprise services & activities.
Answer the question only if there is information in the chat history(delimited by ) and context(delimited by ) below.

If context is not empty and answer cannot be determined from context, say "I cannot detemine the answer from context".
If you don't know the answer, just say that you don't know, don't try to make up an answer.
Do not print your answer starting with "Answer:"
{context} ----------- {chat_history} ----------- Question: {question} Answer: Answer the question only if there is information based on the chat history(delimited by ) and context(delimited by ) below. 1. If context is not empty and answer cannot be determined from context, say "I cannot detemine the answer from context". 2. If you don't know the answer, just say that you don't know, don't try to make up an answer. 3. Do not print your answer starting with "Answer:"
"""

promptHist = PromptTemplate(
input_variables=["context", "question", "chat_history"],
template=chatTemplate
)

qa = ConversationalRetrievalChain.from_llm(
llm = llm,
retriever = new_knowledge_base.as_retriever(),
condense_question_prompt=CONDENSE_QUESTION_PROMPT,
verbose=True,
memory=memory,
condense_question_llm=llm,
return_generated_question=False,
combine_docs_chain_kwargs={"prompt": promptHist},
return_source_documents=False,
)

while True:
    question = input("Ask me anything about the files (type 'exit' to quit): ")

    if question.lower() in ["exit"] and len(question) == 4:
        end_chat = "Thank you for visiting us! Have a nice day"
        print_letter_by_letter(end_chat)
        break

    if question:

        # chat_history = []
        with get_openai_callback() as cb:
            response = qa({"question": question}, return_only_outputs = False)

        # chat_history.append(('user', question))
        # chat_history.append(('AI', response))
        print("AI:", response)
        print(cb)

if name == 'main':
main()

@dosu-bot Can you combine the solution you provided with my code that I am sharing? My code is below:
from dotenv import load_dotenv
import csv
import PyPDF2
from PyPDF2 import PdfReader
from langchain.document_loaders import DirectoryLoader, PyPDFLoader, PyPDFDirectoryLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.callbacks import get_openai_callback
from langchain.chat_models import ChatOpenAI
from langchain.chains import ConversationalRetrievalChain
from langchain.memory import ConversationBufferMemory
from langchain.prompts import PromptTemplate
import time
from langchain.vectorstores import Qdrant
from langchain.vectorstores import Chroma
from langchain.vectorstores import deeplake
from langchain.chains.qa_with_sources import load_qa_with_sources_chain
from langchain.callbacks import StreamingStdOutCallbackHandler
import pandas as pd
from docx import Document
from nltk.tokenize import sent_tokenize, word_tokenize
from collections import Counter
from nltk.corpus import stopwords
import os
def print_letter_by_letter(text):
for char in text:
print(char, end='', flush=True)
time.sleep(0.02)
def main():
load_dotenv()
my_activeloop_org_id = "yazanrisheh"
my_activeloop_dataset_name = "langchain_course_customer_support"
dataset_path = f"hub://{my_activeloop_org_id}/{my_activeloop_dataset_name}"
# directory_path = input("Copy your directory path here or upload a file: ")
directory_path = "C:\Users\Asus\Documents\Vendolista"
# pdf_loader = DirectoryLoader(directory_path,
#                               glob="**/*.pdf",
#                               show_progress=True,
#                               use_multithreading=True,
#                               silent_errors=True,
#                               loader_cls = PyPDFLoader)

pdf_loader = PyPDFDirectoryLoader(directory_path)

documents = pdf_loader.load()
print(str(len(documents))+ " documents loaded")

llm = ChatOpenAI(temperature = 0, model_name='gpt-3.5-turbo', callbacks=[StreamingStdOutCallbackHandler()], streaming = True)

# Split into chunks
text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=800,
    chunk_overlap=100,
)
chunks = text_splitter.split_documents(documents)

embeddings = OpenAIEmbeddings()

persist_directory = "C:\\Users\\Asus\\OneDrive\\Documents\\Vendolista"
knowledge_base = Chroma.from_documents(chunks, embeddings, persist_directory = persist_directory)
# save to disk
knowledge_base.persist()
#To delete the DB we created at first so that we can be sure that we will load from disk as fresh db
knowledge_base = None
new_knowledge_base = Chroma(persist_directory = persist_directory, embedding_function = embeddings)

# weird_knowledge_base = deeplake(chunks, dataset_path=dataset_path, embedding=embeddings)
# knowledge_base = Qdrant(documents, embeddings)

p_template = """Given the following conversation and a follow up question, rephrase the follow up question to be a standalone question, in its original language.
If the Standalone question is empty or cannot be generated, use the follow up question as Standalone question.
Chat History:
{chat_history}
Follow Up Input: {question}
Standalone question:"""

#CONDENSE_QUESTION_PROMPT = PromptTemplate.from_template(_template)
CONDENSE_QUESTION_PROMPT = PromptTemplate(input_variables=["chat_history","question"],
template=p_template)
memory = ConversationBufferMemory(memory_key="chat_history",input_key="question",output_key='answer',return_messages=True)

chatTemplate = """
Important: You are an intelligent chatbot designed to help agents by answering questions only on Enterprise services & activities.
Answer the question only if there is information in the chat history(delimited by ) and context(delimited by ) below.

If context is not empty and answer cannot be determined from context, say "I cannot detemine the answer from context".
If you don't know the answer, just say that you don't know, don't try to make up an answer.
Do not print your answer starting with "Answer:"
{context} ----------- {chat_history} ----------- Question: {question} Answer: Answer the question only if there is information based on the chat history(delimited by ) and context(delimited by ) below. 1. If context is not empty and answer cannot be determined from context, say "I cannot detemine the answer from context". 2. If you don't know the answer, just say that you don't know, don't try to make up an answer. 3. Do not print your answer starting with "Answer:"
"""

promptHist = PromptTemplate(
input_variables=["context", "question", "chat_history"],
template=chatTemplate
)

qa = ConversationalRetrievalChain.from_llm(
llm = llm,
retriever = new_knowledge_base.as_retriever(),
condense_question_prompt=CONDENSE_QUESTION_PROMPT,
verbose=True,
memory=memory,
condense_question_llm=llm,
return_generated_question=False,
combine_docs_chain_kwargs={"prompt": promptHist},
return_source_documents=False,
)

while True:
    question = input("Ask me anything about the files (type 'exit' to quit): ")

    if question.lower() in ["exit"] and len(question) == 4:
        end_chat = "Thank you for visiting us! Have a nice day"
        print_letter_by_letter(end_chat)
        break

    if question:

        # chat_history = []
        with get_openai_callback() as cb:
            response = qa({"question": question}, return_only_outputs = False)

        # chat_history.append(('user', question))
        # chat_history.append(('AI', response))
        print("AI:", response)
        print(cb)

if name == 'main':
main()

@dosu-bot can you please combine your suggestions with my code and give me the final output? I am a beginner at coding and still dont know how to do it properly

@dosu-bot This is my entire code and I want you to implement the changes needed on my code and then share the entire code that is edited. My issue is inconsistent responses and repeats the answer 3-4 times.
My code:
from dotenv import load_dotenv
import csv
import PyPDF2
from PyPDF2 import PdfReader
from langchain.document_loaders import DirectoryLoader, PyPDFLoader, PyPDFDirectoryLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.callbacks import get_openai_callback
from langchain.chat_models import ChatOpenAI
from langchain.chains import ConversationalRetrievalChain
from langchain.memory import ConversationBufferMemory
from langchain.prompts import PromptTemplate
import time
from langchain.vectorstores import Qdrant
from langchain.vectorstores import Chroma
from langchain.vectorstores import deeplake
from langchain.chains.qa_with_sources import load_qa_with_sources_chain
from langchain.callbacks import StreamingStdOutCallbackHandler
import pandas as pd
from docx import Document
from nltk.tokenize import sent_tokenize, word_tokenize
from collections import Counter
from nltk.corpus import stopwords
import os
def print_letter_by_letter(text):
for char in text:
print(char, end='', flush=True)
time.sleep(0.02)
def main():
load_dotenv()
my_activeloop_org_id = "yazanrisheh"
my_activeloop_dataset_name = "langchain_course_customer_support"
dataset_path = f"hub://{my_activeloop_org_id}/{my_activeloop_dataset_name}"
# directory_path = input("Copy your directory path here or upload a file: ")
directory_path = "C:\Users\Asus\Documents\Vendolista"
pdf_loader = DirectoryLoader(directory_path,
                              glob="**/*.pdf",
                              show_progress=True,
                              use_multithreading=True,
                              silent_errors=True,
                              loader_cls = PyPDFLoader)

# pdf_loader = PyPDFDirectoryLoader(directory_path)

documents = pdf_loader.load()
print(str(len(documents))+ " documents loaded")

llm = ChatOpenAI(temperature = 0, model_name='gpt-3.5-turbo', callbacks=[StreamingStdOutCallbackHandler()], streaming = True)

# Split into chunks
text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=800,
    chunk_overlap=80,
)
chunks = text_splitter.split_documents(documents)

embeddings = OpenAIEmbeddings()

persist_directory = "C:\\Users\\Asus\\OneDrive\\Documents\\Vendolista"
knowledge_base = Chroma.from_documents(chunks, embeddings, persist_directory = persist_directory)
# save to disk
knowledge_base.persist()
#To delete the DB we created at first so that we can be sure that we will load from disk as fresh db
knowledge_base = None
new_knowledge_base = Chroma(persist_directory = persist_directory, embedding_function = embeddings)

# weird_knowledge_base = deeplake(chunks, dataset_path=dataset_path, embedding=embeddings)
# knowledge_base = Qdrant(documents, embeddings)

p_template = """Given the following conversation and a follow up question, rephrase the follow up question to be a standalone question, in its original language.
If the Standalone question is empty or cannot be generated, use the follow up question as Standalone question.
Chat History:
{chat_history}
Follow Up Input: {question}
Standalone question:"""

#CONDENSE_QUESTION_PROMPT = PromptTemplate.from_template(_template)
CONDENSE_QUESTION_PROMPT = PromptTemplate(input_variables=["chat_history","question"],
template=p_template)
memory = ConversationBufferMemory(memory_key="chat_history",input_key="question",output_key='answer',return_messages=True)

chatTemplate = """
Important: You are an intelligent chatbot designed to help agents by answering questions only on Enterprise services & activities.
Answer the question only if there is information in the chat history(delimited by ) and context(delimited by ) below.

If context is not empty and answer cannot be determined from context, say "I cannot detemine the answer from context".
If you don't know the answer, just say that you don't know, don't try to make up an answer.
Do not print your answer starting with "Answer:"
{context} ----------- {chat_history} ----------- Question: {question} Answer: Answer the question only if there is information based on the chat history(delimited by ) and context(delimited by ) below. 1. If context is not empty and answer cannot be determined from context, say "I cannot detemine the answer from context". 2. If you don't know the answer, just say that you don't know, don't try to make up an answer. 3. Do not print your answer starting with "Answer:"
"""

promptHist = PromptTemplate(
input_variables=["context", "question", "chat_history"],
template=chatTemplate
)

qa = ConversationalRetrievalChain.from_llm(
llm = llm,
retriever = new_knowledge_base.as_retriever(),
condense_question_prompt=CONDENSE_QUESTION_PROMPT,
verbose=True,
memory=memory,
condense_question_llm=llm,
return_generated_question=False,
combine_docs_chain_kwargs={"prompt": promptHist},
return_source_documents=False,
)

while True:
    question = input("Ask me anything about the files (type 'exit' to quit): ")

    if question.lower() in ["exit"] and len(question) == 4:
        end_chat = "Thank you for visiting us! Have a nice day"
        print_letter_by_letter(end_chat)
        break

    if question:

        # chat_history = []
        with get_openai_callback() as cb:
            response = qa({"question": question}, return_only_outputs = False)

        # chat_history.append(('user', question))
        # chat_history.append(('AI', response))
        print("AI:", response)
        print(cb)

if name == 'main':
main()


Modbus control of operation mode heating circuit 2

Has anyone managed to control the operating mode register 5106 for heating circuit 2 via Modbus?
Sending values such as OFF (0) to register 5006 (heating circuit 1) is accepted correctly, but sending the same value to register 5106 is ignored by the Lambda controller.
Lambda SW Version: V0.0.4-3K Apr 24 2023

This is for heating circuit 2? Could you read the value?
If this HC was configured without booting the controller it could maybe not be written.

Reading back the operating mode register, both circuits show the values I have written periodically every minute. The lambda controller has been rebooted a couple of times since commissioning. Changing the mode from the GUI is the only way I have found so far to change the mode of heating circuit 2.

Hi there,
Thanks to all of you for your work.
I was able to integrate my EU20L to Home Assistant and read all sensor.
Writing values to the e-Manger also works fine.
But I've got the same issue like @patrickbohren. I can write values to the operating state of the heat circuits, with no error response. In HA shows the change after some seconds, but in the lambda GUI there is no change in the operation mode of the circuit.
It is the same behaviour for all of my 4 heat circuits. (Modbus 5006 - 5306)
Only the value accepted bei the EU20L is 0 fur circuit 3 (5206)
Normally the transfered operation state is "-1".
SW-Version V1.0.2 Apr 10 2024 09:32:23
Konfig-Version: V0x11
Parameter-Version: V0x1

Hello,
as far as I am correctly informed, this is a problem that was caused by an update some time ago. I can write the operating mode of my heating ciruits via Modbus, but it jumps back to the original value in Home Assistant after a while. The value does not change at all in the GUI of the heat pump. The heat pump does not accept the new operating mode either.
I have similar behavior with the setpoint flow line temperature. I write the value. The new value is displayed in Home Assistant, but only partially on the GUI (e.g. flow line setpoint) of the heat pump. After a few minutes, the value jumps back to the GUI value. Do I have to write the values every X minutes?

Datapoints between 00-49 have to be written regularly (timeout after 5 minutes), otherwise they fall to an assigned one
Default value returned.

Datapoints between 00-49 have to be written regularly (timeout after 5 minutes), otherwise they fall to an assigned one Default value returned.

Was meinst du damit? Sind das die letzten Stellen der Modbus-Adresse?
Und wenn ja: Wie löst du das dann?

The Datapoint number 00-49 are the two last digit of the register address.
An automation with regularly send values is overwriting the UI values. The UI values will not in every case represent the sender Information.
This is a kind of fail safe mechanism to prevent no control if there is a connection loss time greater than the timeout.
It’s a pitty!!!
All values are there, the control values, the compressor values, but lambda is not giving us theses values, via Modbus!
Only 3h of work within the sigmatek lasal software, if I could have access to, I would do it for them/us!

 But the GUI won’t display it at all.
Am I correct?

Yes, I would recommend to send the value every 31-59(without 40,45,50,55) second (example: /33) with HA and every value in a different second. So no automations send at the same time! Then there will be no issues and alarms in lambda.
Not every values will be shown in the HP UI! But some icons changes or temps will be shown.
They are working on a full Modbus Stack, that every value could read ( even compressor values, what is the most importent and useful) and write values that interact with the UI.

Yes, I would recommend to send the value every 31-59(without 35,40,45,50,55) second (example: /33) of a minute with HA and every value in a different second. So no automations send at the same time! Then there will be no issues and alarms in lambda. Not every values will be shown in the HP UI! But some icons changes or temps will be shown. They are working on a full Modbus Stack, that every value could read ( even compressor values, what is the most importent and useful) and write values that interact with the UI.

 Wäre doch wahrscheinlich für alle Seiten viel besser. Ich fange mal an mit meiner bisher einzigen Lambda-Automation, mit der ich dem Energiemanager meine Ist-Leistungswerte mitteile:
`alias: Leistungsdaten => Wärmepumpe
description: ""
trigger:

platform: state
entity_id:

sensor.leistung_ha_total_active_power

platform: time_pattern
seconds: "30"
condition: []
action:
data:
address: 102
hub: EU13L
value:
- >-
{{states('sensor.leistung_ha_total_active_power') | int |
bitwise_and(65535)}}
action: modbus.write_register
mode: single
`

Homeassistant Automation to set Roomtemp for Heating Circuit 2:
alias: Heating Circuit Room Temp -> EU08L
description: ""
trigger:
  - platform: state
    entity_id:
      - sensor.average_temperature_dg
  - platform: time_pattern
    seconds: /37
condition: []
action:
  - data:
      hub: EU08L
      value:
        - >-
          {{ ((states('sensor.average_temperature_dg') |float) | round(1) * 10)
          | int | bitwise_and(65535) }}
      address: 5104
    action: modbus.write_register
mode: single

Genau das habe ich ausgewählt, dann kommen die beiden Hochkommata, dazwischen habe ich meinen Code kopiert. Hat leider nicht funktioniert.

Activate a light, switch or a heat cable on defrost status:
Nice fog!
alias: EU08L -> Defrosting light
description: ""
trigger:
  - platform: state
    entity_id:
      - sensor.eu08l_heat_pump_1_state_map
condition: []
action:
  - choose:
      - conditions:
          - condition: state
            entity_id: sensor.eu08l_heat_pump_1_state_map
            state: DEFROSTING
        sequence:
          - type: turn_on
            device_id: 7dca0101cd516b1d22b610f871ac6cbc
            entity_id: 39198a77aed900a2289f6f571e5d4723
            domain: light
            flash: short
mode: single

Alarm:
alias: EU08L -> Notify EU08L Alarm
description: ""
trigger:
  - platform: numeric_state
    entity_id:
      - sensor.eu08l_heat_pump_1_error_state
    above: 0
condition: []
action:
  - action: notify.persistent_notification
    metadata: {}
    data:
      title: ⚠ Alarm Lambda EU08L
      message: "Error State: {{states('sensor.eu08l_heat_pump_1_error_state_map')}}"
      data:
        notification_id: eu08l_error
  - action: notify.mobile_app_iphone
    metadata: {}
    data:
      title: ⚠ Alarm Lambda EU08L
      message: "Error State: {{states('sensor.eu08l_heat_pump_1_error_state_map')}}"
      data:
        notification_id: eu08l_error
mode: single

Fail Save Heating Circiut 1 Room Temp:
alias: EU08L <- EG Temp
description: ""
trigger:
  - platform: state
    entity_id:
      - sensor.average_temperature_eg
  - platform: time_pattern
    seconds: /31
condition: []
action:
  - data:
      hub: EU08L
      address: 5004
      value:
        - >-
          {% if states('sensor.average_temperature_eg') != "unknown" and
              states('sensor.average_temperature_eg')!= "unavailable" %}
          {{ ((states('sensor.average_temperature_eg') |float) | round(1) * 10)|
          int | bitwise_and(65535) }} {% else %} {{ (17.7 * 10)| int |
          bitwise_and(65535) }} {% endif %}
    action: modbus.write_register
mode: single

where 17.7°C in heat pump UI info you, something is wrong with your sensors, but not with automation ;-).

 Hat leider nicht funktioniert.

So mache ich es:

Copy&Paste den YAML Code
Makiere den YAML Code
Drück auf <>
Done!

Ändere es oben, das hilft den Anderen.
6.

Zähler für den Abtau-Vorgang. In der configuration.yaml anzugelegen. Dazu habe ich noch einen Helfer angelegt, der mir den Wert für den jeweiligen Kalendertag anzeigt und immer um Mitternacht auf 0 gesetzt wird
- platform: history_stats
   name: Abtauen
   entity_id: sensor.eu13l_hp1_operating_state_txt
   unique_id: 1dc1114c-c3be-4727-85ce-98b0f32dd7cb
   state: "Defrost"
   type: count
   start: "{{ now().replace(hour=0, minute=0, second=0) }}"
   end: "{{ now() }}"

Genau das habe ich ausgewählt, dann kommen die beiden Hochkommata, dazwischen habe ich meinen Code kopiert. Hat leider nicht funktioniert.

So mache ich es:

Copy&Paste den YAML Code
Makiere den YAML Code
Drück auf <>
Done!

Ändere es oben, das hilft den Anderen.

 Mit reinkopieren, markieren, dann auf Code klicken, ging es problemlos. Danke!
Habs auch oben geändert

Zähler für den Abtau-Vorgang. In der configuration.yaml anzugelegen. Dazu habe ich noch einen Helfer angelegt, der mir den Wert für den jeweiligen Kalendertag anzeigt und immer um Mitternacht auf 0 gesetzt wird
- platform: history_stats
   name: Abtauen
   entity_id: sensor.eu13l_hp1_operating_state_txt
   unique_id: 1dc1114c-c3be-4727-85ce-98b0f32dd7cb
   state: "Defrost"
   type: count
   start: "{{ now().replace(hour=0, minute=0, second=0) }}"
   end: "{{ now() }}"

Wie zählst Du? WMZ oder Werte aus der Lambda? Ich habe WMZ´s verbaut und lese die mit wmbusmeters, hier kommen starke abweichungen zum tragen, gerade im unteren bereich der Kompressionsrate.

Fail Save Heating Circiut 1 Room Temp:
...
where 17.7°C in heat pump UI info you, something is wrong with your sensors, but not with automation ;-).

Sorry, habe nicht ganz verstanden, wofür die Automation gut ist und was es mit den 17,7° auf sich hat. Etwas mehr Erklärung/Kontext wäre gut.

s.O.

Neue Modbus Beschreibung:
https://lambda-wp.at/wp-content/uploads/2024/09/Modbus-Protokoll-und-Beschreibung.pdf

Neue Modbus Beschreibung: https://lambda-wp.at/wp-content/uploads/2024/09/Modbus-Protokoll-und-Beschreibung.pdf

Interessant. Kurzer Vergleich zur letzten Version:

Neue Werte für Netzwerkeinstellungen: 0200 - 0259
Neue Werte für Buffer (Heizungsspeicher): 3x04 - 3x09
Entfall von 1x50 (quittieren aller aktiven Fehler)

Hi there,
Since last weekend I've managed to control the heating circuits via NodeRed flow. The update interval is 3 min and up to now it works fine for me.
Here you find the flow I'm using.
[     {         "id": "b02b092f4d42b049",         "type": "group",         "z": "ee317ce86fef7a67",         "name": "Steuerung Heizkreis FBH EG&UG (Heating circuit 3)",         "style": {             "label": true         },         "nodes": [             "0f014586e7381b07",             "e94d0b6dbd20bb78",             "c660fe2c6fa3641b",             "84659a08cf773b89",             "49464dd03fb9275f",             "eaba7477c071e4f8",             "6f12fda0f70decb3",             "773d3a1c944f74fa",             "13c99bc60b6b4e35",             "6db53d81cdfbc311",             "3a03e6649eb1a9cd",             "88ff8a97d25a6735",             "b2cee62aa425ba68",             "afcdd285a219d676",             "a2725d6d49318353"         ],         "x": 24,         "y": 59,         "w": 1982,         "h": 222     },     {         "id": "0f014586e7381b07",         "type": "poll-state",         "z": "ee317ce86fef7a67",         "g": "b02b092f4d42b049",         "name": "",         "server": "8ed9d0bf.24f6b",         "version": 3,         "exposeAsEntityConfig": "",         "updateInterval": "3",         "updateIntervalType": "num",         "updateIntervalUnits": "minutes",         "outputInitially": true,         "outputOnChanged": true,         "entityId": "switch.fussbodenverteiler_status",         "stateType": "habool",         "ifState": "",         "ifStateType": "str",         "ifStateOperator": "is",         "outputs": 1,         "outputProperties": [             {                 "property": "valve",                 "propertyType": "msg",                 "value": "",                 "valueType": "entityState"             }         ],         "x": 500,         "y": 180,         "wires": [             [                 "e94d0b6dbd20bb78"             ]         ]     },     {         "id": "e94d0b6dbd20bb78",         "type": "switch",         "z": "ee317ce86fef7a67",         "g": "b02b092f4d42b049",         "name": "true / false",         "property": "valve",         "propertyType": "msg",         "rules": [             {                 "t": "true"             },             {                 "t": "false"             }         ],         "checkall": "true",         "repair": false,         "outputs": 2,         "x": 760,         "y": 180,         "wires": [             [                 "a2725d6d49318353"             ],             [                 "afcdd285a219d676"             ]         ]     },     {         "id": "c660fe2c6fa3641b",         "type": "change",         "z": "ee317ce86fef7a67",         "g": "b02b092f4d42b049",         "name": "3 = AUTO-HEATING(RW)",         "rules": [             {                 "t": "set",                 "p": "payload",                 "pt": "msg",                 "to": "3",                 "tot": "str"             }         ],         "action": "",         "property": "",         "from": "",         "to": "",         "reg": false,         "x": 1280,         "y": 160,         "wires": [             [                 "88ff8a97d25a6735"             ]         ]     },     {         "id": "84659a08cf773b89",         "type": "change",         "z": "ee317ce86fef7a67",         "g": "b02b092f4d42b049",         "name": "5 = FROST(RW)",         "rules": [             {                 "t": "set",                 "p": "payload",                 "pt": "msg",                 "to": "5",                 "tot": "str"             }         ],         "action": "",         "property": "",         "from": "",         "to": "",         "reg": false,         "x": 1230,         "y": 240,         "wires": [             [                 "88ff8a97d25a6735"             ]         ]     },     {         "id": "49464dd03fb9275f",         "type": "change",         "z": "ee317ce86fef7a67",         "g": "b02b092f4d42b049",         "name": "6 = SUMMER(RW)",         "rules": [             {                 "t": "set",                 "p": "payload",                 "pt": "msg",                 "to": "6",                 "tot": "str"             }         ],         "action": "",         "property": "",         "from": "",         "to": "",         "reg": false,         "x": 1240,         "y": 200,         "wires": [             [                 "88ff8a97d25a6735"             ]         ]     },     {         "id": "eaba7477c071e4f8",         "type": "modbus-write",         "z": "ee317ce86fef7a67",         "g": "b02b092f4d42b049",         "name": "Write EU20L_Hc3_Operating_mode",         "showStatusActivities": true,         "showErrors": true,         "showWarnings": true,         "unitid": "EU20L",         "dataType": "MHoldingRegisters",         "adr": "5206",         "quantity": "1",         "server": "576c70af86fd1bed",         "emptyMsgOnFail": true,         "keepMsgProperties": true,         "delayOnStart": false,         "startDelayTime": "",         "x": 1710,         "y": 180,         "wires": [             [                 "6f12fda0f70decb3"             ],             [                 "6f12fda0f70decb3"             ]         ]     },     {         "id": "6f12fda0f70decb3",         "type": "debug",         "z": "ee317ce86fef7a67",         "g": "b02b092f4d42b049",         "name": "debug 47",         "active": false,         "tosidebar": true,         "console": false,         "tostatus": false,         "complete": "true",         "targetType": "full",         "statusVal": "",         "statusType": "auto",         "x": 1900,         "y": 180,         "wires": []     },     {         "id": "773d3a1c944f74fa",         "type": "debug",         "z": "ee317ce86fef7a67",         "g": "b02b092f4d42b049",         "name": "debug 48",         "active": false,         "tosidebar": true,         "console": false,         "tostatus": false,         "complete": "true",         "targetType": "full",         "statusVal": "",         "statusType": "auto",         "x": 1540,         "y": 120,         "wires": []     },     {         "id": "13c99bc60b6b4e35",         "type": "inject",         "z": "ee317ce86fef7a67",         "g": "b02b092f4d42b049",         "name": "",         "props": [             {                 "p": "payload"             }         ],         "repeat": "",         "crontab": "",         "once": false,         "onceDelay": 0.1,         "topic": "",         "payload": "true",         "payloadType": "bool",         "x": 120,         "y": 240,         "wires": [             [                 "6db53d81cdfbc311"             ]         ]     },     {         "id": "6db53d81cdfbc311",         "type": "api-current-state",         "z": "ee317ce86fef7a67",         "g": "b02b092f4d42b049",         "name": "",         "server": "8ed9d0bf.24f6b",         "version": 3,         "outputs": 1,         "halt_if": "",         "halt_if_type": "str",         "halt_if_compare": "is",         "entity_id": "switch.fussbodenverteiler_status",         "state_type": "habool",         "blockInputOverrides": false,         "outputProperties": [             {                 "property": "valve",                 "propertyType": "msg",                 "value": "",                 "valueType": "entityState"             }         ],         "for": "0",         "forType": "num",         "forUnits": "minutes",         "override_topic": false,         "state_location": "payload",         "override_payload": "msg",         "entity_location": "data",         "override_data": "msg",         "x": 540,         "y": 240,         "wires": [             [                 "e94d0b6dbd20bb78"             ]         ]     },     {         "id": "3a03e6649eb1a9cd",         "type": "change",         "z": "ee317ce86fef7a67",         "g": "b02b092f4d42b049",         "name": "4 = AUTO-COOLING(RW)",         "rules": [             {                 "t": "set",                 "p": "payload",                 "pt": "msg",                 "to": "4",                 "tot": "str"             }         ],         "action": "",         "property": "",         "from": "",         "to": "",         "reg": false,         "x": 1280,         "y": 120,         "wires": [             [                 "88ff8a97d25a6735"             ]         ]     },     {         "id": "88ff8a97d25a6735",         "type": "junction",         "z": "ee317ce86fef7a67",         "g": "b02b092f4d42b049",         "x": 1410,         "y": 180,         "wires": [             [                 "773d3a1c944f74fa",                 "eaba7477c071e4f8"             ]         ]     },     {         "id": "b2cee62aa425ba68",         "type": "comment",         "z": "ee317ce86fef7a67",         "g": "b02b092f4d42b049",         "name": "Steuerung Heizkreis FBH EG&UG (Heating circuit 3)",         "info": "",         "x": 380,         "y": 100,         "wires": []     },     {         "id": "afcdd285a219d676",         "type": "ha-switch",         "z": "ee317ce86fef7a67",         "g": "b02b092f4d42b049",         "name": "nodered_cooling",         "version": 0,         "debugenabled": false,         "inputs": 1,         "outputs": 2,         "entityConfig": "d11a3526b091f5a4",         "enableInput": true,         "outputOnStateChange": false,         "outputProperties": [             {                 "property": "outputType",                 "propertyType": "msg",                 "value": "state change",                 "valueType": "str"             },             {                 "property": "payload",                 "propertyType": "msg",                 "value": "",                 "valueType": "entityState"             }         ],         "x": 980,         "y": 220,         "wires": [             [                 "49464dd03fb9275f"             ],             [                 "84659a08cf773b89"             ]         ]     },     {         "id": "a2725d6d49318353",         "type": "ha-switch",         "z": "ee317ce86fef7a67",         "g": "b02b092f4d42b049",         "name": "nodered_cooling",         "version": 0,         "debugenabled": false,         "inputs": 1,         "outputs": 2,         "entityConfig": "d11a3526b091f5a4",         "enableInput": true,         "outputOnStateChange": false,         "outputProperties": [             {                 "property": "outputType",                 "propertyType": "msg",                 "value": "state change",                 "valueType": "str"             },             {                 "property": "payload",                 "propertyType": "msg",                 "value": "",                 "valueType": "entityState"             }         ],         "x": 980,         "y": 140,         "wires": [             [                 "3a03e6649eb1a9cd"             ],             [                 "c660fe2c6fa3641b"             ]         ]     },     {         "id": "8ed9d0bf.24f6b",         "type": "server",         "name": "Home Assistant",         "addon": true,         "rejectUnauthorizedCerts": true,         "ha_boolean": "",         "connectionDelay": false,         "cacheJson": false,         "heartbeat": false,         "heartbeatInterval": "",         "statusSeparator": "",         "enableGlobalContextStore": false     },     {         "id": "576c70af86fd1bed",         "type": "modbus-client",         "name": "lambda",         "clienttype": "tcp",         "bufferCommands": true,         "stateLogEnabled": true,         "queueLogEnabled": true,         "failureLogEnabled": true,         "tcpHost": "xxx.xxx.xxx.xxx",         "tcpPort": "502",         "tcpType": "DEFAULT",         "serialPort": "/dev/ttyUSB",         "serialType": "RTU-BUFFERD",         "serialBaudrate": "9600",         "serialDatabits": "8",         "serialStopbits": "1",         "serialParity": "none",         "serialConnectionDelay": "100",         "serialAsciiResponseStartDelimiter": "0x3A",         "unit_id": "1",         "commandDelay": "1",         "clientTimeout": "1000",         "reconnectOnTimeout": true,         "reconnectTimeout": "2000",         "parallelUnitIdsAllowed": true,         "showErrors": true,         "showWarnings": true,         "showLogs": true     },     {         "id": "d11a3526b091f5a4",         "type": "ha-entity-config",         "server": "8ed9d0bf.24f6b",         "deviceConfig": "423ef37fa4ec5601",         "name": "nodered-switch_cooling",         "version": "6",         "entityType": "switch",         "haConfig": [             {                 "property": "name",                 "value": "nodered-switch_cooling"             },             {                 "property": "icon",                 "value": ""             },             {                 "property": "entity_picture",                 "value": ""             },             {                 "property": "entity_category",                 "value": ""             },             {                 "property": "device_class",                 "value": "switch"             }         ],         "resend": false,         "debugEnabled": false     },     {         "id": "423ef37fa4ec5601",         "type": "ha-device-config",         "name": "nodered-input",         "hwVersion": "",         "manufacturer": "Node-RED",         "model": "",         "swVersion": ""     } ]

Hey guys,
I would like to start the hot water preparation with a button. I had thought that this should work
action: modbus.write_register
data:
  value:
    - 4
  hub: EU13L
  address: 1015

According to the documentation, the address is writable.

Do you have any ideas on this one?

What ist the problem? Does it not work at all? Does it only work for a short period?
Optional question: what is your use case for this?

Unfortunately, it doesn't work at all. No response from the heat pump.
I have the water heated up every morning, as we usually shower in the morning. If we ever shower in the evening, we would simply press the button a few minutes beforehand...

I guess you set the boiler to "normal operation" in the morning and the rest of the day it is at "frost" in the scheduler. I don't know the internal operating rules of the system but this may prevent the heating of the domestic hot water when just setting the modbus value.
Did you verify that value 4 is actually written into register 1015?

Hey @RalfWinter ,
thank you for your help. I am going to try it this evening. If I send the modbus write command, the log files show this
`

2024-11-02 08:54:49.864 ERROR (MainThread) [homeassistant.components.modbus.modbus] Pymodbus: EU13L: Error: device: 0 address: 3005 -> pymodbus returned isError True
2024-11-02 08:55:00.115 ERROR (MainThread) [homeassistant.components.hassio.handler] Client error on /ingress/validate_session request 401, message='Attempt to decode JSON with unexpected mimetype: text/plain; charset=utf-8', url='http://<IP_ADDRESS>/ingress/validate_session'
2024-11-02 08:55:00.115 ERROR (MainThread) [homeassistant.components.hassio] Failed to to call /ingress/validate_session -

`
This Json-Format works with other addresses...

3005 ist the buffer request type. This goes to max 3.

I guess you set the boiler to "normal operation" in the morning and the rest of the day it is at "frost" in the scheduler. I don't know the internal operating rules of the system but this may prevent the heating of the domestic hot water when just setting the modbus value.
Did you verify that value 4 is actually written into register 1015?

@RalfWinter: Sorry, the error for address 3005 was still an incorrect entry in my config.
I have now set the heat pump to “Eco”. Unfortunately, the heat pump is not responding.  How can I verify that value 4 is actually written into register 1015? (Sorry, this is obviously a beginner's question)

Can anyone give me a hint? I just don't understand it. For example, I can write this address normally:
action: modbus.write_register
data:
  value:
    - 180
  hub: EU13L
  address: 5005

The correct value is displayed under Developer tools > States. Not in the GUI of the heat pump. The heat pump does not execute the commands either.
But this one does not work
action: modbus.write_register
data:
  value:
    - 4
  hub: EU13L
  address: 1015


Merge GO:0052917 & GO:0052824?

Related to #16022:
These two terms appear to be the same - merge?
dol-P-Man:Man(7)GlcNAc(2)-PP-Dol alpha-1,6-mannosyltransferase activity (GO:0052917)
7 annotations (all to ALG12 orthologs)
Def:
Catalysis of the reaction: alpha-D-man-(1->2)-alpha-D-Man-(1->2)-alpha-D-Man-(1->3)-(alpha-D-Man-(1->2)-alpha-D-Man-(1->3)-alpha-D-Man-(1->6))-beta-D-Man-(1->4)-beta-D-GlcNAc-(1->4)-D-GlcNAc-diphosphodolichol + dolichyl D-mannosyl phosphate = H(+) + alpha-D-Man-(1->2)-alpha-D-Man-(1->2)-alpha-D-Man-(1->3)-(alpha-D-Man-(1->2)-alpha-D-Man-(1->3)-(alpha-D-Man-(1->6))-alpha-D-Man-(1->6))-beta-D-Man-(1->4)-beta-D-GlcNAc-(1->4)-D-GlcNAc-diphosphodolichol + dolichyl phosphate.
Synonyms:
dolichyl-P-mannose:Man(7)GlcNAc(2)-PP-dolichyl mannosyltransferase activity | exact
dolichyl-P-Man:Man(7)GlcNAc(2)-PP-dolichyl alpha-6-mannosyltransferase activity
Xrefs:
EC | <IP_ADDRESS>0
KEGG_REACTION | R06260 |
MetaCyc | RXN-5468 |
RHEA | 29535
==
dolichyl-pyrophosphate Man7GlcNAc2 alpha-1,6-mannosyltransferase activity (GO:0052824)
2,331 annotations (seemingly to ALG12 orthologs)
Def:
Catalysis of the addition of mannose to dolichyl-pyrophosphate Man7GlcNAc2 (also written as Man7GlcNAc2-PP-Dol) in alpha-(1->6) linkage, producing Man8GlcNAc2-PP-Dol. PMID:10336995
Xrefs:
InterPro | IPR039485 | Dol-P-Man:Man(7)GlcNAc(2)-PP-Dol alpha-1,6-mannosyltransferase
And IPR039485 says:
"N-linked glycosylation in eukaryotes requires the assembly of lipid-linked oligosaccharide (LLO) precursor Glc3Man9GlcNAc2-pyrophosphate-dolichol (Glc3Man9Gn2-PDol). Addition of sugars to LLO is carried out sequentially by a serie of asparagine-linked glycosylation (Alg) glycosyltransferases [1]. ALG12 adds the eighth mannose residue in an alpha-1,6 linkage onto the dolichol-PP-oligosaccharide precursor (dolichol-PP-Man7GlcNAc2). Deficiency of ALG12 results in glycosylation disorder type lG"

That seems right.
And GO:0033164 glycolipid 6-alpha-mannosyltransferase activity
should be renamed glycolipid 1,6-alpha-mannosyltransferase activity to be more consistent with its parent alpha-1,6-mannosyltransferase activity.
Thanks, Pascale

Thoughts on this one @hdrabkin ?

Merged the two terms as requested.

@sjm41 What do you think about
GO:0000009 alpha-1,6-mannosyltransferase activity
and   GO:0033164 glycolipid 6-alpha-mannosyltransferase activity
They link to the same EC, EC:<IP_ADDRESS>

Most annotations are to GO:0000009 (17 EXP)
There are 5 EXP annotations to GO:0033164, 4 of which are to pimB/pimC (P9WMZ3 for example). PimB is linked to EC <IP_ADDRESS>6 and RHEA:52440, which we dont have in GO, we should probably create.
PimC has no EC  or RHEA link
InterPro IPR007315 links to both
alpha-1,6-mannosyltransferase activity (GO:0000009)
glycolipid mannosyltransferase activity (GO:0004376)
(is this right ?)

Thanks, Pascale

Seems GO:0033164 is more specific in that it specifies the substrate?  But the enzymatic activity appears to be the same as GO:0000009, as supported by the shared EC xref and the EC synonyms (https://enzyme.expasy.org/EC/<IP_ADDRESS>).  I don't think GO want MF terms that specify substrates, right? In that case, these two terms could be merged IMO.
(Doesn't look like there's a Rhea ID for <IP_ADDRESS>.)

Hi @pgaudet
I just ran into this issue again, which we didn't finalise back in 2020.
Looking at the ontology now, I see 'alpha-1,6-mannosyltransferase activity' is the parent of two terms:
alpha-1,6-mannosyltransferase activity (xref EC:<IP_ADDRESS>)
|__dolichyl-P-Man:Man(7)GlcNAc(2)-PP-dolichol alpha-1,6-mannosyltransferase (xref EC:<IP_ADDRESS>0)
|__glycolipid 1,6-alpha-mannosyltransferase activity (xref EC:<IP_ADDRESS>)
So 'alpha-1,6-mannosyltransferase activity' is a grouping term in the GO, with the def "Catalysis of the transfer of a mannose residue to an oligosaccharide, forming an alpha-(1->6) linkage."
That def doesn't match the EC:<IP_ADDRESS>, which is more specific, matching the other term (glycolipid 1,6-alpha-mannosyltransferase activity)
So I think the simplest (best?) thing to do now would be to keep both terms, but remove the EC number as an xref and in definition of alpha-1,6-mannosyltransferase activity (GO:0000009)
what do you say?

@pgaudet Reviewing the above, I think the only thing left to do on this ticket is to remove EC:<IP_ADDRESS> as an xref on the grouping term "alpha-1,6-mannosyltransferase activity (GO:0000009)", retaining that xref on the child term "glycolipid 1,6-alpha-mannosyltransferase activity (GO:0033164)".
Then we can close this.

thanks for the reminder!


Catkin needs better debugging tools or it should work in "isolated" mode by default

I keep running into issues from crossover side-effects when using catkin_make which do not occur when using catkin_make_isolated.
I don't think the speedup gained from catkin_make is worth it since it takes so long to debug errors when they occur. Either we need better ways to debug errors, or we need make catkin_make_isolated the default behavior.
The amount of time I have wasted trying to debug catkin builds is absurd.
@tfoote @tkruse

Side effects are bad.  That's one of the reason all the successful programming languages are Context Free.  This was all worked out in 1970's computer science.  In a complex system, it's more important to have tracebility, so you can find and fix errors quickly.
What's the upside of not having to say exactly what you mean?  You type a few less lines of code?   Weigh that against spending 5 hours working out that installing package X broke package Y.  I know which I would rather have!

Side effects are bad.  That's one of the reason all the successful programming languages are Context Free.  This was all worked out in 1970's computer science.  In a complex system, it's more important to have tracebility, so you can find and fix errors quickly.
What's the upside of not having to say exactly what you mean?  You type a few less lines of code?   Weigh that against spending 5 hours working out that installing package X broke package Y.  I know which I would rather have!

@DuaneNielsen Fortunately in the last two years, we've been developing (and using) catkin_tools, which provides parallelized isolated build, and version 0.4.0 will bring isolated cleaning too!

nice one, I'll check it out... thanks!


I create a namespace and be named 'test' in project A，but i can not use the 'test' namesapce in project B

I create a namespace and be named 'test' in project A，but i can not use the 'test' namesapce in project B

Useful
Info

Versions
Rancher v2.0.8 UI: v2.0.67

Access
local admin

Route
containers.index

Namespace names must be unique within a cluster.  This is a basic design constraint of kubernetes.  A project is a group of namespaces but does not change anything about their uniqueness.


Fix vulkan build with homebrew cask install of vulkan-sdk

My cmake .. was failing with FindVulkan errors even I disabled the vulkan build, on OS X 10.16.6, vulkan-sdk <IP_ADDRESS> from homebrew-cask. FindVulkan seemed to expect a slightly different SDK layout; I added a few more paths for it to look in and now it builds fine with vulkan. This should preserve previous build behavior if I understand the CMake options correctly.

Thanks @kazimuth this is now merged


Create a new method for handling _data/scams.yaml file

_data/scams.yaml Is getting too large. Make them easier to handle by splitting them into smaller files.

[ ] Break up scams.yaml into smaller _data/scam files (a good way to do this would be to parse through each scam and create individual files for each category). Test to see if it makes more sense to do this by category or subcategory.

[ ] Create a method that concatenates them on run and update. Verify that this does not conflict with existing functionality

I looked into this and while it would be pretty easy to implement, I personally prefer solutions like a CLI tool (see https://github.com/MrLuit/ESDB-CLI) or a GUI tool (will be implemented in v3.0.0) which allows users to manually add new entries without having to edit or create a new data file manually. Also, #1229 (if implemented) would drastically reduce scams.yaml size.
Would like to hear other opinions :)


Run tests against against row batching PG branch

https://github.com/vapor/postgres-nio/pull/153
FYI @fabianfett

Passed: https://github.com/SwiftPackageIndex/SwiftPackageIndex-Server/runs/3555053233

That's complete


Function reference in gitbook documentation

Current Supported syntax links to go-mysql-server documentation. It reads:

To see the SQL subset currently supported take a look at this list from src-d/go-mysql-server.

I think we should include it right in the gitbook, and specially for the functions, have their signature and some description.

To avoid inconsistencies between them, I suggest the following:

Add <!-- TAGS LIKE THIS --> to delimit parts in the readme and some other files in go-mysql-server and gitbase.
Replace them with newer versions every time we run make upgrade script.

That way, gitbase always has the content of the version we're running.


Add dilate option for convolution for semantic segmentation

Add dilate option for convolution / deconvolution, used for semantic segmentation.
Detail could be found in the following paper and their code.
Semantic Image Segmentation with Deep Convolutional Nets and Fully Connected CRFs.
Liang-Chieh Chen, George Papandreou, Iasonas Kokkinos, Kevin Murphy, and Alan L. Yuille
ICLR 2015

It is an important component for pixel-wise prediction task

I have checked the codes, and passed several test.
Please have a check and then merge @tqchen


This defaultMQProducer is necessary for message sending back to broker.
and  start method will not invoke  MQClientInstance#start, because it's parameter is false.
and It is a producer, so heat heat and scheduled task should have like other normal producer.
This is my opinion.

This defaultMQProducer is necessary for message sending back to broker. and start method will not invoke MQClientInstance#start, because it's parameter is false. and It is a producer, so heat heat and scheduled task should have like other normal producer.
That is my opinion.

This line:
this.defaultMQProducer.getDefaultMQProducerImpl().start(false).

This defaultMQProducer is necessary for message sending back to broker. and start method will not invoke MQClientInstance#start, because it's parameter is false. and It is a producer, so heat heat and scheduled task should have like other normal producer.
That is my opinion.

I mean this line in MQClientInstance#start: this.defaultMQProducer.getDefaultMQProducerImpl().start(false).

yeah, I watched your pr.

You said "repeated" call, but I don't get it. Where is another call for this.defaultMQProducer.getDefaultMQProducerImpl().start(false)?
你提到了“重复调用”，但是重复调用start的地方在哪里呀？这里的producer.start 起来是为了consumer客户端可以将消费失败的消息发送回broker，并没有重复吧？

DefaultMQProducer starts as follows:
DefaultMQProducer.start() -> DefaultMQProducerImpl.start() -> DefaultMQProducerImpl.start(true) -> MQClientInstance.start() -> DefaultMQProducerImpl.start(false).
In  DefaultMQProducerImpl.start(false) call
this.mQClientFactory.sendHeartbeatToAllBrokerWithLock();
RequestFutureHolder.getInstance().startScheduledTask(this);

DefaultMQProducerImpl.start(true) call again.


Added "iopts" mode allowing passing options via a ?iopts=[options] query parameter

Setting the -ioptsMode=true flag will allow specifying URLs with the query string ?iopts=[your options]

E.g.:
imageproxy -ioptsMode true
wget http://wwww.example.com/http://www.example.com/image.jpg?iopts=r90,480x

I signed it!

Why are you wanting to move the options to the query string?  I'm not likely to merge this change, since having the options in the path was one of the key features that motivated me to create imageproxy in the first place.  You can read more in this blog post, which also mentions several similar projects I had looked at previously, most of which do what you're proposing.
That said, I'd be interested in hearing if you're running into some kind of problem that motivated this change.

Hi @willnorris ,
We are using this at Betabrand (betabrand.com).
The rationale behind coding this feature was the following:
First, here's a simplified view of our infrastructure:
			|	  Images		| ----------> imageproxy
----------->|	Load Balancer	| ----------> imageproxy
			|					| ----------> regular webserver
			|					| ----------> regular webserver

In case all our imageproxy servers went down, we wanted to have the ability to still load our images by directing the HTTP request to our regular webservers.
Without the iopts, the URLs were in the form https://www.imageproxy.com/200,r90/https://www.example.com/image.jpg which would only work with the imageproxy and not with our regular backend servers.
By specifying the options in the query string, we can send the same URL to both the imageproxy servers and our regular backends.
I'm sure we could have solved this issue a different way, but at the time, modifying the imageproxy was the fastest, easiest, involving the least infrastructure work, way of addressing this problem.
It's worth noting that this PR doesn't change the default behavior of imageproxy. It only adds the options (disabled by default) of using a query string.
I'd love to see this PR merged, for purely selfish reasons :p : I wouldn't have to patch imageproxy with my changes every time you add a new feature or fix a bug.

And what happens if the remote URL has its own query string?  What if its parameters conflict with imageproxy's?

That is a very valid edge case that is not taken care of in that PR, but it
would be easy to add another option allowing to specify a custom query
parameter.
I didn't code this edge case because I am in control of our URLs, and as
such know that ?iopts= will never conflict with anything.
I however agree that it should be taken care of and would be happy to code
it if that helps merging :)
On May 20, 2016 1:14 PM, "Will Norris"<EMAIL_ADDRESS>wrote:

And what happens if the remote URL has its own query string? What if its
parameters conflict with imageproxy's?
—
You are receiving this because you authored the thread.
Reply to this email directly or view it on GitHub
https://github.com/willnorris/imageproxy/pull/66#issuecomment-220707593

No, wouldn't make a difference with merging as I'm still really not sure if I want to add the extra complexity at all. :)
Though I do really like the idea of your setup where it transparently fails over to the original image in case imageproxy is down.  That's got me wanting to see how hard that would be to do inside the web server itself.

Ha too bad. The complexity added seems small in comparison to the benefits, but that's your call.
Thanks for looking into it.

closing, since this isn't likely ever to be added to the core project, but added the plugins label, since this is one of the potential use cases I had in mind for https://github.com/willnorris/imageproxy/blob/master/docs/plugin-design.md


Linting failure in GitHub after passing pre-commit validation locally

My most recent push to tob-wgs passed pre-commit checks on my local machine, but failed when pushed to GitHub.
Link to CI stack trace.
Downloading pycparser-2.22-py3-none-any.whl (117 kB)    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 117.6/117.6 kB 27.7 MB/s eta 0:00:00 ERROR: THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE. If you have updated the package versions, please update the hashes. Otherwise, examine the package contents carefully; someone may have tampered with them.     unknown package:         Expected sha256 c0f1f3ae52406a13eecb44ebe445be7d677d2c3b4e4e29269ecb53b7ac55168e              Got        a29f5c6a0616f81eeb611882f5375b662cf9227[450](https://github.com/populationgenomics/tob-wgs/actions/runs/9202860042/job/25313369772?pr=175#step:4:451)07e7806133cf7d3786ba4a

@dancoates I've tagged you randomly because I don't know who else to tag! Feel free to pass on to a more appropriate colleague.

Huh, that's weird, I might just try re-running the job

Ran fine on re-run - must be something slightly non-deterministic in one of the wheel builds, or a network error during install. Not too much to worry about unless it happens often. I'll close this but feel free to re-open if you run into it again

Yes, we see this very occasionally and theorise that it's a transient network error fetching the package.


Fix/correct refactored paths

Correct paths due to refactor of folders/repo's
(Started (re-)build just now)

LGTM :+1:


Update AddressBook with recordsBook ResidencyBook

This is supposed to store past residencies. Using a separate
file for storage doesnt seem too likely at the moment, hence this.
This iteration allows reading of updated json into the model.
Editing the file (only with checkout commands which moves the residency
over) is not yet implemented.
addressbook.zip
Closes #93

Codecov Report

Merging #95 (bec5b6b) into feature-residency (c48b739) will decrease coverage by 0.30%.
The diff coverage is 45.45%.

@@                   Coverage Diff                   @@
##             feature-residency      #95      +/-   ##
=======================================================
- Coverage                73.44%   73.14%   -0.31%
- Complexity                 577      580       +3
=======================================================
  Files                       94       94
  Lines                     1740     1761      +21
  Branches                   191      193       +2
=======================================================
+ Hits                      1278     1288      +10
- Misses                     413      422       +9
- Partials                    49       51       +2

Impacted Files
Coverage Δ

...rc/main/java/seedu/address/model/ModelManager.java
92.42% <0.00%> (-2.89%)
:arrow_down:

src/main/java/seedu/address/model/AddressBook.java
70.66% <46.15%> (-3.94%)
:arrow_down:

...u/address/storage/JsonSerializableAddressBook.java
74.46% <57.14%> (-3.04%)
:arrow_down:

Continue to review full report at Codecov.

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

I'll add the test cases before making this ready for review

Cant seem to get the ResidencyBook::equals tests to work


click on alphabet won't work

Hello,
Click on alphabet won't work.
react-native 60

@sajadabasi  I had to modify the following to make it work:
in AlphabeticScrollBar.js I had to change the variable top to align with the top of where my alpha list is on my screen (in my case 80% from the top + 70px)
getTouchedLetter (y) {
        const top = Math.abs(y) - (this.containerHeight * 0.8 - 70);

        if (top >= 1 && top <= this.containerHeight) {
            this.setState({
                activeLetterViewTop: top
            });

            return this.state.alphabet[Math.round((top / this.containerHeight) * this.state.alphabet.length)]
        }
    }

Then, to make my flatlist move the correct distance I modified in index.js:
this.list.scrollToOffset({ animated: false, offset: index * this.props.itemHeight * 1.2 });
Hope that helps.

Did you use getItemLayout ?


More documentation improvements

Since this is a minor documentation pull request, I'm going to merge it without a reviewer.

Testing GitHub! Hi bots!


Fix prometheus metric error for dual emitting

What changed?
Fix metric error for dual emitting.

Why?
The scope is already doing dual emitting.
After emitting without domain tag,
Emitting with domain tag is not allowed in prometheus. As a result, the metric is lost.

How did you test it?
Local test.

Potential risks
However, the code runs well for M3. So it's possible that Uber internal cluster is relying on this behavior (emitting with+without domain tag). After this change, Uber's dashboard may need a small change to filter by domin="all".

Coverage increased (+0.03%) to 66.802% when pulling de2230d2544423dade4b2ffb94509a3977acb26b on qlong-metric-error into e73786229e059f8458a8c6956ee91cd05d5babcb on master.


Does this plugin still work in the latest version of ckedit

I've installed it and modified config.js... refreshed browswer cache etc... but still this dosn't work.
Any help, or is this just out of date ?
Thanks

same here

yeah I am facing the same issue.


When ipType is IPv6 but there's no IPv6 found, find IPv4(Fixes gh-2802)

Describe what this PR does / why we need it
When spring.cloud.nacos.discovery.ip-type is IPv6 but no IPv6 can be found out, SCA will automatically find IPv4. Thus a available service address is more likely to be provided.
Does this pull request fix one issue?
Fixes #2802
Describe how you did it
Describe how to verify it
Use a machine which doesn't support IPv6 to register. Or in application, set spring.cloud.inetutils.preferred-networks to exclude any IPv6.
Special notes for reviews

By the way, please create a same PR to branch of 2.2.x.

LGTM.


Implement remaining Windows filesystem functions

Now that the filesystem implementation is now complete, the previous test filters on Windows can be removed. Some of the tests only pass when certain environment variables have been set on Windows so an extra step has been added in the wasi test runner script to modify the test config files before the tests begin.

@loganek Could you help review this PR? It should be in ready status, the CI failures are due to other issues and we are looking into them.


Missing CONTRIBUTING.md?

For those who want to contribute but not familiar with the C# ecosystem.

@fsobolev what should we include in this?

@fsobolev what should we include in this?

Not necessary in the following order:

Building instructions for each platform
Information about resources where to get help or ask questions (issues, discussions, matrix chat)
Translation instructions (should be moved here from README)
Code contribution guidelines:

Program structure
Coding style
General recommendations on what should be implemented/avoided when opening a PR with a new feature or bugfix

Please include what new comers should contribute to. I thought you were still working on libharu...so include what library and language to use too, please.

I think a more appropriate thing to explain is not what newcomers should contribute to, but how to let us know that you're going to implement something, to avoid situations when 2 or more people work on the same thing, and to let us provide some additional instructions if needed before you start (or to let us explain why your contribution won't be accepted so you don't waste time).

https://github.com/nlogozzo/NickvisionMoney/blob/main/CONTRIBUTING.md


API Key startup UX

This alters the startup logic to check for an API Key in local storage (using useLocalStorage() from react-use), and if it's missing, we show a splash screen with form to enter.  The replaces the sync prompt() browser flow.
I'd like to include a way to delete the API key from storage via the UI, but getting it to work how I wanted was more work than I want to do this morning.
To test, remove your API key from local storage and refresh:

i was thinking we could just ask for it via the chat ui :)

Yeah, that would be good too.  I can try that.

I would rather have less code. Why not just show a modal options dialog here? I would prefer to not maintain 2 dialogs. Lets just make the requirement for key scarier when it's missing.

Reworked it to be inline, added the apiKey to the Settings (you'll need to put your API key in again after this is merged, since localStorage key has changed).
When the user starts the app for first time, chat form is replaced with API key form.  When they save a key, it gets replaced.  They can change/delete it in settings modal:

can we prioritize this? I think UX for key is main blocker for sharing this project

Sure, can you check what I have on this PR?  Are you ok with it, want changes?  We can land if you're satisfied.

GitHub has been weird for me today.  I'm talking about https://github.com/tarasglek/chatcraft.org/pull/7#issuecomment-1522141561 in case the UI isn't updating.

I think this would work. Couple thoughts:

Not a fan of hiding the key in settings or this input box. I often use these to look up key for when i need to use it elsewhere.
The text doesn't make it clear that one must enter the key. "Please enter your openai key:" would be more direct.
Shouldn't display the helpful assistant message. Should instead include some docs on how to get the key there.
probably should show the template of what the key looks like and validate it to not accept invalid keys

Alright, I've reworked it:

Not a fan of hiding the key in settings or this input box. I often use these to look up key for when i need to use it elsewhere.

I've added a Show/Hide button inline in the password input, so people can see it.  Personally, I don't want my key being shown, but I get that you do in some cases.  This gives both options.  The preferences modal does the same.

The text doesn't make it clear that one must enter the key. "Please enter your openai key:" would be more direct.

Updated

Shouldn't display the helpful assistant message. Should instead include some docs on how to get the key there.

I've changed the useMessages() hook to dynamically alter the first message we give to either be instructional or the typical greeting, depending on whether there's an api key.

probably should show the template of what the key looks like and validate it to not accept invalid keys

I've included an example in the instruction message.  I don't think we should try to validate the key, though, since OpenAI hasn't committed to a format.

@tarasglek test this out a bunch of ways before you merge and set people loose on it.  I think I've got all cases covered with this, but there might be edge cases I haven't tried.

Seems to work for all my testing.


feat(GroupTheory/GroupAction/Basic): additivize two lemmas

I see no reason for the omission of @[to_additive] on these two pretransitive_iff_... lemmas, so add it here.
From AperiodicMonotilesLean.

maintainer merge

bors r+


imdario reporting wrong name

https://github.com/kubernetes/client-go/blob/9186f40b189c640d4188387901905c728f291f17/tools/clientcmd/client_config.go#LL33C1-L33C1
go<EMAIL_ADDRESS>parsing go.mod:
        module declares its path as: dario.cat/mergo
                but was required as: github.com/imdario/mergo

@stovak I think they are going to need more context, as it seems to build fine:

it looks like the module renamed itself when it promoted to v1.0.0
client-go still uses an earlier version, so the name is correct
there are compatibility issues / bugs in the module that have previously prevented updating to the latest version  - there is an open issue tracking removal of the dependency rather than updating it - https://github.com/kubernetes/kubernetes/issues/107499


[8.x] Added withCountAsStated() and loadCountAsStated() methods

These two new methods withCountAsStated() and loadCountAsStated() allows us to customize the relationship queries while loading the counts as sub-select.
Example:
Class User extends Model {
    public function commentedUsers() {
        return $this->hasMany(Post::class)->join('comments', 'posts.id', 'comments.post_id')->selectRaw('distinct(user_id)');
    }
}

// Before

User::withCount('commentedUsers')->first();

// Query: select users.*, (select count(*) from posts where posts.user_id = users.id) as commented_users_count from users limit 1;

// After

User::withCountAsStated('commentedUsers')->first();

// Query: select users.*, (select count(*) from (select distinct(user_id) from posts join comments on posts.id = comments.post_id where posts.user_id = users.id) as commented_users_aggregate) as commented_users_count from users limit 1;

And the withCount() and loadCount() method still behave the same.
This behaviour allows one to customize the count query for the sub-select and avoiding the need for writing raw sub-select because of the default behaviour.

I think you meant to target 9.x. 8.x is only open to bug fixes, now.

@GrahamCampbell Yeah, but the behavior of withCount() producing the count result without the joins and custom selected column seems to be a bug. So made a PR to 8.x.
In order to solve this issue #41042

@GrahamCampbell Also, The newly added helper produces 2 levels of nested sub-select. But the MySQL 5.7 and MariaDB 10 was only supported to pass the table reference to 1 level of sub-select. Hence the 2 database checks are failing. I'm not sure whether it's fine or not to release these methods without supporting MySQL 5.7 and MariaDB 10.

Closing pending inactivity.


"az stop" doesn't actually stop VM

Environment summary
Install Method (e.g. pip, interactive script, apt-get, Docker, MSI, edge build) / CLI version (az --version) / OS version / Shell Type (e.g. bash, cmd.exe, Bash on Windows)
pip / OS X Sierra / zsh

STR:

Stop a VM with az vm stop
Try to resize a managed disk on the vm

EXPECTED:

managed disk is resized

ACTUAL:
az disk update -g aks-underlay-svc --name k8s-master-18898983-1-etcddisk -z 4000

Cannot resize disk k8s-master-18898983-1-etcddisk while it is attached to running VM /subscriptions/.../resourceGroups/aks-underlay-svc /providers/Microsoft.Compute/virtualMachines/k8s-master-18898983-1.

This is different behavior than stopping a VM in the Portal, which appears to actually stop the machine.

The portal actually de-allocates the VM, rather just powers off. There is inconsistency here which I will clarify with the portal folks. At the same time, you can useaz vm deallocate.

Is this the same as https://github.com/Azure/azure-cli/issues/3026?

Let us keep on using #3026 for tracking. Closing this one...


make on failure in sdk a pipelin

You also might be able to remove the on_failure member on every traversal type.


Use v1 tag for docker images.

I'm confused what this will do. Keep in mind we don't want to pull build-fuzzers and run-fuzzers from prebuilt images, we want to build them in github actions to make debugging possible.
I was even thinking of getting rid of the two images and just using one. WDYT of that?

This makes it much easier to depend on the OSS-Fuzz code, without us having to check it out and build it.
For debugging, we can have still have our own debug-only actions, which can just live in the OSS-Fuzz repo.
Getting rid of two images and using just one SGTM, and seems like a separate issue to this one.

LGTM


Method for determining if on-site execution fails from the server-side

Hospitals will probably have a long-running script that executes all the models on their side. If something fails, we want to be able to notify the hospital so they can promptly respond to it.
Ideas:

heartbeat: the CLI pings the server every x unit of time so the server knows things are running
script that checks the server for new results, if no results have been created in a while, then notify the data owner

For now we've decided on looking at the server logs to see if mlcubes have been retrieved. If there's inactivity, notify the respective user. This has one issue, which is that we can't tell from the server logs who is downloading the mlcubes


Add method to retrieve consumable details for consumables in your club

I had the need to check how much of a specific contract type are in my club, so that I know how much I can add to the trade pile. The current toolkit doesn't have a method to get that information, so I added a method that does it for all types of consumables.

Awesome, thanks @ZardoZ70. Appreciate that you took the time to update the readme as well 👍
Merged into the vnext branch and pushed to NuGet: https://www.nuget.org/packages/UltimateTeam.Toolkit/5.0.0-rc0002


Question about training an Iterseg Unet

Hello!
I am writing, not to report a issue, but to ask a question about training my own affinity Unet with Iterseg.
I am trying to segment an image with the pre-trained Iterseg Unet, but it oversegments my images. Reading how to train my own Unet, I saw that I would need a 'ground truth' labelled image and the corresponding original image to do so.
My question is, how would I get the labelled ground truth in the first place? Would this require a manual segmentation?
I look forward to your reply, thank you very much for your time and help,
ArtGP-79.

Would this require a manual segmentation?

Yes, this is done through either manual painting or getting an intermediate segmentation, for example the oversegmentation from iterseg, and editing it, for example, by merging labels. (This is where the name "iterseg" comes from, although @AbigailMcGovern started with a "classical" segmentation using blob detection + watershed.) You can merge labels with napari's built-in tools for example by clicking "pick label", picking one of the labels in a cluster, then selecting "fill", and clicking on the other labels. These tools have keyboard shortcuts (you can find them by hovering), so the back and forth can be very quick. And by the way, be sure to set the "n edit dims" to 3, otherwise fill only fills a plane.

Hello again!
I have been working on the manual segmentation and I have re-trained the iterseg segmentation with my new 'ground truth' image. I did this by following the instructions on training iterseg ourselves with the "ground truth from ROI" section.
After re-training the segmentation algorithm, I got multiple files containing diverse documents of .tif, .txt, .pt, and .csv nature.
Trying to use the new segmentation algorithm, I did what you can see in the image:

After reaching 100% on the segmentation process, napari stops responding and crashes consistently (which is very weird because if I just segment the same image with the original iterseg without adding a network or layer reference, it works fine).
My questions in this case are the following:

Is there any specific reason for the software to crash like this after finishing the segmentation? Should I use a more powerful computer to see if this fixes the issue or is this a file input error?
Which file out of the Unet training should we put in the 'network or config file' slot? Would it be one of the epoch/.pt files, or another one?
For the new Unet to segment the image according to expectations, would it be better to add the ground truth labels in the 'layer reference' slot? Or should I keep this as none?

I hope you can help me out. Thank you very much for your time and help :)
Kind regards,
ArtGP-79.

napari stops responding and crashes consistently

Is there any specific reason for the software to crash like this after finishing the segmentation? Should I use a more powerful computer to see if this fixes the issue or is this a file input error?

Did you get any kind of error log? It's hard to know otherwise what is causing the crash and how it might be fixed. I don't think it's a computer power issue, more likely a bug in our code 😅 but we need more info to diagnose it.

Which file out of the Unet training should we put in the 'network or config file' slot? Would it be one of the epoch/.pt files, or another one?

I think this is the .pt file indeed.

For the new Unet to segment the image according to expectations, would it be better to add the ground truth labels in the 'layer reference' slot? Or should I keep this as none?

tbh I don't remember what this is for. 😅 @AbigailMcGovern?

Thank you for your fast reply!

Unfortunately, I don't get any error logs or any indications of what's going on because when the segmentation finishes, Napari goes 'white' and the windows message "program does not respond" appears on screen. I have tried waiting for Napari to respond, but have not managed to get it to work, so I always have to kill it with the task manager.

I also don't get any message on the VSCode console (which is where I run Napari from). It simply freezes.
It is weird that the software just crashes like that, maybe it would be helpful if you try to do the same thing with my data? See if you also run into this problem...

Ok great, then on this part there's no problem, just a quick question. I set the retraining to run for 4 epochs and what I get back are .pt files named:

my-unet
my-unet_epoch-0
...1
...2
...3

I suppose the epoch 3 .pt file is the one with the most accurate version of the new Unet, but is this the case? or would it be the "my-unet"?

No problem, looking forward to @AbigailMcGovern 's reply :)

Thank you very much for your time and help.
Kind regards,
ArtGP-79.

what I get back are .pt files named:

the latest one. I would check the "last modified" or "created" timestamps on the files and pick the latest.

maybe it would be helpful if you try to do the same thing with my data?

Sure, if you can subset things to something small enough to share but that still causes the error, and share also the .pt file, I can try to run it. But as a warning the next two weeks are really busy with conferences for me so I may not be able to do it until the end of the month.

Hi,
I just sent you the image I am working with, the .pt files (latest ones), and the ground truth with which I trained the new Unet so you can have a look for yourself.
Sorry to bother while you are so busy, hope everything goes well at the conferences.
Kind regards,
ArtGP-79.


Migrate to apache/solr-operator

As mentioned when the repo moved to apache/lucene-solr-operator, the final resting stop is apache/solr-operator.
Now that Solr is an official Apache top level project, we can finally make the move.
The big issue lies in the helm chart, which is currently hosted at https://apache.github.io/lucene-solr-operator/charts. We will need to move this to a stable location that allows people to migrate on their own time. Now that Solr has its own site (https://solr.apache.org), we can likely host is at https://solr.apache.org/charts. That way we can keep both the old location and the new location live for a week or so and let people migrate on their own time. Then we can go ahead and migrate the repository (breaking the old helm chart link).
After the migration is done, we can update the documentation and code to use the new repository location.

Infra ticket has been created to do the migration: INFRA-21561

As everyone can probably see, the repo has been renamed to https://github.com/apache/solr-operator. Time to go through the code!


How to set RowsPerPage in MudTablePager?

In my table, I want to use the pagination feature. I am trying to set it up like so:
        PagerContent(fragment {
            MudTablePager'() {
                RowsPerPage(state.page.pageSize)
                RowsPerPageChanged(SetPageSize >> dispatch)
            }
        })

However, I am getting
'RowsPerPage' is not used correctly. This is a custom operation in this query or computation expression.

And likewise for RowsPerPageChanged.
state.page.pageSize is of type int which is the Int32 MudBlazor expects, and SetPageSize >> dispatch is of type int -> unit.
How do I have to use it?
As I understand as per the MudBlazor docs, the table is meant to have a list of all elements in memory and do the pagination in the browser. I am, however, using pagination on the server side, I submit the request to my service which gives me the respective excerpt from the data. Since we might end up with thousands of elements, this is the only feasible way to do here.

The error is expected, because RowsPerPage does not belong to MudTablePager', instead it belongs to MudTable'. That is why you can get the intellicense. (I think fsharp team really should improve CE intellicense).
According to MudBlazor doc, you are not using it correctly. MudTablePager' is just for configuration, it is not supposed to used to trigger page. MudBlazor support server side pagination and client side. But server side does not work well for elmish.
I noticed that you write code like "PagerContent(fragment { ...". The fragment is used to compose multiple child nodes, so if you have only one node you do not need that. You can just write "PagerContent(MudTablePager'(){...})"
We can only use client side pagination, but instead of using MudTablePager', we can use MudPagination' instead, or create your own pagination control. Like below example:

type Foo = { Name: string; Age: int }

type Model =
    {
        TotalCount: int
        Page: int
        PageSize: int
        Rows: Foo list
    }

type Msg = | LoadData of page: int

let init () =
    { TotalCount = 1000; Page = 1; PageSize = 10; Rows = [] }, Cmd.ofMsg (LoadData 1)

let update msg (model: Model) =
    match msg with
    | LoadData p ->
        { model with
            Page = p
            Rows = [ for i in 1 .. model.PageSize -> { Name = $"name {p + i}"; Age = p + i } ]
        },
        Cmd.none

let view (model: Model) (dispatch: Msg -> unit) =
    MudTable'() {
        Items model.Rows
        HeaderContent(
            fragment {
                MudTh'() { "Name" }
                MudTh'() { "Age" }
            }
        )
        RowTemplate(fun row ->
            fragment {
                MudTd'() { row.Name }
                MudTd'() { row.Age }
            }
        )
        PagerContent(
            MudPagination'() {
                Count(model.TotalCount / model.PageSize)
                Selected model.Page
                SelectedChanged(LoadData >> dispatch)
                ControlButtonClicked(
                    function
                    | Page.First -> dispatch (LoadData 1)
                    | Page.Last -> dispatch (LoadData(model.TotalCount / model.PageSize))
                    | Page.Next -> dispatch (LoadData(model.Page + 1))
                    | Page.Previous -> dispatch (LoadData(model.Page - 1))
                    | _ -> dispatch (LoadData 1)
                )
            }
        )
    }

let mudPageElmishDemo = html.elmish (init, update, view)


Issue: lose all score when retry level

Not sure if this has been addressed but I notice in my game after completing a couple of levels and I die and retry, all score is lost from previous levels, I fixed this by adding another variable to PlayerData "level_score" with a setget and make ememys and coins add there score to this, then I add the level score to the total score in the portal and make the user interface add the scores for display "score.text = "Score: %s" % str(PlayerData.score+PlayerData.level_score)"
now when I die I only lose the score for that level.
Fantastic tutorial BTW

@PartTimeCode could you show the changes made to "PlayerData.gd"? I see you put the change to the %s for game interface score but I am not sure exactly how I am supposed to code the function for level_score so that it actually only takes the totals from that specific scene.


[Table] add hierarchy functionality / styling

What package is this for?

[x] React
[ ] Angular

Summary
Table currently has nested rows, but doesn't have the idea of hierarchy like the List component. For single-nested child rows, we should not add a gray spacer and we should align the checkboxes. For multi-nested rows, the gray spacer should be present

[ ] checkboxes should be aligned
[ ] there should be no gray spacer

Additional context
internal issue: https://github.ibm.com/wiotp/monitoring-dashboard/issues/1363
Screenshot:

Specific timeline issues / requests
Do you want this work within a specific time period? Is it related to an
upcoming release?
September release
Available extra resources
What resources do you have to assist this effort?
Myself

:tada: This issue has been resolved in version 2.122.0 :tada:
The release is available on:

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


for those ignorant, how do I yo this?

I like your examples, very thorough... but I'm a lowly msoft dev and don't know Yo.... me lowly ignorant

Look at this repository for more installation on how to use this.


Integrate :rich_text_area with placeholders

Trix (the rich text editor that's rendered by Action View's form builder) has supported the [placeholder] attribute since at least version 0.9.0 (and continues to support it in 2.1.1.
This commit enables :placeholder support in the
SimpleForm::Inputs::RichTextAreaInput class to transform placeholder internationalization strings into trix-editor[placeholder] HTML attributes.

I had originally tried to add test coverage by making the following change:
diff --git a/test/inputs/rich_text_area_input_test.rb b/test/inputs/rich_text_area_input_test.rb
index 15d12a5..1fc3df7 100644
--- a/test/inputs/rich_text_area_input_test.rb
+++ b/test/inputs/rich_text_area_input_test.rb
@@ -12,4 +12,11 @@ class RichTextAreaInputTest < ActionView::TestCase
     with_input_for @user, :description, :text, placeholder: 'Put in some text'
     assert_select 'textarea.text[placeholder="Put in some text"]'
   end
+
+  test 'input generates a rich text area for rich text area attributes from placeholder translations' do
+    store_translations(:en, simple_form: { placeholders: { user: { description: "placeholder from i18n en.simple_form.placeholders.user.description" } } }) do
+      with_input_for @user, :description, :rich_text_area
+      assert_select 'trix-editor.rich_text_are="placeholder from i18n en.simple_form.placeholders.user.description"]'
+    end
+  end
 end

Unfortunately, Action Text and Trix are not available to the Simple Form test suite. Similarly, the existing coverage in test/inputs/rich_text_area_input_test.rb introduced in 3b3ab24 appears to make assertions about :text and <textarea> elements instead of :rich_text_area and <trix-editor> elements.

@seanpdoyle thank you! Yeah, I know about that rich_text_area spec, I'll try to look into it a bit later.


Golemancy research bug

In the research table, when i click on a "scripting" card for golemancy research it completes the card without me having paper and scribing tools in my inventory.(beta 6)

By "inventory", do you include the inventory of the research table? Or just your player inventory?
It uses a bit of ink and paper from the table iirc but I am not sure either.

The "scripting" card consumes a piece of paper and a full set of scribing tools from the players inventory.

Nope, it is consumed from the table.


TA SA1 style options

Overview
Add chart controls for styling Trade Area SA1s:

Line color
Line width

Resolved in 878d1a4d2626d5c7347c516eca25b3405602eaff


feat(file): implement spec.files for kind: file

Ability to specify more than one file for kind: file
Fixes #435
Additional validations
General:

allow only one file if spec.Line is specified

For sources & conditions

allow only one file

For targets:

allow multiple files if no spec.Line is specified

Test
To test this pull request, you can run the following commands:
cp <to_package_directory>
go test

Additional Information
spec.file should be deprecated in the following version.
Potential improvements

do the same for kind: dockerfile  and kind: yaml
Add tests with "file://..."
Rename the package file to files

file.yaml: success :)

I didn't found the report of CodeQL:

Ready for review, finally :sweat_smile:

:sob:

Ready for review, finally sweat_smile

I'll look into it

Thanks for the pullrequest, that's a huge one.
I think I spot an error with the following manifest when using the line from a source
sources:
  scenario-1:
    name: "Scenario 1"
    kind: file
    scmID: scenario-1
    spec:
      file: README.md
      line: 1

scms:
  scenario-1:
    kind: git
    spec:
      username: '{{ requiredEnv "UPDATECLI_GITHUB_ACTOR" }}'
      password: '{{ requiredEnv "UPDATECLI_GITHUB_TOKEN" }}'
      url: "https://github.com/updatecli/experiment.git"
      branch: "main"

I think I spot an error with the following manifest when using the line from a source

Well it can't reproduce it :/

I think I spot an error with the following manifest when using the line from a source

Well it can't reproduce it :/

Well I can randomly reproduce it

The result of my experimentation
https://gist.github.com/olblak/88351cf2047520abe44eefb65380abdf

I've got this error with your manifest: https://gist.github.com/lemeurherve/4d00d36115c170a40899f8d699abbb91

@olblak reproduced and fixed :)
Please also review https://github.com/lemeurherve/updatecli/pull/18/files ;)

Thanks @lemeurherve it works great.
I am waiting for @dduportal to provide a final feedback before merging this pullrequest.
Also so, would you have some time to add a manifest to test the different "file" usecases in the e2e directory?
Configuration cannot have WARNING or Error as defined in the venom test here

@lemeurherve linting test are failing :)

Looking into e2e errors

The e2e error comes from udpatecli version:
$ dist/updatecli_darwin_amd64/updatecli version

VERSION

Application:

Build Time :

$ updatecli version

VERSION

Application:    0.22.3
Golang     :    1.17.8 linux/amd64
Build Time :    2022-03-22T09:52:05Z

Not sure why though

The e2e error comes from udpatecli version:
$ dist/updatecli_darwin_amd64/updatecli version

VERSION

Application:

Build Time :

$ updatecli version

VERSION

Application:    0.22.3
Golang     :    1.17.8 linux/amd64
Build Time :    2022-03-22T09:52:05Z

Not sure why though

It depends who you build updatecli locally, because you may not have set the flag that define the different version information

OK. Do the e2e tests pass locally for you?

Yes it does
 • Updatecli Version TestSuite (e2e/venom.d/test_version.yaml)
 	• Test-updatecli-version-return-code-is-0 SUCCESS

Maybe @dduportal can help you in case of something specific on mac which I am missing

Anyway e2e test are executed for each pullrequest in the build workflow so you'll know very quickly if something goes wrong. :D