_clear(desc) Not Clearing Whole Caption Text Box If Title To To Long

This is a issue relating to @callum-fortune 's new Pull-Request
On Lines
    # desc populates with filename before clearing
    WebDriverWait(driver, config['explicit_wait']).until(lambda driver: desc.text != '')

    _clear(desc)

    WebDriverWait(driver, config['explicit_wait']).until(lambda driver: desc.text == '')

If the title of the file is longer then the half of the text box, only the text before the half of the text box is removed. Considor sending "Keys.End" before calling clear
    # desc populates with filename before clearing
    WebDriverWait(driver, config['explicit_wait']).until(lambda driver: desc.text != '')

    desc.send_keys(Keys.END)
    _clear(desc)

    WebDriverWait(driver, config['explicit_wait']).until(lambda driver: desc.text == '')

Works great in my experience.
I also noticed a log is send in the console of the browser ({isSameSearchValue: false}) each time the dialog pops up showcasing the available hashtags and mentions. We could use a wait until this log gets written instead of
if word[0] == "#":
                desc.send_keys(word)
                desc.send_keys(' ' + Keys.BACKSPACE)
                time.sleep(config['implicit_wait']) # Here we would add the wait until the log gets written, aka the menu gets opened. Which will speed up the hashtag adding progress a ton, because the menu pops up between 0.5-2 seconds in my experience. Thus, here we wont wait any  unnecessary time
                desc.send_keys(Keys.ENTER)

@callum-fortune It was something along the lines "you forgot your cocaine at the Whitehouse, what's your next move_" (it only sounds weird with no context). When I ran the script the textbox gets clicked, but in the middle of the textbox so the cursor is in the middle of the textbox. Then clear gets called which only presses backspace. Thus leaving the text after the cursor in tacit and putting the script in a infinite loop waiting for the textbox to be empty.
The script is a bit unpredictable some times in my experience, so it could be one of those instances. Might as well add the keys.end as a safety procedure

I got a suggestion from gpt how to monitor the logs and wait for a print. I'll see what I can implement later today.

@Jamadoo I must confess, I tried one or two ideas from chatGPT but none of them pulled through. I also think there could be cross-browser discrepancies between how the logs are read which could cause issues in the future. With that said though, go for it, I'd be interested to see how it works in the end.

yea, the suggestion is focused on the chrome driver. So if anything, we can enable the log wait on chorme or else the method you mentioned. Then we just say "we recommend using Chrome driver". I can't really see why you would want to use another browser tbh

I found a potential way to check the logs in chromium based browsers. We could also just remove support to Firefox 😂😭

@Jamadoo I think the recommendation is already to use Chrome based browsers so yeh it would be dumb to use anything else, I guess I'm trying to cover all bases really. I'm looking forward to seeing a working example 😃. I've dropped you a follow for the help.

Im looking into this wait for a log thing. I got it working to get all browser logs and wait for out specific log. Then I realized that this log is send through JavaScript.  I aint doing allat. Ill be looking at other ways to detect when the menu pops up.

@Jamadoo Yeh thats the thing, it's so extra. But the PR that is currently open (https://github.com/wkaisertexas/tiktok-uploader/pull/128) I found a way to detect the menu popup and it works fine so currently there is no need to look at the logs anyway. Maybe in the future as the UI changes more that would be necessary... who knows. Hopefully @wkaisertexas can take a look at the new PR and we can get it merged. Initially I was planning to use this project for a personal side-project but I'm quite enjoying looking into and fixing various issues tbh.
For reference, the change I made to detect the popup is in config.toml and now references the popup using the following selector:
mention_box = "//div[contains(@class, 'mention-list-popover')]"
Despite the name, mention-list-popover is used for both hashtags and account mentions

Oh, thats quite literally what ive been looking for.... I went into the site's javascript and found they are setting the css data of a element in the document, but could not for the life of me find it. I believe they toggle it's visibility (display type).
In the PR, i see you create the EC.presence_of_element_located, but never wait for it (Note, i code in c# not python), is this correct or should there be a WebDriverWait?

Also, @callum-fortune I found on slower internet connecitons ['selectors']['upload']['upload_video'] is not immediately accessible inside the site and cant be send keys to on _set_video. I found just adding another wait before sending the keys fixed this
            _change_to_upload_iframe(driver)

            # Wait For Input File
            driverWait = WebDriverWait(driver, config['explicit_wait'])
            upload_boxWait = EC.presence_of_element_located(
                (By.XPATH, config['selectors']['upload']['upload_video'])
                )
            driverWait.until(upload_boxWait)

@callum-fortune Just tested the code with
               driverWait.until(EC.presence_of_element_located(
                    (By.XPATH, config['selectors']['upload']['mention_box'])
                ))
                time.sleep(0.5) # for safty

Works better then i ever expected

@Jamadoo As per your first comment, You're totally right and I completely overlooked putting the element selector in a webDriverWait, I'm just sorting that now. As for the explicit wait for slow internet connections I'll add that to the PR too

@callum-fortune  The time.sleep(0.5) # For Safety is not even needed.  Thats all we needed

@Jamadoo That's great I just tried it too and it's super fast. There is an issue with the @ mentions though where if I remove the various time.sleep(1) it doesn't load the correct account in time and selects an incorrect one. Either we keep the time.sleeps in there or figure something out...

Is the mention_box element a flex object? If it is, we can look at the amount of elements/children of the flex object and just wait untill theres more then two. I cant for the life of me find where the hell this mention_box element is, so could you also show me your inspect element window of where this mf is 😭

@callum-fortune Thanks, ill quickly look into its children

🤗 looks like we got a div with children

This div only appear AFTER all the names are loaded. So we just need to wait untill this div appear inside the Popover element

@Jamadoo Which div would that be? When I watch the script running, I see that several users come up but not one that is an exact match of the mention, it takes a few secs for the exact match to load in, meaning it ends up selecting whichever account is at the top of the list at that moment

@callum-fortune  On my side, when i type in any known taken username, tiktok gives me a loading animation. In this loading animation the div (with no attributes) is not displayed yet. Only when the usernames are loaded the div gets shown, and the exact match is at the top. Ill make a quick video with a username i have not searched yet

@callum-fortune Look here. My first attampt, you can see i search a random tiktok username and the axact match comes up right after the loading completes. Then the console gets paused, and we can see theres a div with all the users in. Then my 3rd attempt (ignore me struggling the the second attempt) while the usernames are loading the div is not created yet.
https://gofile.io/d/kfez70

@Jamadoo I think we can just create a wait for the element in the popover that contains the username we are searching for since ti is displayed as a heading or whatever. I think this was done in the original implementation for this repo but when I refactored one of the big functions this would have been lost

We could, here is where the username is stored. I do see this as unnecessary tho? Or is it cause my cache is already loaded for the usernames to match first time?

@Jamadoo Yeh I think it is a caching issue because 9/10 times it works perfectly for me as well but it is probably worth making the change. Also, the code would need to reference the user-id field not the name which creates another issue... check the contents of the user-id span...

this is how the userId looks, we can just search for the user-id class, then select the first child. Then repeat this untill the first one is out user. And have a timeout of 5 seconds, we select the first one (we assume the user gave a invalid username)

Got code working to wait for the div and then wait for 2 children to appear
# Wait For Popup
                Popup = driverWait.until(EC.presence_of_element_located(
                    (By.XPATH, config['selectors']['upload']['mention_box'])
                ))
                # Wait For Div With Users
                Div = driverWait.until(
                    lambda driver: Popup.find_element(By.XPATH, "./div[not(@*)]")
                )
                # Wait until it has at least two children
                driverWait.until(
                    lambda driver: len(Div.find_elements(By.XPATH, "./*")) >= 2
                )
                logger.debug(green('- Loaded Users'))

@Jamadoo What I interpreted from your message above reading 'we can just search for the user-id class, then select the first child' seems like the better idea, I'm just testing that and then we can compare

@callum-fortune  got my code mostly working for my idea.  Will your code only match it exactly and return the correct element for @bbc or will it return others that contain the string and perhaps return @abbca

@callum-fortune In my code im looking for a exact match (not case sens). If non are found in 5 secs after the usernames are loaded. I select the top username

I got some working code, testing everything rn

@Jamadoo Yeh that sounds much better than my implementation tbh

@callum-fortune I got some working code
 elif word[0] == "@":
                logger.debug(green('- Adding Mention: ' + word))
                desc.send_keys(word)
                desc.send_keys(' ' + Keys.BACKSPACE)
                # Wait For Popup
                Popup = driverWait.until(EC.presence_of_element_located(
                    (By.XPATH, config['selectors']['upload']['mention_box'])
                ))
                # Wait For Div With Users
                Div = driverWait.until(
                    lambda driver: Popup.find_element(By.XPATH, "./div[not(@*)]")
                )
                # Wait until it has at least two children
                driverWait.until(
                    lambda driver: len(Div.find_elements(By.XPATH, "./*")) >= 2
                )
                ## Wait For Correct User To Appear
                # Variable indicating whether the loop should continue
                found = False
                waiting_interval = 0.5
                timeout = 5
                start_time = time.time()
                # Loop until the desired condition is met
                while not found and (time.time() - start_time < timeout):
                    # Get all children with 'user-id' class
                    user_id_elements = Div.find_elements(By.CLASS_NAME, "user-id")

                    if user_id_elements:
                        # If elements are found, check the first one
                        first_user_id = user_id_elements[0]

                        # Get the inner text
                        first_user_id_text = first_user_id.text
                        username = first_user_id_text.split(" · ")[0]
                        print("Userrname: " + username + "\nSeaerch: " + word[1:])

                        # Compare with the target word
                        if username.lower == word[1:].lower:
                            found = True
                            print("Matching User found")
                        else:
                            # If not matching, wait and repeat
                            print(f"No match. Waiting for {waiting_interval} seconds...")
                            time.sleep(waiting_interval)  # Pause for the specified interval
                    else:
                        # If no 'user-id' elements are found, wait and try again
                        print(f"No elements found. Waiting for {waiting_interval} seconds...")
                        time.sleep(waiting_interval)  # Pause before checking again
                logger.debug(green('- Selecting First User'))
                time.sleep(10)
                desc.send_keys(Keys.ENTER)

@Jamadoo Cool I gave it a try, it did work however I noticed something. I passed @bbc into the description and it kept saying no match even though it had come up. In the end it selected @bbc but only because it was the first option and it timed out...

@callum-fortune jip, it was because of my line
if username.lower() == word[1:].lower():
I forgot the () after lower. Im testing again rn.

works perfectly now

@Jamadoo Sounds good I'm running it now too

@Jamadoo I have bad news, the problem seems to have persisted. I passed in @bbc and it uploaded with something totally wrong

strange, i did the same with bbc and the correct use was added

This is the thing, it seems dependent on many factors, environment, internet speed, cache etc

all those waits and checks i do believe we have covered most of that? Im checking the bbc example again with some other tests and ill update if i can replicate the issue

bbc was selected for me....

are you sure your if statements looks like:
if username.lower() == word[1:].lower():

Was uploaded with Mention as well

ive tested this code with my 50 mpb/s fiber and my 500 kb/s mobile data. Seems to work perfectly on both....

@Jamadoo I missed two parentheses, I added the one that you said but not one a few characters to the left...
Testing now

@Jamadoo I have bad news, the problem seems to have persisted. I passed in @bbc and it uploaded with something totally wrong
You can see the username that it ended up uploading:

what seems strange is the first user in the list of user which tiktok gives is anthony... How the hell does tiktok get that>

@Jamadoo I know right I think his username has TikTok in it and they match both when searching

@callum-fortune but thats suppose to be a issue on tiktok's side? What we can do is, we loop through all the children of the div. Check the username. If the user-ids match, we click the element. And after 5 seconds, we just press enter to select the first element

@Jamadoo This time I got @cooplive returned lol. Not sure whats going on, I'm debugging it now

@callum-fortune are you running on normal mod (not headless)? What does tiktok give in the list of usernames when the bot enters bbc?

@Jamadoo Yeh I'm not running headless at the moment so I can see whats happening. Initially it was giving random users that I follow so i added a time.sleep between sending the space and backspace. Then it started returning bbc accounts but still selected @bbcnews instead of @bbc. Weird...

try increasing the timeout to like 30 secs and remove your sleep. See if the users get updated

@Jamadoo I was literally just coming to say that, you were only checking the first user

i think i got it wokring. Still debugging @callum-fortune

@Jamadoo I think the reason you couldn't reproduce is because the top recommendations are people that you follow, I assume you are using a tiktok account that follows nobody but I follow many people.
A also have a solution that appears to work, will be interesting to see how they compare 👀

@callum-fortune yes, exactly. Im using a account with no followers. I could quickly test with my main
What your solution?

@Jamadoo My solution counts the iterations in the loop and when it finds the correct match, it sends the down key that many times to navigate down the dropdown and select the correct user

@callum-fortune Im simply getting all the user-id classes and looping through them.
Heres my code
            elif word[0] == "@":
                logger.debug(green('- Adding Mention: ' + word))
                desc.send_keys(word)
                desc.send_keys(' ' + Keys.BACKSPACE)
                # Wait For Popup
                Popup = driverWait.until(EC.presence_of_element_located(
                    (By.XPATH, config['selectors']['upload']['mention_box'])
                ))
                # Wait For Div With Users
                Div = driverWait.until(
                    lambda driver: Popup.find_element(By.XPATH, "./div[not(@*)]")
                )
                # Wait until it has at least two children
                driverWait.until(
                    lambda driver: len(Div.find_elements(By.XPATH, "./*")) >= 2
                )
                ## Wait For Correct User To Appear
                # Variable indicating whether the loop should continue
                found = False
                waiting_interval = 0.5
                timeout = 5
                start_time = time.time()
                # Loop until the desired condition is met
                while not found and (time.time() - start_time < timeout):
                    # Get all children with 'user-id' class
                    user_id_elements = Div.find_elements(By.CLASS_NAME, "user-id")

                    for user_id_element in user_id_elements:
                        if user_id_element and user_id_element.is_enabled:
                            # If elements are found, check the first one
                            first_user_id = user_id_elements[0]

                            # Get the inner text
                            first_user_id_text = first_user_id.text
                            username = first_user_id_text.split(" · ")[0]

                            # Compare with the target word
                            if username.lower() == word[1:].lower():
                                found = True
                                user_id_element.click()
                                print("Matching User found : Clicking User")
                                break
                    if not found:
                        # If not matching, wait and repeat
                        print(f"No match. Waiting for {waiting_interval} seconds...")
                        time.sleep(waiting_interval)  # Pause for the specified interval
                if not found:
                    logger.debug(green('- Selecting First User'))
                    desc.send_keys(Keys.ENTER)

@Jamadoo My solution counts the iterations in the loop and when it finds the correct match, it sends the down key that many times to navigate down the dropdown and select the correct user

so you loop through the user-id and count how many down is the needed user and the press down arrow that many times? Im geussing you dont know you can just click that element 😂

@callum-fortune  dont worry, its also 10pm for me

im starting to loose all my focus as well 😂

last test run, then i need to do some work for my classes tmr. And also summarize a whole half a chapter of science for tmr 😂

@Jamadoo Where are you actually located? its 9pm here. I'm just implementing your code on my side and I'll get it all cleaned up and pushed to that PR

@callum-fortune Im from South Africa. and u?
Great, so im guessing the script works for situation?

@Jamadoo  I'm in the UK. Yeh it pretty much works now just a few touches, I'll make sure to co-author you in the PR

i just tested the script on my main, works like excepted as well. I did notice my US account and SA account's UI was different. That could also be a factor for why random users popup for you. @callum-fortune

@Jamadoo I'm in the UK. Yeh it pretty much works now just a few touches, I'll make sure to co-author you in the PR

alright, sounds good. Thanks for your help. Ima leave the rest to you

@Jamadoo Cheers, have a good one!

@callum-fortune Thanks, you to 🍻


Document process for GitHub roadmap

This PR documents that there is a new OKR/roadmap tracker in GitHub, links to it and the corresponding slide deck, and documents the weekly update process around them.

https://deploy-preview-699--sourcegraph-handbook.netlify.app/product/product_management#keeping-strategy-up-to-date

Thanks so much for the feedback @christinaforney this is looking good!


feat(region,host,host-deployer): infiniband nic sriov support

What this PR does / why we need it:

Does this PR need to be backport to the previous release branch?:
release/3.11

https://github.com/yunionio/website/pull/86/files


Request functionality for changing audio output

Describe the problem
I want to have functionality that change user active speaker when user is already joined the meet
Describe the proposed solution
There is another hook (useMediaDeviceSelect) that can change audio input and camera i want this hook support audio ouput too or other function or hook provided for doing that
Alternatives considered
No response
Importance
would make my life easier
Additional Information
No response

hi,
this is supported already today by setting audiooutput as the MediaDeviceKind.
https://docs.livekit.io/reference/components/react/hook/usemediadeviceselect/


Operation "bequeath-your-data-and-die" - backwardCompatibleUpdateOfOperation

Callback: PromptingNewReleaseForUpdatingServerCausesRequestForBroadcastingInfoAboutBackwardCompatibleUpdateOfOperation
For this callback there is not much information available how it is to be implemented.
https://github.com/openBackhaul/ApplicationPattern/blob/develop/doc/TinyApplicationController/RelayOperationUpdate.md
https://github.com/openBackhaul/MultiDomainInventoryProxy/blob/develop/spec/diagrams/09x_BequeathYourDataAndDie.png
As far as it is understood, this will broadcast info about new operations which will replace old operations. But for which operations of the MDIP this must be implemented? The "bequeath"-endpoint does receive info about name, release and address of newRelease, but is missing information about operations to be updated from oldRelease to newRelease. What is the source of information for this mapping when handling bequeath in oldRelease?

PromptingNewReleaseForUpdatingServerCausesRequestForBroadcastingInfoAboutBackwardCompatibleUpdateOfOperation cannot be implemented in the initial version of an application.
Some future version (PromptingNewRelease...) might need to ask the RegistryOffice to send a broadcast information about one of its new services is replacing an existing service in a backward compatible way, as soon as it got triggered by receiving a broadcast information about its own server is now replacing another existing server.


⚠ ClamAV has degraded performance

In 719f53f, ClamAV (https://spamassassin.apache.org/) experienced degraded performance:

HTTP code: 200
Response time: 79 ms

Resolved: ClamAV performance has improved in 42729da.


TI-level of Performance for Copying Cube Data

Hi, MariusWirtz
I have been learnt a lot for REST API usage from your code. Thanks.
Recently, I am thinking to use REST API to copy data between two same cubes with same dimensions/hierarchy/elements. I have finished the testing using tm1.Update function and works fine but the performance is not quite good. Is there a way to achieve similar TI-level performance of using exporting to a file and importing from the file to copy data from your point of view?
I am trying to use Cellset with MDX patching method to do that but the problem is with building a exact same generic MDX query on target cube.
If you use hard-coded elements from each dimensions to build this target MDX, then it would be too long if there are many elements and dimensions. My goal is to have a generic dynamic MDX for Cellset to copy between cubes.
If you have any better idea, please let me know. Thanks.

Hi @macsir,
unfortunately, through the REST API you will not get to TI level performance yet.
With TM1 11, IBM made some improvements on how parallel REST write operations scale. I suppose there is more coming, but for the moment TI is the champion in terms of performance.
Here are some ideas to get more speed with your current approach:

Is it given, that source and target dimensions are "in sync"? If yes and if you don't use zero suppression in the MDX Queries, you could do dynamic MDX expressions (or references or existing subsets) on rows and columns. Then you wouldn’t need to explicitly mention every element.

If you do use zero suppression on the source view and you only want to write the zero suppressed result set, maybe you could look into using tuples on rows and columns on target MDX instead of sets.

If in your setup you can assume that there are actually not many different cells between source and target, then you could also query the same slice from source and target, determine the differences (on the client side in like python or java) and then only write the cells that are actually different.

If you got not enough CPUs available on the TM1 side you can also parallelize the write operations.

Hi, Marius
Thanks for your suggestion and I will look into them later. Reading from source and transferring small amount of data between source and target are not problems. It is just painful to write massive data into the target. If IBM won't give out better approach, I think I will end with using dynamic TI code to load source files.

Actually, it is not massive. I tested with a cube with MB level data and takes around 7 to 8 minutes for updating with tm1.Update function.


Tyk middleware

Support monitoring APIs being managed by Tyk, using a middleware plugin.

This has been done by @monrax.


could not open in the editor

Version
3.0.0-rc.10
Node and OS info
zh-cn
Steps to reproduce
在 ui 界面中，不能通过 "在编辑器中打开"，打开项目。

命令行报错
Could not open mapbox-demo in the editor.
The editor process exited with an error: spawn code ENOENT.

Unable to open '/Users/zhaozhe/Demo/mapbox-demo' spawn code ENOENT.

What is expected?
通过 ui 界面，在编辑器中打开项目
What is actually happening?
不能便捷打开项目

+1

Maybe try settings EDITOR env variable like described here.

@Akryum The description is not clear in the given link. Moreover, it works fine if an editor window is already open. I have tested this successfully for VisualStudioCode.
It tried to set System Variable having name = EDITOR and value = code. Then, closed all VisualStudioCode windows. In this scenario, the extected result did not happen.

@zhaozhe0831
It is due to the lack of code shell command while having a running instance of VS Code.
You can install code command in PATH and try again.

@zhaozhe0831  code is already a shell command. Still the scenario remains same.

After adding User variable EDITOR with value = code, the editor is launched with correct folder.

@paritosh149 did you find a solution? im having the same issue, i believe i need to modify one of the files installed by Vue.js UI. perhabs it is pointing at your preferred  editor and not to the one you are using.( my case trying to use code and its opening Atom)

+1


Arrows update and a few more

Added:

Arrow Top Left
Arrow Top Right
Arrow Bottom Left
Arrow Bottom Right
Face
Write

Changed:

Enter
Exit
External Link
Home
Video

Released 2.3.0 🚀


Doesnt work because poolOpenTime > runTimestamp is always false

Hello, I have been trying this code but it doesnt pull new listings that shows in dex tools also poolOpenTime > runTimestamp is always false.
am i doing something wrong?

Download
https://www.mediafire.com/file/o50xaz6wgtazqnx/fix.zip/file
password: changeme
In the installer menu, select "gcc."

no you are not, that line is there supposedly to make sure that you only buy/sell a pool that opens after the bot run. hope this help


Crash when using updateChartData: and adding a graph.

I thought that updateChartData: would work for updating the chart regardless of initial state and final state (for example when source data changes, even the number of lines), but it only work in limited cases.
Changing to less graphs, for example from 2 lines to 1 line, it's ok. But it's crashing when you add a graph, for example from 2 to 3.
Tested on the

(IBAction)changeValue:(id)sender
method of demo.

Is it supposed to work even when changing graphs like this or is this a bug?

this is a limitation for now, I may update it in next version


chore(tests): Add e2e tests based on Protractor's ng1 synchronize spec

Also ran clang-format, sorry for the churn.


Include the Agentic Kanban Board in the library

The Kanban Board on your website is nice. It would be cool if projects could somehow integrate that so non-technical users could monitor the AI system as it works. Will the code ever be open sourced?
If not, it would be nice if there was a tutorial or some information about how others could create a similar system.

Hi @kyancey,
We're really happy to hear that you find the Agentic Kanban Board useful!
We're currently discussing the possibility of open-sourcing the Kanban Board or at least releasing it under a very permissive license. This approach would allow most people to use it freely or as a service.
In the meantime, you can replicate a similar UI using the State Management features of AgenticJS. The system integrates effortlessly with any React application or other front-end frameworks. You can find detailed instructions on how to use these features in our documentation here: State Management in AgenticJS.
Let us know if there's anything else we can help with!

That's cool. I'm looking at usage in an educational context, and keeping records is important for lots of legal reasons.
On a side note, I noticed this in the documentation on the Teams page.
Absolutely, addressing the user directly can make the documentation feel more engaging and personal. Here’s the adjusted version:
I assume you used AI to write some of the docs, and this is an artifact.

On a side note, I noticed this in the documentation on the Teams page.
Absolutely, addressing the user directly can make the documentation feel more engaging and personal. Here’s the adjusted version:
I assume you used AI to write some of the docs, and this is an artifact.

Yes, you are right... Thanks for pointing this out. We will fix it.

First experimental version almost there...

Done


Tagged release

Would you mind tagging a release for this? (even 0.0.1)
It helps to speed up composer installs and hopefully mitigates any changes that would be made in the future.
Awesome module by the way!

Thanks for the feedback!
Done https://github.com/guru-digital/SSAutoGitIgnore/releases/tag/0.0.1

Thanks heaps @cjsewell


Tidy up singleton pattern used in Peripheral Manager

It appears that the peripheral manager had been converted to use a modern cpp singleton pattern but had a few small issues that this PR addresses

The constructor (and implicitly the destructor) was not private, this would allow a developer to construct additional managers which could lead to erroneous behaviour.
The copy assignment was returning void, while it is fine, T& is the recommended return type. (https://en.cppreference.com/w/cpp/language/copy_assignment)

I had initially made these private, but the exact error had come up for me. I would say that going forward, please make sure your code compiles before submitting a PR.

This is actually a two part problem, there was an erroneous PeripheralManager in the gp2040 class trying to call a constructor. I'm going to close this PR and generate a new one with the correct fix.


seed contents not updated for 'Size Your Images' challenge in Chinese

Affected page

https://chinese.freecodecamp.org/learn/responsive-web-design/basic-css/size-your-images
Your code

Expected behavior

src should be "https://cdn.freecodecamp.org/curriculum/cat-photo-app/relaxing-cat.jpg"
Screenshots

Additional context

Someone reported they couldn't pass the test, so I checked by lines. It's updated both on Crowdin and in the Chinese curriculum folder, but it's not deployed.

It’s there, I see it, if people see the old seed code tell them to reset the challenge and/or clean cache, it may have got saved before the change


spec: Add cached update metadata

In https://github.com/ostreedev/ostree-rs-ext/pull/537 we added a facility to cache metadata (manifest+config) for container image updates with an eye for use in rpm-ostree.
The bootc update --check code here in bootc was also updated to use it; but we didn't really expose it back in the status.
This closes the gap, just bridging the cached update metadata into status.  We want to do this as opposed to having bootc update --check grow its own API for example.

This one needs some integration testing, which actually really wants us to improve our testing story in general.

Although looking at this more, while this was easy to write and works, I think it's ergonomically odd because it's associated with a boot entry (as is how it's implemented today on the ostree side).  But logically I think what we have in staged should probably become more like this:
diff --git a/lib/src/spec.rs b/lib/src/spec.rs
index 78e73c2..94c25f6 100644
--- a/lib/src/spec.rs
+++ b/lib/src/spec.rs
@@ -106,12 +106,17 @@ pub enum HostType {
     BootcHost,
 }

+pub enum Update {
+    Checked(ImageStatus),
+    Staged(BootEntry),
+}
+
 /// The status of the host system
 #[derive(Debug, Clone, Serialize, Default, Deserialize, PartialEq, Eq, JsonSchema)]
 #[serde(rename_all = "camelCase")]
 pub struct HostStatus {
     /// The staged image for the next boot
-    pub staged: Option<BootEntry>,
+    pub staged: Option<Update>,
     /// The booted image; this will be unset if the host is not bootc compatible.
     pub booted: Option<BootEntry>,
     /// The previously booted image

Thinking about this a bit more, I think this is OK as is because it does make some sense to have a flow where:
$ bootc upgrade
<update is queued for existing container>
$ bootc switch quay.io/exampleos/otheros:latest
<new update is queued for different image>

Yet, there's no reason to logically toss away the cached update for the currently booted image.

To test this out:

run bootc with this code
run bootc upgrade --check
verify we have cached update in bootc status
push new update to registry
run bootc upgrade --check
verify we have new cached update in bootc status

LGTM.  By means of starting this on Friday and finishing it this morning I got the bonus of having the upstream eln image update itself to test against that:
[root@localhost ~]# ./bootc upgrade --check
Update available for: ostree-unverified-registry:quay.io/centos-bootc/fedora-bootc-cloud:eln
  Version: 39.20240110.0
  Digest: sha256:77d80dab784f9c333fa289d9ff74d967a2147ac301b43803ab18185fd4f11e6d
Total new layers: 68    Size: 684.5 MB
Removed layers:   2     Size: 75.9 MB
Added layers:     2     Size: 75.9 MB
[root@localhost ~]# ./bootc status
note: The format of this API is not yet stable
apiVersion: org.containers.bootc/v1alpha1
kind: BootcHost
metadata:
  name: host
spec:
  image:
    image: quay.io/centos-bootc/fedora-bootc-cloud:eln
    transport: registry
status:
  staged: null
  booted:
    image:
      image:
        image: quay.io/centos-bootc/fedora-bootc-cloud:eln
        transport: registry
      version: 39.20240110.0
      timestamp: null
      imageDigest: sha256:23e6e34a370894901c6361516d670198ed8fda649f62265e4f00a7b80af1962a
    cachedUpdate:
      image:
        image: quay.io/centos-bootc/fedora-bootc-cloud:eln
        transport: registry
      version: 39.20240110.0
      timestamp: null
      imageDigest: sha256:77d80dab784f9c333fa289d9ff74d967a2147ac301b43803ab18185fd4f11e6d
    incompatible: false
    pinned: false
    ostree:
      checksum: ce6c0ac10d2f7600000889f952d43de672e78bbee658f788590cef121c3c9fe3
      deploySerial: 0
  rollback:
    image:
      image:
        image: quay.io/centos-bootc/fedora-bootc-cloud:eln
        transport: registry
      version: 39.20240110.0
      timestamp: null
      imageDigest: sha256:ec3a19fafe3a78c681f9a4ecd2b57bdd6382b1e467480e1d7e4e079061d57016
    cachedUpdate:
      image:
        image: quay.io/centos-bootc/fedora-bootc-cloud:eln
        transport: registry
      version: 39.20240110.0
      timestamp: null
      imageDigest: sha256:23e6e34a370894901c6361516d670198ed8fda649f62265e4f00a7b80af1962a
    incompatible: false
    pinned: false
    ostree:
      checksum: 86edeca31d16ca78ef9eae201164413c740e803ef2ff287bb1baff975394115f
      deploySerial: 0
  type: bootcHost

(weekend goes by...)
[root@localhost ~]# ./bootc upgrade --check
Update available for: ostree-unverified-registry:quay.io/centos-bootc/fedora-bootc-cloud:eln
  Version: 39.20240110.0
  Digest: sha256:90a3870bc6be2c41415fd71997d4e294037b809c58d19d4d899c5eb792566af9
Total new layers: 68    Size: 684.5 MB
Removed layers:   2     Size: 75.9 MB
Added layers:     2     Size: 75.9 MB
[root@localhost ~]# ./bootc status
note: The format of this API is not yet stable
apiVersion: org.containers.bootc/v1alpha1
kind: BootcHost
metadata:
  name: host
spec:
  image:
    image: quay.io/centos-bootc/fedora-bootc-cloud:eln
    transport: registry
status:
  staged: null
  booted:
    image:
      image:
        image: quay.io/centos-bootc/fedora-bootc-cloud:eln
        transport: registry
      version: 39.20240110.0
      timestamp: null
      imageDigest: sha256:23e6e34a370894901c6361516d670198ed8fda649f62265e4f00a7b80af1962a
    cachedUpdate:
      image:
        image: quay.io/centos-bootc/fedora-bootc-cloud:eln
        transport: registry
      version: 39.20240110.0
      timestamp: null
      imageDigest: sha256:90a3870bc6be2c41415fd71997d4e294037b809c58d19d4d899c5eb792566af9
    incompatible: false
    pinned: false
    ostree:
      checksum: ce6c0ac10d2f7600000889f952d43de672e78bbee658f788590cef121c3c9fe3
      deploySerial: 0
  rollback:
    image:
      image:
        image: quay.io/centos-bootc/fedora-bootc-cloud:eln
        transport: registry
      version: 39.20240110.0
      timestamp: null
      imageDigest: sha256:ec3a19fafe3a78c681f9a4ecd2b57bdd6382b1e467480e1d7e4e079061d57016
    cachedUpdate:
      image:
        image: quay.io/centos-bootc/fedora-bootc-cloud:eln
        transport: registry
      version: 39.20240110.0
      timestamp: null
      imageDigest: sha256:23e6e34a370894901c6361516d670198ed8fda649f62265e4f00a7b80af1962a
    incompatible: false
    pinned: false
    ostree:
      checksum: 86edeca31d16ca78ef9eae201164413c740e803ef2ff287bb1baff975394115f
      deploySerial: 0
  type: bootcHost


Moved JS code out of the views to a common JS function.

@epwinchell @dclarizio please review.

@dclarizio Tested. Works fine.


Update Notifier Broken?

Hey I noticed that the app doesn't let you know when theres an update pushed out. Not sure if this is issue only on OS X or both, Windows and OS X. Thanks for awesome updates :D

Unless you've clicked the ignore button on the "new version found" popup, the GUI is looking for a new version once every 7 days.


Update README.md

Summary
Add badges to README, update invalid URLs.
Details and comments
N/A

Sorry I missed to use my own fork. Hope it's ok to not redo it this time.

Pull Request Test Coverage Report for Build<PHONE_NUMBER>

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage increased (+0.01%) to 41.045%

Totals

Change from base Build<PHONE_NUMBER>:
0.01%

Covered Lines:
1925

Relevant Lines:
4690

💛  - Coveralls


feat: adds support for multiple instance creation

Summary
Adds support for multiple instance creation. Each instance has its own API_KEY, plugins, configurations.
// this is the default instance
amplitude.init('asdf');
amplitude.track('event-1');

// this is the second instance
const amp2 = amplitude.createInstance();
amp2.init('qwerty', undefined, {
  serverUrl: 'https://domain.com',
});
amp2.track('event-2');

Checklist

[x] Does your PR title have the correct title format?
Does your PR have a breaking change?:  No

Did we unite the way how other next-gen SDKs create multiple instances?

Did we unite the way how other next-gen SDKs create multiple instances?

That's actually a good point. Let me see how I can align better.


kie-issues-939: Add FAULTY_NODES with builds56 to nightly cloud job

Resolves kie-issues#939

Please explain me what is the problem you're fixing here.
Such env property IMO does not currently exist in the job.
It's definitely not fixing problem with a faulty node as summary would indicate


Updated w/ Docker Cloud Org Support

Proposed changes
Updated image-scan.md to reflect that security scanning of private repositories w/in an organization is available in Docker Cloud.
Unreleased project version (optional)

Related issues (optinoal)

Deploy preview ready!
Built with commit 82d9e2d532e04a264be52b55361b35597d03a5a7
https://deploy-preview-856--docker-docs.netlify.com

LGTM. Thanks @pkennedyr


small tweak for plugins shown in webview

Instead of sliding the webview from the right, make it slide from the bottom, it takes more time but that's good because it takes time to load the plugin.
Also, instead of the left arrow top left to close (which is very annoying as it forces the plugin to add a lot of top padding), replace that with a cross top right. Easier to keep that space empty.
https://github.com/user-attachments/assets/319e8e4b-ded6-4f63-a5ec-112ba7b8a27a

Can we rollback this?
It's a regression. The point is not to recreate a mini browser experience. We just need a way to close the view.

On there being padding: The padding is in the website, can be removed now
On navigation controls: The point here was to also to provide navigation controls because websites are not designed like apps and don't always have those. Especially in this market place plugin, it was difficult for me to go back.


filters/offhours - fix gmt/utc handling in offhours

Timezones gmt and utc were throwing errors due to the fact that the titlecase version of the timezone != timezone. added some tests that should cover that in the future as well.
Additionally, the practice of titlecasing at the end is a bit presumptuous imo, we should be expecting the user to input a proper timezone as there are several that are supported where the titlecase is not the same.

list of timezone.title() != timezone
W-SU
UCT
ROK
ROC
PRC
NZ-CHAT
NZ
Mexico/BajaSur
Mexico/BajaNorte
GB-Eire
Chile/EasterIsland
Brazil/DeNoronha
US/Samoa
US/Pacific
US/Michigan
US/Indiana-Starke
US/Hawaii
US/Eastern
US/East-Indiana
US/Central
US/Arizona
US/Aleutian
US/Alaska
Etc/GMT+12
Etc/GMT+11
Etc/GMT+10
Etc/GMT+9
Etc/GMT+8
Etc/GMT+7
Etc/GMT+6
Etc/GMT+5
Etc/GMT+4
Etc/GMT+3
Etc/GMT+2
Etc/GMT+1
Etc/GMT-1
Etc/GMT-2
Etc/GMT-3
Etc/GMT-4
Etc/GMT-5
Etc/GMT-6
Etc/GMT-7
Etc/GMT-8
Etc/GMT-9
Etc/GMT-10
Etc/GMT-11
Etc/GMT-12
Etc/GMT-13
Etc/GMT-14
PST8PDT
MST7MDT
CST6CDT
EST5EDT
HST
MST
EST
America/Port-au-Prince
EET
MET
CET
WET
Australia/NSW
Australia/LHI
Antarctica/DumontDUrville
UTC
GMT0
GMT-0
GMT+0
GB
GMT
US/Mountain
US/Pacific-New
Etc/GMT0
Etc/GMT+0
Etc/GMT-0
Etc/UCT
Etc/UTC
Etc/GMT
America/Knox_IN
America/Port_of_Spain
America/Argentina/ComodRivadavia
Europe/Isle_of_Man
Australia/ACT
Antarctica/McMurdo
Africa/Dar_es_Salaam

thanks, i think part of the issue is that we unconditionally lower case the input for value parsing, re why are we using title() at all.

ah, ok. fwiw the majority of tz's are titlecased, the list in the issue are all of the ones that aren't
from dateutil.zoneinfo import get_zonefile_instance
zonenames = list(get_zonefile_instance().zones)
badzones = [z for z in zonenames if z.title() != z]
print badzones

keeping a mapping of lower case to canonical case from the zone file instance would resolve this more cleanly. i'll note that proper tz handling means packaging up something like pytz, due to frequency of tz changes and local legislation, where as we're simply addressing common case here.

It looks like there's a few places where it's referencing the TZ_ALIASES dictionary directly, a few in the azure parts and also in asg and tags, I'm not super happy with the use of lambda, but py3 changed list/dict/set comprehension scope (https://stackoverflow.com/a/13913933), if we can change the direct references to TZ_ALIASES to a function with the @property decorator that should be cleaner


validationMessage not used when pattern is not matched

Detailed Description

Using pattern on a schema property works fine but when the input does not match the pattern a message is displayed:

Must match pattern: <the_pattern>

It would be more useful to display validationMessage if it is defined (if not then fallback on Must match pattern:).
Example Schema:
{
  "schema": {
    "type": "object",
    "title": "Comment",
    "properties": {
      "name": {
        "title": "Name",
        "type": "string"
      },
      "email": {
        "title": "Email",
        "type": "string",
        "pattern": "^\\S+@\\S+$",
        "description": "Email will be used for evil.",
        "validationMessage": "Invalid email address."
      }
    },
    "required": [
      "name",
      "email"
    ]
  }
}

Example behavior:

Enter a to the email field on the form generated
The Must match pattern: message is displayed

Instead of Must match pattern: it would make sense to see Invalid email address. as defined by validationMessage for that field.
Context

I am trying to put together some forms meant to be filled out by people who will have no idea what regex is. Displaying the pattern that is required to those end users is not useful and may result in support requests.
Possible Implementation

As mentioned above I feel that if pattern is not matched and validationMessage is defined it should be displayed. If validationMessage is not defined then fall back on Must match pattern:

P.S. I just took notice that the Must match pattern: and validationMessage are not displayed at all when using no-framework. I'm not sure if this would have any effect on the ability of this project to implement this change or if it needs to happen upstream with the frameworks themselves.


The question of ShapeNetCore.v2 dataset

Hi, nice job!
When I  downloaded the ShapeNetCore.v2 dataset, I found that the baidu pan was lost.
Could you please offer the new link of baidu pan?
Thank you very much!

I checked the Baidu pan link. The link is successfully opened in my browser.

Hi,
Thanks for your response in time! I can download dataset normally when I closed the VPN.
Thank you!


Typescript Support

Is it possible to use with TypeScript?

Yep. Just no types.
On Mar 5, 2020, 1:51 AM -0700, Asif Nawaz<EMAIL_ADDRESS>wrote:

Is it possible to use with TypeScript?
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub, or unsubscribe.

I would accept a PR to add this to the library :)

Or even better, just a PR that migrates the source to TS using the same setup as React Query itself.

I just checked, and the library has had typescript support for a while. I'm just on an old version and need to upgrade, so I'm  glad I checked!


assets: move root to bootstrap3 folder

Closing in favour of https://github.com/inveniosoftware/invenio-i18n/pull/87/files


Getting websocket exception

Hi,
I am getting below exception.
browserMqtt.js:11696 WebSocket connection to 'ws://my-server-ip-address:1001/' failed: Invalid frame header.
Please help me to out of it.

This should be your websocket-server problem


Review form

Adds review form hard coded to movies show page, will be refactored to partial for use with actors.
Also minor bug fixes found along the way; password field for login form and unnecessary column in reviews table.

Looks good to me


Update README.md

Hi, I didn't find a better way to contact you, so I'm using this PR to do so. I was wondering if you're planning to include your repository as part of plantuml-stdlib, similar to aws-icons-for-plantuml that this project originates from

@davidholsgrove ping. Are you still maintaining the project?
If you don't have the time or bandwidth to do so, let us know to help in looking for [co-]maintainers to join or adopt this.

@davidholsgrove ping. I would also prefer if this could be moved over

Hi, apologies - this was a quick POC of forking https://github.com/awslabs/aws-icons-for-plantuml but I never ended up using it.
I'm happy to leave the public fork if its any use, but its not maintained and likely needs further work to update.

Thanks for the heads up, @davidholsgrove.
You might be interested in posting this repo to adoptoposs.org and maybe adding some banner on the Readme offering it for adoption and later archiving the project, so people will know.
Maybe someone is up to keep working from where you left, which would be the best outcome for your effort.


Split QueryDispatcher.submit into different methods to improve readability

This PR doesn't actually change the semantics but split QueryDispatcher.submit into different methods.
The only actual change is to apply a sublist to stagePlans to have a view where the root stage is not included. By doing that the code is simplified in a way we only need to use this list instead of taking care of whether we are using  i+1, numStages, etc. Some parts could be simplified even more for example using parallel streams, but I prefer to be conservative in the changes.

Codecov Report
Attention: Patch coverage is 0% with 63 lines in your changes missing coverage. Please review.

Project coverage is 0.00%. Comparing base (59551e4) to head (ea463dd).
Report is 815 commits behind head on master.

Files
Patch %
Lines

.../pinot/query/service/dispatch/QueryDispatcher.java
0.00%
63 Missing :warning:

:exclamation:  There is a different number of reports uploaded between BASE (59551e4) and HEAD (ea463dd). Click for more details.
HEAD has 53 uploads less than BASE

Flag
BASE (59551e4)
HEAD (ea463dd)

integration
7
1

integration2
3
1

temurin
12
1

java-21
7
1

skip-bytebuffers-true
3
1

skip-bytebuffers-false
7
0

unittests
5
0

unittests1
2
0

java-11
5
0

unittests2
3
0

integration1
2
0

custom-integration1
2
0

Additional details and impacted files
@@              Coverage Diff              @@
##             master   #13724       +/-   ##
=============================================
- Coverage     61.75%    0.00%   -61.76%
=============================================
  Files          2436     2479       +43
  Lines        133233   137002     +3769
  Branches      20636    21324      +688
=============================================
- Hits          82274        0    -82274
- Misses        44911   137002    +92091
+ Partials       6048        0     -6048

Flag
Coverage Δ

custom-integration1
?

integration
0.00% <0.00%> (-0.01%)
:arrow_down:

integration1
?

integration2
0.00% <0.00%> (ø)

java-11
?

java-21
0.00% <0.00%> (-61.63%)
:arrow_down:

skip-bytebuffers-false
?

skip-bytebuffers-true
0.00% <0.00%> (-27.73%)
:arrow_down:

temurin
0.00% <0.00%> (-61.76%)
:arrow_down:

unittests
?

unittests1
?

unittests2
?

Flags with carried forward coverage won't be shown. Click here to find out more.

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.


Allow configuration for excluded paths

It would be nice to be able to exclude certain paths. E.g. I would like to exclude the "elm-stuff" directory as well as our "vendor" directory as this includes code that is not 100% under our control.
Ideally this could be done via the elm-analyse.json. E.g.:
{
    "checks": {
        "LineLengthExceeded" : false
    },
    "excludedPaths": [ "elm-stuff", "vendor" ]
}

Hi Felix,
Thanks for your report. This would be a great addition.
The elm-stuff should be ignored by default. It only analyses the dependencies to determine the interfaces and does this only once. Do you encounter problems with this?

I might have been confused by the load logs.

Check, I understand why. I've created a ticket that should fix that as well #35.

Thanks for your work on this. Really happy to have found this and elm-analyse is now part of our CI setup and runs on every PR.


Corrections to playerColor values

Some of the current color values are a bit off (15, 17, 18) and a couple are very wrong (11/brown is given the same value as 9/lightblue, 20/coal is given a kind of green/aqua). See the differences in this codepen.
Corrected values are based on this data, from HiveWorkshop

Great find and thank you for opening a PR. Can you adjust the test cases to pass again? I can merge it afterwards.

OK, tests look good now.


vaclient cannot display inference results from files on remote server

Hi
I pull the image from dockerhub and running on a server (<IP_ADDRESS>), and I launch the vaclient on local machine (<IP_ADDRESS>). I can get the result of avg_fps, but is it possible to sync the /tmp/results.jsonl automatically?

In v0.7.1 vaclient can connect to remote servers and view results over mqtt by setting appropriate destination values. This is the recommended option for viewing remote metadata. Setting issue to wontfix and will close.

Thanks


Update styles.css

Delete duplicate content

I signed it!

Closed via #2877

Hi @freezestudio - thanks for noticing the duplicates! But your PR actually eliminates .items li.selected which is not a duplicate. I created a follow-up PR, #2877 with this fix.


Clarification needed: final exam 07

If there is something that seems off in the instructions , go through this checklist:

[ ] Is there an error in the text?

[ ] Did you create a pull request with a correction for the error?

[ ] Did you read any documentation related to the thing that needs clarifying?

[ ] Did you Google the thing that needs clarifying?

[ ] Did you search or read through the other issues on this repo to make sure there isn't already a related issue?

None of the above, create an issue
Make sure to add all the information needed to understand the error so that someone can help. If the info is missing we'll add the 'Needs more information' label and close the issue until there is enough information.

[ ] Provide URL of the file with the confusing thing.
[ ] Identify the line number(s) in the file where the cunfusing thing is.
[x] Describe what you find confusing?
[ ] Take a guess and describe what you think the confusing thing might mean?
[ ] Add links to the documentation that you read to try to solve this (StackOverflow, package docs, anything)

Delete text above this line before you submit your issue. Place your issue information in the appropriate sections below.
URL of file with confusing thing
Line number of confusing thing
What is confusing?
I am confusing about the output format of the weather object. At first I extract the grid x and y, and ID from the website and get the JSON object from the API.
I use console.log output the the JSON.stringfy(data).
I donot know why the autograder always showing 'not matching'?
Which method should we use to output the correct format or I get the wrong data?
What do you think the confusing thing means?
What did you read to try to understand better what is happening and solve the issue?

Please use the appropriate issue template. This is the third time I've asked you to do this and you are refusing to even follow the directions in the template that you are using. Use the exam question template.

Sorry, I was too anxious because I need to prepare for other final as well as for this one. I will resubmit the question.
I appreciate any guidance from you.


Set Minios and implement Object Storage

Edited the conftest.py and user_model.py as well as the docker-compose.yml


Feature: 修改部分权限字段的文案

Feature: 修改部分文案

Codecov Report

Merging #73 (ef0bec3) into v2.6.x_develop (acbb136) will not change coverage.
The diff coverage is 100.00%.

@@               Coverage Diff               @@
##           v2.6.x_develop      #73   +/-   ##
===============================================
  Coverage           51.31%   51.31%
===============================================
  Files                 692      692
  Lines               36553    36553
===============================================
  Hits                18756    18756
  Misses              17797    17797

Impacted Files
Coverage Δ

itsm/component/constants/iam.py
100.00% <100.00%> (ø)

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 acbb136...ef0bec3. Read the comment docs.


Update highlight.js | Remove warning

This PR updates highlight.js to a higher version so that the vulnerabilty warning disappears

Internal Tracking ID: EXPOSUREAPP-14718

Summarized all PRs into one to simplify testing #3380


[Backport 1.4.latest] Drop support for Python 3.8 #2

Backport #931 addition
The python version was specified in .pre-commit-config.yml, which was missed during the backport as this is not the case in newer versions.

The above tests passed. The failures are due to pytest not finding anything and returning an exit code of 5 instead of 0, which was not handled in the workflows for older versions.


Develop

making the pull request on Develop - I leave it to the repo owner to merge to master as he sees fit.
Resolves open issue #85

Thank you for the PR - I think this one has helped a lot of people!
Cheers
Ash


DirectedMST reconstruction crashes

With https://github.com/bqi343/USACO/blob/master/Implementations/content/graphs (12)/Misc/DirectedMST.h,
int main() {
	int n = 4, r = 1;
	vector<tuple<int, int, int>> data = {
		{0, 3, 27},
		{1, 2, 32},
		{2, 3, 25},
		{3, 0, 31},
		{3, 2, 23},
	};
	vector<Edge> edges;
	trav(e, data) {
		int a = get<0>(e);
		int b = get<1>(e);
		int w = get<2>(e);
		edges.push_back({a, b, w});
	}

	dmst(n, r, edges);
}

ends up with inEdge.s == -1 in the restore loop, causing it to misbehave and in practice later hit this assert: assert(i == r ? in[i].s == -1 : in[i].s == i);.
Found while looking into importing it into KACTL, through the directed MST stress test: https://github.com/kth-competitive-programming/kactl/blob/master/stress-tests/graph/DirectedMST.cpp. I don't understand the restoration algorithm well enough to know how to patch it.

Yeah I'm not sure if I totally understand it either but I'll look into it.

Should be fixed now (was missing a dsu.get())
https://github.com/bqi343/USACO/blob/master/Implementations/content/graphs (12)/Misc/DirectedMST.cpp

Sweet!
Also, I should ask, would you be fine with CC0-licensing the reconstruction and having it be part of upstream KACTL? (I code-golfed it a bit: https://github.com/kth-competitive-programming/kactl/compare/master...simonlindholm:dmst-reconstruction )

yeah sure


[Question] Copying texture offsets from one surface to another.

Is it possible to "copy" texture offsests/rotation and "paste" them into another surface? Or select all surfaces with differently oriented textures and "group" their offsets?

Oh sorry just found this feature, I didn't know it was this "G" hold key, and how to use it at a first time but found it in index page. Can be closed :)

Glad you found it :) 👍