Play more than one video simultaneously while scrolling down and top.

More than one video play simultaneously while scrolling from down to top and top to down.
It is unable to cancel last requested video from top position and  and previous top and current top both video play simultaneously.
This issue occur only when if request make to play and immediate scroll to another/next item/video in the list.
I have made changes in the library code to play video until 51% of top  view/video is visible on the screen/viewport (In MyHolder class).
@Override public boolean wantsToPlay() {
        Rect childRect = new Rect();
        itemView.getGlobalVisibleRect(childRect, new Point());
        // wants to play if user could see at lease 0.51 of video
        return childRect.height() > mVideoView.getHeight() * 0.51
                && childRect.width() > mVideoView.getWidth() * 0.51;
    }
```

    @Override
    public float visibleAreaOffset() {
        Rect videoRect = getVideoRect();
        Rect parentRect = getRecyclerViewRect();
        if (parentRect != null /*&& !parentRect.contains(videoRect) && !parentRect.intersect(videoRect)*/) {
            return 0f;
        }
        float area = videoRect.height() * videoRect.width();
        float viewArea = getVideoView().getWidth() * getVideoView().getHeight();
        return viewArea <= 0f ? 1.f : area / viewArea;
    }`

Thanks a lot. I'll work on this ASAP. At the mean time, please checkout develop-SNAPSHOT for a glance to see if it helps or improve your behaviour.

My Logcat.
03-14 19:54:37.877 2791-2791/com.mpg.myapp D/MediaPlayer: setSubtitleAnchor in MediaPlayer 03-14 19:54:38.076 2791-5873/com.mpg.myapp W/MediaPlayer: info/warning (3, 0) 03-14 19:54:38.815 2791-2791/com.mpg.myapp D/MediaPlayer: setSubtitleAnchor in MediaPlayer 03-14 19:54:38.845 2791-3370/com.mpg.myapp I/MediaHTTPConnection: proxyName: <IP_ADDRESS> 0 03-14 19:54:38.982 2791-5873/com.mpg.myapp I/MediaHTTPConnection: proxyName: <IP_ADDRESS> 0 03-14 19:54:38.999 2791-5795/com.mpg.myapp I/MediaHTTPConnection: proxyName: <IP_ADDRESS> 0 03-14 19:54:39.082 2791-5875/com.mpg.myapp I/MediaHTTPConnection: proxyName: <IP_ADDRESS> 0 03-14 19:54:39.334 2791-5718/com.mpg.myapp I/MediaHTTPConnection: proxyName: <IP_ADDRESS> 0 03-14 19:54:39.356 2791-5868/com.mpg.myapp I/MediaHTTPConnection: proxyName: <IP_ADDRESS> 0 03-14 19:54:39.579 2791-5772/com.mpg.myapp I/MediaHTTPConnection: proxyName: <IP_ADDRESS> 0 03-14 19:54:40.637 2791-2805/com.mpg.myapp I/MediaHTTPConnection: proxyName: <IP_ADDRESS> 0 03-14 19:54:41.598 2791-5549/com.mpg.myapp I/MediaHTTPConnection: proxyName: <IP_ADDRESS> 0 03-14 19:54:41.646 2791-2791/com.mpg.myapp I/MemoryCache: MemoryCache will use up to 8.0MB 03-14 19:54:41.666 2791-2803/com.mpg.myapp I/MediaHTTPConnection: proxyName: <IP_ADDRESS> 0 03-14 19:54:41.672 2791-9369/com.mpg.myapp I/MemoryCache: cache size=921600 length=1 03-14 19:54:41.713 2791-2791/com.mpg.myapp W/MediaPlayer: Couldn't open file on client side; trying server side: java.io.FileNotFoundException: No content provider: http://waay.videodownload.worldnow.com/WAAY_20160309235231253AA.mp4 03-14 19:54:41.716 2791-2791/com.mpg.myapp W/MediaPlayer: setScreenOnWhilePlaying(true) is ineffective without a SurfaceHolder 03-14 19:54:41.743 2791-2803/com.mpg.myapp I/MediaHTTPConnection: proxyName: <IP_ADDRESS> 0 03-14 19:54:41.753 2791-2791/com.mpg.myapp I/MemoryCache: MemoryCache will use up to 8.0MB 03-14 19:54:41.774 2791-2791/com.mpg.myapp W/MediaPlayer: Couldn't open file on client side; trying server side: java.io.FileNotFoundException: No content provider: http://waay.videodownload.worldnow.com/WAAY_20160308235436147AA.mp4 03-14 19:54:41.775 2791-9375/com.mpg.myapp I/MemoryCache: cache size=921600 length=1 03-14 19:54:41.777 2791-2791/com.mpg.myapp W/MediaPlayer: setScreenOnWhilePlaying(true) is ineffective without a SurfaceHolder 03-14 19:54:41.781 2791-2791/com.mpg.myapp D/AudioManager: AudioManager dispatching onAudioFocusChange(1) for android.media.AudioManager@f6fdbd3com.mpg.myapp.VideoPlayingActivity@fcd1310 03-14 19:54:41.782 2791-2791/com.mpg.myapp D/AudioManager: AudioManager dispatching onAudioFocusChange(-1) for android.media.AudioManager@f6fdbd3com.mpg.myapp.VideoPlayingActivity@fcd1310 03-14 19:54:41.782 2791-5607/com.mpg.myapp I/MediaHTTPConnection: proxyName: <IP_ADDRESS> 0 03-14 19:54:41.832 2791-2791/com.mpg.myapp I/MemoryCache: MemoryCache will use up to 8.0MB 03-14 19:54:41.851 2791-9380/com.mpg.myapp I/MemoryCache: cache size=921600 length=1 03-14 19:54:41.857 2791-2791/com.mpg.myapp W/MediaPlayer: Couldn't open file on client side; trying server side: java.io.FileNotFoundException: No content provider: http://waay.videodownload.worldnow.com/WAAY_20160307235359957AA.mp4 03-14 19:54:41.857 2791-9381/com.mpg.myapp I/MemoryCache: cache size=1843200 length=2 03-14 19:54:41.860 2791-2791/com.mpg.myapp W/MediaPlayer: setScreenOnWhilePlaying(true) is ineffective without a SurfaceHolder 03-14 19:54:41.862 2791-5772/com.mpg.myapp I/MediaHTTPConnection: proxyName: <IP_ADDRESS> 0 03-14 19:54:41.866 2791-2791/com.mpg.myapp W/MediaPlayer: Couldn't open file on client side; trying server side: java.io.FileNotFoundException: No content provider: http://waay.videodownload.worldnow.com/WAAY_20160307103344827AA.mp4 03-14 19:54:41.867 2791-2791/com.mpg.myapp W/MediaPlayer: setScreenOnWhilePlaying(true) is ineffective without a SurfaceHolder 03-14 19:54:41.871 2791-5875/com.mpg.myapp I/MediaHTTPConnection: proxyName: <IP_ADDRESS> 0 03-14 19:54:41.874 2791-2791/com.mpg.myapp D/AudioManager: AudioManager dispatching onAudioFocusChange(1) for android.media.AudioManager@f6fdbd3com.mpg.myapp.VideoPlayingActivity@fcd1310 03-14 19:54:41.874 2791-2791/com.mpg.myapp D/AudioManager: AudioManager dispatching onAudioFocusChange(-1) for android.media.AudioManager@f6fdbd3com.mpg.myapp.VideoPlayingActivity@fcd1310 03-14 19:54:41.894 2791-9386/com.mpg.myapp I/MemoryCache: cache size=921600 length=2 03-14 19:54:41.917 2791-2791/com.mpg.myapp I/MemoryCache: MemoryCache will use up to 8.0MB 03-14 19:54:41.930 2791-5802/com.mpg.myapp I/MediaHTTPConnection: proxyName: <IP_ADDRESS> 0 03-14 19:54:41.931 2791-9387/com.mpg.myapp I/MemoryCache: cache size=921600 length=1 03-14 19:54:41.948 2791-2791/com.mpg.myapp I/MemoryCache: MemoryCache will use up to 8.0MB 03-14 19:54:41.965 2791-2791/com.mpg.myapp W/MediaPlayer: Couldn't open file on client side; trying server side: java.io.FileNotFoundException: No content provider: http://waay.videodownload.worldnow.com/WAAY_20160304234635903AA.mp4 03-14 19:54:41.967 2791-9389/com.mpg.myapp I/MemoryCache: cache size=921600 length=1 03-14 19:54:41.968 2791-2791/com.mpg.myapp W/MediaPlayer: setScreenOnWhilePlaying(true) is ineffective without a SurfaceHolder 03-14 19:54:41.971 2791-5795/com.mpg.myapp I/MediaHTTPConnection: proxyName: <IP_ADDRESS> 0 03-14 19:54:41.978 2791-2791/com.mpg.myapp W/MediaPlayer: Couldn't open file on client side; trying server side: java.io.FileNotFoundException: No content provider: http://waay.videodownload.worldnow.com/WAAY_20160304111329910AA.mp4 03-14 19:54:41.980 2791-2791/com.mpg.myapp W/MediaPlayer: setScreenOnWhilePlaying(true) is ineffective without a SurfaceHolder 03-14 19:54:41.985 2791-5874/com.mpg.myapp I/MediaHTTPConnection: proxyName: <IP_ADDRESS> 0 03-14 19:54:41.985 2791-2791/com.mpg.myapp W/MediaPlayer: Couldn't open file on client side; trying server side: java.io.FileNotFoundException: No content provider: http://waay.videodownload.worldnow.com/WAAY_20160303234544933AA.mp4 03-14 19:54:41.987 2791-2791/com.mpg.myapp W/MediaPlayer: setScreenOnWhilePlaying(true) is ineffective without a SurfaceHolder 03-14 19:54:41.989 2791-3370/com.mpg.myapp I/MediaHTTPConnection: proxyName: <IP_ADDRESS> 0 03-14 19:54:41.991 2791-2791/com.mpg.myapp D/AudioManager: AudioManager dispatching onAudioFocusChange(1) for android.media.AudioManager@f6fdbd3com.mpg.myapp.VideoPlayingActivity@fcd1310 03-14 19:54:41.991 2791-2791/com.mpg.myapp D/AudioManager: AudioManager dispatching onAudioFocusChange(-1) for android.media.AudioManager@f6fdbd3com.mpg.myapp.VideoPlayingActivity@fcd1310 03-14 19:54:41.991 2791-2791/com.mpg.myapp D/AudioManager: AudioManager dispatching onAudioFocusChange(1) for android.media.AudioManager@f6fdbd3com.mpg.myapp.VideoPlayingActivity@fcd1310 03-14 19:54:42.010 2791-2791/com.mpg.myapp I/MemoryCache: MemoryCache will use up to 8.0MB 03-14 19:54:42.032 2791-9396/com.mpg.myapp I/MemoryCache: cache size=921600 length=1 03-14 19:54:42.043 2791-5802/com.mpg.myapp I/MediaHTTPConnection: proxyName: <IP_ADDRESS> 0 03-14 19:54:42.066 2791-2791/com.mpg.myapp I/MemoryCache: MemoryCache will use up to 8.0MB 03-14 19:54:42.081 2791-9398/com.mpg.myapp I/MemoryCache: cache size=921600 length=1 03-14 19:54:42.099 2791-2791/com.mpg.myapp I/MemoryCache: MemoryCache will use up to 8.0MB 03-14 19:54:42.115 2791-9401/com.mpg.myapp I/MemoryCache: cache size=921600 length=1 03-14 19:54:42.138 2791-2791/com.mpg.myapp I/MemoryCache: MemoryCache will use up to 8.0MB 03-14 19:54:42.154 2791-2791/com.mpg.myapp W/MediaPlayer: Couldn't open file on client side; trying server side: java.io.FileNotFoundException: No content provider: http://waay.videodownload.worldnow.com/WAAY_20160302234441920AA.mp4 03-14 19:54:42.157 2791-2791/com.mpg.myapp W/MediaPlayer: setScreenOnWhilePlaying(true) is ineffective without a SurfaceHolder 03-14 19:54:42.160 2791-5535/com.mpg.myapp I/MediaHTTPConnection: proxyName: <IP_ADDRESS> 0 03-14 19:54:42.162 2791-9404/com.mpg.myapp I/MemoryCache: cache size=921600 length=1 03-14 19:54:42.164 2791-2791/com.mpg.myapp W/MediaPlayer: Couldn't open file on client side; trying server side: java.io.FileNotFoundException: No content provider: http://waay.videodownload.worldnow.com/WAAY_20160302185020390AA.mp4 03-14 19:54:42.165 2791-2791/com.mpg.myapp W/MediaPlayer: setScreenOnWhilePlaying(true) is ineffective without a SurfaceHolder 03-14 19:54:42.167 2791-2803/com.mpg.myapp I/MediaHTTPConnection: proxyName: <IP_ADDRESS> 0 03-14 19:54:42.169 2791-2791/com.mpg.myapp W/MediaPlayer: Couldn't open file on client side; trying server side: java.io.FileNotFoundException: No content provider: http://waay.videodownload.worldnow.com/WAAY_20160302001031353AA.mp4 03-14 19:54:42.171 2791-2791/com.mpg.myapp W/MediaPlayer: setScreenOnWhilePlaying(true) is ineffective without a SurfaceHolder 03-14 19:54:42.173 2791-5755/com.mpg.myapp I/MediaHTTPConnection: proxyName: <IP_ADDRESS> 0 03-14 19:54:42.176 2791-2791/com.mpg.myapp D/AudioManager: AudioManager dispatching onAudioFocusChange(-1) for android.media.AudioManager@f6fdbd3com.mpg.myapp.VideoPlayingActivity@fcd1310 03-14 19:54:42.204 2791-2791/com.mpg.myapp I/MemoryCache: MemoryCache will use up to 8.0MB 03-14 19:54:42.223 2791-9411/com.mpg.myapp I/MemoryCache: cache size=921600 length=1 03-14 19:54:42.239 2791-2791/com.mpg.myapp I/MemoryCache: MemoryCache will use up to 8.0MB 03-14 19:54:42.259 2791-9412/com.mpg.myapp I/MemoryCache: cache size=921600 length=1 03-14 19:54:42.260 2791-5772/com.mpg.myapp I/MediaHTTPConnection: proxyName: <IP_ADDRESS> 0 03-14 19:54:42.269 2791-2791/com.mpg.myapp I/MemoryCache: MemoryCache will use up to 8.0MB 03-14 19:54:42.288 2791-9414/com.mpg.myapp I/MemoryCache: cache size=921600 length=1 03-14 19:54:42.304 2791-2791/com.mpg.myapp I/MemoryCache: MemoryCache will use up to 8.0MB 03-14 19:54:49.133 2791-5874/com.mpg.myapp I/MediaHTTPConnection: proxyName: <IP_ADDRESS> 0 03-14 19:54:49.458 2791-9618/com.mpg.myapp I/MemoryCache: cache size=1843200 length=2 03-14 19:54:49.469 2791-2791/com.mpg.myapp W/MediaPlayer: Couldn't open file on client side; trying server side: java.io.FileNotFoundException: No content provider: http://waay.videodownload.worldnow.com/WAAY_20160226104830250AA.mp4 03-14 19:54:49.472 2791-2791/com.mpg.myapp W/MediaPlayer: setScreenOnWhilePlaying(true) is ineffective without a SurfaceHolder 03-14 19:54:49.478 2791-2791/com.mpg.myapp D/AudioManager: AudioManager dispatching onAudioFocusChange(-1) for android.media.AudioManager@f6fdbd3com.mpg.myapp.VideoPlayingActivity@fcd1310 03-14 19:54:49.482 2791-5549/com.mpg.myapp I/MediaHTTPConnection: proxyName: <IP_ADDRESS> 0 03-14 19:54:49.911 2791-5755/com.mpg.myapp I/MediaHTTPConnection: proxyName: <IP_ADDRESS> 0 03-14 19:54:50.020 2791-2791/com.mpg.myapp D/AudioManager: AudioManager dispatching onAudioFocusChange(1) for android.media.AudioManager@f6fdbd3com.mpg.myapp.VideoPlayingActivity@fcd1310 03-14 19:54:50.109 2791-2791/com.mpg.myapp I/MemoryCache: MemoryCache will use up to 8.0MB 03-14 19:54:50.127 2791-9632/com.mpg.myapp I/MemoryCache: cache size=921600 length=1 03-14 19:54:50.132 2791-2791/com.mpg.myapp W/MediaPlayer: Couldn't open file on client side; trying server side: java.io.FileNotFoundException: No content provider: http://waay.videodownload.worldnow.com/WAAY_20160226234736220AA.mp4 03-14 19:54:50.135 2791-2791/com.mpg.myapp W/MediaPlayer: setScreenOnWhilePlaying(true) is ineffective without a SurfaceHolder 03-14 19:54:50.138 2791-5718/com.mpg.myapp I/MediaHTTPConnection: proxyName: <IP_ADDRESS> 0 03-14 19:54:50.141 2791-2791/com.mpg.myapp D/AudioManager: AudioManager dispatching onAudioFocusChange(-1) for android.media.AudioManager@f6fdbd3com.mpg.myapp.VideoPlayingActivity@fcd1310 03-14 19:54:51.574 2791-2791/com.mpg.myapp D/MediaPlayer: setSubtitleAnchor in MediaPlayer 03-14 19:54:52.086 2791-2791/com.mpg.myapp D/MediaPlayer: setSubtitleAnchor in MediaPlayer 03-14 19:54:52.113 2791-2791/com.mpg.myapp D/TextureVideoView: onSeekComplete() called with: mp = [android.media.MediaPlayer@90a3a29] 03-14 19:54:52.135 2791-2941/com.mpg.myapp I/MediaHTTPConnection: proxyName: <IP_ADDRESS> 0 03-14 19:54:52.155 2791-2791/com.mpg.myapp D/MediaPlayer: setSubtitleAnchor in MediaPlayer 03-14 19:54:52.232 2791-5772/com.mpg.myapp W/MediaPlayer: info/warning (3, 0) 03-14 19:54:52.263 2791-5802/com.mpg.myapp W/MediaPlayer: info/warning (3, 0)

@mahesh2015 Hey there, are you still getting the issue? I have updated develop branch to latest code base. I believe that it could fix various issues including yours. But since I could not test all the case (which even UI testing couldn't), so it would be nice if you take a look and give some feedback. I would make a release base on current branch though.
You can get latest SNAPSHOT from develop by using this:
compile 'com.github.eneim:Toro:develop-SNAPSHOT'
Cheers!

Hello Nam,
I want to know one thing about your library. Is this library expired or
removed from Git-hub after sometime/ year?.  If Yes, then suggest me an
alternate solution/option for this library project.
Thanks
Mahesh.

On 4/6/2016 6:52 AM, Nam Nguyen Hoai wrote:

@mahesh2015 https://github.com/mahesh2015 Hey there, are you still
getting the issue? I have updated develop branch to latest code base.
I believe that it could fix various issues including yours. But since
I could not test all the case (which even UI testing couldn't), so it
would be nice if you take a look and give some feedback. I would make
a release base on current branch though.
You can get latest SNAPSHOT from develop by using this:
|compile 'com.github.eneim:Toro:develop-SNAPSHOT'|
Cheers!
—
You are receiving this because you were mentioned.
Reply to this email directly or view it on GitHub
https://github.com/eneim/Toro/issues/23#issuecomment-206064125

--
Thanks & Warm Regards
Mahesh
Sr. App Developer,
Fusioni Technologies Pvt. Ltd.
Cont: +91<PHONE_NUMBER>.

@mahesh2015 As long as github stays alive and jitpack.io keeps running the service, I think everything will be fine. I'll consider to migrate this repo to a more mature host (like maven) for back up, but I think you don't need to worry about.

Hi Nam,
I am facing one more problem in Toro Lib i,e.
If i am using frame Layout and i have two or more view as shown in screen shot.( bottom of the page are tab Buttons after tapping on these buttons, views are changed (add/removed ) from Frame layout).
My problem is that
After start of the application.
1 .First time when View is opened it play wrong video(2nd item) as in screen shot .
2. And Second problem is After next visit to this view does not play any video in list (until list does not scrolled ).
I am using this strategy
Toro.init(this);
Toro.setStrategy(Toro.Strategies.FIRST_PLAYABLE_TOP_DOWN);
please suggest some idea. ASAP

Thanks
Mahesh.

How you add/remove the View from FrameLayout? Are you using Fragments or just use a root FraneLayout and its dynamic Children?

this is the code
 flContainer.removeAllViews();
 flContainer.addView(recycler_viewVideoList);

Why don't you use Fragment transaction instead? It could help your recyclerView to save a lot of useful information. Actually it could solve the 2-nd issue. Please reply if you need help.

Hello Nam,
Sorry for delay. Actually the base code of my app is implemented with frame layout and
I have to change base code and I have limited time to deliver this app.
therefore i have to use frame layout.

Did you re-add your RecyclerView to Toro after re-adding it to your FrameLayout?

Can you debug to see that after re-adding RecyclerView to FrameLayout, is your RecyclerView's onAttachedToWindow get called? You should go into RecyclerView.class and mark a checkpoint there.

No,      ```
if (mRecyclerView.getAdapter() == null) {
//add ItemDecoration
mRecyclerView.addItemDecoration(new VerticalSpaceItemDecoration(VERTICAL_ITEM_SPACE));
mRecyclerView.setAdapter(new MultiVideosListAdapter(HomeActivity.videoUrlListVideo));
}
else
mRecyclerView.getAdapter().notifyDataSetChanged();

No for which question?
There is one trick you can try now:  Call mRecyclerView.stopScroll(); Please try this and see if things got better?

onAttachedToWindow and onDetachedFromWindow is called after every add and remove of recyclerview.

@mahesh2015 Consider to re-register your View to Toro after you add it to your FrameLayout. Sorry I'm not close to my PC for a while so could not reproduce the process.

Hello Nam,
I have registered and unregistered as on add  and remove event in  frame layout.
But did not Resolved the issue.
Please let me know one this how can i play a video of a particular index in the list. without affecting other feature/functionality .

@mahesh2015 , to be able to move further, let me explain how things work now:

When you setup your RecyclerView, and bring it up and running, your Videos are prepared asynchronously. (If not, I suspect a performance issue).

After that prepare process finished, the callback ToroPlayer#onVideoPrepared() got called. From there, Toro will listen to that event and trigger the first playback.

Since the prepare process is different for Videos, there is no guarantee that your Video on top is prepared first and therefore there are chances It is not the first Video to play.

When your RecyclerView is back from savedInstanceState (which is available only if you properly set it up. For example, following Activity or Fragment's life-cycle). Adding/Removing the view manually by calling FrameLayout#addView(View) may not maintain your Instance, that't why the second time you add it, it may not work properly.

Actually I hope that re-register it to Toro after you re-add it to your FrameLayout would trigger it to play. Please confirm this point: After you re-add RecyclerView to your FrameLayout, and re-register it to Toro, your Video playback IS triggered, it's just not in proper order. <-- Please confirm this. If even you re-register it, no Video plays, then I need to look further for this issue.
--
To be able to have a work around, I will need couple hours now. So please stay patient and sorry for any inconvenience.

I have re-registered and unregistered as on re-add and remove event in frame layout every time when view is added or removed.

@mahesh2015 I need to confirm 2 points:
After re-registering the RecyclerView:

Video plays or not?

Video plays in wrong order or not?

Thanks!

Nam Sir,
It is not playing any video either right to wrong.

Thanks. So for your first issue, the following snippet could improve the behaviour:
public static ToroStrategy WORK_AROUND_STRATEGY = new ToroStrategy() {
    boolean isFirstPlayerPrepared = false;

    @Override public String getDescription() {
      return "Word around";
    }

    @Override public ToroPlayer findBestPlayer(List<ToroPlayer> candidates) {
      return Toro.Strategies.FIRST_PLAYABLE_TOP_DOWN.findBestPlayer(candidates);
    }

    @Override public boolean allowsToPlay(ToroPlayer player, ViewParent parent) {
      if (player.getPlayOrder() == 0) {
        isFirstPlayerPrepared = true;
      }
      return isFirstPlayerPrepared && Toro.Strategies.FIRST_PLAYABLE_TOP_DOWN.allowsToPlay(player,
          parent);
    }
  };

The trick is to return your preferred play order over ToroPlayer#getPlayOrder and listen to it to raise a flag indicate that your very First Video is prepared. (You should define your "First Video" yourself).
I'm using the default Toro.Strategies.FIRST_PLAYABLE_TOP_DOWN, but surely you can replace it with whichever Default Strategy you prefer. Or carefully use it with your custom one.
For the first issue (after re-adding your View to FrameLayout, it stops playing), I will need a bit more time. Thanks for co-operate.

@mahesh2015 Hm I try to: 1 - remove current RecyclerView from a FrameLayout root, 2 - add a dummy TextView to the root, 3 - remove the TextView (actually I call removeAllViews()), re-add RecyclerView to FrameLayout without re-registering it to Toro, and thing works fine.
Please re-confirm your Toro setup, and if it's available, please send me more code (how you init your RecyclerView, your Adapter, your removing/adding timing ...). Anything could be helpful now.

@eneim Sir on my code it is not playing/working i am unable to understand .I have debug my code but did not get any error.
Thank you!.

Well I would like to know more if there is another component which prevent/disturb your View. That's why I want a little bit more about how you setup/implement things.

And please confirm the snippet/work-around above works for you so I could improve current library code base :D.

@eneim Above code snippet working fine thank you very much for your support.
Thanks
Mahesh.

Good to hear. Can you close this issue? I would be easier for me to manager the issue by creating new ones for new issues though.

I think you could confirm now, but the latest version 1.2.0 also fixes the issue of off-screen playback. If it happens to you again, please notify me. Thanks and sorry for any inconvenience.

@eneim i am sorry but wrong video issue still exits. After testing 100 times it play 15 times wrong video.

Ok let me take a look.

@mahesh2015 I made a "small" tune up my current implementation as follow
ToroStrategy NEW_WORK_ARROUND = new ToroStrategy() {
      boolean isFirstPlayerDone = false;

      @Override public String getDescription() {
        return "First play video first";
      }

      @Override public ToroPlayer findBestPlayer(List<ToroPlayer> candidates) {
        return backup.findBestPlayer(candidates);
      }

      @Override public boolean allowsToPlay(ToroPlayer player, ViewParent parent) {
        boolean allowToPlay =
            (isFirstPlayerDone || player.getPlayOrder() == 0) &&
                backup.allowsToPlay(player, parent);

        if (player.getPlayOrder() == 0) {
          isFirstPlayerDone = true;
        }
        return allowToPlay;
      }
    }

The point is instead of setting the flag before evaluate it, I evaluate the player before changing the flag. So I force the player number 0 to be the first one to play.
Please try it again.

What is "backup"?

Just think it as Toro.Strategies.FIRST_PLAYABLE_TOP_DOWN above. Actually I backup old Strategy which is used in other place, and replace it with new one which is used in current place for testing only. You can safely change it with Toro.Strategies.FIRST_PLAYABLE_TOP_DOWN.

@mahesh2015 any good news?

Can i use your library (https://github.com/danylovolokh/VideoPlayerManager)for one of my client's project or i have to purchase licence...


Job Consumer Changes

Make the following changes to job consumers:

[ ] On faulted, move the "original" message to the error queue.
[ ] Produce Fault<T>, which should be sent to the original requestor if a RequestId/ResponseAddress is present, otherwise publish if the PublishFaults is true.

Under consideration:

[ ] Instance-level concurrency limits, perhaps as an alternative to global concurrency limit - which makes it easier, though both would be fancy.

Would you see there being much worth in JobComplete?
I've been listening to correlated Job Completions on State Machines but one issue i have is that all subscribers will attempt to correlate despite not really being interested in that Job Type. It's not a biggy...but a bit noisey at times!

Well, probably.
There would also be Fault<T> support. Unless of course PublishFaults is set to false.

Would you see much worth in JobCompleted<TJob>?

Done.

@RDalziel I haven't merged it entirely into develop yet, but the per-instance job type stuff is working now. The GrpcTransport tests have a good example that ensures it load balances across the two instances (which it does).


No suggestions for named arguments

Description:
$title.

Named arguments can be used to pass arguments for both required and defaultable parameters. Can we add suggestions for them?
Few points to consider

to pass args as named args to a function in an imported module, the parameter should have been marked public
named args cannot be passed after positional args

Steps to reproduce:
public function main() {
    foo(q<expected_suggestion_here>);
}

function foo(string qwe, int asd = 1) {
}

Affected Versions:
$ ballerina -v
jBallerina 1.1.0-alpha
Language specification 2019R3
Command 1.1.0-alpha

With included record parameters, we can now also use the names of the fields in the record type(s) (used as included record parameters) as named arguments.
e.g.,
public function main() {
    func(id = 1234, name = "May");
}

type Foo record {|
    int id;
    string name;
|};

function func(*Foo foo) {

}

Blocked by https://github.com/ballerina-platform/ballerina-lang/issues/32755 .

Same as https://github.com/ballerina-platform/ballerina-lang/issues/32332


bug: ion-infinite-scroll with native scrolling

Hi, when I try to perform pulltorefresh, immediately before it runs "on-infinite" from "ion-infinite-scroll". Here is the code:

   ........  cards items

Greetings @luchusnet!
My sensors indicate that you need to update your issue through our custom issue form. We are now requiring all issues to be submitted this way, to ensure that we have all of the information necessary to fix them as quickly as possible.
Click Here To Update Your Issue
I will have no choice but to close this issue if it is not resubmitted through the form. Please fill out the rest of the form, so that I may use my friendly robot powers to assist you.
Thank you!

I have the same issue. Do you have any solution yet?

I think this bug is resolved on last release 1.2.4. But this release only support from api android 4.1 . Is a problem for me :S

Hello @luchusnet ! are you still experiencing this issue? I know you said it was fixed in 1.2.4 but that you needed to support android devices older than 4.1 correct?

Since it has been a little while since there was any activity on this issue i will be closing it, but feel free to respond back if your still having the issue! Thanks again


New version: KDE.KDEConnect version 23.04.3

Pull request has been created with WinGet Automation :rocket:
Microsoft Reviewers: codeflow:open?pullrequest=https://github.com/microsoft/winget-pkgs/pull/115047&drop=dogfoodAlpha

@wingetbot run


wordpressPackages: Add German plugin translations

Description of changes

Things done

Built on platform(s)

[ ] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

[ ] For non-Linux: Is sandbox = true set in nix.conf? (See Nix manual)
[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[ ] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[ ] Tested basic functionality of all binary files (usually in ./result/bin/)
23.11 Release Notes (or backporting 23.05 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[ ] Fits CONTRIBUTING.md.

@mohe2015 I saw that translation files for Wordpress plugins were missing. I did some research on how it works and trying to implement packaging here https://github.com/helsinki-systems/wp4nix/issues/2
I would like to have an additional plugin package output "i18l" where the plugin translation files are located


[DRAFT] Merging new dev into main

This MR adds the following features:

cosmic shear example likelihood
new infrastructure to take sacc objects to be blinded into their likelihoods
ability to save the blinded data-vector in sacc format
new unit tests for new functions

API Changes:

The Blinding Module now requires a sacc object.

Testing is breaking because "save_to_sacc" is a new firecrown feature and possibly not installable via the environment.yaml


Review this token architecture and the MVP.md file.

This repository is from my private github.  I've cloned and moved it to the repository here.  The last time this was updated was months back.  It does not contain the detailed updates based on the 721 deployment of Unlock protocol.  In the coming weeks I will continue to update this document.  Please provide comments.

For the USPTO, if we have a parallel submission in as collective membership mark, there needs to be a policy as per TMEP §1304.09(d)(ii) Manner of Control

must specify the class of persons intended to be entitled to use the mark, indicating what their relationship to the applicant will be, and the nature of the control the applicant intends to exercise over the use of the mark.

A starting point for conversation is the new LEETH which can be implemented via the hats protocol
| Category | Token | Notes|
| Emeritus Member | awarded by acclaimation | honorary only |
| Member-in-Principle |LEETH (legacy) | Bar-Rogue HODLer |
| Chartered Member | LEETH v2 | Based on legal engineering contributions |
| Paidup Member | CRED | Membership fee |
| Working for Membership | in lieu of fee | eligible for POAPs |

Constitution outlines this pretty clearly. Would suggest we start there.  Thoughts? @drllau
Article II - Membership
Section 2.1 - Eligibility. Membership as defined in Wyo. Stat. Title 17, Ch. 22 shall be voluntary and application open to any individual of at least 18 years of age whose purpose or intent is to contribute, to build, and to use the services of LexDAO, and is willing to accept the responsibilities and terms of membership.
Section 2.2 - Admission. The membership of LexDAO applicants will be granted or denied by vote, or as otherwise prescribed in the LexDAO Handbook (Operating System), upon the submission of required information on a prescribed application form, paying any required application fee, and contributing to LexDAO, as determined by the membership. LexDAO is a decentralized network of members and may admit or deny admission arbitrarily.
LexDAO will review, and make adjustments to the admission requirements based on its evolving needs. The current path to become a member and to signal members for a vote can be found in the LexDAO Handbook (Operating System), and may be updated from time to time.
Section 2.3 - Responsibilities. By accepting and retaining membership each applicant shall agree to use the services or Platforms of LexDAO on at least an occasional basis. Each member shall keep reasonably current in payment of any dues or membership fees and other financial obligations of membership. Each member shall ensure that they are able to receive communication via the e-mail address provided in their application, by other means provided in the application (including platforms such as Discord, Twitter, Github), or by other acceptable means they provide..
If you are engaging with LexDAO Platforms, you consent to contact and agree to become legally bound by this Agreement as both a LexDAO participant and a "LexDAO Member".
Section 2.4 - Limitations. Status as a LexDAO Member does not (and shall not be deemed to) create, and the LexDAO Membership rights do not (and shall not be deemed to) include, any authority, right or power on the part of a LexDAO Member to act as the agent, representative or attorney of or otherwise act on behalf of LexDAO or any other Member, to bind LexDAO or any other Member to any Contract or Liability or to convey any LexDAO property or any asset, right or property owned or held by or on behalf of LexDAO or any Member. Without limiting the generality of the foregoing, no Member shall be deemed to be the partner of LexDAO or any other Member. No Member shall state, purport, imply, hold out or represent to any person that such Member or any other Member has any such authority, right or power.
To the maximum extent permitted by applicable law, no Member shall be (or shall be deemed to be) liable for any liability of the LexDAO or any other Member. This shall not (and shall not be deemed to) create or imply any obligation of LexDAO or any Member to indemnify or compensate any Member from, or hold any Member harmless against, any Liabilities incurred by such DAO Member under any applicable law, in connection with the Member's participation in LexDAO or otherwise.
Section 2.5 - Revocation or suspension of status. A LexDAO Member may have their membership revoked or suspended through the vote of LexDAO Members or as prescribed in the LexDAO Handbook (Operating System) and may be banned from future membership. Any such revocation, suspension, or ban may be appealed as prescribed in LexDAO Handbook (Operating System) or to membership vote. References herein to the rights and entitlements of members shall be understood to refer only to members in good standing.
Section 2.6 - Access to information. Members shall have access to information concerning the operational and financial affairs of LexDAO. The LexDAO Handbook (Operating System) will describe the manner of access.
Section 2.7 - Settlement of disputes. To the extent allowable by law, all disputes may be settled by membership vote. In any dispute between LexDAO and any of its members or former members which cannot be resolved through informal negotiation, it shall be the policy of LexDAO to prefer the use of mediation whereby an impartial mediator may facilitate negotiations between the parties and assist them in developing a mutually acceptable settlement. Neither party with a grievance against the other shall have recourse to litigation until the matter is submitted to mediation and attempted to be resolved in good faith. All Membership agree that there is a preference to settle disputes amongst members or between members and LexDAO via decentralized dispute mechanisms via smart contract protocols.
Section 2.8 - Transferability of Membership. Membership rights and interests may not be transferred. Any attempted transfer contrary to this section shall be wholly void and shall confer no rights on the intended transferee for member removal.
Section 2.9 - Withdrawal. A member may withdraw at any time upon notice to LexDAO through a vote to withdraw their membership and burn any related token. Said request will not be unreasonably denied and shall be deemed conclusively as the Members intent to withdraw from LexDAO.


Create a Config UI page that displays a fully prepared system

Is your feature request related to a specific problem?
Once the user has fully described and annotated their system, we need a way to show them what it looks like in its final form before registration
Describe the solution you'd like
This should be a straight-forward page for showing a user the field name as well as what information they entered.
Describe alternatives you've considered, if any
A description of any alternative solutions or features you've considered.
Additional context
Maybe we want to let the user still edit fields at this point as opposed to going back a step or two to do it? I'm not sure

closing, completed via another ticket/stale


Pubsub fix

squashed and merged as https://github.com/spring-cloud/spring-cloud-stream/commit/b8ffa630f73621b3e1ae72b0111e1019565adfb5


docs: Some more use cases

Hey,
There are also more use cases for valibot. One would be to validate the data that is stored in the Localstorage. And another use case would be to validate the schema of your URL search parameters.

Thanks a lot! Good idea! As soon as I have time, I will include it in the docs.

Thanks for your contribution. I have added the use case to the documentation.


Sidebar collapsed by default

Discussed in https://github.com/vikramlearning/blazorbootstrap/discussions/699

Originally posted by heather-timmins April 30, 2024
Hi,
Sorry if i've missed something but can you make the sidebar collapsed by default? and only toggle to open?
Thanks

Yes it would be great to have an option InitiallyCollapsed oslt. Now I invoke _sidebar.ToggleSidebar() on initialization. (OnAfterRender)...

It seems this is the default in the current version and I need to go just the opposite direction.  My desktop implementations are all defaulting to hide.  I don't have an issue with the default the way it is, it would be nice to have a parameter to specify the initial value.  Toggle assumes that we know the initial state.  If you change it to default, all implementations using toggle on initialize will have to be updated.

This would be a great to have feature. Any update on this?


Will there be support for c#?

Is there any chance of future support for c# as native assembly ?
Thanks!

pugixml is a C++ library and will remain a C++ library; support for any other languages is outside of the scope of this library. There are various open source externally maintained bindings for other languages, although I'm not aware of any .NET bindings off the top of my head. Building pugixml as C++/CLR is supported so it might be pretty easy to expose a CLR-friendly interface on top, but again this falls outside of the scope of this project.


Minimal or modular installation

I would like to have minimalistic installation of pipenv to do it's main task - the pip and virtualenv orchestration, without the additional features (code checks - flake8, etc.) E.g. we use different code check tools, or we do not need it at all on the production.
The project may split to modules, like pipenv, pipenv-codecheck, pipenv-..., etc. So a user may install, what she wants.

Hi @xmedeko.  I can understand the need for this, but this isn't a priority at this time.  It would require a major refactor to pull out all of the individual parts, and we're still largely an in development project where things change a lot!  I'm not saying it won't happen, but I can't say that it will happen soon.

Ok, I understand.
Just a note: if you have flagged this issue as enhancement, future, then it's better to keep it open. So, the other users see it, may express their opinions, etc.


Bug: VS 2022 cshtml file breaks javascript formatting

This issue has been moved from a ticket on Developer Community.

[severity:It’s more difficult to complete my work] [regression] [worked-in:VS 2019]
Javascript usually has nicely coloured fonts for reserved words and strings. But if the html code above the js has an html style comment starting with
@if (1 == 1)
{
    // This comment works fine here

Blah blah

}

Original Comments
Feedback Bot on 8/28/2023, 06:30 PM:
(private comment, text removed)
Feedback Bot on 9/5/2023, 03:32 AM:
(private comment, text removed)

Original Solutions
(no solutions)

@davidwengier @333fred Is this likely to be a parsing issue? That the compiler is incorrectly reporting the tree and the tooling is thus doing the wrong thing?

This would most likrly be a TextMate grammar issue, not compiler.

VS Code also has this issue too.


Reactivate account

Could you reactivate account aheibel please?  Thanks in advance

Note: I believe there is a page for this in the docs, but I was unable to find it within three minutes of searching. This may mean that we need to up its visibility for others.

If your account was deactivated, it was most likely due to abuse of RTD. Closing this issue


SyslogAppender - let max message size be configurable

The get/setMaxMessageBytes() methods seem potentially confusing to me because they do silent magic on the value given with a magic number (5). The RFCs (3164, 5424/5425/5426) are at least consistent in that when the use the term "Message Length" they mean just the syslog message, and NOT the UDP or TCP header. So the new variable (maxMessageBytes) is correct, but the getter/setter is confusing.
Put it this way: if I was to look at this code 6 months from now, would I wonder why we don't just use the getter on line 291? i.e. instead of
  if (byteCount <= maxMessageBytes) {

use
  if (byteCount <= getMaxMessageBytes()) {

If I made that change, this would break pretty catastrophically. If, OTOH, we didn't do the magic addition/subtraction, then the getter/setter would be fine. Alternatively, if we want to do the magic, we should use different names that won't be confusing. Either get/setMaxPacketBytes() or get/setMaxMessagePlusHeaderBytes()
We should also get rid of the magic number (5) and use a static class var (HEADER_BYTES)
We should enforce a max packet size of 64k. If I call setMaxPacketSize(128*1024), we should at least log an error and then force use of 64k as the actual limit. We could throw an exception rather than logging, or even exit. Given how important it is to get this value right, I'd be ok with going medieval on the process if the config is wrong.
Finally, we should think about enforcing a minimum maximum size, as defined in RFC 5424. Here is what it says:
    Each transport mapping defines the minimum maximum required message length
    support, and the minimum maximum MUST be at least 480 octets in length.

Sorry to be so anal here, but I think its important we get this right, because its something a lot of our customers also face and if we're going to propose the same change for them, we need to make sure its all crystal clear and fully RFC compliant. And the changes aren't huge, just very very persnickety.

By the way, I'm also OK with just hard coding it to 65530 (65535 - 5)
instead of 1019 on line 291 and not having the getter/setter or
maxMessageBytes var. Thats an even simpler change that is compliant, and
can be explained with a single comment. It does lose the flexibility of the
getter/setter, but since this value is unlikely to ever be changed, I don't
think its that big a deal.
On Wed, Apr 22, 2015 at 9:51 AM, kiwigaffa<EMAIL_ADDRESS>wrote:

The get/setMaxMessageBytes() methods seem potentially confusing to me
because they do silent magic on the value given with a magic number (5).
The RFCs (3164, 5424/5425/5426) are at least consistent in that when the
use the term "Message Length" they mean just the syslog message, and NOT
the UDP or TCP header. So the new variable (maxMessageBytes) is correct,
but the getter/setter is confusing.
Put it this way: if I was to look at this code 6 months from now, would I
wonder why we don't just use the getter on line 291? i.e. instead of
if (byteCount <= maxMessageBytes) {
use
if (byteCount <= getMaxMessageBytes()) {
If I made that change, this would break pretty catastrophically. If, OTOH,
we didn't do the magic addition/subtraction, then the getter/setter would
be fine. Alternatively, if we want to do the magic, we should use different
names that won't be confusing. Either get/setMaxPacketBytes() or
get/setMaxMessagePlusHeaderBytes()
We should also get rid of the magic number (5) and use a static class var
(HEADER_BYTES)
We should enforce a max packet size of 64k. If I call
setMaxPacketSize(128*1024), we should at least log an error and then force
use of 64k as the actual limit. We could throw an exception rather than
logging, or even exit. Given how important it is to get this value right,
I'd be ok with going medieval on the process if the config is wrong.
Finally, we should think about enforcing a minimum maximum size, as
defined in RFC 5424. Here is what it says:
Each transport mapping defines the minimum maximum required message length
support, and the minimum maximum MUST be at least 480 octets in length.

Sorry to be so anal here, but I think its important we get this right,
because its something a lot of our customers also face and if we're going
to propose the same change for them, we need to make sure its all crystal
clear and fully RFC compliant. And the changes aren't huge, just very very
persnickety.
—
Reply to this email directly or view it on GitHub
https://github.com/loggly/log4j/pull/1#issuecomment-95262346.

Thanks Jon.  I have the same concern, but I was hoping to just make minimal changes so that I don't hack up too much of the original code and cause even more confusion.  The original code itself is a bit tacky, especially with these magic numbers that are enforced in other parts to the library.
I'm not sure about enforcing a maximum.   I thought the spec was 1K, and we ourselves are breaking that by going higher?  Also, in reality, we know that different syslog implementations are going beyond the spec to support configurations of even larger sizes.  I'm also not certain if 65K is the absolute max size.
http://en.wikipedia.org/wiki/User_Datagram_Protocol
"The practical limit for the data length which is imposed by the underlying IPv4 protocol is 65,507 bytes (65,535 − 8 byte UDP header − 20 byte IP header).[2]  In IPv6 Jumbograms it is possible to have UDP packets of size greater than 65,535 bytes.[5]"
Overall, I strongly believe that as a pass-thru tool to various syslog implementations, log4j should be flexible rather strict.
Perhaps we need to take this project private first so that we can quickly make it work for us internally, and then later decide how to pretty up this thing so that external users can use it?

Absolutely agree that its private first, but I guess I was thinking that
its a small enough change that "prettying it up" could be done in the first
pass.
The 1k limit is from RFC 3164, which is obsoleted by 5424. I think its ok
for us to just say "we're basing this on 5424, and recognize that it does
not conform to 3164". 5424 has been around since 2009, and all modern
syslogs support it.
I get what you say about log4j being flexible rather than strict, but given
that SyslogAppender only supports IPv4 UDP (unless I'm missing something),
there is actually a hard maximum size, and some kind of safe-guard makes
sense to me.
jon
On Wed, Apr 22, 2015 at 10:25 AM, vinhn<EMAIL_ADDRESS>wrote:

Thanks Jon. I have the same concern, but I was hoping to just make minimal
changes so that I don't hack up too much of the original code and cause
even more confusion. The original code itself is a bit tacky, especially
with these magic numbers that are enforced in other parts to the library.
I'm not sure about enforcing a maximum. I thought the spec was 1K, and we
ourselves are breaking that by going higher? Also, in reality, we know that
different syslog implementations are going beyond the spec to support
configurations of even larger sizes. I'm also not certain if 65K is the
absolute max size.
http://en.wikipedia.org/wiki/User_Datagram_Protocol
"The practical limit for the data length which is imposed by the
underlying IPv4 protocol is 65,507 bytes (65,535 − 8 byte UDP header − 20
byte IP header).[2] In IPv6 Jumbograms it is possible to have UDP packets
of size greater than 65,535 bytes.[5]"
Overall, I strongly believe that as a pass-thru tool to various syslog
implementations, log4j should be flexible rather strict.
Perhaps we need to take this project private first so that we can quickly
make it work for us internally, and then later decide how to pretty up this
thing so that external users can use it?
—
Reply to this email directly or view it on GitHub
https://github.com/loggly/log4j/pull/1#issuecomment-95274545.

Sounds good.  I'll make the change and post another request soon.


support Carthage

please merge if you ok :+1:

@entotsu thanks for your PR. I've been hanging this PR with the intent to make this repo more stable first and support Carthage then. It's still 0.x version. Carthage supporting might go with 1.0 release. Thanks again.

Would be nice if this could soon be merged

Any news on this?

update: Carthage has been supported!


Readme Update

Forgot to update the readme for the recent API changes, ups

closes #222 as date format was just wrong in the example


Use ENV variable for Performance dataset

Why is this good?
What does this let us do in the future?

Change to what dataset we send data with terraform config instead of churning code files.

It would work previously as well but now encoded IDs will be consistent with a dataset in which they're saved. Just to keep our minds sane.


mookAI compatability issue

Hey there!
I'm the developer for the mookAI module. Earlier today, someone raised an issue  about compatability issues between our modules. The issuer noted that the AI was planning attacks from NPCs to PCs that should be hidden from their vision.
I looked through my code, and the way vision is checked is through the following call to the FVTT API:
	canSee (id_)
	{
		// I have no idea how this works, but it seems to anyway
		return canvas.tokens.children[0].children.some (e =>
			{ return e.id === id_ && e.isVisible; });
	}

To be quite honest, I'm not entirely sure how the isVisible property ends up being set there, but I suspect that it isn't being updated for the change in vision rules. I plan to look into this some more tonight, and hopefully I can provide more information then.

/**
   * Determine whether the Token is visible to the calling user's perspective.
   * Hidden Tokens are only displayed to GM Users.
   * Non-hidden Tokens are always visible if Token Vision is not required.
   * Controlled tokens are always visible.
   * All Tokens are visible to a GM user if no Token is controlled.
   *
   * @see {SightLayer#testVisibility}
   * @type {boolean}
   */
  get isVisible() {

isVisible returns true if the token is in line-of-sight of the selected token(s) and illuminated by a light source, i.e. in field-of-view of a light source. I'm not familiar with with mookAI, but you want to test for visibility from the point of view of the AI token surely. I copied & pasted something together from the Froundry code and modified it. It's not tested though. But with this code the AI wouldn't be able to see in global/universal lights outside of line-of-sight. Not sure if that is required. But I don't think this works on it's own yet, because this._token.vision is not initialized if it's not controlled, if I'm not mistaken.
canSee(id_) {
    const token = canvas.tokens.get(id_);

    if (token.data.hidden) return false;
    if (!canvas.sight.tokenVision) return true;
    if (id_ === this._token.id) return true;

    const tolerance = Math.min(token.w, token.h) / 4;
    const point = token.center;

    // Determine the array of offset points to test
    const t = tolerance;
    const offsets = t > 0 ? [[0, 0],[-t,0],[t,0],[0,-t],[0,t],[-t,-t],[-t,t],[t,t],[t,-t]] : [[0,0]];
    const points = offsets.map(o => new PIXI.Point(point.x + o[0], point.y + o[1]));

    // Test that any point falls inside a line-of-sight polygon
    const los = points.some(p => this._token.vision.los.geometry.containsPoint(p));
    if (!los) return false;

    // Test the that the point is within some light source FOV polygon
    return canvas.lighting.illumination.lights.children.some(l => {
      return points.some(p => l.fov.geometry.containsPoint(p));
    });
  }

I had a closer look at mookAI code, and, since you take control of the AI token while acting, what I mentioned above shouldn't be an issue. And you can probably use visible instead of isVisible. It should hold the cached value of isVisible.
canSee (id_)
{
     return canvas.tokens.get(id_).visible;
}

I'll reopen this issue if necessary.

I'll reopen this issue if necessary.

Thanks for taking the time to look though my code and produce such a thorough response. I'm sorry for my own late reply. I completely forgot about this over the holidays.
I didn't know there was a visible attribute! I think it must have been added in the 0.7.* series of updates, and I never thought to look. I'll use that instead and see if it resolves the issue.
Thanks again :)

Thanks for taking the time to look though my code and produce such a thorough response. I'm sorry for my own late reply. I completely forgot about this over the holidays.
I didn't know there was a visible attribute! I think it must have been added in the 0.7.* series of updates, and I never thought to look. I'll use that instead and see if it resolves the issue.
Thanks again :)


Git for Windows SDK (build-extra)

Is your feature request related to a problem? Please describe.
Contrary to Git for Windows, the Git for Windows SDK also comes with pacman which allows to install additional tools such as tmux.
Describe the solution you'd like
One-Click installation of Git for Windows SDK (scroll all the way down)
Releases are listed here: https://github.com/git-for-windows/build-extra/releases
Describe alternatives you've considered
It's not even available on winget, I opened an issue about it: https://github.com/microsoft/winget-pkgs/issues/108378
I just installed it manually, but it would be exceptionally great to have it available with a simple click.

I'll look at replacing Git when this becomes available through winget or chocolately. Closing this issue for now.

@ChrisTitusTech Alright, just keep in mind "Git for Windows" != "Git for Windows SDK". I don't think everybody who needs git inherently needs its Windows SDK.


Local function in codeunit is inaccessible with self referencing codeunit

1. Describe the bug
Inside the same codeunit, it is not possible to call a local function, when calling it through a self referencing variable.
2. To Reproduce
Paste that code inside a codeunit and you will see that in the function Test1, the error "'Test2()' is inaccessible due to its protection level" will show up.
local procedure Test1()
var
    FooBar: Codeunit "Foo Bar";
begin
    FooBar.Test2();
end;

local procedure Test2()
begin

end;

3. Expected behavior
The function Test2() is accessible because it is getting called inside the same codeunit.
4. Actual behavior
The function Test2() is inaccessible.
5. Versions:

AL Language: 10.1.707468
Visual Studio Code: 1.73.1
Business Central: BC 21 (2022 Wave 2)

That's the expected behaviour, you can't call local procedures with variables. "Foobar" in this example is not a self referencing variable but another instance of that codeunit.

In like C# that would work... But would it be possible to implement something like this with protected functions?

This behavior is by-design. When a procedure is marked as private, the procedure won't be exposed through a variable even if the variable is declared in the same codeunit.


Small Deno compat issue

https://github.com/fabian-hiller/valibot/blob/414aa980b559d60bfeabb45e63ba2b89b8529985/library/src/actions/types.ts#L1
This import is not Deno-compatible, because it points to a directory, not a file.
This can cause an error when running deno check in a project.  Because it's a type-only import, it doesn't seem to affect Deno's ability to run code, but this could change.
It should probably point to types/index.ts.

Sorry about that! I will fix it asap. Maybe we should add deno check to our CI to prevent this kind of bugs.

Would be great to have one patch release (i.e. 0.4.42) by cherry-pick it from 1.0.0-beta.2, for users not opted into beta release channel yet.

Does v0.42.1 also have this problem? The things I fixed are only related to our v1 code. Other than that, I recommend upgrading to v1 beta if you are not prevented from doing so by some external reason. v0 is basically a beta release as well and not "more" stable than our v1 beta. You should be able to upgrade without touching any code.

The things I fixed are only related to our v1 code

Oh I wasn't realize that, confirmed that only affects v1 beta, sorry.
I've tested 1.0.0-beta.2 and it is indeed works as drop-in upgrade. Fingers crossed for its v1 stable, thanks.


Enhancement: Separate settings for USB vs WiFi

Description

Since bitrate/etc can be much higher over USB, it would be great if there were separate profiles for usb and wired, or per-headset with them treated independently.
A good example of the value here is Elite Dangerous and Half Life: Alyx. The former you are always stationary and can benefit from wired, where the latter is better in wireless mode, however a user would rarely take the time to adjust all the settings.

See #259. Already planned as a full user-defined presets system for everything, but there's currently no one working on it.


BAU - Bump Go dependencies

Description:

Update to Go 1.20
Bump dependencies
Set RDS broker version to v1.48.0 as that is what we use in production

See https://www.pivotaltracker.com/n/projects/1275640/stories/185890974 for story to update paas-rds-metrics-collector


KFS Service

Want the ability to lookup/validate KFS accounts, and also find out the account manager of a given account.
Will be used for validation when a professor enters accounts to charge, but also in some cases the account manager will need to approve the use of an account for charges so we'll want to grab their user info, create a user account if needed, and then attach some sort of gated page to that.

@srkirkland Would this be any income account like what payments does, or will there be special rules like registration (has to belong to CAES org structure)

IDK, but I'm guessing it'll be a lot more varied because research is often cross-dept.  But as far as this service goes it shouldn't concern itself with any restrictions

Oh, because we are taking money out... need more coffee


fix: make get_affine_field() returns CXYZ tensors

Looks like pylint-isort check is failing -- have you installed pre-commit? It's pretty helpful

Ah yea sorry let me try pre-commit - didn't think it would triggered it :sweat_smile: . Also I guess there are some unit tests need fixings too.

This change will require updates to existing regimes, e.g. the BaseEncoder

Good catch. And looking at existing usages it seems hard for me to do the updates

There's 3 places where get_affine_field is used, and I believe adding a simple rearrange at each one should be sufficient?
Btw @trivoldus28 for your context:
You might have figured this out already, but training regimes and high-level layer processing constructs are exempt from unit test coverage requirement. This is done for 2 reasons. First, these highest-level constructs are often changing, and we do not want to inhibit the pace of research. Second, testing some of these high level constructs is technically challenging/slow. Details on this can be seen in the [coveragerc] file. We also have integration tests that cover subchunkable and volumetric_apply flows which are not a part of the usual CI, but can be run on demand through github actions. The exact testing strategy is still not finalized and is up for debate

Yea though a bit hacky I can def make a first pass of rearrangement.

Interesting, why do you think it's hacky?

Actually taking a second look, maybe it's not so bad. In this example, do you mean something like from:
        equivar_field_inv = (~seed_field.from_pixels())(
            tensor_ops.transform.get_affine_field(
                size=src.shape[-1],
                rot_deg=-equivar_rot,
            )
            .field()  # type: ignore
            .to(src.device)
        ).pixels()

to
        equivar_field_inv = (~seed_field.from_pixels())(
            tensor_ops.transform.get_affine_field(
                size=src.shape[-1],
                rot_deg=-equivar_rot,
            )
            .movedim(-1, 0)  # CXYZ -> ZCXY
            .field()  # type: ignore
            .to(src.device)
        ).pixels()

Yeah, that's pretty close!
You were disciplined and left a comment explaining the dimension change. We like to force such good behavior through always using einops rearrange function when messing with dims. You can check it out, it's sprinkled all over the codebase


Update rizzo-next to 0.14.13

did you run npm install? are there any changes in node_modules/rizzo-next/dist? @thomasthesecond

Added

👍


Question : Can this be used to simply watch scroll position ?

Can this be used to simply watch scroll position ? After certain offset from top of page say 100 i want tochange some css properties .
If user scrolls back below 100 again then i again need to reverse/change css properties.
Thanks !

Hi,
no, this library can not be used for that purpose. What you are looking for is related to "scroll spying" like https://www.npmjs.com/package/ng2-scrollspy.

Thanks ! ya i got that but its not working . i get the issue i posted here https://github.com/JonnyBGod/ng2-scrollspy/issues/26
well that feature can be a good addon to this to use. all in one including scrolls to anchor tag.


Why did remove PubSub / NATS component

pubsub components include nats-streaming and nats-jetstream, but remove  pubsub/nats .
In NATS documents, basic NATs is also called 'Core NATS', which is a basic subscription and publishing function.
Some existing systems also need to support 'Core NATS'

/cc @yaron2 @pkedy

Hi @zwq000, in accordance to the guidance issued by NATS maintainers, we will also deprecate NATS streaming (see here and here in the future, as this is now considered legacy and will stop receiving security fixes and patches.
Regarding Core NATS, it was replaced with NATS streaming at the time because it violated Dapr's pub/sub feature of at-least-once guarantee. This was unsupported by the underlying technology and wasn't fixable by changing the implementation.

Closing this for now, but we can continue discussing here @zwq000 if you have further questions.

@yaron2  Thank you very much. I also feel this through the documentation. Dapr's Pub / sub is designed based on load balancing, so a message can only be consumed once


Add a way to specify a parameter for multiple routes at once

Is your feature request related to a problem? Please describe.
I have a bunch of endpoints like this:
/user/{user_name}/posts/{post_id} [GET]
/user/{user_name}/posts/{post_id} [POST]
/user/{user_name}/posts/{post_id} [DELETE]
/user/{user_name}/posts/  [GET]

I'd like to define the {user_name} and {post_id} path params, but without duplicating them their definition (the description being the most problematic) for every endpoint
Describe the solution you'd like
A way to define the path params once when they are used in multiple endpoints. Maybe by defining "global params" by their name ?
Additional context
Apologies if the feature is already present, I could not find it in the README or already opened issues

I found some information in the documentation that might address your concern. You can find details on how to add multiple paths here: Add Multiple Paths.
Does this help resolve your issue?

Yup, sounds like it ! Thanks


copy.deepcopy does not work on Faster R-CNN models

Relying on copy.deepcopy to copy the model in:

compression_conf_fc.ipynb
compress.py

Does not work for Faster R-CNN models which use mixed serialization & non-script modules.
This results in the error: _pickle.PickleError: ScriptModules cannot be saved using torch.save. Mixed serialization of script and non-script modules is not supported. For purely script modules use my_script_module.save(<filename>) instead.
Refer to PyTorch issue 18106.
What Faster R-CNN Resnet50 model were you using for this to work? I have been trying with the torchvision pretrained model with no success: torchvision.models.detection.fasterrcnn_resnet50_fpn(pretrained=True)

Hello @joskaaaa ,
we have experimented with two pre-trained Faster R-CNN models, one from the  facebook repository and another one from here.
In both models ROI part is not serializable. That is why on compression step we firstly extract a backbone from the model, then compress it and insert back to the model.

@juliagusak can you please explain how to save and load MaskRCNN objects?


Hardware and Software Synchronization - Realsense Multicam

Required Info

Camera Model
D455 and D435

Firmware Version
<IP_ADDRESS> and <IP_ADDRESS>

Operating System & Version
Linux Ubuntu 21

Kernel Version (Linux Only)
5.15.0-69-generic

Platform
PC

SDK Version
2.53.1

Language
c++

Segment
Robot

Issue Description
I am trying to synchronize a D455 and a D435 such that the depth frames correspond to the same scene. Upon reading I have found lots of issues and readings that date even back to 2018 and hence many of the issues could have become outdated with newer SDK versions. I thought we can use this issue to summarize all topics regarding both methods of Synchronization and will start with my understanding and trials.
Nominal Approach:
So the Multicam Example poses the idea of using a Pipeline for each Device. Such that under the hood, the pipeline pulls the streams and syncs the depth & color frames using the Syncer class. The output of which is a frameset. The framesets will not have the same timestamp as they are not triggered by the same source but the syncer matches the best possible match for syncing.
Software Approach:
After ensuring that the timestamps of various cameras come from the Global Time Domain, many issues mention the idea of using the timestamps to match the frames of various devices, but did not manage to find any exemplary codes on that. Moreover the notion of finding the initial time delay between frames of different devices to be subtracted was vaguely described, making the issue more complex.
One idea that came up and found an implementation on using the Syncer class as mentioned in https://github.com/IntelRealSense/librealsense/issues/4158#issuecomment-505559462 , but it does not work as the frameset produced by the syncer object is one camera only , and is not consistent on which camera's frames are being given. My idea was to create two pipelines , one for each device, and enforce a frameset having two depth frames, using the idea here: https://github.com/IntelRealSense/librealsense/issues/5847. Such that this frameset is supplied to syncer. Issue is syncer wont even have a buffer to align frames with and hence not sure if it even makes any sense.
Hardware Approach:
Next we to read on the hardware approach, but I was confused on why we cannot sync the RGB frames with the Depth frames of other devices. Moreover, the wiring is clearly explained in the whitepaper, but after that codewise was only mentioned to set one camera as master and other as slave, but should we still use a pipeline for each ? Or how should the code look like ? Moreover, to verify HW sync, there should be an increasing time shift, but between which frames exactly ? Also, does having the same FPS for each sensor mean that HW sync is successful ?
Last but not least, it would be great to know what could be synced between D455 and D435 and what to expected from using these devices. Thanks alot !

Hello @MartyG-RealSense ! Thanks alot for your reply. So assuming that for now only the depth streams are of importance to be synced between the D455 and D435. Is HW sync or SW sync is to be recommended given different devices ? One thing is still not so clear about both syncs:
SW Sync:
Grouping the frames via timestamps seems a challenging given the time compensation to be accounted for is there any already implemented code for this use ? Moreover, does the notion of enforcing your own frameset of 2 depth frames , with a buffer and feeding that into a syncer object seem logical or will it not work ?
HW Sync:
Just to be sure, after configuring the flags for master and slaves, how is the general code structure for getting the frames from both devices, it will still be by creating a pipeline per device, no ?
Regarding the FPS not being an indication of successful HW Sync, then why was it the case that the FPS was used as the success metric in this tutorial video: https://www.youtube.com/watch?v=DSm7NYG5bZE&ab_channel=IntelRealSense

I would not personally recommend mixing camera models, but if you have to use these two different cameras then the performance of a D435 and D455 is likely to be closer to one another than if one of the cameras was a D415 (which has a slow rolling shutter on both its depth and RGB sensors).  The advice not to mix camera models dates back to when the only models available were D415 and D435.

In regard to software sync, synchronization between RGB and depth sensors on the same camera should automatically kick in when both sensor types have the same FPS and the RGB sensor option Auto-Exposure Priority has also been disabled, as described at https://github.com/IntelRealSense/librealsense/issues/11203#issuecomment-1348828363
When the wait_for_frames() instruction is used in a script, the SDK should also attempt to find the closest timestamp match between different streams.
You can use C++ code to define a custom frameset by either using a custom processing block or the SDK's software-device interface, as described at https://github.com/IntelRealSense/librealsense/issues/5847
In regard to hardware sync, creating a separate pipeline for each camera is a recommendable strategy for a multiple-camera application but not compulsory.  As long as you define a master and slave with Inter Cam Sync Mode and the physical sync equipment such as cabling is set up correctly then hardware sync should occur regardless of how the script is structured.
On the linked-to video, they are highlighting with the mouse cursor that each camera is running at the same FPS.  Whilst it is important that the slave cameras are synchronized to the same FPS as the master camera, the true indicator of sync success is the behaviour of the timestamps.

Both the D435 and D455 will support 848x480 at 30 FPS if the camera is on a USB 3 connection (this configuration is not supported on USB 2), so having separate cfg.enable_stream instructions for D435 and D455 will be unnecessary and the 'If' and 'Else' conditions could be removed.
The cfg instructions could be removed entirely if you do not mind enabling the color stream too, as the default profile that will be applied without cfg instructions present is 848x480 / 30 FPS depth and 1280x720 / 30 FPS color.

Thanks very much , the only unclassified details is how does the Pipeline class choose which stream to use, as with the sensor-control example there exists lots of stream profiles per same sensor that allows for higher FPS/Resolution , or are they fictitious streams that might not actually be pulled from the sensor ?

In a multiple camera script (such as rs-multicam) where cfg instructions are not defined and the serial number is auto-detected and a pipeline auto-created for it, the default stream profile will be applied to that camera's assigned pipeline.
In a script with multiple pipelines and cfg cnfigurations like https://github.com/IntelRealSense/librealsense/issues/1735#issuecomment-390840337 the script will know which stream configuration to apply to which camera because each camera will have its own start() instruction with the name of the cfg set to apply inside its brackets.  For example:
pipeline_1.start(config_1)
pipeline_2.start(config_2)

Each RealSense camera model has its own default profile.  On D435 / D435i and D455, that will typically be 848x480 / 30 FPS depth and 1280x720 / 30 FPS color.  The D415 model meanwhile has a default profile of 1280x720 / 30 FPS depth and 1920x1080 / 30 FPS color.
An easy way to work out the supported resolution / FPS for each camera is to choose a resolution in the RealSense Viewer and then choose an FPS.  If the FPS is supported for that resolution then the FPS selection will not change.  If the chosen FPS is not supported for that particular resolution then the Viewer automatically suggests a different resolution / FPS instead.
Not every stream format listed by a tool such as rs-sensor-control may be accessible by RealSense users.  For example, if the RAW10 depth format is selected in the Viewer then when the stream is enabled there is no image and a message that says that RAW10 cannot be rendered in the Viewer.

Very informative thanks alot. Will be trying out Hardware Synchronization in the upcoming weeks ! For now , thanks for your assistance

You are very welcome.  I'm pleased that I could help  :)

I am now digging into the RealSense2-ROS 1 packages but do not really understand the main Package configuration and how ROS is using the SDK (pipelines/configs) and all those details. Therefore I am not sure on how to setup the HW Sync Master/Slave flags when launching different cameras.
Is there an article that also summarizes the ROS packages architecture with relations to the RealSense SDK ? Or would it be adviced to wrap the code I have modified to a catkin workspace and use that as a node in some sort ?

The RealSense ROS wrapper acts as a compatibility layer between the RealSense SDK and ROS so that SDK sensor streams can be translated into a format that is compliant with ROS standards.  A lot of the ROS wrapper's parameters are therefore using the RealSense SDK's functions in the background instead of writing completely new code just for the wrapper.
There is not an architecture guide that shows how the ROS wrapper interfaces with the SDK.  In general, ROS parameters are used to access equivalent functions in the SDK in the background (such as the align_depth ROS parameter being equivalent to aligning depth to color with the align_to instruction in the SDK).
It is possible to create ROS node scripts that can interface with the SDK.  Official ROS1 wrapper examples of such scripts are at the link below.
https://github.com/IntelRealSense/realsense-ros/tree/ros1-legacy/realsense2_camera/scripts
In the ROS wrapper, master and slave status is set with the parameter inter_cam_sync_mode.  Setting this parameter can be problematic though, as described at https://github.com/IntelRealSense/realsense-ros/issues/984#issuecomment-707729244 and the comments beneath it.
Another approach is to set Inter Cam Sync Mode in a json custom camera configuration file and then load that json into the ROS wrapper during launch - see https://github.com/IntelRealSense/realsense-ros/issues/1540#issuecomment-738027312

If Auto-Exposure is enabled and the Auto-Exposure Priority (an rgb_camera setting) is disabled, then if both depth and color streams are enabled then a constant FPS should be enforced for both streams instead of allowing FPS to lag below its defined speed.

Yes I was wondering on how would the JSON look like , as trying it with the D455 as such give me the error code below:
{
"Inter Cam Sync Mode": 0.0,
}
[ERROR] [1681391869.158692674]: An exception has been thrown: parse error - unexpected '}'; expected string literal
[ERROR] [1681391869.158753477]: Exception: parse error - unexpected '}'; expected string literal

Hi @kameel2311  Do you require further assistance with this case, please?  Thanks!

Actually yes ! So I just connected both cameras without the RC Filter for now to just test if HW Sync even works as shown in the image attached.

Now I have encountered rather weird behaviour when I set the D455 as a Master and D435 as a slave. As shown below the D435 is acting very strangely.

On the otherhand, setting D435 as the master will cause each to run on about 30Fps , but not even sure if HW Sync is working.
So my questions are: What could be an explanation to these observations and how is the time drift being computed as discussed in different issues to check the Unintiuative HW Sync check.

So technically if the Offset is increasing in a linear and steady fashion, it confirms hardware sync ?
Yes that is the case , so I hook both cameras and change the stereo controls. D455 master other slave and turn master stream visualization first. D435 acts very weird when its a slave but not a master.
Note the wires I used is without the RC filter, could that be the issue ? (Although D455 being a slave does not exhibit that behaviour)

Yes, if the offset is increasing predictably over time then it confirms that hardware sync is working correctly.
Hardware sync cables do not usually require RC filters, though if the cables are long then they are at greater risk of experiencing electrostatic discharge (ESD) that resets the camera's frame counters and so can have components optionally built into the cable to protect against ESD discharge.

Okay then in my case they are about 15cms long, so will skip the RC filter for now. I have updated the D435 Firmware to <IP_ADDRESS> but the issue still persists. Any clue on what is going on or what could be the case ?

In the official Intel documentation for hardware sync, only Pin 5 and Pin 9 need to be connected.
https://dev.intelrealsense.com/docs/multiple-depth-cameras-configuration

So I am not sure if HW Sync is actually working, here are snippets of the code that is relevant, note due to the order of Cameras being Hooked to the Laptop , the D455 is being Accessed first:
Setting Inter Cam Modes:
for (rs2::sensor sensor : dev.query_sensors())
        {
            // std::cout << sensor.get_info(RS2_CAMERA_INFO_NAME) << std::endl;

            if (auto depth_sensor = sensor.as<rs2::depth_sensor>())
            {
                if (strcmp(str_detail, str_D455) == 0)
                {
                    // std::cout << "Depth Sensor Sync Modified for " << str_detail << std::endl;
                    sensor.set_option(RS2_OPTION_INTER_CAM_SYNC_MODE, 1);
                }
                else if (strcmp(str_detail, str_D435) == 0)
                {
                    // std::cout << "Depth Sensor Sync Modified for " << str_detail << std::endl;
                    sensor.set_option(RS2_OPTION_INTER_CAM_SYNC_MODE, 2);
                }
            }
        }

Enabling Depth Streams:
rs2::pipeline pipe(ctx);
        rs2::config cfg;
        cfg.enable_device(serial);
        if (strcmp(str_detail, str_D455) == 0)
        {
            cfg.enable_stream(RS2_STREAM_DEPTH, 0, 848, 480, RS2_FORMAT_Z16, 30);
        }
        else if (strcmp(str_detail, str_D435) == 0)
        {
            cfg.enable_stream(RS2_STREAM_DEPTH, 0, 848, 480, RS2_FORMAT_Z16, 30);
        }
        // cfg.enable_stream(RS2_STREAM_DEPTH, 0);
        cfg.resolve(pipe);
        pipe.start(cfg);
        pipelines.emplace_back(pipe);
        colorizers[serial] = rs2::colorizer();

Then the Polled Frameset Timestamps Logged:

Is your section of code containing the INTER_CAM_SYNC_MODE instructions placed before the pipe.start(cfg) line like the C++ hardware sync script at https://github.com/IntelRealSense/librealsense/issues/2637

I believe that FRAME_TIMESTAMP - which is on the hardware clock - will be an appropriate timestamp to read.
There is not a way to check the connectivity between the pins with software.  The only clue that there might be a problem with the wiring is if the timestamps are not drifting apart, suggesting that hardware sync is not active.

Pin 5 on the slave camera might be able to have the arrival of a trigger pulse from the master camera detected if a electrical measuring device such as a voltmeter is attached to slave Pin 5.

I cannot confirm if your method of checking drift is correct as there are very few examples of checking drift to compare it to.

If it is a multiple camera application then using poll_for_frames() instead of wait_for_frames() is recommended, as advised by a RealSense team member at https://github.com/IntelRealSense/librealsense/issues/2422#issuecomment-423254709

There is not a wrapper function to check for drift in the ROS wrapper.

Yes, its actually just before it in the code

So I will be using the frame.get_frame_metadata(RS2_FRAME_METADATA_SENSOR_TIMESTAMP); function instead

My understanding of drift was wrong as I thought it was the difference in Global Host timestamps. Now I am measuring it using this method:
            if (strcmp(serial, str_D455_serial) == 0)
            {
                D455_current = frame.get_frame_metadata(RS2_FRAME_METADATA_SENSOR_TIMESTAMP);
                std::cout << "Drift D455: " << D455_current - D455_last_time << std::endl;
                D455_last_time = D455_current;
            }
            else if (strcmp(serial, str_D435_serial) == 0)
            {
                D435_current = frame.get_frame_metadata(RS2_FRAME_METADATA_SENSOR_TIMESTAMP);
                std::cout << "Drift D435: " << D435_current - D435_last_time << std::endl;
                D435_last_time = D435_current;
            }```

But the output is not constant when HW Sync Cables are not connected:
Drift D455: 33343
Drift D435: 33344
Drift D455: 33344
Drift D435: 33344
Drift D455: 33344
Drift D435: 33450
Drift D455: 33344
Drift D435: 66688
Drift D455: 66688
Drift D435: 33417
Drift D455: 33344
Drift D435: 33344
Drift D435: 33344
Drift D455: 33344
Drift D435: 33379
Drift D455: 33344
Drift D435: 33343
Drift D455: 33344
Drift D435: 33344
Drift D455: 33344
Drift D455: 33344
Drift D435: 33344
Drift D455: 33344
Drift D435: 33344
Drift D455: 33344
Drift D435: 66688
Drift D455: 33343
Drift D435: 33344
Drift D455: 33344
Drift D455: 33344
Drift D435: 33344
Drift D455: 33344
Drift D435: 33377
Drift D455: 33344
Drift D435: 66688
Drift D455: 33344
Drift D435: 33344
Drift D455: 66755
Drift D435: 33344
Drift D435: 33344
Drift D455: 66688
Drift D435: 33343
Drift D435: 33344
Drift D455: 66688
Drift D435: 33344
Drift D455: 33344
Drift D435: 66688
Drift D455: 33343
Drift D455: 33344
Drift D435: 33344
Drift D435: 33344
Drift D455: 66688
Drift D435: 33344
Drift D455: 33344
Drift D435: 66688
Drift D455: 33344
Drift D435: 33344
Drift D455: 33344
Drift D435: 33344
Drift D455: 33344
Drift D435: 33344
Drift D455: 33344
Drift D435: 33343

Any tips ?

Does it make a difference if you do it like this:
D455_current = frame.get_frame_metadata(RS2_FRAME_METADATA_SENSOR_TIMESTAMP);
D455_drift = D455_current - D455_last_time;
D455_last_time = frame.get_frame_metadata(RS2_FRAME_METADATA_SENSOR_TIMESTAMP);
This way, D455_last_time is retrieving the actual value of SENSOR_TIMESTAMP at that instant instead of relying on the older D455_current value that was used by D455_last_time = D455_current;

Not sure if I get your code , it is basically reading the same time stamp and the drift will just be zero .. ?

The intention of my code was to read the timestamp in one instant and read it again in the next instant.  But yes, inserting a small sleep time period in-between the two calls may be beneficial to ensure that the difference does not read as zero.
Usually when a timestamp doubles it is due to global time being true and setting global time to false resolves it, though I am not convinced that it is the cause in this particular case as I would expect the timestamps to always be double instead of occasionally.

But the code that I have used is also doing the same thing, no ? Any resources on how to set global domain to false ? And should it be set to false to notice the drift , or does it not play a role ?

Have updated the code as follows but it did not make a difference in terms of drift consistency:
D455_current = frame.get_frame_metadata(RS2_FRAME_METADATA_SENSOR_TIMESTAMP);
D455_drift = D455_current - D455_last_time;
D455_last_time = frame.get_frame_metadata(RS2_FRAME_METADATA_SENSOR_TIMESTAMP);

Regarding turning off the global time, not sure if is working as using sensor.get_option(RS2_OPTION_GLOBAL_TIME_ENABLED) still returns 1. (Defined the parameter before enabling the stream)
What I am noticing when using D435 as slave . the drift is very unstable as follows:
Drift D455: 33344  |  Drift D435: 20097
Drift D455: 33344  |  Drift D435: 19883
Drift D455: 33344  |  Drift D435: 20150
Drift D455: 33344  |  Drift D435: 19935
Drift D455: 33344  |  Drift D435: 20046
Drift D455: 33344  |  Drift D435: 20046
Drift D455: 33344  |  Drift D435: 40050
Drift D455: 33344  |  Drift D435: 39957
Drift D455: 33344  |  Drift D435: 19935
Drift D455: 33343  |  Drift D435: 40020
Drift D455: 33344  |  Drift D435: 39973
Drift D455: 33344  |  Drift D435: 20108
Drift D455: 33344  |  Drift D435: 40041
Drift D455: 33344  |  Drift D435: 19883
Drift D455: 33344  |  Drift D435: 60109
Drift D455: 33344  |  Drift D435: 60109
After checking on realsense viewer and configuring the params for master slave for each device , the FPS of D435 explains the inconsistency and very unstable depth images.:

Weird behaviour, although both streams should be operating at 30Fps no ? Can it be reproduced to check if nothing is wrong from my side ?

I do not have hardware sync cabling to test sync between two cameras to replicate your results, unfortunately.
It is okay for 30 FPS to show as 29.79 FPS for your D455.  If your D435 camera is also set to 30 FPS then an actual FPS of 50.25 is clearly incorrect.
I also note that the D455 depth resolution shows as 424x240 whilst the D435 depth resolution shows as 848x480.  This suggests that the Decimation Filter post-processing filter is enabled on the D455 but disabled on the D435, as the Decimation Filter halves the depth resolution when enabled.
Given how different the D435 image is, could you check please whether the entire list of post-processing filters is disabled on the D435.  This would be indicated by a red (Off) icon beside 'Post-Processing' and the list of filters all having grey icons beside them.

Yes the Filters where off but the issue persisted, so I conducted a couple of tests to check if the issue is the cable itself.
Turning on the D435 Depth Stream with Sync Cable NOT Connected:

Inter Cam Sync set to 0/1 and Post Processing On: Resolution 424x240 and FPS 30
Inter Cam Sync set to 2 and Post Processing On: Resolution 424x240 and FPS 30
Inter Cam Sync set to 2 and Post Processing Off: Resolution 848x480 and FPS 30

Turning on the D435 Depth Stream with Sync Cable Connected but D455 Not connected to Laptop

Inter Cam Sync set to 0/1 and Post Processing On: Resolution 424x240 and FPS 30
Inter Cam Sync set to 2 and Post Processing On: Resolution 424x240 and FPS 50 (Although should be 30)
Inter Cam Sync set to 2 and Post Processing Off: Resolution 848x480 and FPS 50 (Although should be 30)

Turning on the D435 Depth Stream with Sync Cable Connected but D455 connected to Laptop , D455 Stream OFF

Inter Cam Sync set to 0/1 and Post Processing On: Resolution 424x240 and FPS 30
Inter Cam Sync set to 2 and Post Processing On: Resolution 424x240 and FPS 50 (Although should be 30)
Inter Cam Sync set to 2 and Post Processing Off: Resolution 848x480 and FPS 50 (Although should be 30)

Turning on the D435 Depth Stream with Sync Cable Connected but D455 connected to Laptop , D455 Stream ON First and Inter Cam Sync set to 1

Inter Cam Sync set to 0/1 and Post Processing On: Resolution 424x240 and FPS 30
Inter Cam Sync set to 2 and Post Processing On: Resolution 424x240 and FPS 50 (Although should be 30)
Inter Cam Sync set to 2 and Post Processing Off: Resolution 848x480 and FPS 50 (Although should be 30)

Testing on D455 with cable and scenarios mentioned above yielded the same behaviour as seen in the D435.
After changing the cables , I noticed that setting Inter Cam Sync being set to 2 but not having a master and having the cable connected caused the issue, and it makes sense as its a Floating Pin. So could be a sign of bad wiring for other future issues.

Now the Drifts of each Cameras are not changing much
33344,33344
33344,33344
33344,33344
33344,33344
33344,33344
33344,33344
33344,33344
33344,33344
33344,33344
33343,33344
33343,33344
33344,33344
33344,33344
33344,33344
33344,33344
33344,33344
33344,33344
33344,33344
33344,33344
After 15 Mins. Is more time needed to notice the drift ? (Global was not disabled as mentioned above although set option was used)

Will try to leave it for some hours then , when milliseconds is mentioned , what is the expected value change from the nominal value of 33344 , in what units is that ?

Another test that I thought could be interesting is to set the D435 inter cam mode to GenLock (4) and hence I only saw feed from the D435 when the D455 which confirms the wiring. But I noticed that the frame rate dropped from 30 fps to 15 fps , is this the normal behaviour in the case of GenLock Mode ?

The multiple camera white-paper documentation states that when using mode 1 and 2, timestamps will "inevitably drift a few milliseconds over the course of 10s of minutes".
If it is 'tens of minutes' (multiples of 10 minutes, such as an hour) then it suggests that it may take longer than 15 minutes for drift to become apparent.
If hardware sync is not working then there will be no drift.

Now I am a bit more confused as the Drift you explained in this https://github.com/IntelRealSense/librealsense/issues/3565 post is not the same drift idea explained here

There is no information available about an expected rate of drift other than the general "10s of minutes" statement.  So I do not have further guidance that I can offer on that subject, unfortunately.

If hardware sync is working then I would assume that drift will take the form of the D435 and D455 frame values initially being the same and then the slave camera's values very gradually differentiating from the master camera's values over a period of 10s of minutes.

Genlock mode works differently to modes 1 and 2 and the mathematics of FPS can be complicated.  For example, if a Master and slave camera are used and the Master's FPS is 30 then the slave camera should be set to 90 FPS.
It can also be configured to release a 'burst' of frames with each trigger by using a 'burst count' value from 1 to 255.
A PDF documentation of Genlock is linked to below and I recommend reading that if you wish to use genlock because of the system's complexity.  Support for genlock has been withdrawn by Intel because it was an experimental proof of concept and Intel recommend using modes 1 and 2 only now.  Use of genlock is still supported in the SDK though.
External Synchronization.pdf

https://github.com/IntelRealSense/librealsense/issues/3565 is discussing hardware sync with modes 1 and 2, not the genlock mode (4+).  As mentioned above, modes 4+ have very different behaviour to modes 1 and 2.  For example, a slave set to '2' will listen on each frame for a trigger for a certain time period and then initiate an unsynched capture if it does not hear a trigger within that time period.  With modes 4+ though, the camera waits indefinitely for a trigger signal and does not capture until it receives one.

I think there has been a misunderstanding of what the drift is in terms of Drift inbetween the same camera timestamp or the difference of the two cameras timestamps.
So a final test has been conduced where the drift between the timestamps of the different cameras:
if (strcmp(serial, str_D455_serial) == 0)
{
    // std::cout << frame.get_frame_timestamp_domain() << std::endl;
    // D455_current = frame.get_timestamp();
    D455_current = frame.get_frame_metadata(RS2_FRAME_METADATA_SENSOR_TIMESTAMP);
    // D455_drift = D455_current - D455_last_time;
    // D455_last_time = frame.get_frame_metadata(RS2_FRAME_METADATA_SENSOR_TIMESTAMP);
}
else if (strcmp(serial, str_D435_serial) == 0)
{
    // std::cout << frame.get_frame_timestamp_domain() << std::endl;
    // D435_current = frame.get_timestamp();
    D435_current = frame.get_frame_metadata(RS2_FRAME_METADATA_SENSOR_TIMESTAMP);
    // D435_drift = D435_current - D435_last_time;
    // D435_last_time = frame.get_frame_metadata(RS2_FRAME_METADATA_SENSOR_TIMESTAMP);
}
}
drift = abs(D455_current - D435_current);

The results are quite interesting and I think they showcase the drifting. Note that the code only ran for 6 minutes, but as the timestamps are expressed on the nanosecond scale , it is sufficient to see the drift in that scale.
The red plot shows the drift when both inter cam modes are 0 , and the drift just jitters around a constant number (not zero as I am not compensating for the initial differences between the different HW Clocks). The Blue Plot shows the drift (removed some outliers for visualization purposes) when D455 is set to inter cam mode 1 and D435 to 2:

Do you think this is a proof of viable HW Sync ?

If timestamps are constant then there is no sync.  If timestamps drift apart then there is sync.  So your description of the behaviour of the timestamps when Inter Cam Sync Mode = 2 does suggest that sync is occurring.
I believe that performing a rostopic echo on the info topic of a stream will show the timestamps.  An example of such a stream in the ROS wrapper is /camera/depth/camera_info/

Hi @kameel2311  Do you require further assistance with this case, please?  Thanks!

Case closed due to no further comments received.