[AmigaTestKit v1.7] Middle mouse-button (MMB) not detected with 1d A1200 mainboard

The middle mouse-button is not detected with the "Mouse, Joystick, Gamepad" (F4) test on one of my A1200s. It works fine on my 1d4 board (also w/ previous versions of SysTest going back to October 2017), but neither of them detects the MMB on the 1d (rarer, older mainboard), despite the MMB working properly in WHDLoad, and with the same mouse and adapter (TOM+) being used on both A1200s.

Have you tried on the other port on the non-working board (ie. port 2, usually joystick)?
Suspicion is that this is board related, even if it does work in WHDLoad. The circuitry and method for reading middle and right mouse buttons is basically identical. If one works and the other doesn't, Test Kit may be showing that there's something marginal about the hardware regarding pin 5 of joy/mouse port 1.

I believe I tested this previously, but I checked it again now to make sure with the same mouse in port #2/joystick: It shows the same behaviour; i.e, LMB & RMB are detected properly, but not MMB.

And yes, I agree with you wrt. the circuitry regarding RMB & MMB - I even looked at the schematics. This had some other users baffled as well.
Could it be that this 1d revision actually does not conform to the later spec? It seems utterly strange that the MMB would be intercepted only by Workbench & WHDLoad but not SysTest/AmigaTestKit when RMB is detected properly in your test suite on both ports.

What kickstart, workbench, whdload versions? It may be that I am not setting POTGO register to a "usual" value; perhaps to a value not tested with your Tom mouse adapter. I note that whdload changed its POTGO setting (probably away from how I currently set it) back in 1999 due to RMB issues. I can perhaps have a dig around under emulation and see if there's a better value to configure pins 5 and 9 which better represent typical Amiga software.

Had a bit of a look on EAB (http://eab.abime.net/showthread.php?t=97692) and also a quick look at Kickstart v3.0. Former suggests writing 0F00 to POTGO (which sets port 1 pins 5 and 9 into output mode, disconnects potentiometer-sensing circuitry, and pulls the pins high); Latter actually does seem to do that.
However that is basically same as Test Kit, which sets POTGO to FF00 (done because I want to be able to test 2- and 3-button gamepads too, on port 2). So I'm not clear what's wrong! :)

The only dissenting info I found was one release note for WHDLoad 9.0 (back in 1999):
"fix:	potgo set to input mode now, fixes right mouse button problem with ArcherMcLeanPool and JimmyWhiteSnooker (Mr.Larmer)"
I will ask on EAB if anyone has an opinion. I wonder if TOM+ pin 5 is just electrically marginal on that board. But if it works reliably on WB/WHDLoad and not at all on TK that is pretty weird all the same.

What kickstart, workbench, whdload versions? It may be that I am not setting POTGO register to a "usual" value; perhaps to a value not tested with your Tom mouse adapter. I note that whdload changed its POTGO setting (probably away from how I currently set it) back in 1999 due to RMB issues. I can perhaps have a dig around under emulation and see if there's a better value to configure pins 5 and 9 which better represent typical Amiga software.

The system is on 3.1 ROMs & WB – so Kickstart version 40.68 and Workbench 40.42 + Exec 40.10.

I can do some more testing to see how accurate it works with WHDLoad. What I have noticed though is that the MMB works right after the slave is launched (but not LMB/RMB - unless configured as $QuitKey). Once the slave has been running for a while (10 seconds or more), it does not exit. I suspect this is due to how the buttonpress is intercepted (i.e, some interrupt-disable thing). I did not test this on several slaves, so it might be dependent on one demo though. (Not sure how useful this information is, but putting it out there all the same.) ;)

I got no response on EAB so far. Does MMB work consistently in Workbench?

I can test this weekend. Do you know of any application other than WHDLoad which utilizes the middle mouse-button?

Cheers. I think you need a tool like Freewheel to assign third button behaviour in Workbench.

First of all, sorry for the lateness. Summer finally came here and Everyone(tm) is outdoors. ;-)
Well, this is getting stranger by the minute: The demo I was testing the MMB with was Network's "Synthesis".  It consistently exists the demo when I assign QuitKey=258 (hex $102) at the beginning of the demo (within the first few secs).
If I let it run past the initial opening screen (only a couple of seconds later) it still exits the demo, but requires at least three MMB presses to do so.
When I re-assign the QuitKey to something else (usually F10), MMB (or RMB) does not do anything at all. Similarly for RMB when quitkey is set to 258. (since these two buttons should be handled the same way, i.e if RMB works MMB sohould also, etc.)
I ran the demo approx. 30 times, and it intercepts every MMB press at the beginning (and exists as expected) - consistently every time. I then tested some other demos, like Virtual Dream & Fairlight's "Love" demo, where MMB also works but needs a couple of presses.
I seem to recall something similar with my 1d4 board (where ATK/SysTest detected the MMB). There were for sure some WHDLoad demos + games which just would not exit. (I assigned this as I did not have a keyboard attached to the A1200)
Out of curiousity I tested MMB with Jimmy White's Snooker where it did absolutely nothing when assigned as the quitkey. Same with Archer Maclean's Pool - but those two are the same game I guess from the looks of it...
I will do some more testing with Freewheel later on. It might be some weird incompatibility with the TOM+ adapter if Freewheel behaves the same way.

Tested Freewheel on the 1d board; it also does not detect any MMB mouse-presses (after rebooting the A1200). Did a few more tests with WHDLoad, and it behaved similarly (i.e, MMB presses are sometimes passed through to the app when $QuitKey=258 (and always with Network - Synthesis, during the first few secs), and never when $QuitKey is set to something other than MMB.
Then tested the TOM+ adapter on my other A1200 1d4 board, and it behaves as it should – MMB presses are detected (with the same mouse) on ATK and WHDLoad.
I was beginning to think this was some strange incompatibility between the TOM+ and the a1200. However, it does not explain why RMB works (consistently) on both models, and only the MMB on one of them, when the circuitry for reading the mouse-presses should be identical for MMB + RMB.
Sorry for not being of more help; I will keep digging. (Maybe there is an undocumented thing somewhere relating to early-revision a1200 boards (if I had Dave Haynie's contact details I would contact him directly ;)

Then I think I can close this ticket, as the issue seems to be in the board, or perhaps a marginal voltage output on the TOM+ (how low exactly does it pull the output pin when the MMB is pressed). It's clearly not ATK, which is actually correctly flagging an issue visible with other software on that board, too.

Yes, it is clearly not ATKs fault. Although it would be interesting to know /what/ exactly it might be. Perhaps the developer of the TOM+ could shed some light on it.

And thanks for your help looking into it regardless – feel free to let me know if any details from EAB should emerge at a later date. Guess there's not that many 1d rev. boards around, if the issue is not with the CIAs (although it would be strange that it affected both ports), or maybe Paula.


Invalid auto indentation of HTML after pasting when no closing tags present

Consider several lines of plain text which you want to encapsulate with <p> tags. If you start with the first line, add a , then copy paste it and go forward line by line, the following happens:

Presumably this is because Atom thinks the next <p> tag should be indented for some reason, if there are no closing </p> tags yet.
When I add in the closing </p> tags first, this doesn't happen. It also doesn't happen when I paste non-HTML onto the lines.

This is with Atom version 0.206.0.

Same happens with Jade, not sure if its an internal issue or not.

Seems to be fixed now


Fix blender version

Blender recently updated its version to 4, and the bpy v.4 API got some changes.
The package is not really tested with this new release: in this PR I fix the supported Blender version to the LTS one, the 3.6.
I will update the library to Blender 4.0 in a future PR.

Thanks Silvio! :)


Loading spinner disappears too early

When search for keywords with lots of hits or when click on gene with a large network the loading network spinner finishes several seconds before the actual results are displayed.

The spinner shows for the duration of the execution of the code that generates the map. It stops once the data is loaded and the Cytoscape library's constructor returns control.
The Cytoscape library constructor defers final styling and rendering of the network DOM elements until the new DOM elements are ready. This deferral is asynchronous. Thus the constructor returns when the DOM elements have been requested but before they have been styled and made visible. Since the spinner stops when the constructor returns, you get a time delay until you see the actual network appear.
Fixing this will require the initializeNetworkView function to wait for the DOM to construct then continue and style and make visible the elements before returning, rather than returning immediately and waiting for the styling and visible calls to complete later in the background.

exactly @dicknetherlands , ideally the spinner stays while the network JSON is returned and the rendering/styling is finished. KnetMaps had a spinner in it too (hence occasionally you can see 2 spinners) to run during the styling but the deferral didn't work as needed. Would be good to fix during the sprint, thanks.

the 1st spinner bug is the Network View one where the 1st function calls the API and gets network JSON back while a spinner is shown. It then goes into the KnetMaps functions/code that renders it while a 2nd spinner is shown, leading to instances of no spinners shown or brief overlaps of 2 spinners...
@dicknetherlands the 2nd bug that occasionally occurs is in the spinner that is shown when user hits "Search". This usually keeps spinning until search results are shown in Gene View table. However, for very large data returned from the back-end, the spinner sometimes freezes (also shows a browser memory spike) so maybe we need to re-evaluate how much data is being returned for some OR queries...

@AjitPS, can we close this?

This seems to be fixed and hence I'm closing it. Re-open if not.


chore: bring back 5.0.21 and add examples to exception for security-d…

…etect-secrets

:tada: This PR is included in version 5.0.22 :tada:
The release is available on:

GitHub release
v5.0.22

Your semantic-release bot :package::rocket:


rubocop: autofix

latest rubocop was complaining about this. The safe autofix corrected it.

Can one of the admins verify this patch?


Extend E2E public input hash test with L1 -> L2 messages

Extend the work from #431 to include L1 -> L2 messages in the block and check that ts/sol/cpp all compute the correct state hashes etc.

The public inputs hash now includes the l1ToL2Messages within it


Deploy

Deploy
Description
As a developer, I want our front-end to be deployed somewhere that is easily accessible.
Acceptance Criteria

Investigate potential options
Discuss with team
Site deployed and accessible

A potential option is Vercel.
This is what I am using to host my personal website at the moment.

We are using Vercel and will continue to use it.  However, running it locally is valid as well.


resources/icons: Use gifsicle to save a few bytes.

ran with gifsicle -O3 on all files. Only these had smaller filesizes.

merged.


AirPlay support HLS with FairPlay

Resolve https://github.com/google/shaka-player/issues/2177

I updated the PR to close correctly the open sessions.
The PR is ready for review

I added a new change to only apply the change to videos with webkitCurrentPlaybackTargetIsWireless property

@theodab can you review this PR?

@joeyparrish Is it possible to include it in the next 2.5.x?

I'm not certain, but we can try.  It will depend on how bad the merge conflicts are.


T1 leader selection api

Proposal for an API describing how a leader is selected.
This proposal is slightly different from the one in https://docs.google.com/document/d/1rWDLWq4tf0APn7xLSegfGLmHYCp0qI8WjCRQh2n83g8/edit
Instead of returning a range of consecutive blocks where the caller of the function is the leader, a bitmap
encoding the positions as a leader is returned. This allows to handle more arbitrary strategies.
Closes #2 .

Yes, I agree with all the above. The API has been updated accordingly in 3e4d211b702c47ed75f2f7716873c77761d08624. Note that using uint256 we can encode 256 positions, if we need more we can return an array of uint256.

Also I think that if we want to implement some more advanced Leader election scheme involving cryptographic proofs such as Irish Coffee we will need some extra input to the function isCurrentLeader taking into account that the result might change due to race conditions depending on the leader election scheme.


Sync the GitHub runner clock with the Windows time server

Adding a step to workflow jobs that interface Apple servers, as a workaround for build issues caused by runner clocks being out of sync. See https://github.com/actions/runner issue number 2996 for details.

name: Sync clock
run: sudo sntp -sS time.windows.com

Added to the following workflows / jobs:

validate_secrets.yml / validate-fastlane-secrets
add_identifiers.yml / identifiers
build_iAPS.yml / build
create_certs.yml / certificates

All four workflows have been tested successfully. No relevant errors were encountered.
The Sync clock step runs this command:
run: sudo sntp -sS time.windows.com
Observed time differences before syncing the clock:
Validate Secrets: +0.369539 +/- 0.060284
Add Identifiers: -4.125202 +/- 0.041137
Create Certificates: +0.236225 +/- 0.054157
Build iAPS: +0.128533 +/- 0.065851

@Jon-b-m , this PR is ready to be merged.

@Jon-b-m , this PR is ready to be merged. You may also want to get this into #400, so that users of main can get rid of all the build errors.

Please watch out not to immediately port auto builds with this fix if we do not want to push auto build to main yet.


add dod list of subs

*.mil add these to chaos dod subs hackerone

Hey @balook,
As listed in the readme, we need domain names as input, *.TLD is not supported.

Closing this out, as we do not support *.TLD patten for now.


Feature/form preserve data in browser

Added functionality to preserve data if the user has not yet submitted the form.
Added conditional to check localStorage size upon page load.
Added localStorage.clear() method to erase everything once the form has been submitted.

Status: Approved 🟢


Add key= support for max() function

In python, you can add a function to a call to max() using the key= keyword arg, which lets you do more complex logic for finding the value you want, but in Transcrypt it looks like max() is mapped directly to Math.max() and so doesn't have this ability.

If this is added, I'd like to also request that it be added to functions like sorted() too, as I also use it in that situation a lot, as well as min()/max()

Added in dev_3.9.3 branch to be released in v3.9.3

Merged to master on PR #876


Social sharing - market / market creation

Allow users to share market on social media
Social media message should contain (twitter)

autogenerated image with market information in it - question, title and outcomes
message from a user which is optional and depends on social media platform

Add the share button to market page, which opens sharing on certain social media platform. For start, the page should contain only the twitter icon

@mk26071980 a design for an image to be generated for social sharing.
...and regarding the share buttons think it would be ideal to have a general social sharing component that we could use on different pages. @Robiquet @yornaath

Completed


Aria2 Command Parser?

It would be great if we can parse aria2 command with options like (header, user-agent, referer, out)
into AriaNg settings.
I don't know if you know about "cliget" it's a nice browser addon that generates a wget/curl/aria command ready with all headers & cookies you just copy/paste to shell and you're ready to go
I think it would epic if you include the power of cliget into AriaNg to easily get non-direct links that requires cookies or specific headers or redirections

AriaNg would not add this feature. If you need downloading file from an aria2 command, you should use aria2 directly.


🐞 - Show arrow option not reflected when set through setDefaults

Which ngx-ui-tour-* package is the source of the bug?
md-menu
Please provide a link to a minimal reproduction of the bug
No response
Description
If I want to disable the arrow on all steps I would like to set this as a default option, however it is not working properly.
With the following code below, the arrow is present on all steps even though it shouldn't be.
this.tourService.setDefaults({
	enableBackdrop: true,
	showArrow: false,
	popoverClass: 'question-grid-step-popover',
});

If I add the showArrow flag to a step option explicitly, then it works.
this.tourService.initialize([
	{
		anchorId: OnboardingStep.Timer,
		content: this.translocoService.translate('onboarding.timerStep'),
		showArrow: false,
	},
]);

Angular version
17.3.9
Ngx UI Tour version
12.0.1
Which browsers have you used?

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

Which operating systems have you used?

[X] macOS
[ ] Windows
[ ] Linux
[ ] iOS
[ ] Android

You can set the defaults in initialize() method until this is fixed: initialize(steps, defaults).

Fixed in v12.1.0.


rcl_interfaces: 1.6.0-1 in 'rolling/distribution.yaml' [bloom]

Increasing version of package(s) in repository rcl_interfaces to 1.6.0-1:

upstream repository: https://github.com/ros2/rcl_interfaces.git
release repository: https://github.com/ros2-gbp/rcl_interfaces-release.git
distro file: rolling/distribution.yaml
bloom version: 0.11.2
previous version for package: 1.5.0-1

action_msgs

No changes

builtin_interfaces

No changes

composition_interfaces

No changes

lifecycle_msgs

No changes

rcl_interfaces
* Add interfaces for logging service. (#154 <https://github.com/ros2/rcl_interfaces/issues/154>)
* Contributors: Lei Liu

rosgraph_msgs

No changes

service_msgs

No changes

statistics_msgs

No changes

test_msgs

No changes

type_description_interfaces

No changes

This pull request has been mentioned on ROS Discourse. There might be relevant details there:
https://discourse.ros.org/t/preparing-for-iron-branching-on-rolling-2023-04-18/30980/2


make sure re-quantifying dimension coordinates works

Now that we use call_on_dataset the call does not fail because of xarray, but because we pass a Unit object to parse_units. This PR fixes that and adds tests to make sure it stays that way.
I also tightened the restriction on dimension coordinates, as it was possible to change their units by re-quantifying. For #47 we might want to partially lift this restriction again.

[x] Closes #105
[x] Tests added
[x] Passes pre-commit run --all-files
[x] User visible changes (including notable bug fixes) are documented in whats-new.rst

I'll merge this now and add a PR to close #47 this week-end


fix: ensure pusher events are processed in the same order they were received

Details

This PR will ensure that all pusher events are processed in the exact same order as they were received.
Fixed Issues

$ https://github.com/Expensify/App/issues/23679
PROPOSAL: https://github.com/Expensify/App/issues/23679#issuecomment-1793464745
Tests

Login as user A and open a report
On a different browser (or incognito window), login as user B and open the same report
As user A, send a message
Disable network connection as to make both accounts offline
As user A, react to the previous message with a 👍
As user B, react to the previous message with 👍
As user A, remove the reaction
As user B, remove the reaction
Reactivate the network connection
Verify that after network sync, no reactions are left on the message for both users

[x] Verify that no errors appear in the JS console

Offline tests

QA Steps

Login as user A and open a report
On a different browser (or incognito window), login as user B and open the same report
As user A, send a message
Disable network connection as to make both accounts offline
As user A, react to the previous message with a 👍
As user B, react to the previous message with 👍
As user A, remove the reaction
As user B, remove the reaction
Reactivate the network connection
Verify that after network sync, no reactions are left on the message for both users

[x] Verify that no errors appear in the JS console

PR Author Checklist

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Screenshots/Videos

Android: Native

https://github.com/Expensify/App/assets/765936/36edf3f4-de2c-41b9-820a-42c9fddc0bef

Android: mWeb Chrome

https://github.com/Expensify/App/assets/765936/ba0885d8-d75c-43b1-a336-de2cec77c601

iOS: Native

https://github.com/Expensify/App/assets/765936/d63ae70c-e657-400d-b593-d4bcf09e3248

iOS: mWeb Safari

https://github.com/Expensify/App/assets/765936/8cc1f607-0ae5-4d39-8b4e-8aa397577b08

MacOS: Chrome / Safari

https://github.com/Expensify/App/assets/765936/40171855-f4fb-48f8-8cf2-94867f4151f2

MacOS: Desktop

https://github.com/Expensify/App/assets/765936/d75dbae8-21a1-454f-9438-fbf015b669dc

@barros001 I still have the case when issue still happens. Please try to follow step in my video exactly
Ok, will take a look tomorrow.

@aimane-chnaif I tried to reproduce the issue several times but I could not reproduce it. Is this something you can reliably reproduce? I noticed you had a 3rd instance of the app running on a what appeared to be an iOS simulator. Can you give me more details about your test setup? There clearly is something going on as shown on your video, but so far I have not been able to reproduce.

@aimane-chnaif I believe we still have a race condition here and my solution solved only part of it. See code below:
function apply({lastUpdateID, type, request, response, updates}: OnyxUpdatesFromServer): Promise<void | Response> | undefined {
    console.debug(`[OnyxUpdateManager] Applying update type: ${type} with lastUpdateID: ${lastUpdateID}`, {request, response, updates});

    if (lastUpdateID && lastUpdateIDAppliedToClient && Number(lastUpdateID) < lastUpdateIDAppliedToClient) {
        console.debug('[OnyxUpdateManager] Update received was older than current state, returning without applying the updates');
        return Promise.resolve();
    }
    if (lastUpdateID && (lastUpdateIDAppliedToClient === null || Number(lastUpdateID) > lastUpdateIDAppliedToClient)) {
        Onyx.merge(ONYXKEYS.ONYX_UPDATES_LAST_UPDATE_ID_APPLIED_TO_CLIENT, Number(lastUpdateID));
    }
    if (type === CONST.ONYX_UPDATE_TYPES.HTTPS && request && response) {
        return applyHTTPSOnyxUpdates(request, response);
    }
    if (type === CONST.ONYX_UPDATE_TYPES.PUSHER && updates) {
        return applyPusherOnyxUpdates(updates);
    }
}

This gets called every time a push event is received, but it also gets called when http events are received. While debugging I noticed that sometimes a push even start processing and before it ends, http events come in and process first. While I could not reproduce the issue you showed above, there's a good chance that this could lead to inconsistent state.
This makes me think that, although we still need to serialize the push events inside applyPusherOnyxUpdates, we also need to serialize calls to apply so multiple calls to it don't get processed out of order.
Also, Onyx.merge(ONYXKEYS.ONYX_UPDATES_LAST_UPDATE_ID_APPLIED_TO_CLIENT, Number(lastUpdateID)); also returns a promise that's not waited on, so things could happen while we're waiting for the data to be persisted.
The resulting code would look something like this:
let applyPromise = Promise.resolve();
function apply({lastUpdateID, type, request, response, updates}: OnyxUpdatesFromServer): Promise<void | Response> | undefined {
    // ensure paralell calls to this method will execute sequentially
    applyPromise = applyPromise.then(() => {
        console.debug(`[OnyxUpdateManager] Applying update type: ${type} with lastUpdateID: ${lastUpdateID}`, {request, response, updates});

        if (lastUpdateID && lastUpdateIDAppliedToClient && Number(lastUpdateID) < lastUpdateIDAppliedToClient) {
            console.debug('[OnyxUpdateManager] Update received was older than current state, returning without applying the updates');
            return Promise.resolve();
        }

        let onyxMergePromise = Promise.resolve();

        if (lastUpdateID && (lastUpdateIDAppliedToClient === null || Number(lastUpdateID) > lastUpdateIDAppliedToClient)) {
            onyxMergePromise = Onyx.merge(ONYXKEYS.ONYX_UPDATES_LAST_UPDATE_ID_APPLIED_TO_CLIENT, Number(lastUpdateID));
        }

        return onyxMergePromise.then(() => {
            if (type === CONST.ONYX_UPDATE_TYPES.HTTPS && request && response) {
                return applyHTTPSOnyxUpdates(request, response);
            }
            if (type === CONST.ONYX_UPDATE_TYPES.PUSHER && updates) {
                return applyPusherOnyxUpdates(updates);
            }
        });
    });

    return applyPromise;

Code still needs a little cleanup and more tests but before I go to the work of implementing this I wanted to get some feedback. The code above combined with what's already in the PR will ensure every event received is processed in the correct order.

Let me step back a little first, I'll try to better explain what's going on here.  Here's some sequence of logs I see sometimes (not always, but usually going from offline to online).

Do you see anything funny?

[OnyxUpdateManager] Applying update type: pusher with lastUpdateID: 34773552
...
[OnyxUpdateManager] Applying pusher update
[OnyxUpdateManager] Applying update type: https with lastUpdateID: 0
[OnyxUpdateManager] Applying https update
[OnyxUpdateManager] Done applying HTTPS update
....
....
[OnyxUpdateManager] Done applying Pusher update

An HTTP update came in while we were applying a pusher update and executed all the way through before the pusher event was fully processed. I don't think this is how this was intended as this processes things out of sequence.
apply gets called from the SaveResponseInOnyx middleware:
https://github.com/Expensify/App/blob/183cce04c94084ec76ff3ada90fe2c6ef4ad20d6/src/libs/Middleware/SaveResponseInOnyx.ts#L39-L41
And also from here:
https://github.com/Expensify/App/blob/ca13914a7b4249585f178b396f279c7657f48f40/src/libs/actions/User.js#L514-L517
These two places are unaware of each other causing them to call apply in parallel and events (http/pusher) being mixed up and potentially executed out of order.
The PR so far fixes the initial side effect but there seems to be a more fundamental issue going on here and apply needs to be serialized as a whole to avoid potential issues. I'll dig a little deeper to see if I can find a good solution for this. I tried applying the concept I described in the previous comment above but I think there's some sort of deadlock happening and FE gets stuck waiting to finish processing a push event, which never happens.
Answering your question about using async/await, I don't think I can really convert it to use async/await due to the nature of the problem: single function, multiple entrypoints where both entry points must wait any pending promise before executing the next one.
I'll dig a little further and see if I can figure a clean solution.
As far as the issue you pointed out, are you still able to reproduce it? Does it happen all the time? I could not reproduce it yet on my end.

Interesting.. If I'm on main, I can reliably reproduce it using the exact same steps are you, but if I'm on the branch where the fix is applied, I can no longer replicate, the issue seems to be resolved. I'll try a few more time with different accounts.
Silly question, you don't happen to be on main by accident, do you? 😄

@aimane-chnaif there seems to be something else going on on your video. Slow it down and watch it closely.

 See below:

Note the Offline message below composer, top right corner still says offline, and black TU is there. I'm wondering where that came from if that account was still offline.

I just pushed a new commit addressing my previous comment. applyPusherOnyxUpdates had an issue with multiple event being processed in parallel, which the new update also addresses, but IMO the real issue is apply being called in parallel.
Can you give it a try and see if you still reproduce it?

sorry about that, I did notice the same, there seem to be some sort of deadlock somewhere.. Reverted and we're back to the original solution. I really wish I could reproduce what you're seeing.

Sure, I've triggered one for you. FYI, any internal engineer can trigger those, so no need to ping me directly for them.

:test_tube::test_tube: Use the links below to test this adhoc build on Android, iOS, Desktop, and Web. Happy testing! :test_tube::test_tube:

Android :robot:
iOS :apple:

https://ad-hoc-expensify-cash.s3.amazonaws.com/android/31144/index.html
https://ad-hoc-expensify-cash.s3.amazonaws.com/ios/31144/index.html

Desktop :computer:
Web :spider_web:

https://ad-hoc-expensify-cash.s3.amazonaws.com/desktop/31144/NewExpensify.dmg
https://31144.pr-testing.expensify.com

Oh, if I am on the linked issue, then that's totally fine. Apologies! I was
not making that connection and I only looked to see if I had previously
been involved in the PR.
On Tue, Nov 14, 2023 at 1:37 PM OSBotify @.***> wrote:

🧪🧪 Use the links below to test this adhoc build on Android, iOS,
Desktop, and Web. Happy testing! 🧪🧪
Android 🤖 iOS 🍎
https://ad-hoc-expensify-cash.s3.amazonaws.com/android/31144/index.html
https://ad-hoc-expensify-cash.s3.amazonaws.com/ios/31144/index.html
[image: Android]
https://camo.githubusercontent.com/4b25301fdde71619313e3480a1422cf47bddb09f6492084401c42942cfa9664a/68747470733a2f2f6170692e71727365727665722e636f6d2f76312f6372656174652d71722d636f64652f3f73697a653d3132307831323026646174613d68747470733a2f2f61642d686f632d657870656e736966792d636173682e73332e616d617a6f6e6177732e636f6d2f616e64726f69642f33313134342f696e6465782e68746d6c [image:
iOS]
https://camo.githubusercontent.com/2fdde2c8d06c1f6b9465b55a2f92c07330aae9bab4b53ff6fa3676da79eab0a8/68747470733a2f2f6170692e71727365727665722e636f6d2f76312f6372656174652d71722d636f64652f3f73697a653d3132307831323026646174613d68747470733a2f2f61642d686f632d657870656e736966792d636173682e73332e616d617a6f6e6177732e636f6d2f696f732f33313134342f696e6465782e68746d6c
Desktop 💻 Web 🕸
https://ad-hoc-expensify-cash.s3.amazonaws.com/desktop/31144/NewExpensify.dmg
https://31144.pr-testing.expensify.com
[image: Desktop]
https://camo.githubusercontent.com/9ccc9ce120d51c8af081ea9aa4a7d563a81b22efb46d39d3dafcc24800313b12/68747470733a2f2f6170692e71727365727665722e636f6d2f76312f6372656174652d71722d636f64652f3f73697a653d3132307831323026646174613d68747470733a2f2f61642d686f632d657870656e736966792d636173682e73332e616d617a6f6e6177732e636f6d2f6465736b746f702f33313134342f4e6577457870656e736966792e646d67 [image:
Web]
https://camo.githubusercontent.com/745a25ea13f79e74b8aff0a7812dd52b8c0b2763ad86ba918ac0af915ae2c3f5/68747470733a2f2f6170692e71727365727665722e636f6d2f76312f6372656174652d71722d636f64652f3f73697a653d3132307831323026646174613d68747470733a2f2f33313134342e70722d74657374696e672e657870656e736966792e636f6d
—
Reply to this email directly, view it on GitHub
https://github.com/Expensify/App/pull/31144#issuecomment-1811229512, or
unsubscribe
https://github.com/notifications/unsubscribe-auth/AAJMAB6YSLSTDPRSYIDDCP3YEPJAHAVCNFSM6AAAAAA7E3JTXGVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQMJRGIZDSNJRGI
.
You are receiving this because you were mentioned.Message ID:
@.***>

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

🚀 Deployed to production by https://github.com/luacmartins in version: 1.4.1-13 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅


add a container deletion api that takes options

I have not actually tested this yet. However, it compiles with cargo build and I believe the interface is correct.
I added a new API remove so that delete retains backwards compatibility.

Coverage remained the same at 100.0% when pulling 90c1f274e71df2dd47cadb95ee4e8850467490ab on gregwebs:removeContainer into 9593c2a29834f373c5cd5ba419ca9556c1d2d43d on softprops:master.

Lloks good. Thanks man


enforcer: track missed notifications

Builds on https://github.com/cilium/tetragon/pull/2986
See commits for details.
enforcer: add  `tetragon_enforcer_missed_notifications_total` metric

Moving to draft to figure out the CI failures.


Thanks for the report.
This is a spec.
The img2img is implemented for v2v, so it is assumed that all frames are supplied.
I think what you are trying to do can be achieved with controlnet_tile


Load a custom JSON file

Is there a way in the config to load a local, custom JSON file of icons?

I think you always can read files manually and pass correct data to collections option.
If you need any help, you can ask directly.


Enumerating & get/set device capabilities and image transfer mechanism in Delphi

Highly appreciated for a sample/demo in Delphi (Berlin or later) of enumerating the device capabilities (resolution, pixel-type, bit-depth, paper size etc.,), and get/set these capabilities, as well as a demo of different modes of image transfer mechanism.

Hello,
Basically the way to set the pixel type in Delphi is the following:
var
   AllPixelTypes: DTWAIN_ARRAY;
   NumPixelTypes: LONG;
   PixelValue: LONG;
   i: LONG;
   Source: DTWAIN_SOURCE;
....
  { Assume that Source has been selected }
  DTWAIN_EnumPixelTypes(Source, @AllPixelTypes);
  NumPixelTypes := DTWAIN_ArrayGetCount(AllPixelTypes);
  for i  := 0 to NumPixelTypes - 1 do
  begin
     DTWAIN_ArrayGetAtLong(AllPixelTypes, i, @PixelValue);
     { The PixelValue is one of the supported pixel types for the Source }
  end
  { Clean up }
  DTWAIN_ArrayDestroy(AllPixelTypes);

So basically it is a matter of sending and processing a DTWAIN_ARRAY in Delphi for many, if not all of the functions with DTWAIN_ARRAY or LPDTWAIN_ARRAY arguments,   So please extend this code to handle any function of DTWAIN that uses these argument types.
Note that for LPDTWAIN_ARRAY, we send the address of a DTWAIN_ARRAY and not the DTWAIN_ARRAY itself.
Also, I suggest you get the latest version of DTWAIN, or at least the latest version of the Delphi bindings, since they have been updated yesterday.  The old versions had bugs (and honestly, only tested with very old versions of Delphi).

Keeping this issue open, in case you have any further issues on using DTWAIN_ARRAY functions.

Just to round this out, to get the device capabilities:
var
   AllCaps: DTWAIN_ARRAY;
   NumCaps: LONG;
   Cap: LONG;
   i: LONG;
   Source: DTWAIN_SOURCE;
....
  { Assume that Source has been selected }
  DTWAIN_EnumSupportedCaps(Source, @AllCaps);
  NumCaps := DTWAIN_ArrayGetCount(AllCaps);
  for i  := 0 to NumCaps - 1 do
  begin
     DTWAIN_ArrayGetAtLong(AllCaps, i, @Cap);
  end
  { Clean up }
  DTWAIN_ArrayDestroy(AllCaps);

Note the similarity to getting all the pixel types.

To set the pixel value:
var
   AllPixelTypes: DTWAIN_ARRAY;
   NumPixelTypes: LONG;
   PixelValue: LONG;
   i: LONG;
   Source: DTWAIN_SOURCE;
   FirstPixelValue: LONG;
...
  { Assume that Source has been selected }
  DTWAIN_EnumPixelTypes(Source, @AllPixelTypes);
  NumPixelTypes := DTWAIN_ArrayGetCount(AllPixelTypes);
  for i  := 0 to NumPixelTypes - 1 do
  begin
     DTWAIN_ArrayGetAtLong(AllPixelTypes, i, @PixelValue);
     { The PixelValue is one of the supported pixel types for the Source }
  end

  { Let's set the first available pixel type we found in the array above }
  DTWAIN_ArrayGetAtLong(AllPixelTypes, 0, @FirstPixelValue);
  DTWAIN_SetPixelType(Source, FirstPixelValue, -1, 1);
  ...
  { Clean up }
  DTWAIN_ArrayDestroy(AllPixelTypes);


'RCTBridgeModule.h' file not found

I followed your instructions and I can't manage to get this working ...

in left panel, select RCTSplashScreen.xcodeproj, then select 'TARGETS-> RCTSplashScreen' in the right. Activate the 'Build Setting' tab,  in the 'Headers search Paths' line, add '$(SRCROOT)/../../react-native/React', 'recursive'

This was fixed in the https://github.com/mehcode/rn-splash-screen fork

@dunhuang I believe I have done what you mentioned, however I still get a build failure like the issue describes. Any ideas?

@walkerrandolphsmith i think you should pay attention to the path, yours is different with mine

@dunhuang thanks, yes $(SRCROOT)/../../react-native/React and $(SRCROOT)/../react-native/React are different and that was my problem.

+1


Operator

Linting is being killed because of a bug in golangci-lint. This is fixed in version v1.21.0
Try bumping the version in config.yml from v1.19.0 to v1.21.0
curl -sfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh| sh -s -- -b $(go env GOPATH)/bin v1.21.0

Linting is being killed because of a bug in golangci-lint. This is fixed in version v1.21.0
Try bumping the version in config.yml from v1.19.0 to v1.21.0
curl -sfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh| sh -s -- -b $(go env GOPATH)/bin v1.21.0

pipeline looks good now


Is there anyone using Registration?

This module
https://github.com/dmwm/WMCore/blob/master/src/python/WMCore/Services/Registration/Registration.py
seems not to be used within WMCore. If external services are not using it either, then let's delete it.

Yes we should delete it. I added in JobCreator clean up patch.