Append custom resolvers to auto generated DDB resolvers

Is this feature request related to a new or existing Amplify category?
function
Is this related to another service?
No
Describe the feature you'd like to request
GIVEN Todo model, amplify auto generates createTodo mutation attached to DynamoDB resolver. Allow side effects on autogenerated mutations to perform custom operations. Example: Send an email (lambda function) after createTodo mutation. Currently there is no option to perform side affects on auto generated operations.
Describe the solution you'd like
Since all resolvers are pipeline resolvers, provide a way to append, prepend user-defined resolvers during schema design.
Auto-generated mutation:
Type Mutation {
  createTodo(input:CreateTodoInput): Todo
}

Proposal

Append to auto-generated resolver - executes after generated resolver

# @appendResolvers will append any user defined @function resolvers onto amplify generated resolvers.
# pipelineResolvers = [originalDDBCreateTodo, FunctionName-${env}]
# we need some kind of @ts-ignore to ignore compile time error on a future generated input ie, CreateTodoInput
Type Mutation {
  @appendResolvers
  createTodo(@ts-ignore input:CreateTodoInput): Todo  @function(name: “FunctionName-${env}”)
}

Prepend to auto-generated resolver - executes before generated resolver

# @prependResolvers will prepend any user defined @function resolvers onto amplify generated resolvers.
# pipelineResolvers = [FunctionName-${env}, originalDDBCreateTodo]
# we need some kind of @ts-ignore to ignore compile time error on a future generated input ie, CreateTodoInput
Type Mutation {
  @prependResolvers
  createTodo(@ts-ignore input:CreateTodoInput): Todo  @function(name: “FunctionName-${env}”)
}

Describe alternatives you've considered

Described solution for this feature request can be achieved using AppSync console manually -  doesn't work in a CI/CD environment where manual change are overwritten on deployments.
Move DDB resolvers to lambda - this is more manual work, slows down development beats the purpose of amplify.

Additional context
This is very important to our requirements to have side effects and simplify developer workflow to make it more intuitive by generating side effects from schema.
Is this something that you'd be interested in working on?

[ ] 👋 I may be able to implement this feature request
[ ] ⚠ This feature might incur a breaking change

Any update on this?

Does anyone know if there is any workable way to do this?  It seems like a common pattern and I'm surprised that this is so difficult with Amplify.
Two simple examples of use cases:

We have a RewardsMember model that represents a member in a loyalty program, and the loyalty accounts are backed by a third-party API.  We want to extend the default createRewardsMember resolver to first check to see if the account exists in the third-party system and create it if necessary, before creating the record in our DynamoDB table.
We have models subject to auditing, like Ticket where we need a logging audit trail of who changed what and when.  We want to insert a Lambda function before and/or after the default generated CRUD operations like createTicket so that we can check the API request to see who sent it and log information about what's changing.

In both of those examples, we want to use the Amplify code generation.  Because that's part of why we're using Amplify.  We want to extend the generated code, we don't want to replace it.  If we chain @function directives together in the schema then we get a pipeline resolver that can call more than one function -- but we would have to reinvent the wheel and reimplement the CRUD operations ourselves as Lambda functions.  We do not want to waste our time on that and we don't want to take the risk of introducing a bug related to _version or _deleted or other DataStore attributes.
If we instead do it by extending the existing VTL templates that Amplify generated, then we can't call our Lambda functions.  Because nobody seems to know how to do that.
I tried copying generated VTL code from a @function directive into my own VTL templates and I tried to use that to insert a "HELLO, WORLD!" Lambda function into the pipeline with the generated VTL resolver from Amplify.  I failed.
Can anyone provide any working example?

There are some hints here: https://github.com/aws-amplify/amplify-category-api/issues/687
But that's still not a working example, since nobody seems to know how to get the function ID.

We're also looking to do this, and our use case is very similar to originally reported request, but possibly even simpler:
When creating a User model managed by Amplify and persisted in Dynamo DB, we want to add a precondition check to query DynamoDB by the email address passed into the createUser mutation to verify it isn't already in use.
We were planning on doing that by doing an earlier PutItem with an attribute_not_exists condition on a separate UserEmail table where the primary key of that table is the email. We want to do this as we don't want to have the primary key of the User itself being the email but a UUID so it's immutable (as we allow the user to change their email address).
This would allow us to prevent creating users with the same email address.
So basically we want to add an additional DDB resolver into the createUser pipeline with a separate DDB table datasource.
I'm going to try the suggestions in #687 but I'm not convinced it will work, and it would be great for Amplify to support my  use case natively without a lot of complicated custom coding as preventing duplicate emails or other business identifiers seems like a fairly common requirement.
I'm happy to create a separate ticket (as related but different to this) but based on this ticket and #687 I'm not sure it's worthwhile?

We're also looking to do this, and our use case is very similar to originally reported request, but possibly even simpler:
When creating a User model managed by Amplify and persisted in Dynamo DB, we want to add a precondition check to query DynamoDB by the email address passed into the createUser mutation to verify it isn't already in use.
We were planning on doing that by doing an earlier PutItem with an attribute_not_exists condition on a separate UserEmail table where the primary key of that table is the email. We want to do this as we don't want to have the primary key of the User itself being the email but a UUID so it's immutable (as we allow the user to change their email address).
This would allow us to prevent creating users with the same email address.
So basically we want to add an additional DDB resolver into the createUser pipeline with a separate DDB table datasource.
I'm going to try the suggestions in #687 but I'm not convinced it will work, and it would be great for Amplify to support my use case natively without a lot of complicated custom coding as preventing duplicate emails or other business identifiers seems like a fairly common requirement.
I'm happy to create a separate ticket (as related but different to this) but based on this ticket and #687 I'm not sure it's worthwhile?

Since you are targeting a DDB data source, it will work, at least in v1. I think v2 has zero support for this unfortunately.
If you are using v1 and need help adding that step in the generated pipeline, I can provide an example.

Since you are targeting a DDB data source, it will work, at least in v1. I think v2 has zero support for this unfortunately. If you are using v1 and need help adding that step in the generated pipeline, I can provide an example.

That's vey encouraging, thanks Alex. When you say v1 and v2 I assume you're referring to "Gen 1" vs "Gen 2". If so, we're still using Gen 1, so that should work.
If you're able to provide a basic example, that would be amazing, and I'd definitely appreciate it. But if that's too time consuming for you currently, I will try and give it a go based on the comments here and in #687 and see how I get on.


GRANT: deploy to prod config

Summary:

added config for prod deploy;
added a new workflow to trigger deployments on pull_request to main;

We updated deployment workflow in #83; closing this


feat(COD-1255): Enhancements to how telemetry can be used

Summary
Over in the Code Security team we want to add some observability in environments where we have the Lacework CLI and are running a bunch of command in sequence as well as doing some things outside of the CLI. We would like to land the two enhancements in this PR to support this:

We now read a variable LACEWORK_CONTEXT_ID and report this. This will allow us to link up different invocations of the CLI into one unique context for the whole sequence of commands.
We now support a hidden command lacework telemetry upload which accepts a JSON blob of telemetry to upload. We'll use this to report additional telemetry from the bits of our code running outside the CLI.

How did you test this change?

One automated test was modified to check the new behaviour, and a new one was also added.
I did manual end-to-end testing locally and observed data arriving to Honeycomb (here).

Issue
https://lacework.atlassian.net/browse/COD-1255

@linpengzhang Hmm, that's interesting. Do you think it would make sense to have the env variable overrride the trace_id instead so that all the CLI invocations can end up as part of the same trace?

@linpengzhang Hmm, that's interesting. Do you think it would make sense to have the env variable overrride the trace_id instead so that all the CLI invocations can end up as part of the same trace?

I think as long as the data is in two different rows, they can't be queried altogether. I doubt, but it might be that by overriding trace_id  and trace_span, Honeycomb aggregates the data

I think as long as the data is in two different rows, they can't be queried altogether. I doubt, but it might be that by overriding trace_id and trace_span, Honeycomb aggregates data sent in different instants. If that's not the case, the only solution is to send component specific data and other data all together

Hmm, okay. I think getting all the telemetry into one row is going to be too fiddly and potentially error prone so I think this new command should be fine. In most cases I reckon we probably won't need to query together but rather will want to see a single set of traces from a run that we're debugging.


optimize: sidecar service selection and merge

Please provide a description of this PR:
If a Service is selected multiple times (might happen if it's a destination of multiple routes or multiple VirtualServices), we currently always DeepCopy the service even though it's not actually needed and nothing is actually changing.
Changes proposed:

fast equals check to see if the service being added is already present (this only actually succeeds if the service has not been copied by some other process, but should be true for most cases unless sidecar egress is matching a subset of ports of a service, even so, it's mostly free to make this check)
ignore services with the same hostname and the same ports, since we're not gonna merge them anyways

Data:
We're currently seeing Service.DeepCopy() spending ~5% of cpu and model.canMergeServices() another ~3% of cpu, and we're running with services which all use the same ports and we also don't have services with the same hostnames in other namespaces.

@sschepens: The following test failed, say /retest to rerun all failed tests or /retest-required to rerun all mandatory failed tests:

Test name
Commit
Details
Required
Rerun command

release-notes_istio
3bf9de0d079ec4abffb944d2f710c4bf96876d00
link
true
/test release-notes

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here.

/retest

@howardjohn mind if I backport this to 1.22?

In response to a cherrypick label: new pull request created: #51432


[Event Request] codeunit 8614 "Config. XML Exchange" - OnAfterGetPackageTableValueFromXML

We would like to add a new event OnAfterCreateRecordNodes in the following procedure:
local procedure FillPackageMetadataFromXML(var PackageCode: Code[20]; TableID: Integer; var TableNode: DotNet XmlNode)
.
.
.
if Value <> '' then
Evaluate(ConfigPackageTable."Created by User ID", CopyStr(Value, 1, 50));
OnAfterGetPackageTableValueFromXML(ConfigPackageTable, TableNode); //A100F0001.Event A200F0003.Event
ConfigPackageTable."Data Template" :=
CopyStr(
Event signature:
[IntegrationEvent(false, false)]
local procedure OnAfterGetPackageTableValueFromXML(ConfigPackageTable: Record "Config. Package Table"; var TableNode: DotNet XmlNode)
begin
//A100F0001.Event A200F0003.Event
end;

Thanks for reporting this. We agree, and we’ll publish a fix asap, either in an update for the current version or in the next major release. Please do not reply to this, as we do not monitor closed issues. If you have follow-up questions or requests, please create a new issue where you reference this one.


showModalBottomSheet does not move along with keyboard

Here is my simple flutter application with showModalBottomSheet, it contains a textfield and a button. When the text field is pressed keyboard pops up. But, modalbottomsheet does not move up along with the keyboard. Tried adding bottom viewInsets padding. Is there any other way to move modalbottomsheet along with the keyboard?
import 'package:flutter/material.dart';

`void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        resizeToAvoidBottomInset: false,
        body: HomeScreen(),
      ),
    );
  }
}

class HomeScreen extends StatelessWidget {
  const HomeScreen({
    Key key,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Container(
      color: Colors.yellow[200],
      child: Center(
        child: RaisedButton(
          color: Colors.purple[100],
          child: Text('Button'),
          onPressed: () {
            showModalBottomSheet(
                context: context,
                builder: (BuildContext context) {
                  return MyBottomSheet();
                });
          },
        ),
      ),
    );
  }
}

class MyBottomSheet extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        color: Colors.pink[200],
        child: Column(
          children: [
            TextField(
              autofocus: true,
            ),
            RaisedButton(
              child: Text('Next'),
              onPressed: () {},
            ),
          ],
        ),
      ),
    );
  }
}

Current Work Around:
showBottomSheet has a property isScrollControlled, make it true.
showModalBottomSheet(
                context: context,
                isScrollControlled: true,
                builder: (BuildContext context) {
                  return MyBottomSheet();
                });

Remove Scaffold from MyBottomSheet and give your container a fixed height. Wrap your MyBottomSheet Container with Padding and use MediaQuery.of(context).viewInsets for padding.
class MyBottomSheet extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: MediaQuery.of(context).viewInsets,
      child: Container(
        height: 400,
        color: Colors.pink[200],
        child: Column(
          children: [
            TextField(
              autofocus: true,
            ),
            RaisedButton(
              child: Text('Next'),
              onPressed: () {},
            )
          ],
        ),
      ),
    );
  }
}

@TahaTesser Please Review this issue, The BottomSheet should be automatically moved above on the Keyboard popup, if possible.

Hi @preethishenoy
Can you please elaborate what do you exactly want? It is not clear for me.
Thank you

Current Work Around:
showBottomSheet has a property isScrollControlled, make it true.
showModalBottomSheet(
                context: context,
                isScrollControlled: true,
                builder: (BuildContext context) {
                  return MyBottomSheet();
                });

Remove Scaffold from MyBottomSheet and give your container a fixed height. Wrap your MyBottomSheet Container with Padding and use MediaQuery.of(context).viewInsets for padding.
class MyBottomSheet extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: MediaQuery.of(context).viewInsets,
      child: Container(
        height: 400,
        color: Colors.pink[200],
        child: Column(
          children: [
            TextField(
              autofocus: true,
            ),
            RaisedButton(
              child: Text('Next'),
              onPressed: () {},
            )
          ],
        ),
      ),
    );
  }
}

Thanks for your response.
I did try this and it works.I have a navigation controller also placed over the modal screen. I have placed a navigation to transition from screen 1 to screen 2.I am using this modal sheet to implement a basic login workflow. Here , screen 1 is my Phone number screen and screen 2 is the OTP screen. Once I have a navigation controller, This issue does come up. Here is the link to my sample code. Appreciate any workaround for this issue.
https://drive.google.com/file/d/1vcEM8ltzeCClVOcm9gjbevVYpt3czVKC/view?usp=sharing

Hi @preethishenoy
Can you please elaborate what do you exactly want? It is not clear for me.
Thank you

Sorry, I have elaborated my issue and also added a link to my sample code below.

From what you have said and by running the code it is not clear to me what is the issue here.

import 'package:flutter/material.dart';

`void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        resizeToAvoidBottomInset: false,
        body: HomeScreen(),
      ),
    );
  }
}

class HomeScreen extends StatelessWidget {
  const HomeScreen({
    Key key,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Container(
      color: Colors.yellow[200],
      child: Center(
        child: RaisedButton(
          color: Colors.purple[100],
          child: Text('Button'),
          onPressed: () {
            showModalBottomSheet(
                context: context,
                builder: (BuildContext context) {
                  return MyBottomSheet();
                });
          },
        ),
      ),
    );
  }
}
class MyBottomSheet extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Container(
      height: 100,
      color: Colors.pink[200],
      child: Column(
        children: [
          TextField(
            autofocus: true,
          ),
          RaisedButton(
            child: Text('Next'),
            onPressed: () {},
          )
        ],
      ),
    );
  }
}

@pedromassangocode try this code, the bottom sheet will be hidden behind the keyboard, we want the bottom sheet to move along the keyboard by default, so we can view it above the keyboard without adding isScrollable = true in showModalBottomSheet and wrapping Container in MyBottomSheet with padding like this.
class MyBottomSheet extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: MediaQuery.of(context).viewInsets,
      child: Container(
        height: 400,
        color: Colors.pink[200],
        child: Column(
          children: [
            TextField(
              autofocus: true,
            ),
            RaisedButton(
              child: Text('Next'),
              onPressed: () {},
            )
          ],
        ),
      ),
    );
  }
}

Thanks, now it is clear what the issue is.
flutter doctor -v
[✓] Flutter (Channel master, 1.24.0-8.0.pre.406, on Mac OS X 10.15.7 19H2 darwin-x64, locale en)
    • Flutter version 1.24.0-8.0.pre.406 at /Users/pedromassango/dev/SDKs/flutter_master
    • Framework revision 60bdcf55fe (6 hours ago), 2020-12-01 21:24:21 -0800
    • Engine revision 20caf54969
    • Dart version 2.12.0 (build 2.12.0-76.0.dev)

[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.2)
    • Android SDK at /Users/pedromassango/Library/Android/sdk
    • Platform android-30, build-tools 30.0.2
    • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6915495)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 12.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 12.1, Build version 12A7403
    • CocoaPods version 1.9.3

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

[✓] Android Studio (version 4.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 1.8.0_242-release-1644-b3-6915495)

[✓] IntelliJ IDEA Community Edition (version 2020.2.3)
    • IntelliJ at /Applications/IntelliJ IDEA CE.app
    • Flutter plugin version 51.0.3
    • Dart plugin version 202.8070

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

[✓] Connected device (4 available)
    • Android SDK built for x86 (mobile) • emulator-5554 • android-x86    • Android 10 (API 29) (emulator)
    • macOS (desktop)                    • macos         • darwin-x64     • Mac OS X 10.15.7 19H2 darwin-x64
    • Web Server (web)                   • web-server    • web-javascript • Flutter Tools
    • Chrome (web)                       • chrome        • web-javascript • Google Chrome 86.0.4240.198

• No issues found!

I've found a solution to take over this issue and it's working absolutely fine.
bottom_sheet.dart original source code:
/// ... excluding the remaining code above

class _ModalBottomSheetState<T> extends State<_ModalBottomSheet<T>> {
  ParametricCurve<double> animationCurve = _modalBottomSheetCurve;

  String _getRouteLabel(MaterialLocalizations localizations) {
    switch (Theme.of(context).platform) {
      case TargetPlatform.iOS:
      case TargetPlatform.macOS:
        return '';
      case TargetPlatform.android:
      case TargetPlatform.fuchsia:
      case TargetPlatform.linux:
      case TargetPlatform.windows:
        return localizations.dialogLabel;
    }
    return null;
  }

  void handleDragStart(DragStartDetails details) {
    // Allow the bottom sheet to track the user's finger accurately.
    animationCurve = Curves.linear;
  }

  void handleDragEnd(DragEndDetails details, {bool isClosing}) {
    // Allow the bottom sheet to animate smoothly from its current position.
    animationCurve = _BottomSheetSuspendedCurve(
      widget.route.animation.value,
      curve: _modalBottomSheetCurve,
    );
  }

  @override
  Widget build(BuildContext context) {
    assert(debugCheckHasMediaQuery(context));
    assert(debugCheckHasMaterialLocalizations(context));
    final MediaQueryData mediaQuery = MediaQuery.of(context);
    final MaterialLocalizations localizations = MaterialLocalizations.of(context);
    final String routeLabel = _getRouteLabel(localizations);

    return AnimatedBuilder(
      animation: widget.route.animation,
      child: BottomSheet(
        animationController: widget.route._animationController,
        onClosing: () {
          if (widget.route.isCurrent) {
            Navigator.pop(context);
          }
        },
        builder: widget.route.builder,
        backgroundColor: widget.backgroundColor,
        elevation: widget.elevation,
        shape: widget.shape,
        clipBehavior: widget.clipBehavior,
        enableDrag: widget.enableDrag,
        onDragStart: handleDragStart,
        onDragEnd: handleDragEnd,
      ),
      builder: (BuildContext context, Widget child) {
        // Disable the initial animation when accessible navigation is on so
        // that the semantics are added to the tree at the correct time.
        final double animationValue = animationCurve.transform(
            mediaQuery.accessibleNavigation ? 1.0 : widget.route.animation.value
        );
        return Semantics(
          scopesRoute: true,
          namesRoute: true,
          label: routeLabel,
          explicitChildNodes: true,
          child: ClipRect(
            child: CustomSingleChildLayout(
              delegate: _ModalBottomSheetLayout(animationValue, widget.isScrollControlled),
              child: child,
            ),
          ),
        );
      },
    );
  }
}

/// ... excluding the remaining code

Changes I made in the build method:
I wrapped the BottomSheet widget with Padding with MediaQuery.of(context).viewInsects for padding value.
Keep in mind that the max height that a bottom sheet can take in half of the screen with isScrollableControlled = false.
@override
  Widget build(BuildContext context) {
    assert(debugCheckHasMediaQuery(context));
    assert(debugCheckHasMaterialLocalizations(context));
    final MediaQueryData mediaQuery = MediaQuery.of(context);
    final MaterialLocalizations localizations = MaterialLocalizations.of(context);
    final String routeLabel = _getRouteLabel(localizations);

    return AnimatedBuilder(
      animation: widget.route.animation,
      child: Padding(
        padding: MediaQuery.of(context).viewInsets,
        child: BottomSheet(
          animationController: widget.route._animationController,
          onClosing: () {
            if (widget.route.isCurrent) {
              Navigator.pop(context);
            }
          },
          builder: widget.route.builder,
          backgroundColor: widget.backgroundColor,
          elevation: widget.elevation,
          shape: widget.shape,
          clipBehavior: widget.clipBehavior,
          enableDrag: widget.enableDrag,
          onDragStart: handleDragStart,
          onDragEnd: handleDragEnd,
        )
      ),
      builder: (BuildContext context, Widget child) {
        // Disable the initial animation when accessible navigation is on so
        // that the semantics are added to the tree at the correct time.
        final double animationValue = animationCurve.transform(
            mediaQuery.accessibleNavigation ? 1.0 : widget.route.animation.value
        );
        return Semantics(
          scopesRoute: true,
          namesRoute: true,
          label: routeLabel,
          explicitChildNodes: true,
          child: ClipRect(
            child: CustomSingleChildLayout(
              delegate: _ModalBottomSheetLayout(animationValue, widget.isScrollControlled),
              child: child,
            ),
          ),
        );
      },
    );
  }
}

Guide me is this the right solution to solve this issue? If yes I want to create a PR.

After Flutter 2.0 something again broke with the showModalBottomSheet and the keyboards:
In my App, I use 2 Material Apps to handle the Navigation with the BottomNavigation Bar.
As my App is pretty complex, this was the best way to do this.
On one Screen, when the user is not logged in, a bottomSheet opens, where the user can put in his login credentials.
The bottomSheet shall appear above the Navigation Bar, so  useRootNavigator: false
In the following Code Snippet, this is how i solved it.
import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(),
    );
  }
}

final _navigationKey = GlobalKey<NavigatorState>();

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int currentIndex = 0;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.white,
      resizeToAvoidBottomInset: true,
      body: MaterialApp(
        navigatorKey: _navigationKey,
        routes: {
          '0': (context) => Home(),
          '1': (context) => Scaffold(backgroundColor: Colors.yellow),
        },
        initialRoute: '0',
      ),
      bottomNavigationBar: BottomNavigationBar(
        currentIndex: currentIndex,
        items: [
          BottomNavigationBarItem(
            icon: Icon(Icons.account_box_rounded),
            label: 'account',
          ),
          BottomNavigationBarItem(
            icon: Icon(Icons.baby_changing_station),
            label: 'stuff',
          )
        ],
        onTap: (int index) {
          setState(() {
            currentIndex = index;
          });
          Navigator.of(context).popUntil((route) => !(route is PopupRoute));
          _navigationKey.currentState.pushReplacementNamed(index.toString());
        },
      ),
    );
  }
}

class Home extends StatefulWidget {
  @override
  _HomeState createState() => _HomeState();
}

class _HomeState extends State<Home> {
  @override
  void initState() {
    WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
      showModalBottomSheet(
        context: context,
        useRootNavigator: false,
        isScrollControlled: true,
        builder: (_) => Container(
          child: Padding(
            padding: const EdgeInsets.all(20.0),
            child: TextField(),
          ),
        ),
      );
    });
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      resizeToAvoidBottomInset: true,
      backgroundColor: Colors.red,
    );
  }
}

Now to the problem:
In flutter 1.22:
When the user taps on the TextInput, the Keyboard opens and the bottomSheet moves its position above the keyboard.

In flutter 2.0:
When the user taps on the TextInput, the Keyboard opens and the bottomSheet moves its position out of screen

Does anyone have a good workaround?
what I tried so far
I gave the bottomSheet a bottom Padding:
bottom: MediaQuery.of(context).viewInsets.bottom),
But it didn't solve the problem
flutter doctor
[✓] Flutter (Channel stable, 2.0.2, on macOS 11.2.3 20D91 darwin-x64, locale de-DE)
    • Flutter version 2.0.2 at /Users/mhein/workspace/flutter
    • Framework revision 8962f6dc68 (3 days ago), 2021-03-11 13:22:20 -0800
    • Engine revision 5d8bf811b3
    • Dart version 2.12.1

[!] Android toolchain - develop for Android devices (Android SDK version 29.0.3)
    • Android SDK at /Users/mhein/Library/Android/sdk
    • Platform android-30, build-tools 29.0.3
    • ANDROID_SDK_ROOT = /Users/mhein/Library/Android/sdk
    • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6915495)
    ✗ Android license status unknown.
      Run `flutter doctor --android-licenses` to accept the SDK licenses.
      See https://flutter.dev/docs/get-started/install/macos#android-setup for more details.

[✓] Xcode - develop for iOS and macOS
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 12.4, Build version 12D4e
    • CocoaPods version 1.10.1

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

[✓] Android Studio (version 4.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 1.8.0_242-release-1644-b3-6915495)

[✓] VS Code (version 1.53.2)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension can be installed from:
      🔨 https://marketplace.visualstudio.com/items?itemName=Dart-Code.flutter

[✓] Connected device (2 available)
    • ANE LX1 (mobile) • 9WV4C18810003333 • android-arm64  • Android 8.0.0 (API 26)
    • Chrome (web)     • chrome           • web-javascript • Google Chrome 89.0.4389.82

! Doctor found issues in 1 category.

I also encountered the same problem in Flutter 2.0 with @Menelphor , the content would be topped when the keyboard pops up.
After some tests I achieved the desired effect. My code like:
    showModalBottomSheet(
        context: context,
        isScrollControlled: true, // Important
        builder: (context) {
          return Container(
            child: Column(
              mainAxisSize: MainAxisSize.min, // Important
              children: [
                //
              ],
            ),
          );
        });

Important points:

No need to set padding: MediaQuery.of(context).viewInsets,  In Flutter 2.0
Set isScrollControlled: true, for  showModalBottomSheet
Use widget Wrap or Column(mainAxisSize: MainAxisSize.min,)  wrapping children widgets

This was fixed in Flutter 2.0.x but is now reintroduced in 2.2

This was fixed in Flutter 2.0.x but is now reintroduced in 2.2

Confirmed this is happening for me in 2.2.0. It was fine in 2.0.4 I believe (previous version of my build works fine).

Yeah, I got it in v2.2 the widget doesn't move when keyboard shows up.

I think this issue should be tracked again. It's not working as intended in v2.2 and v2.2.1 which rolled out recently.

Yes this seems to be re-introduced. Upgraded flutter yesterday and all my bottom modal sheets now fail to lift above the keyboard. Current flutter version is 2.2.1

Yes this seems to be re-introduced. Upgraded flutter yesterday and all my bottom modal sheets now fail to lift above the keyboard. Current flutter version is 2.2.1.
I executed flutter downgrade, which downgraded my flutter version to 2.0.6, and the functionality of bottomModalSheet with the keyboard works as expected again.

Thanks, been looking for a fix for hours, Downgrade finally solved it

I think neither the bottomsheet nor the dialog should move with the keyboard or at least the behavior should be configurable.
If it doesn't follow the keyboard, it is easy to add an animated padding or something similar to mimic the functionality while it's also possible to leave it at the bottom of the screen.  If it moves with the keyboard it is not possible to add a negative margin/padding to keep it at the bottom.

Any news when this will be fixed?

 showModalBottomSheet(
        context: context,
        isScrollControlled: true, // Important
        builder: (context) {
          return Container(
            child: Column(
              mainAxisSize: MainAxisSize.min, // Important
              children: [
                //
              ],
            ),
          );
        });

for me in version Flutter 2.2.2 • channel stable
 showModalBottomSheet(         context: context,         isScrollControlled: true, // Important         builder: (context) {           return Container(                   padding: EdgeInsets.only(                     bottom: MediaQuery.of(context).viewInsets.bottom,                   ),             child: Column(               mainAxisSize: MainAxisSize.min, // Important               children: [                 //               ],             ),           );         });

Future<T?> showTegModalSheet<T>({
  required BuildContext context,
  required DBPage initialPage,
  required DBPageBuilder pageBuilder,
}) {
  return showModalBottomSheet<T>(
    context: context,
    useRootNavigator: true,
    isScrollControlled: true,
    backgroundColor: Colors.transparent,
    builder: (BuildContext context) {
      final DBRouterDelegate routerDelegate = DBRouterDelegate(
        pageBuilders: <DBPageBuilder>[pageBuilder],
        initialPage: initialPage,
      );

      return Container(
          padding:
              EdgeInsets.only(bottom: MediaQuery.of(context).viewInsets.bottom),
          child: Router<Destination>(routerDelegate: routerDelegate));
    },
  );

Does anyone have ideas why above doesn't work when returning Router?
Returning router in order to have navigation inside bottomModalSheet

@leafney for me in version Flutter 2.2.2 • channel stable

 showModalBottomSheet(
        context: context,
        isScrollControlled: true, // Important
        builder: (context) {
          return Container(
                     padding: EdgeInsets.only(
                      bottom: MediaQuery.of(context).viewInsets.bottom,
                    ),
            child: Column(
              mainAxisSize: MainAxisSize.min, // Important
              children: [
                //
              ],
            ),
          );
        });

Need to set padding: MediaQuery.of(context).viewInsets, In Flutter 2.2.2
Set isScrollControlled: true, for showModalBottomSheet
Use widget Wrap or Column(mainAxisSize: MainAxisSize.min,) wrapping children widgets

i tried this and worked!
thanks a lot

padding: EdgeInsets.only(
                      bottom: MediaQuery.of(context).viewInsets.bottom,
                    ),

it's not useful for me in flutter 2.5.3
this code maybe play the same role
builder: (context, child) => Scaffold(               resizeToAvoidBottomInset: true,               body: child, ),
add it in main.dart MaterialApp
it will make every page attribute resizeToAvoidBottomInset = true, thought this page set resizeToAvoidBottomInset = false

@leafney for me in version Flutter 2.2.2 • channel stable

 showModalBottomSheet(
        context: context,
        isScrollControlled: true, // Important
        builder: (context) {
          return Container(
                     padding: EdgeInsets.only(
                      bottom: MediaQuery.of(context).viewInsets.bottom,
                    ),
            child: Column(
              mainAxisSize: MainAxisSize.min, // Important
              children: [
                //
              ],
            ),
          );
        });

Need to set padding: MediaQuery.of(context).viewInsets, In Flutter 2.2.2
Set isScrollControlled: true, for showModalBottomSheet
Use widget Wrap or Column(mainAxisSize: MainAxisSize.min,) wrapping children widgets

This does not work for me. It automatically pops my bottom sheet to full screen. Any suggestions?

Is this solution still valid in Flutter 3.0.2?
These solutions did not work for me. My code's has what @lukeirvin put above

Try add in AndroidManifest.xml:
<application ... >
    <activity
        android:windowSoftInputMode="adjustResize" ... >
        ...
    </activity>
    ...
</application>

Source

I tried a dozen combinations of different ways to solve this problem.
Something does not work in the mobile safari, something does not work in the Android application.
Some solutions work everywhere, but in 10% of cases they give glitches.
Please make the autofocus text box work properly on all platforms.

Same issue for me with Flutter version 3.3.7.

Same problem what i have, i solved it by tow step:
1- Remove  attribute (useInheritedMediaQuery) from MaterialApp in main.dart or set value to  (useInheritedMediaQuery:false).
2- Make your builder in showModalBottomSheet like it:
builder: (BuildContext context) {
return SingleChildScrollView(
child: Container(
padding: EdgeInsets.only(
bottom: MediaQuery.of(context).viewInsets.bottom),
child: yourWidget,
),
);
},

SingleChildScrollView

Not working for me.

Reproducible on stable 3.3 and master 3.7

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

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: Scaffold(
        resizeToAvoidBottomInset: false,
        body: HomeScreen(),
      ),
    );
  }
}

class HomeScreen extends StatelessWidget {
  const HomeScreen({
    Key? key,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Container(
      color: Colors.yellow[200],
      child: Center(
        child: ElevatedButton(
          child: const Text('Button'),
          onPressed: () {
            showModalBottomSheet(
                context: context,
                builder: (BuildContext context) {
                  return MyBottomSheet();
                });
          },
        ),
      ),
    );
  }
}

class MyBottomSheet extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Container(
      height: 100,
      color: Colors.pink[200],
      child: Column(
        children: [
          const TextField(
            autofocus: true,
          ),
          ElevatedButton(
            child: const Text('Next'),
            onPressed: () {},
          )
        ],
      ),
    );
  }
}

flutter doctor -v (mac)
[✓] Flutter (Channel master, 3.7.0-13.0.pre.131, on macOS 13.1 22C65 darwin-arm64, locale en-IN)
    • Flutter version 3.7.0-13.0.pre.131 on channel master at /Users/mahesh/Development/flutter_master
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 0196e6050b (2 days ago), 2022-12-31 11:10:23 -0500
    • Engine revision 932591ec04
    • Dart version 3.0.0 (build 3.0.0-76.0.dev)
    • DevTools version 2.20.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 33.0.0-rc4)
    • Android SDK at /Users/mahesh/Library/Android/sdk
    • Platform android-33, build-tools 33.0.0-rc4
    • ANDROID_HOME = /Users/mahesh/Library/Android/sdk
    • Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.12+0-b1504.28-7817840)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 14.0.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Build 14A400
    • CocoaPods version 1.11.3

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

[✓] Android Studio (version 2021.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 11.0.12+0-b1504.28-7817840)

[✓] IntelliJ IDEA Community Edition (version 2021.2.1)
    • IntelliJ at /Applications/IntelliJ IDEA CE.app
    • Flutter plugin version 61.2.4
    • Dart plugin version 212.5080.8

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

[✓] Connected device (3 available)
    • iPhone 12 Pro (mobile) • 026D5789-9E78-4AD5-B1B2-3F8D4E7F65E4 • ios            • com.apple.CoreSimulator.SimRuntime.iOS-14-5 (simulator)
    • macOS (desktop)        • macos                                • darwin-arm64   • macOS 13.1 22C65 darwin-arm64
    • Chrome (web)           • chrome                               • web-javascript • Google Chrome 108.0.5359.124

[✓] HTTP Host Availability
    • All required HTTP hosts are available

• No issues found!

[✓] Flutter (Channel stable, 3.3.9, on macOS 12.6 21G115 darwin-arm, locale en-IN)
    • Flutter version 3.3.9 on channel stable at /Users/mahesh/Development/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision b8f7f1f986 (24 hours ago), 2022-11-23 06:43:51 +0900
    • Engine revision 8f2221fbef
    • Dart version 2.18.5
    • DevTools version 2.15.0

[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0-rc4)
    • Android SDK at /Users/mahesh/Library/Android/sdk
    • Platform android-33, build-tools 33.0.0-rc4
    • ANDROID_HOME = /Users/mahesh/Library/Android/sdk
    • Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.12+0-b1504.28-7817840)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 14.0.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Build 14A400
    • CocoaPods version 1.11.3

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

[✓] Android Studio (version 2021.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 11.0.12+0-b1504.28-7817840)

[✓] IntelliJ IDEA Community Edition (version 2021.2.1)
    • IntelliJ at /Applications/IntelliJ IDEA CE.app
    • Flutter plugin version 61.2.4
    • Dart plugin version 212.5080.8

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

[✓] Connected device (3 available)
    • iPhone 12 Pro (mobile) • 026D5789-9E78-4AD5-B1B2-3F8D4E7F65E4 • ios            •
      com.apple.CoreSimulator.SimRuntime.iOS-14-5 (simulator)
    • macOS (desktop)        • macos                                • darwin-arm64   • macOS 12.6 21G115 darwin-arm
    • Chrome (web)           • chrome                               • web-javascript • Google Chrome 107.0.5304.110

[✓] HTTP Host Availability
    • All required HTTP hosts are available

• No issues found!

Same issue for me with Flutter version 3.3.10

@lukeirvin
You can fix this by using flutter_keyboard_visibility pub.
return KeyboardVisibilityBuilder(
        builder: (context, isKeyboardVisible) {
          return Container(
            padding: EdgeInsets.only(
              left: 16.w,
              right: 16.w,
              top: 24.h,
              bottom: isKeyboardVisible ? 220.h : 40.h,
              ),
          );
      },
);

Any updates on this?

If you're using flutter_screenutil pub then you need to apply useInheritedMediaQuery: true
ScreenUtilInit(
        useInheritedMediaQuery: true,
        ....

it's working for me

Working for me too. Thank you so much.

If you're using flutter_screenutil pub then you need to apply useInheritedMediaQuery: true
ScreenUtilInit(
        useInheritedMediaQuery: true,
        ....

it's working for me

Working for me too. Thank you so much.

Thank you,, its worked

If you're using flutter_screenutil pub then you need to apply useInheritedMediaQuery: true
ScreenUtilInit(
        useInheritedMediaQuery: true,
        ....

it's working for me

Thank you,, its worked

If you're using flutter_screenutil pub then you need to apply useInheritedMediaQuery: true
ScreenUtilInit(
        useInheritedMediaQuery: true,
        ....

it's working for me

Thank you for this. It worked for me.

Thank you for this. It worked for me. Flutter 3.10.4

If you're using flutter_screenutil pub then you need to apply useInheritedMediaQuery: true
ScreenUtilInit(
        useInheritedMediaQuery: true,
        ....

it's working for me

Flutter 3.10.4  Thank you for this. It worked for me.

You are such a life saver ❤

https://github.com/flutter/flutter/issues/71418#issuecomment-1553076417
Such a life saver❤

Another possibility for those who are stuck with this
1 - install the flutter_keyboard_visibility package
2 - listen for keyboard changes inside your modal content state
(Don't forget to dispose it).
@override
  void initState() {
    super.initState();
    var keyboardVisibilityController = KeyboardVisibilityController();
    keyboardSubscription = keyboardVisibilityController //
        .onChange
        .listen((bool visible) {
      Future.delayed(const Duration(milliseconds: 500), () => setState(() {}));
    });
  }

  @override
  void dispose() {
    keyboardSubscription.cancel();
    super.dispose();
  }

If you don't wait 500Ms it seems that the keyboard is not fully opened and the bottomInset will return 0.
Give your content a height (here it is 372).
  double get height => 372 + bottomPadding;

  double get bottomPadding => MediaQuery.of(context).viewInsets.bottom;

Now you can just use that bottomPadding in your modal content. This will correctly up your content according to the keyboard.
(Tested on Android and iOS).

You need to specify the context for the builder, for example:
showModalBottomSheet(         context: context,         isScrollControlled: true, // Important         builder: (context2) {           return Container(                      padding: EdgeInsets.only(                       bottom: MediaQuery.of(context2).viewInsets.bottom,                     ),             child: Column(               mainAxisSize: MainAxisSize.min, // Important               children: [                 //               ],             ),           );         });
The MediaQuery takes the bottom padding of the builder, and it will push the modal when the keyboard opens. I am using the latest Flutter version (3.13.6), and it works.

I am afraid but the solution proposed above doesn't work for me, all my bottomSheets rest fixed. It was working good before 3.10, since then till now with 3.13.4 everything is blocked and I can't find any solutions for now

@Washoo Thanks. It works with 3.13.9.
@pedromassangocode I think the issue has been solved and it is time to close.

@pedromassango

Adding some info that could be useful.
In my case the issue started happening when we upgraded Flutter from 3.3.10 to 3.19.3.
The issue ended up being that, for preventing scaling the app text according to the phone settings we were using this code:
MediaQuery(
            data: MediaQueryData.fromWindow(WidgetsBinding.instance.window)
                .copyWith(textScaleFactor: 1),
            child: ResponsiveLayoutWidget(child: child!),
          )

After changing that code into this new code:
MediaQuery(
            data: MediaQuery.of(context).copyWith(textScaleFactor: 1),
            child: ResponsiveLayoutWidget(child: child!),
          )

It was solved.

Finally I got the solution to this issue!
Wrap the child of the bottom sheet with padding and add bottom padding
 builder: (context) => Padding(
        padding: EdgeInsets.only(bottom: MediaQuery.of(context).viewInsets.bottom),
        child: child,
      ),

  static baseBottomSheet({required BuildContext context, bool? enableDrag, bool? isDismissible, required Widget child}) {
    return showMaterialModalBottomSheet(
      backgroundColor: Theme.of(context).cardColor,
      context: context,
      builder: (context) => Padding(
        padding: EdgeInsets.only(bottom: MediaQuery.of(context).viewInsets.bottom),
        child: child,
      ),
      useRootNavigator: false,
      isDismissible: isDismissible ?? true,
      enableDrag: enableDrag ?? true,
    );
  }

If you're using flutter_screenutil pub then you need to apply useInheritedMediaQuery: true

ScreenUtilInit(

        useInheritedMediaQuery: true,

        ....

it's working for me

Thanks work for me


[type:task] optimize okhttp3 connection factory

What's changed?

optimize okhttp3 connection factory, link #2528
Checklist

[x]  I have read the Contributing Guide
[x]  I have written the necessary doc or comment.
[x]  I have added the necessary unit tests and all cases have passed.

Add or update API

[x] I have added the necessary e2e tests and all cases have passed.

sorry i didn`t see this pr #2529

I found this depend the httpclient5, there also have httpclient 4.5.14, okhttp in the system, suggest we unify them and use only one

I found this depend the httpclient5, there also have httpclient 4.5.14, okhttp in the system, suggest we unify them and use only one

okay，i will fix them later

I found this depend the httpclient5, there also have httpclient 4.5.14, okhttp in the system, suggest we unify them and use only one

hi, how about i submit another pr, and unify the httpcliens version in that pr; cause this modification will effect many codes

I found this depend the httpclient5, there also have httpclient 4.5.14, okhttp in the system, suggest we unify them and use only one

hi. i found many depnedencies import the httpclient 4 version , maybe i should change the httpclient5 to httpclient4

okay👍👍, this seem effect many components.

btw, I found only https://github.com/apache/hertzbeat/blob/361e573d8e9d55d4afb5fe76b1806b0f96fe298e/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/influxdb/InfluxdbDataStorage.java#L89 okhttp is used here Library.
maybe we can use httpclient instead in our project. spring has given up on okhttp, https://github.com/spring-projects/spring-framework/issues/30919 @Aias00 cc @tomsun28

@tomsun28  hi, i tried to degrade the httpclient 5 to httpclient 4. but the truth is that spring-web:6.1.4 would not support httpclient 4 anymore. so i think we can do that changed later, or i can see whether we can upgrade all httpclient4 to httpclient5

btw, I found only
https://github.com/apache/hertzbeat/blob/361e573d8e9d55d4afb5fe76b1806b0f96fe298e/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/influxdb/InfluxdbDataStorage.java#L89
okhttp is used here Library.
maybe we can use httpclient instead in our project. spring has given up on okhttp, spring-projects/spring-framework#30919 @Aias00 cc @tomsun28

hi, the influxdb-java library has binding okhttp , we can not change that now

@tomsun28 hi, i tried to degrade the httpclient 5 to httpclient 4. but the truth is that spring-web:6.1.4 would not support httpclient 4 anymore. so i think we can do that changed later, or i can see whether we can upgrade all httpclient4 to httpclient5

Hi, yes, maybe we can upgrade httpclient4 to httpclient5 later


Undo stops are created by extensions even when undoStopBefore/After options are both false

VSCode Version: 1.7.2
OS Version: Windows 10

I've just been updating my extension to make it so that automatic edits, made by the extension in between any two manual edits made by the user, are not included in the user's undo history and are simply removed as a batch as the user steps through the undo history made by their manual edits, so that the minor edits made by the extension are not given the same weight as a user's normal edits. Unfortunately, the undoStopBefore and undoStopAfter options seem to have no effect.
Steps to Reproduce:

Clone the simple extension autotrim from https://github.com/axefrog/vscode-autotrim
Modify line 36 of extension.ts, disabling undo stops so that the code matches the code block further below.
Set up a text file with five lines of text, and some trailing spaces on lines 2, 3 and 4.
Test the extension in debug mode by making a change to line 1 and then using the arrow keys to move the cursor to line 5 and make another edit there. The extension will trim lines 2, 3 and 4 as it moves past them on the way to line 5.
Try and undo the edits to lines 5 and 1.

Bug: I'd expect the first undo to remove the edit to line 5, and the next undo to reverse all of the automatic changes to lines 2, 3, and 4, as well as the manual edit made to line 1. Instead, undo stops are also created for each line that was automatically trimmed by the extension, requiring several additional undos before the manual edit to line 1 is undone.
The code for line 36 should be:
editor.edit(ed => ed.replace(line.range, text), {undoStopBefore: false, undoStopAfter: false});

@axefrog editor.edit exists exactly for cases like this (i.e. bulk editing multiple regions in the file). I suggest that you execute the for loop inside the editor.edit call. i.e.:
editor.edit((editBuilder) => {

// for loop in here:
// i.e. multiple calls to editBuilder.replace

});

This will make it that this is one edit operation containing N edits instead of N edit operations containing 1 edit.

@alexandrudima I'm not quite sure what you're suggesting. My example suggested multiple lines for clarity, but the real use case was simply that the extension was performing an edit and creating an undo stop where none was desired. I'm not sure I understand how your response addresses the original concern, i.e. that I make an edit, navigate around the document a bit, and then make another edit, after which I attempt an undo, only to have to step through one or more undo stops that are the result of the extension trimming lines between my manual edits. Note that multiple lines may have been trimmed, but they are not being trimmed as a single operation- they're being trimmed on an adhoc basis depending on user behaviour. I can't make multiple batched calls to perform those edits because they're not all happening at the same point in time. I also am unclear how your response addresses the fact that undo stops are created when the options specified that they shouldn't have been, irrespective of whether I made one edit or ten.

@axefrog I'm sorry I misunderstood initially.
TL;DR the API works, your edits do not create undo stops, but moving the cursor creates those undo stops, long explanation below
I have now tried your steps, and I can understand the intent of your extension: removing trailing whitespace on lines that have been "visited" by the cursor.
The root cause of this behaviour is that moving the cursor creates undo stops. Here I have logged in the undoStack manager what edit operations arrive to it and when undo stops are created:

I hope you notice how simply moving the cursor (without any edit operations) creates undo stops. Unfortunately, this is by design. The reason is simple: cursor moving is the single best hint of when to push undo stops in 90% of the cases. To further explain, consider the following steps:
Typing does not push undo stops

open an editor
type a
type b
type c
type d
undo: notice how typing does not introduce undo stops and it is possible to undo a, b, c and d having been typed in a single undo operation.

Cursor movement pushes undo stops

open an editor
type a
type b
press arrow left
press arrow right
type c
type d
undo: notice how the first undo removes cd and the second undo removes ab

In closing
This is expected and consistent with other editors I have tried.
Notice how from a logical point of view, the edits are 100% the same in both cases. i.e:

insert a at position (6, 0)
after some time, insert b at position (6, 1)
after some time, insert c at position (6, 2)
after some time, insert d at position (6, 3)

The only difference between the two cases is that the cursor was moved, hence moving the cursor inserts undo stops. I welcome any suggestions for improving how this works (while keeping the current undo behaviour around typing, deleting, etc.), including in the form of a PR.

@axefrog Having given it more thought, I find the intent of the extension cool, i.e. trim trailing whitespace on "visited" lines, but I also find it surprising that simply navigating a file leads to it being edited. i.e. if I open a file for reading and never intend to edit it, your extension will kick in and remove trailing whitespace.
What you could do to workaround the cursor pushing undo stops when it moves and to accomodate the "reading" case is that you could "buffer" the edits and send them off when you get a text document change event (you'll have to accomodate to ignore the document change events generated by your extension, i.e. don't enter an endless loop), but then when the end user creates an edit, your extension can react and trim the desired lines in one swift (i.e. bulk) edit containing N trim trailing whitespace edits.

@alexandrudima Thanks a lot for the feedback and sorry for the slow reply. I'll take it on board and come back if I have anything further to add.


ci_gen_kustomize_values - IPv6

Adds a new role variable: cifmw_ci_gen_kustomize_values_primary_ip_version Defaults to 4
Set variable cifmw_ci_gen_kustomize_values_ip_version_var_mapping with conditionally set vX values based on IP version.
In the jinja2 templates, set up variable _ipv with the mapping from cifmw_ci_gen_kustomize_values_ip_version_var_mapping.
By replacing the version specific variables. i.e network_v4 with _ipv.network_vX etc in the template so that it is easy to switch the primary ip-version when looking up data from facts and loaded data structures.
As a pull request owner and reviewers, I checked that:

[x] Appropriate testing is done and actually running

@hjensas did you run any of the ipv4-based uni jobs against it? Maybe running NFV would also be good (I'll let you sync with @elfiesmelfie or @rdiazcam or @pablintino for NFV testing). This change is affecting all of the jobs, we'd rather be 200% sure it's not breaking. It shouldn't, but...

/approve
The general idea is fine - just waiting for the two last tests to end, and we will be able to tick the last checkboxes and send this PR in.

I could get up to tempest (tempest failed in both case, for unrelated reasons). So we're good I think.

/hold
We're about to get a run against NFV by @pablintino

/lgtm


Update multicolumnlistbox

Issues fixed by this PR
Add vertical separators to multicolumnlistbox #223
What does this implement/fix?
Added optional parameter in MultiColumnListBox that specifies the separator character to be used.
Any other comments?
Feedback and comments welcome :-) thank you

Coverage decreased (-0.09%) to 97.204% when pulling dbfc2b9c94d0879413cb67f40286a225406b0dfd on edoffagne:update_multicolumnlistbox into ec0d8ce4ac2be8cad2e361ec316b72d02f4cc1a9 on peterbrittain:master.

Coverage decreased (-0.09%) to 97.204% when pulling dbfc2b9c94d0879413cb67f40286a225406b0dfd on edoffagne:update_multicolumnlistbox into ec0d8ce4ac2be8cad2e361ec316b72d02f4cc1a9 on peterbrittain:master.

Coverage decreased (-0.09%) to 97.204% when pulling dbfc2b9c94d0879413cb67f40286a225406b0dfd on edoffagne:update_multicolumnlistbox into ec0d8ce4ac2be8cad2e361ec316b72d02f4cc1a9 on peterbrittain:master.

Many thanks!


TOTK Version 1.2.0 Causes Yuzu to Be Stuck in "Launching"

Plugin: 2.0.1
TOTK: 1.2.0
OS: Windows 11
Yuzu: 1494

Thanks for reporting this. The file that this mod updates was changed in v1.2.0, so I'll need to make a new version of the mod for v1.2.0. I'll do that today.

Thank you sir!


Need CoreCLR compliant version

Is there CoreCLR compliant version of Microsoft.Bond ?  If not what are plans around making it available?

It is in the Nuget. Note that Bond.IO is not CoreCLR but it is an optional assembly that contains streams optimized slightly via unsafe code.

I tested Bond against Core CLR a few months ago using the Bond.IO.Safe classes. All was well.
When Core CLR settles down some more, we'll figure out a way to get it into our automatic build matrix. Opened #166, "Add CoreCLR to build/test matrix", for this.

See PR #264 for more complete .NET Core support

The version just released, 5.1.0, includes .NET Core support via .NET Standard 1.0, 1.3, or 1.6.


Feature/#210 fastify sensible

Quick Description of the PR
Closes #210
An Overview of the Changes

Added fastify sensible plugin for more consistency and some default configurations
Updated users and auth endpoints to use the included httpErrors (slightly different syntax than using the http-errors package directtly)
Also updated the documentation about the backend

To do: added eslint ignore rule for the Ajv configuration because it's importing Ajv which isn't listed in package.json, but is a dependency of fastify. There is a better way to configure this but it's unclear based on different versions of the docs, so opened a new issue to fix this. #223
Also to do: I didn't update all other handlers for posts because these are WIP in #191 for the data model update so when everything is updated the http-errors package can be removed

I can't seem to add @mushketyk as reviewer


Finding Differentiation of a polynomial function f(x)

I would like to work on this issuer under JWOC 2023. Please Assign @Srijita-Mandal 😄

@pooranjoyb Can you implement it by improving algebraic derivative calculator which is already present?

Okk sure, I'll do that. Please assign.

Okk sure, I'll do that. Please assign.@Srijita-Mandal

Go for it.


Update Posts “lorem-ipsum”

Automatically generated by Netlify CMS

👷 Deploy Preview for aesthetic-alpaca-69c90c processing.

Name
Link

🔨 Latest commit
36e64fc2895a84f03eb9c66c4565b9a83dca1fb1

🔍 Latest deploy log
https://app.netlify.com/sites/aesthetic-alpaca-69c90c/deploys/641f788d846a380007cdc636


[EASI-2766] Spell out Model Innovation Tool in MINT header

EASI-2766
Changes and Description

Spell out Model Innovation Tool in MINT header (only)

How to test this change

PR Author Review Checklist

[ ] Met the ticket's acceptance criteria, or will meet them in a subsequent PR.
[ ] Added or updated tests for backend resolvers or other functions as needed.
[ ] Added or updated client tests for new components, parent components, functions, or e2e tests as necessary.
[ ] Updated the Postman Collection if necessary.

PR Reviewer Guidelines

It's best to pull the branch locally and test it, rather than just looking at the code online!
Check that all code is adequately covered by tests - if it isn't feel free to suggest the addition of tests.
Always make comments, even if it's minor, or if you don't understand why something was done.

Looks good, but looks like the name change is causing cypress test to break

I dont think any of the cypress failures had to do with this name change, they all seemed unrelated.d. Cypress in CI has been flaky.  Hopefully a rerun fixes it


feat: Update preview images

Create appropriate preview images for when selecting the watch face on both round and square.

Images updated.


[Tooltip] focused input inside tooltip trigger prevents clicks on tooltip from registering

🐛 Bug report
When an input inside a tooltip trigger is focused it doesn't register clicks inside that tooltip
💥 Steps to reproduce

Go to https://codesandbox.io/s/input-inside-button-with-tooltip-6xynfs?file=/src/App.js
Focus the input
Hover over the button
Attempt to click the button in the tooltip

💻 Link to reproduction
https://codesandbox.io/s/input-inside-button-with-tooltip-6xynfs?file=/src/App.js
🧐 Expected behavior
Clicks are registered
🌍 System information

Software
Version(s)

Zag Version
0.17.0

Browser
Arc Version 1.6.0 (41215) Chromium Engine Version 116.0.5845.140

Operating System
MacOS Ventura 13.3.1

📝 Additional information
https://github.com/chakra-ui/zag/assets/23258552/9f43217c-2744-4cbc-b063-982dfda75df6

This is primarily because closeOnPointerDown: false didn't work. You also should use interactive: true when you want users to interact with the content tooltip.

Generally speaking, this behavior is better suited for a popover not a tooltip since they shouldn't include interactive elements (like buttons)

This is primarily because closeOnPointerDown: false didn't work. You also should use interactive: true when you want users to interact with the content tooltip.

Generally speaking, this behavior is better suited for a popover not a tooltip since they shouldn't include interactive elements (like buttons)

I'm using tooltip because I want the button to show up on hover and not on click.
With the recent version (0.18.0), interactive: true and closeOnPointerDown: false this still doesn't work :(

@segunadebayo just making sure this wasn't missed ^

@hadar759
Handling the pointerdown and click events correctly should get you pretty far.
Here's a solution for this:
import "./styles.css";
import React, { useId } from "react";
import * as tooltip from "@zag-js/tooltip";
import { normalizeProps, useMachine } from "@zag-js/react";

export default function App() {
  const [state, send] = useMachine(
    tooltip.machine({
      id: useId(),
      interactive: true,
      closeOnPointerDown: false,
      closeOnEsc: false,
      positioning: { offset: { mainAxis: 8 }, placement: "right" },
    })
  );

  const api = tooltip.connect(state, send, normalizeProps);

  return (
    <>
      <button {...api.triggerProps} style={{ padding: "16px" }}>
        <input onClick={(e) => e.stopPropagation()} />
      </button>
      {api.isOpen && (
        <div {...api.positionerProps}>
          <div {...api.contentProps} onPointerDown={(e) => e.preventDefault()}>
            <button onClick={() => console.log("clicked button")}>
              Click on me!
            </button>
          </div>
        </div>
      )}
    </>
  );
}

@hadar759
Handling the pointerdown and click events correctly should get you pretty far.
Here's a solution for this:
import "./styles.css";
import React, { useId } from "react";
import * as tooltip from "@zag-js/tooltip";
import { normalizeProps, useMachine } from "@zag-js/react";

export default function App() {
  const [state, send] = useMachine(
    tooltip.machine({
      id: useId(),
      interactive: true,
      closeOnPointerDown: false,
      closeOnEsc: false,
      positioning: { offset: { mainAxis: 8 }, placement: "right" },
    })
  );

  const api = tooltip.connect(state, send, normalizeProps);

  return (
    <>
      <button {...api.triggerProps} style={{ padding: "16px" }}>
        <input onClick={(e) => e.stopPropagation()} />
      </button>
      {api.isOpen && (
        <div {...api.positionerProps}>
          <div {...api.contentProps} onPointerDown={(e) => e.preventDefault()}>
            <button onClick={() => console.log("clicked button")}>
              Click on me!
            </button>
          </div>
        </div>
      )}
    </>
  );
}

Thanks 🙏  This solved the issue :D


Edge Browser not working?

It seems that the Edge Browser from Microsoft is not showing up in my stats. But when I check in the console (pressing F12) of Edge, there is no Warning or Error, yet although I do browse my site with Edge, nothing shows up in the stats.

I've tested it with Edge 83.0.478.37 and it seems to work fine. Are you seeing a blank page or just empty charts?

I updated to the lasted Edge (I still had Version 44 sth) and now I can see the pages showing up when I browse the website.


Support for OAuth 2.0 authorization code flow

Is there a way to configure the code flow shown here: https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-protocols-oauth-code for web services created this way?

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

ID: a6ce721f-942d-58e3-3ab1-0df98fb5d1b5
Version Independent ID: 9cdd3350-f169-6cdb-239e-a6013e628b65
Content: Azure Machine Learning Model Management web service consumption
Content Source: articles/machine-learning/desktop-workbench/model-management-consumption.md
Service: machine-learning
GitHub Login: @raymondlaghaeian
Microsoft Alias: raymondl

@danielithiessen Thank you for the valuable feedback,we are investigating the issue.

@danielithiessen Thanks for the feedback! I have assigned the issue to the content author to investigate further and update the document as appropriate.
@raymondlaghaeian Hi, this is a doc-enhancement issue here, can you please check it and update the document as necessary? Thanks a lot!

@YutongTie-MSFT - this article was deprecated in September and is no longer maintained. #please-close.

@danielithiessen We will now proceed to close this thread. If there are further questions regarding this matter, please tag me in your reply. We will gladly continue the discussion and we will reopen the issue.


Add event name ( event.name ) column in the list of Logs

closes: #132
Add a column of event.name in the list of Logs. It'll be N/A<Event Name> if event.name is not set.
Screenshot

thanks!


Does anyone successfully compile and test "time_two_op" on the "2.1.0-custom-op-gpu-ubuntu16" image?

My environment is
Ubuntu 18.04
(Do I need to provide another environment?)
I tried for a long time without successfully completing the test of time_two_op.
The initial problem was that nvcc couldn't find the fPIC option. This is because there is CFLAGS in NVCC, and the fPIC in CFLAGS did not add Xcompiler before, and nvcc couldn't find fPIC.
Later.
I encountered some problems. I forgot what changes I made, and finally I compiled the SO library.
The following are my compilation instructions and output:

root@c2f387c31644:/working_dir/my_op# make time_two_gpu_only
2020-05-09 03:33:32.838500: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libnvinfer.so.6
2020-05-09 03:33:32.839752: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libnvinfer_plugin.so.6
2020-05-09 03:33:34.059140: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libnvinfer.so.6
2020-05-09 03:33:34.060345: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libnvinfer_plugin.so.6
nvcc -std=c++11 -c -o tensorflow_time_two/python/ops/_time_two_ops.cu.o tensorflow_time_two/cc/kernels/time_two_kernels.cu.cc -I/usr/local/lib/python2.7/dist-packages/tensorflow_core/include -D_GLIBCXX_USE_CXX11_ABI=0 -O2 -std=c++11 -D_GLIBCXX_USE_CXX11_ABI=0 -L/usr/local/lib/python2.7/dist-packages/tensorflow_core -l:libtensorflow_framework.so.2 -x cu -Xcompiler -fPIC -DNDEBUG --expt-relaxed-constexpr

root@c2f387c31644:/working_dir/my_op# make time_two_op
2020-05-09 03:34:06.279300: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libnvinfer.so.6
2020-05-09 03:34:06.280573: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libnvinfer_plugin.so.6
2020-05-09 03:34:07.469400: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libnvinfer.so.6
2020-05-09 03:34:07.470612: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libnvinfer_plugin.so.6
g++ -I/usr/local/lib/python2.7/dist-packages/tensorflow_core/include -D_GLIBCXX_USE_CXX11_ABI=0 -O2 -std=c++11 -D_GLIBCXX_USE_CXX11_ABI=0 -fPIC -o tensorflow_time_two/python/ops/_time_two_ops.so tensorflow_time_two/cc/kernels/time_two_kernels.cc tensorflow_time_two/cc/kernels/time_two.h tensorflow_time_two/cc/ops/time_two_ops.cc tensorflow_time_two/python/ops/_time_two_ops.cu.o -shared -L/usr/local/lib/python2.7/dist-packages/tensorflow_core -l:libtensorflow_framework.so.2  -D GOOGLE_CUDA=1  -I/usr/local/cuda/targets/x86_64-linux/include -L/usr/local/cuda-10.1/targets/x86_64-linux/lib -lcudart

root@c2f387c31644:/working_dir/my_op# make time_two_test
2020-05-09 03:34:26.682548: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libnvinfer.so.6
2020-05-09 03:34:26.683766: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libnvinfer_plugin.so.6
2020-05-09 03:34:27.891841: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libnvinfer.so.6
2020-05-09 03:34:27.893596: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libnvinfer_plugin.so.6
python tensorflow_time_two/python/ops/time_two_ops_test.py
2020-05-09 03:34:29.092042: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libnvinfer.so.6
2020-05-09 03:34:29.093241: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libnvinfer_plugin.so.6
Traceback (most recent call last):
File "tensorflow_time_two/python/ops/time_two_ops_test.py", line 28, in
import time_two_ops
File "/working_dir/my_op/tensorflow_time_two/python/ops/time_two_ops.py", line 25, in
resource_loader.get_path_to_datafile('_time_two_ops.so'))
File "/usr/local/lib/python2.7/dist-packages/tensorflow_core/python/framework/load_library.py", line 57, in load_op_library
lib_handle = py_tf.TF_LoadLibrary(library_filename)
tensorflow.python.framework.errors_impl.NotFoundError: /working_dir/my_op/tensorflow_time_two/python/ops/_time_two_ops.so: undefined symbol: _ZN10tensorflow7functor14TimeTwoFunctorIN5Eigen9GpuDeviceEiEclERKS3_iPKiPi
Makefile:42: recipe for target 'time_two_test' failed
make: *** [time_two_test] Error 1

It can be seen that there is nothing defined when loading SO finally.
Later, I tried to write a GPU OP, and the "undefined symbol" error appeared when loading the SO library.
And the example of zero_out Op can work normally
Whether or not --runtime = nvidia --privileged boot image will have this problem。I don't know how to solve it, can someone help me?

最后我在Ubuntu18.04 tfgpu2.1.0下编译了time_two_op，而没有使用docker


Animal detection support

Hi,
is it possible to add the animal detection? Thank you.

Yes but using another nodes :) @crxporter did it!

Hehe - I did it with tensorflow!
It should be possible with some careful searching of the camera websocket messages. I'll try digging around next time I'm working on my automation! Might be a week or so, ping me if I don't respond again soon

This is now available with v1.0.0 Dev 2
available by running, and using the Protect Node
npm install node-red-contrib-unifi-os@dev

Thank you!


Support WT32-ETH01  (ESP32 / LAN8720)

Good day,
I would like to ask if it would be possible to add support for the following board.
https://www.makeuseof.com/this-6-esp32-board-is-a-diy-smart-home-dream/
https://www.seeedstudio.com/Ethernet-module-based-on-ESP32-series-WT32-ETH01-p-4736.html
https://github.com/Aircoookie/WLED/issues/1027#issuecomment-750540512
It is a very compact and cheap design. PHY support is implemented directly into the ESP32 SDK.

Thank for your interest in this library.
As you know, the WT32-ETH01 (ESP32 / LAN8720) is using special and not fully compatible AT-commands to control ESP32-WiFi and Ethernet. This is very different from what is supported by this EthernetWebServer library. Therefore, this library will never support that type of shield.
The closest libraries you can use for WiFi, hopefully working OK, are

ESP8266_AT_WebServer
ESP_AT_WiFiManager
ESP_AT_Lib

I'll try to ask SeeedStudio to send or buy some samples of this interesting WiFi+Ethernet shield to see if I can write a special library (similar to those AT-command libraries) for them. But I can't promise anything as I'm so busy right now, just in the long wish list.

Good day,
The use of this PHY chip is directly supported by the ESP and its SDK library. A simple example of activation can be viewed here.
I ordered two pieces so I could try, now I'm waiting for delivery. This board has great potential.
https://www.letscontrolit.com/forum/viewtopic.php?p=49844#p49844

I already have the module in my hand. I managed basic operations such as sending an email and the like. Now I would like to use your interface to work with a web server.
Here I attach the tested settings for this hardware.
`/*

ETH_CLOCK_GPIO0_IN   - default: external clock from crystal oscillator
ETH_CLOCK_GPIO0_OUT  - 50MHz clock from internal APLL output on GPIO0 - possibly an inverter is needed for LAN8720
ETH_CLOCK_GPIO16_OUT - 50MHz clock from internal APLL output on GPIO16 - possibly an inverter is needed for LAN8720
ETH_CLOCK_GPIO17_OUT - 50MHz clock from internal APLL inverted output on GPIO17 - tested with LAN8720
*/
#define ETH_CLK_MODE    ETH_CLOCK_GPIO0_IN
#define ETH_POWER_PIN   16						                // Pin# of the enable signal for the external crystal oscillator (-1 to disable for internal APLL source)
#define ETH_TYPE        ETH_PHY_LAN8720			                     // Type of the Ethernet PHY (LAN8720 or TLK110)
#define ETH_ADDR        1						                         // I²C-address of Ethernet PHY (0 or 1 for LAN8720, 31 for TLK110)
#define ETH_MDC_PIN     23						                     // Pin# of the I²C clock signal for the Ethernet PHY
#define ETH_MDIO_PIN    18						                  // Pin# of the I²C IO signal for the Ethernet PHY`

maybe for someone some help
NOT another century AT wired phone modem commands ;-)
but arduino ide examles for WT32-ETH01
https://github.com/ldijkman/WT32-ETH01-LAN-8720-RJ45-

@ldijkman
Thanks for your repo which will help many users.
I'll definitely add the EthernetWebServer support to this interesting WT32-ETH01 board when I receive (still somewhere)
Regards,

Hi all,
FYI, the support for good WT32-ETH01 board has been provided by the new library WebServer_WT32_ETH01, which is just released today.
Cheers,

Hi @ldijkman
Thanks for you good library which helps and saves me a lot of time to start with the new WT32-ETH01 board.
Best Regards,

In the file webServer_WT32_ETH01_Impl.h ther eare some cases like
case ARDUINO_EVENT_ETH_START:
When I start the compilation some errors are display that ARDUINO_EVENT_ETH_START (and other) not defined.
Has I include some other files ?

Please put the issue in the correct library WebServer_WT32_ETH01 next time.

PIO is using ESP32 core v1.0.6 now, the current library version is using v2.0.0+ by default.
You have to either

Using Arduino IDE and ESP32 core v2.0.1
Using PIO and library version v1.2.0-. Read Important notes
If using library version v1.3.0, add in your code,

// Uncomment to use ESP32 core v1.0.6-
#define USING_CORE_ESP32_CORE_V200_PLUS     false

Hi @ldijkman
Thanks for you good library which helps and saves me a lot of time to start with the new WT32-ETH01 board.
Best Regards,

Haha i think i like your espasync wifimanager
For getting me started
Easy home automation mdns logical hostname
Http://living.local etc with auto linked list of devices in network
https://github.com/ldijkman/Hey_Electra


Mobile responsive post images

Hello,
How can I make the post images in the liebling theme mobile responsive? Right now they look very good on desktop, but if you open a blogpost on mobile, the image gets cut off really bad (example: https://blog.cakedefi.com/transparency-report-q1-2021-2/)
Would really appreciate some help on this, as I tried out many different things already but they didn't quite work.

Hi,
the featured image is responsive actually but the idea is to keep a consistent height no matter what the images height is, to achieve that the theme applies some styles that keep the aspect ratio consistent, that means if you image is wider than the device width then some parts will be cropped, this is in general no an issue because the featured image is there only for presentational purposes, you shouldn’t include important content in that image.
A quick way to show the full image is by injecting the following styles in the Ghost Admin (Settings -> Code injection -> Site Header):
<style>
.post-template .m-hero.with-picture {
  min-height: 0 !important;
  padding: 50px 0 0;
}

.post-template .m-hero__picture {
  position: relative;
  top: auto;
  left: auto;
  width: 100%;
  height: auto;
}

.post-template .m-hero__picture img {
  width: 100%;
  height: auto;
}

@media only screen and (min-width: 48rem) {
  .post-template .m-hero.with-picture {
    padding: 67px 0 0;
  }
}
</style>

That worked like a charme! Thank you :)


Encourage standardized budget format

Instead of the csv with seemingly arbitrary columns, I think we could encourage some standardized format so that it becomes easier to compare different organizations to each other. Unfortunately, I don't know which ones are good, but perhaps @mattiasaxell who presented work on municipal budgets yesterday have ideas.

Yes, great idea @Ainali. I didn't spend enough time yet on the individual CSV templates and standards.
Happy for Pull Requests or links to existing standards.


train-labels

how can we make labels?

labels are images with same size as the input images, and the value of every pixel is the label, like 0,1.

Any tool to label the images?


Use PowerShellForGitHub for GitHub API interactions (OSOE-486)

When interacting with the GitHub RESTful web API, we do it directly with Invoke-WebRequest (search for "api.github.com"). A better approach would be to use the PowerShellForGitHub module. So, let's do that.

Check if instead, we'd use PSGitHub instead of the official Microsoft one (and if yes, adjust the rest of this task to use that).
Check if at the time there's no existing action to do what's below, and use it if there actually is.
Create a new action that installs the module. Does the installation take more than 5s on standard GitHub-hosted runners? Let's cancel this whole task, then: We only fire one-two API request after each other, so too much overhead wouldn't make sense.
Create a new action that sets up authentication to the GitHub API for the current section (see this example). This action should by default also call the installation action, unless an optional parameter is set to "false".

Jira issue

https://github.com/Lombiq/GitHub-Actions/issues/157 was actually for the same goal, so now we don't need this anymore.


Fix grammatical issues from Korean translation

I recently found out that a Korean translation of wtfjs was created, and it was harder to read than I thought, as it was written by a non-native speaker, and the 'translation tone' seemed to remain. Therefore, I tried to make the translation easier to read by enhancing the translation a little bit more.
The major changes are as follows.

When 'postposition'(like 은/는/이/가/을/를) is placed behind English words or English words wrapped in backticks, unnecessary spaces are removed.
It is the same word, but the parts used differently depending on the location are modified.
There were many problems with spacing, so they were corrected.
The sentence ends awkwardly modified.
Other grammatically correct typos or errors.

Could you review this PR? @denysdovhan