Correct the RPM package name on Windows

Given
julia> WinRPM.search("fft")
WinRPM Package Set:
  1. fftw3-debug (mingw64) - Debug information for package mingw64-fftw3
  2. fftw3-debugsource (mingw64) - Debug sources for package mingw64-fftw3
  3. fftw3-devel (mingw64) - Include Files and Libraries mandatory for Development
  4. libfftw3-3 (mingw64) - Discrete Fourier Transform (DFT) C Subroutine Library

it seems that WinRPM might be expecting the package to be called libfftw3-3. So let's try that on AppVeyor and see what happens.

Windows failure is https://github.com/JuliaLang/julia/issues/22431

yeah this is what I mentioned https://github.com/JuliaMath/FFTW.jl/issues/13#issuecomment-309521524
I too have seen 32bit failures, my hunch is that it's with LibExpat although I haven't' investigated carefully

Sorry didn't see that comment

Thanks for taking a look here and for helping investigate this


NAPS2.Wia.Native.dll Not found

I tried running the example in my application and it threw "DllNotFoundException" with message: System.DllNotFoundException: 'Unable to load DLL 'NAPS2.Wia.Native.dll': The specified module could not be found.
I am running Windows 11 and my project is using .Net framework 4.0.

NAPS2.Wia generates _win32 and _win64 folders in the output directories with that DLL. You'll need to make sure your project includes them. If you have a chain of project references you might need to reference it in the main project (e.g if you have A > B > NAPS2.Wia you might also need A > NAPS2.Wia).


Move the leave game button to the top bar

More space for drawing and displaying the scoreboard

? https://bootstrap-vue.org/docs/components/navbar


Revert DependencyModel version

https://github.com/aspnet/Mvc-Private/pull/8#issuecomment-344485491 but in the public repo.

FYI Coherence-Patch was updated to point to public repos: https://github.com/aspnet/Coherence-Patch/commit/b3708a3d2ee6306936e95398cdf705116d440943.
Note, I specifically chose not to mark the HttpSysServer packages as "ship" in the packages.csv. However, I will manually copy over the two packages that were built previously for building the LZMA as I would like to use the same packages that were uploaded to nuget.

Why are you requesting to merge from rel/1.1.6 to rel/1.1.5? Seems like this should stay in the rel/1.1.6 branch.

Could we branch to rel/1.1.6 and then send a PR to it?

From the original PR:

FYI. Diff with 1.1.5 for comparison but it's checked in as rel/1.1.6 which is what Coherence-Patch builds

I made the branch already as I wanted to be able to launch a build right away. This change isn't meant to be merged, it's meant to be a diff only.

Already building with this branch. Note, do not delete this branch.


Avoid redudant requests in decipher process

Description

move decipher from parseVideoInfo into StartDownload method
merge  FormatBase and stream into Stream type
remove log to show stream info in parseVideoInfo
use argument -info instead of -itags

Issues to fix
Please link issues this PR will fix:
#67
if no relevant issue, but this will fix something important for reference
, please free to open an issue.

LGTM


Bug with Improved Drawing of NumericIndicator

The device hangs if the SCPI subsystem is enabled (always on splash screen).
This error occurs since commit
Issue #17: Improved drawing of NumericIndicator<PHONE_NUMBER>d...)

It doesn't hang (works normal):

if #define DDS_USER_DEFINED_WAVEFORMS_ENABLED is commented out in Configuration.h => less data memory used

It hangs:

if the "old" NumericIndicator files (before the commit above) are used but the _stringDrawBuffer is added to the class definition => more memory used

Device doesn't hang anymore with fix in commit bff5059 (reduced memory usage).
But Data memory usage is too high and can be causing side effects.


Use ioutil.TmpDir for new created temp directory

Although it's safe enough to use nanoseconds but I think os.TmpDir should be better.

Codecov Report

Merging #9368 into master will decrease coverage by <.01%.
The diff coverage is 33.33%.

@@            Coverage Diff            @@
##           master   #9368      +/-   ##
=========================================
- Coverage   41.41%   41.4%   -0.01%
=========================================
  Files         568     568
  Lines       74109   74108       -1
=========================================
- Hits        30689   30688       -1
+ Misses      39593   39591       -2
- Partials     3827    3829       +2

Impacted Files
Coverage Δ

models/repo_generate.go
3.81% <0%> (+0.01%)
:arrow_up:

models/repo.go
48.1% <33.33%> (-0.09%)
:arrow_down:

services/pull/check.go
53.52% <50%> (-1.16%)
:arrow_down:

modules/log/event.go
64.61% <0%> (-1.03%)
:arrow_down:

models/repo_list.go
74.07% <0%> (+0.92%)
:arrow_up:

models/unit.go
67.56% <0%> (+5.4%)
:arrow_up:

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 67b316a...646c493. Read the comment docs.

Although it's safe enough to use nanoseconds but I think os.TmpDir should be better.

Not all systems have nanosecond resolution, even if the time is expressed in nanoseconds, so ioutil.TempDir is the correct way to handle temp dirs.

@typeless @guillep2k @techknowlogick done.


Fix #290, issue with replacing selections in SuperEditor

Fixes the issue described in #290. Resolves #290.

It looks like you've identified the source of the issue, but this particular change doesn't really address the broader issue.
With the introduction of this new behavior, this handler is no longer correctly named. The behavior for a destructive key, like backspace or delete, is now different from that of a content character that is pressed. For example, you mentioned SuperTextField, if you check the implementation, you'll see that the behavior for adding a content character includes handling an expanded selection.
The appropriate change for #290 would be to reduce this handler to just destructive keys, and then add the necessary selection inspection and content removal from the handler(s) responsible for inputing new content characters.

That makes sense, unfortunately it'll probably take me too much time to get this fixed properly then, sorry for the hassle!


[GLUTEN-842] remove group id transformer

What changes were proposed in this pull request?
Removing groupid transformer. We keep it for not breaking CH, now CH also migrate to expand contract. I would like to remove related code.
How was this patch tested?
UT.

@JkSelf  and @exmy,  could you please take a look?

LGTM


Fix error message for wrong query frontend address config

Currently the error log prints distributor address instead of queryfront end address.

@weeco


Fix function ARN and tweak memory

In recent tests, this function run using 101MB, so reducing the memory to 256MB (and with it, reducing the cost ~4 times) seems reasonable.


Flutter apk Build Error

I tried to build with
flutter pub get
then
flutter build apk --release
And got the following errors.
UPDATE: Looks like I'm missing some android components.  I will try to install them.
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 3.22.0, on macOS 14.3.1 23D60 darwin-arm64, locale en-US)
[!] Android toolchain - develop for Android devices (Android SDK version 34.0.0)
    ✗ cmdline-tools component is missing
      Run `path/to/sdkmanager --install "cmdline-tools;latest"`
      See https://developer.android.com/studio/command-line for more details.
    ✗ 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 installation is incomplete; a full installation is necessary for iOS and macOS development.
      Download at: https://developer.apple.com/xcode/
      Or install Xcode via the App Store.
      Once installed, run:
        sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
        sudo xcodebuild -runFirstLaunch
    ✗ CocoaPods not installed.
        CocoaPods is used to retrieve the iOS and macOS platform side's plugin code that responds to your plugin usage on the Dart side.
        Without CocoaPods, plugins will not work on iOS or macOS.
        For more info, see https://flutter.dev/platform-plugins
      To install see https://guides.cocoapods.org/using/getting-started.html#installation for instructions.
[✓] Chrome - develop for the web
[!] Android Studio (not installed)
[✓] VS Code (version 1.88.1)
[✓] Connected device (2 available)
[✓] Network resources

flutter build apk --release                                                                                ok  18s  06:53:49 PM

FAILURE: Build failed with an exception.

* What went wrong:
Could not resolve all files for configuration 'classpath'.
> Could not resolve com.android.tools.build:gradle:7.4.2.
  Required by:
      unspecified:unspecified:unspecified > com.android.application:com.android.application.gradle.plugin:7.4.2
   > No matching variant of com.android.tools.build:gradle:7.4.2 was found. The consumer was configured to find a runtime of a library compatible with Java 8, packaged as a jar, and its dependencies declared externally, as well as attribute 'org.gradle.plugin.api-version' with value '7.5' but:
       - Variant 'apiElements' capability com.android.tools.build:gradle:7.4.2 declares a library, packaged as a jar, and its dependencies declared externally:
           - Incompatible because this component declares an API of a component compatible with Java 11 and the consumer needed a runtime of a component compatible with Java 8
           - Other compatible attribute:
               - Doesn't say anything about org.gradle.plugin.api-version (required '7.5')
       - Variant 'javadocElements' capability com.android.tools.build:gradle:7.4.2 declares a runtime of a component, and its dependencies declared externally:
           - Incompatible because this component declares documentation and the consumer needed a library
           - Other compatible attributes:
               - Doesn't say anything about its target Java version (required compatibility with Java 8)
               - Doesn't say anything about its elements (required them packaged as a jar)
               - Doesn't say anything about org.gradle.plugin.api-version (required '7.5')
       - Variant 'runtimeElements' capability com.android.tools.build:gradle:7.4.2 declares a runtime of a library, packaged as a jar, and its dependencies declared externally:
           - Incompatible because this component declares a component compatible with Java 11 and the consumer needed a component compatible with Java 8
           - Other compatible attribute:
               - Doesn't say anything about org.gradle.plugin.api-version (required '7.5')
       - Variant 'sourcesElements' capability com.android.tools.build:gradle:7.4.2 declares a runtime of a component, and its dependencies declared externally:
           - Incompatible because this component declares documentation and the consumer needed a library
           - Other compatible attributes:
               - Doesn't say anything about its target Java version (required compatibility with Java 8)
               - Doesn't say anything about its elements (required them packaged as a jar)
               - Doesn't say anything about org.gradle.plugin.api-version (required '7.5')

* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 1m 17s
Running Gradle task 'assembleRelease'...                           79.6s
Gradle task assembleRelease failed with exit code 1

I'm also unable to build, but with a different error.
> flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[√] Flutter (Channel stable, 3.22.0, on Microsoft Windows [Version 10.0.19045.4355], locale en-EN)
[√] Windows Version (Installed version of Windows is version 10 or higher)
[√] Android toolchain - develop for Android devices (Android SDK version 32.0.0)
[√] Chrome - develop for the web
[√] Visual Studio - develop Windows apps (Visual Studio Professional 2022 17.8.7)
[√] Android Studio (version 2023.3)
[√] VS Code (version 1.89.1)
[√] Connected device (3 available)
[√] Network resources

• No issues found!

Build using stable channel and made sure to clear pub cache and upgrade all dependencies.
>flutter build apk --debug

//AppData/Local/Pub/Cache/hosted/pub.dev/agent_dart-1.0.0-dev.20/lib/archiver/encoder.dart:162:8: Error: The return type of the method 'SingingBlockZipFileEncoder.close' is 'void', which does not match the return type, 'Future<void>', of the overridden method, 'ZipFileEncoder.close'.
 - 'Future' is from 'dart:async'.
Change to a subtype of 'Future<void>'.
  void close() {
       ^
//AppData/Local/Pub/Cache/hosted/pub.dev/archive-3.5.1/lib/src/io/zip_file_encoder.dart:235:16: Context: This is the overridden method ('close').
  Future<void> close() async {
               ^
Target kernel_snapshot failed: Exception

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:compileFlutterBuildDebug'.
> Process 'command 'd:\flutter\bin\flutter.bat'' finished with non-zero exit value 1

* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 29s
Running Gradle task 'assembleDebug'...                             30,0s
Gradle task assembleDebug failed with exit code 1

I got the same error than @KingGorrin.
I believe @0x3639 is just missing the Android toolchain stuff, since he is trying to build an Android apk. Just follow the flutter doctor instructions.

@0x3639 please reinstall the Android toolchain and retry.
@KingGorrin @coinselor the problem you're encountering is due to a transitive library mismatch, more specifically the archive package. agent_dart 1.0.0-dev.20 requires archive version 3.4.10, otherwise you get compile time errors.
Fixed by adding a pubspec.lock with the correct library versions.
Feel free to close the issue if it works for you. Thanks!

I update and ran
flutter clean
 flutter pub get
flutter build apk --release
Now I get the following error

followed by this
Target kernel_snapshot failed: Exception

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:compileFlutterBuildRelease'.
> Process 'command '/opt/homebrew/Caskroom/flutter/3.22.0/flutter/bin/flutter'' finished with non-zero exit value 1

* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 37s
Running Gradle task 'assembleRelease'...                           38.3s
Gradle task assembleRelease failed with exit code 1

@0x3639 please reinstall the Android toolchain and retry.
@KingGorrin @coinselor the problem you're encountering is due to a transitive library mismatch, more specifically the archive package. agent_dart 1.0.0-dev.20 requires archive version 3.4.10, otherwise you get compile time errors.
Fixed by adding a pubspec.lock with the correct library versions.
Feel free to close the issue if it works for you. Thanks!

This fixed the issue.


Oracle package (PLSQL) functions autocomplete not working, missing or new feature?

System information:

Operating system: Windows 10
DBeaver version: 21.2.0
Additional extensions: Git

Connection specification:

Database name and version: Oracle 19c
Driver name: Oracle
Do you use tunnels or proxies (SSH, SOCKS, etc)?  No

Describe the problem you're observing:
Autocomplete for package functions and their parameters is not working, it just works for queries.
Steps to reproduce, if exist:
Open an oracle package and try to autocomplete anything, functon name, local variables etc not working, just if you start typing select * from you get autocomplete suggestions. Maybe I'm missing something or I don't know how to do it.
Include any warning/errors/backtraces from the logs

@yevon I'm not quite sure about steps to reproduce this. If you type a name of the package then dot like schema_name.package_name. and press Ctrl + Space you will get proposal with package contents, even without a Ctrl + Space shortcut, proposed autocomplete should appear, it just can take some time to find metadata. Are you doing something differently

From sql editor it just works fine, I mean in package editor, when you try to perform any autocompletion it doesn't work as it wants you to write anything in the form "Select * from", if you try to call directly to the procedure name it doesn't work. It would be nice also to autocomplete any text in current package, for local variable names etc.

A simple begin end in sql editor doesn't work also:

Also you don't get any prompt if you don't write the schema name prior to the package name. It works in the from clause, but ont in the select clause:

Added HippieCompletion to check for in-script variables and suggest them based on similarity. Turned off by default, can be added via preferences. Needs to be tested on performance problems on large scripts.

@yevon, thank you for your request. We added in-text autocompletion concerning the first part of the issue. The second part, related to BEGIN-END, is working as expected.

Perfect! I will have a look at it, looks promising. Will it be available in 21.3.2 or it is already on 21.3.1?

@yevon It will be available in 21.3.2  :)

verified


UI: Icons for online repo, user id, and transport

I'm not sure why our cloud icon has an arrow in it? Why not just

Add icons for user id:

Change icon for transport from:

to

https://fontawesome.com/icons/cloud?style=solid
https://fontawesome.com/icons/user?style=solid
https://fontawesome.com/icons/truck?style=solid

The transport icon used to be the one you want to change it to and was changed after some discussion because it was apparently more intuitive to some people than the truck.

#2153 , remembered it wrong, there was no truck before ?

Understood. I will try to get SAP to change the truck ;-)

Fontawesome has grown significantly. There are several different trucks available now.


Update the API reference link

@MarkvanMents  FYI: the current link to the API Reference is broken. The team provides a new link which works, but the URL (https://d102io3ppw18a6.cloudfront.net/index/v2.1/apidoc/index.html) can be improved. The team is working on it. I will first update the link to make it work. When the team provides a better URL, I will replace it.


Get error when run flutter app on android

Problem
When trying to run the app it's failed
Error

FAILURE: Build failed with an exception.

What went wrong:
Execution failed for task ':app:checkReleaseDuplicateClasses'.

A failure occurred while executing com.android.build.gradle.internal.tasks.CheckDuplicatesRunnable
Duplicate class com.google.android.exoplayer2.ui.DownloadNotificationHelper found in modules jetified-exoplayer-core-2.18.1-runtime (com.google.android.exopla
yer:exoplayer-core:2.18.1) and jetified-exoplayer-ui-2.12.3-runtime (com.google.android.exoplayer:exoplayer-ui:2.12.3)
Duplicate class com.google.android.exoplayer2.ui.package-info found in modules jetified-exoplayer-common-2.18.1-runtime (com.google.android.exoplayer:exoplaye
r-common:2.18.1) and jetified-exoplayer-ui-2.12.3-runtime (com.google.android.exoplayer:exoplayer-ui:2.12.3)

 Go to the documentation to learn how to Fix dependency resolution errors.

Pubspec File
environment:
sdk: ">=2.17.5 <3.0.0"
dependencies:
flutter:
sdk: flutter
cupertino_icons: ^1.0.2
provider: ^6.0.3
http: ^0.13.4
shared_preferences: ^2.0.15
font_awesome_flutter: ^10.1.0
change_app_package_name: ^1.1.0
carousel_slider: ^4.1.1
pusher_channels_flutter: ^2.0.1
intl: ^0.17.0
vimeo_video_player: ^0.0.4 #make problem with zoom
#vimeo_player_flutter: ^0.0.3+2
awesome_dialog: ^3.0.2
flutter_zoom_sdk: ^1.1.0+4`
Notes:
The  problem happens when using vimeo_video_player with  flutter_zoom_sdk if don't use  vimeo_video_player the app works right

The problem happens when using vimeo_video_player with flutter_zoom_sdk if don't use vimeo_video_player the app works right

vimo_video_player is a third party plugin so I think you will need to report this in dedicated repo: https://github.com/prahack/vimeo_player/issues
Closing from here. If you think this issue is due to framework, write in comments and I'll reopen it.


DateTimes sometimes corrupted

If I write an Excel document where each row has a timestamp written with writeDateTime, it will non-deterministically write the wrong time value, such as nan or some really large number. Here are three rows from a generated worksheet:
<row r="37" spans="1:3"><c r="A37" s="1"><v>43741.16666666666</v></c><c r="C37" t="s"><v>33</v></c></row>
<row r="38" spans="1:3"><c r="A38" s="1"><v>nan</v></c><c r="C38" t="s"><v>34</v></c></row>
<row r="39" spans="1:3"><c r="A39" s="1"><v>3.810139950172045e+227</v></c><c r="B39" t="s"><v>35</v></c></row>

The first row has a valid datetime (in the  tag). The other two do not. I dumped out the DateTime record from the Haskell program before it was written using writeDateTime, and it looked fine.
Running it multiple times produces errors on different rows, even though the code is completely deterministic.
So I can't tell whether this is a bug in HExcel, or in libxlswriter.

Thanks for reporting this @lylek . Do you have some minimal code that is capable of reproducing this issue?

@lylek Ok some debugging revealed that you need to make sure you set the format when writing DateTime values. For now until I release a fix for this just make sure you are setting the format correctly, something like :
  wb <- workbookNew "test.xlsx"
  let props = mkDocProperties
        { docPropertiesTitle   = "Test Workbook"
        , docPropertiesCompany = "HExcel"
        }
  workbookSetProperties wb props
  ws <- workbookAddWorksheet wb "First Sheet"
  df <- workbookAddFormat wb
  formatSetNumFormat df "mmm d yyyy hh:mm AM/PM"
  now <- getZonedTime
  writeDateTime ws (Just df) n 5 (zonedTimeToDateTime now)

Please re-open if you find further problems with this approach, closing this issue now.

Sorry I haven’t responded yet - have been very busy, but I will have time to get you a code sample next week. Thanks for your advice, but I have already been setting the format. It’s possible I’m doing something wrong with setting the format. I’ll try this out and get back to you.

Thanks for reporting this @lylek . Do you have some minimal code that is capable of reproducing this issue?

Yes, here is some minimal code that reproduces the problem:
https://gist.github.com/lylek/2bcf2c33b7bdafc6e71e513a6254fd95
This script will generate an Excel file called buggy-dates.xls. It writes dates only to the first column, one in each row. It writes a date/time for each hour in November 2019.
But some of the datetimes (randomly) will be corrupted. Maybe two or three in the whole file.

@lylek Ok some debugging revealed that you need to make sure you set the format when writing DateTime values. For now until I release a fix for this just make sure you are setting the format correctly, something like :
  wb <- workbookNew "test.xlsx"
  let props = mkDocProperties
        { docPropertiesTitle   = "Test Workbook"
        , docPropertiesCompany = "HExcel"
        }
  workbookSetProperties wb props
  ws <- workbookAddWorksheet wb "First Sheet"
  df <- workbookAddFormat wb
  formatSetNumFormat df "mmm d yyyy hh:mm AM/PM"
  now <- getZonedTime
  writeDateTime ws (Just df) n 5 (zonedTimeToDateTime now)

Please re-open if you find further problems with this approach, closing this issue now. It will be implemented when this issue is resolved #2

I posted a minimal bit of code reproducing the error. I don't have permission to re-open the issue, but perhaps you can?

Hey @lylek , thanks for trying this out. I tried locally and could not reproduce it on my machine. I am on lts Ubuntu 18.04. What OS are you using? This might be platform/machine specific.

Hey @lylek , thanks for trying this out. I tried locally and could not reproduce it on my machine. I am on lts Ubuntu 18.04. What OS are you using? This might be platform/machine specific.

I'm using libxlsxwriter 0.8.7 on macOS 10.14.6. It's possible the bug is in libxlsxwriter and I would have to write a C program to exercise it and find out.

I am using this commit to test with https://github.com/jmcnamara/libxlsxwriter/tree/db9679832304852ec08263324745ba25773d7890
I pulled down the repo, installed it and I am providing stack with a lib folder using --extra-lib-dirs https://docs.haskellstack.org/en/stable/yaml_configuration/#extra-include-dirsextra-lib-dirs maybe that helps. Don't know how this feature is important for you.

I am using this commit to test with https://github.com/jmcnamara/libxlsxwriter/tree/db9679832304852ec08263324745ba25773d7890
I pulled down the repo, installed it and I am providing stack with a lib folder using --extra-lib-dirs https://docs.haskellstack.org/en/stable/yaml_configuration/#extra-include-dirsextra-lib-dirs maybe that helps. Don't know how this feature is important for you.

Thanks @v0d1ch! That newer version of libxlsxwriter fixes the problem for me. I don't see any discussion of a fix for that bug in the CHANGES file for libxlsxwriter. But either the older version had the bug or there was something wrong with the homebrew build of it. When I built it myself from the version you linked, and used that version to build my program, the problem goes away.


Properly report break conditions

A break condition is also a framing error. As it is the more specific code, return the break error.

I wonder what error should be returned if both FE and PE are set. Is one of them more specific and should be preferred?

embassy-rp uses this order of precedence, which looks sensible:
            if dr.oe() {
                Err(nb::Error::Other(Error::Overrun))
            } else if dr.be() {
                Err(nb::Error::Other(Error::Break))
            } else if dr.pe() {
                Err(nb::Error::Other(Error::Parity))
            } else if dr.fe() {
                Err(nb::Error::Other(Error::Framing))
            } else {
                Ok(dr.data())
            }

I wonder what error should be returned if both FE and PE are set. Is one of them more specific and should be preferred?

FWIW I would have frame error as a higher priority.
Sure, your data is corrupt either way but a parity error only tells you that an odd number of bits are wrong, a framing error tells you why the sum of bits is wrong.

I don't agree that the framing error tells you why the parity was wrong. Both flags can be set because of a single bit-error. (If one, or an odd number of, data/parity bits are wrong, you get a parity error. If the stop bit is wrong, you get a framing error.)
But I agree that the framing error should probably have priority: It's more specific. You exactly know which bit was wrong. So it tells you slightly more than the parity error.
Now the difference between the two choices is so small that consistency with other implementations seems to be more important to me. I'll check what the C SDK does.


MAINT: special: restrict symbol visibility

Mark most symbols in scipy.special C code as hidden for dynamic linking, and mark other stuff static that can be static. (I don't know what's the best approach with gfortran, so that is left for later.)
The GCC visibility=hidden is basically a dynamic library level version of the static C declaration.
For information, see https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#index-fvisibility
https://www.akkadia.org/drepper/dsohowto.pdf
To verify:
objdump -T ./build/lib.linux-x86_64-3.6/scipy/special/_ufuncs.cpython-36m-x86_64-linux-gnu.so|grep -v '_$'|grep -v npy_

Python extensions in principle would only need to have a single visible symbol, the PyInit_* function, because this is what Python needs to look up. Symbols that are hidden can still be referred to via function pointers, so the cython_special mechanism still works, extension types can be defined etc.
Hiding symbol visibility from dynamic linking also addresses the problem that occurs when running an Python interpreter embedded in a program that has dynamically loaded a library --- in this case the dynamic namespace may be polluted with all sorts of stuff (e.g. sf_error in gh-8130) and the dynamic linker may end up resolving the wrong symbol when names clash. Importantly, symbols defined "locally" do not necessarily have precedence (!). There's a separate dlopen flag RTLD_DEEPBIND for that, which apparently is not enabled by default because of potential side effects... So it's simpler to just be more strict and not put out symbols to be dynamically linked if there's no conceivable reason to dynamically link them.
Fixes gh-8130

We might want to do similar PRs for all other code (esp. the bundled superlu and qhull), or potentially find some more scalable way to do this. This is mostly an issue for Linux and maybe OSX --- Python distutils with MSVC IIUC automatically adds correct export flags that only export the PyInit* function.

I believe Numba relies on having access to these symbols for support of "nopython" mode.  Have you considered the impact on Numba of hiding these?   You mention cython_special still working.  Will Numba still able to access these functions?

@teoliphant How does numba work on windows?

@tylerjereddy: correct, the symbols need to be visible in different .c
files, but don't need to be exported via dynamic linker to outside the
.so/.dll.
I did explicitly check the original issue is solved by these changes.
@teoliphant: if pointers to the symbols are obtained via what's visible
inside the Python module, instead of using dlsym(), then there should
not be a problem. As I understand, Numba does not look up things using
dlsym(), but uses Cython's export mechanism which stores function
pointers in PyCapsules exposed in the top-level pyx_capi Python
variable, so it should be fine.
On Windows, IIUC distutils exports only the PyInit function via
/EXPORT:PyInit*, so similar symbol hiding is always enabled on that
platform.

While I think this PR is OK to merge as a solution to the reported
issues with "sf_error" name clash, I think for the general solution we
need to override build_ext in setup.py (or make some other equivalent
changes) so that it supplies the correct -Wl,--version-script=... to
the linker when using gcc/gfortran.

In Numba the internals use this https://github.com/numba/numba/blob/master/numba/_helperlib.c#L565 to grab function addresses from inside Cython modules. Numba uses this function on scipy.linalg.cython_blas to get access to BLAS/LAPACK for its np.linalg implementation. I don't think the changes to make the symbols in the DSO hidden by default would impact Numba so long as access via the Cython module still occurs in the same way with regards to symbol resolution. I've added https://github.com/numba/numba/issues/2764 to expose the API to Numba users.

Superseded by more general fix merged in #8463.


Fix dark mode toggle

Fixes an issue where the initial state of the dark mode toggle is wrong when you are on dark mode.
The dark class was not being set properly on load. Removed the dark class manipulation so that html[data-darkmode] is the single source of dark mode state.

Before
After

Repro Steps:

Enable dark mode.
Refresh the page.

Thanks!

Broke again...

Opened #1701 to fix again. Looks like there was a bad merge in #1685 that reverted the fix.


fix: fix redownload when the remote repo has no mod file

1. Does this PR affect any open issues?(Y/N) and add issue references (e.g. "fix #123", "re #123".):

[x] N
[ ] Y

2. What is the scope of this PR (e.g. component or file name):

3. Provide a description of the PR(e.g. more details, effects, motivations or doc link):

[x] Affects user behaviors
[ ] Contains syntax changes
[ ] Contains variable changes
[ ] Contains experimental features
[ ] Performance regression: Consumes more CPU
[ ] Performance regression: Consumes more Memory
[ ] Other

4. Are there any breaking changes?(Y/N) and describe the breaking changes(e.g. more details, motivations or doc link):

[x] N
[ ] Y

5. Are there test cases for these changes?(Y/N) select and add more details, references or doc links:

[x] Unit test
[ ] Integration test
[ ] Benchmark (add benchmark stats below)
[ ] Manual test (add detailed scripts or steps below)
[ ] Other

Pull Request Test Coverage Report for Build<PHONE_NUMBER>1
Details

31 of 41 (75.61%)  changed or added relevant lines in 3 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage increased (+0.3%) to 42.494%

Changes Missing Coverage
Covered Lines
Changed/Added Lines
%

pkg/downloader/downloader.go
0
1
0.0%

pkg/package/modfile.go
0
1
0.0%

pkg/client/test.go
31
39
79.49%

Totals

Change from base Build<PHONE_NUMBER>0:
0.3%

Covered Lines:
4014

Relevant Lines:
9446

💛  - Coveralls


doc: point users to the release page

Otherwise the README has stale install instructions as it's not updated as part of the release process.

Thanks for the fix in json file also!

cc @kotlaja, README file is not imported

cc @alexeagle, can you please resolve conflicts since I exported README file from blaze implementation (just add your change again)?

@kotlaja sure, I just told the GH UI to resolve the conflict


[Wallet] Don't reset pin on onboarding

Description
When the user goes back from the EnterInviteCode or ImportWallet screens, we are resetting the PIN so that the user has to set it again when he goes through the onboarding process again. What's happening is that this PIN reset happens even if the user just completes the process normally and doesn't actually go back. In that case, navigateHome is called, which does a reset of the navigation and that apparently triggers the beforeRemove listener
Tested
Locally on the simulator.

Oh interesting, I had this specific case in mind when I did this. The onFocusEffect returns a clean up function which should be called when the screen looses focus. This way the beforeRemove event should never be called if the screen is not focused.
With what you said, it looks like this assumption is wrong.

@jeanregisser The clean up function is being called, but after the beforeRemove listener. It makes sense to me, because if the user presses on the continue without button the screen is still focused when the navigateHome method is called.


Devs SBAT to use Registry Contract to access address of all contracts

Expected Behavior
Devs SBAT to use Registry Contract to access address of all contracts
Current Behavior
For alfajoresstaging
Addresses from the registry:
    getRegistryContract: Address of Registry contract is 0x000000000000000000000000000000000000ce10
    getRegistryContract: Address of Attestations contract is 0x3D3BF05D4e8EF76Af272c065FdA2700C9533EC29
    getRegistryContract: Address of Escrow contract is 0x0000000000000000000000000000000000000000
    getRegistryContract: Address of Exchange contract is 0x898fCa8015255f4Ed80109616e17F2c6270c75D0
    getRegistryContract: Address of GasPriceMinimum contract is 0x40e927fd522DaD0acf63BEf56d4dd9b3324B13De
    getRegistryContract: Address of GoldToken contract is 0xD016D1654bb83d99b70c3Be3771C2719b2497bc1
    getRegistryContract: Address of StableToken contract is 0x0000000000000000000000000000000000000000

Actual addresses:
    getRegistryContract2: Address of Registry contract is 0x000000000000000000000000000000000000ce10
    getRegistryContract2: Address of Attestations contract is 0x3D3BF05D4e8EF76Af272c065FdA2700C9533EC29
    getRegistryContract2: Address of Escrow contract is 0xd86077CEaA9a84Fc113A6ca340E80dAe37419D40
    getRegistryContract2: Address of Exchange contract is 0x898fCa8015255f4Ed80109616e17F2c6270c75D0
    getRegistryContract2: Address of GasPriceMinimum contract is 0x40e927fd522DaD0acf63BEf56d4dd9b3324B13De
    getRegistryContract2: Address of StableToken contract is 0xaEeF69188629296468940f6a4479b37926EBCaDB
    getRegistryContract2: Address of GoldToken contract is 0xD016D1654bb83d99b70c3Be3771C2719b2497bc1

It seems  Escrow and StableToken addresses are not inserted in the Registry - https://github.com/celo-org/celo-monorepo/blob/master/packages/protocol/lib/registry-utils.ts#L13

Use https://github.com/celo-org/celo-monorepo/pull/287/ for testing


Clarification of how to set the app id URI for tab SSO

I know there's already the same issue reported, but for me it did not clarify the issue and I cannot be reopened, so I have to create a new one.
It the section "To expose an API" in the important block (https://learn.microsoft.com/en-us/microsoftteams/platform/tabs/how-to/authentication/tab-sso-register-aad#to-expose-an-api), it states to "enter the application ID URI as api://fully-qualified-domain-name.com/BotId-{YourClientId}, where the BotID is your bot app ID."
So let's assume I have an Azure AD app registered with Application ID application-client-id and this application ID is entered in Teams App's manifest. I want to have properly configure SSO, and my Teams app offers both Tab App and Bot.
My questions are:

Should I register a separate Azure AD application for the bot, or can I use the same app registration for both Teams app and Bot?
I tried using the same app id for both, but it seems that Teams doesn't like it, and even though the bot works when tested from Azure Portal, Teams shows error when trying to add the app to the teams meeting.
Assuming I have a separate bot app registration with Application ID bot-client-id, how should the app uri look like?

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

ID: 52cb5b2e-e1e9-1993-04a0-6925d1453f20
Version Independent ID: 52cb5b2e-e1e9-1993-04a0-6925d1453f20
Content: Register your tab app with Azure AD - Teams
Content Source: msteams-platform/tabs/how-to/authentication/tab-sso-register-aad.md
Service: msteams
GitHub Login: @surbhigupta
Microsoft Alias: lajanuar

@xelossan -

No, you don't need to register a separate Azure AD application for the bot. You can use the same app registration for both Teams app and Bot.
Regarding the issue that your app is not working in MS Teams, please verify you have enabled Teams Channel for your App registration in Azure Portal.
You don't need separate registration.
Application ID URI for app with multiple capabilities should be in below format:
api://fully-qualified-domain-name.com/BotId-a246b078-394d-4858-84f1-aa6fdb84b80b

Thanks for your answers.

I did enable Teams Channel. The problem occurred only when adding the app to the Teams meeting, and only when both Teams app and Bot app shared Azure AD app registration. When they have separate IDs, everything works as expected. Do you have any thoughts what may be the issue?
Is BotId part case-sensitive and should be exactly BotId, or can be botid?

@xelossan -

Could you please make sure you have configured the manifest settings for Tabs in meeting properly as mentioned in this doc?
It can be botid. It's not case sensitive.

Hello @xelossan - Hope you are doing well!!
Please let us know whether your issue has resolved or need any further help here?


Support for overriding the interactionLayer of an InteractionBehaviour at runtime.

Just wanted to hear your thoughts on whether you think that's something worth supporting.
(For example for procedurally generated objects)
The things I had to change in order to make it work were in InteractionBehaviour.cs in line 709:
set { _interactionLayer = value; }
(remove the protected modifier from the property setter)
and added a nullcheck in InteractionManager.cs in line 988:
if (_intObjInteractionLayers.ContainsKey(layer)) {
	_intObjInteractionLayers[layer].Remove(intObj);
}

(Not sure if that's without side effects though. Might be better to call initLayers() in the property setter above?)

I do think this is something worth supporting; I thought it was supported actually, but it might have been functionality we deferred when we first brought in support for arbitrary interaction layers.
If the fix is as easy as this, it'll be easy to add. I'll give it a look for the next milestone and make sure there aren't any side effects we're missing.

Following up on this, it looks like one of our in-house apps hit this issue as well, and the fix should just be in #917.

Woops! Looks like it wasn't made unprotected after all. Yeesh. Reopened.


Struggling to get values from mqtt

Hi!
First thank you for this great piece of software. I was so annoyed when I realized SE does only work with that limited set of meters after I installed it...
However, I managed to provide all values from my meter to an mqtt topic (mapped to the specific values required by the program), but it seems these values are not really read? I see new values are pushed to mqtt all the time but nothing shows up in the debug log.
Will I need to map the mqtt values again in the values procedure of the mqtt.py?
I'm not that deep into programming, but maybe someone can support me on that?
Thanks
Malte

I found that there was an issue creating the json output, when subscribing with wildcard to the mqtt topic. I dont understand how the output of lastValue has to look like. Is it sufficient to suply each value as a single json string or will I need to construct the whole output (as listed down below in the mqtt.py)?
I modified the onmessage procedure to create and assign the string {'energy_active': 85031.3 } to lastValue. As the message topic already represents the correct names I tried to directly assign it.
Is that fine, respectively working that way? I did not connect the inverter yet to ensure no crappy data is loaded to the SE Portal.
Thank you!
Best
Malte
def on_message(client, userdata, message):
    global lastValues

    topic=message.topic.rpartition('/')[-1]
    m_decode=str(message.payload.decode("utf-8","ignore"))
    lastValues = "{'"+ topic +"': "+ m_decode +" }"
    logger.debug(f"MQTT message received: {message.topic} ->  {message.payload.decode('utf-8')}")
    logger.debug(f"Object Json constructed: "+ lastValues)

Rewrote the code... finally works now. If anyone is interested in the solution let me know.
Best
Malte

It indeed expects a json formatted string with all the values in a single json.
I intentionally did not put too much logic into this, as everyone can have their own sort of mapping / logic.
(e.g. on my local implementation I also do some data manipulations like multiplying and some additions/subtractions)
In your case, with single attributes provided in each mqtt message, you prob want to add each message to the lastValues object so you construct a object with all the values

@nmakel @marcelrv
Please find attached my current mqtt.py I dont know if this is useful as an example, but feel free to use and add wherever you like.
I ended up creating a dictionary (was not aware of that technique before :) ) and initialized it with all the values my meter provides and which are also present on the mqtt server.
I was not so sure about what was really necessary in the end as an output, but this works obviously fine.
I needed to set the meter type to wattmeter to get the proxy with my SE3000H.
Thanks again for that nice project!
import datetime
import json
import logging
import sys
import time

import paho.mqtt.client as mqtt

lastValues = {}
logger = logging.getLogger()

def on_connect(client, userdata, flags, rc):
    logger.info(f"Connected to MQTT: {userdata['host']}:{userdata['port']}/{userdata['meterValuesTopic']}")

    client.subscribe(userdata["meterValuesTopic"])

    global dictionary
    dictionary = dict()
    dictionary = {
        'energy_active': 0.00000000000,                               # kWh (total import + export)
        'import_energy_active': 0.00000000000,             # kWh
        'power_active': 0.00000000000,                            # W
        'l1_power_active': 0.00000000000,
        'l2_power_active': 0.00000000000,
        'l3_power_active': 0.00000000000,
        'voltage_ln': 0.00000000000,                               # V
        'l1n_voltage': 0.00000000000,
        'l2n_voltage': 0.00000000000,
        'l3n_voltage': 0.00000000000,
        'frequency': 0.00000000000,                                    # Hz
        'l1_energy_active': 0.00000000000,                            # kWh (import + export)
        'l1_import_energy_active': 0.00000000000,          # kWh
        'export_energy_active': 0.00000000000,               # kWh
        'l1_export_energy_active': 0.00000000000,
        'power_factor': 0.00000000000,
        'l1_power_factor': 0.00000000000,
        'l2_power_factor': 0.00000000000,
        'l3_power_factor': 0.00000000000,
        'power_reactive': 0.00000000000,
        'l1_power_reactive': 0.00000000000,
        'l2_power_reactive': 0.00000000000,
        'l3_power_reactive': 0.00000000000,
        'l1_current': 0.00000000000,
        'l2_current': 0.00000000000,
        'l3_current': 0.00000000000,
    }

    if userdata['willTopic'] is not None:
        client.publish(
            userdata['willTopic'],
            "MeterProxy Connected " + str(datetime.datetime.now().strftime("%d/%m/%Y %H:%M:%S"))
        )

def on_message(client, userdata, message):
    global lastValues

    topic=message.topic.rpartition('/')[-1]
    m_decode=str(message.payload.decode("utf-8","ignore"))
    lastValues = "{'"+ topic +"': "+ m_decode +" }"
    dictionary[topic]= float(m_decode)
    logger.debug(f"MQTT message received: {message.topic} ->  {message.payload.decode('utf-8')}")
    logger.debug(f"Object Json constructed: "+ lastValues)

def on_disconnect(client, userdata, rc):
    if rc != 0:
        logger.info(f"MQTT disconnected unexpectedly: {rc}")

def device(config):

    # Configuration parameters:
    #
    # host              ip or hostname of MQTT server
    # port              port of MQTT server
    # keepalive         keepalive time in seconds for MQTT server
    # meterValuesTopic  MQTT topic to subscribe to to receive meter values

    host = config.get("host", fallback="localhost")
    port = config.getint("port", fallback=1883)
    keepalive = config.getint("keepalive", fallback=60)
    meterValuesTopic = config.get("meterValuesTopic", fallback="/haus/eg/har/hauszaehler/#")
    willTopic = config.get("willTopic", fallback=None)
    willMsg = config.get("willMsg", fallback="MeterProxy Disconnected")

    topics = {
        "host": host,
        "port": port,
        "meterValuesTopic": meterValuesTopic,
        "willTopic": willTopic
    }

    try:
        client = mqtt.Client(userdata=topics)
        client.on_connect = on_connect
        client.on_message = on_message
        client.on_disconnect = on_disconnect

        if willTopic is not None:
            client.will_set(willTopic, payload=willMsg, qos=0, retain=False)

        client.connect(host, port, keepalive)
        client.loop_start()
    except:
        logger.warning(f"MQTT connection failed: {host}:{port}/{meterValuesTopic}")

    return {
        "client": client,
        "host": host,
        "port": port,
        "keepalive": keepalive,
        "meterValuesTopic": meterValuesTopic,
        "willTopic": willTopic,
        "willMsg": willMsg
    }

def values(device):
    if not device:
        return {}

    return(dictionary)
    #  MQTT input is a json with one or more of the below elements
    # "energy_active"
    # "import_energy_active"
    # "power_active"
    # "l1_power_active"
    # "l2_power_active"
    # "l3_power_active"
    # "voltage_ln"
    # "l1n_voltage"
    # "l2n_voltage"
    # "l3n_voltage"
    # "voltage_ll"
    # "l12_voltage"
    # "l23_voltage"
    # "l31_voltage"
    # "frequency"
    # "l1_energy_active"
    # "l2_energy_active"
    # "l3_energy_active"
    # "l1_import_energy_active"
    # "l2_import_energy_active"
    # "l3_import_energy_active"
    # "export_energy_active"
    # "l1_export_energy_active"
    # "l2_export_energy_active"
    # "l3_export_energy_active"
    # "energy_reactive"
    # "l1_energy_reactive"
    # "l2_energy_reactive"
    # "l3_energy_reactive"
    # "energy_apparent"
    # "l1_energy_apparent"
    # "l2_energy_apparent"
    # "l3_energy_apparent"
    # "power_factor"
    # "l1_power_factor"
    # "l2_power_factor"
    # "l3_power_factor"
    # "power_reactive"
    # "l1_power_reactive"
    # "l2_power_reactive"
    # "l3_power_reactive"
    # "power_apparent"
    # "l1_power_apparent"
    # "l2_power_apparent"
    # "l3_power_apparent"
    # "l1_current"
    # "l2_current"
    # "l3_current"
    # "demand_power_active"
    # "minimum_demand_power_active"
    # "maximum_demand_power_active"
    # "demand_power_apparent"
    # "l1_demand_power_active"
    # "l2_demand_power_active"
    # "l3_demand_power_active"

Yes, exactly that is the way indeed I would do it as well in your scenario..


Add hint for index

 Issue by birdstorm
Tue Dec  5 07:12:38 2017
Originally opened as https://github.com/pingcap/tikv-client-lib-java/issues/180

Should add an option to use index as priority.

 Comment by ilovesoup
Thu Dec  7 14:55:19 2017

We actually want something like use_index(index_name)

 Comment by birdstorm
Thu Dec  7 15:22:40 2017

ic, should I close the two pull requests?

 Comment by ilovesoup
Thu Dec  7 15:24:47 2017

you can either close it or modify on it. @birdstorm

 Comment by birdstorm
Thu Dec  7 15:26:01 2017

Got it, I will modify on it. @ilovesoup


Mouse Without Borders hijacks shortcut keys as long as they partially match

Microsoft PowerToys version
0.70.1
Installation method
PowerToys auto-update
Running as admin
No
Area(s) with issue?
Mouse Without Borders
Steps to reproduce
Mouse Without Borders defines its own shortcut keys - Ctrl+Alt+L to lock all devices, for example.
In VS Code, I have a shortcut Ctrl+Alt+Shift+L to reload the window.
After enabling MWB, the VS Code shortcut stops working until I disable the MWB shortcut, even though the two are different.
PowerToysReport_2023-06-02-09-02-00.zip
✔ Expected Behavior
My VS Code shortcut to continue working.
❌ Actual Behavior
Nothing (no devices are locked, either).
Other Software
No response

Fixed in 0.71 release of PowerToys.  https://aka.ms/installpowertoys


Deploy to Heroku error with webpack-isomorphic-tools

I tried to deploy a fork of the most recent master code to heroku and I'm getting the following error:
2015-09-11T13:39:49.921006+00:00 heroku[web.1]: Starting process with command `node ./bin/server.js`
2015-09-11T13:39:53.023337+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:39:54.028752+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:39:55.030908+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:39:56.032466+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:39:57.034563+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:39:58.036016+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:39:59.037285+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:00.042810+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:01.044237+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:02.045716+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:03.047030+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:04.048994+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:05.049742+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:06.050701+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:07.052019+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:08.054934+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:09.058236+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:10.060174+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:11.062100+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:12.062599+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:13.070200+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:14.071734+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:15.074035+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:16.083350+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:17.093033+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:18.094801+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:19.102577+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:20.110579+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:21.188461+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:22.190858+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:23.222602+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:24.223778+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:25.227615+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:26.229278+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:27.230588+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:28.232054+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:29.233762+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:30.234665+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:31.235917+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:32.238579+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:33.240639+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:34.243125+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:35.255975+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:36.257433+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:37.259235+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:38.259736+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:39.261054+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:40.262579+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:41.264029+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:42.265488+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:43.267105+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:44.268845+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:45.270212+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:46.271662+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:47.273113+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:48.274556+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:49.276066+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:50.278581+00:00 app[web.1]: [webpack-isomorphic-tools] (waiting for the first Webpack build to finish)
2015-09-11T13:40:50.419886+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
2015-09-11T13:40:50.419886+00:00 heroku[web.1]: Stopping process with SIGKILL
2015-09-11T13:40:51.530662+00:00 heroku[web.1]: Process exited with status 137
2015-09-11T13:40:51.551459+00:00 heroku[web.1]: State changed from starting to crashed

If you're deploying from a git repo, you need to
npm run build
git add -f webpack-stats.json
git add -f static/dist/*

...every time you deploy. See heroku branch.

awesome that got me closer thanks!
Now I'm unfortunately getting this error:
2015-09-11T14:51:47.757938+00:00 app[web.1]: module.js:338
2015-09-11T14:51:47.757942+00:00 app[web.1]:     throw err;
2015-09-11T14:51:47.757943+00:00 app[web.1]:           ^
2015-09-11T14:51:47.757947+00:00 app[web.1]:     at Function.Module._resolveFilename (module.js:336:15)
2015-09-11T14:51:47.757945+00:00 app[web.1]: Error: Cannot find module 'containers'
2015-09-11T14:51:47.757953+00:00 app[web.1]:     at Object.<anonymous> (/app/src/routes.js:2:35)
2015-09-11T14:51:47.757956+00:00 app[web.1]:     at normalLoader (/app/node_modules/babel/node_modules/babel-core/lib/api/register/node.js:199:5)
2015-09-11T14:51:47.757950+00:00 app[web.1]:     at Module.require (module.js:365:17)
2015-09-11T14:51:47.757949+00:00 app[web.1]:     at Function.Module._load (module.js:278:25)
2015-09-11T14:51:47.757957+00:00 app[web.1]:     at Object.require.extensions.(anonymous function) [as .js] (/app/node_modules/babel/node_modules/babel-core/lib/api/register/node.js:216:7)
2015-09-11T14:51:47.757959+00:00 app[web.1]:     at Module.load (module.js:355:32)
2015-09-11T14:51:47.757960+00:00 app[web.1]:     at Function.Module._load (module.js:310:12)
2015-09-11T14:51:47.757951+00:00 app[web.1]:     at require (module.js:384:17)
2015-09-11T14:51:47.757954+00:00 app[web.1]:     at Module._compile (module.js:460:26)
2015-09-11T14:51:48.875486+00:00 heroku[web.1]: State changed from starting to crashed

...which was fixed by being explicit with the location of that file, but I don't want to now have to do that with all my directory declarations.
I tried deploying your heroku branch and got the same error. Have you seen that before?

Hmmm.... I just pulled the current master into the heroku branch, and it seems to be working.

weird, still getting the error even on a brand new untouched heroku app pushing your new heroku branch and running the 3 commands (build) above. Do you have any configuration that I'm missing, buildpacks, etc?

My heroku config variables are:
NODE_ENV          production
NODE_PATH         ./src

I suspect the latter is what you're missing.

That did it, thanks so much for all your help!

:+1:

For future reference I don't know if you want to add this to the readme on the heroku branch, but it wasn't super clear how to deploy to heroku. I can put together a PR if you need:
https://github.com/wework/react-redux-universal-hot-example/commit/9fc232b884099db898b70bd9fe94087800b172fd

Hey guys, do you know why I'm getting this?
2015-09-11T18:19:22.762207+00:00 heroku[web.1]: Starting process with command `npm start`
2015-09-11T18:19:25.022522+00:00 app[web.1]:
2015-09-11T18:19:25.022542+00:00 app[web.1]: ><EMAIL_ADDRESS>start /app
2015-09-11T18:19:25.022544+00:00 app[web.1]: > node ./node_modules/better-npm-run start
2015-09-11T18:19:25.022545+00:00 app[web.1]:
2015-09-11T18:19:25.186908+00:00 app[web.1]: running better-npm-run in /app
2015-09-11T18:19:25.195291+00:00 app[web.1]: Executing script: start
2015-09-11T18:19:25.195295+00:00 app[web.1]:
2015-09-11T18:19:25.198024+00:00 app[web.1]: to be executed:PORT=8080 NODE_ENV=production NODE_PATH=./src node ./bin/server.js
2015-09-11T18:19:29.171393+00:00 app[web.1]: Warning: connect.session() MemoryStore is not
2015-09-11T18:19:29.171397+00:00 app[web.1]: designed for a production environment, as it will leak
2015-09-11T18:19:29.171399+00:00 app[web.1]: memory, and will not scale past a single process.
2015-09-11T18:19:31.226206+00:00 app[web.1]: [webpack-isomorphic-tools] [error] asset not found: ./node_modules/font-awesome/scss/font-awesome.scss
2015-09-11T18:19:31.224728+00:00 app[web.1]: [webpack-isomorphic-tools] [error] asset not found: ./app/styles/main.scss
2015-09-11T18:19:40.547357+00:00 app[web.1]: ==> ✅  Server is listening
2015-09-11T18:19:40.551921+00:00 app[web.1]: ----------
2015-09-11T18:19:40.551924+00:00 app[web.1]: ==> 💻  Open http://localhost:8080 in a browser to view the app.
2015-09-11T18:19:40.551704+00:00 app[web.1]: ==> 🌎  React Redux Example Production running on port 8080, API on port 3030
2015-09-11T18:20:23.072426+00:00 app[web.1]: Error waiting for process to terminate: No child processes
2015-09-11T18:20:23.037595+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
2015-09-11T18:20:23.037595+00:00 heroku[web.1]: Stopping process with SIGKILL
2015-09-11T18:20:23.917009+00:00 heroku[web.1]: State changed from starting to crashed
2015-09-11T18:20:23.894423+00:00 heroku[web.1]: Process exited with status 22

If I'm not mistaken, Heroku doesn't allow you to choose the ports where you want to run your processes, does it?
Thanks!

Are you using a Procfile? If you look at the heroku branch to start up on the dyno he doesn't use npm start he does the following in the Procfile, bypassing the port issue allowing it to use the port from the env in config.js
web: node ./bin/server

Thanks @mattjstar, it worked!

Note also that you may see the same error if you haven't done your npm build step before running npm start


Backport "Fix test directive in i18533" to LTS

Backports #19802 to the LTS branch.
PR submitted by the release tooling.
[skip ci]

No regressions detected in the community build up to lts-19921.
Reference


Add Rekognition support.

Description
Adds Rekognition support.
Background Context
At the moment just adding support for start_text_detection and get_text_detection.
refs:
https://docs.aws.amazon.com/rekognition/latest/dg/what-is.html
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rekognition.html
https://github.com/spulec/moto/issues/4071

Hi @bblommers following on from #4955 - I have had a crack at adding Rekognition support to moto.
I am sure that I have got a few bits wrong/ missed something, as this is the first time working in this codebase.
If anyone can review the code as is and I can then amend.
Thank you.

OK, @bblommers I have made a number of amendments based on your feedback and the code is ready for a re-review please.
Thank you.

LGTM so far @AlanDonohoe - happy to merge once the linter is happy (and assuming the build passes, obviously)

LGTM so far @AlanDonohoe - happy to merge once the linter is happy (and assuming the build passes, obviously)

OK cool...
There was one linter issue, which I have since resolved.
Have pushed that up now, so once all the linter checks and tests are good, you'll be happy to merge in!
And I can use moto's new Rekognition support back in my original project!
I'm going to resolve all the conversations up to this point so it's clear what amendments have been subsequently fixed up.

@AlanDonohoe There are still some test failures, but they should be resolved after you merge this PR that I raised: https://github.com/LiniusAustPty/moto/pull/1

@AlanDonohoe There are still some test failures, but they should be resolved after you merge this PR that I raised: LiniusAustPty#1

@bblommers Thanks for that... I have merged in.
Do you want me to do some rebasing now on this branch (or are the commits OK as is?)

Do you want me to do some rebasing now on this branch (or are the commits OK as is?)

No, that's not necessary, I'll just squash and merge.
Thank you for all your work on this @AlanDonohoe!

Do you want me to do some rebasing now on this branch (or are the commits OK as is?)

No, that's not necessary, I'll just squash and merge.
Thank you for all your work on this @AlanDonohoe!

Amazing. V happy this will be in the next release.
Thanks for all the feedback and assistance @bblommers


Improve performace and make the Mediator implementation DiC independent with the registration

As the title might suggest, this PR improves the Performance of the Mediator and also decouples the implementation from Microsoft.Extension.DependencyInjection Package.
I haven't updated the Readme and all the other documentation yet because I wanted to wait for the final implementation outcome. I will update it as soon the implementation is Approved.
Features Removed

Covariants of the IRequestExceptionHandler<> and IRequestExceptionAction<> Interface with the default for the exception Type as System.Exception are removed.
Removed all dynamic Send Methods from IMediator with the Request Type is the Object Type. The Reasoning is as already in #894 mentioned that the marker interfaces should guard the user of the Library to pass the wrong message instance to the Mediator.
IBaseRequest was removed because it was not needed anymore.

Features Moved

The Mediator class is sealed now and can not be inherited from. Therefor the PublishCore method was moved to the INotficationPublisher.
PipelineNext Delegates now have a Request and CancellationToken Parameter that needs to be passed.
An IRequest and an IRequest<> are in my Opinion two different Message Types. One just Commands another Part of the Software to do something and therefor just wants to know how long it has to wait. A Request on the other Hand requests something from another Part of the Software and awaits a Response. And because of this Reasons I split up the IRequest and the IRequest<> Pipelines into two different ones.

Features Added

Made the Mediator Implementation overall faster (See Benchmarks).
Assembly Scanner now respects all preregistered Pipelines and Processors, but will still scan for all other implementations and register them.
Assembly Scanner can now also register specific handler types that are specified per assembly.

Things to Discuss

How to name the IRequest Interface. Currently I just named the IRequest<> Interfaces IRequestResponse... to remove naming conflicts. My Proposals would be ICommand for all the IRequest Interfaces and that use the Request itself.
Because now the Implementation is separated from the Microsoft.Extension.DependencyInjection there is the possibility to move the Logic to another Project and create another NuGet out of it. The same applies also for the MediatR.Abstraction Namespace if you only want the MediatR Interfaces.

I put all lot of Time and and effort in the improvements. Therefor I would appreciate it if I could add me as one of the Authors in the Project (.csproj). But bevor you reject this PR please have a look at it.
Benchmarks
Handlers
These Benchmarks show how long it takes to just invoke the corresponding handler.
Old Handler

Method
Times
Mean
Error
StdDev
Gen0
Allocated

PublishingNotifications
1
178.9 ns
2.40 ns
2.01 ns
0.0687
288 B

SendingRequests
1
350.7 ns
2.31 ns
2.04 ns
0.1450
608 B

SendingRequestResponse
1
330.2 ns
2.20 ns
1.95 ns
0.1278
536 B

SendingStreamRequest
1
476.6 ns
2.87 ns
2.68 ns
0.1125
472 B

PublishingNotifications
50
8,868.2 ns
152.83 ns
119.32 ns
3.4332
14400 B

SendingRequests
50
16,206.3 ns
178.40 ns
166.87 ns
7.2632
30400 B

SendingRequestResponse
50
15,649.6 ns
262.35 ns
232.57 ns
6.3782
26800 B

SendingStreamRequest
50
23,654.5 ns
155.61 ns
145.55 ns
5.6152
23600 B

Improved Handlers

Method
Times
Mean
Error
StdDev
Gen0
Allocated

PublishingNotifications
1
129.1 ns
2.52 ns
3.36 ns
-
-

SendingRequests
1
167.0 ns
2.87 ns
2.69 ns
0.0153
64 B

SendingRequestResponse
1
206.6 ns
1.82 ns
1.62 ns
0.0153
64 B

SendingStreamRequest
1
287.4 ns
5.70 ns
5.59 ns
0.0210
88 B

PublishingNotifications
50
5,985.6 ns
73.75 ns
61.58 ns
-
-

SendingRequests
50
7,224.6 ns
83.20 ns
69.48 ns
0.7629
3200 B

SendingRequestResponse
50
8,910.5 ns
122.37 ns
95.54 ns
0.7629
3200 B

SendingStreamRequest
50
13,535.3 ns
110.92 ns
103.75 ns
1.0376
4400 B

Cached Handlers

Method
Times
Mean
Error
StdDev
Gen0
Allocated

PublishingNotifications
1
78.51 ns
0.510 ns
0.477 ns
-
-

SendingRequests
1
52.99 ns
0.295 ns
0.276 ns
-
-

SendingRequestResponse
1
98.95 ns
0.361 ns
0.301 ns
-
-

SendingStreamRequest
1
263.36 ns
1.585 ns
1.483 ns
0.0210
88 B

PublishingNotifications
50
3,696.94 ns
15.405 ns
12.027 ns
-
-

SendingRequests
50
2,048.98 ns
9.222 ns
8.175 ns
-
-

SendingRequestResponse
50
4,021.12 ns
25.300 ns
21.127 ns
-
-

SendingStreamRequest
50
12,547.16 ns
86.083 ns
71.883 ns
1.0376
4400 B

Pipelining
These Benchmarks show how long it takes with one Pipeline Handler to invoke the corresponding handlers.
Old Pipeline

Method
Times
Mean
Error
StdDev
Gen0
Allocated

SendingRequests
1
351.1 ns
2.45 ns
2.29 ns
0.1450
608 B

SendingRequestResponse
1
328.9 ns
1.79 ns
1.49 ns
0.1278
536 B

SendingStreamRequest
1
461.2 ns
2.96 ns
2.63 ns
0.1125
472 B

SendingRequests
50
16,510.4 ns
174.15 ns
162.90 ns
7.2632
30400 B

SendingRequestResponse
50
15,376.5 ns
113.62 ns
106.28 ns
6.3934
26800 B

SendingStreamRequest
50
22,456.0 ns
175.86 ns
164.50 ns
5.6152
23600 B

Improved Pipeline

Method
Times
Mean
Error
StdDev
Gen0
Allocated

SendingRequests
1
189.0 ns
3.73 ns
5.35 ns
0.0381
160 B

SendingRequestResponse
1
230.4 ns
4.46 ns
4.58 ns
0.0381
160 B

SendingStreamRequest
1
303.3 ns
5.49 ns
4.59 ns
0.0439
184 B

SendingRequests
50
7,713.8 ns
68.67 ns
60.88 ns
1.9073
8000 B

SendingRequestResponse
50
10,260.5 ns
97.92 ns
91.60 ns
1.9073
8000 B

SendingStreamRequest
50
14,503.3 ns
164.71 ns
154.07 ns
2.1973
9200 B

Cached Pipeline

Method
Times
Mean
Error
StdDev
Gen0
Allocated

SendingRequests
1
57.27 ns
0.171 ns
0.143 ns
-
-

SendingRequestResponse
1
99.50 ns
0.375 ns
0.351 ns
-
-

SendingStreamRequest
1
285.45 ns
1.378 ns
1.222 ns
0.0439
184 B

SendingRequests
50
2,266.45 ns
8.808 ns
8.239 ns
-
-

SendingRequestResponse
50
4,042.02 ns
23.704 ns
22.173 ns
-
-

SendingStreamRequest
50
14,043.15 ns
76.087 ns
63.536 ns
2.1973
9200 B

Exception Handling
These Benchmarks show how long it takes to handle an Exception that is thrown by the Handler until it is handled by the only Exception Handler. There are no Exception Action Handlers registered.
Old ExceptionHandling

Method
Times
Mean
Error
StdDev
Gen0
Allocated

SendingRequests
1
26.04 us
0.097 us
0.091 us
1.0986
4.58 KB

SendingRequestResponse
1
14.46 us
0.048 us
0.045 us
0.8240
3.4 KB

SendingRequests
50
1,376.33 us
8.038 us
7.125 us
54.6875
228.91 KB

SendingRequestResponse
50
705.29 us
4.533 us
4.240 us
41.0156
169.93 KB

Improved ExceptionHandling

Method
Times
Mean
Error
StdDev
Gen0
Allocated

SendingRequests
1
10.24 us
0.202 us
0.326 us
0.1221
528 B

SendingRequestResponse
1
10.45 us
0.090 us
0.070 us
0.1221
536 B

SendingRequests
50
505.89 us
6.577 us
6.152 us
5.8594
26401 B

SendingRequestResponse
50
541.82 us
4.619 us
3.857 us
5.8594
26801 B

Cached Exception Handling

Method
Times
Mean
Error
StdDev
Gen0
Allocated

SendingRequests
1
8.678 us
0.0539 us
0.0450 us
0.0763
368 B

SendingRequestResponse
1
8.900 us
0.0404 us
0.0315 us
0.0763
376 B

SendingRequests
50
460.521 us
5.4347 us
4.8177 us
3.9063
18401 B

SendingRequestResponse
50
465.830 us
4.5280 us
4.2355 us
4.3945
18800 B

Assembly Scanner
These Benchmarks show how long it takes to register MediatR in the Service Collection. The most expensive Operation is the Assembly Scanning and registering.
Old Assembly Scanner

Method
Mean
Error
StdDev
Gen0
Gen1
Allocated

ScanAllTypes
58.14 ms
5.498 ms
16.21 ms
4788.0859
9.7656
57.29 MB

Improved Assembly Scanner

Method
Mean
Error
StdDev
Gen0
Gen1
Allocated

ScanAllTypes
20.37 us
0.397 us
0.641 us
4.8828
1.2207
21.25 KB

OK this PR is enormous. I appreciate you taking the time and effort! It'd take me a day to review this, which I don't have that sort of time, but some general feedback:

Don't make any changes to the Contracts project. A LOT of time has been spent getting that to where it is today. You can safely assume that its design is more or less "done".
Don't change method names on the IMediator class
Don't change generic constraints unless it's absolutely required and you can't compile without it

I JUST moved the MS.DI.Extensions package into MediatR proper because like 98% of folks that use MediatR use both. Don't create separate packages or projects, this was an intentional decision on my part. I don't want any new packages, I want to simplify. MediatR and MediatR.Contracts is good enough.
Past that, can you give a rough overview of what problems this PR is trying to solve? There's a discussion to be had around that.

Hi @Link9001
Let me start off by saying that it's overall very appreciated by any open-source community to have contributions, be it filing issues, writing docs, investigations, or writing code. Don't let what I'm about to say put you off from achieving your own goals, but take it as good advice.
MediatR is a library with over 135 million total and 40k daily average downloads. It is serving a wide variety of projects, personal, commercial, small, and big. Jimmy has taken on the great responsibility to keep maintaining it in a professional manner. That comes with responsibilities that are not free.
It takes time to review code, especially big changes. Not only 'number of files' changes, but architectural changes (like changing interface/methods names) have to be thought over very well. Is it backward compatible? Does it break current users? Do we need a new major version number? Etc.
That all takes time, and in general, you cannot expect ANY project, be it a one-man open-source project or an entire team behind it, to just dump 200 changed files on them and ask for a review and a credit. The unit tests are there for a reason and should NOT be changed unless absolutely needed and more likely than not being discussed over before.
The fact that you changed so much of the architecture, that an update would break basically anyone using MediatR and also bluntly asked for a credit in .csproj with the expectation of this getting merged, makes me think you're still a junior developer and have (and should!) still learn a thing or two.
Again, don't let this discourage you from reaching your own goals. You could still use this in your own project, or if you want to maintain your own version, you're always free to fork, give it a name and maintain it in a different repository. That's how open-source works most of the time.

Hi @remcoros
I really appreciate your Feedback. I always like to learn new stuff and your comments aren't different. But I also did invest quite some time in how to structure and design a simpler MediatR. Also I think that there are might some misunderstandings regarding my Implementation.
Correct me if my understanding is wrong, but my implementation just breaks the naming and some return types of handlers. The behavior of MediatR to send messages and letting them be handled by the Pipelines still remains the same. There will be no architectural breaking changes in the Mediator.
And I also want to clarify that I would only apprehend it if I can get some Credits for what I have done. I did never demand @jbogard to make a place only for me so I can get my Credits. I think this is a big difference between demanding and just friendly asking. If he had said "no" then that is his choice. He is the Owner of this Repo and can do what he wants.
The "Send(object)" has of corse its usage with the dynamic dispatching of the message type. I was caught up in removing as much reflection Code as possible because reflection is never fast. That is definitly something that i forgot

Therefor the general decoupling of the ServiceCollection.

MediatR isn't coupled to ServiceCollection though? It's only coupled to IServiceProvider.
The optional registration is coupled to ServiceCollection, but that's absolutely by design. 95% of folks that use MediatR were using the original separated out MediatR.Extensions.Microsoft.DependencyInjection project, so I combined them together. It's absolutely not required to use with the "guts" of MediatR.
The performance of services.AddMediatR is not something I've looked much at, mainly because it affects the startup performance, not runtime performance. If you're seeing performance issues with the registration that gets "slower and slower" over time, I suspect it's something wrong with your code. MediatR registration should be a one-time activity for the lifetime of the application.

But the AddMediatR Method is coupled to the ServiceCollection. I like the idea of a Mediator which abstracts everything. So I added it into my Ui Application that uses DryIoC as its Container. The startup time here actually matters but because I had to write my own AddMediatR Method that isn't the Performance Issue. I know that the most people will use it with the API. And yes, there isn't the Startup time that relevant. Writing my own AddMediatR Method wasn't that of a simple task. In the End I had to look at the internal implementation of MediatR itself to figure out how to set it up correctly. And that's why I decoupled the AssemblyScanner and the whole setup with the Pipelines from the ServceCollection and made that you can use it with any container you like.
The Performance that is getting slower over time is because of sending "lots" of Messages with MediatR. My Application is growing and the more Features I add the slower it will get. I already did some benchmarking to figure out where the Bottleneck is. I also did improve in my App quite a bit. But the Exception Handling/Action and also just the sheer amount of Messages that are being sent in parallel is slowly but surly making my App slower. And after looking at the implementation of MediatR I saw lots of Reflection that could be removed and also the potential of Caching the Handlers. All of that will Improve as the Benchmarks show the Performance by a lot.

As as MediatR user I just wanted to add some two cents on MediatR+MicrosoftDI registration. While it's not a problem for me that the registration is built-in the main package, it's a bit confusing that scanning feature is required. We use modular monolith architecture and in some of our products there is no handlers at all in main project, but each module has it's own DI definition, which registers it's modules, including all handlers. It's a multitenant application (tenants as nested containers), so we want to have full control on how and what we register
So we are required to scan an assembly, which has no handlers, just to satisfy this requirement.
This auto-scanning behavior also caused some troubles to this StackOverflow user, so I'd argue that it's not always desired

We can add an explicit opt-out for scanning of handlers OR, remove the requirement that there must be at least one assembly to scan.

@jbogard yeah, from what I can see, this PR removes the requirement, so that's where I wanted to mention it. But since the changes related to MS DI are still under discussion, I just wanted to stress that this part is useful change.
I'm fine with explicit opt-out as well, if that will be preferred

Yes but this PR also does 80 other changes, some of them huuuuge breaking changes. I'll look at other similar libraries like FluentValidation to see how they like to handle it. I don't want to make normal apps harder or more confusing just to satisfy a single architectural style.


[WIP] use .ops domain

Hi,
I've managed to create a .nix build for this and add this to dnsmasq so I can use it along with other DNS servers except I had to add .ops domain for nixops hosts so I can match it in dnsmasq conf like this:
  services.dnsmasq = {
    enable = true;
    resolveLocalQueries = true;
    servers = [
      "/ops/<IP_ADDRESS>#5300"
    ];
    extraConfig = ''
      bind-interfaces
      listen-address=<IP_ADDRESS>
    '';
  };

The problem is I'm not proficient enough with Go to add this as a flag so I've just hacked this in nixops-dns. When this is solved I will create a PR for nixpkgs (probably with nixos module as well), what do you think?

fixed in #2


Feature request: Upgrades stackable in inventory/chests

Issue description:
It should be possible for upgrades to stack in chests and in the inventory, as it is highly inconvenient for them not to do so. This could also be applied to empty storage disks.

They stack in MC 1.11, but not in MC 1.10.2 because the inventory API doesn't allow this yet there.


Feature/search results text tweaks

@ekate It looks like blacklight already had a zero_results template that our instance couldn't use because the index override was out of date. I updated both of these and made the changes in blacklight.en.yml for new text.
I had to change the zero_results template a bit because of html entities showing up in the default text which has "you searched in The Fales library -- search everything" which I figured we'd keep since it's built in functionality.
I did a little finessing of the cucumber story too and changed it to zero_results to match the template name. In general I'm not sure I consider this an integration test and hence it wouldn't need a cuke. It's more something that should be tested by rendering the view in an rspec, but since you already have the cuke let's keep it.
Once you merge this back to your branch feel free to merge all changes back to development
Thanks

Coverage remained the same at 98.17% when pulling 394906dc15338b1d542727f913a964b0d1580c04 on feature/search_results_text_tweaks into 797872e889f58892f229c3c67805924c3bd2c7f5 on feature/search_results_text.


[WIP] Observation results API

Unfinished but mostly-usable implementation of API endpoints to fetch the
results of planting site observations.
You can fetch a single observation or a list of them by organization or planting
site.
Known problems/limitations:

No way to get abridged results for the top-level list of observation history;
always returns the full details.
Total plants and planting density calculations don't include unknown species and
existing plants like they should.
Still some PRD ambiguity about when to include existing plants in mortality rate
calculations, so those numbers may be wrong.
To get something usable quickly, I mixed the data and view layers but they ought
to be separated.

Current dependencies on/for this PR:

main

PR #1183   👈

This comment was auto-generated by Graphite.

A bit uncertain about completed times versus planting site time zones. Do they need to be transformed client-side or use as-is?

As things stand, they'd need to be transformed client-side, but we could do the transformation server-side instead.

Curious what the abridged results will add to this.

I was thinking about that in the context of the "list of all past observations" page in the UI, where you wouldn't want to fetch, say, the monitoring plot boundaries for every monitoring plot in every observation when you're not going to use that data for anything.
However, we can leave that as a future optimization; it will be impossible for the list of observations to be large any time soon given how scheduling works.

A bit uncertain about completed times versus planting site time zones. Do they need to be transformed client-side or use as-is?

As things stand, they'd need to be transformed client-side, but we could do the transformation server-side instead.

Thanks Steve. Thought about this some more, I think we can do this client side - the display values are only month/year - client has to do some processing anyways. cc @charlie-tf I was incorrect in assuming that completed times were yyyy-mm-dd format (for the map slider). Here's an example completed time  "completedTime": "2023-06-01T21:47:21.303929Z",. We can have the client redux/reducer convert the dates to month/year format with time zone applied.

@sgrimm would it be a bunch of non-trivial work to return the corresponding names where we have ids (planting site, species, zone, subzone, monitoring plot)?
Trying to do merge this client-side but the mixed state of redux/non-redux is complicating things a bit - still doable just trying to see which approach is cleaner.
cc @charlie-tf

Yes, I can include names. I guess I'll need to include zone and site boundaries as well for the map views? (I'd been assuming the client would get those from the site data.)

Yes, I can include names. I guess I'll need to include zone and site boundaries as well for the map views? (I'd been assuming the client would get those from the site data.)

Good question. Yes we have the site data. I guess it would be redundant to have multiple sources for site related data. Maybe the client should just merge the data for its various purposes (application of redux). I will handle the names and polygons client side. Cancel my request.

@sgrimm started a stack merge that includes this pull request via Graphite.

@sgrimm merged this pull request with Graphite.


manifests: fix gateway waypoint template on OpenShift

This is a follow-up to #46835 and #46898
Currently, when I follow the Istio doc[1] and create a waypoint Gateway CR on OpenShift,
the gateway pod failed to start and the event shows errors:
$ istioctl waypoint apply -n ambient-demo

## Error creating: pods "waypoint-64fbbfd844-" is forbidden: unable to validate against any security context constraint: [provider "anyuid": Forbidden: not usable by user or serviceaccount, provider restricted-v2: .containers[0].runAsUser: Invalid value: 1337: must be in the ranges: [1000710000,<PHONE_NUMBER>], provider "restricted": Forbidden: not usable by user or serviceaccount, provider "nonroot-v2": Forbidden: not usable by user or serviceaccount, provider "nonroot": Forbidden: not usable by user or serviceaccount, provider "hostmount-anyuid": Forbidden: not usable by user or serviceaccount, provider "machine-api-termination-handler": Forbidden: not usable by user or serviceaccount, provider "hostnetwork-v2": Forbidden: not usable by user or serviceaccount, provider "hostnetwork": Forbidden: not usable by user or serviceaccount, provider "hostaccess": Forbidden: not usable by user or serviceaccount, provider "node-exporter": Forbidden: not usable by user or serviceaccount, provider "privileged": Forbidden: not usable by user or serviceaccount]

Reference: [1] https://istio.io/latest/docs/ambient/usage/waypoint/
This PR fix is adding a line platform: "openshift" in the platform-openshift.yaml helm profile.
Then we skip the Gateway container securityContext.runAsUser and .runAsGroup default 1337 settings when openshift profile is applied.
The custom securityContext is simply the one without the runAsUser and runAsGroup lines comparing to the Gateway templates. So we don't need insert or append in the template.
Let me know if I misunderstood a comment suggestion or concern. Thanks

Hi @yxun. Thanks for your PR.
I'm waiting for a istio member to verify that this patch is reasonable to test. If it is, they should reply with /ok-to-test on its own line. Until that is done, I will not automatically test new commits in this PR, but the usual testing commands by org members will still work. Regular contributors should join the org to skip this step.
Once the patch is verified, the new status will be reflected by the ok-to-test label.
I understand the commands that are listed here.

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.

high level LGTM but want to make sure someone with openshift expertise signs off

should these be moved to a repo which can test with a real OpenShift env?

/ok-to-test

I no longer have access to an OpenShift cluster.

@yxun: 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
ec9588e2f62bd29b613dcacfd94fbb6e2e7404ef
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.

@yxun: 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

unit-tests-arm64_istio
5bd0bd07809cc344a5010f315ff8710128b94ac3
link
true
/test unit-tests-arm64

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.


McEdit v. <IP_ADDRESS> wont work

I downloaded McEdit v. <IP_ADDRESS> both x32 bit and x64 bit. None of them work. When I click on the McEdit file that's not ICO the loading screen comes up and a window full of codes and then they close. I took a screenshot of the window with the codes and it said there was an error opening the file. What should I do? Someone please help me. I've buildt 5 ships I want to extract to another world.

It's that strange character in your windows username, try moving it to C:\ and try again.

That worked. Thank you!


Add reachability markers to every lockfile node

Summary
This PR explores writing the fully-resolved markers to every node in the lockfile, rather than just the node edges.

These are pretty small. I need to do more validation to understand whether they're correct. For example:
[[package]]
name = "datasets"
version = "2.20.0"
source = { registry = "https://pypi.org/simple" }
resolution-markers = [
    "python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system == 'Linux'",
    "(python_full_version < '3.10' and platform_machine != 'aarch64' and platform_machine != 'arm64') or (python_full_version < '3.10' and platform_machine == 'aarch64' and platform_system != 'Linux') or (python_full_version < '3.10' and platform_machine == 'arm64' and platform_system != 'Darwin')",
    "python_full_version == '3.10.*' and platform_system == 'Darwin'",
    "python_full_version == '3.10.*' and platform_machine == 'aarch64' and platform_system == 'Linux'",
    "(python_full_version == '3.10.*' and platform_machine != 'aarch64' and platform_system != 'Darwin') or (python_full_version == '3.10.*' and platform_system != 'Darwin' and platform_system != 'Linux')",
    "python_full_version == '3.11.*' and platform_system == 'Darwin'",
    "python_full_version == '3.11.*' and platform_machine == 'aarch64' and platform_system == 'Linux'",
    "(python_full_version == '3.11.*' and platform_machine != 'aarch64' and platform_system != 'Darwin') or (python_full_version == '3.11.*' and platform_system != 'Darwin' and platform_system != 'Linux')",
    "python_full_version == '3.12.*' and platform_system == 'Darwin'",
    "python_full_version == '3.12.*' and platform_machine == 'aarch64' and platform_system == 'Linux'",
    "(python_full_version == '3.12.*' and platform_machine != 'aarch64' and platform_system != 'Darwin') or (python_full_version == '3.12.*' and platform_system != 'Darwin' and platform_system != 'Linux')",
    "python_full_version >= '3.13' and platform_system == 'Darwin'",
    "python_full_version >= '3.13' and platform_machine == 'aarch64' and platform_system == 'Linux'",
    "(python_full_version >= '3.13' and platform_machine != 'aarch64' and platform_system != 'Darwin') or (python_full_version >= '3.13' and platform_system != 'Darwin' and platform_system != 'Linux')",
]
markers = "platform_machine != 'arm64' or platform_system != 'Darwin' or python_full_version >= '3.10'"

I think markers should be the simplified OR of resolution-markers.

Just scanning visually, the largest I see is:
markers = "(python_full_version < '3.13' and platform_machine == 'AMD64') or (python_full_version < '3.13' and platform_machine == 'WIN32') or (python_full_version < '3.13' and platform_machine == 'aarch64') or (python_full_version < '3.13' and platform_machine == 'amd64') or (python_full_version < '3.13' and platform_machine == 'ppc64le') or (python_full_version < '3.13' and platform_machine == 'win32') or (python_full_version < '3.13' and platform_machine == 'x86_64')"

I think this doesn't actually buy us much because we support multiple root nodes in the graph. So the simplified expression doesn't quite tell you exactly when a package will be included.
For example... say workspace member A depends on black when sys_platform == 'win32'. Meanwhile, member B depends on black for sys_platform == 'darwin'. The combined marker would be sys_platform == 'win32' or sys_platform == 'darwin'. But... the package would only be included on sys_platform == 'darwin' if we're installing member B.

We decided this wasn't worthwhile right now.


Add bash completion for docker ps --filter health

Ref: #24698
Thanks @sdurrheimer for the ping.

LGTM 🐸


mkNeovimPlugin: refactor lua code generation logic

Follow-up of #2619
This keeps the current behavior of not adding a plugins.*.luaConfig option if it doesn't make sense (for rustacenvim for e.g.).
What has been removed is the ability/expectation for configLocation to be null.

I made #2624 to see how we could implement a luaConfig attribute for plugins that are configured with globals. If the design is good enough maybe we should have an argument of mkNeovimPlugin which would allow rustaceanvim to use that?

@mergifyio queue


Bug 1831245: StatefulSets v1 do not trigger on image changes

We must check for v1 StatefulSets during update.

/bugzilla refresh


Migrate from google-apputils to absl-py

Your dependency google-apputils is deprecated. Please migrate to absl-py instead.

I believe the code was already migrated, but we still mention the dependency on README.md and also have it commented out on requirements.txt
So, I think there are the last things we need to cleanup before fixing this issue.


Radio button problem

On the new transaction item page, once Debit radio button is clicked, we can not go back to credit radio button..

Corrected. Thanks for pointing out. :+1:


chore: Update GitHub CI workflows

🔧 Changes
This PR updates our GitHub CI workflows for the repository. It updates the Semgrep workflow to follow our other repositories' approaches. It also adds a Dependabot configuration for keeping Actions up to date.
📚 References
N/A
🔬 Testing
This updates our continuous integration tests.
📝 Checklist

[x] All new/changed/fixed functionality is covered by tests (or N/A)
[x] I have added documentation for all new/changed functionality (or N/A)

Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:

Comparison is base (17e68bc) 94.80% compared to head (2ae4672) 94.80%.

Additional details and impacted files
@@           Coverage Diff           @@
##             main     #302   +/-   ##
=======================================
  Coverage   94.80%   94.80%
=======================================
  Files          46       46
  Lines        8916     8916
=======================================
  Hits         8453     8453
  Misses        361      361
  Partials      102      102

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.


How to get client ip and port?

Is there a way to log the client ip and/or port on the request?

'resp' is a stream-writer and has a function 'get_extra_info' which gives a dict with only one element: 'peername'. This hold a tuple with addr and port.
Example:
@app.route("/")
def index(req, resp):

    clinet_ip, client_port = resp.get_extra_info('peername')

    yield from picoweb.start_response(resp)
    yield from resp.awrite("Your IP address is ")
    yield from resp.awrite(clinet_ip)

see source code of uasyncio


sqb-api.md changes

The content was changed.

Coverage remained the same at 61.367% when pulling 651ebf9bbb477a7c71fa87c4adfb07363583d812 on ecemerimguner:master into fcf09052481ccd7c3b4cc28a9933390e44127dae on panates:master.