Rework androidenv package list generation

Motivation for this change
Google's Android repos duplicate package names. See #86043, #95512, #95805, and possibly others. Additionally, androidenv is unusable for building apps if you just export the tools in the environment to a shell.nix due to an android-sdk-license file not existing. See #23910.
Rewrite the generator script in Ruby/Nokogiri (as opposed to xsltproc) as it is easier to munge Google's repo XML the way we need. Commit a "repo.json" to the repository that is overridable as a parameter of composeAndroidPackages. Split generate.sh into fetchrepo.sh and mkrepo.sh for fetching the repo and writing out repo.json from the fetched repo XMLs respectively.
Add extraLicenses as a parameter of composeAndroidPackages.
Add repoJson and repoXmls as parameters of composeAndroidPackages. If repoJson is provided, androidenv will read the repo definitions from the specified JSON file.
If repoXmls are provided, androidenv will use the new generator script to build repoJson as a derivation.
Example shell.nix is now provided in examples/.
Things done

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

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

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

Possibly closes: #78623 #96205 #95512 #86043 #72220 #23910

I can't shake the feeling that we may need a better solution than this. Possibly an intermediate derivation to parse a given Android package XML and output JSON?
Effectively, I'd like to be able to point androidenv at a custom repo definition and have it just work.

FYI I found lots of duplicates in the generator/* files, however I don't understand where these are "generated" from.

They're all generated from Google's repository XML using the generate script. Apparently they contain lots of duplicates...

Seems love, I am in for anything that makes AndroidEnv better.
Anything you might need from me? Testing, anything?

Anything you might need from me? Testing, anything?

More testing with versions of tools you use for your Android projects would be great.

I have managed to build an APK using 1f930f80c1d407734b19dcf67d9e7d7fce8b985e commit from this PR from our repo and tested it myself. Everything works.
I've built it both on NixOS and on Debian with Nix installed. Both worked fine.
This is some great work @numinit, I appreciate you cleaning up this package.

@eyJhb

Anything you might need from me? Testing, anything?

More testing with versions of tools you use for your Android projects would be great. Make sure your gradle builds work with a shell.nix similar to my example.

I might try later. I do not work with android apps normally, but I have a dream of a Nix FDroid repo, so I will try to use those I have build beforehand.
Also, would it be possible to get the direct path to cmake, e.g. as mentioned here - https://github.com/NixOS/nixpkgs/issues/96205 ?

@eyJhb I usually produce the path to cmake in a shell hook and add it to $PATH

I found a way to get around hardcoding the license hashes... next commit should remove the need for them.

Hopefully @svanderburg can review this!

Alright, the license hashes are unnecessary to input manually anymore. Instead, we now provide extraLicenses, which is a list of license names. By default, android-sdk-license is accepted if you set accept_license = true. There's android-sdk-preview-license too if anyone's using the preview SDK; this has to be manually added.
We now extract the licenses from the repo XML, whitespace munge them so the hash is correct, and put them in repo.json. The license hashes are produced from the SHA1 of the legalese for you using builtins.hashString and written out via pkgs.writeText before being linked with the rest of the SDK, which should be exactly how Android Studio works.

Technically, we could determine the necessary license names from the components being installed, but most of the components just require android-sdk-license anyway, so the default configuration should satisfy 95% of usecases.

@numinit can you please rebase the PR, it seems there is a conflict now

@prusnak Done.

Btw, you can check (Built on) other Linux distributions as I did that in https://github.com/NixOS/nixpkgs/pull/89775#issuecomment-682019764.

Improved example and added missing ncurses5 dependency to cmake.

I've been using this nixpkgs patch successfully for a while now. Any chance I could get a review? :-)

I have a working CI build of an Android app for all four architectures with passing(mostly... some are just flaky) end-to-end tests and manual testing done by me in https://github.com/status-im/status-react/pull/11325.
As far as I can tell this works just fine. Waiting for this to be merged to merge mine.

This pull request has been mentioned on NixOS Discourse. There might be relevant details there:
https://discourse.nixos.org/t/prs-ready-for-review/3032/348

@charvp Good catch. I'll take a look at the docs problem.
The tools and platform tools are... interesting. Google only seems to package one version in their XML. I'll look into how to add previous versions to it.

The docs seem to no longer be packaged in the repo XML... hmmm.

@charvp So, it looks like the same thing is happening with all the packages you noticed are missing. The newest Google repo XML doesn't seem to include the docs anymore (and they don't even show up in Android Studio...)
Others seem to be having the same issue - that being said, the packages are still available on Google's servers, but just aren't in the repo XML. I'm not sure where this change was announced or if Google just quietly dropped support for this.

Maybe we need a discussion about how we respond if Google removes packages from download in Android Studio. Looks like right now it's just the docs and platform-tools versions, but this also breaks people's configs.
FWIW it seems like the docs are for a single (old) version of Android, maybe that's why they removed them.

FYI: Looks like Google did an in-place update of the cmake Linux package (i.e.
https://dl.google.com/android/repository/cmake-3.18.1-linux.zip now points to a different file), thus breaking the current repo.json. Glad you provided the repoJson option with which we were able to work around this! I suggest to re-generate it before merging, though.
In any case, great work! We've been using this branch for a few weeks now without a hitch :+1:  (Well, apart from the above one which of course is only Nix doing its job!)

For a bit more verbosity: Some file names are prefixed / contain additional version strings; this one is an exception (and there are some others where the replacement issue may occur every now and then so the generate scripts are really nice to have :)):
<archives>
<archive>
<!-- Built on: Tue Oct 27 14:25:10 2020. -->
<complete>
<size>14677038</size>
<checksum>80916762df6955f431743066e3568ae65b1b2b2f</checksum>
<url>7c386a739f915f5bd60051f2572c24782388e807.cmake-3.18.1-windows.zip</url>
</complete>
<host-os>windows</host-os>
</archive>
<archive>
<!-- Built on: Tue Oct 27 14:25:07 2020. -->
<complete>
<size>18505815</size>
<checksum>1580deb8fb5d705aefb028413dad1a3a129891fe</checksum>
<url>ba34c321f92f6e6fd696c8354c262c122f56abf8.cmake-3.18.1-darwin.zip</url>
</complete>
<host-os>macosx</host-os>
</archive>
<archive>
<!-- Built on: Tue Oct 27 14:25:05 2020. -->
<complete>
<size>21005945</size>
<checksum>9435bbe2120763871c75c37a365451b48c007fed</checksum>
<url>cmake-3.18.1-linux.zip</url>
</complete>
<host-os>linux</host-os>
</archive>
</archives>

Trying to use this branch to build an android app with gradlew, but if I pass includeEmulator = true to composeAndroidPackages, I get
while evaluating the attribute 'installPhase' of the derivation 'androidsdk' at /nix/store/kglpdi9lqczjhxcazq743x89yrx4q4n3-numinit-android-pr/pkgs/development/mobile/androidenv/tools/26.nix:4:3:
while evaluating 'linkPlugin' at /nix/store/kglpdi9lqczjhxcazq743x89yrx4q4n3-numinit-android-pr/pkgs/development/mobile/androidenv/compose-android-packages.nix:218:16, called from /nix/store/kglpdi9lqczjhxcazq743x89yrx4q4n3-numinit-android-pr/pkgs/development/mobile/androidenv/compose-android-packages.nix:250:9:
while evaluating 'optionalString' at /nix/store/kglpdi9lqczjhxcazq743x89yrx4q4n3-numinit-android-pr/lib/strings.nix:180:5, called from /nix/store/kglpdi9lqczjhxcazq743x89yrx4q4n3-numinit-android-pr/pkgs/development/mobile/androidenv/compose-android-packages.nix:219:5:
while evaluating the derivation attribute 'name' at /nix/store/kglpdi9lqczjhxcazq743x89yrx4q4n3-numinit-android-pr/pkgs/stdenv/generic/make-derivation.nix:192:11:
while evaluating the attribute 'pname' at /nix/store/kglpdi9lqczjhxcazq743x89yrx4q4n3-numinit-android-pr/pkgs/development/mobile/androidenv/deploy-androidpackage.nix:8:3:
while evaluating the attribute 'emulator."30.0.12".linux' at undefined position:
attribute '30.0.12' missing, at /nix/store/kglpdi9lqczjhxcazq743x89yrx4q4n3-numinit-android-pr/pkgs/development/mobile/androidenv/compose-android-packages.nix:141:15

the shell.nix I'm using is
let
  nixpkgs = (import <nixpkgs> { }).fetchFromGitHub {
    name = "numinit-android-pr";
    owner = "numinit";
    repo = "nixpkgs";
    rev = "94e099147e356ad6a6070a0b9f3758429cbf1f67";
    sha256 = "1h5f80my6w6dy8dgiqmaaw199x5kvxm38m528ip7kc7r22abm2c6";
  };
in with import nixpkgs { config.android_sdk.accept_license = true; };
let
  androidComposition = androidenv.composeAndroidPackages {
    toolsVersion = "26.1.1";
    includeEmulator = true;
    includeSystemImages = true;
    includeDocs = false;
    systemImageTypes = [ "default" ];
    abiVersions = [ "x86_64" ];
    includeNDK = true;
    # platforms = [ "28" ];
    ndkVersion = "21.3.6528147";
    useGoogleAPIs = true;
    useGoogleTVAddOns = false;
    includeExtras = [ "extras;google;gcm" ];
  };
in
pkgs.mkShell {
  buildInputs = with pkgs; [
    glibc_multi
    androidComposition.androidsdk
    openssl
  ];
  ANDROID_HOME = "${androidComposition.androidsdk}/libexec/android-sdk";
  GRADLE_OPTS =
    "-Dorg.gradle.project.android.aapt2FromMavenOverride=$ANDROID_HOME/build-tools/28.0.3/aapt2";
}

@DerGuteMoritz Just regenerated the repo.json.
@jmorag Try the latest commit. I found a bug in the generator script that was messing up the emulator repo JSON, and compose-android-packages.nix hadn't been updated with the latest available version.

Also removed includeDocs as an option, because Google appears to have quietly dropped them from their repos.

Yikes, somehow GitHub requested a review from everyone when I rebased and changed the base branch to 20.09...

I rebased and changed the base branch to 20.09...

Why?
Right now the base branch is nixos-20.09, which is a 'read-only' branch that is updated when the channel advances.
Development like this should happen against master. That way your changes aren't forgotten in the next release and the current release will remain stable.
It can be backported if it's a fix or an addition that doesn't break anything.

Yikes, somehow GitHub requested a review from everyone when I rebased and changed the base branch to 20.09...

It's best to create a new branch because of this. Unless I missed something, you should do that to rebase on master.

@jmorag Try the latest commit. I found a bug in the generator script that was messing up the emulator repo JSON, and compose-android-packages.nix hadn't been updated with the latest available version.

Thanks, that seems to have made some progress. I think there's a similar problem with systemImageTypes and platformVersions now. The update shell.nix
let
  nixpkgs = (import <nixpkgs> { }).fetchFromGitHub {
    name = "numinit-android-pr-rebase";
    owner = "numinit";
    repo = "nixpkgs";
    rev = "10d320878793f52a84d6cab98066b961f4760e28";
    sha256 = "0d4n6yfb5fg82rmrnl9r43h9msy8rjpmk9din246szl73qbl4xyn";
  };
in with import nixpkgs { config.android_sdk.accept_license = true; };
let
  androidComposition = androidenv.composeAndroidPackages {
    toolsVersion = "26.1.1";
    includeEmulator = true;
    includeSources = false;
    includeSystemImages = true;
    systemImageTypes = [ "default" ];
    abiVersions = [ "x86_64" ];
    includeNDK = true;
    platformVersions = [ "28" ];
    ndkVersion = "21.3.6528147";
    useGoogleAPIs = true;
    useGoogleTVAddOns = false;
    includeExtras = [ "extras;google;gcm" ];
  };
in
pkgs.mkShell {
  buildInputs = with pkgs; [
    glibc_multi
    androidComposition.androidsdk
    openssl
  ];
  ANDROID_HOME = "${androidComposition.androidsdk}/libexec/android-sdk";
  GRADLE_OPTS =
    "-Dorg.gradle.project.android.aapt2FromMavenOverride=$ANDROID_HOME/build-tools/28.0.3/aapt2";
}

now fails with
error: while evaluating the attribute 'ANDROID_HOME' of the derivation 'nix-shell' at /nix/store/ppkiazgvf15d92hhhnb6l3z6drii51qa-numinit-android-pr-rebase/pkgs/build-support/mkshell/default.nix:28:3:
while evaluating the attribute 'installPhase' of the derivation 'androidsdk' at /nix/store/ppkiazgvf15d92hhhnb6l3z6drii51qa-numinit-android-pr-rebase/pkgs/development/mobile/androidenv/tools/26.nix:4:3:
while evaluating 'optionalString' at /nix/store/ppkiazgvf15d92hhhnb6l3z6drii51qa-numinit-android-pr-rebase/lib/strings.nix:180:5, called from /nix/store/ppkiazgvf15d92hhhnb6l3z6drii51qa-numinit-android-pr-rebase/pkgs/development/mobile/androidenv/compose-android-packages.nix:256:9:
while evaluating 'concatMapStrings' at /nix/store/ppkiazgvf15d92hhhnb6l3z6drii51qa-numinit-android-pr-rebase/lib/strings.nix:31:25, called from /nix/store/ppkiazgvf15d92hhhnb6l3z6drii51qa-numinit-android-pr-rebase/pkgs/development/mobile/androidenv/compose-android-packages.nix:258:11:
while evaluating anonymous function at /nix/store/ppkiazgvf15d92hhhnb6l3z6drii51qa-numinit-android-pr-rebase/pkgs/development/mobile/androidenv/compose-android-packages.nix:258:33, called from undefined position:
while evaluating the derivation attribute 'name' at /nix/store/ppkiazgvf15d92hhhnb6l3z6drii51qa-numinit-android-pr-rebase/pkgs/stdenv/generic/make-derivation.nix:192:11:
while evaluating the attribute 'pname' at /nix/store/ppkiazgvf15d92hhhnb6l3z6drii51qa-numinit-android-pr-rebase/pkgs/development/mobile/androidenv/deploy-androidpackage.nix:8:3:
while evaluating the attribute '"28".default.x86_64' at undefined position:
attribute 'default' missing, at /nix/store/ppkiazgvf15d92hhhnb6l3z6drii51qa-numinit-android-pr-rebase/pkgs/development/mobile/androidenv/compose-android-packages.nix:162:21

There doesn't seem to be a default platformVersion in composeAndroidPackages. Do you know of a semi-recent one that works?

FWIW, this latest version broke the cmake build. For some reason, autoPatchelfHook is unable to find the ncurses libraries anymore now:
searching for dependencies of /nix/store/60790ji32rd5w774rypv6g30qy9k2s48-cmake-3.18.1/libexec/android-sdk/cmake/3.18.1/bin/ccmake
  libncurses.so.5 -> not found!
  libtinfo.so.5 -> not found!

The following patch fixes it:
diff --git a/pkgs/development/mobile/androidenv/cmake.nix b/pkgs/development/mobile/androidenv/cmake.nix
index 1aeef467642..ade111cf3f9 100644
--- a/pkgs/development/mobile/androidenv/cmake.nix
+++ b/pkgs/development/mobile/androidenv/cmake.nix
@@ -2,8 +2,8 @@

 deployAndroidPackage {
   inherit package os;
-  buildInputs = [ autoPatchelfHook ]
-    ++ lib.optional (os == "linux") [ pkgs.stdenv.glibc pkgs.stdenv.cc.cc ];
+  nativeBuildInputs = [ autoPatchelfHook ];
+  buildInputs = lib.optional (os == "linux") [ pkgs.stdenv.glibc pkgs.stdenv.cc.cc pkgs.ncurses5 ];
   patchInstructions = lib.optionalString (os == "linux") ''
     autoPatchelf $packageBaseDir/bin
   '';

(Moved autoPatchelfHook to nativeBuildInputs while I was at it)

I'm unsubscribing from this thread. You can @ me if you have any questions about rebasing to master (https://github.com/NixOS/nixpkgs/pull/89775#issuecomment-726664510)

@roberth Appreciate it. I'm a bit new to this kind of nixpkgs contribution. I figured since people are (apparently) using this, it should be rebased against 20.09... but apparently that has implications I wasn't aware of.
 I've updated compose-android-packages.nix to use it as a default. At a more fundamental level, I found another bug in mkrepo.rb - the image URLs were all wrong. Fixed that and your new shell.nix works.

Quick question: has anyone tested this with Flutter and Dart? I'll try it out myself over the next couple days, but I'd appreciate hearing about any results people have had with it so far.

Updated emulator from 30.3.0 to 30.3.1.

Tested it on a flutter project, works perfectly. What an amazing work!

Tested it on a flutter project, works perfectly. What an amazing work!

Delighted to hear. For a shell or a build? Mind sharing your nix files, @vzctl?

Here you go: https://gist.github.com/vzctl/9a071ab8e9fc71d384696e8c5a330d47
What works: nix develop + flutter build apk / vscode development on mobile
Does not work for me yet: emulator + system image building in android-studio.
Also I could not build my app in a sandbox (even the web version) because flutter tries to fetch some material fonts from the internet with any command. I tried to modify pub2nix to work with flutter but I did not have time to get to the bottom of it.

I also have a working flutter environment with emacs, here's the gist: https://gist.github.com/NANASHI0X74/14ccfb1e0245b7da10c9d95a2b4d1fd9

Updated emulator from 30.3.1 to 30.3.2.

This pull request has been mentioned on NixOS Discourse. There might be relevant details there:
https://discourse.nixos.org/t/prs-ready-for-review/3032/396

I have a look at this.

Updated build-tools default to 30.0.3

Removed lldb since it's also been removed from Android repo definitions and is bundled with Android Studio now.

We should probably changelog the removals, which were done because Google has removed them from their repo XML, so they don't show up in Android Studio:

includeDocs
lldbVersions

Alternatively, if someone can point to a reason why we should maintain these, let me know.

We should probably changelog the removals, which were done because Google has removed them from their repo XML, so they don't show up in Android Studio:
* ~includeDocs~

* ~lldbVersions~

Alternatively, if someone can point to a reason why we should maintain these, let me know.

Sounds good to. I would test this one more time when you also included this in changelogs.

Updated the changelog.

I tried building the newest commit but it fails to build openjdk-11.0.9+11, which I assume it's unrelated to the changes in this PR:
* For target hotspot_variant-server_libjvm_objs_ad_x86.o:
{standard input}: Assembler messages:
{standard input}: Internal error (Segmentation fault).
Please report this bug.
* For target hotspot_variant-server_libjvm_objs_barrierSetC2.o:
/build/source/src/hotspot/share/gc/shared/c2/barrierSetC2.cpp:635:1: internal compiler error: Segmentation fault
  635 | }
      | ^

Would love to test this PR but not sure what I can do.

@jakubgs I generally use another (stable) nixpkgs and do something like this:
androidEnvNixpkgs = fetchTarball {
  # ...
};

androidEnv = import "${androidEnvNixpkgs}/pkgs/development/mobile/androidenv" {
  inherit pkgs pkgs_i686;
};

androidComposition = androidEnv.composeAndroidPackages {...};

All right, I've done a roundup of all the issues/PRs this should close in the PR description.

Example has been updated to show how nixpkgs pinning works (i.e. using 20.09 nixpkgs with this androidenv)

I re-applied your changes on top of master and I rerun this shell.nix that I used for home-assistant
{
  pkgs ? import <nixpkgs> {},
  pkgs_i686 ? pkgs.pkgsi686Linux,
  config ? pkgs.config
}:

let
  android = {
    versions = {
      tools = "26.1.1";
      platformTools = "30.0.5";
      buildTools = "29.0.2";
      ndk = "21.3.6528147";
      cmake = "3.10.2";
    };

    platforms = ["30"];
    abis = ["armeabi-v7a" "arm64-v8a"];
    extras = ["extras;google;gcm"];
  };

  androidEnv = pkgs.androidenv.override {
    inherit config pkgs pkgs_i686;
    licenseAccepted = true;
  };

  androidComposition = androidEnv.composeAndroidPackages {
    toolsVersion = android.versions.tools;
    platformToolsVersion = android.versions.platformTools;
    buildToolsVersions = [android.versions.buildTools];
    platformVersions = android.platforms;
    abiVersions = android.abis;

    includeSources = false;
    includeSystemImages = false;
    includeEmulator = false;

    includeNDK = true;
    ndkVersion = android.versions.ndk;
    cmakeVersions = [android.versions.cmake];

    useGoogleAPIs = true;
    includeExtras = android.extras;

    # If you want to use a custom repo JSON:
    #repoJson = ./repo.json;

    # If you want to use custom repo XMLs:
    /*repoXmls = {
      packages = [ ../xml/repository2-1.xml ];
      images = [
        ../xml/android-sys-img2-1.xml
        ../xml/android-tv-sys-img2-1.xml
        ../xml/android-wear-sys-img2-1.xml
        ../xml/android-wear-cn-sys-img2-1.xml
        ../xml/google_apis-sys-img2-1.xml
        ../xml/google_apis_playstore-sys-img2-1.xml
      ];
      addons = [ ../xml/addon2-1.xml ];
    };*/

    # Accepting more licenses
    extraLicenses = [
      # Already accepted for you with accept_license = true.
      # "android-sdk-license"

      # These aren't, but are useful for more uncommon setups.
      "android-sdk-preview-license"
      "android-googletv-license"
      "android-sdk-arm-dbt-license"
      "google-gdk-license"
      "intel-android-extra-license"
      "intel-android-sysimage-license"
      "mips-android-sysimage-license"
    ];
  };

  androidSdk = androidComposition.androidsdk;
  platformTools = androidComposition.platform-tools;
  jdk = pkgs.jdk;
in
pkgs.mkShell rec {
  name = "androidenv-demo";
  buildInputs = [ androidSdk platformTools jdk pkgs.android-studio ];
  LANG = "C.UTF-8";
  LC_ALL = "C.UTF-8";
  JAVA_HOME = jdk.home;

  # Note: ANDROID_HOME is deprecated. Use ANDROID_SDK_ROOT.
  ANDROID_SDK_ROOT = "${androidSdk}/libexec/android-sdk";
  ANDROID_NDK_ROOT = "${ANDROID_SDK_ROOT}/ndk-bundle";

  # Ensures that we don't have to use a FHS env by using the nix store's aapt2.
  GRADLE_OPTS = "-Dorg.gradle.project.android.aapt2FromMavenOverride=${ANDROID_SDK_ROOT}/build-tools/${android.versions.buildTools}/aapt2";

  shellHook = ''
    # Add cmake to the path.
    export PATH="$(echo "$ANDROID_SDK_ROOT/cmake/${android.versions.cmake}".*/bin):$PATH"

    cat <<EOF > local.properties
# This file was automatically generated by nix-shell.
sdk.dir=$ANDROID_SDK_ROOT
ndk.dir=$ANDROID_NDK_ROOT
EOF
  '';
}

I did not have any problems with openjdk as the other guy - also on master we have now openjdk 14 anyway. However it seems that build-tools no longer seems to build:
$ nix-shell
...
builder for '/nix/store/f8n1vc139wv0v5c0jvfs2jklq9hgw6n5-build-tools-29.0.2.drv' failed with exit code 1; last 10 log lines:
  searching for dependencies of /nix/store/fhnm15fg9qg059yxfb0wzpf301kh3d1l-build-tools-29.0.2/libexec/android-sdk/build-tools/29.0.2/lib64/libaapt2_jni.so
  searching for dependencies of /nix/store/fhnm15fg9qg059yxfb0wzpf301kh3d1l-build-tools-29.0.2/libexec/android-sdk/build-tools/29.0.2/lib64/libc++.so
  searching for dependencies of /nix/store/fhnm15fg9qg059yxfb0wzpf301kh3d1l-build-tools-29.0.2/libexec/android-sdk/build-tools/29.0.2/lib64/libbcc.so
    libbcinfo.so -> found: /nix/store/fhnm15fg9qg059yxfb0wzpf301kh3d1l-build-tools-29.0.2/libexec/android-sdk/build-tools/29.0.2/lib64/libbcinfo.so
    libc++.so -> found: /nix/store/fhnm15fg9qg059yxfb0wzpf301kh3d1l-build-tools-29.0.2/libexec/android-sdk/build-tools/29.0.2/lib64/libc++.so
    libncurses.so.5 -> found: /nix/store/cpi29nfqvxy4xmqdkq61s72n6rywcbmg-ncurses-6.2-abi5-compat/lib/libncurses.so.5
    libtinfo.so.5 -> found: /nix/store/cpi29nfqvxy4xmqdkq61s72n6rywcbmg-ncurses-6.2-abi5-compat/lib/libtinfo.so.5
  setting RPATH to: /nix/store/fhnm15fg9qg059yxfb0wzpf301kh3d1l-build-tools-29.0.2/libexec/android-sdk/build-tools/29.0.2/lib64:/nix/store/fhnm15fg9qg059yxfb0wzpf301kh3d1l-build-tool
s-29.0.2/libexec/android-sdk/build-tools/29.0.2/lib64:/nix/store/cpi29nfqvxy4xmqdkq61s72n6rywcbmg-ncurses-6.2-abi5-compat/lib:/nix/store/cpi29nfqvxy4xmqdkq61s72n6rywcbmg-ncurses-6.2-
abi5-compat/lib
  automatically fixing dependencies for ELF files
  searching for dependencies of /nix/store/fhnm15fg9qg059yxfb0wzpf301kh3d1l-build-tools-29.0.2/libexec/android-sdk/build-tools/29.0.2/i686-linux-android-ld
error: --- Error --- nix-daemon
1 dependencies of derivation '/nix/store/mv8xb494r6qax4js94wwmal09r6q7czi-androidsdk.drv' failed to build
error: --- Error ----------------------------------------------------------------------------------------------------------------------------------------------------------- nix-build
1 dependencies of derivation '/nix/store/19hsxmby2x5nix5kn0a7fk8a8irmp9vx-androidenv-demo.drv' failed to build
$ nix log /nix/store/f8n1vc139wv0v5c0jvfs2jklq9hgw6n5-build-tools-29.0.2.drv > /tmp/build-tools.log

Here is the log: https://gist.github.com/Mic92/c45dc94da236e2b96264693b951ec03d
I have not looked closter into this, maybe set -x in the build script would throw some light on this. Right now there is no real error message why the unpacking fails.
It might be not related to your changes - however it seems to be a regression from the last time I run this. For reference this is the commit I was running on: https://github.com/Mic92/nixpkgs/tree/failing-android

@Mic92 I was able to reproduce this. However, it fails on the SDK tools instead of build-tools for me, because the build-tools are binary cached for me locally. With a set -x on tools/26.nix, it seems to die in autoPatchelf for some reason. Was there recently a change to autoPatchelf?

Seems to be caused indirectly by #101142: https://github.com/NixOS/nixpkgs/pull/101142#issuecomment-743788252

Looks like the new version of the NDK (22.0.7026061) requires libxml and liblldb.so.11git. I was able to resolve libxml with autoPatchelf. However, I now get this, even when adding lldb_11 to nativeBuildInputs:
autoPatchelfHook could not satisfy dependency liblldb.so.11git wanted by toolchains/llvm/prebuilt/linux-x86_64/bin/lldb
Add the missing dependencies to the build inputs or set autoPatchelfIgnoreMissingDeps=true

Any hints?

I'll resolve the conflict once I can update the NDK FWIW.

Looks like they ship LLDB in the newer NDKs so had to conditionally add a new search paths to autoPatchelf.

FWIW I tested the build locally against 20.09 nixpkgs and things seem to work. Still waiting on #106830 to be merged for master. And for some reason it looks like a lot of the JDK packages aren't binary cached, and were taking ages to compile on my poor laptop.

Rebased against master with #106830, included shell.nix now works in-tree without any modifications. Merry Christmas!

Fixed merge conflicts.

Fixed merge conflicts.

Sorry. Forgot about this PR. Will have a look now.

Sorry. Forgot about this PR. Will have a look now.

Good work, nice to see this getting merged!

Good work, nice to see this getting merged!

Thanks @Mic92!

Thanks @Mic92!


Can I use with vite-plugin-federation as a remote application?

Describe the bug
Versions
For Vite config

vite-plugin-federation: v1.3.6
vite: 5.0.6

For webpack config

@module-federation/enhanced0.7.5

Reproduction

 can not import vite remote app in webpack host app.
Not sure this is related with vite plugin, can not use with webpack host app
e:  Error: [ Federation Runtime ]: Failed to get remoteEntry exports. #RUNTIME-001
args: {"remoteName":"myRemoteApp","remoteEntryUrl":"

this is vite config from remote app
federation({
        name: 'myRemoteApp',
        filename: 'remoteEntry.js',
        remotes: {
          'myHostApp': '/resources/something/host',
        },
        exposes: {
          './Spinner': './src/components/Spinner.vue',
        },
        shared: ['vue', 'pinia', 'vue-router'],
      }),

and this is host app actually import  -  using vue2
import { init, loadRemote } from '@module-federation/runtime';

    const instance = init({
      name: "myHostApp",
      remotes: [
        {
          name: "myRemoteApp",
          entry: "/resources/my-remote-app/assets/remoteEntry.js",
        },
      ]
    })

export default {
  // ...
  async mounted() {
    const modules = await loadRemote('myRemoteApp/Spinner');
  }
}

e:  Error: [ Federation Runtime ]: Failed to get remoteEntry exports. #RUNTIME-001
args: {"remoteName":"myRemoteApp","remoteEntryUrl":"

Reproduction
sorry, it's enterprise
Used Package Manager
pnpm
System Info
Chrome 130.0.6723.92 (arm64)
Mac OSX

node 20.10 MacBook Pro 14 - OS 15.0.1

Validations

[X] Read the docs.
[X] Read the common issues list.
[X] Check that there isn't already an issue that reports the same bug to avoid creating a duplicate.
[X] Make sure this is a Module federation issue and not a framework-specific issue.
[X] The provided reproduction is a minimal reproducible example of the bug.

@ScriptedAlchemy  Oh, so cross organization library won't cover this cases 😓

Unlikely. V2 is based on our new runtime. Vite, rspack, rollup etc all implement the central runtime. You can try setting the remote Type to module on the MF plugin and that may work. But generally these forks were never compliant with our designs and just replicated some interfaces, that said our vite plugin should work just fine because it's implemented to our specs and we still control the runtime itself

@ScriptedAlchemy For build time plugin we can for sure use your above suggestion to add type:module when we enroll the remotes.
But what should be done in case of advance api example?
I see the solution is to add type property with either 'module' or 'esm' when invoking registerRemotes ().
But if we have let's say

rspack host
vite remote (using module-federation/vite)
webpack remote
rspack remote

And I want to use module federation runtime apis registerRemote and load remote.
I get details about remote like remote entry url using a fetch call...
But how can I determine in this case that if remote is ESM or script?  Because host is unaware of what tools remote might be using.
I am really stuck at this point how can I determine this  remote type dynamically?

You would know up front when you call register remote. Otherwise you may have more luck with the json remotes. They should contain the module type


Desired: no newline between a defn's name and arg vector

Hi there,
would it be possible to not insert a newline between a defn's name and its arg vector?
I did try studying the project's doc + source.
I think that for this to happen, something called arg2-body should be implemented? :)
Thanks - Victor

Understood!
Thank you for the explanation and putting this on the roadmap.

I can't see that anyone would really want the arg vector on the same line as the fn name and the doc-string anyway.

Yeah that would be very ugly.
So a smart behavior for what I want would be:

Normal case: defn foo [x y z] by default (all in the same line)
Docstring case: defn foo "docstring" \n [x y z] (newline after docstring)
Long case: defn fooooooooooo \n [xxxxxxxxxxxxxx yyyyyyyyy zzzzzzzzzzzzzzz] (newline after the name, if otherwise :width would be surpassed)

That's exactly the 'algorithm' I follow myself manually, so it'd be awesome if zprint could automate it.

You can now do this in version 0.5.0, though it has been a long time in coming.  The key thing in making this work well was the implementation of :next-inner, which allows you to turn off things that you just turned on to format a function -- thus changing only the "top level" of a function format, and not everything down inside of the function.
For example:
 (def i86d
  "(defn thefn
    [a b c]
    (swap! this is (only a test to see what happens))
    (list a b c))")

zprint.core=> (czprint i86d {:parse-string? true :fn-map {"defn" [:arg2 {:fn-force-nl #{:arg2} :next-inner {:remove {:fn-force-nl #{:arg2}}}}]}})
  (defn thefn [a b c]
    (swap! this is (only a test to see what happens))
    (list a b c))

I believe that this will do exactly what you want, in all of the cases.

Ace, thank you!
Right now I don't use zprint for my formatting needs, but next time the occasion arises, I'll be sure to keep in mind this one. 👍

I am also interested in formatting defn as it is suggested here.
Is there a simpler way to do that in July 2021 (last activity on this thread was on December 2019)?

Yes, :style :rod has been implemented following https://github.com/kkinnear/zprint/issues/170
(@kkinnear , sorry for the lack of input. I have a quite a lot on my plate right now)


Implement filter/ sort for Apportioned Ozone Season Emissions Data

System Increment Definition of Ready (DoR)
Before being accepted into a Program Increment each feature:

[x] Meets the INVEST criteria (Independent, Negotiable, Valuable, Estimate-able, Small, Testable)

[x] Has a clearly defined user

[x] Has an estimate

[x] Has acceptance criteria

[x] Has sufficient context, such as

User research (not needed)

Screen Mockups/UI Design (updated time panel, same as annual)

Data conversion (completed)

System requirements (in progress)

[ ] Traceable to feature, epic or PI

[ ] Dependencies are identified

[ ] Component reusability assessed

Feature Benefit

Provide Apportioned Ozone Season Emissions data via API so the API returns all data needed for the EASEY Out Release

Validate Apportioned Ozone Season Emissions API parameters to ensure that the request is valid

Context
Refer to EASEY Out Production List
Apportioned Ozone Season Emissions System Requirements
Questions:
Assumptions:

Parameters will not be validated against each other (e.g. the system will not validate that Account name is valid for the ORIS code). The system will just return data for the parameters specified.
Blank parameter values will return all records
If multiple parameters are sent in a single query (TX, Coal), then only values that match all parameters will be returned (AND)
If multiple values are sent for a single parameter (e.g. TX, MD)  then all data that matches the values is returned (OR).
API criteria inputs should not be case sensitive
API criteria inputs should accept white spaces before/after delimiter when multiple values inputted (e.g., “Facility A , Facility B”)
Pagination should be optional for APIs
The API will not accept facility name as filter criteria. It will only accept Facility ID (ORIS code).

API Parameters:
Year: Required, multiple values allowed, Format: YYYY, Range: 1995- latest reporting quarter,  Allow indiv. Years, ranges, and comma sep. list
Facility ID (ORIS code): Optional, multiple values allowed
State: Optional, multiple values allowed, 2 letter postal abbreviation for the 50 states plus Puerto Rico.
Unit Type:  Optional, multiple values allowed
Unit Fuel Type: Optional, multiple values allowed, query will filter on both primary and secondary fuel type
Control Technologies:   Optional, multiple values allowed
Program:  Optional, multiple values allowed, excludes MATS
UI Parameters
Data Type
Button/drop down
Value: Emissions, Allowance, Compliance, default blank,
Required
Single select
Data Sub-Type
Drop down
Value: Hourly Emissions, Daily Emissions, Monthly Emissions, Quarterly Emissions, Ozone Season Emissions, Annual Emissions,
Facility/Unit Attributes, default blank
Required
Single select
Year:
Required
Range: 1995- latest reporting quarter,
Text field. Allows ranges and individual years (YYYY-YYYY, YYYY, YYYY)
multiple values allowed,
Format: YYYY
Facility :
Facility Name
Dynamic search
Search is a contains search
Results are displayed in Facility Name (ORIS Code)
Results populate in a list, parameters populates when a value is selected from the list  	(results list should stay at top of page/visible in current view, possible use pagination to keep window small)
Search is not case sensitive
Out of scope: If state is already selected, then search is limited to facilities in the selected state
Out of scope: If program is already selected, then facilities is limited to facilities associated to the selected program
If no results are found, the system will indicate so. “No facilities match your search.”
Multi select
ORIS Code
Dynamic search
Search is a contains search
Results populate in a list, parameters populates when a value is selected from the list
Results are displayed in Facility Name (ORIS Code) format
Out of scope: If state is already selected, then search is limited to facilities in the selected state
Out of scope: If program is already selected, then facilities is limited to facilities associated to the selected program
If no results are found, the system will indicate so. “No facilities match your search.”
Multi Select
State:
Dynamic search
Search is a “begins with” search
Results populate in a list, parameters populates when a value is selected from the list
Results display the full state name (Texas, not TX)
Out of scope: If Facility/ORIS Code is already selected, then state is automatically populated with the state (or states) associated to the facility(or facilities)
Multi Select
Unit Characteristics
Unit Type:
Drop down
Values: Boiler, Turbine, default blank
Optional
Multi select

If boiler is selected, then the system displays a list of boiler unit types, multi select
If a user selects All Boilers, then the system will show all boiler types are selected.
The system will provide the ability to select and deselect boiler types.
If turbine is selected, then the system displays a list of turbine unit types, multi select
If a user selects All Turbines, than the system will show all turbine types are selected.
The system will provide the ability to select and deselect turbine types. -

Unit Fuel Type:
Drop down
Values: Coal, Gas, Oil, Other, default blank
Optional
Multi select
Search is performed on Primary and Secondary fuel types  NOTE: Add "?" text to inform user this is how search works
If coal is selected, then the system displays a list of coal fuel types, multi select
If gas is selected, then the system displays a list of gas fuel types, multi select
If oil is selected, then the system displays a list of oil fuel types, multi select
Control Technologies:   Optional, multiple values allowed
Drop down
Values: SO2 Controls, Hg Controls, NOx Controls, PM Controls, default blank
Optional
Multi Select
Program
Drop down, default blank
Values: All active and inactive programs (MATS is excluded)
Optional
Multi select
Out of scope: If facility is already selected, then programs is limited to programs associated to the selected facility
Change Criteria
The user will have the ability to clear one, many, or all filter criteria
If the user changes data type or sub data type, then:
The filter criteria displayed updates accordingly
No previously entered filter criteria is retained
If a user changes data type or sub data type, then filter criteria is cleared
If the user chooses to clear one or more filter criteria before preview is selected, then the system clears the criteria from the filter and updates any remaining dependent criteria accordingly.
If the user chooses to clear one or more filter criteria after preview is selected, then the system clears the criteria from the filter AND download is disabled until data is previewed.
Validations
Year:
Validate that at least one value exists for the parameter
Validate that the year is in the YYYY  format
Validate that the year is  greater than or equal to 1995
Error Message 1: <   insert property    > should not be null or undefined FV-106
Error Message 2: One or more <  insert property  > are not in the <  insert format  >. Ensure all  are in the <  insert format  > FV-102
Error Message 3: Update one or more <  insert property  > to <  insert valid range  > FV-105
Facility ID (Oris Code):
Validate that the value is a number
If the value is a number, validate that the format is correct
positive integer (no negative numbers, not 0)
whole numeric value (no letters or special characters)
no more than 6 digits
Error Message: Error Message:  One or more <    insert property    > are not valid. Refer to the list of available <     insert property     > for valid values [placeholder for link to endpoint] FV-100
State:
Validate that the value matches a valid 2 letter postal abbreviation for at least 1 of the 50 states, PR, or DC
Error Messages: One or more states are not valid. Use the two letter postal abbreviation (use TX, not Texas).  FV-101
Unit Type:

Validate that the value matches a valid unit type

Error Message:  One or more <    insert property    > are not valid. Refer to the list of available <     insert property     > for valid values [placeholder for link to endpoint] FV-100
Unit Fuel Type:

Validate that the value matches a valid fuel type

Error Message: One or more <    insert property    > are not valid. Refer to the list of available <     insert property     > for valid values [placeholder for link to endpoint] FV-100
Control Technologies:

Validate that the value matches a valid control technology

Error Message:  One or more <    insert property    > are not valid. Refer to the list of available <     insert property     > for valid values [placeholder for link to endpoint] FV-100
Program:

Validate that the value matches a valid program code

Error Message: One or more <    insert property    > are not valid. Refer to the list of available <     insert property     > for valid values [placeholder for link to endpoint] FV-100
Results:
When the system identifies at least one record that matches the criteria, then for each record the system will display the data below and ordered by Facility > Unit > Year
STATE
FACILITY_NAME
ORISPL_CODE
UNITID
ASSOC_STACKS
YEAR
SUM_OP_TIME
COUNT_OP_TIME
GLOAD
SLOAD
SO2_MASS
SO2_RATE
NOX_MASS
NOX_RATE
CO2_MASS
CO2_RATE
HEAT_INPUT
PRIMARY_FUEL_INFO
SECONDARY_FUEL_INFO
UNIT_TYPE_INFO
SO2_CONTROL_INFO
PART_CONTROL_INFO
NOX_CONTROL_INFO
HG_CONTROL_INFO
PRG_CODE_INFO
New FC = 3 (1)
Existing FC = 1 (6)
Preview = 2
Filter Tags = 2
Download = 3
API = 8

Epic completed


Aoss indexer

Description
Fixes

@davdhacs Can you provide a bit more context on this PR and how the changes were tested?


Roads under construction

Added path and casing line layers for roads under construction, which are depicted as broken lines. Labels for these roads end with the annotation “(UNDER CONSTRUCTION)” is slightly smaller type.
Examples
https://user-images.githubusercontent.com/1231218/156917234-2e4ccdb4-8044-4312-a7af-ed3694b47a92.mov

z7
z8
z9
z10
z11

z12
z13
z14
z15
z16

https://user-images.githubusercontent.com/1231218/156917539-2eed3ea2-7d85-4128-b9ac-f906d9303d0e.mov

z7
z8
z9
z10
z11

z12
z13
z14
z15
z16

Caveats
Aligning the path and casing line layers has been a challenge. The standard approach to casing – putting a wider line layer below the path line layer – breaks down along curved lines, because the line-dasharray paint property is scaled by the line width. Instead, both layers have the same line width, but the casing layer has a line-gap-width property. Despite the property being measured in pixels, I can’t get the casing to be any thinner than 5 pixels wide.
I gave the dashes and gaps an exponential ramp that should keep it discernible as a broken line at any zoom level. Unfortunately, the dash pattern shows seams at tile boundaries or anywhere two LineString features connect, such as at the ends of bridges. (I gave bridges and tunnels under construction exactly the same style, for simplicity.) It’s also very easy for divided highways to wind up with alternating dash patterns that blend into one another at some zoom levels.
I’ve marked this PR as a draft not because these imperfections are fatal to the broken line concept but rather because the code changes are so messy. The road line code is very rigidly structured but shows signs of strain with these changes. The line-gap-width approach breaks the assumption that there are distinct line widths for the path versus the casing, and the mere presence of a construction variant of each road layer means lots of conditionals. Since each layer definition is ultimately an object, we probably should be relying on prototypes instead of classes and the Builder pattern (no pun intended).
Fixes #212.

The fact that we don't have merged lines on dual carriageways is squarely a server-side problem, and I'm comfortable ignoring unwanted display artifacts due to that.  I'm thinking the same about the tile boundary artifacts, and am hoping this is something that can some day be resolved in maplibre.

The use of a hard-coded English label is new ground for this style.  Is there a path to i18n of this and any other fixed strings in the event someone wants to implement a language switcher?

The use of a hard-coded English label is new ground for this style. Is there a path to i18n of this and any other fixed strings in the event someone wants to implement a language switcher?

I factored out the suffix into a translation table with code to automatically select the translation that best matches the user’s locale. In time, we can factor it out again into a separate file in a format like Structured JSON that a translation management system like Transifex can understand.

Is it planned to display tunnel/bridge status?

For visual simplicity, I did not include special treatment of tunnels and bridges under construction. The idea is that a road under construction is only being “sketched in” with a broken line, making it unnecessary to faithfully represent how it will connect to roads around it (or not). This seems to match the approach taken by every print map that I’ve been able to find. However, if you have examples of this extra detail being depicted, I’d be interested to know how they approach the problem while retaining intuitiveness.

Noting for reference: As mentioned in Slack, one styling option for highway=track is the broken double-black line treatment shown as "Uninmproved road" in this example (from #216). This treatment may collide with some treatments of roads under construction in this PR.

#502 took a different, more workable approach to rendering roads under construction. #503 tracks reviving the localization system in https://github.com/ZeLonewolf/openstreetmap-americana/pull/215#issuecomment-1060067427 to implement glosses in labels.


URLs cause 404 (gh-pages) static build

Steps to reproduce:

https://sinnerschrader.github.io/dekk/manual/?references-enabled=true
click a link in the sidebar
reload page

or

open https://sinnerschrader.github.io/dekk/manual/doc/.manual/reference/installation?references-enabled=true

everything exists in this folder: https://github.com/sinnerschrader/dekk/tree/master/docs/manual/doc/.manual
I checked and found matching index.html files.
The only issue I could imagine is that the dot . in .manual could cause a conflict.
Versions
"@patternplate/cli": "^2.0.0-63"

Have you tried using manual instead of .manual? Does that change anything? I think this is not related to patternplate, but gh-pages:
https://help.github.com/articles/files-that-start-with-an-underscore-are-missing/

I was wondering about it too. I don't see why it wouldn't work.
I'll create a simple repo with .foo in the path and see if that is ignored.
I could imagine that gh-pages treats it as a "hidden folder"

Confirmed:
https://pixelass.github.io/foo/.foo/
https://github.com/pixelass/foo/tree/master/docs/.foo
Can patternplate rename these folders?
It is obviously an issue if there are 2 folders .foo and foo and the . is simply stripped.
Maybe the names can be hashed instead? /.foo/bar/baz/.qux/ => /abc123/bar/baz/xyz789/

Sidenote: .manual is the source docs folder.
{
docs: [".manual/**/*.md"]
}

Currently I‘d tend not to implement some magic renamer thing. This might go away on its own when I switch to id instead of path based urls for docs, too

Easy fix would be a .noyekyll file in docs/

I renamed the folder.
This is such a minor issue for me. At least now it's here for everyone to read.
closing.


Conversation styling tweaks

💬 Description
Now that I have implemented them for reals in app, I have found a few tweaks I need to make for them to be perfect. Here is the list of changes in this PR:

Got rid of the dodgy last code and just did it in js, it overcomplicated things just to add padding to a comment. (lib/Comment/Comment.js)

CommentBody now holds the body in it's local state, this was because the body would change back and forth when we edited the comment (lib/Comment/CommentBody.js)

Mentions styling was way too bold, now it's just semi-bold (lib/Comment/CommentBody.js)

When cancelling a comment, we need something to focus onto or else the conversation will be deactivated, turns out there was a hidden input for it I just never used... (lib/Comment/CommentBody.js)

We need to tell the app when we're editing a comment (lib/Comment/EditCommentForm.js)

Same as above but when we're creating a new comment (lib/Comment/NewCommentForm.js)

The comment line wasn't properly centered, I had to budge it over 1px. (lib/Comment/styles.scss)

We need to export the new components instead of the old ones to be used in app!! (lib/index.js)

🚪 Start Points
Anywhere really, maybe go down the list!
✅ Checklist

[ ] Tests written
[ ] Browser tested
[ ] Added to documentation
[ ] Added to storybook

 Integrate the new conversation components into app!


Machete file/generate error for repeated branch

Closes #1195

I ve also tested it against non existing branch (no local branch - it works) however I managed to add the second entry of develop without the red underline

@mkondratek
This should be fixed now

@LukaszKontowski, Ive tested it locally and for me it looks like the law of conservation of bugs is maintained, great work! 🤣

so now only the last occurrence is highlighted. the question is if it should be

all
second and later

i have no strong feeling about any of these so use your own judgment

so now only the last occurrence is highlighted. the question is if it should be

I'd vote for all, as the user might want to remove the first occurrence as well, so better to highlight as well

Ive tested it locally and for me it looks like the law of conservation of bugs is maintained, great work

Wait what's the incoming bug to fill up the place of #1195? 🤔

so now only the last occurrence is highlighted. the question is if it should be

all
second and later

All occurrences should be highlighted now. Just fixed it.

Ive tested it locally and for me it looks like the law of conservation of bugs is maintained, great work

Wait what's the incoming bug to fill up the place of #1195? 🤔

I cannot wait to find it out! 🤞

the highlight seems to work for all repeated branches indeed now.
However I see that the law of conservation of bugs has not been maintained - I see two new problems:

first develop is not highlight - but possible its okay since the formating is wrong
dev is not already defined

dev is not already defined

fixed now @mkondratek - compares branch names properly.
Indeed, the previous logic was very dummy

but there is som thing wong still :c

but there is som thing wong still :c

@mkondratek Can you please test it again and let me know if lack of highlighting happened again? I tried testing multiple times and worked well every time. Also with the same scenario as on your screenshot.

Huh same problem with lack of red squiggles for me as well... just a single IntelliJ opened, plugin installed from zip (from CI artfifacts):

Same if the branch is repeated just twice :/

@LukaszKontowski, I see :pawlacz: just reviewed it and found a new problem 😆 I will re-review it once the mentioned is fixed

@PawelLipski
Problems with comments - fixed in https://github.com/VirtusLab/git-machete-intellij-plugin/pull/1216/commits/154819313b3e0ed0b273de5a0b68f538aa409a1c
In my opinion this is enough.
Reasoning: (correct me if I am wrong) :

each line in the machete file might contain only one branch name (if it is not a blank line)
our parser gets the first word from the line and treats it as the branch name
if there is a whitespace character after branch name on the same line, and after this whitespace (space/tab) there are some other words - they are all treated as a comment and not as a part of branch name

@PawelLipski Problems with comments - fixed in 1548193
In my opinion this is enough. Reasoning: (correct me if I am wrong) :

each line in the machete file might contain only one branch name (if it is not a blank line)
our parser gets the first word from the line and treats it as the branch name
if there is a whitespace character after branch name on the same line, and after this whitespace (space/tab) there are some other words - they are all treated as a comment and not as a part of branch name

Okay, should be enough indeed... .git/machete file format is extremely unlikely to ever change in non-backward-compatible manner anyway ;)

Ok, @mkondratek - issue reported by Paweł is fixed now. Please, re-review 😸


Preserve context when clicking on traceRefs

User story

As a user I want to stay in the same view when clicking a traceRef.
I need to stay in the respective view I am in.

Acceptance criteria
When in listView, clicking on traceRef should open the item in listView.
When in singleItemView, clicking on traceRef should open the item in singleItemView.
When in historyView, clicking on traceRef should open the item in historyView.
Dods
Feature has been fully implemented
No known errors
All acceptance criteria were met
Test passes
Peer code review passed

When in ListView and user clicks on traceref its like he scrolls to that specific item. (Maybe highlight the item in yellow)


How can only be modified to achieve real-time stitching

Hi ...
For the time I look at your code ...There are some doubts can you help? I have readed your blog,I found the trans mode for onebyone stitching is better，at your blog you said it only applicable when camera do pure translation，but when I used some rotate pictures, It sames work good, because of  it?(The skew factor in homography (H31,H32) cannot be too large. Their absolute values are usually less than 0.002.) can i understand for some slight rotate it can work，It is the real-time first... Thank you (I had used GPU accelerate，there are only 100mills for two 600*400 pictures)

I don't understand what you're asking.
And TRANS mode may be better if there is only very small rotation -- if that's what you're asking.

Sorry,You're talking about what I mean..In this mode,when i enter all the pictures to be stitched,it worked well. if one  by one to stitch it always failed at fourth or fifth pictures...it  is now my biggest problem facing stitching


ml_utils dependency is missing

Hi, thanks for the great repository. However, I cannot run the code without the ml_utils library, which is not currently present in this repository.

Would you be able to provide the source code for ml_utils? This library does not seem to be a standard library that can be installed via PyPI and I was unable to find it anywhere else on the internet. The code just cannot run without this essential library. Thanks.

Hi Yunsheng,
Sorry for the late reply. Ahsan forgot to release the ml_utils folder. I've uploaded it to my repo which you can find it here
Best
Robin

Sure, thanks for the update!


fix formatting issue 'setTimeout case' - close #28

I found setTimeout case also in Korean language (stack/languages/korean/book/Part-9.md). However I don't know Korean so I left it. Maybe you know someone who could fix the translation?

@Platonn thanks 😸


Adds logging for relay queries and metaphysics extensions used in query

Related: https://github.com/artsy/reaction/pull/2002

Fails

:no_entry_sign:

No CHANGELOG added.

:no_entry_sign:

[danger-plugin-jest] Could not read test results. Danger cannot pass or fail the build.

  Generated by :no_entry_sign: dangerJS

This looks great!

You want these changes: https://github.com/artsy/reaction/pull/2008


Vscode recommends depricated extension TypeScript Vue Plugin( (Volar)

Does this issue occur when all extensions are disabled?: Yes/No
yes

VS Code Version: 1.87.1
OS Version: windows 10

Steps to Reproduce:

Open a vue project
Volar is recommended, click on install,
After Installation it shows as This extension is deprecated. Use the Vue - Official extension instead.

The text that appears: Do you want to install the recommended 'TypeScript Vue Plugin (Volar)' extension from Vue for this repository?

I just replicated this in a python project with no .js, .ts or .vue  files in it.  It also appears in an @recommended extension search.

We actually do not recommend Vue.vscode-typescript-vue-plugin from vscode anywhere.
It looks like the repository you are opening is recommending a deprecated extension. I suggest to reach out to the repository owner to tell them to recommend the new extension vue.volar
@sandy081 maybe there should be a way in core to change repository extension recommendation for deprecated extensions.

That is interesting . Is it part of a workspace file or repo to recommend extensions?

Yeah, look under the top level .vscode folder in the repository.

Yeah, it could be added as a feature request, for vscode to offer to remove deprecated recommendations from the extensions.json file (the culprit here, which I think was automatically added when creating a new Vue project with TS using Vue CLI and/or Vite) where vscode is currently suggesting to install it?


Correct minimal versions check

dev-dependencies may raise version requirements. Ideally, remove them before run cargo update -Z mimimal-version.
See also https://github.com/tokio-rs/tokio/pull/3131#discussion_r521621961.

bors r+


(node:15900) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.

Version: 1.34.0 (user setup)
Commit: a622c65b2c713c890fcf4fbf07cf34049d5fe758
Date: 2019-05-15T21:59:37.030Z
Electron: 3.1.8
Chrome: 66.0.3359.181
Node.js: 10.2.0
V8: 6.6.346.32
OS: Windows_NT x64 10.0.18362
Steps to Reproduce:

Install the Encode Decode extension (mine)
Create a text file type some text and select it.
CTRL-ALT-C and select a converter
Bring up the developer tools, you should see the following warning.

(node:15900) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.
Does this issue occur when all extensions are disabled?: No
My code doesn't use Buffer anywhere - and it appears to be being triggered somewhere in workbench.main. It doesn't break my extension at all but thought you should be aware.
Looks like there have been some other bugs similar to this but all in different areas (probably from different dependencies of VSCode).

On second thought it could be from one of my dependencies but might just look like it is coming from VSCode:
https://github.com/substack/node-ent/commit/dee1d4ba651e503e458271ecdd4d81f135ffb910

Hrm - actually I commented out the module that is using a Buffer and its still happening.

/duplicate https://github.com/microsoft/vscode/issues/67534


Polymer filter should support parameters

This issue was originally filed by @zoechi

Polymer filter should support additional arguments as in Polymer.js
see also http://www.polymer-project.org/docs/polymer/expressions.html#filter-parameters
Erics answer to this SO question http://stackoverflow.com/questions/21379167
indicates that this was already working at some time.
tested with Polymer 0.12.0-dev

This issue has been moved to dart-lang/polymer-dart#511.


How to preprocess MAP4 before training?

Hello,
I tried today to train a simple Classifier MLP to predict the bioactivity of a set of small molecules (not peptidomimetics of peptides). This is how I preprocess the MAP4 vectors before training:
x = np.array(MAP4.calculate_many(mol_list), dtype=np.int) ColorPrint("Scaling features in the range [0,1].", "OKBLUE") scaler = MinMax_Scaler()  # scaler with memory, to be used later on the xtest x = scaler.fit_transform(x) ColorPrint("Removing only uniform features.", "OKBLUE") x = remove_uniform_columns(x)
The x 2D array is the input to the MLP. Oddly enough, the performance of the MLP in 5-fold cross-validation is poorer than any other fingerprint that I tested. See the results below:
Results for feature vector type ECFPL: average AUC-ROC=0.754875+-0.061359 average DOR=16.044811+-13.862254 average MK=0.509749+-0.122718
Results for feature vector type FCFPL: average AUC-ROC=0.754583+-0.067879 average DOR=17.411853+-14.740475 average MK=0.509166+-0.135758
Results for feature vector type AvalonFPL: average AUC-ROC=0.755908+-0.072506 average DOR=22.775238+-29.836969 average MK=0.511817+-0.145013
Results for feature vector type gCSFP: average AUC-ROC=0.733945+-0.072095 average DOR=14.667879+-16.226123 average MK=0.467889+-0.144191
Results for feature vector type CSFPL: average AUC-ROC=0.716520+-0.053522 average DOR=8.701626+-4.768975 average MK=0.433040+-0.107043
Results for feature vector type tCSFPL: average AUC-ROC=0.719829+-0.058146 average DOR=8.996485+-5.867861 average MK=0.439658+-0.116293
Results for feature vector type iCSFPL: average AUC-ROC=0.768058+-0.091553 average DOR=58.927698+-100.427486 average MK=0.536115+-0.183106
Results for feature vector type fCSFPL: average AUC-ROC=0.741297+-0.062825 average DOR=13.043251+-8.988206 average MK=0.482595+-0.125651
Results for feature vector type pCSFPL: average AUC-ROC=0.749496+-0.063083 average DOR=14.137692+-10.776114 average MK=0.498991+-0.126165
Results for feature vector type gCSFPL: average AUC-ROC=0.738966+-0.083883 average DOR=17.951455+-21.426471 average MK=0.477931+-0.167767
Results for feature vector type AP: average AUC-ROC=0.779686+-0.067921 average DOR=23.284337+-19.439457 average MK=0.559371+-0.135841
Results for feature vector type cAP: average AUC-ROC=0.785569+-0.056231 average DOR=21.165699+-13.829002 average MK=0.571139+-0.112462
Results for feature vector type TT: average AUC-ROC=0.728741+-0.093040 average DOR=26.068889+-41.656358 average MK=0.457481+-0.186081
Results for feature vector type cTT: average AUC-ROC=0.725244+-0.087174 average DOR=21.606984+-33.135657 average MK=0.450488+-0.174347
Results for feature vector type ErgFP: average AUC-ROC=0.722143+-0.042805 average DOR=7.991111+-3.364458 average MK=0.444285+-0.085610
Results for feature vector type 2Dpp: average AUC-ROC=0.754694+-0.036142 average DOR=13.907273+-8.282393 average MK=0.509388+-0.072285
Results for feature vector type MAP4: average AUC-ROC=0.713780+-0.055750 average DOR=8.804872+-4.667274 average MK=0.427561+-0.111501
Am I doing something wrong in the preparation of the MAP4 feature vectors? Is this the right way to train a network using MAP4 as input? I am asking this question because I read in the documentation that due to MinHashing, the order of the features matters and the distance cannot be calculated "feature-wise". I wonder if this attribute affects also the neural network's training.
Thanks in advance.
Thomas

Hi Thomas,
MinHashed vectors cannot be scaled between 0 and 1 and their distance cannot be calculated using the log loss function. The feature number and the feature order are important. You would need to implement a custom loss function (see also https://github.com/reymond-group/MAP4-Chemical-Space-of-NPAtlas and https://chemrxiv.org/s/4c5a0ac4e65cd2f90a5a). Since the MPL classifier cannot be used with a custom loss function (at least in its scikit-learn implementation), I would suggest you to use the MAP4 fingerprint as a bit vector.
To calculate the MAP4 fingerprint as a bit vector, you need to initialized the MAP4Calculator with is_folded = True (this method applies the SHA-1 hashing and then the modulo operation on the unique set of shingles).
Otherwise you could give as input to the classifier a similarity vector to the training set. In this case you would need to calculate for each input molecule the similarity of its minhashed fingerprint fp1 to each molecule of the training set fp2 as
np.float(np.count_nonzero(fp1 == fp2))/np.float(len(fp1))
Let me know if it works :)
Cheers,
Alice

Hello Alice and thank you for your advice. Indeed, conversion to bit vector
improves the performance of the Classifier.
Results for feature vector type MAP4: average AUC-ROC=0.741585+-0.079234

average DOR=16.686330+-15.898923 average MK=0.483170+-0.158467

Can I remove uniform features (columns with the same value in all rows)?
I don't understand the alternative approach you suggested using
similarities. A Classifier must receive as input the same type of feature
vectors both in training and testing. If the input feature vectors of the
test set contain as features similarities to every single molecule of the
training set, what will the feature vectors of the training contain?
Similarities of every training molecule to the rest in the training set? It
doesn't make sense.
Finally, speaking of parameters in MAP4Calculator(), which values do you
suggest for 'dimensions' and 'radius' to minimize bit collision? With ECFP
fingerprints, I use 8192 bits and radius=3. What does 'is_counted' do?
Best,
Thomas
PS: Btw, I am building custom Classifiers with TensorFlow and Keras thus I
can control the loss function.
On Mon, 21 Sep 2020 at 11:29, Alice Capecchi<EMAIL_ADDRESS>wrote:

Hi Thomas,
MinHashed vectors cannot be scaled between 0 and 1 and their distance
cannot be calculated using the log loss function. The feature number and
the feature order are important. You would need to implement a custom loss
function (see also
https://github.com/reymond-group/MAP4-Chemical-Space-of-NPAtlas and
https://chemrxiv.org/s/4c5a0ac4e65cd2f90a5a). Since the MPL classifier
cannot be used with a custom loss function (at least in its scikit-learn
implementation), I would suggest you to use the MAP4 fingerprint as a bit
vector.
To calculate the MAP4 fingerprint as a bit vector, you need to initialized
the MAP4Calculator with is_folded = True (this method applies the SHA-1
hashing and then the modulo operation on the unique set of shingles).
Otherwise you could give as input to the classifier a similarity vector to
the training set. In this case you would need to calculate for each input
molecule the similarity of its minhashed fingerprint fp1 to each molecule
of the training set fp2 as
np.float(np.count_nonzero(fp1 == fp2))/np.float(len(fp1))
Let me know if it works :)
Cheers,
Alice
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/reymond-group/map4/issues/7#issuecomment-696003475,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ABL6IFCHBHNRNQSMXDZOYP3SG4MIDANCNFSM4RTVAXIQ
.

--
======================================================================
Dr. Thomas Evangelidis
Research Scientist
IOCB - Institute of Organic Chemistry and Biochemistry of the Czech Academy
of Sciences https://www.uochb.cz/web/structure/31.html?lang=en, Prague,
Czech Republic
&
CEITEC - Central European Institute of Technology
https://www.ceitec.eu/, Brno,
Czech Republic
email<EMAIL_ADDRESS>Twitter: tevangelidis
https://twitter.com/tevangelidis, LinkedIn: Thomas Evangelidis
https://www.linkedin.com/in/thomas-evangelidis-495b45125/
website: https://sites.google.com/site/thomasevangelidishomepage/

Can I remove uniform features (columns with the same value in all rows)?

If you are talking about the bit vector, yes (you can treat it as ECFP4).

I don't understand the alternative approach you suggested using
similarities. A Classifier must receive as input the same type of feature
vectors both in training and testing. If the input feature vectors of the
test set contain as features similarities to every single molecule of the
training set, what will the feature vectors of the training contain?
Similarities of every training molecule to the rest in the training set? It
doesn't make sense.

Yes, it makes sense. It is like giving a similarity matrix spitted into individual vectors as input.

Finally, speaking of parameters in MAP4Calculator(), which values do you
suggest for 'dimensions' and 'radius' to minimize bit collision? With ECFP
fingerprints, I use 8192 bits and radius=3.

Assuming that you are talking about the folded version, I am not sure, I have used the folded version of MAP4 only for the benchmark, in that case I have used 2048 dimensions and radius 2.

What does 'is_counted' do?

In its default version the shingles representing a molecule are made unique hashed and MinHashed. Instead, when using is_counted=True, all shingles are considered.

Hi, I also would like to use MAP4 to train machine learning model. I understand how to get bit vector by setting is_folded = True.
I have a question about radius. Is it possible to use radius other than 2 or radius is always fixed (r=2)?
Thank you for your help.

I have another question regarding bit vector. I really appreciate it if you could guide me.
What is the meaning of every bit? Does it mean , for example, there is a specific subgraph or feature in the molecule?

Hi Mohammad,
Thanks for you interest! One bit represents the absence or presence of one (or more when bit collision occurs) atom pair shingle:

For each r from 1 to the set radius and for each atom pair jk, a "shingle" is generated as:
SMILES of of the circular substructure of radius r around atom j | distance between j and k |   SMILES of of the circular substructure of radius r around atom k

Then, each shingle is hashed to a number.

Finally, the set of unique numbers is transformed in a vector of the desired length (e.g. 1024 dimensions) using MinHashing (default) or modulo operation (is_folded = True). In the latter, each bit should represents the presence or absence of a shingle, however, due to the folding, bit collisions can occur, and one bit can represents more than one shingle.

Cheers,
Alice

Thank you Alice for your comprehensive explanations.
According to the paper, for atom pair (j,k), resulting list of Shingles is hashed using SHA-1 to a set of integers Si.
I guess the number of entries in Si is equal to the number of shingles.
I understood how to fold the set of unique numbers into a vector of the desired length when (is_folded = True).
I was wondering how to transform the set of unique numbers into a vector of the desired length when (is_folded = False). According to the explanations in Readme.md, if we have 2 shingles, the length of hmin(Si, x, y) will be two. So, the length of MinHashed vector depends on the number of shingles. Therefore, size of vector is not fixed.
Could you please let me know how to fix the size of MinHashed vector into the desired length?
Thank you very much, and sorry for the lengthy question.

The length of the MinHashed vector does not depends on the amount of shingles. Referring to the readme, the length of the MinHashed vector is the same as x. By default it is 1024, and it can be changed to 128, 512, or 2048 using the argument dimensions.

Thank you.
So, in the formula written in Readme, the vector Si contains all hashed shingles. Is my understanding correct?

Yes, Si contains all hashed unique shingles (duplicates are removed unless is_counted = True).


Suggestion: do not remove .git when building documentation

When building the documentation, docma will empty the directory specified with the -d option.
Right now, I am generating the documentation at the root of a git repository, so that when I want to update the documentation, I just have to commit/push the new files to my repository to update the website.
But since docma empties the whole directory, it also removes the .git directory so I can't commit/push anymore.
Suggestion: allow to keep hidden files/directories (ie: starting with a dot). Or maybe a new option could allow to specify a list of files/patterns to keep?

Docma v2.0.0 is released. Now, Docma will NOT empty the destination directory by default. CLI has a new --clean option if you want all contents to be removed before building into the dest. dir.


(BKR-1016) resolve stub forge from SUT

This commit modifies the implementation of the stub_forge_on and
with_forge_stubbed_on methods to resolve the forge_host from
the host on which the targeted forge_host will be accessed.
This is done to address the case where the SUT and the Beaker
runner have different resolution of the given forge_host name.

Refer to this link for build results (access rights to CI server needed):
http://jenkins-beaker.delivery.puppetlabs.net//job/qe_beaker_btc-intn/3306/

Refer to this link for build results (access rights to CI server needed):
http://jenkins-beaker.delivery.puppetlabs.net//job/qe_beaker_btc-intn/3321/


No holograms in Compositor

Hello all,
we tryied to run Spectator View pro with Sample Unity project. We followed all steps from manual, however after running project in the Unity editor, Compositor shows only feed from camera without holograms. There is not any error in console. In the game window the holograms are visible and they are also moving after change made in the second Hololens.
We used basic usb web camera with OpenCV 3.4.1.
We made calibration, built projects, copied DLLs, deploy SpectatorViewPoseProvider, set IPs in SharingToSVAdapter in Unity project, turned off firewall. Then if we run sample in Unity Editor and SpectatorViewPoseProvider in the first Hololens, no holograms are showed in the compositor (camera feed is visible). However, we can request spatial mapping and it is visible in the compositor window. After connecting the second Hololens with Sample project, the holograms are not still visible in the compositor.
We tryied it in Unity 2017.4.1 and 2017.4.4.
Does anyone any experience with this problem? Could this problem be related with camera and calibration? We do not have any camera to test with capture card. We just wanted to try the concept.
Thank you for advice.

Hi!
Can you measure when you run this project, the first Hololens is running "SpectatorViewPoseProvider"?
When i running, i will measure:
1.First Hololens running "SpectatorViewPoseProvider";
2.Another Hololens running "SpectatorViewSample";
But you can't get the hologram in UnityEditor, i think you can measure the first Hololens which application was running.
Hope can help.

When you running the Unity Editor in PC, you can check the Unity Game window, if you move the Reality Camera, i mean the Camera not in the unity, the game window show the object move, maybe you should move the camera in the other position, maybe you will see the hologram.

SpectatorViewPoseProvider is running on the first Hololens. In the Unity editor, the holograms are visible in the game window. According to the manual holograms should be visible in the compositor window even without the second Hololens. But they are not visible. Of course, we tried to move with camera, but nothing had change.
We are waiting for capture card and camera to try it with another hardware.

SpectatorViewPoseProvider is running on the first Hololens. In the Unity editor, the holograms are visible in the game window. According to the manual holograms should be visible in the compositor window even without the second Hololens. But they are not visible. Of course, we tried to move with camera, but nothing had change.
We are waiting for capture card and camera to try it with another hardware.

I'm so sorry, i didn't describe clearly. I made the test, i hope can help.
I measure the  SpectatorViewManager have a component "SpectatorViewManager", and its' argument "SpectatorViewHololensIP" is my first Hololens IP, because i use the wifi, so i write the first Hololens IP.
When i didn't open the first Hololens, i run the Unity, open the "Spectator View"->"Compositor" window,
i can get the camera capture. but when i move the camera, the Scene window. didn't have any changed.  And then, i open the first Hololens, and launch the "SpectatorViewPoseProvider", try to move the first Hololens, the Scene window show the object is moving, it's following my first Hololens.
If your game object following your move, you just need move the camera and Hololens, and measure the hologram is in your camera view.

We have tried it with capture card. We had to look for holograms properly to see them in the compositor. Thank you for help.


Create Database

1 hr

Didn't create the database but setup the backend (just the expressjs/node) with eslint. This should enable Atlas to be setup later after later discussion.


Move solution to VS 2017

Move whole solution to Visual Studio 2017 and new MsBuild csproj system.

@YTsalko Thanks for doing the conversion. Were you able to get gulp to work when packaging and deploying through VS 2017? I can see and run gulp tasks in Task Runner Explorer, but hitting F5 in VS fails with "'gulp' is not recognized as an internal or external command"

@vturecek unfortunately I didn't check this. I'm on vacation right now and will return to this next week.


Publishing messages in "bulk"

First of all, it's a great library - thanks for your efforts :)
I'd like to publish an array of messages with one operations (i.e. in bulk) and I couldn't see how to do it in the documentation. Does Rabbot support this?

@nikolayg - I plan to cut a release later this weekend, but have just finished adding a new feature for this. You can read about it here.


Is it possible to only visualize one layer?

by using the deconv_visualization() function, it generates deconv images for each layers by default. Is it possible to only generate images for one single layer? Thank you.

Hello @ranranking,
Yes. You can generate deconv images for only a specific layer by passing it in layers argument.
Ex. If you want to generate deconv images for fc8 layer then pass layers=['fc8'].
Thank You

@BhagyeshVikani Thank you very much for the help! It works!


Fix menus for macOS

Turns out some of the menus (like the help menu) need to be handled differently for macOS because they're system menus that are expected to be present and standard for most apps.
I used this examplefrom the electron docs as a template.
On macOS before:
https://github.com/Project-Fungus/fungus-gui/assets/34945306/d90d9edc-9874-479a-b161-fc04a080dcb9
On macOS after:
https://github.com/Project-Fungus/fungus-gui/assets/34945306/70f0e7bc-8f1e-44ec-8cd9-a896d6a5df4b

One thing I noticed in the videos is that the app name in the menu is just "Electron." According to this StackOverflow page, to fix that you need to set the productName in package.json and package the app (you can do that with npm run make). That would be nice, as long as it doesn't take more than a few minutes.

That was just for testing it works with the packaged app as well.


Build with travis CI on every pull request or commit.

This enhancement will automatic check and test the changes done. It will improve the testing capability of component as build can be tested at every pull request before commit.
To enable this feature , you will have to login in https://travis-ci.org/. using github account
and enable the travis feature for the tinyxml2 library.
It is simple and a pictorial guide is avaliable on https://travis-ci.org/.
You can even see the build logs of each build there.
(I attached a screenshot of this)
Many other github projects use this feature. Hope it will help tinyxml2 too.

Looks really cool but could you please squash those changes into single commit? I can explain how if needed.

yes please tell . Should I create a new pull request?

Yes, this would be better done with a new PR from a new branch. PRs from "master" are sure way to chaos. Totally not necessary to create a new request. Use "soft reset" to remove the last three changes from your local master branch - git reset HEAD~3. The changes will jointly get back into your working copy. Then create a new branch git checkout -b newBranchName and commit the changes into new branch in single commit, push that branch into your Github repo and create a new PR.

Accepted 2nd version. Closing this one.


Add "tabBarStyle" to documentation

Noticed that tabBarStyle is not mentioned in the readme, thought it might help newcomers if it was added.

Feel free to submit PR


docs: add ImageData example

This simple example adds pngjs for JS side PNG decoding. I'm now trying to work on implementing Image for ctx.drawImage, from my understanding to the roadmap, Image should be usable with decode that loads binary image files, so pngjs can help bootstraping Image class before we have decode shipped.
Since I can't install canvas both on WSL and macOS Big Sur (neither yarn and npm works, https://github.com/Automattic/node-canvas/issues/1728), the yarn.lock is out of sync with package.json now. Is it a must to keep it as dev dependency?

Is it a must to keep it as dev dependency?

Yes..
You can try yarn install --ignore-scripts to skip postinstall step while installing

Is it a must to keep it as dev dependency?

Yes..
You can try yarn install --ignore-scripts to skip postinstall step while installing


Update the web3 rpc

Use the newer HTTPProvider instead of the removed KeepAliveRPCProvider.
Remove unused imports.

I had problems using the tool with the latest web3 dependencies so I replaced the KeepAliveRPCProvide with an Http one.

I can confirm, this works as expected


Incorrect Advice to replace dependence from implementation to testImplementation

gradle=6.5
plugin=0.50
agp=3.6.2 but in this module, it isn't used
branch for reproducing: https://github.com/avito-tech/avito-android/tree/dependencies-analysis-0.50
Describe the bug

./gradlew -p subprojects buildHealth
Look at subprojects/gradle/upload-cd-build-result/build/reports/dependency-analysis/advice-all-variants-pretty.json
{    "dependency": {      "identifier": ":gradle:git",      "configurationName": "implementation"    },    "usedTransitiveDependencies": [],    "fromConfiguration": "implementation",    "toConfiguration": "testImplementation"  }
Do what advice says
make publish_to_maven_local from the project root dir
Get compile error
e: /Users/sergey/projects/avito-android-infra/subprojects/gradle/upload-cd-build-result/src/main/kotlin/com/avito/cd/UploadCdBuildResultTask.kt: (4, 18): Unresolved reference: git e: /Users/sergey/projects/avito-android-infra/subprojects/gradle/upload-cd-build-result/src/main/kotlin/com/avito/cd/UploadCdBuildResultTask.kt: (5, 18): Unresolved reference: git e: /Users/sergey/projects/avito-android-infra/subprojects/gradle/upload-cd-build-result/src/main/kotlin/com/avito/cd/UploadCdBuildResultTask.kt: (57, 32): Unresolved reference: gitState e: /Users/sergey/projects/avito-android-infra/subprojects/gradle/upload-cd-build-result/src/main/kotlin/com/avito/cd/UploadCdBuildResultTask.kt: (57, 65): Expression expected, but a package name found e: /Users/sergey/projects/avito-android-infra/subprojects/gradle/upload-cd-build-result/src/main/kotlin/com/avito/cd/UploadCdBuildResultTask.kt: (79, 19): Unresolved reference: GitState

Expected behavior
Advice is correct and module compiles and publishes to maven local

Thank you for the report and reproducer. I hope to resolve this soon.

Looks like there's a related issue:
  {
    "dependency": {
      "identifier": "com.google.code.gson:gson",
      "resolvedVersion": "2.8.5",
      "configurationName": "implementation"
    },
    "usedTransitiveDependencies": [],
    "fromConfiguration": "implementation",
    "toConfiguration": "testApi"
  }

testApi does not make any sense as a configuration.


Prefer named exports

This should fix interop propblem which cjs imports esm.

Is adding package.module support worth changing the import?

Yes. If we still want to achieve treeshakability then everything should be in esm. default exports suck. We should get rid of them.

I didn't write default exports for half year and to be honest I have now a bunch of problems less in my development process.

@TrySound There is almost nothing to tree shake in this component. I disagree.

@oliviertassinari I meant material-ui treeshakability. This package should be treeshakable to not be a dead code in user bundler.

Also with cjs bundle produces bigger bundle.

Sorry, I don't want to sacrifice usability. This diff looks wrong to me:
-import EventListener from 'react-event-listener';
+import { EventListener } from 'react-event-listener';

This look wrong to me. It just doesn't work in our case.
import EventListener, { withOptions } from 'react-event-listener';

default exports was added as an interop with cjs. And it doesn't work with cjs as we can see. Named export doesn't make this library unusable. It's just more unified convention. You don't even ask the user to choose the name.

The relevant issue on webpack side: https://github.com/webpack/webpack/issues/6584.


Peers

Hello
Where can I find a list of peers to sync from?
Thanks

Sorry, this coin is defunct and no miners are running the coin.

Ok thanks