Multi-day bus trips have different date range options than subway

Describe the bug

To Reproduce
Steps to reproduce the behavior:

Go to multi-day subway trips
Click on date selection and observe options
Go to multi-day bus trips
Click on date selection and observe the options are different

Expected behavior

I think the options should be consistent for better usability
Screenshots

Device Info (please complete the following information):

Device: [e.g. iPhone 6, Laptop]
OS: [e.g. iOS, Windows]
Browser: [e.g. Chrome, Safari]
Browser Version: [e.g. 22]

Additional context

This is expected. Bus data isn't live. We only get bus data in monthly batches about 2 months after the month ends. Because of that, we need to have a different set of date options.
Once https://github.com/transitmatters/gobble is up and running, then we'll be able to have them share the date selectors

@devinmatte  ahhh gotcha, forgot about that! maybe a disclaimer in the meantime about why the date ranges are different? I only see this generic one on the page


[375] Add license file

Solves #375
Please review and approve.

I will personally try to communicate with all of previous contributors to ensure all are ok with this license applied.
Give me, please, a few weeks to do so.

Has there been any progress in that regard? Not having a license could be actually a big deal formally, because without it, since we are not PAH volunteers per se, using the app by PAH might constitute the unjustified income. Since there is no other formal agreement between them and us (because "us" don't legally exist), having a license would prevent that problem. I suggest to add one as quick as possible.
@magul I remember we agreed to talk to each contributor and give one a chance to agree. If it's been done and the rest just didn't respond I would take it as a silent consent. If you didn't contact them I would merge it anyway - we all know what we are doing and even if some contributors didn't express that explicitly the implicit working agreement is still binding. I think it's highly unlikely that anyone would litigate and even if somebody were to, the case in that regard seems very frail. Meanwhile from the formal standpoint it seems more pressing to formalize the use of software so that PAH would not be at risk (@OlaPAH please correct me if that's for some reason an irrational panic on my part ^^).

bump @OtisRed, @magul, @monikakrawczak any decision on it?


Bug:

AssertionError: Multiple PK columns not supported, A possible solution is to override BaseModelView class and put your own logic.
I have two tables and m2m relation between them, it works but not with starlette-admin:
class Profile(Base):
    ...
    categories = relationship(ProfilesCategories)

class Category(Base):
    ...

class ProfilesCategories(Base):
      __tablename__ = "categories_in_profile"
      category_id = Column(Integer, ForeignKey('categories.id'), primary_key=True)
      profile_id = Column(Integer, ForeignKey('profiles.id'), primary_key=True)

      category = relationship("Category")

Pydantic models:
class ProfilesCategoriesSchema(BaseModel):
    ....

class ProfileReadSchema(BaseModel):
    ...
    categories = lsit[ProfilesCategoriesSchema]

If I dont add view for m2m table and make changes to get this:
class Profile(Base):
    ...
    categories = relationship(Category, secondary="categories_in_profile")

Starlette-admin works, but my api responses fail

Starlette-Admin version: [e.g. 0.3.2]
ORM/ODMs: SQLAlchemy

Currently, starlette-admin does not support multiple primary key columns. However, there is a workaround when dealing with a many-to-many relationship using an association object. You can make it work by including an independent ID in your association object. Here is a full example:
from typing import List, Optional

import uvicorn
from sqlalchemy import ForeignKey, create_engine
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, relationship
from starlette.applications import Starlette
from starlette_admin.contrib.sqla import Admin, ModelView

engine = create_engine(
    "sqlite:///test.db", connect_args={"check_same_thread": False}, echo=True
)

class Base(DeclarativeBase):
    pass

class Association(Base):
    __tablename__ = "association_table"
    id: Mapped[int] = mapped_column(primary_key=True)
    left_id: Mapped[int] = mapped_column(ForeignKey("left_table.id"))
    right_id: Mapped[int] = mapped_column(ForeignKey("right_table.id"))
    extra_data: Mapped[Optional[str]]
    child: Mapped["Child"] = relationship(back_populates="parents")
    parent: Mapped["Parent"] = relationship(back_populates="children")

class Parent(Base):
    __tablename__ = "left_table"
    id: Mapped[int] = mapped_column(primary_key=True)
    name: Mapped[str] = mapped_column()
    children: Mapped[List["Association"]] = relationship(back_populates="parent")

class Child(Base):
    __tablename__ = "right_table"
    id: Mapped[int] = mapped_column(primary_key=True)
    name: Mapped[str] = mapped_column()
    parents: Mapped[List["Association"]] = relationship(back_populates="child")

Base.metadata.create_all(engine)
app = Starlette()  # FastAPI()

# Create admin
admin = Admin(engine, title="Example: SQLAlchemy")

# Add view
admin.add_view(ModelView(Parent))
admin.add_view(ModelView(Child))
admin.add_view(ModelView(Association))

# Mount admin to your app
admin.mount_to(app)

if __name__ == "__main__":
    uvicorn.run(app)


Is there a method to get the constituents separately after parsing?

This is a question: I am wondering if there is any method to give us the constituents of parsing separately.        }       value: "."     }     value: "@S"   }   value: "S" } value: "ROOT"
Is there any way/method that I can get for example the NPs, VPs, or Ss separately in a list with their corresponding start/end indexes?

I have written a recursive method that returns a list of all the constituents/chunks in the tree based on the output of constituency parser-- would be happy to share my code. However, one problem is that items on this list may have overlaps. It is because when I parse the tree, there's obviously a chance that we have multiple labels of the same type (e.g. VPs or NPs) on the same path to a child. For example, for the input sentence "I bought the book because I read good reviews about it." the list of chunks would be like the following (this is the output of my method and in this case I only listed VPs, NPs, and SBARs):
<class 'list'>:
[['NP', 'I'],
['NP', 'the book'],
['NP', 'I'],
['NP', 'good reviews'],
['NP', 'it'],
['SBAR', 'because I read good reviews about it'],
['VP', 'bought the book because I read good reviews about it'],
['VP', 'read good reviews about it']]

As you see, there's an overlap between two of the VPs and the SBAR. Now, my question/confusion is that, how should I handle the overlaps between chunks? Does it depend on where I want to use these chunks? Is there a unique strategy/rule I should follow to resolve the overlaps?


Fix mingw compiler error due to missing function declaration

This fixes the following compiler errors.
time_zone_lookup.cc:78:34: error: 'WindowsCreateStringReference' was not declared in this scope time_zone_lookup.cc:84:34: error: 'WindowsDeleteString' was not declared in this scope time_zone_lookup.cc:90:34: error: 'WindowsGetStringRawBuffer' was not declared in this scope
Also, official documentation suggests to include the winstring.h header. https://learn.microsoft.com/en-us/windows/win32/api/winstring/nf-winstring-windowsgetstringrawbuffer

Please send this fix to https://github.com/google/cctz. We import this code from there.

Could you please update the contribution guidelines to include that requirement? It would be very helpful for first-time contributors. Thank you.


[$500] Workspace - WS member list when inviting users to workspace and room appears different

If you haven’t already, check out our contributing guidelines for onboarding and email<EMAIL_ADDRESS>to request to join our Slack channel!

Version Number: 1.3.99-0
Reproducible in staging?: Y
Reproducible in production?: Y
If this was caught during regression testing, add the test name, ID and link from TestRail:
Email or phone of affected tester (no customers):
Logs: https://stackoverflow.com/c/expensify/questions/4856
Expensify/Expensify Issue URL:
Issue reported by: Applause - Internal Team
Slack conversation:
Action Performed:

Go to staging.new.expensify.com
Go to Settings > Workspaces > any workspace > Members
Click Invite
Go to any room
Click on the room header > Members
Click Invite
Note that the list in these two invite pages is different

Expected Result:
The list of members in the workspace when inviting members to the workspace and to the room should be the same, and in both, members should be displayed in alphabetical order
Actual Result:
The list of members in the workspace when inviting members to the workspace and to the room is different
The list when inviting members to the workspace used to appear the same as the list when inviting members to room
Platforms:

Which of our officially supported platforms is this issue occurring on?

[x] Android: Native
[x] Android: mWeb Chrome
[x] iOS: Native
[x] iOS: mWeb Safari
[x] MacOS: Chrome / Safari
[x] MacOS: Desktop

Screenshots/Videos

https://github.com/Expensify/App/assets/78819774/ea4f5467-764b-43d6-bd34-c9c7b006fc36
View all open jobs on GitHub
Upwork Automation - Do Not Edit

Upwork Job URL: https://www.upwork.com/jobs/~0174fd74e2f19eea53
Upwork Job ID:<PHONE_NUMBER>848719872
Last Price Increase: 2023-11-22

Proposal
from: @unicorndev-727
Please re-state the problem that we are trying to solve in this issue.
The list of members in the workspace when inviting members to the workspace and to the room should be the same
What is the root cause of that problem?
The root cause is that  RoomMembers filter report.participantAccountIDs and Workspaces filter policyMembers.
https://github.com/Expensify/App/blob/9d79fd12ce8f5d1dcb8870b61a8bc4513f55c935/src/pages/RoomMembersPage.js#L185
https://github.com/Expensify/App/blob/9d79fd12ce8f5d1dcb8870b61a8bc4513f55c935/src/pages/workspace/WorkspaceMembersPage.js#L299
What changes do you think we should make in order to solve the problem?
We need to adjust these two values.
What alternative solutions did you explore? (Optional)
N/A

Contributor details
Your Expensify account email<EMAIL_ADDRESS>Upwork Profile Link: https://www.upwork.com/freelancers/~0184e107e8ee954e0d

Proposal
Please re-state the problem that we are trying to solve in this issue.
The list of users looks different when inviting users to a workspace vs inviting users to a room. They are sorted differently
What is the root cause of that problem?
https://github.com/Expensify/App/pull/29044/files
This PR introduced a way to invite multiple users to a workspace. By doing that, in changed the way the list of users is handled:
            // Only add the user to the invites list if it is valid
            if (userToInvite) {
                newUsersToInviteDict[userToInvite.accountID] = userToInvite;
            }

            // Add all personal details to the new dict
            _.each(inviteOptions.personalDetails, (details) => {
                newPersonalDetailsDict[details.accountID] = details;
            });

            // Add all selected options to the new dict
            _.each(newSelectedOptions, (option) => {
                newSelectedOptionsDict[option.accountID] = option;
            });

...
...
...
setPersonalDetails(_.values(newPersonalDetailsDict));

When the users are pushed into newPersonalDetailsDict and later _.values(newPersonalDetailsDict) is called, it sorts the list of users differently.
RoomInvitePage.js does not do that, although it also allow to invite multiple users.
What changes do you think we should make in order to solve the problem?

We have to lists that does pretty much the exact same thing with duplicate logic:

WorkspaceInvitePage
RoomInvitePage

Both allow to invite multiple users but the implementation varies. My proposal is to extract the logic into a shared hook and use it in both invite pages so that logic is shared and we avoid this type of problem in the future.
What alternative solutions did you explore? (Optional)
This is mostly a sorting issue. Another approach is to explicitly sort the list by name/email/telephone so that regardless of the logic, the list would still look the same. This approach would be the easiest and less risky.
Reminder: Please use plain English, be brief and avoid jargon. Feel free to use images, charts or pseudo-code if necessary. Do not post large multi-line diffs or write walls of text. Do not create PRs unless you have been hired for this job.

Contributor details
Your Expensify account<EMAIL_ADDRESS>Upwork Profile Link: https://www.upwork.com/freelancers/~0184e107e8ee954e0d

Contributor details
Your Expensify account email<EMAIL_ADDRESS>Upwork Profile Link: https://www.upwork.com/freelancers/~0184e107e8ee954e0d

Contributor details
Your Expensify account email<EMAIL_ADDRESS>Upwork Profile Link: https://www.upwork.com/freelancers/~0184e107e8ee954e0d

@stephanieelliott Can you assign a new C+ plus here? Unassigning myself due to low bandwidth.

I'll review them today/tomorrow.

@tienifr @barros001 both identified the correct root cause. @tienifr's proposal looks good to me.

I don't think we should do what's in the approved proposal. We've seen this type of issue elsewhere, where we have 2 places using different logic when they should use the same logic, and the proposal is to update 1 of the two places, because when we updated one we didn't update the other.
I think what we should be doing is designing this in a way that we reuse the code that's supposed to have the same logic for both places

I think what we should be doing is designing this in a way that we reuse the code that's supposed to have the same logic for both places.

@cead22  Agreed. The proposal mentions the same thing? Atleast that's what I interpreted by the following lines in the proposal.

For usersToInvite we should did the same as
for personalDetails and selectedOptions, we should do the same as RoomInvitePage to preserve the order

Oh, perhaps I misunderstood. My read was that we were going to update RoomInvitePage.js to have the same logic that's in WorkspaceInvitePage.js.
If that's the case, we'll end up with the same code in 2 places, and those 2 places have duplicate logic.
Would it be possible to extract the common logic into a function, that is called from both places?

Would it be possible to extract the common logic into a function, that is called from both places?

That’s exactly what i suggested on my proposal

@tienifr to be honest, I don't fully understand your proposal, specifically, I don't know what you're suggesting specifically in your "What changes do you think we should make in order to solve the problem?" section. Can you update the proposal to make it clearer?

"For usersToInvite we should did the same as" this links to setUsersToInvite(_.values(newUsersToInviteDict));
"to support multiple emails as we did in https://github.com/Expensify/App/pull/29044", what exactly are we copying from that PR?
"for personalDetails and selectedOptions, we should do the same as RoomInvitePage to preserve the order", what exactly are you proposing we do similarly?

@mananjadhav any thoughts on the comments above?

Just wanted to give a quick update. I’ve been traveling for the past 30 hours and as soon as I settle, in a few more hours, I’ll address the comments above.

cead22

@barros001 why is your alternative easier and less risky than your main proposal?

It's less risky in the sense that we don't need to change a lot of code nor move things around. Sorting by name is the right way IMO so we would just make sure the other page that sorts by account id will keep its sorting by name. But to @tienifr point, this is a quick way out, but not necessarily the ideal solution. I don't see why we have similar logic duplicated in multiple places. Looks like what we need is a single component for selecting users that can be used in multiple pages.
Looking again at the code, I was very confused by what exactly newUsersToInviteDict does. It appears that at one point users were able to type multiple phone numbers and or emails and multiple rows would show to invite them (not search, but rather invite new people in), but that has since been removed. All the new logic around newUsersToInviteDict and how everything is grouped by account id is no longer necessary and really not doing any good.
Unless I'm missing something here, RoomInvitePage does exactly the same thing as WorkspaceInvitePage with a much cleaner and simpler logic. If that's true, then we should convert WorkspaceInvitePage and make it the same as  RoomInvitePage (there might be some extra fixes on workspace that's not on room so there's a change that we would pick the best of each component).. That said, duplicate logic is no good, so ideally we extract the logic into a new component and reuse it on both pages.
This new component would encapsulate the following (might not be a complete list, I'm quickly looking over the code and could be missing something):

getSections
toggleOption
the initial useEffect
<SelectionList/>
Maybe even <FormAlertWithSubmitButton/>
and take a callback that would be called when the selected options change, to notify the page

That's most of the page, but we still need to leave out all the specific logic for each page such as the inviteUsers function, among others.
Glad to collaborate with @tienifr on this if there's an appropriate path to doing so. I just wanted to point out that I'll have lower bandwidth for the next week or so due to travels.

Following up on this since Melvin is bumping, any progress on this yet?

I did go through the conversation @cead22. I am okay with @tienifr and @barros001 collaborating on this one. I am just not sure yet if we have defined the expected behavior here? By which field do we want them to be sorted? Can we update that in the issue? Then it would make sense to approve the proposals.

I am just not sure yet if we have defined the expected behavior here? By which field do we want them to be sorted? Can we update that in the issue?

The list is already sorted as can be seen here:
https://github.com/Expensify/App/blob/4239252d5ace1039fa2aaf8d707f4e5de8523309/src/libs/OptionsListUtils.js#L1611
WorkspaceInvitePage is the one doing things wrong and re-sorting it (accidentally) again by account id. We should just maintain the sorting we already have.

I like sorting alphabetically 👍

Okay thanks for confirming @cead22. As I said we can have both collaborating, how do we assign the issue?

Heya @tienifr and @barros001,  I've assigned you both on this issue, given that you are going to be collaborating on this one! Payment will be split 50/50 (so $250/ea), but if you think this should be reevaluated feel free to raise a case as described here.

@mallenexpensify is doing an overhaul of this invite component, so I suggest we pause this.

Let's pause work on this until we settle having a unified design here: https://expensify.slack.com/archives/C01GTK53T8Q/p1703557793897069?thread_ts=1703360093.158969&cid=C01GTK53T8Q

Updated title to reflect this is on hold

This is still paused while we settle on a unified design.

The actual design has not yet been settled, but we have agreed to standardize to a singular Workspace > Members design that will apply basically everywhere -- when creating a split or group, adding/removing members from a workspace, room, group or thread, etc.
That Workspace > Members design is going to be implemented as part of Wave 8: Simplified Collect (internal doc link). So seeing as this is going to be overhauled soon anyway, I think we should close this issue and not make any changes to the current behavior in the meantime. @cead22 what do you think, do you agree?

Yes

Reopening, pending discussion of potential compensation.

@mallenexpensify My recommendation is we payout for the issue. We did review the proposals, went through some discussions both the contributors engaged, and also created the PR. I did partial review of the PR. It was put on hold before I could finish the review, and hence I didn't work on the checklist.

Thanks for raising this @mananjadhav and @barros001 (and @mallenexpensify for kickstarting the discussion). Closing this without issuing payment was an oversight, and I agree that this should be paid as normal due to the amount of that was done. This is also in line with our internal documentation on contributor payment structure here.

No worries @stephanieelliott. Would you be able to post the payout summary? For the contributors, the amount needs to be split between @barros001 and @tienifr. thank you 🙌

Yep! Summarizing payment on this issue:

Contributor: @barros001 and @tienifr (split payment)

@barros001 $250 via Upwork -- offer extended, please accept!
@tienifr $250 via Upwork -- offer extended, please accept!

Contributor+: @mananjadhav $500, please request via NewDot

Upwork job is here: https://www.upwork.com/jobs/~019b0016e1e6bb4d02

$500 approved for @mananjadhav based on summary above.

All paid, thanks!


Better solution for hosting images (or the site as a whole)?

I noticed while working on the most recent newsletter that the size of the repo is starting to get a bit unwieldy - a fresh clone is 800MB (half of which is the index, half of which is the actual files).
Not only does this make it more of a pain for people to contribute, there is a hard 1GB limit on published GitHub Pages sites which we're eventually going to hit. The index wouldn't factor into that though (I hope...), so I don't think we're in imminent danger.
In general, Git is just not a good solution for storing lots of binary content, and I think we'll need to deal with this eventually if the newsletter is going to stick around long term (which I hope it does!)
Some potential fixes could be:

Fix
Pros
Cons

Stop accepting GIFs (they take up the majority of the repo's space)
Only a policy change, not a technical one.
Would only slow down the issue, not fix it.

Move to a different hosting solution with a higher size cap (Netlify?)
Wouldn't need changes to the site or to the workflow.
Doesn't solve the repo size issue long term.

Host images externally (maybe on a CDN?)
Wouldn't need changes to the site, minimal change to the workflow.
Might make it more difficult for people to submit images.

Move away from Git-based hosting altogether
Might be easier to edit the site through a CMS instead of markdown.
Would require us to rethink the whole contribution workflow.

Something else I've not thought of?
???
???

Don't think we need to deal with this immediately, but just wanted to start the conversation sooner rather than later 😄

Another option is to stop accepting GIFs but start accepting video files and limit the image and video sized drastically. The downsides are that we need to somehow process all the published newsletters and GitHub still doesn't support videos in Markdown preview.

Some stats on what's taking up the space:

(the .pack is the index)

Another theoretical option is to use git LFS (don't know if it will help with GitHub Pages limitations) but GitHub LFS pricing doesn't fit for open source projects at all :(

re: Videos instead of gifs, we did this recently with Veloren's blog on Zola, and it has made it significantly easier to show off more content with smaller filesize. I think this would be a good move even outside of this particular issue.
re: GitHub LFS, I would not recommend this path. We've look at it for Veloren, and when we asked if GitHub would sponsor us with more bandwidth, they recommended we just go back to checking files into the repo instead.
re: GitHub pages limit, it also seems like they have some soft limits that we could potentially break through. 100 GB bandwidth isn't that much. I don't think we track traffic, but that might come up in the future.
I think netlify is a pretty good path, and we can probably retroactivly go back and do a batch conversion of Gifs -> MP4 on the repo. Also, would it be possible to see if the Rust foundation has infrastructure that we could provision on? With Veloren, we have a dedicated server in Germany that is about 60 Euro a month, and it has full gigabit without data caps. I would imagine that the foundation has some servers that could just be used as a CDN pretty nicely.

re: Videos instead of gifs, we did this recently with Veloren's blog on Zola, and it has made it significantly easier to show off more content with smaller filesize. I think this would be a good move even outside of this particular issue.

Sounds like a win-win then :)

I think netlify is a pretty good path

I already use Netlify for all of my personal/Tetra stuff, and I much prefer it to GitHub Pages personally. They also have a 100GB a month bandwidth limit, but no deploy size limit as far as I've been able to tell. Think the only downside to this would be that we'd need a seperate login rather than being able to manage it all via GitHub (you can't add team members on a free account, annoyingly).
I think there's a few other services that offer similar 'instant deploy from Git' functionality, I'll look into those.

we can probably retroactivly go back and do a batch conversion of Gifs -> MP4 on the repo.

:+1: though we may have to do some playing around with the Git history if we want to free up the associated space from the index: https://docs.github.com/en/github/managing-large-files/removing-files-from-a-repositorys-history
I don't think this would be a huge problem, as I don't think people keep long-lived checkouts of the repo, but it would require a force push to source.

Ah, one other thing we'd have to figure out to switch to videos would be how we embed them - there's not a standard syntax for embedding videos into Markdown, so we'd potentially have to use a Zola shortcode? Not sure how Veloren has solved this, will have to take a look.
I think if we do go that route we'd need to really clearly flag it up in the co-ordination issue.

though we may have to do some playing around with the Git history if we want to free up the associated space from the index

We've done this before when we moved Veloren's assets to LFS, and there are some pretty good tools out there to rewrite history like this :+1:

Ah, one other thing we'd have to figure out to switch to videos would be how we embed them - there's not a standard syntax for embedding videos into Markdown, so we'd potentially have to use a Zola shortcode?

Ya, we use Zola shortcodes for videos. It looks like this:

	<video width="100%" controls autoplay playsinline muted loop>
		<source src="{{ src }}" type="{% if type %}{{ type }}{% else %}video/mp4{% endif %}">
		Your browser does not support the video tag.
	</video>
	{% if caption %}

{{caption}}

{% endif %}

and can be used like:
# Videos

mp4 video, direct download (e.g. a discord url):

`{{ video(src="https://.../foo.mp4") }}`

With a caption:

`{{ video(src="https://.../foo.mp4", caption="This is a nice video") }}`

Different video type:

{{ video(src="https://.../foo.ogv", type="video/ogg") }}
{{ video(src="https://.../foo.ogv", type="video/ogg", caption="An ogg vorbis video") }}

Youtube video:

`{{ youtube(id="dQw4w9WgXcQ") }}`

With caption:

`{{ youtube(id="dQw4w9WgXcQ", caption="Best song ever.") }}`

I think the youtube one is a different shortcode.

A bit of lunchtime hacking - running this in the root of the repo converts all GIFs to (hopefully) web-optimized MP4s:
#!/usr/bin/python

import os, subprocess

def process_directory(path):
    for root, dirs, files in os.walk(path):
        print("Processing: " + root)

        for filename in files:
            name, ext = os.path.splitext(filename)

            if ext == ".gif":
                convert_gif(os.path.join(root, filename))

        for dirname in dirs:
            process_directory(os.path.join(root, dirname))

def convert_gif(path):
    print("Converting to MP4: " + path)

    name, _ = os.path.splitext(path)
    new_name = name + ".mp4"

    subprocess.call([
        "ffmpeg",
        "-i", path,
        "-movflags", "+faststart",
        "-pix_fmt", "yuv420p",
        "-profile:v", "baseline",
        "-level", "3.0",
        "-vf", "crop=trunc(iw/2)*2:trunc(ih/2)*2",
        "-preset", "slow",
        new_name
    ], shell=True)

    path("Deleting GIF: " + path)

    os.remove(path)

process_directory("./content")

Still need to figure out the best way of batch replacing image tags in Markdown with video tags or shortcodes - I feel like I'd need to pull in a Markdown parser to do that, since they're all formatted differently/some have alt text/some are inside links.

Updated script with find-and-replace for the markdown files:

Script
#!/usr/bin/python

import os, subprocess, re, io

def convert_gif(path):
    print("Converting to MP4: " + path)

    name, _ = os.path.splitext(path)
    new_name = name + ".mp4"

    retcode = subprocess.call([
        "ffmpeg",
        "-i", path,
        "-movflags", "+faststart",
        "-pix_fmt", "yuv420p",
        "-profile:v", "baseline",
        "-level", "3.0",
        "-vf", "crop=trunc(iw/2)*2:trunc(ih/2)*2",
        "-preset", "slow",
        new_name
    ], shell=True)

    print("Deleting GIF: " + path)

    os.remove(path)

# TODO: We could use a Markdown parser for this, but might be overkill, and would also
# need to be format-preserving.
gif_regex = re.compile('!\[(?P<alt>[^]]*)]\((?P<path>.+)\.gif\)')

def update_markdown(path):
    print("Updating markdown file: " + path)

    with io.open(path, mode="r+", encoding="utf-8") as file:
        content = file.read()
        output = gif_regex.sub("<video controls type=\"video/mp4\" src=\"\g<path>.mp4\"></video>", content)
        file.seek(0)
        file.write(output)
        file.truncate()

def process_directory(path):
    for root, dirs, files in os.walk(path):
        print("Processing: " + root)

        for filename in files:
            name, ext = os.path.splitext(filename)

            if ext == ".md":
                update_markdown(os.path.join(root, filename))

            if ext == ".gif":
                convert_gif(os.path.join(root, filename))

        for dirname in dirs:
            process_directory(os.path.join(root, dirname))

process_directory("./content")

I've tested this out locally with a few CSS tweaks, and it seems to work well (and vastly reduces the page download size, as the videos don't get preloaded):

I think the remaining questions before we could continue with this would be:

Should we be using video tags directly or a Zola shortcode? The latter seems like it'd be easier for contributors (but perhaps less discoverable), but might make life harder for reviews. Then again, embeds never seem to show for me in reviews as it is 😅
How would we handle GIFs going forward? I feel like we should stop allowing them if we go the video route, personally.

Then again, embeds never seem to show for me in reviews as it is

yeah, losing GitHub previews still sounds like a really big downside to me :(

Video embeds launched on GitHub in May, 2021, though you need to use the web editor, and they show up in the markdown file as just... the video's URL.
I would love support for videos! I made a 3 second gameplay video for this month's post. As an MP4, it's a megabyte at 720p30 and 500 KB at 360p30, but it doesn't seem like I can turn it into a intelligible GIF without making it gigantic. 😢

FWIW I have been happy with (free) Cloudflare Pages for hosting my Zola site - there's a 20mb limit on individual files, but that's not a problem in this context. I tested that R2 is usable for storing & serving videos too (& has a free tier), but I haven't done the plumbing for my site to integrate it properly yet, so can't say I've used that portion in anger.


hasSelfIntersection does not work correctly in safari

I found that hasSelfIntersection in sarafi always indicates that there is an intersection, although it is not

on safari my problem was solved by setting the leaflet map, tap: false


Data Refresh

Hi,
My fire is connected to live data, and I need to 'Refresh: it in the sheet before doing any progress, is there a way to do this Refresh/Refresh All through Exvelize?

Currently, this library doesn't support refresh for the worksheet which linked external data.

Thanks @xuri , can we make a PR for this option?

Yes, this feature is related to connections and query tables parts, contributions are welcome.


Can't able to change State

Hi,
I trying to change state like off and on (toggling). When i set button.on = false, i put log it's return true i don't know how to fix. kindly do need fully , herewith add some codes and screen shot of storyboard .
btn_terms.on = false         btn_terms.boxType = .circle         btn_terms.onAnimationType = .oneStroke         btn_terms.offAnimationType = .fill         btn_terms.tintColor = UIColor.lightGray         btn_terms.onTintColor = UIColor(hexString: appColor.BGColor)         btn_terms.onFillColor = UIColor.clear         btn_terms.onCheckColor = UIColor(hexString: appColor.BGColor)         btn_terms.animationDuration = 0.5         btn_terms.delegate = self
  @IBAction func action_terms(_ sender: BEMCheckBox) {         print(sender.on)         if sender.on{             sender.setOn(false, animated: true)         }else{             sender.setOn(true, animated: true)         }     }
i tried with delegate also but i'm starting state is on= false when i log its return as true
extension RegisterVC: BEMCheckBoxDelegate {     func didTap(_ checkBox: BEMCheckBox) {         if checkBox.on{             checkBox.setOn(false, animated: true)         }else{             checkBox.setOn(true, animated: true)         }     } }

Hi @syedrazackimran,
Thank you for opening this issue!
Here are a few clarifying questions:

Your delegate and IBAction are getting called, right?
When the delegate and IBAction are getting called, the state of the checkbox changes, right?
Are you sure that your reference to the checkbox is initiated when you try changing the state?


chore:release 1.16.0

Description of changes:
1.16.0 IVS Release
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

1.16.0 IVS release


Fix error messages in generated code

Error messages for errors defined with inner structs are not clear and do not show useful information. For example in armresources, CloudError has an InnerError that doesnt show the information received back from the service. The current error message is similar to: Inner Error: {<memory address> <nil> <memory address> <nil>}
Improve messages to guide users to understanding the error. Suggestion: Received a *CloudError. To uncover InnerError information perform an errors.As() check and get the InnerError details.

Fixed in #537


macOS install failed

Tried to install 1.0.3253 on macOS high Sierra and got "install failed"

tried rebooting the mac (as per the faq)
no luck.

Dec  4 01:12:20 makkie installd[2133]: PackageKit: ----- Begin install -----
Dec  4 01:12:22 makkie installd[2133]: PackageKit: Install Failed: Error Domain=PKInstallErrorDomain Code=112 "An error occurred while running scripts from the package “Daedalus-installer-1.0.3253 (1).pkg”." UserInfo={NSFilePath=./postinstall, NSURL=file://localhost/Users/rvw/Downloads/Daedalus-installer-1.0.3253%20(1).pkg#temp.pkg, PKInstallPackageIdentifier=org.daedalus.pkg, NSLocalizedDescription=An error occurred while running scripts from the package “Daedalus-installer-1.0.3253 (1).pkg”.} {
	    NSFilePath = "./postinstall";
	    NSLocalizedDescription = "An error occurred while running scripts from the package \U201cDaedalus-installer-1.0.3253 (1).pkg\U201d.";
	    NSURL = "file://localhost/Users/rvw/Downloads/Daedalus-installer-1.0.3253%20(1).pkg#temp.pkg";
	    PKInstallPackageIdentifier = "org.daedalus.pkg";
	}
Dec  4 01:12:23 makkie Installer[7934]: Install failed: The Installer encountered an error that caused the installation to fail. Contact the software manufacturer for assistance.
Dec  4 01:12:23 makkie Installer[7934]: Displaying 'Install Failed' UI.
Dec  4 01:12:23 makkie Installer[7934]: 'Install Failed' UI displayed message:'The Installer encountered an error that caused the installation to fail. Contact the software manufacturer for assistance.'.

update:  Deleting the old version solved the issue. So the problem is It can't update a previous daedalus version.


CellRanger count issue in Terra workflow

Hi all,
I am trying to run Cellranger count on a single sample using the Cellranger workflow v2.6.2 in Terra.
I am using Cellranger V6.0.1 and reference GRCh38-2020-A.
I followed the instruction at https://cumulus.readthedocs.io/en/stable/cellranger/index.html#sample-sheet to preprare sample sheet, input and output folders.
When I run the workflow,I get the following failure message: "Job cellranger_count.run_cellranger_count:NA:1 exited with return code 1 which has not been declared as a valid return code. See 'continueOnReturnCode' runtime attribute for more details."
When I open the log file I see the following error=FileNotFoundError: [Errno 2] No such file or directory: 'strato': 'strato'
Thanks so much in advance for any assistance!
Edit: Using Cellranger V8.0.0 solved the issue in workflow v2.6.1 but I still need to use cellranger v6.0.1
Francesco

Hi @Fcorrado92 ,
Sorry for my late response!
I'll update the docker image for cellranger v6.0.1, and will let you know once it's ready.
Sincerely,
Yiming

Hi Yiming you already did! And It Is working!
Thanks you again
Francesco
Il mar 10 set 2024, 18:46 Yiming Yang @.***> ha scritto:

Hi @Fcorrado92 https://github.com/Fcorrado92 ,
Sorry for my late response!
I'll update the docker image for cellranger v6.0.1, and will let you know
once it's ready.
Sincerely,
Yiming
—
Reply to this email directly, view it on GitHub
https://github.com/lilab-bcb/cumulus/issues/408#issuecomment-2342293685,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/BADSDCJ62KY2WIHUT2KZ4GTZV5ZDRAVCNFSM6AAAAABKIINOLSVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDGNBSGI4TGNRYGU
.
You are receiving this because you were mentioned.Message ID:
@.***>

Really? Maybe I did it but forgot to respond here... :-D
I'll then close this thread. Please feel free to reach out for any future issue.


secondary structure analysis fix

defaults to only last frame of trajectory when getting secondary structure residue counts
better message indicating "x resides in ss" rather than just "x ss"
fixed broken uniprot get id test
removed stale nb experiments (rgy, rmsd, etc) that don't run anymore
ensure that rgy figures do not overwrite each other

Made some small changes in rgy tools, only one bug related to the path registry: It was saving the path as the id:
"/Users/jorgemedina/Desktop/md-agent/ckpt/ckpt_1/figures/radii_of_gyration_rec0_215810.csv": {
       "path": "/Users/jorgemedina/Desktop/md-agent/ckpt/ckpt_1/figures/radii_of_gyration_rec0_215810.csv",
       "name": "radii_of_gyration_rec0_215810.csv",
       "description": "Radii of gyration per frame for rec0_215810"
   }

Also, in case these tools are used sequentially, also included a check to see if the radii csv file was already saved, to avoid repetition on the calculation.

Corrected a bug related to the path registry in dssp:
    "rec0_110717": {
        "path": "/Users/jorgemedina/Desktop/md-agent/mdagent/dssp_20240808_110717.No file format provided",
        "name": "dssp_20240808_110717.No file format provided",
        "description": "dssp values for trajectory with id: rec0_215810"
    },

Now it saves as:
    "rec0_111801": {
        "path": "/Users/jorgemedina/Desktop/md-agent/ckpt/ckpt_1/records/dssp_20240808_111801.npy",
        "name": "dssp_20240808_111801.npy",
        "description": "dssp values for trajectory with id: rec0_215810"
    }

With the correct file name and path


Split fv3fit.ModelTrainingConfig into new objects for data and training config

Currently ModelTrainingConfig is responsible for holding configuration options for training, training data loading, and validation data loading. This PR splits those responsibilities into two separate classes, and three separate instances (training and validation data configuration use the same class).
In this PR this has been implemented to be backwards-compatible.
Added public API:

Added classes TrainingConfig, SklearnTrainingConfig, KerasTrainingConfig, and DataConfig to fv3fit

Refactored public API:

Bulleted list of removed or refactored symbols, such as changes to name, type, behavior, argument, etc. Be cautious about doing these and discuss with team more broadly.

Significant internal changes:

Added register_keras_trainer decorator for registering new keras training classes

load_data_sequence now takes in only one DataConfig argument, instead of a data path and ModelTrainingConfig

a routine legacy_config_to_data_config is added to be used temporarily by test code to convert ModelTrainingConfig objects into DataConfig objects. The tests using this should be later refactored to create TrainingConfig and DataConfig objects directly.

Moved tightly coupled code involving validation data into _shared/config.py. This code is quite prone to error, only being enabled for Keras training. It should be deleted in a follow-on PR, instead using a DataConfig for validation data in a way that works the same for Keras and Sklearn training.

[x] Tests added

You are encouraged to check the PR against the Code Review Checklist.

This is looking real nice @mcgibbon! Would it be worth grouping the objects into a top-level configuration like the prognostic run does: https://github.com/VulcanClimateModeling/fv3net/blob/a24d15ef763a2a157e62738dbf09738cb85fe8ad/workflows/prognostic_c48_run/runtime/config.py#L21.
It's a nice way to collect the interface and centralize the documentation.

This is looking real nice @mcgibbon! Would it be worth grouping the objects into a top-level configuration like the prognostic run does

Yeah, that looks pretty nice!
I'll have to see depending on the backwards-compatibility-breaking change we go for. If we want to and can use a central object to contain all the configs in one yaml file, that is probably the way to go. It looks nice for external API presentation. The data configs basically immediately get transformed into batches, and then only the training config gets persisted, so there's no reason/need currently to group the configs internally in the application.
This will also depend on some things like, I want to refactor the configuration saving so that the configuration is attached to the model rather than being logged. Right now we duplicate "input variables" info between the model and the train_config.yaml, which makes it confusing when using the offline diagnostics on their own (in my experience). This may mean we want to provide the DataConfig to the training just so the model can save it, it depends on what people think is important.
I'll leave this potential change for now until those needs are more clear.


Please change Keys to lowercase & dash-separated

When Meteor is bundled, settings keys have their spaces removed. This means Google Analytics will become GoogleAnalytics (and thus won't work).
This can be easily avoided by having the keys look like keys, i.e. lowercase & dash-separated

@kidsil I haven't seen that. Can you give me steps to reproduce it?

Simply add Google Analytics to the settings. json file, bundle your Meteor
application (the bug doesn't appear on "meteor run", only when the
application is deployed).
The issue is that when the public settings get minified, the spaces are
getting dropped.
I'm running the bundled application behind nginx (just in case that helps).
On Sat, Jan 16, 2016, 00:49 Paul Dowman<EMAIL_ADDRESS>wrote:

@kidsil https://github.com/kidsil I haven't seen that. Can you give me
steps to reproduce it?
—
Reply to this email directly or view it on GitHub
https://github.com/okgrow/analytics/issues/91#issuecomment-172128393.

@kidsil I'm sorry but I really don't understand. By "bundle" I'm assuming you mean meteor build, and I'm pretty sure that the built meteor app wouldn't include the settings.json file. It shouldn't anyway, your settings are for runtime configuration.
I'm going to close this for now, but please do explain and we can reopen if I can understand the scenario.


add loading spinner when the user clicks login button

when the user clicks login button there is no loading while the website is processing the user request i want to add a loading spinner
when the user clicks login button

it will enhance user experience and give feedback that the website is processing the request

yeah add in front search buttons too

Hello @rahulsainlll
I'm participating in Hacktoberfest and would love to contribute to this issue (#40). I have experience with frontend technologies and I can add a loading spinner when the user clicks the login button to enhance the user experience.
Could you please assign this issue to me? I'd be excited to work on it and make a meaningful contribution.

Hey @rahulsainlll Same for me I  have worked on similar issue in the hacktober fest, if possible please assign this to me.


Sometime the translation are not loaded when starting the app

I found out an issue where sometimes the translations are not correctly loaded. It seems to happen only on fast devices; the key of the translation is displayed instead of the translation itself, something like home.mylabel.mytext.
I'm not completely sure, but I have the impression that the problem comes from the use() method that returns a Promise: on fast devices, the bootstrapping of the application and display of the home page is faster than the loading of the language file, which cause the issue mentioned above.
I searched for a solution where I could display the first page only when the Promise of the use() method complete, and land on APP_INITIALIZER. Unfortunately, I'm in a Nativescript context and I'm afraid that they are not supporting this https://github.com/NativeScript/nativescript-angular/issues/1487
What are the possible workarounds? Would a synchronous use() method be possible?

hi, did you try v12 that was just released? One of the fixes in it is supposed to fix that issue

Yes, I'm using v12 and unfortunately I still have the problem. But I will try again on Monday to be sure...
What I can say concerning this issue:
The problem never even happend in debug mode (debug in Visual Studio Code or using tns run xxx). It happened only when released on the store OR released locally and then deployed on the phone (ipa file).
The second condition is that I have to use a fast device, for example an iPhone Xr. Using an old device like an iPhone 6 does never produce the error.
So the condition is: Deployed in release AND on a fast device.
Hope it helps...

@ocombe I can confirm that it is NOT working with v12 when deployed on 'fast' devices (just tested with an iPhone Xr (not working) and a Iphone 6 (I would say that prior v12 it was never working and with v12 it is sometimes working and sometimes not). Th error is that I see an empty string instead of the translation).
Note that if instead of using the translate pipe in my view 'xxx' | translate I create a method that get the translation with _translator.instant(xxx); and call it from my view, then it seems to work. It's my current workaround.

Possibly related: https://github.com/ngx-translate/core/issues/998#issuecomment-583338916

Not sure but I would say that those issues are not related....

@ocombe Just tested with version 12.1.1, not working better

Hi @Bidou44, I'm curious if this might be the same issue as one I'm encountering, and had a couple questions:

are all translations failing? or only some?
if not all translations are failing - have you been able to find any pattern in the failures?

I'm seeing some translations occur successfully and others not, in the same page view.  I can't discern a pattern, either by scope (some parts of a single component are translated while others are not) or by by method (seeing it for both .get and translate pipe, but not consistently for either)

Hi there

Only some translations are failing
I was unfortunately not able to find a pattern, but it does not happen everywhere and only when using a pipe (at lease in my case).

My workaround currently is to replace the pipe with a method that calls translate.intant(). Also, it is ALWAYS working when debugging (simulator and device). The problem happens only when the app is released (for example, deployed in the store)

Thanks for the quick response/info! That sounds very consistent with what we are seeing in terms of the translation failure manifestation.
We don't deploy to a store, but similarly we are only seeing this in our production build when deployed in certain environments.  No obvious patterns there yet, either.

Hey @Bidou44 - just as an FYI, I've determined that - in our case - this behavior was the result of not setting explicit caching behavior on our en.json file.  Because we didn't explicit dictate that behavior, some browsers (Firefox, possibly others) were caching the file aggressively and so the translate/fail-to-translate was purely an issue of which translations were net-new to the current release.
Don't know if this is at all applicable for you, but figured I'd share :)

Thank for the update.
Like I wrote in my first message, I'm in a Nativescript context (not web) so unfortunately, I don't think that your fix will work for me...

My apologies, I forgot about that aspect of your environment/scenario!

Hello,
I develop an angular application, and I have the exact problem in production mode. Sometimes it happens in firefox, and rarely in chrome. Problem happens with pipe and instant method, in same view but not for all translations :( . So pretty hard to find a pattern, but the fast devices could be a good possibility.
@LilaHickey
Not sure if I understood the workaround, could you explain in a few words how did you achieve to fiw this bug?.
Thanks in advance.

I'm closing this issue, since in the meantime, Nativescript released a new version that supports APP_INITIALIZER and this seems to solve this issue. At least I never saw this problem again.


Unable to connect to the bot

Describe the bug

Click "Test in emulator" and emulator started on 54801 port

But the dotnet runtime hosted on 3979 port

Version

Browser

[ ] Chrome
[ ] Safari
[ ] Firefox
[ ] Edge

OS

[ ] macOS
[ ] Windows
[ ] Ubuntu

To Reproduce
Steps to reproduce the behavior:

Go to '...'
Click on '....'
Scroll down to '....'
See error

Expected behavior

Screenshots

Additional context

can't repro anymore


Remove dead code (#137)

Checking buffer type after cloning MappeableBitmapContainer

Coverage increased (+0.08%) to 91.6% when pulling c95933cfae1d2b201873c144bce7ca69852bfd89 on arturowczarek:remove_dead_code into f18a121375090d39793a35fc080079bdf01d4d0c on RoaringBitmap:master.

Looks good. I've tried and couldn't find any more lines matching this dead code pattern.

Good. Thanks @ppiotrow for the review.

@arturowczarek I'd like your confirmation that you want a merge of this PR now since you have been tweaking it a bit.

@lemire You can merge

Merged.


tk-inter plugin error

When I want to compile a program with --plugin-enable=tk-inter it gives an error.
Traceback (most recent call last):   File "C:\Users\Ben\AppData\Roaming\Python\Python310\site-packages\nuitka\__main__.py", line 137, in <module>     main()   File "C:\Users\Ben\AppData\Roaming\Python\Python310\site-packages\nuitka\__main__.py", line 123, in main     MainControl.main()   File "C:\Users\Ben\AppData\Roaming\Python\Python310\site-packages\nuitka\MainControl.py", line 969, in main     copyDataFiles(dist_dir=dist_dir)   File "C:\Users\Ben\AppData\Roaming\Python\Python310\site-packages\nuitka\freezer\Standalone.py", line 1582, in copyDataFiles     for plugin, included_datafile in Plugins.considerDataFiles(module):   File "C:\Users\Ben\AppData\Roaming\Python\Python310\site-packages\nuitka\plugins\Plugins.py", line 547, in considerDataFiles     for value in plugin.considerDataFiles(module):   File "C:\Users\Ben\AppData\Roaming\Python\Python310\site-packages\nuitka\plugins\standard\TkinterPlugin.py", line 201, in considerDataFiles     yield self.makeIncludedDataDirectory( AttributeError: 'NuitkaPluginTkinter' object has no attribute 'makeIncludedDataDirectory'
I use the newest nuitka version: 0.7.4

I got the same error.

same error for me

I solved the problem by modifying the file \AppData\Local\Programs\Python\Python37\lib\site-packages\nuitka\plugins\standard\TkinterPlugin.py
    if isWin32Windows():
        yield self.makeIncludedDataDirectory(
            source_path=os.path.join(tcl, "..", "tcl8"),
            dest_path="tcl8",
            reason="Tcl modules needed for tkinter usage",
        )

------>
    if isWin32Windows():
        yield makeIncludedDataDirectory(
            source_path=os.path.join(tcl, "..", "tcl8"),
            dest_path="tcl8",
            reason="Tcl modules needed for tkinter usage",
        )

the self of the makeIncludedDataDirectory function
was incorrect

Ouch, regression in a hotfix, very bad. @madaraXor has the correct fix for it.

It's out on the main branch, should appear on PyPI soon, let me know if the problem persists, I was too lazy to test on Windows now, feeling under the weather.


Use .Equal() instead of == for time.Time

Closes #1238

Codecov Report

Merging #1241 into master will increase coverage by <.01%.
The diff coverage is 25%.

@@            Coverage Diff             @@
##           master    #1241      +/-   ##
==========================================
+ Coverage   52.51%   52.52%   +<.01%
==========================================
  Files         131      131
  Lines       12366    12366
==========================================
+ Hits         6494     6495       +1
+ Misses       5115     5114       -1
  Partials      757      757

Impacted Files
Coverage Δ

internal/restic/node.go
34.18% <0%> (ø)
:arrow_up:

internal/archiver/archiver.go
65.47% <100%> (+0.16%)
:arrow_up:

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 5b1e4df...a60e751. Read the comment docs.


Cant Change Colour via Alexa on Lidle E27 bulbs

Description of problem:
Lidl E27 bulb connects fine to CC3521 USB dongle and runs on the Zigbee2 MQTT Addon in Home Assistant. I can change colour OK from Home Assistant and also Node Red but if I ask for Alexa to change the colour, it changes it on the Alexa App and the notification noise it makes to say complete but the bulb does not change colour.
Zigbee2mqtt add-on version (if edge, please report commit hash):
Current version: 1.18.1-1

Your entire configuration from the frontend (with sensitive fields redacted):
data_path: /config/zigbee2mqtt
external_converters: []
devices: devices.yaml
groups: groups.yaml
homeassistant: true
permit_join: true
mqtt:
  server: 'mqtt://<IP_ADDRESS>:1883'
  user: USERNAME
  password: PASSWORD
  base_topic: zigbee2mqtt
serial:
  port: /dev/ttyACM0
advanced:
  log_level: warn
  pan_id: 6754
  channel: 11
  network_key:
    - 1
    - 3
    - 5
    - 7
    - 9
    - 11
    - 13
    - 15
    - 0
    - 2
    - 4
    - 6
    - 8
    - 10
    - 12
    - 13
  availability_blocklist: []
  availability_passlist: []
device_options: {}
blocklist: []
passlist: []
queue: {}
frontend:
  port: 8099
experimental: {}
socat:
  enabled: false
  master: 'pty,raw,echo=0,link=/tmp/ttyZ2M,mode=777'
  slave: 'tcp-listen:8485,keepalive,nodelay,reuseaddr,keepidle=1,keepintvl=1,keepcnt=5'
  options: '-d -d'
  log: false

Running platform (details from Suypervisor > System)
supervisor-2021.03.6
core-2021.3.4
Home Assistant OS 5.12

Your logs from Home Assistant Supervisor
[s6-init] making user provided files available at /var/run/s6/etc...exited 0.
[s6-init] ensuring user provided files have correct perms...exited 0.
[fix-attrs.d] applying ownership & permissions fixes...
[fix-attrs.d] done.
[cont-init.d] executing container initialization scripts...
[cont-init.d] socat.sh: executing...
[11:05:51] INFO: Socat not enabled, marking service as down
[cont-init.d] socat.sh: exited 0.
[cont-init.d] zigbee2mqtt.sh: executing...
[11:05:51] INFO: MQTT available, fetching server detail ...
[11:05:51] INFO: Previous config file found, checking backup
[11:05:51] INFO: Creating backup config in '/config/zigbee2mqtt/.configuration.yaml.bk'
[11:05:51] INFO: Adjusting Zigbee2mqtt core yaml config with add-on quirks ...
[cont-init.d] zigbee2mqtt.sh: exited 0.
[cont-init.d] done.
[services.d] starting services
[services.d] done.
[11:05:52] INFO: Handing over control to Zigbee2mqtt Core ...
><EMAIL_ADDRESS>start /app
> node index.js
Zigbee2MQTT:error 2021-03-13 23:00:22: Publish 'set' 'brightness' to 'Living Room Lamp Bulb' failed: 'Error: Command 0x588e81fffef49b46/1 genLevelCtrl.moveToLevelWithOnOff({"level":127,"transtime":150}, {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":false,"direction":0,"srcEndpoint":null,"reservedBits":0,"manufacturerCode":null,"transactionSequenceNumber":null,"writeUndiv":false}) failed (Data request failed with error: 'MAC no ack' (233))'
Zigbee2MQTT:error 2021-03-13 23:00:39: Publish 'set' 'color_temp' to 'Living Room Lamp Bulb' failed: 'Error: Command 0x588e81fffef49b46/1 lightingColorCtrl.moveToColorTemp({"colortemp":153,"transtime":150}, {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":false,"direction":0,"srcEndpoint":null,"reservedBits":0,"manufacturerCode":null,"transactionSequenceNumber":null,"writeUndiv":false}) failed (Data request failed with error: 'MAC no ack' (233))'

Any update on this please ?

Please move device specific issues here: https://github.com/Koenkk/zigbee2mqtt/issues to get support. This repository is only for the add-on and it's functions to integrate the core to home assistant supervisor.


Access to the API without authing with Unraid

Not possible (to my knowledge) to extract API data without being authed with Unraid.
As of now Home Assistant will be blocked when issuing a GET request as a json sensor.

Yes this is a limitation of unraid not much i can do about that, add basic auth to home assistant config
  - platform: rest
    resource: "http://<IP_ADDRESS>:965/plugins/jsonapi/api.php?file=XXX.ini"
    username: root
    password: !secret unraid_password
    authentication: basic
    value_template: '{{ value_json.XXXX }}'
    headers:
      User-Agent: Home Assistant
      Content-Type: application/json

As this is a restricted to LAN by default i don't see this as an issue.


Add the progress indicator to all long-running jobs

Some commands, like installing knative components, may take a long time to finish.
Implement the progress indicator to show the progress of these jobs.

Sweet :)


Additional tests for split_strip function

I've added two test to improve coverage percentage.

adjust the black formatting

@auvipy I've reformatted test_utils.py with black.

Thanks!


Example using SimpleMediaPlayer

I am beginner, so can you make a tutorial or any example using this Service?
Thank you very much

I second this. Example is essential for such project. Please provide minimal viable foolproof guide in Readme. I just need to be able to give the SimpleMediaPlayer file or URL and make it play in given PlayerView. And it needs to create notification when the app is minimized so that it continues playing, that's all. If this can be done in 10 lines of code then your work was successful! :-)

But your code in ViewModel using Jetpack Compose. I don't know how to convert or implement in normal Android Coding Style. Can you make a version of normal Android coding style? Thanks


Zellij and Gum failed to load

When running ./wandersage on MacOS
~/wandersage/src/bootstrap.sh: line 21: ${response,,}: bad substitution
./wandersage: line 40: ~/wandersage/bin/zellij: No such file or directory

Thanks for your report! Could you tell me your bash and MacOS version by running:
bash --version
sw_vers

GNU bash, version 3.2.57(1)-release (arm64-apple-darwin23)
Copyright (C) 2007 Free Software Foundation, Inc.
ProductName:		macOS
ProductVersion:		14.5
BuildVersion:		23F79

@mustardamus I did some checks on MacOS. Here is some feedback

bad substitution can be solved with this response=$response | tr '[:upper:]' '[:lower:]' # lowercase
a check if gum and zelij should be added, because right now on mac zelij will fail to be executed (exec format error, probably wrong binary)

Will provide more feedback later

Thanks so much for jumping in @aharabara-globant, and sorry for not getting back to you @FunctionalPerformanceSystems , I've been pretty busy.
I'll fix the "bad substitution" thing in the coming days, thanks for the hint. As for the bootstrapping, you are right, just for Linux x86_64 right now. Should check the arch (uname -m) and wether it's Linux or MacOS (uname -s) to determine the correct binary for Gum and Zellij.
Further more I want to provide a Docker Image in the future.

@FunctionalPerformanceSystems @aharabara-globant I've updated the code to fix the bug and download correct binaries for Linux and MacOS. As I don't have access to a Mac, could you do me the favor and test it? Thank you.

Did a quick test:

Yes it works

you assume that zellij and gum can be present on the machine, but you are trying to use them from $PROJECT/bin folder which means it fails when gum or zellij are preinstalled on different machines.
Can Be solved with else clause in bootstrap:

This one I encounter often, but didn't have a chance to check

Awesome @aharabara-globant! Thanks for the details.

Neat
Haha, totally missed that. Fixed.
Removed -printf x from find for counting files. Should be fixed.
Added check for 0,1,x files when loading from folder. Fixed.

I'm closing this issue. If you find anything else or have further remarks, please open a new issue. Thanks!


To customize my Allure report @Step and @Attachments are not working for TestNG in my local workspace.

Hi All,
I wanted to customize my alllure report by adding 3 more extra fields to the xml file(Report) which gets generated in local system.
@Step is not working.
I tried by adding @Step annotation at parameterized method. But content in the @Step annotation is not reflecting in the xml report.
When i searched in google for this query, many were telling to add AspectJWeaver dependency in the pom.xml.
But, my project is not maven project and i don't have pom.xml.
In fact, i have aspectjweaver-1.8.9 jar in libraries.
Please guide me, is this configuration issue which i have to do to make @Step annotation work?

@Peter2788 you need to specify weaver as javaagent
java -javaagent:aspectjweaver-1.8.9.jar ...

@baev Do i need to specify javaagent in build.xml?
As, <jvmarg value="-javaagent: ...\aspectjweaver-1.8.9.jar -> For this i am getting "AspectJ Internal Error: unable to add stackmap attributes. null"
Reason:
Expected stackmap frame at this location.
Bytecode:
0x0000000: 121e 4cb2 0019 2bb9 001f 0200 4d2c b900
0x0000010: 2001 004e 2db9 0021 0100 3604 0336 0512
Note:  I have allure-testng-adaptor 1.4.16 version
Or in Run Configuration, Arguments field i have to pass?

It depends on your build system and how did you run your tests.

For this i am getting "AspectJ Internal Error: unable to add stackmap attributes. null

As far as I know this error means that something wrong with bytecode (old version of aspecj is used, classes are missed etc)

Thanks for your reply @baev .  It helped me :)


Make bioimageio.spec purely about the spec

That's a big diff...
Could you summarize:

which functionality stays here?
which functionality would go to bioimageio.core?

Also, why are you removing the exmaple model spec?

Also, why are you removing the exmaple model spec?

I'm thinking it shoulds stay here.. my reasoning was that it requires io which will only be available in the tests, so the package wouldn't be able to work with the example... but now I'm thinking we can add a simple yaml reader, use it only in the command, and throw a runtime exception if it's not available...

which functionality stays here?

definition of spec: schema, raw_nodes, nodes
definition of package: get_package_content: change a raw resource def to local files and return names of local files with their remote locations (but does not resolve remote locations)
utils: transformers raw_node <-> nodes (without resolve_uri? to avoid io)
input expected as dict (single exception: cli can read yaml)

moving out (to bioimageio.core):

resolve_uri, accepting RDFs as files
make an actual RD package (using get_package_content)

@FynnBe is this ready to be merged now? If so, could you please summarize what has changed now, especially what user facing functionality is still in this package? (The diff is too massive for me to look at now).

@FynnBe is this ready to be merged now? If so, could you please summarize what has changed now, especially what user facing functionality is still in this package? (The diff is too massive for me to look at now).

sure thing. functionality remaining here is:

get_resource_package_content  (excluding the 'rdf.yaml' itself, which requires yaml to serialize to string...) <- should we maybe rename this also to avoid name clash with this function in core that does include the rdf.yaml...? yeah.. I think so...
load_raw_resource_description (only accepts a dict, not path, url, etc... has a doppelgänger in core that does accpet paths and urls)  <- rename to load_raw_resource_description_from_dict?
serialize_raw_resource_description_to_dict

sure thing. functionality remaining here is:
* get_resource_package_content  (excluding the 'rdf.yaml' itself, which requires yaml to serialize to string...) <- should we maybe rename this also to avoid name clash with this function in core that does include the rdf.yaml...? yeah.. I think so...

What exactly does get_resource_package_content do? What exactly do you mean by excluding the rdf.yaml?

* load_raw_resource_description (only accepts a dict, not path, url, etc... has a doppelgänger in core that does accpet paths and urls)  <- rename to `load_raw_resource_description_from_dict`?

Yes, I would rename it.

* serialize_raw_resource_description_to_dict

todo:

[ ] rename load_raw_resource_description to load_raw_resource_description_from_dict

@FynnBe maybe I am misremembering something, but didn't we decide to move load_raw_resource_description and serialize_raw_resource_description back here, because we will need the former for the spec validation function (which should stay in this repository)? And just throw an exception if one of the functions is used without having yaml?!

@FynnBe maybe I am misremembering something, but didn't we decide to move load_raw_resource_description and serialize_raw_resource_description back here, because we will need the former for the spec validation function (which should stay in this repository)? And just throw an exception if one of the functions is used without having yaml?!

we talked about serialize... and save..., but following our logic for those I see that load_raw... also falls in this category.. I'll move that one, too then. (allow paths and uris and not only dicts as it is now..)

turns out, if we allow to load from urls as well this moves quite some functionality over here (including the caching). Maybe we should only allow paths and keep the url support in core?

turns out, if we allow to load from urls as well this moves quite some functionality over here (including the caching). Maybe we should only allow paths and keep the url support in core?

I think it's fine to have URL support only in core. I think the minimal functionality in spec is to provide a validation function in python when passing a dict and via the command line when passing a file path (which needs yaml as additional functionality as discussed). All the rest can go to core.

I think it's fine to have URL support only in core. I think the minimal functionality in spec is to provide a validation function in python when passing a dict and via the command line when passing a file path (which needs yaml as additional functionality as discussed). All the rest can go to core.

the command even has rudimentary url support (for validation only) and the library function now support for paths with yaml (but no urls). so this should cover all regular use cases. and for more users would need to switch to bioimageio.core


Update rockford-lhotka.yml

Learn Build status updates of commit cfc1d75:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

rd/rockford-lhotka.yml
:white_check_mark:Succeeded
View

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


Remove state sync between instances

It is blocking me from resetting localStorage of web version using dev tools. Is it used somewhere here? It was needed in the base aepp, and I assume it was just copy-pasted to wallet.

https://github.com/aeternity/superhero-wallet/blob/fdd8376cc8e0ff825e62b0b4e85e5a4c37125b79/src/store/plugins/persistState.js#L20
https://travis-ci.com/github/aeternity/superhero-wallet/builds/176440322#L369

@davidyuk can you fix this so I can approve and merge?


Fix sfrp 2020-01-01-preview

MSFT employees can try out our new experience at OpenAPI Hub  - one location for using our validation tools and finding your workflow.

Contribution checklist:

[x] I commit to follow the Breaking Change Policy of “no breaking changes
[x] I have reviewed the documentation for the workflow.
[x] Validation tools were run on swagger spec(s) and errors have all been fixed in this PR. How to fix?

If any further question about AME onboarding or validation tools, please view the FAQ.
ARM API Review Checklist

[x] Ensure to check this box if one of the following scenarios meet updates in the PR, so that label “WaitForARMFeedback” will be added automatically to involve ARM API Review. Failure to comply may result in delays for manifest application. Note this does not apply to data plane APIs, all “removals” and “adding a new property” no more require ARM API review.

Adding new API(s)
Adding a new API version
Adding a new service

[ ] If you are blocked on ARM review and want to get the PR merged with urgency, please get the ARM oncall for reviews (RP Manifest Approvers team under Azure Resource Manager service) from IcM and reach out to them.

Breaking Change Review Checklist
If there are following updates in the PR, ensure to request an approval from API Review Board as defined in the Breaking Change Policy.

[ ] Removing API(s) in stable version
[ ] Removing properties in stable version
[ ] Removing API version(s) in stable version
[ ] Updating API in stable version with Breaking Change Validation errors
[ ] Updating API(s) in preview over 1 year

Please follow the link to find more details on PR review process.

/azp run automation - sdk

Can one of the admins verify this patch?

/azp run automation - sdk

/azp run automation - sdk

@a-santamaria I want to confirm that is it by design to delete field "enableAutomaticUpgrade" and add field "forceUpdateTag"? Could you add this field in the examples files?

/azp run automation - sdk

forceUpdateTag

Thanks @njuCZ, yes it's by design. It was a mistake adding "enableAutomaticUpgrade" initially and "forceUpdateTag" was missing. I have added that param to the examples


MTS200 Lower switching differential temperature

Currently the MTS200 thermostat's switching differential's minimum value is 0.5 C which is way too high for my comfort. I have underfloor heating and 0.5 C difference means that the boiler will keep heating for a much longer amount of time than needed and will overshoot the target by at least 0.5 C (in reality by 0.7-0.8 C).
My workaround for this is an automation that looks like this: if the current temperature is higher than the set temperature by any amount, lower the target temperature by 0.5 C so the thermostat switches to idle state.
For example:

(target) temperature is 22.5
current temperature is 22.3
thermostat turns on but would keep heating until it reaches (target) temperature of 22.5 + 0.5 (lowest amount of diff in the app settings)
current temperature raises to 22.5 or higher
automation gets triggered:

lowers the target temperature to 22.5 - 0.5 = 22, this will put the thermostat into idle state
waits a bit
raises the target temperature back to the original value 22 + 0.5 = 22.5

now the target temperature is less or equal to current temperature, thermostat will remain in idle state

trigger:
  - platform: template
    value_template: >-
      {{ state_attr('climate.meross_lan','current_temperature') >=
      state_attr('climate.meross_lan', 'temperature') }}
action:
  - service: climate.set_temperature
    target:
      entity_id: climate.meross_lan
    data_template:
      temperature: >
        {{ state_attr('climate.meross_lan','temperature') | float - 0.5 }}
  - delay:
      hours: 0
      minutes: 0
      seconds: 15
      milliseconds: 0
  - service: climate.set_temperature
    target:
      entity_id: climate.meross_lan
    data_template:
      temperature: >
        {{ state_attr('climate.meross_lan','temperature') | float + 0.5 }}

Hello @FabianGabor,
That's a nice trick and it might also be useful for people trying to use a different target temperature sensor than the internal one (since this is almost always reporting wrong temperatures expecially on MTS100-150 valves, see #334)
meross_lan uses 0.5 resolution in setting thermostat setpoints because this is what the Meross device expects but I can only directly confirm this for MTS100 valves which I'm using and testing so I'm not sure if the MTS200 would accept finer resolutions.

@krahabb I sniffed and saved the logs when setting the sensitivity from 0.5 C to 3 C and back.
2023-12-14 07:34:32,612 - meross_iot.http_api - ERROR - Login API redirected to different region: https://iotx-eu.meross.com. Login will be re-attempted
2023-12-14 07:34:33,105 - meross_iot.http_api - INFO - Login successful against https://iotx-eu.meross.com
2023-12-14 07:34:41,729 - meross_iot.manager - INFO - Allocating new mqtt client for mqtt-eu-3.meross.com:443...
2023-12-14 07:34:42,100 - meross_iot.manager - INFO - Subscribed to topics, scheduling state update for already known devices.
2023-12-14 07:34:42,104 - meross_iot.manager - INFO -

------- Triggering Manager Discovery, filter_device: [None] -------
2023-12-14 07:34:42,559 - root - INFO - Sysdata for Nappali (REDACTED): {'all': {'system': {'hardware': {'type': 'mts200b', 'subType': 'eu', 'version': '7.0.0', 'chipType': 'rtl8710cm', 'uuid': 'REDACTED', 'macAddress': 'REDACTED'}, 'firmware': {'version': '7.6.10', 'homekitVersion': '6.3', 'compileTime': '2023/10/13-10:32:54', 'encrypt': 1, 'wifiMac': 'REDACTED', 'innerIp': 'REDACTED', 'server': 'mqtt-eu-3.meross.com', 'port': 443, 'userId': REDACTED},...}}
2023-12-14 07:34:42,967 - root - INFO - Abilities for Nappali (REDACTED): {'payloadVersion': 1, 'ability': {'Appliance.Config.Key': {}, 'Appliance.Config.WifiList': {}, 'Appliance.Config.Wifi': {}, 'Appliance.Config.WifiX': {}, 'Appliance.Config.Trace': {}, 'Appliance.Config.Info': {}, 'Appliance.Config.OverTemp': {}, 'Appliance.System.All': {}, 'Appliance.System.Hardware': {}, 'Appliance.System.Firmware': {}, 'Appliance.System.Debug': {}, 'Appliance.System.Online': {}, 'Appliance.System.Time': {}, 'Appliance.System.Clock': {}, 'Appliance.System.Ability': {}, 'Appliance.System.Runtime': {}, 'Appliance.System.Report': {}, 'Appliance.System.Position': {}, 'Appliance.Mcu.Firmware': {}, 'Appliance.Control.Multiple': {'maxCmdNum': 3}, 'Appliance.Control.Bind': {}, 'Appliance.Control.Unbind': {}, 'Appliance.Control.Upgrade': {}, 'Appliance.Control.OverTemp': {}, 'Appliance.Control.PhysicalLock': {}, 'Appliance.Control.Thermostat.HoldAction': {}, 'Appliance.Control.Thermostat.Mode': {}, 'Appliance.Control.Thermostat.Calibration': {}, 'Appliance.Control.Thermostat.DeadZone': {}, 'Appliance.Control.Thermostat.Frost': {}, 'Appliance.Control.Thermostat.Overheat': {}, 'Appliance.Control.Thermostat.WindowOpened': {}, 'Appliance.Control.Thermostat.Schedule': {}, 'Appliance.Control.Screen.Brightness': {}, 'Appliance.Control.Thermostat.Sensor': {}, 'Appliance.Control.Thermostat.SummerMode': {}, 'Appliance.Control.Sensor.History': {}, 'Appliance.Digest.TriggerX': {}, 'Appliance.Digest.TimerX': {}}}}
2023-12-14 07:34:43,662 - root - INFO - Subscribing to topic: /appliance/REDACTED/subscribe
2023-12-14 07:34:43,734 - root - INFO - Subscribing to topic: /app/REDACTED-sniffer/subscribe
2023-12-14 07:34:43,807 - root - INFO - Subscribing to topic: /app/REDACTED/subscribe
2023-12-14 07:34:45,398 - root - INFO - Fake device received message: b'{"header":{"from":"/app/REDACTED/subscribe","messageId":"be6de34b81bfd4166a283b90b42e09b4","method":"GET","namespace":"Appliance.Control.Thermostat.DeadZone","payloadVersion":1,"sign":"REDACTED","timestamp":1702535682,"triggerSrc":"Android","uuid":"REDACTED"},"payload":{"deadZone":[{"channel":0}]}}' from topic /appliance/REDACTED/subscribe
2023-12-14 07:34:45,398 - root - INFO - b'{"header":{"from":"/app/REDACTED/subscribe","messageId":"be6de34b81bfd4166a283b90b42e09b4","method":"GET","namespace":"Appliance.Control.Thermostat.DeadZone","payloadVersion":1,"sign":"REDACTED","timestamp":1702535682,"triggerSrc":"Android","uuid":"REDACTED"},"payload":{"deadZone":[{"channel":0}]}}'
2023-12-14 07:34:54,822 - root - INFO - Fake device received message: b'{"header":{"from":"/app/REDACTED/subscribe","messageId":"7c859e2d4dcc764d55cadfd093259710","method":"SET","namespace":"Appliance.Control.Thermostat.DeadZone","payloadVersion":1,"sign":"REDACTED","timestamp":1702535694,"triggerSrc":"Android","uuid":"REDACTED"},"payload":{"deadZone":[{"channel":0,"value":5}]}}' from topic /appliance/REDACTED/subscribe
2023-12-14 07:34:54,822 - root - INFO - b'{"header":{"from":"/app/REDACTED/subscribe","messageId":"7c859e2d4dcc764d55cadfd093259710","method":"SET","namespace":"Appliance.Control.Thermostat.DeadZone","payloadVersion":1,"sign":"REDACTED","timestamp":1702535694,"triggerSrc":"Android","uuid":"REDACTED"},"payload":{"deadZone":[{"channel":0,"value":5}]}}'
2023-12-14 07:35:34,608 - root - INFO - USER-TOPIC (/app/3345217/subscribe) <- {'header': {'messageId': '04106b1032d8cc49d44a35f2f8d92584', 'namespace': 'Appliance.System.Online', 'timestamp':<PHONE_NUMBER>, 'triggerSrc': 'CloudOnline', 'payloadVersion': 1, 'method': 'PUSH', 'sign': 'REDACTED', 'from': '/appliance/REDACTED/publish'}, 'payload': {'online': {'status': 1}}}
2023-12-14 07:35:42,703 - root - INFO - Fake device received message: b'{"header":{"from":"/app/REDACTED/subscribe","messageId":"835e483ba861c7b8fc0c5727e9ccb222","method":"GET","namespace":"Appliance.Control.Thermostat.DeadZone","payloadVersion":1,"sign":"REDACTED","timestamp":1702535699,"triggerSrc":"Android","uuid":"REDACTED"},"payload":{"deadZone":[{"channel":0}]}}' from topic /appliance/REDACTED/subscribe
2023-12-14 07:35:42,703 - root - INFO - b'{"header":{"from":"/app/REDACTED/subscribe","messageId":"835e483ba861c7b8fc0c5727e9ccb222","method":"GET","namespace":"Appliance.Control.Thermostat.DeadZone","payloadVersion":1,"sign":"REDACTED","timestamp":1702535699,"triggerSrc":"Android","uuid":"REDACTED"},"payload":{"deadZone":[{"channel":0}]}}'
2023-12-14 07:35:42,704 - root - INFO - Fake device received message: b'{"header":{"from":"/app/REDACTED/subscribe","messageId":"cf414aae42e1c847456d61c25c0746ae","method":"SET","namespace":"Appliance.Control.Thermostat.DeadZone","payloadVersion":1,"sign":"REDACTED","timestamp":1702535703,"triggerSrc":"Android","uuid":"REDACTED"},"payload":{"deadZone":[{"channel":0,"value":35}]}}' from topic /appliance/REDACTED/subscribe
2023-12-14 07:35:42,704 - root - INFO - b'{"header":{"from":"/app/REDACTED/subscribe","messageId":"cf414aae42e1c847456d61c25c0746ae","method":"SET","namespace":"Appliance.Control.Thermostat.DeadZone","payloadVersion":1,"sign":"REDACTED","timestamp":1702535703,"triggerSrc":"Android","uuid":"REDACTED"},"payload":{"deadZone":[{"channel":0,"value":35}]}}'
2023-12-14 07:35:42,704 - root - INFO - USER-TOPIC (/app/3345217/subscribe) <- {'header': {'messageId': '240f58dd57583d98afe7e974fce5aac9', 'namespace': 'Appliance.System.Online', 'timestamp':<PHONE_NUMBER>, 'triggerSrc': 'CloudOnline', 'payloadVersion': 1, 'method': 'PUSH', 'sign': 'REDACTED', 'from': '/appliance/REDACTED/publish'}, 'payload': {'online': {'status': 1}}}
2023-12-14 07:35:42,704 - root - INFO - Fake device received message: b'{"header":{"from":"/app/REDACTED/subscribe","messageId":"499a2bbd0dd09215383ea0efe2dd6ff2","method":"GET","namespace":"Appliance.Control.Thermostat.DeadZone","payloadVersion":1,"sign":"REDACTED","timestamp":1702535735,"triggerSrc":"Android","uuid":"REDACTED"},"payload":{"deadZone":[{"channel":0}]}}' from topic /appliance/REDACTED/subscribe
2023-12-14 07:35:42,705 - root - INFO - b'{"header":{"from":"/app/REDACTED/subscribe","messageId":"499a2bbd0dd09215383ea0efe2dd6ff2","method":"GET","namespace":"Appliance.Control.Thermostat.DeadZone","payloadVersion":1,"sign":"REDACTED","timestamp":1702535735,"triggerSrc":"Android","uuid":"REDACTED"},"payload":{"deadZone":[{"channel":0}]}}'
2023-12-14 07:35:42,803 - root - INFO - Fake device received message: b'{"header":{"from":"/app/REDACTED/subscribe","messageId":"3aca5972b20602359244a803535eadba","method":"GET","namespace":"Appliance.Control.Thermostat.DeadZone","payloadVersion":1,"sign":"REDACTED","timestamp":1702535743,"triggerSrc":"Android","uuid":"REDACTED"},"payload":{"deadZone":[{"channel":0}]}}' from topic /appliance/REDACTED/subscribe
2023-12-14 07:35:42,803 - root - INFO - b'{"header":{"from":"/app/REDACTED/subscribe","messageId":"3aca5972b20602359244a803535eadba","method":"GET","namespace":"Appliance.Control.Thermostat.DeadZone","payloadVersion":1,"sign":"REDACTED","timestamp":1702535743,"triggerSrc":"Android","uuid":"REDACTED"},"payload":{"deadZone":[{"channel":0}]}}'
2023-12-14 07:35:55,124 - root - INFO - Fake device received message: b'{"header":{"from":"/app/REDACTED/subscribe","messageId":"fda879c866c63e28656870065a767e24","method":"SET","namespace":"Appliance.Control.Thermostat.DeadZone","payloadVersion":1,"sign":"REDACTED","timestamp":1702535755,"triggerSrc":"Android","uuid":"REDACTED"},"payload":{"deadZone":[{"channel":0,"value":5}]}}' from topic /appliance/REDACTED/subscribe
2023-12-14 07:35:55,124 - root - INFO - b'{"header":{"from":"/app/REDACTED/subscribe","messageId":"fda879c866c63e28656870065a767e24","method":"SET","namespace":"Appliance.Control.Thermostat.DeadZone","payloadVersion":1,"sign":"REDACTED","timestamp":1702535755,"triggerSrc":"Android","uuid":"REDACTED"},"payload":{"deadZone":[{"channel":0,"value":5}]}}'
2023-12-14 07:36:01,349 - root - INFO - Fake device received message: b'{"header":{"from":"/app/REDACTED/subscribe","messageId":"70ee0120d481e4f3b611eb028f5a0bdc","method":"SET","namespace":"Appliance.Control.Thermostat.DeadZone","payloadVersion":1,"sign":"REDACTED","timestamp":1702535761,"triggerSrc":"Android","uuid":"REDACTED"},"payload":{"deadZone":[{"channel":0,"value":35}]}}' from topic /appliance/REDACTED/subscribe
2023-12-14 07:36:01,349 - root - INFO - b'{"header":{"from":"/app/REDACTED/subscribe","messageId":"70ee0120d481e4f3b611eb028f5a0bdc","method":"SET","namespace":"Appliance.Control.Thermostat.DeadZone","payloadVersion":1,"sign":"REDACTED","timestamp":1702535761,"triggerSrc":"Android","uuid":"REDACTED"},"payload":{"deadZone":[{"channel":0,"value":35}]}}'
2023-12-14 07:36:01,446 - root - INFO - Fake device received message: b'{"header":{"from":"/app/REDACTED/subscribe","messageId":"0931098b2fe7c8ae3982db1b1e0d1cbf","method":"GET","namespace":"Appliance.System.Ability","payloadVersion":1,"sign":"REDACTED","timestamp":1702535761,"triggerSrc":"Android","uuid":"REDACTED"},"payload":{}}' from topic /appliance/REDACTED/subscribe
2023-12-14 07:36:01,446 - root - INFO - b'{"header":{"from":"/app/REDACTED/subscribe","messageId":"0931098b2fe7c8ae3982db1b1e0d1cbf","method":"GET","namespace":"Appliance.System.Ability","payloadVersion":1,"sign":"REDACTED","timestamp":1702535761,"triggerSrc":"Android","uuid":"REDACTED"},"payload":{}}'
2023-12-14 07:36:08,231 - meross_iot.manager - INFO - Fetch and update done
2023-12-14 07:36:08,231 - meross_iot.manager - INFO -
------- Manager Discovery ended -------

Here are the commands:
Command Description: Setting switching differential value to 3.5 C

Request:
{"header":{"from":"/app/<appIdValue>/subscribe","messageId":"<messageIdValue>","method":"GET","namespace":"Appliance.Control.Thermostat.DeadZone","payloadVersion":1,"sign":"<signValue>","timestamp":1702535682,"triggerSrc":"Android","uuid":"<uuidValue>"},"payload":{"deadZone":[{"channel":0}]}}
Response:
{"deadZone": [{"channel": 0, "value": 35, "min": 5, "max": 35, "lmTime":<PHONE_NUMBER>}]}

Command Description: Setting switching differential value to 0.5 C

Request:
{"header":{"from":"/app/<appIdValue>/subscribe","messageId":"<messageIdValue>","method":"SET","namespace":"Appliance.Control.Thermostat.DeadZone","payloadVersion":1,"sign":"<signValue>","timestamp":1702535694,"triggerSrc":"Android","uuid":"<uuidValue>"},"payload":{"deadZone":[{"channel":0,"value":5}]}}
Response:
{"deadZone": [{"channel": 0, "value": 5, "min": 5, "max": 35, "lmTime":<PHONE_NUMBER>}]}

What I see is MQTT. deadZone value is the switching differential value. Sadly the min value is 5 but I'm not sure if this is a limit set by the app and the sniffer was getting that value or it's a limit set by the firmware. I'm curious what would happen if a SET request with a deadzone value of 1 would be made. Sadly I don't have mqtt set up yet for the devices.

@krahabb I've seen a couple of mentions of deadZone in the code (haven't seen any function tied to it). Could you please add an option to change the sensitivity into a beta version so I could try it out and report back if it works?
I wonder what could happen if the device would receive a value of 1 instead of the min 5 specified.

Sure! thank you for the inspection...I'll add the 'deadZone' support into meross_lan since it is actually almost ignored
In my opinion the 0.5 resolution is 'encoded' in the device hw/fw

@krahabb Thank you for implementing this feature. Will there be a beta to test it?

@FabianGabor ,
The fix went into a 'huge' dev branch with a lot of code-base rewriting and so 'highly-experimental'
Nevertheless, now that I've published the stable Cloudy.5, the next beta will start containing this dev branch and will come soon...maybe today

You could anyway use (with any meross_lan release tho) the meross_lan.request service and send almost any kind of payload to the device. Just set the proper device_id to target your (configured) device and fill the relevant parameters (the key parameter is not needed if the device is configured since by default that's the one used)
Latest releases are better since will show you the actual response from the device for any  request made

@krahabb Thanks for the implementation. Sadly it seems that the min value is set by the device and won't accept lower value than 5 (0.5 C).
Tried it with:
service: meross_lan.request
data:
  payload: "{\"deadZone\":[{\"channel\":0,\"value\":1}]}"
  device_id: *****
  protocol: auto
  method: SET
  namespace: Appliance.Control.Thermostat.DeadZone
  host: *****

Afterwards I've checked the set values with a GET request. Values below 5 are not accepted. Values that are not multiples of 5 are floored (14 to 10 or 1.0 C, 16 to 15 or 1.5C).
I've created a post on the Meross US forum titled MTS200 lower switching differential so anyone interested can upvote it. Sadly I don't know how to share the url from the app and it seems the forum isn't accessible from a browser (or I cannot find it by googling it).


Laravel 10 support

Laravel 10 has been released today (https://laravel-news.com/laravel-10). This package currently doesn't support it, please add support for Laravel 10. Thanks!

Hi Alexander,
Thanks for the request. I will try to investigate this next week.

Thanks for getting this done so quickly!


Indexing

Dear authors,
I wanted to ask the following:
Is it possible to get the original indices of the instance in each batch during traversal over the data (through the data loader)? In other words, is it possible to have something along the lines of
for images, targets, indices in loader:
without changing the beton file? Or is it possible to retrieve such indices from the loader?
Thanks in advance,
M.T.

Hi @muradtuk ! This should be possible - I'm not sure off the top of my head what the cleanest way to do it is, but you can definitely create a Pipeline that applies a transform that simply replaces the data with the index (see https://docs.ffcv.io/ffcv_examples/transform_with_inds.html) - this might be kind of wasteful but probably wouldn't slow things down too much.


(inf-20100615 - 13w01b) Flowing water

With the introduction of flowing liquids on June 15th, the prior flowing water animation gained a new augmentation where the texture would be shifted a certain amount to give it a proper flowing appearance.

I do not know how much this translation actually is, though.
There are probably two versions of this animation: one 16x16 version, for its 20100615 debut, and a 32x32 version, to accommodate the rotation and other transformations 20100616-1808 onwards did for flowing fluids.
As the flowing water texture very likely used RNG for generation, it may vary between sessions and getting a loopable animation may not be possible.

The Pocket Edition case has been split into #29.


Fix links that pointed to a redirection page

For #445
These were the only links I found that pointed to the "There is a new edition of the book and this is an old link." page.
With this merged, I'd consider #445 fixed

Could you also rebase your PR?

With this, I guess that you mean that I should delete the commits that are not relevant to this PR? I did that already, do you also want to squash the other commits?

With this, I guess that you mean that I should delete the commits that are not relevant to this PR? I did that already

Yes, thank you. "Rebase" is a feature of git to apply the commits of a branch on a different (e.g. more up-to-date) base branch. See https://www.atlassian.com/git/tutorials/rewriting-history/git-rebase


Additional chapater elaborating usage of Vulkan Memory Allocator (VMA)

My personal homework some kind of

Example code ready here: https://github.com/chuigda/vulkan4j/blob/master/tutorial/src/main/java/ch_vma/Main.java
Now just fill a new chapter then


[Appbar] Add menuIcon prop and slot.  Closes #235

[!WARNING]
This pull request is not mergeable via GitHub because a downstack PR is open. Once all requirements are satisfied, merge this PR as a stack on Graphite.
Learn more

Current dependencies on/for this PR:

main

PR #167

PR #239   👈
PR #238
PR #236
PR #217
PR #213
PR #192
PR #184
PR #146
PR #137

This stack of pull requests is managed by Graphite.


feat: Add support for external integration with prometheus alertmanager for grafana

…ation with prometheus alertmanager for grafana. Added outputs for IAM policy.
Description

Updated Prometheus policy document to add support for external integration with prometheus alertmanager for grafana. per https://docs.aws.amazon.com/prometheus/latest/userguide/integrating-grafana.html
Added outputs for IAM policy created.
Updated readme to include outputs for IAM policy.

Motivation and Context
Amazon Managed Grafana must have the following permissions for your Prometheus resources. You must add them to either the service-managed or customer-managed policies described in https://docs.aws.amazon.com/grafana/latest/userguide/AMG-manage-permissions.html.
aps:ListRules
aps:ListAlertManagerSilences
aps:ListAlertManagerAlerts
aps:GetAlertManagerStatus
aps:ListAlertManagerAlertGroups
aps:PutAlertManagerSilences
aps:DeleteAlertManagerSilences
Breaking Changes
No
How Has This Been Tested?

[ *] I have updated at least one of the examples/* to demonstrate and validate my change(s)
[ *] I have tested and validated these changes using one or more of the provided examples/* projects
[ *] I have executed pre-commit run -a on my pull request

This PR is included in version 2.1.0 :tada:

Thanks @antonbabenko and @bryantbiggs !


Improve Docker Images

PR Summary
Enhance docker images so tests don't take as long and images aren't too big

PR Context

PR Checklist

[x] PR has a meaningful title

Use the present tense and imperative mood when describing your changes

[x] Summarized changes
[x] Make sure all .h, .cpp, .cs, .ps1 and .psm1 files have the correct copyright header
[x] This PR is ready to merge and is not Work in Progress.

If the PR is work in progress, please add the prefix WIP: or [ WIP ] to the beginning of the title (the WIP bot will keep its status check at Pending while the prefix is present) and remove the prefix when the PR is ready.

Breaking changes

[x] None
OR
[ ] Experimental feature(s) needed

[ ] Experimental feature name(s):

User-facing changes

[x] Not Applicable
OR
[ ] Documentation needed

[ ] Issue filed:

Testing - New and feature

[x] N/A or can only be tested interactively
OR
[x] Make sure you've added a new test if existing tests do not effectively test the code changed

RDIL can you file an issue to disable codacy for Docker.  The results are alway useless.


[BUG]: Incorrect RETRO Documentation

Description
When the bot creates the monthly slack message, with all the sub-teams and responsibles, the link to the RETRO documentation is pointing to the old confluence pages.
Steps to reproduce
Click on the link to the docs at the bottom of the slack message:

Expected result
What should happen?
The link should point to the new confluence location: https://kigroup.atlassian.net/wiki/spaces/OX/pages/416055630/Retro
Actual result
The link points to the old confluence space.

@jpjcorreia thank you for your feedback. I'll update it asap


⚠ Bofrost.de has degraded performance

In 874a7d2, Bofrost.de (https://www.bofrost.de) experienced degraded performance:

HTTP code: 200
Response time: 1579 ms

Resolved: Bofrost.de performance has improved in 3ac239a after 34 minutes.


add namespace selector and pod selector functionality to network policy

This code does some basic reorganization to pkg/ovn/policy_old.go
and adds the functionality to more closely support upstream kubernetes
network policy.
This PR passes all the network policy extended tests in openshift
depends on https://github.com/openvswitch/ovn-kubernetes/pull/466

Let me understand this. So if both namespaceSelector and podSelector is given, then the podSelector is for the pods inside that particular namespace?

Yes, that is the correct behaviour if both namespaceSelector and podSelector are given in the same from rule
Link to docs

namespaceSelector and podSelector: A single to/from entry that specifies both namespaceSelector and podSelector selects particular Pods within particular namespaces.

Thanks. I understand the need for the change. I will take a look . In the meantime, would you mind removing the unrelated first commit from this series?

@shettyg I added egress support. Could you give this another look?

@dcbw PTAL


Migrate tests from test-framework to tasty

TODO:

[x] Update HashMapProperties module header
[x] Convert the other test suites

I assume this change is rather uncontroversial: test-framework is basically unmaintained.  tasty is very similar in its API but more polished and actively maintained.


Add Dataset message

Related to #58
What do you think? I can add tests, etc. after we decide on an approach.

Is it important that we have these datasets and associated pre-processing code as part of the schema? I kind of like having Reactions be the highest-level message type, i.e., every proto in the schema is a Reaction. I agree these are important fields to capture for defining grouped datasets and processing scripts.

Is it important that we have these datasets and associated pre-processing code as part of the schema? I kind of like having Reactions be the highest-level message type, i.e., every proto in the schema is a Reaction. I agree these are important fields to capture for defining grouped datasets and processing scripts.

Not necessarily. The thing I like about this is that all the data for a dataset is in a structured form. We could move this to another .proto file to avoid any confusion with the other messages related to Reaction.

I would support having it in a separate .proto. To me, this is starting to add more functionality and metadata (metametadata?) like you would want for a centralized website. Perhaps Datasets need their own Provenance.

PTAL; we can add more functionality/tests once we have specific applications.

We can keep this open until we have more of those things :)
Note that the type of record_ids matches the type of ReactionProvenance.record_id.

(Closing for now.)

Reopening based on discussion in #109; the major change is that now the Dataset message stores the actual Reaction messages, not just their IDs.

(Working on some tests now.)

Some questions:

Is a map for reactions better than just a repeated field? Is there a significant benefit to having the reaction's identifier be required as a key rather than iterating through the list (if needed)? From a contributor's point of view, it's going to be very annoying to come up with placeholder strings as keys and use the dictionary-type definition rather than a list-type append.

I fought with myself on this, but I think the user experience is more important that the fast lookup, which could be written somewhere else if needed for a downstream application. I'll change this to a repeated field.

Are we comfortable with the restriction that a single Dataset cannot contain reactions from multiple DOIs?

I was actually imagining that this field would contain a DOI for this dataset, one that we assign. This could be pointed to in publications, etc. Not that it matches the source of any Reaction data taken from the literature.

What is the benefit of having the url link to the official version of the dataset in the database? Who/what assigns the version?

I thought this might be useful for quickly finding where a dataset came from in the official repo. I imagined that the version would be incremented by an automated script every time any of the contained reactions is modified. But I'll drop these for now until we can discuss further.

P.S. I'm also imagining a use case that will make you cringe: running exec on function definitions contained in scripts

To check that they run? I could probably be persuaded if we can find a safe way to do this...