Scollable widgets don't assign controllers when direction is Axis.horizontal

Steps to reproduce

Clone this repo
Run the code and tap the FAB

Expected results
Two sets of scroll information is printed at the bottom of the scroll view with the offset for each.
Actual results
Only one set of information is printed out.
The reason this happens is because when a ListView is constructed with scrollDirection: Axis.horizontal no controller is assigned to it, so I can't read the offset.
You can test this by uncommenting line 91 in main.dart and refreshing.
When you tap the FAB again you'll see two sets of information printed out. I have to manually assign the controller.
The reason I need this to work the same as the vertical axis scroll views is because I'm building a no-code test automation tool for Flutter called TestSweets.
I don't want to ask the users of my software to go through their code and add Scroll controllers to every horizontal scroll view.
I am willing to fix this with a PR, I just need some guidance on where this implementation needs to happen.
Code sample
Here is a sample that reproduces the bug
Screenshots or Video

Screenshots / Video demonstration
[Upload media here]

Logs
No response
Flutter Doctor output
Doctor output
[✓] Flutter (Channel stable, 3.16.9, on macOS 14.1.2 23B92 darwin-arm64, locale
    en-ZA)
    • Flutter version 3.16.9 on channel stable at /Users/danemackier/src/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 41456452f2 (5 days ago), 2024-01-25 10:06:23 -0800
    • Engine revision f40e976bed
    • Dart version 3.2.6
    • DevTools version 2.28.5

[✓] Android toolchain - develop for Android devices (Android SDK version
    32.1.0-rc1)
    • Android SDK at /Users/danemackier/Library/Android/sdk
    • Platform android-34, build-tools 32.1.0-rc1
    • Java binary at: /Applications/Android
      Studio.app/Contents/jre/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.11+0-b60-7772763)
    • All Android licenses accepted.

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

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2021.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 11.0.11+0-b60-7772763)

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

[✓] Connected device (4 available)
    • sdk gphone64 arm64 (mobile) • emulator-5554             • android-arm64  •
      Android 12 (API 31) (emulator)
    • Tas (mobile)                • 00008030-001968293645802E • ios            •
      iOS 17.2.1 21C66
    • macOS (desktop)             • macos                     • darwin-arm64   •
      macOS 14.1.2 23B92 darwin-arm64
    • Chrome (web)                • chrome                    • web-javascript •
      Google Chrome 121.0.6167.85

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

• No issues found!

Hello @FilledStacks.

Two sets of scroll information is printed at the bottom of the scroll view with the offset for each.

Running this on my end, I see only one gets shown on the UI, but from the logs printed to the console, both are being printed, is this same in your case as well?
Logs

flutter: 🔥 All Scrollables retrieved: scrollablesOnScreen: Found 2 widgets with type "Scrollable" (considering only hit-testable ones): [
  Scrollable(axisDirection: right, physics: null, restorationId: null, dependencies: [MediaQuery, ScrollConfiguration, UnmanagedRestorationScope, _InheritedTheme, _LocalizationsScope-[GlobalKey#5422f]], state: ScrollableState#c5ea2(position: ScrollPositionWithSingleContext#02183(offset: 0.0, range: 0.0..5691.0, viewport: 393.0, ScrollableState, BouncingScrollPhysics -> RangeMaintainingScrollPhysics, IdleScrollActivity#e0bc1, ScrollDirection.idle), effective physics: BouncingScrollPhysics -> RangeMaintainingScrollPhysics)),
  Scrollable(axisDirection: down, physics: AlwaysScrollableScrollPhysics, restorationId: null, dependencies: [MediaQuery, ScrollConfiguration, UnmanagedRestorationScope, _InheritedTheme, _LocalizationsScope-[GlobalKey#5422f]], state: ScrollableState#12bd0(position: ScrollPositionWithSingleContext#0d57b(offset: 0.0, range: 0.0..6518.0, vi<…>
flutter: =====================> GET SCROLL DETAILS PROCESS Scrollable(axisDirection: right, physics: null, restorationId: null, dependencies: [MediaQuery, ScrollConfiguration, UnmanagedRestorationScope, _InheritedTheme, _LocalizationsScope-[GlobalKey#5422f]], state: ScrollableState#c5ea2(position: ScrollPositionWithSingleContext#02183(offset: 0.0, range: 0.0..5691.0, viewport: 393.0, ScrollableState, BouncingScrollPhysics -> RangeMaintainingScrollPhysics, IdleScrollActivity#e0bc1, ScrollDirection.idle), effective physics: BouncingScrollPhysics -> RangeMaintainingScrollPhysics))
flutter: RenderBox: _RenderScrollSemantics#61406
flutter: globalPosition: Offset(0.0, 40.0)
flutter: scroll controller is null, we need to get the solution
flutter: =====================> END OF PROCESS (FAILED) ❌
flutter: =====================> GET SCROLL DETAILS PROCESS Scrollable(axisDirection: down, physics: AlwaysScrollableScrollPhysics, restorationId: null, dependencies: [MediaQuery, ScrollConfiguration, UnmanagedRestorationScope, _InheritedTheme, _LocalizationsScope-[GlobalKey#5422f]], state: ScrollableState#12bd0(position: ScrollPositionWithSingleContext#0d57b(offset: 0.0, range: 0.0..6518.0, viewport: 270.0, ScrollableState, AlwaysScrollableScrollPhysics -> BouncingScrollPhysics -> RangeMaintainingScrollPhysics, IdleScrollActivity#0ca05, ScrollDirection.idle), effective physics: AlwaysScrollableScrollPhysics -> BouncingScrollPhysics -> RangeMaintainingScrollPhysics))
flutter: RenderBox: _RenderScrollSemantics#c7c9f
flutter: globalPosition: Offset(0.0, 340.0)
flutter: =====================> END OF PROCESS (SUCCESS) ✅
flutter: extractedScrollableDescriptions: (Scrollable at Rect.fromLTRB(0.0, 340.0, 393.0, 610.0) with current offset 0.0)
flutter: =====================> GET SCROLL DETAILS PROCESS Scrollable(axisDirection: right, physics: null, restorationId: null, dependencies: [MediaQuery, ScrollConfiguration, UnmanagedRestorationScope, _InheritedTheme, _LocalizationsScope-[GlobalKey#5422f]], state: ScrollableState#c5ea2(position: ScrollPositionWithSingleContext#02183(offset: 0.0, range: 0.0..5691.0, viewport: 393.0, ScrollableState, BouncingScrollPhysics -> RangeMaintainingScrollPhysics, IdleScrollActivity#e0bc1, ScrollDirection.idle), effective physics: BouncingScrollPhysics -> RangeMaintainingScrollPhysics))
flutter: RenderBox: _RenderScrollSemantics#61406
flutter: globalPosition: Offset(0.0, 40.0)
flutter: scroll controller is null, we need to get the solution
flutter: =====================> END OF PROCESS (FAILED) ❌
flutter: =====================> GET SCROLL DETAILS PROCESS Scrollable(axisDirection: down, physics: AlwaysScrollableScrollPhysics, restorationId: null, dependencies: [MediaQuery, ScrollConfiguration, UnmanagedRestorationScope, _InheritedTheme, _LocalizationsScope-[GlobalKey#5422f]], state: ScrollableState#12bd0(position: ScrollPositionWithSingleContext#0d57b(offset: 0.0, range: 0.0..6518.0, viewport: 270.0, ScrollableState, AlwaysScrollableScrollPhysics -> BouncingScrollPhysics -> RangeMaintainingScrollPhysics, IdleScrollActivity#0ca05, ScrollDirection.idle), effective physics: AlwaysScrollableScrollPhysics -> BouncingScrollPhysics -> RangeMaintainingScrollPhysics))
flutter: RenderBox: _RenderScrollSemantics#c7c9f
flutter: globalPosition: Offset(0.0, 340.0)
flutter: =====================> END OF PROCESS (SUCCESS) ✅

Hey, as you can see in the logs one fails.
Both will print on screen when they are successful.
You can test this by uncommenting the ScrollController on line 91 in the main file then you'll both show up.

Thanks for your response @FilledStacks.
I can reproduce this now as well on my end.
stable, master flutter doctor -v

[!] Flutter (Channel stable, 3.16.9, on macOS 14.2.1 23C71 darwin-arm64, locale
    en-NG)
    • Flutter version 3.16.9 on channel stable at
      /Users/damilolaalimi/sdks/flutter
    ! Warning: `dart` on your path resolves to
      /opt/homebrew/Cellar/dart/3.1.5/libexec/bin/dart, which is not inside your
      current Flutter SDK checkout at /Users/damilolaalimi/sdks/flutter.
      Consider adding /Users/damilolaalimi/sdks/flutter/bin to the front of your
      path.
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 41456452f2 (6 days ago), 2024-01-25 10:06:23 -0800
    • Engine revision f40e976bed
    • Dart version 3.2.6
    • DevTools version 2.28.5
    • 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)
    • Android SDK at /Users/damilolaalimi/Library/Android/sdk
    • Platform android-34, build-tools 34.0.0
    • ANDROID_HOME = /Users/damilolaalimi/Library/Android/sdk
    • Java binary at: /Applications/Android
      Studio.app/Contents/jbr/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build
      17.0.6+0-17.0.6b802.4-9586694)
    • All Android licenses accepted.

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

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2022.2)
    • 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.6+0-17.0.6b802.4-9586694)

[!] Android Studio (version unknown)
    • Android Studio at /Users/damilolaalimi/Downloads/Android Studio
      Preview.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
    ✗ Unable to determine Android Studio version.
    • Java version OpenJDK Runtime Environment (build
      17.0.7+0-17.0.7b1000.6-10550314)

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

[✓] VS Code (version 1.83.1)
    • VS Code at /Users/damilolaalimi/Downloads/Visual Studio Code.app/Contents
    • Flutter extension version 3.78.0

[✓] Connected device (5 available)
    • sdk gphone64 arm64 (mobile) • emulator-5554                        •
      android-arm64  • Android 14 (API 34) (emulator)
    • Damilola’s iPhone (mobile)  • 00008110-001964480AE1801E            • ios
      • iOS 17.1.1 21B91
    • iPhone 15 Pro (mobile)      • 79E44FCE-BEA4-4C4B-9C1C-EFBD9964E172 • ios
      • com.apple.CoreSimulator.SimRuntime.iOS-17-2 (simulator)
    • macOS (desktop)             • macos                                •
      darwin-arm64   • macOS 14.2.1 23C71 darwin-arm64
    • Chrome (web)                • chrome                               •
      web-javascript • Google Chrome 121.0.6167.85

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

! Doctor found issues in 2 categories.

[!] Flutter (Channel master, 3.19.0-14.0.pre.26, on macOS 14.2.1 23C71 darwin-arm64, locale en-NG)
    • Flutter version 3.19.0-14.0.pre.26 on channel master at /Users/damilolaalimi/fvm/versions/master
    ! Warning: `dart` on your path resolves to /opt/homebrew/Cellar/dart/3.1.5/libexec/bin/dart, which is not inside your current Flutter SDK checkout at /Users/damilolaalimi/fvm/versions/master. Consider adding /Users/damilolaalimi/fvm/versions/master/bin to the front of your path.
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 16e014e884 (74 minutes ago), 2024-01-30 22:12:20 -0800
    • Engine revision 2d2d88068a
    • Dart version 3.4.0 (build 3.4.0-92.0.dev)
    • DevTools version 2.31.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.

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

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

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2022.2)
    • 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.6+0-17.0.6b802.4-9586694)

[!] Android Studio (version unknown)
    • Android Studio at /Users/damilolaalimi/Downloads/Android Studio Preview.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
    ✗ Unable to determine Android Studio version.
    • Java version OpenJDK Runtime Environment (build 17.0.7+0-17.0.7b1000.6-10550314)

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

[✓] VS Code (version 1.83.1)
    • VS Code at /Users/damilolaalimi/Downloads/Visual Studio Code.app/Contents
    • Flutter extension version 3.78.0

[✓] Connected device (5 available)
    • sdk gphone64 arm64 (mobile) • emulator-5554                        • android-arm64  • Android 14 (API 34) (emulator)
    • Damilola’s iPhone (mobile)  • 00008110-001964480AE1801E            • ios            • iOS 17.1.1 21B91
    • iPhone 15 Pro (mobile)      • 79E44FCE-BEA4-4C4B-9C1C-EFBD9964E172 • ios            • com.apple.CoreSimulator.SimRuntime.iOS-17-2 (simulator)
    • macOS (desktop)             • macos                                • darwin-arm64   • macOS 14.2.1 23C71 darwin-arm64
    • Chrome (web)                • chrome                               • web-javascript • Google Chrome 121.0.6167.85

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

! Doctor found issues in 2 categories.

Hi @FilledStacks, can you provide a code sample that reproduces the issue? Unfortunately, we cannot debug a Github repo.
Scrollables always have a ScrollController, it is required in order to create a ScrollPosition. If the user does not provide a ScrollController, one is created by the Scrollable internally.

Hi,
All the code is in the repo linked above, but I'll paste it down here as well.
What you're describing is what I assume as well, but a controller is never attached when using Axis.horizontal, only when using a vertical scroll.
My example reproduces the issue, here's all the code from the example.

main app
import 'package:flutter/material.dart';
import 'package:scroll_notification_test/scroll_finder.dart';
import 'package:scroll_notification_test/scrollable_description.dart';

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

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

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        // This is the theme of your application.
        //
        // TRY THIS: Try running your application with "flutter run". You'll see
        // the application has a purple toolbar. Then, without quitting the app,
        // try changing the seedColor in the colorScheme below to Colors.green
        // and then invoke "hot reload" (save your changes or press the "hot
        // reload" button in a Flutter-supported IDE, or press "r" if you used
        // the command line to start the app).
        //
        // Notice that the counter didn't reset back to zero; the application
        // state is not lost during the reload. To reset the state, use hot
        // restart instead.
        //
        // This works for code too, not just values: Most code changes can be
        // tested with just a hot reload.
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  // This widget is the home page of your application. It is stateful, meaning
  // that it has a State object (defined below) that contains fields that affect
  // how it looks.

  // This class is the configuration for the state. It holds the values (in this
  // case the title) provided by the parent (in this case the App widget) and
  // used by the build method of the State. Fields in a Widget subclass are
  // always marked "final".

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  List<ScrollableDescription> scrollableDescriptions = [];

  @override
  Widget build(BuildContext context) {
    // This method is rerun every time setState is called, for instance as done
    // by the _incrementCounter method above.
    //
    // The Flutter framework has been optimized to make rerunning build methods
    // fast, so that you can just rebuild anything that needs updating rather
    // than having to individually change instances of widgets.
    return Scaffold(
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          final scrollableFinder = ScrollableFinder();

          setState(() {
            scrollableDescriptions = scrollableFinder
                .getAllScrollableDescriprionsOnScreen()
                .toList();
          });
        },
      ),
      body: Column(
        mainAxisSize: MainAxisSize.max,
        children: <Widget>[
          const SizedBox(height: 40),
          SizedBox(
            width: MediaQuery.of(context).size.width,
            height: 270,
            child: ListView.separated(
              // Comment out below to see it working
              // controller: ScrollController(),
              scrollDirection: Axis.horizontal,
              itemCount: 20,
              separatorBuilder: (context, index) => SizedBox(width: 15),
              itemBuilder: (context, index) => Container(
                height: 250,
                width: 250,
                decoration: BoxDecoration(
                  color: Colors.yellow[100],
                  borderRadius: BorderRadius.circular(10),
                ),
                alignment: Alignment.center,
                child: Text(
                  'Horizontal-$index',
                  style: const TextStyle(
                    fontWeight: FontWeight.bold,
                    color: Colors.black,
                  ),
                ),
              ),
            ),
          ),
          const SizedBox(height: 30),
          SizedBox(
            width: MediaQuery.of(context).size.width,
            height: 270,
            child: ListView.separated(
              itemCount: 20,
              separatorBuilder: (context, index) => SizedBox(height: 15),
              itemBuilder: (context, index) => Container(
                height: 250,
                width: 250,
                decoration: BoxDecoration(
                  color: Colors.blue[100],
                  borderRadius: BorderRadius.circular(10),
                ),
                alignment: Alignment.center,
                child: Text(
                  'Vertical-$index',
                  style: const TextStyle(
                    fontWeight: FontWeight.bold,
                    color: Colors.black,
                  ),
                ),
              ),
            ),
          ),
          Text(scrollableDescriptions.join('\n')),
        ],
      ),
    );
  }
}

scrollable_finder.dart
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:scroll_notification_test/scrollable_description.dart';

class ScrollableFinder {
  Iterable<ScrollableDescription> getAllScrollableDescriprionsOnScreen() {
    final scrollablesOnScreen =
        find.byType(Scrollable).hitTestable().evaluate();

    print(
        '🔥 All Scrollables retrieved: scrollablesOnScreen: $scrollablesOnScreen 🔥\n\n');
    final extractedScrollableDescriptions = scrollablesOnScreen
        .map((item) {
          try {
            print(
                '=====================> GET SCROLL DETAILS PROCESS ${item}\n\n');
            // (scrollablesOnScreen.first as Scrollable).state.position.pixels
            RenderBox renderBox = item.findRenderObject() as RenderBox;

            print('RenderBox: $renderBox');
            Offset globalPostion = renderBox.localToGlobal(Offset.zero);

            print('globalPosition: $globalPostion');

            // TASK: Get the scroll position here
            final position =
                (item.widget as Scrollable).controller?.positions.first ??
                    (item.widget as Scrollable).controller?.position;

            if (position != null) {
              final scrollExtentByPixels = position.pixels;
              final maxScrollExtentByPixels = position.maxScrollExtent;
              final axis = position.axis;
              final rect = Rect.fromPoints(
                globalPostion,
                globalPostion.translate(
                  renderBox.size.width,
                  renderBox.size.height,
                ),
              );

              print('=====================> END OF PROCESS (SUCCESS) ✅ \n\n\n');

              return ScrollableDescription(
                axis: axis,
                rect: rect,
                scrollExtentByPixels: scrollExtentByPixels,
                maxScrollExtentByPixels: maxScrollExtentByPixels,
              );
            } else {
              print(
                'scroll controller is null, we need to get the solution',
              );
              print('=====================> END OF PROCESS (FAILED) ❌ \n\n\n');
            }
          } catch (e) {
            print(e);
            print('=====================> END OF PROCESS (FAILED) ❌ \n\n\n');
            return null;
          }
        })
        .where((element) => element != null)
        .cast<ScrollableDescription>();

    print('extractedScrollableDescriptions: $extractedScrollableDescriptions');

    return extractedScrollableDescriptions;
  }
}

scrollable_description.dart
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';

class ScrollableDescription {
  final Axis axis;
  final Rect rect;
  final double scrollExtentByPixels;
  final double maxScrollExtentByPixels;
  final bool nested;

  ScrollableDescription({
    required this.axis,
    required this.rect,
    required this.scrollExtentByPixels,
    required this.maxScrollExtentByPixels,
    this.nested = false,
  });

  @override
  String toString() {
    return 'Scrollable at $rect with current offset $scrollExtentByPixels';
  }
}

serializable_rect.dart
import 'dart:ui';

class SerializableRect extends Rect {
  const SerializableRect.fromLTWH(
    double left,
    double top,
    double width,
    double height,
  ) : super.fromLTWH(left, top, width, height);

  SerializableRect.fromPoints(Offset a, Offset b) : super.fromPoints(a, b);

  factory SerializableRect.fromJson(Map<String, dynamic> json) {
    return SerializableRect.fromLTWH(
      (json['left']! as num).toDouble(),
      (json['top']! as num).toDouble(),
      (json['width']! as num).toDouble(),
      (json['height']! as num).toDouble(),
    );
  }
  Map<String, dynamic> toJson() {
    return {
      'left': left,
      'top': top,
      'width': width,
      'height': height,
    };
  }
}

Pubspec updates
Add flutter_test to dependencies to use the scrollable_finder functionality.
flutter_test:
    sdk: flutter

Looks like this is your issue:
final position =
                (item.widget as Scrollable).controller?.positions.first ??
                    (item.widget as Scrollable).controller?.position;

This is looking up the Scrollable widget. Not its state. The reason why a ScrollController is set for the Scrollable widget when it is vertical is because the ScrollView assigns the PrimaryScrollController to vertical scroll views by default. Horizontal scroll views do not automatically attach to the PrimaryScrollController.
In your case the ScrollView that creates the Scrollable assigns the PrimaryScrollController when it is vertical, and nothing when it is horizontal. So when you look up the Scrollable widget there is no controller when it is horizontal because none has been assigned. In this case, in the ScrollableState, it will create a ScrollController if one has not been provided to the widget.
You can either set primary to true, so it will always inherit the PrimaryScrollController regardless of the scroll direction, or you can just assign a ScrollController.
I am going to close this as working as intended. Thank you!

I appreciate the response.
I would have preferred that the users of my package not have to do more work, but I'll add the solution you're recommending to my docs and FAQ.
Thank you for your time.


V1.17.x

RC for patch release v1.17.1

****************************************************************

libgrpc.so

     VM SIZE        FILE SIZE
 ++++++++++++++  ++++++++++++++

  [ = ]       0        0  [ = ]

****************************************************************

libgrpc++.so

     VM SIZE                                    FILE SIZE
 ++++++++++++++ GROWING                      ++++++++++++++
  +0.0%     +21 [None]                          +109  +0.0%
   +13%     +11 src/cpp/common/version_cc.cc     +11   +13%
       +28%     +11 grpc::Version[abi:cxx11]         +11   +28%

  +0.0%     +32 TOTAL                           +120  +0.0%

[trickle] No significant performance differences

Corrupt JSON data (indicates timeout or crash):
    bm_call_create.BM_IsolatedFilter_ClientChannelFilter_NoOp_.counters.new: 10
    bm_call_create.BM_IsolatedFilter_ClientChannelFilter_NoOp_.counters.old: 10

[microbenchmarks] No significant performance differences


don't work in IE/EDGE

Session wan't save in IE/EDGE, but in FIREFOX/CHROME everything works fine.
Tried on different mashines.
But custom cookies works fine.
So every page update creates new session on server.
Any help, please?

This has already been fixed in 405ecd1, but the latest version is not on PyPi yet.
@subyraman Could you please release the latest version on PyPi?

Hey yes sorry for the holdup I'll release this today.
On Thu, Jun 29, 2017, 6:12 AM Marijn Giesen<EMAIL_ADDRESS>wrote:

This has already been fixed in 405ecd1
https://github.com/subyraman/sanic_session/commit/405ecd1d2a400a184405d60f64124468d388e66e,
but the latest version is not on PyPi yet.
@subyraman https://github.com/subyraman Could you please release the
latest version on PyPi?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/subyraman/sanic_session/issues/17#issuecomment-311923528,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AD2voKCtCfHoWFJsrgTco4l2gOdjncJ6ks5sI3h1gaJpZM4Nob10
.

The latest version on pip is now up to date! https://pypi.python.org/pypi?:action=display&name=sanic_session&version=0.1.5


Center Webpage

🛠 Fixes Issue
Fixes #255
Related Issue/Addition to code

Centered Webpage

👨💻 Changes proposed

Type of change
Please delete options that are not relevant.

[ ] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)

✔ Check List (Check all the applicable boxes)

[ ] My code follows the code style of this project.
[ ] This PR does not contain plagiarized content.
[ ] The title of my pull request is a short description of the requested changes.

That didn't work as expected

Okay so because of the way the website is structured, centering it isn't possible.


fix(Event Hubs): Log compaction Lightbox image corrected

The first lightbox on the Log compaction page showed the second diagram of this page

#sign-off


[RPC] Transaction RPC#229

1.getTransactionByHash(vec[hash])
2.getTransactionByIndex(start, limit)
TODO:Optimize the executeTransaction Response

Need write a test case in the https://github.com/rooch-network/rooch/blob/5408355c1ff77f8c9c9c8c4904452668c6ceafeb/crates/testsuite/features/cmd.feature


Set a cookie to determine whether the widget should show or not

As a user I don't want to see the Digital Strike widget again on the same site after I have close it so I'm not annoyed by it.
Acceptance Criteria:

When a user clicks the "x" to close the widget, we should set a cookie in the browser that last, by default, for 1 day.
Is the cookie exists when the user visits the same domain again with the widget code, we should not show the widget.
The number of days for the cookie to exist should be configurable with the DIGITAL_CLIMATE_STRIKE_CONFIG object: cookieExpirationDays

Tech notes:

See https://github.com/fightforthefuture/redalert-widget/blob/master/static/widget.js for hints on how to implement this.

This was merged. Closing the issue.


Handle unauthorized queries correctly

Make sure that if a single subscription is unauthorized, the other ones keep working. Also, probably should include a comment in the project template about filtering in queries (not authorization rules).

Fixed the bug; still need to add a comment to the project template.


Ability to cross-compile MASM files

LLVM has a MASM assembler, llvm-ml, which can perform the tasks of ml.exe and ml64.exe (with the -m64 flag), that can be used when cross-compiling to Windows.
Currently, these .exe names are hardcoded, which feels a bit kludgy, but at least there is the woarkaround of adding a script like
$ cat tools/ml64.exe
#!/bin/bash
llvm-ml -m64 $@

which does indeed work. Ideally cc-rs could be taught about llvm-ml though. I see a few options, that may not be mutually exclusive:

Fallback to llvm-ml if ml64.exe isn't found
Use llvm-ml if host is not Windows
Add a MASM_ASM env var (or similar) to allow selection of an assembler. cc-rs would also have to detect the special case of llvm-ml and 64-bit and be able to add the -m64 flag.

Thoughts?

Thanks, I think option 1 and option 3 makes sense.
Fallback to llvm-ml helps with cross compilation, and having an environment for selecting ar makes a lot of sense.
Though I wonder if we could use existing env variable AR instead of a new one.

AR is for archivers, not assemblers....
But you're saying "assume you want an LLVM assember if you want an LLVM archiver"?

Thanks for correction, yeah I mixed them up
In that case having a MASM_ASM env var does make sense.

Yeah, having CC_ prefix definitely makes sense


Re-enable CUDA transform dialect tests

What happened?
During the recent LLVM integrate, the CUDA transform dialect test failed and were disabled. These need to be re-enabled again.
Here is the commit that disabled the tests.
https://github.com/iree-org/iree/pull/10740/commits/692eea09462a0f7c01546307d530e1779fdd9039

Hi @okkwon @nicolasvasilache  - can you assign a priority and remove the awaiting-triage label?

Fixed a while ago


Rework the library to use permissions API

Now that the Permissions API is here, we should be able to get rid of theuserDecisionTimeout property and instead take advantage of the PermissionState "prompt" value to detect whether the user is still deciding.
This will be a breaking change:

the API will change
the supported browsers will change (only Safari 16 and newer supports the Permissions API).

Turns out the "prompt" value does not change to "granted" or "denied" when user actually decides, so this is rather pointless to implement.


fix: fixed toMatch not to maintain the regex state which has global flag

Using chai's match, regex.lastIndex is maintained even if global flag is raised.

This PR changed the truth check from chai's match to RegExp constructor.

I am not so sure if we should do that implictly. I would feel that user should be responsible to reset the regex as this is how JS regex works.

That's true. I misunderstood the spec of the global flag.
This might be a bad change, since it forces the lastIndex to be reset by rebuilding the instance and exec it implicitly:thinking:


Push storage ToC restructure and readmes to live

Docs Build status updates of commit 889e4ac:
:warning: Validation status: warnings

File
Status
Preview URL
Details

api/overview/azure/storage-blob-readme.md
:warning:Warning
View
Details

api/overview/azure/storage-fileshares-readme.md
:warning:Warning
View
Details

api/overview/azure/storage-queues-readme.md
:warning:Warning
View
Details

api/toc.yml
:warning:Warning
View
Details

docs-ref-toc/top_level_toc.yml
:white_check_mark:Succeeded

api/overview/azure/storage-blob-readme.md

Line 68: [Warning] Invalid file link:(~/api/overview/azure/samples/Sample02_Auth.cs).
Line 191: [Warning] Invalid file link:(~/api/overview/azure/samples/Sample01b_HelloWorldAsync.cs).
Line 191: [Warning] Invalid file link:(~/api/overview/azure/samples/Sample01a_HelloWorld.cs).
Line 192: [Warning] Invalid file link:(~/api/overview/azure/samples/Sample02_Auth.cs).

api/overview/azure/storage-fileshares-readme.md

Line 216: [Warning] Invalid file link:(~/api/overview/azure/samples/Sample01b_HelloWorldAsync.cs).
Line 216: [Warning] Invalid file link:(~/api/overview/azure/samples/Sample01a_HelloWorld.cs).
Line 217: [Warning] Invalid file link:(~/api/overview/azure/samples/Sample02_Auth.cs).

api/overview/azure/storage-queues-readme.md

Line 174: [Warning] Invalid file link:(~/api/overview/azure/samples/Sample01b_HelloWorldAsync.cs).
Line 174: [Warning] Invalid file link:(~/api/overview/azure/samples/Sample01a_HelloWorld.cs).
Line 175: [Warning] Invalid file link:(~/api/overview/azure/samples/Sample02_Auth.cs).

api/toc.yml

[Warning] Unable to find file with uid "azure.net.sdk.landingPage.services.Storage.Client.DataLake" referenced by TOC file "api/toc.yml"
[Warning] Unable to find file with uid "azure.net.sdk.landingPage.services.Storage.Client.11" referenced by TOC file "api/toc.yml"

For more details, please refer to the build report.
Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.

Docs Build status updates of commit 3f52389:
:warning: Validation status: warnings

File
Status
Preview URL
Details

api/overview/azure/storage-blob-readme.md
:warning:Warning
View
Details

api/overview/azure/storage-fileshares-readme.md
:warning:Warning
View
Details

api/overview/azure/storage-queues-readme.md
:warning:Warning
View
Details

api/toc.yml
:warning:Warning
View
Details

docs-ref-toc/top_level_toc.yml
:white_check_mark:Succeeded

api/overview/azure/storage-blob-readme.md

Line 68: [Warning] Invalid file link:(~/api/overview/azure/samples/Sample02_Auth.cs).
Line 191: [Warning] Invalid file link:(~/api/overview/azure/samples/Sample01b_HelloWorldAsync.cs).
Line 191: [Warning] Invalid file link:(~/api/overview/azure/samples/Sample01a_HelloWorld.cs).
Line 192: [Warning] Invalid file link:(~/api/overview/azure/samples/Sample02_Auth.cs).

api/overview/azure/storage-fileshares-readme.md

Line 216: [Warning] Invalid file link:(~/api/overview/azure/samples/Sample01b_HelloWorldAsync.cs).
Line 216: [Warning] Invalid file link:(~/api/overview/azure/samples/Sample01a_HelloWorld.cs).
Line 217: [Warning] Invalid file link:(~/api/overview/azure/samples/Sample02_Auth.cs).

api/overview/azure/storage-queues-readme.md

Line 174: [Warning] Invalid file link:(~/api/overview/azure/samples/Sample01b_HelloWorldAsync.cs).
Line 174: [Warning] Invalid file link:(~/api/overview/azure/samples/Sample01a_HelloWorld.cs).
Line 175: [Warning] Invalid file link:(~/api/overview/azure/samples/Sample02_Auth.cs).

api/toc.yml

[Warning] Unable to find file with uid "azure.net.sdk.landingPage.services.Storage.Client.DataLake" referenced by TOC file "api/toc.yml"
[Warning] Unable to find file with uid "azure.net.sdk.landingPage.services.Storage.Client.11" referenced by TOC file "api/toc.yml"

For more details, please refer to the build report.
Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.


i18n function is not referentially stable

useI18n() returns a different function each time it's called. This makes it hard to use the i18n function inside a useEffect.

Do you have an example of an effect where you would want to use i18n?

I had a useEffect, where I wanted to use i18n inside. Had to pass the i18n as a dependency, or store it in a ref (which felt a bit hacky). Ended up taking a different route altogether, but it felt like something that should maybe be possible.

I agree it should be possible. While thinking about it I wondered of a use case where you would need i18n in an effect. Rendering usually happens in the 'render' function, so it might indicate unneeded complexity.

That is what actually was the case, and I fixed it by doing exactly that. We could also just note the fact that it isn't referentially stable in the docs.

I actually think it should be referentially more stable. So I would vote to add a useCallback around it.
That said, we should probably use it as a potential red flag when we see it used inside another hook during reviews.


Normalize Configuration Keys

Our configuration keys are inconsistent (e.g. some have namespaces, others don't) and there is no policy in place. We should establish and implement a policy on configuration key naming. This will be a breaking change.

believe this is fixed as of ae8a13faa82d57f51a15ebd5fa597940484d4477


Update arduino frameworks to latest version

Use latest arduino frameworks via platformio
esp8266 v4.1.0

currently breaks mqtt library (issue submitted)

esp32 v6.0.0

not yet tested

Check what other libraries can be updated.

MQTT library has been fixed so this will go into the next release.

Updated platformio esp8266 to v4.1.0
Updated platformio esp32 to v6.0.0
Updated h2zero/NimBLE-Arduino to b 1.4.1
Updated 256dpi/arduino-mqtt to v2.5.1
Created tag v1.0.0 for codeplea/tinyexpr to get control over releases
Created tag v1.0.0 for graphitemaster/incbin to get control over releases
Updated bblanchon/ArduinoJson to v6.20.0
Updated khoih-prog/ESP_WiFiManager to v1.12.1
Updated khoih-prog/ESP_DoubleResetDetector to v1.3.2

Had to revert ArduinoJSON to version newer than 6.18.5 since there is issues with float serialization. Need to investigate this further.


cannot start zeek

When filing a bug, please include the following headings if possible. Any
example text in this template can be deleted.
Overview of the Issue
cannot start. reproduction steps below
Reproduction Steps
build, run, login, sudo -u zeek -s, /opt/zeek/bin/zeekctl start

Zeeksuite version
0.0.2
Diag output from zeekctl diag
Hint: Run the zeekctl "deploy" command to get started.
[zeek]

No core file found.

Zeek 3.0.2-dev
Linux 4.15.0-72-generic

Zeek plugins: (none found)

==== No reporter.log

==== stderr.log
fatal error in /opt/zeek/share/zeek/site/local.zeek, line 113: can't find packages

==== stdout.log
max memory size         (kbytes, -m) unlimited
data seg size           (kbytes, -d) unlimited
virtual memory          (kbytes, -v) unlimited
core file size          (blocks, -c) unlimited

==== .cmdline
-i enp0s3 -U .status -p zeekctl -p zeekctl-live -p standalone -p local -p zeek local.zeek zeekctl zeekctl/standalone zeekctl/auto

==== .env_vars
PATH=/opt/zeek/bin:/opt/zeek/share/zeekctl/scripts:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
ZEEKPATH=/opt/zeek/spool/installed-scripts-do-not-touch/site::/opt/zeek/spool/installed-scripts-do-not-touch/auto:/opt/zeek/share/zeek:/opt/zeek/share/zeek/policy:/opt/zeek/share/zeek/site
CLUSTER_NODE=

==== .status
TERMINATED [atexit]

==== No prof.log

==== No packet_filter.log

==== No loaded_scripts.log

Operating system and Environment details
arch linux:
♥ λ uname -a
Linux bender 5.4.2-arch1-1 #1 SMP PREEMPT Thu, 05 Dec 2019 12:29:40 +0000 x86_64 GNU/Linux

==== stderr.log
fatal error: problem with interface eth0 (pcap_error: SIOCGIFHWADDR: No such devi ce (pcap_activate))

looks like something is passing this
=== .cmdline
-i enp0s3 -U .status -p zeekctl -p zeekctl-live -p standalone -p local -p zeek local.zeek zeekctl zeekctl/standalone zeekctl/auto

i see. ok. will fix this this evening
fatal error in /opt/zeek/share/zeek/site/local.zeek, line 113: can't find packages

root cause: typo in template for zkg config causes packages to not get installed. even though it failed (but didn't stop build) we inserted the load packages line to the config which poisoned zeek. working on a fix now.


Add remote debugging over SSH

There doesn't seem to be a way to use ptvsd to do remote debugging over an SSH connection, which is unfortunate due to the kind of work I am doing, as I am running tasks on a linux supercomputer over SSH. Are you currently working on adding this feature?

I don't think we've had this request before, so it hasn't been on our plan.
I wonder whether you could achieve this by setting plink.exe (from PuTTY) as your interpreter path and some cleverly crafted SSH commands? @int19h will have a better idea.

Yes, this should be doable with SSH tunneling, following this guide as an example:
http://howto.ccs.neu.edu/howto/windows/ssh-port-tunneling-with-putty/
So you'd tunnel local port 5678 to the same remote port, and then use localhost as the qualifier in Attach to Process dialog.

Ok, thanks for the help. I was told that this was possible in PyCharm, but never followed up on this claim, but I like VS a lot more, so I was just asking.

I'm not sure whether this is due to my incompetence or to PTVS, but when I try to do the steps on the webpage and connect to localhost:5678 in Visual Studio, I get an error dialog box that says: Error displaying the Port Selector dialog for this transport. Not implemented

Are you clicking on the "Find" button, by chance? You need to enter the address in the Qualifier textbox and then press Enter to get the process list below to refresh.

Yes. I enter 'localhost:5678' into the Qualifier textbook, then press Find, and then get the error dialog box.

It's not the most well designed dialog, unfortunately.
The "Find" button is to help you find something to put in the Qualifier textbox, and we don't have any way to help you find anything.
Once you've typed something manually, hit Enter and it will refresh the list below.

Is perhaps my installation corrupted? I get the same error message (Error displaying the Port Selector dialog for this transport. Not implemented) when I click the Find box when it is empty...

No, we just don't implement the port selector dialog. The error message is 100% accurate.
You'll need to enter the host and port manually, then hit enter. Don't click the Find button.

It's still not working. I'm getting alternate error messages telling me that either that either the remote client is not supported by VS, that it can't connect to localhost:5678, or that it cannot find any running processes ( I followed the directions regarding importing ptvsd and the line ptvsd.enable_attach())....

Is one of those error messages "Remote server is not a supported Python Tools for Visual Studio debugging server"?
If so, then whatever you're doing when that particular one occurs, that should be the right sequence of steps. It means that it was actually able to reach out to the other side and initiate the handshake, but the protocol version was mismatched. So the tunnel is working in that case, you've just got something wrong on the other side.
Which version of PTVS are you running, and how did you install ptvsd on the remote machine?

For the remote machine - pip install ptvsd. Installed it in Python 3, which is what I am using to run the python program.
I am running PTVS 2.2 - the latest one, I believe.

I am running the Python jobs from a batch script is this maybe the problem?

How they're launched shouldn't matter, so long as they're still there when you are trying to attach (i.e. either a single job is sufficiently long running, or else it calls ptvsd.wait_for_attach() to pause execution until debugger is there).

That's weird. Is there any we can figure out what is causing the problem?

I'm going to try and set it up myself and see if I run into any issues. If I can't reproduce it, I'll ask you for more details about your setup.

Hm, the tunneling definitely works for me. Can you take a look at these screenshots and see if your setup is somehow different?

(Note that the forwarding is set to localhost, because the target host name is relative to the machine you're ssh'ing into - so if you want to forward to that very machine, localhost is the easiest way to specify that.)

Hmm, I think that I may have set the wrong port. I'll take a look when I get home

Still not working for me. Something I forgot to mention is that I am using a VPN as well as putty. Is this perhaps what is causing the issue?

So long as you can use Putty to actually connect to that machine, and it works (i.e. you have the shell), I'd expect the tunnel to work also. But I'm not really too familiar with SSH tunneling in general, so it's hard for me to say what effect would VPN (or anything else you might have there; a firewall?) or similar have on it.

I am unsure whether there is a firewall. I will try this same thing on another Linux server I have access to.

I like ptvs more than pyCharm for some reasons :) but...
It's a shame ptvs do not implement "remote debugging over an SSH connection" like pyCharm. I work a lot with boards like "Raspberry Pi" and I do not like to install a remote debugger server tool, and edit my modules with some special code, for such a task.


Trying to write a plugin for Firestore, need help understanding how to

Fairly new to Vuex-ORM, I tried going through the code of the project and of the other plugins available for Axios and GraphQL but I'm a bit lost, I thought I'd ask directly for pointers here.
I want to write a plugin for Firestore, this what I have so far
export default {
    install(components, options) {
        components.Query.prototype.create = async function(entity) {
            this.model.commit(state => {
                state.creating = {
                    loading: true,
                    error: null
                }
            })
            try {
                const result = await options.firebase
                    .firestore()
                    .collection(this.entity)
                    .add(entity)
                this.model.commit(state => {
                    state.creating = {
                        loading: false,
                        error: null
                    }
                })
            } catch (e) {
                this.model.commit(state => {
                    state.creating = {
                        loading: false,
                        error: e
                    }
                })
            }
        }

        components.Query.prototype.isCreating = function() {
            console.log("isCreating", this.state.creating)
            return this.state.creating || { loading: false, error: null }
        }

        components.Query.prototype.isLoading = function() {
            console.log("isLoading", this.state.fetching)
            return this.state.fetching || false
        }

        components.Query.prototype.subscribe = function() {
            this.model.commit(state => {
                state.fetching = true
            })
            return options.firebase
                .firestore()
                .collection(this.entity)
                .onSnapshot(querySnapshot => {
                    let entities = []
                    querySnapshot.forEach(doc => {
                        entities.push({ id: doc.id, ...doc.data() })
                    })
                    this.model.insert({ data: entities })
                    this.model.commit(state => {
                        state.fetching = false
                    })
                })
        }
    }
}

So fetching data and creating data works but I'm having trouble reading the state.
The state is updated correctly, but changes don't seem to update my components
  computed: {
    creating() {
      console.log("creating state", Strategy.query().isCreating());
      return Strategy.query().isCreating();
    }
  },

I suspect adding a method to query is probably not the way to get the state but I don't understand how I'm supposed to add my own Mutations and Getters that are scoped to the model, and accessible doing something like Strategy.creating()
Would love to have some help on this, so I can write something clean

Hmmm, never tried this approach.
Could you check if directly referencing the state in computed property would work?
computed: {
  creating() {
    return this.$store.state.entities.strategies.creating
  }
}

If this doesn't work, it might be something to do with state update logic.

computed: {
  creating() {
    return this.$store.state.entities.strategies.creating
  }
}

This does not work either.
What would be the preferred approach to update state and access it through the model instance ?

So I actually managed to solve it by modifying the $mutate in RootMutations, or rather rolling a modified version as well with a modifiedCommit on the Model to use it.
import VuexORMFirestore from "./VuexORMFirestore"

export default {
    install(components, options) {
        components.RootMutations.modifiedMutate = function(state, payload) {
            console.log("mutate this", this.state["entities"])
            console.log("mutate state", state[payload.entity])
            console.log("mutate payload callback", payload.callback(state[payload.entity]))

            const { $connection, $name } = state[payload.entity]

            console.log($connection, $name)

            this.state[$connection][$name] = {
                ...this.state[$connection][$name],
                ...payload.callback(this.state[$connection][$name])
            }
        }

        components.Model.modifiedCommit = function(callback) {
            this.store().commit(`${this.database().namespace}/modifiedMutate`, {
                entity: this.entity,
                callback
            })
        }

        components.Query.prototype.create = async function(entity) {
            this.model.modifiedCommit(state => {
                return {
                    creating: {
                        loading: true,
                        error: null
                    }
                }
            })
            try {
                const result = await options.firebase
                    .firestore()
                    .collection(this.entity)
                    .add(entity)
                this.model.modifiedCommit(state => {
                    state.creating = {
                        loading: false,
                        error: new Error("test 2")
                    }
                })
            } catch (e) {
                this.model.modifiedCommit(state => {
                    state.creating = {
                        loading: false,
                        error: e
                    }
                })
            }
        }

        components.Query.prototype.isCreating = function() {
            console.log("isCreating", this.state.creating)
            return this.state.creating || { loading: false, error: null }
        }

        components.Query.prototype.isLoading = function() {
            console.log("isLoading", this.state.fetching)
            return this.state.fetching || false
        }

        components.Query.prototype.subscribe = function() {
            this.model.modifiedCommit(state => {
                return {
                    fetching: true
                }
            })
            return options.firebase
                .firestore()
                .collection(this.entity)
                .onSnapshot(querySnapshot => {
                    let entities = []
                    querySnapshot.forEach(doc => {
                        entities.push({ id: doc.id, ...doc.data() })
                    })
                    this.model.insert({ data: entities })
                    this.model.modifiedCommit(state => {
                        return {
                            fetching: false
                        }
                    })
                })
        }
    }
}

As you can see, it also works if I don't return but simply assign on the state that is passed to the callback, which I thought was weird.
But I guess it makes sense if the only problem was that the state wasn't getting a new object assigned, since it was updated correctly before.

Do the static states, i.e. creating, exist on the models at the time of calling isCreating?
One thing I noticed, when you return this.state.creating || { loading: false, error: null } if the state doesn't exist or is false you're returning a plain object – this is where reactivity gets lost.

I'd like to add those states to each model with the plugin, and not have to define them on the models themselves.
Not sure how to accomplish that while retaining the ability to define custom state via the models.

I think it boils down to naming conventions. It’s not dissimilar to how you would prevent state clash in Vuex. Perhaps $firestore or similar could be attached to each entity, which could then contain all necessary states required by the plugin.
There's no easy way to tap into Model states, so I would recommend defining states on models a little differently than what's documented. Maybe something like this in your install:
const { Model } = components

Object.assign(Model, {
  state() {
    const state = Model.states
      ? typeof Model.states === 'function'
        ? Model.states()
        : Model.states
      : {}

    state.$firestore = {
      creating: {
        loading: false,
        error: null
      },
      fetching: false
    }

    return state
  }
})

This avoids any lengthy effort to get states registered with the module. Consider it a shortcut.
Model states can then be assigned as such:
class User extends Model {
  static entity = 'users'

  static states() {
    return {
      foo: "bar"
    }
  }
}

Note that model states are now defined using states() instead of state().

Thanks for that, it now works fine without having to have my own modifiedMutate and modifiedCommit functions.
However, there is something really strange happening
Query.prototype.create = async function(data) {
            this.model.commit(state => {
                state.$firestore.creating = {
                    loading: true,
                    error: null
                }
            })

            try {
                const result = await options.firebase
                    .firestore()
                    .collection(this.entity)
                    .add({ test: undefined, ...data })
                this.model.commit(state => {
                    state.$firestore.creating = {
                        loading: false,
                        error: null
                    }
                })
                return result.id
            } catch (e) {
                this.model.commit(state => {
                    state.$firestore.creating = {
                        loading: false,
                        error: e
                    }
                })
            }
        }

In this code, I pass an undefined field to the add function so that an error occurs (Firebase won't accept an undefined field)
And while I can see through the dev tools that the states are occuring correctly, meaning I get {loading: false, error: null then loading: true, error: null then loading: false, error: (...)}
The component gets a different result, when I log the state through the computed property
computed: {
    isFormValid() {
      //console.log("is form valid");
      return !Object.values(this.fields).some(f => f.error);
    },
    creating() {
      const creating = Strategy.query().isCreating();
      console.log("creating state", creating);
      return creating;
    }
  },

The log outputs only shows the initial state then directly into error state, without logging the loading state

Ahh my bad. I made the assumption this was to be a personal plugin.

Is there a way to achieve what your solution does but without having to change the original behavior?

While there aren't any Database hooks to easily access this sort of data (maybe we can look into this), however, you could tap into Database and add the state to the modules at registration time. All entities will have these states from the outset whilst maintaining any model states and module states (when registering models) where applicable.
const { Database } = components

// Preserve the original `start` method
const _start = Database.prototype.start

// Invoked at the time of Vuex registration
Database.prototype.start = function(...args) {
  this.entities.map((entity) => {
    Object.assign(entity.module, {
      state: {
        // Preserve any module states
        ...entity.module.state,
        // Plugin states
        $firestore: {
          creating: {
            loading: false,
            error: null
          },
          fetching: false
        }
      }
    })

    return entity
  })

  // Execute the original method
  _start.apply(this, args)
}

You could add some getters to make it easier to get plugin states, for example:
const { Getters } = components

Object.assign(Getters, {
  $firestore: (state) => (prop) => (prop ? state.$firestore[prop] : state.$firestore)
})

And attach some methods to the model to call the getters, for example:
const { Model } = components

Object.assign(Model, {
  isCreating() {
    return this.getters('$firestore')('creating')
  },
  isFetching() {
    return this.getters('$firestore')('fetching')
  }
})

Et voila, reactivity...
computed: {
  creating() {
    return Strategy.isCreating()
  },
  fetching() {
    return Strategy.isFetching()
  }
}

If you would like to discuss this further, I invite you to join the community Slack channel.
If you have find any issue with Vuex ORM itself, please don't hesitate to open a new issue.

Thanks you've been incredibly helpful ! Closing this and I'll join the Slack channel to discuss this more.


add Condition parse feature to cfn2py script

parse template json condition sections

Nice, I can play around with this soon and see if it works for my case.

INPUT.JSON:
{
    "Description" : "Foo Bar",
    "Resources" : { },

    "Parameters" : {
        "EnvironmentType" : {
            "Description" : "Resource sizes and settings differ based on environment",
            "Type" : "String",
            "Default" : "dev",
            "AllowedValues" : [ "dev", "stag", "prod"],
            "ConstraintDescription" : "choose one of allowed types."
        }
    },
    "Conditions" : {
        "UseDevSettings" : {"Fn::Equals": [{"Ref": "EnvironmentType"}, "dev"]},
        "UseStagSettings" : {"Fn::Equals": [{"Ref": "EnvironmentType"}, "stag"]},
        "UseProdSettings" : {"Fn::Equals": [{"Ref": "EnvironmentType"}, "prod"]}
    },

    "Outputs" : {
    }
}

BEFORE #PR351
from troposphere import Base64, Select, FindInMap, GetAtt, GetAZs, Join, Output
from troposphere import Parameter, Ref, Tags, Template
from troposphere.cloudformation import Init
from troposphere.cloudfront import Distribution, DistributionConfig
from troposphere.cloudfront import Origin, DefaultCacheBehavior
from troposphere.ec2 import PortRange

t = Template()

t.add_description("""\
Foo Bar""")
EnvironmentType = t.add_parameter(Parameter(
    "EnvironmentType",
    Default="dev",
    ConstraintDescription="choose one of allowed types.",
    Type="String",
    Description="Resource sizes and settings differ based on environment",
    AllowedValues=["dev", "stag", "prod"],
))

print(t.to_json())

AFTER #PR351 OUTPUT:
from troposphere import Base64, Select, FindInMap, GetAtt, GetAZs, Join, Output
from troposphere import Parameter, Ref, Tags, Template, Not, Equals, And, Or, If
from troposphere.cloudformation import Init
from troposphere.cloudfront import Distribution, DistributionConfig
from troposphere.cloudfront import Origin, DefaultCacheBehavior
from troposphere.ec2 import PortRange

t = Template()

t.add_description("""\
Foo Bar""")
EnvironmentType = t.add_parameter(Parameter(
    "EnvironmentType",
    Default="dev",
    ConstraintDescription="choose one of allowed types.",
    Type="String",
    Description="Resource sizes and settings differ based on environment",
    AllowedValues=["dev", "stag", "prod"],
))

t.add_condition("UseStagSettings", Equals(Ref(EnvironmentType), stag) )

t.add_condition("UseProdSettings", Equals(Ref(EnvironmentType), prod) )

t.add_condition("UseDevSettings", Equals(Ref(EnvironmentType), dev) )

print(t.to_json())

Notice in the last file listed, the third argument to the add_condition method is stag, prod, or dev. I expected those to be printed as string literals since they are strings in the input. I may have time to look further into this over the weekend.

I'd love to see this merged. Let us know if we can help test! 👍

now quotes string!
{
    "Description" : "Foo Bar",
    "Resources" : { },

    "Parameters" : {
        "EnvironmentType" : {
            "Description" : "Resource sizes and settings differ based on environment",
            "Type" : "String",
            "Default" : "dev",
            "AllowedValues" : ["test", "dev", "stag", "prod"],
            "ConstraintDescription" : "choose one of allowed types."
        }
    },
    "Conditions" : {
        "UseDevSettings" : {"Fn::Equals": [{"Ref": "EnvironmentType"}, "dev"]},
        "UseStagSettings" : {"Fn::Equals": [{"Ref": "EnvironmentType"}, "stag"]},
        "UseProdSettings" : {"Fn::Equals": [{"Ref": "EnvironmentType"}, "prod"]},
        "UsecTestSettings" : {"Fn::Equals": ["test" , {"Ref": "EnvironmentType"}]}
    },

    "Outputs" : {
    }
}

scripts/cfn2py  x.json
from troposphere import Base64, Select, FindInMap, GetAtt, GetAZs, Join, Output
from troposphere import Parameter, Ref, Tags, Template, Not, Equals, And, Or, If
from troposphere.cloudformation import Init
from troposphere.cloudfront import Distribution, DistributionConfig
from troposphere.cloudfront import Origin, DefaultCacheBehavior
from troposphere.ec2 import PortRange

t = Template()

t.add_description("""\
Foo Bar""")
EnvironmentType = t.add_parameter(Parameter(
    "EnvironmentType",
    Default="dev",
    ConstraintDescription="choose one of allowed types.",
    Type="String",
    Description="Resource sizes and settings differ based on environment",
    AllowedValues=["test", "dev", "stag", "prod"],
))

t.add_condition("UseStagSettings", Equals(Ref(EnvironmentType), "stag") )

t.add_condition("UseProdSettings", Equals(Ref(EnvironmentType), "prod") )

t.add_condition("UseDevSettings", Equals(Ref(EnvironmentType), "dev") )

t.add_condition("UsecTestSettings", Equals("test", Ref(EnvironmentType)) )

print(t.to_json())

Hi, could this be merged now ?


Added members feature to labs

no issue

Added new members settings/toggle to labs

depends on - https://github.com/TryGhost/Ghost/pull/10537

Coverage decreased (-0.4%) to 70.612% when pulling 93af5d4fb7250372d158d00d74dc06664b3dacec on members-labs-final into 17854c6c813dcf7d01506d9e562dcd8ed5314301 on master.


Make empty tiles load as 'null' instead of as a Tile object with a -1 index

My current game has a 300x500 map with 12 layers, leading to almost 2 million possible tiles. After seeing that my game was using nearly 400MB space, I looked into what the cause was. Turns out, empty tiles are actually created as tile objects with a -1 index. After some digging, I found a little evidence that it used to load as null, or some other value, but was changed to actually create a -1 indexed Tile object.
It would reduce memory overhead and loading times significantly if these tiles were not created. I would think for most games, most tile layers are sparse.
I am considering making these changes, but some knowledge first would be helpful. Is there a specific reason that these -1 indexed tiles are created?
Thanks.

I'm interested in that too. :)

This feature is now available in the dev branch.

Just to explain - set the value before creating your Tilemap.


Server list does not show server name correctly

In Discord, the server name is shown in the icon area when a server has no server picture. However in Unicord, when the server name does not contain the Latin alphabet in the first 3 letters, it becomes blank.
I confirmed this on 2.0.24-0b054b2 (Lumia 950 1709) and 1.8.1 (Yoga 5G arm64 23H2).
Expected behavior can be seen in the second picture.

Hmm, looks like an issue in PersonPicture not really handling localisation properly, will dig

The situation is changed in 2.0 beta1.
Instead of nothing, the default user icon (or something) is shown regardless of the theme.


[BUG] Inheritance doesn't work for backlinks?

Describe the bug
Since https://beanie-odm.dev/tutorial/inheritance/#relations says that "Linked documents will be resolved into the respective classes", I also expected this to be the case for backlinks. However, that does not seem to be the case?
To Reproduce
class Foo(Document):
    bar: Link[Bar]

    class Settings:
         is_root = True

class SubFoo1(Document):
    new_prop_1: str

class SubFoo2(Document):
    new_prop_2: int

class Bar:
   foos: list[BackLink[Foo]] = Field(json_schema_extra={"original_field": "bar"})

bar = Bar(foos=[])
await bar.insert()

sf1 = SubFoo1(bar=bar, new_prop_1="test")
await sf1.insert()

sf2 = SubFoo2(bar=bar, new_prop_2=2)
await sf2.insert()

bar = await Bar.get(bar.id)

Expected behavior
In the above, I expected  bar.get() to return an object with foos set to [SubFoo1(...), SubFoo2(...)]; however I get a list of [Foo(...), Foo(...)].
Additional context
Aside from a proper fix, is there any temporary workaround? I spent a long time designing my new models/logic around this only to find out that the inheritance for backlinks is broken..


Extra "Updating index" messages after publishing a crate

Problem
This is split out of #11062
When we poll for the crate having been published, it reports "Updating index" for each iteration

One thing we may want to look at separately is the UI while it is waiting. Cargo just keeps repeating Updating crates.io index. I'm wondering if it might be better to suppress the Updating message? That could maybe be implemented by temporarily enabling quiet mode. I'm also wondering about maybe showing some kind of busy indicator (maybe a progress bar that ticks forward for each second)?

Steps
With the latest cargo, publish a crate
Possible Solution(s)
Temporarily turn on quiet in the code
Notes
No response
Version
No response

I think this only happens with git registries, so the problem will diminish over time.
There is the potential for multiple exit points, so RAII would be the most robust way of handling this.  At first, I thought lifetimes made that impossible due  conflicting access to Shell but instead of the Drop struct holding onto Shell, it can hold onto Config, so it shouldn't be too hard to implement.

I think this only happens with git registries, so the problem will diminish over time.

From my experience it happens on crates.io so that seems pretty widespread. Since cargo is already capable of showing progress bars I wonder if something like that could be used here instead. It almost looks like a bug now.

Yes, it does happen with crates.io when used via git. I believe in my testing, we don't see that when accessing crates.io via the soon-to-stablize sparse api. Granted, when I wrote this, I thought sparse registry support would have been stablized by now.


1.13 availability

Is this a request for help?: No

Is this an ISSUE or FEATURE REQUEST? (choose one): Feature Request

What version of acs-engine?: latest

We have a 1.13-alpha.2 cluster in our dev environment that we'd like to upgrade to 1.13.0 final in order to get the latest fixes and security patches. Is there an ETA on when it will be available through acs-engine?
Thanks.

Hi @rrudduck, please see https://github.com/Azure/aks-engine/issues/73. 1.13.0 release is blocked on broken metrics server. https://github.com/kubernetes/kubernetes/pull/71736 was merged with a fix, we are waiting for the patch to land to release 1.13.

@CecileRobertMichon Do you have an ETA on the 1.13 patches?

@feiskyer do you have an estimate of when 1.13.1 will be released with the fix?


[stdlib] NaN and strict total order

Adding a note to the doc comment on Comparable protocol, saying that it
only defines strict total order on normal (non-exceptional) values of
conforming types.

LGTM, @dabrahams do you agree?

Yes I like the language they chose for that

Uh, wait. That whole "non-exceptional" thing should be removed.

Addressed the "non-exceptional" part. Merging.


Added River map

Hi @VictorVelarde , Sorry I forgot to update about this. I left this as WiP before going on holidays and didn't update it. Should I keep working on the demo? As I think it was not clear at the end if it was going to be published or not


Possible to influence the search results order?

Example:
when I type "ins" into Flow Launcher, the first result from Favorties plugin is a folder called "Admin Stuff" and the second one is "Instagram". I find this a bit annoying, because arguably "Instagram" is a closer match to "ins". Is there any way to influence this? Both search results are Favorites btw.

I don't know if it can be done, I think this would be difficult to do for me and the Flow Launcher dev team as there is much complexity. Ideally, there should be settings that allow you to get what you are asking, I agree with that. When I have time and be annoyed by the order myself, I will work on this.
Related: https://github.com/Flow-Launcher/Flow.Launcher/issues/768

If you use flow API's search functionality you should get the "Instagram" before "Admin Stuff" out of the box with the searches.
Upcoming v1.20.0 release will also allow fixing the result order via the Result class #3144.


Team Webpage

Hi @karntrehan @prtkjakhar @riya-2206, creating this ticket for the creation of the new Team webpage. The wireframe will be shared by 30th May.
We can separately discuss when this can be picked up, thanks!

Awaiting data clarity.

Part-time design received. Implemented as well.


Please add option to only commit, no release and release only

I see situation a alpha. should only. be own git, so I would like to choose if my run should only end on git, or also on NPM
In addition, if the version is already. on git but not NPM, an option to only "release" would be great too

So basically you want to skip the version bump? For the automatic release it would still require tagging the current commit, so there must not already be a tag with that version.

Or do you still want to bump the version but skip the npm release? In the current workflow, all git tags are released on npm. Alpha version should have a prerelease suffix like v1.2.3-alpha.0.
The build action would release those too: https://github.com/ioBroker/create-adapter/blob/master/templates/_github/workflows/test-and-release.yml.ts#L28-L29 so it would be up to you to decide if you want these two lines active or not.

hmm than it can make sense to have an alpha option ?
alpha meaning : only git push with tag, patch/minor/major than additional to publish npm
if you use minor as example it will run all, if I use alpha its only using the routines up to git.
If I use patch/minor/major after that it sees an version on git but not NPM and handles thee publish
i likes to test alpha before releasing on NPM as on NPM al beta teste see the new version which leads in indeed issues

Like I said, comment out the two lines in your Github Actions workflow so the release step doesn't trigger. Then you can use the pre-versions to push the release on github without releasing on npm:

npm run release preminor alpha - Bumps e.g. 1.0.0 to 1.1.0-alpha.0
npm run release premajor beta - Bumps e.g. 1.0.0 to 2.0.0-beta.0
npm run release prerelease - Bumps a prerelease version, e.g. 1.1.0-alpha.0 to 1.1.0-alpha.1 and so on.

I think this issue should rather be adding good documentation instead of a new feature :)

I think this issue should rather be adding good documentation instead of a new feature :)

agree, as I explained the used case is having an alpha not on latest repo so based on documentation of way of handling the Flow this could be accomplished

i fixed this by basically only having the release script running when I publish anything to the main branch, I would suggest to add this as a best practice ?
https://github.com/DrozmotiX/ioBroker.esphome/blob/main/.github/workflows/test-and-release.yml#L8

I don't see how that solves the problem though. If you push a tag, the action will run for that tag too.
And by limiting the workflow to the main branch, your tests won't run for the branch.
If you want to selectively disable parts of the release, it needs to be checked in the steps of the release job:
https://github.com/DrozmotiX/ioBroker.esphome/blob/main/.github/workflows/test-and-release.yml#L103

If you want to selectively disable parts of the release, it needs to be checked in the steps of the release job:

agree, good point.... anyway, I guess he issue can be closed by adding this to the documentation or having his issue as explanation ?

We could add the explanation as comments into the template.

@AlCalzone
To which two lines in the template are you referring to? The template seems to have changed since you wrote your comment.
Which lines should I comment out if I do not want to have pre-versions published on NPM but only patch/minor/major?

@pdbjjens The one near the start of the workflow file that says "pre-releases" above it:
      # pre-releases
      - "v[0-9]+.[0-9]+.[0-9]+-**"

@AlCalzone
Thanks a lot for the quick reply. I'll give it a try.


Raspberry pi 5 can't load pigpio

Which addon?
Pigpio
Describe the bug
I've changed to raspberry pi 5 recentltly, can't load the pigpio. Here's the last log.
Can't initialise pigpio library
[11:22:39] INFO: Started pigpio
2024-03-10 11:22:39 gpioHardwareRevision: unknown rev code (d04170)
2024-03-10 11:22:39 initCheckPermitted:
+---------------------------------------------------------+
|Sorry, this system does not appear to be a raspberry pi. |
|aborting.                                                |
+---------------------------------------------------------+
Can't initialise pigpio library
To Reproduce
In home assistance go to settings ->  Add-ons -> pigpio -> start
In the log returns the error above.
The add-on seems to be running
But the switch I've made is not working.
Expected behavior
Recognize raspberry pi 5
Screenshots

System
Raspberry pi 5 (rpi5-64)

versions:
Core
2024.3.0
Supervisor
2024.02.1
Operating System
12.0
Frontend
20240306.0

Pigpio is currently not supported on the PI 5. Until this happens officially, the addon will not work.
This is discussed here: https://github.com/joan2937/pigpio/issues/589


4th and 5th mouse buttons paste, which isn't intended.

Issue Type: Bug
I have a Logitech MX master, and I have the 4th & 5th mouse buttons mapped to the keystroke cmd+` and shift+cmd+` respectively. This means, on OSX, these buttons cycle through the windows of an app. This is done via the "Logi Options" app.
However, in VSCode, pressing these buttons also triggers 'paste'. This only happens in VSCode, it doesn't happen in other apps. It also happens with extensions disabled.
I wouldn't expect these buttons to trigger 'paste'.
VS Code version: Code - Insiders 1.40.0-insider (31f577ec88dc96ad2028699fb597b19022224b46, 2019-10-30T05:36:49.155Z)
OS version: Darwin x64 18.7.0

System Info

Item
Value

CPUs
Intel(R) Core(TM) i7-6920HQ CPU @ 2.90GHz (8 x 2900)

GPU Status
2d_canvas: enabledflash_3d: enabledflash_stage3d: enabledflash_stage3d_baseline: enabledgpu_compositing: enabledmetal: disabled_offmultiple_raster_threads: enabled_onoop_rasterization: disabled_offprotected_video_decode: unavailable_offrasterization: enabledskia_renderer: disabled_offsurface_control: disabled_offsurface_synchronization: enabled_onvideo_decode: enabledviz_display_compositor: enabled_onviz_hit_test_surface_layer: disabled_offwebgl: enabledwebgl2: enabled

Load (avg)
2, 4, 3

Memory (System)
16.00GB (1.53GB free)

Process Argv
--disable-extensions

Screen Reader
no

VM
0%

Extensions disabled

Duplicate of #80804
I believe this is an issue with the driver of this specific mouse. I think I saw on their marketing page that the mouse contains clipboard-like functionality and perhaps that is misbehaving... Please read through #80804 , there is also a thread on their forum..

Ah, sorry I didn't find the other issue.


[TF 2.0 API Docs] tf.nn.log_softmax

URL(s) with the issue:
https://www.tensorflow.org/versions/r2.0/api_docs/python/tf/nn/log_softmax
Description of the issue (what needs changing):

No errors defined
No visuals

Are the errors defined?

There are no errors defined

Visuals, if applicable

There are no visuals available. I think that visuals are needed to clarify the content.

@MuhanguziDavid, Errors are defined here. Please take look and let us know. Thanks!

@gadagashwini , seen the errors. They are well defined. Thanks.


Avoid using hardcoded value from test case while referring VSAN datastore

Test should fetch the datastore name dynamically and avoid using hard coded value. Currently CI datastore name was renamed from vsanDatastore => vsandatastore to accommodate windows VM (docker host) and vsan_info_test.py started failing.
https://github.com/vmware/docker-volume-vsphere/blob/master/esx_service/utils/vsan_info_test.py#L35
class TestVsanInfo(unittest.TestCase):
    """ Test VSAN Info API """

    VM_NAME = "test-vm"
    VSAN_DS = "/vmfs/volumes/vsanDatastore"  <<<<<<<< See here
    TEST_DIR = os.path.join(VSAN_DS, "vsan_info_test")

unit test correctness issue; adding mustfix.


Spanish credits added

I forgot to change this when translating into Spanish a while ago 😅

Cool, thank you =)


➕ Add Icons

Add Icon(s) to ./img. Note:svg format only.

PR Message: Include Summary and Issue #
Please use Open Source Only and make proper attributions.

Examples: Font Awesome, Simple Icons

@kwing25

Reopened for icon contributions.

Added Icons in November 2021 #2

Issue #1 Closed


Convert to Python for generating Grid World

Thanks a lot for this repo. It might be very exciting to have Grid World program converted to Python, which was written in Matlab.

Thanks. I would have done it, but since the author uploaded sample datasets I didn't think it was necessary immediately. It's the kind of script you only need to run once.


pandas selection option

Hi y'all, thanks for the awesome project!
This idea isn't fully-formed yet, but I'm wondering what you'd think about the addition of a pandas selection option in inquirer. I'm thinking that the invocation would be something like:
inquirer.pandas("name", choices = df)

Then there'd be a display of the dataframe, and the user could type in a text to filter the records (across all columns? the selected column? not quite sure about that). Also, it'd probably be reasonable for users to be able to hit left-right to select columns, then Enter to sort based on that column (Enter again to switch descending, ascending)
As I'm typing this out, it's obviously a big project, so this isn't really a feature request. I'm wondering if it makes sense to try to implement this in inquirer, or if I should try creating this as a standalone thing first.
Thanks, sorry for the long question

Hmm, I just realized that pandas is probably a huge dependency to add just for this feature, so it'd probably be better to try to implement this as a plugin, or as an entirely separate project. I'm gonna close this for now


Added support for image-embedding.

Retrieve and embed images directly into the document.
If you like it, please merge and publish as soon as possible.

I've written twelve tests against every branching point that I've added. I've been writing/debugging tests for hours for all of the Python versions. I'd hate to be the guy who breaks the 100% coverage, but I'm not sure there's any more I can do.
This is an important and useful functionality. What do I have to do to get it merged?

Please add this into mistune-contrib.

Okay.

Created at https://github.com/dsoprea/markdown-embedimages and upload as package "markdown-embedimages".

Thanks.


Fix const_item_mutation warnings added in latest Rust nightly

Published as v0.11.6.

Published as v0.11.7


feat: add usecase for fetching tokens

Readiness checklist

[ ] I added/updated tests.
[ ] I ensured that the PR title is good enough for the changelog.
[x] I labeled the PR.

You can already review. The backbone route is not yet finished, so this PR will still be a draft

Getting the list of valid tags doesn't really require being logged in, on the other hand they're only supposed to be used for attributes which currently can only be shared between Identities. So I think it's ok that they require a login.
But I'd expect that the list is not fetched from the backbone every time you want to do something with a tag (which is often), but rather that the backbone sends the list whenever it is changed (e. g. via an event) and it's then stored locally.

I'll not review a Draft. Please re-assign when finished.

@sebbi08 now the things in transport are also named AttributeTag* - but transport doesn't know of Attributes, for transport it's just tags.
If that's undone I will do another review.


Fix typos.

Fix typos.

@alexandair,
Thanks for having already signed the Contribution License Agreement. Your agreement was validated by Microsoft. We will now review your pull request.
Thanks,
Microsoft Pull Request Bot

@jluk - Please review the proposed changes. Thanks

@alexandair please address comment and we can merge - thanks!

Looks good, #sign-off


Remove distributed implementations

just fyi, I am working on removing the distributed test enablement in ci...will re-trigger tests when this is complete...

TESTNOW_GENERAL_CI


Set handlePanGesture method in header file of DBSphereView

It's necessary for use this library as IBoutlet, the current version only add PanGesture on initWIthFrame method. Using DBSphereView with IBoutlet we need add pan gesture 'manually'.

In my implementation, i call in that way:
        sphereView.addGestureRecognizer(panGesture)```

Thank you for your contribution.
But if you want to add this view in xib or storyboard, the better way is to implement the initWithCoder function and do same things like initWithFrame function.
Something else to note about autolayout is that you need to relayout the view (change the view size or something else). So implementing layoutSubviews is a good method.

If i implement the initWithCoder and do the same thing like in initWithFrame function i will need write the same code that you implemented in handlePanGesture function because this method is private, so it's not good way. Thanks


#372 - Move settings and constants to config file - Colors customization implemented

https://github.com/Microsoft/EmbeddedSocial-iOS-SDK/issues/372 - Colors customization implemented

 Thank you for your submission, we really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.:x: Vadim-Bulavin sign nowYou have signed the CLA already but the status is still pending? Let us recheck it.


Task vNext - Update WMR to use platform code for runtime

Overview
The Windows Mixed Reality Device / Controllers currently use the InteractionManager provided by Unity.  This needs to be updated to enable use of the Windows.Spatial namespace in the player layer
Requires

Updating the InteractionManager events and handlers to use the Windows.Spatial equivalents
Evaluating if any additional features are needed to support (or removal)
Investigate possible refactoring options for Devices / Controllers

Acceptance Criteria

[ ] I can start Unity in UWP mode whilst configured to use the Windows Mixed Reality platform
[ ] I can view a scene using an Windows Mixed Reality headset
[ ] I can visualize a default object as a controller
[ ] Input System actions are generated from the Windows Mixed Reality controller and sent to the Input System
[ ] All inputs from the selected controller are mapped to the Input System

We should be building on Unity, not replacing it. Right?

This is to use the Windows UWP Platform code (as demonstrated in the last shiproom with the "Player" projects) over Unity's implementation.  Giving us greater freedom (and likely performance) over what is available today

I agree, we should be using the native platform code, so we don't have another layer to go through.
When we're done, we will be able to use the native platform code in the editor runtime as well.

Does this imply custom platform code for each device? Not having to write platform code for input, etc is one of the benefits of Unity.
I worry that we are duplicating effort that can best be used elsewhere in the project.

It will not, because of the way we've setup the Input Actions to be device agnostic.

I worry that we are duplicating effort that can best be used elsewhere in the project.

That was my same thoughts, but Simon is paranoid of Unity, lol.

This isn't implemented yet.
The aim is to replace the Unity "Interactionmanager" use with the Windows.Spatial namespace in the player project.

Thanks for clarifying, @SimonDarksideJ


Add the ability to insert tasks to markdown

Is your feature request related to a problem? Please describe.
I'm using Todoist as an Obsidian inbox for quick input. I'm currently using a quick-add script to do it, but it is quite unpleasant and slow.
Describe the solution you'd like
I'd like the same type of input as I found in the obsidian-google-tasks plugin which basically have an obsidian command insert tasks.
It triggers a selection menu like that :

Describe alternatives you've considered
The alternatives are the quick add script I'm using but it is terribly inconvenient and not meant to be used by normal users.
Additional context
There's a screenshot above.

Another option I like of the Waypoint Obsidian plugin is that it has a place holder.
%% Waypoint %% Which will actually get replaced by the contents and kept up to date with list. This would enable you to search on tasks using the global obsidian search as well.


Change permissions on staged files instead of source files

Summary
Recent changes regressed the permissions fixup logic when the common archive production code had the staging content path removed from it, so it started changing the permissions of the source files instead of the staging files. This change updates the logic to change the permissions on the staged files instead.
Example build: https://dev.azure.com/dnceng/internal/_build/results?buildId=2097098&view=results

Release Notes Entry

/backport to release/7.0

/backport to release/6.x


fix login option issue

Updating vue-bootstrap to new version cause the issue

Pull Request Test Coverage Report for Build 1222

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage remained the same at 79.47%

Totals

Change from base Build 1220:
0.0%

Covered Lines:
92

Relevant Lines:
103

💛  - Coveralls


[Launcher] Missing MSBuild installation

Release Type: Official Release: launcher
Version: latest
Platform(s): Launcher
Describe the bug
The launcher doesn't appear to correctly check/install msbuild, multiple users have been having this issue.
To Reproduce
Steps to reproduce the behavior:

Not having MSBuild installed
Run xenko installer+launcher.

Expected behavior
Install automatically MSBuild with at least the basic requirements to build a game on desktop, if that is not yet possible, present users with a guide to install the requirements themselves.

yep same here, with version <IP_ADDRESS> ... is there any workaround to start exploring ??

@mostafa901 Yes, all you have to do is install MSBuild through here:
https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools&rel=16
When the workloads window pops up select .NET desktop build tools, scroll down and select .NET Core build tools as well and you should be good to go.

Perfect, thanks a lot.

Logic to check MSBuild during installation is here:
https://github.com/xenko3d/xenko/blob/master/sources/tools/Xenko.PackageInstall/Program.cs
If it happened to someone, please let me know if Visual Studio was installed or not to more easily check which case to test on a VM.
Any details/repro would be useful!


Store Forum

Description:

Suggested Labels:

Suggested Assignees:

Affected Product Version:
OS, DB, other environment details and versions:
Steps to reproduce:
Related Issues:

This feature has been deprecated from APIM 3.0.0 onwards. Hence not valid.


Weight can be max 1.0 and min 0

When creating things or actions, a weight can be maximal 1.0 and minimal 0.0.
Background
In the contextionary's vector space a polygon will be created of the keywords. The weights will determine where the new vector points are created.
For example with two keywords and a class all with a weight of 1, the centroid will be placed in the center, if one keyword should be less important, the weight can be lowered. There might be the possibility that we want to have >1.0 in the future but I don't foresee this.
Suggested implementations

Make it a configuration flag that defaults to not allowing >1.0 weights`. Or;
Make it an error or warning if a weight is set to >1.0. Or;
If a weight is >1.0 set it to 1.0.

How does it matter if a user sets a higher weight than 1? Maybe they want to use a total of 60 sum, and use chunks of 20 for each keyword. 60 is a very nice number to divide into different parts.
That is the exactly as setting the weight for each keyword to 0.3333.
There is nothing magical about a maximum of 1 IMHO.
We could require that the total sum of the weights should be 1.0 (with a certain epsilon). That would make sense to me; you'd basically force users to write down a percentage. Adding a keyword will require you to take some of the weight of another.
In this latter approach, instead of making the pie bigger, you need to cut pieces smaller if you want to have more pieces.

Also this is not part of milestone A IMHO; this will only become relevant once you start to implement fuzzy searches/network queries.

#645 adds the validation as proposed in suggestion 2 for querying for weights. We could should add the same for imports. I wasn't previously aware of this issue, but it's very much connected to #645 - maybe I can solve it as part of that, too.

FYI: Hasn't been tackled as part of #645 because that issue was already very big on its own, so we need to keep this open.


Need onSelectNotif() for notification like onAccept() method for actions, when user click on notification we detect it

@TatankaConCube we need method like onAccept() that handle click on accept button on notification and we want when user just click on whole notification it was detected this action for do some functionality.
can u implement this feature please.

Could you please describe the feature you need this functionality for?

@TatankaConCube I need a feature like onCallAccepted or onCallRejected on ConnectycubeFlutterCallKit.instance.init with name of onNotificationSelect or onNotificationClick that get handler method and use this handler when user click on notification Bar (Call notification Bar) and redirect to application homePage , i want do some stuff before app open and user redirect like reset some variable value


doc: gannt: weekly update for period 2022-07-13 ~ 2022-07-19

Week 5 status update:

Enable and pass tests for TCompactProtocol
Finish prototyping the compression library to replace Zlib

@stephanosio - looks ok?


Various new features

New features, which you can have a look at here :

keyboard shortcuts to undo/redo anything that usually changes the url
resource graphs for minerals, gas, supply, and race specific boosts
more options for maxing worker optimization
maxing MULE, Nexus chronos or injects optimization
build order read by synthed voice with rudimental visuals. The reading can be controlled by voice

Wow these are really useful changes. The graphs and undo/redo alone make putting together a build much easier. Voice is amazing. Haven't tested the optimization features yet. Awesome job!

After playing around with it, if you have the multi-line build order open, the drag and drop functionality doesn't work properly.
Works well with single-row mode though.

You are talking about keyboard shortcuts. Could explain which they are and in short what they do?

The keyboard shortcuts are meant to undo/redo any change to the BO (and possibly the settings).

After playing around with it, if you have the multi-line build order open, the drag and drop functionality (to re-order build order items) doesn't work properly.

Indeed, and for multi-line drag&drop we need to use another d&d library but I didn't feel like changing it ><

And the tooltips from the statistics don't seem to disappear as soon as you leave the graph.

I just fixed it.


Fix for #135

Ignore the message if the sender is undefined. Fixes issue #135

Published as 0.2.8, thanks!

hi, this hasn't been released yet to npmjs.com - version 0.2.7 is the latest there - https://www.npmjs.com/package/hubot-irc

Until npmjs is updated you can use the following in your package.json file for 0.2.8:
{
  "hubot-irc": "nandub/hubot-irc#f905a665aa"
}

Thanks - this is what I've been doing - btw it should be easy to have travis-ci do the npm publish as part of the build.


Ensure to add the loudnorm_impl.h in the pypi source distribution

Thanks!

Not sure if you can trigger a point release easily. I’m having more trouble patching this in than I thought tbh.


Fix: Rotate Image no longer possible in archive and recycle bin pages

Resolved / Related Issues
Items resolved / related issues by this PR.

No opened issue.

Validation
How did you test these changes?

[x] Built and ran the app

Is this fixing an issue where rotate was disabled or fixing an issue where it wasn't disabled?

It was not disabled.


Use TypeAliasType for .T

That will allow us to specify the order of the TypeVars.

Hmm, isinstance (and issubclass) doesn't work with TypeAliasType and this seems to be intentional.


Add a project Logo, add to ReadMe

I think @RLittlesII was going to get his cousin to look into a new icon. He’s a graphic designer.


Support 1.16 and below

On some older spigot versions, mappings use a package rename to avoid having to retype net/minecraft/server for every class mapping. Lorenz does not support package renames in srg mapping files (SrgReader.java#L134-L135) so we will need to copy the package over to all classes before reading the mappings. Or is there a better solution?

Hi!
I’ve implemented support for versions 1.14.4 -> 1.16.5 in my Maven plugin BNms-plugin.
Here are the challenges I had to address:

Reading the mappings:

I didn’t use any external libraries for reading the mappings. Parsing csrg mappings was relatively straightforward, but proGuard mappings presented some difficulties. To convert them to csrg, I had to build an inheritance map in both directions (from kid to super and vice versa).

Reverting bukkit-1.16.5-cl.csrg:

The main issue was handling the relocation. However, I managed to solve it since the pattern was known for all non-NMS classes. For NMS classes, I simply read the mappings and created the corresponding map (AdvancementProgress -> net/minecraft/advancements/).

Applying Mojang mappings:

Working with classes went smoothly, but I encountered issues with members due to the obf helper. However, since I had already built the inheritance map while parsing proGuard mappings, this made it easier to check for name conflicts.

It’s also worth mentioning that until version 1.16, all NMS classes were located in a single package, which violated the encapsulation of package-private members. Restoring the original NMS structure leads to issues with running the server due to unauthorized access.

I would appreciate it if you could mention that there is a solution available for versions 1.16.5 and below.


Add MPObject component

Contains:

Connected to client
ID
Mine
Additional data

List will be updated

It is working in test  mode (needs testing)


BLD: Use .get() instead of directly accessing env

conda build master is now using a two-pass jinja system which means
that environ should be accessed via .get() instead of [] if you want
to access GIT_* variables.

@tacaswell thanks for catching that. Updated the recipe accordingly


Convert parseError and parseWarning to use options

Addresses the issue brought up in https://github.com/facebookexperimental/reason-native/issues/12, converts all of parseError and parseWarning to utilize Reason options instead of OCaml-style error throwing.
Makes heavy use of safe pipe operators proposed at https://github.com/facebook/reason/issues/1928#issuecomment-389161245
testing:
$ esy src/refmterr/runTests.sh
reason-native-dev

ALL GOOD!

@bandersongit I'll be editing these files a bit to add custom parser support, might as get this fixed now :)