Pluralizing the word 'gas'

Hi!
I've been working on an Ember Project (EmberCLI 1.13.8, Ember 2.0, Ember Data 2.0), and I've created a model 'gas'.
When using ember-data to query the store. this.store.query('gas') the url that's built is /api/gasinstead of what I expected, which would be /api/gases. I've created a custom adapter to deal with the situation, but I think this might be a problem with the ember-inflector.
I've created an Ember Twiddle to show the issue
Any thoughts? Thanks for the project!

The default set of inflection aim for 1:1 with those from rails. If it handles gas differently we should adjust, otherwise the inflector has a public API for adding/remove the default inflection rules.

Hey, thanks for the very quick reply.
I'm not a Rails guy, not sure how to check the Inflection for Rails to see where the problem is, sorry :(
Anyway, I've looked at the unit tests and it seems that you add "generic rules" for pluralization, and not for specific words.
test('ability to add additional pluralization rules', function(assert){
  assert.equal(inflector.pluralize('cow'), 'cow', 'no pluralization rule');

  inflector.plural(/$/, 's');

  assert.equal(inflector.pluralize('cow'), 'cows', 'pluralization rule was applied');
});

Would I have to do something like inflector.plural(/gas/,'es');?
Also, to make it available in the app, would I need an initializer? Something like this (copied from the ember guides)?
//
import Inflector from 'ember-inflector';

export function initialize(application) {
  Inflector.plural(/gas/,'es');
};

export default {
  name: 'shopping-cart',
  initialize: initialize
};

I'm about to get on 17h of flights. I will attempt to respond when I get settled back home.
Maybe @ofbriggs has some spare cycles.
It seems like we have some missing docs here...

Oh, that's a really long flight! Hope you can get some rest!
Thanks for the very quick reply. I'll wait for feedback then.
If my guess from the tests is correct I can try to setup a PR with some documentation, but if anyone on the team has some guidelines for me, I'm here to help.

I've tried to create the initializer like the following:
import Inflector from 'ember-inflector';

export function initialize(/* container, application */) {
  // Add a rule to the inflector to this the gas vs gases pluralization issue
  // https://github.com/stefanpenner/ember-inflector/issues/91
  Inflector.inflector.plural(/^gas$/,'gases');
  Inflector.inflector.singular(/^gas(es)$/,'$1');
}

export default {
  name: 'MyAPP',
  initialize: initialize
};

And it Kind of works, it's not making the request to /gases instead of /gas but when the data comes in, it read the type attribute as gases and it tries to singularize the name, it fails to gase.
I've managed to see that the Inflector instance that my initializer is adding the plural/singular rule is not the same when the time comes to singularize this name. (Because the Inflector instance on the initializer has 22 and 28 rules for plural and singular, and when reading the JSON data it only has 21 and 27).
I've tried changing my backend model to 'gas' but now the singularize function is reading my model name as 'ga' (instead of 'gas'). Will continue to search for a solution in the mean time.

@corrspt try Ember.Inflector.inflector instead of import Inflector from 'ember-inflector'
that should be the instance ember data uses.
From the docs:
http://guides.emberjs.com/v1.10.0/models/the-rest-adapter/#toc_pluralization-customization
var inflector = Ember.Inflector.inflector;

inflector.irregular('formula', 'formulae');
inflector.uncountable('advice');

@fsmanuel Thanks for pitching in. I'll report back as soon as possible with an update.

@fsmanuel Thanks for pitching in, I wasn't able to solve my problem with just that, but you led in a direction that seems to have solved the issue for now:
I've had to do the following:
import Ember from 'ember';

export function initialize(/* container, application */) {
  // Add a rule to the inflector to this the gas vs gases pluralization issue
  // https://github.com/stefanpenner/ember-inflector/issues/91
  // See the comments on the issue
  Ember.Inflector.inflector.plural(/^gas$/,'gases');
  Ember.Inflector.inflector.singular(/^gases$/,'gas');
}

export default {
  name: 'my-app',
  initialize: initialize
};

This makes my queries to the correct endpoints (/gases) but when ember-data reads the content it blows up like this:
TypeError: Cannot read property 'type' of null
    at ember$data$lib$system$store$$Service.extend._pushInternalModel (http://localhost:4200/assets/vendor.js:128937:29)
    at http://localhost:4200/assets/vendor.js:128918:27
    at Array.map (native)
    at ember$data$lib$system$store$$Service.extend.push (http://localhost:4200/assets/vendor.js:128917:42)
    at http://localhost:4200/assets/vendor.js:123833:27
    at Object.Backburner.run (http://localhost:4200/assets/vendor.js:10838:25)
    at ember$data$lib$system$store$$Service.extend._adapterRun (http://localhost:4200/assets/vendor.js:129152:33)
    at http://localhost:4200/assets/vendor.js:123830:15
    at tryCatch (http://localhost:4200/assets/vendor.js:60671:14)
    at invokeCallback (http://localhost:4200/assets/vendor.js:60686:15)

_pushInternalModel: function (data) {
    var _this4 = this;
    var modelName = data.type; // <--- Cannot read property 'type' of null is here

But if I add a custom serializer (to override the default which uses ember-inflector):
// pods/gas/serializer.js
import DS from 'ember-data';

export default DS.JSONAPISerializer.extend({
  modelNameFromPayloadKey(key) {
    if (key === 'gases'){
      return 'gas';
    }
    return this._super(...arguments);
  },

  serialize: function(snapshot, options) {
    var json = this._super.apply(this, arguments);
    json.data.type = 'gases';
    return json;
  }
});

It now appears to be working.

Seems like a hack or bug to me.
Will have a look at it later.

Thanks for helping!

I've forked @corrspt's fiddle to use Ember.Inflector.inflector.irregular(...) as @fsmanuel suggested and it looks like it is working as expected. If you open the console you see that there is a call to /gases.
http://ember-twiddle.com/f33d67be2d6317a7695a

Hi @ofbriggs thanks for pitching in!
Doing what @fsmanuel suggested did indeed got me past the the wrong endpoint query. But when the backend returned a JSONAPI response with type: 'gases' then ember-data would blow up at the _pushInternalModel method.
Because of that I had to override the serializer to not use the default inflector for 'gas' and use my exception. By doing this, I got things working as I expected. But still, the inflector instance that is being used by the default serializer is not affected by my initializer. I've debugged inside ember-data and saw that my new rules were not present in the inflector (when processing the json data from the backend that is).

Thanks for the extra information @corrspt :) That's quite odd that ED sometimes ignores the added irregular rules, I'll look into it why this is...

I might have made a mistake somewhere else which leads to this situation. But I'm not sure where to find. Thanks for helping out, if you need anything else, do ask!

@corrspt can you post the server payload?

Sure, this is the result of asking /get/gases
{
  "data": [
    {
      "type": "gases",
      "id": "2",
      "attributes": {
        "symbol": "Comboda",
        "composition": "Compo"
      },
      "relationships": {
        "code": {
          "links": {
            "self": "http://localhost:9000/api/gases/2/relationships/code",
            "related": "http://localhost:9000/api/gases/2/code"
          },
          "data": {
            "type": "industry-codes",
            "id": "17"
          }
        },
        "specification": {
          "links": {
            "self": "http://localhost:9000/api/gases/2/relationships/specification",
            "related": "http://localhost:9000/api/gases/2/specification"
          },
          "data": {
            "type": "gas-specifications",
            "id": "3"
          }
        }
      },
      "links": {
        "self": "http://localhost:9000/api/gases/2"
      }
    },
    {
      "type": "gases",
      "id": "1",
      "attributes": {
        "symbol": "Symbol",
        "composition": "Teste"
      },
      "relationships": {
        "code": {
          "links": {
            "self": "http://localhost:9000/api/gases/1/relationships/code",
            "related": "http://localhost:9000/api/gases/1/code"
          },
          "data": {
            "type": "industry-codes",
            "id": "8"
          }
        },
        "specification": {
          "links": {
            "self": "http://localhost:9000/api/gases/1/relationships/specification",
            "related": "http://localhost:9000/api/gases/1/specification"
          },
          "data": {
            "type": "gas-specifications",
            "id": "1"
          }
        }
      },
      "links": {
        "self": "http://localhost:9000/api/gases/1"
      }
    }
  ],
  "included": [
    {
      "type": "gas-specifications",
      "id": "1",
      "attributes": {
        "specification": "MATATA"
      },
      "relationships": {},
      "links": {
        "self": "http://localhost:9000/api/gas-specifications/1"
      }
    },
    {
      "type": "gas-specifications",
      "id": "3",
      "attributes": {
        "specification": "BODING"
      },
      "relationships": {},
      "links": {
        "self": "http://localhost:9000/api/gas-specifications/3"
      }
    },
    {
      "type": "industry-codes",
      "id": "17",
      "attributes": {
        "code": "A",
        "region": "A"
      },
      "relationships": {},
      "links": {
        "self": "http://localhost:9000/api/industry-codes/17"
      }
    },
    {
      "type": "industry-codes",
      "id": "8",
      "attributes": {
        "code": "ISO",
        "region": "ISO"
      },
      "relationships": {},
      "links": {
        "self": "http://localhost:9000/api/industry-codes/8"
      }
    }
  ],
  "meta": {
    "records": 2
  }
}

@corrspt can you give me access to the repo?

@corrspt lets move the conversation to slack


Hey hello!! Project turismEC!!

I watch a great marketplace on my country.
I live in Ecuador and the country have good opportunities on the turism market.
I have a idea to connect the people, but I need some help.
I have basic skills on development, and some money to start a project . Thanks.
Psdt: is a great business

hi, have some problem with using hora? or it's a ads?


bad inheritance: goog.iter.GroupByIterator < goog.iter.Iterator

This issue was imported from Closure Library's previous home at http://closure-library.googlecode.com
The link to the original issue is:
https://code.google.com/p/closure-library/issues/detail?id=638

This is obsolete. iter.js compiles fine.


[RFC][GIT PULL] Use GitHub Actions as CI (build only)

Hi Jens,
Following up about the CI in https://github.com/axboe/liburing/pull/425#issuecomment-914540396
I wired up the GitHub Actions CI. This will build the lib and tests. But it doesn't perform the make runtests due to kernel limitation reason.
There are 2 builds:

Build with GCC.
Build with Clang.

Both uses CFLAGS="-Werror" CPPFLAGS="-Werror" CXXFLAGS="-Werror" to make sure the build is totally clean from warnings.
Extra note:
There was very specific warning from clang that caused the build fail. It is fixed in commit 008ccce8858aa620315aba71e6d2b332dff5a39c ("build_with_clang.yml: fix clang build error -Wunused-command-line-argument").
The CI runs well on my fork repo, you can take a look here:
Build with Clang: https://github.com/ammarfaizi2/liburing/runs/3573032633
Build with GCC: https://github.com/ammarfaizi2/liburing/runs/3573032671
Please review. If you love it, please pull and remove the appveyor failing CI.
Adding Guillem to CC list..
Cc: @guillemj
----------------------------------------------------------------
The following changes since commit 8b087c441ed5f57e344b2ec1b26fcac42b42896a:

  test/runtests.sh: fix retrieving status (2021-09-10 10:17:31 -0600)

are available in the Git repository at:

  git://github.com/ammarfaizi2/liburing github-actions-ci

for you to fetch changes up to 008ccce8858aa620315aba71e6d2b332dff5a39c:

  build_with_clang.yml: fix clang build error -Wunused-command-line-argument (2021-09-11 09:45:55 +0700)

----------------------------------------------------------------
Ammar Faizi (3):
      .github/workflows: add build_with_gcc.yml
      .github/workflows: add build_with_clang.yml
      build_with_clang.yml: fix clang build error -Wunused-command-line-argument

 .github/workflows/build_with_clang.yml | 37 +++++++++++++++++++++++++++++++++++++
 .github/workflows/build_with_gcc.yml   | 32 ++++++++++++++++++++++++++++++++
 2 files changed, 69 insertions(+)
 create mode 100644 .github/workflows/build_with_clang.yml
 create mode 100644 .github/workflows/build_with_gcc.yml

Great, let's give this a whirl and see how it goes.

Following up about the CI in #425 (comment)
I wired up the GitHub Actions CI. This will build the lib and tests. But it doesn't perform the make runtests due to kernel limitation reason.

Ah sorry, had prepared something that night, but run out of time to test so didn't end up submitting it. That was https://github.com/guillemj/liburing/commit/de4f9b875607cb95babec29c9b4ba0bd549722ee that just pushed earlier today, which obviously failed everywhere. :)
I've improved those a bit now locally to make them pass. I guess I'll split the shellcheck one, and if there's interest I could prep another one to simplify the two builds into the matrix one I had there (but with a working version. :)
The runtest just timed out, not sure whether that was due to running as root. Will try as user, but still ignoring the exit code, but not sure that's worth it, though.

Extra note:
There was very specific warning from clang that caused the build fail. It is fixed in commit 008ccce ("build_with_clang.yml: fix clang build error -Wunused-command-line-argument").

I think, but need to check, the warning was valid. I've had locally a patch to cleanup the LDFLAGS usage, which I think would also fix that. Will get that cleaned up in any case and published for review.

I wouldn't both with the runtests for now, they are only useful if you control the kernel as well.

I've improved those a bit now locally to make them pass. I guess I'll split the shellcheck one, and if there's interest I could prep another one to simplify the two builds into the matrix one I had there (but with a working version. :)

Sounds good, please go ahead.

The runtest just timed out, not sure whether that was due to running as root. Will try as user, but still ignoring the exit code, but not sure that's worth it, though.

Not worth it, the test result depends on the exit code. There is no point running them if we ignore the exit code.

I think, but need to check, the warning was valid. I've had locally a patch to cleanup the LDFLAGS usage, which I think would also fix that. Will get that cleaned up in any case and published for review.

I will be looking forward for it.
Also there are make-debs.sh and debian directory on liburing repo. I don't really know what kind of build they do. Are they still maintained? Any plan to add that build to CI as well?

Also there are make-debs.sh and debian directory on liburing repo. I don't really know what kind of build they do. Are they still maintained? Any plan to add that build to CI as well?

Right, these are intended for Debian package builds. When I packaged this for Debian I started the packaging from scratch, which I maintain elsewhere (https://git.hadrons.org/cgit/debian/pkgs/liburing.git), as it seemed easier than to fix all the issues present here.
So, the packaging present here seems outdated and a bit buggy, but I've been hesitant to send a removal MR, as I'm not sure who might be using that, and whether that might inconvenience them? But perhaps now that liburing is present in a Debian stable release, and also as a backport in the oldstable release this could go now? I'm happy to prepare a MR for that. :)

Also there are make-debs.sh and debian directory on liburing repo. I don't really know what kind of build they do. Are they still maintained? Any plan to add that build to CI as well?

Right, these are intended for Debian package builds. When I packaged this for Debian I started the packaging from scratch, which I maintain elsewhere (https://git.hadrons.org/cgit/debian/pkgs/liburing.git), as it seemed easier than to fix all the issues present here.

Let's CC them first. If they agree or don't reply for reasonable time, then it is probably fine to start wiring up a pull request for that.

So, the packaging present here seems outdated and a bit buggy, but I've been hesitant to send a removal MR, as I'm not sure who might be using that, and whether that might inconvenience them? But perhaps now that liburing is present in a Debian stable release, and also as a backport in the oldstable release this could go now? I'm happy to prepare a MR for that. :)

Checking that directory, the average files on there are not touched for 2 years. Not sure these are still maintained or not. If they're not, let's make them alive again.
Adding Changcheng as the author...
Cc: @changchengx

Checking that directory, the average files on there are not touched for 2 years. Not sure these are still maintained or not. If they're not, let's make them alive again.

Just to clarify my position, if someone is using this from upstream and wants to keep them fresh, I don't mind greatly. This is just slightly inconvenient when preparing new releases for Debian as then I need to remove the debian/ directory to replace it with my own, but nothing major. I think I'm also unlikely to keep these up-to-date myself when preparing the updates in Debian, as that's just an additional inconvenience. :)

Let's check with @metze-samba as he worked on this originally.

Right, these are intended for Debian package builds. When I packaged this for Debian I started the packaging from scratch, which I maintain elsewhere (https://git.hadrons.org/cgit/debian/pkgs/liburing.git), as it seemed easier than to fix all the issues present here.

Sorry, it seems I botched the meaning when reordering the sentences, which could be misinterpreted. I meant to say that I started from scratch because that seemed easier, and I maintain all Debian packaging (even for things where I'm upstream) in separate git repos out of personal workflow/policy. (But as I've mentioned not an argument for or against from my side, though. :)

@ammarfaizi2 The debian package script supports to build debian package from soure code directly. Or, developers have to use therir own method to build debian package. It's like the rpm spec file here. Please help fix the error if you find the error in the script. All in all, the target is to run "make-deb.sh" to build out debian package directly.

@ammarfaizi2 The debian package script supports to build debian package from soure code directly. Or, developers have to use therir own method to build debian package. It's like the rpm spec file here. Please help fix the error if you find the error in the script. All in all, the target is to run "make-deb.sh" to build out debian package directly.

Tried to run make-debs.sh, got the following error. Not sure about the fix, @guillemj any idea?
     CC statx
     CXX sq-full-cpp
lto1: fatal error: bytecode stream in file ‘helpers.o’ generated with LTO version 9.3 instead of the expected 11.0
compilation terminated.
lto-wrapper: fatal error: g++ returned 1 exit status
compilation terminated.
/usr/bin/ld: error: lto-wrapper failed
collect2: error: ld returned 1 exit status
make[2]: *** [Makefile:166: sq-full-cpp] Error 1
make[2]: Leaving directory '/tmp/release/Ubuntu/liburing/liburing-2.1/test'
make[1]: *** [Makefile:13: all] Error 2
make[1]: Leaving directory '/tmp/release/Ubuntu/liburing/liburing-2.1'
make: *** [debian/rules:23: build-arch] Error 2
dpkg-buildpackage: error: debian/rules build subprocess returned exit status 2
debuild: fatal error at line 1182:
dpkg-buildpackage -us -uc -ui failed

Tried to run make-debs.sh, got the following error. Not sure about the fix, @guillemj any idea?
     CC statx
     CXX sq-full-cpp
lto1: fatal error: bytecode stream in file ‘helpers.o’ generated with LTO version 9.3 instead of the expected 11.0
compilation terminated.
lto-wrapper: fatal error: g++ returned 1 exit status
compilation terminated.
/usr/bin/ld: error: lto-wrapper failed
collect2: error: ld returned 1 exit status
make[2]: *** [Makefile:166: sq-full-cpp] Error 1
make[2]: Leaving directory '/tmp/release/Ubuntu/liburing/liburing-2.1/test'
make[1]: *** [Makefile:13: all] Error 2
make[1]: Leaving directory '/tmp/release/Ubuntu/liburing/liburing-2.1'
make: *** [debian/rules:23: build-arch] Error 2
dpkg-buildpackage: error: debian/rules build subprocess returned exit status 2
debuild: fatal error at line 1182:
dpkg-buildpackage -us -uc -ui failed

It seems I didn't properly configure my environment, will investigate it further.


Watercolor icon button

Create watercolor backed icon button.  @wrenaria will provide sample watercolor image(s).
Add to component page
Things to consider:

screen density
screen size

(Example see XD creators page).
TODO: link to design spec issue

Watercolor samples: https://drive.google.com/drive/folders/1BX7hRF-vNYLusiQBETJzoR5uoRjH1rKd?usp=sharing
Some of these are not final form/refined, but good enough to experiment with.

@spelkey-ucd currently there is no way to set the dams-watercolor-overlay height or width, only the icon size.  Let me know if you want to tackle here our open new issue.

@jrmerz shoot, ok. ill do it here.


Add qrcode to browser

For:

server url
content (only useful for small amounts of text, like URLs

May need separate tickets.
See https://github.com/clach04/linkding/tree/issues-220_240_qrcode_date_hover for implementation that does NOT leave network (current Google URL share server URL option leaks to a third party)

google (hit third party)
local svg/png generation using python lib (already have optional dependency for console QR code display)
in browser https://github.com/sissbruecker/linkding/commit/503c233f3271598ea496c4d9ef3b64f2cf099e73

See https://github.com/clach04/clipboard-confusion/tree/qrcode_js for start of code


Stomp planner

Stomp planner configuration added for raw3-1. Launch files too.
merge together with https://github.com/ipa320/cob_manipulation/pull/104

Which launch files are you referring to?

renamed/moved one (probably not by purpose): cob_bringup/components/legacy_schunk_powercube.launch → cob_hardware_config/cob4-5/config/legacy_schunk_powercube.launch

Also the official branch of ur arm does not use that plugin:
https://github.com/ros-industrial/universal_robot/blob/kinetic-devel/ur10_moveit_config/config/kinematics.yaml


Fix result value from queue worker

On queue.push method, success callback always give empty result, because result variable never assigned as output.
queue.push(
  {mount: 'some path', name: 'some queue'},
  {data},
  {
    success: function(result, jobData, job){
      //result always empty
      console.log(result);
    }
  }
)

Good catch! I wonder how this happened. I remember this having worked properly at some point. @mpv1989 I guess this is another part of Foxx that needs some test coverage.

This should be merged into devel/3.2 and backported to 3.1.


[Compile]:

Operating System
MacOS
Plugin
device_info_plus
Version
10.1.0
Flutter SDK
3.22.2
Compilation command
flutter clean && flutter build apk (I also tried to  build in android studio)
Dart Dependencies
name: fluttertestapp_ios_android_web
description: "This Flutter Test App is generated to ensure all flutter jobs are passing without error for ios, android and web platforms"
version: 1.0.0+1

environment:
  sdk: ">=3.4.3 <4.0.0"

dependencies:
  flutter:
    sdk: flutter

  cupertino_icons: ^1.0.6
  device_info_plus: ^10.1.0

dev_dependencies:
  flutter_test:
    sdk: flutter

  flutter_lints: ^3.0.0

  uses-material-design: true

Native dependencies
I'm using gradle 8.7, JDK 17, Android SDK 34

Compilation Error
/PATH/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java:19: error: cannot access DeviceInfoPlusPlugin
      flutterEngine.getPlugins().add(new dev.fluttercommunity.plus.device_info.DeviceInfoPlusPlugin());
                                                                              ^
 bad class file: PATH/build/device_info_plus/intermediates/compile_library_classes_jar/debug/bundleLibCompileToJarDebug/classes.jar(/dev/fluttercommunity/plus/device_info/DeviceInfoPlusPlugin.class)
    class file has wrong version 66.0, should be 61.0
    Please remove or make sure it appears in the correct subdirectory of the classpath.

Flutter Doctor
[✓] Flutter (Channel stable, 3.22.2, on macOS 14.5 23F79 darwin-arm64, locale en-US)
    • Flutter version 3.22.2 on channel stable at PATH/development/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 761747bfc5 (5 weeks ago), 2024-06-05 22:15:13 +0200
    • Engine revision edd8546116
    • Dart version 3.4.3
    • DevTools version 2.34.3

[✓] Android toolchain - develop for Android devices (Android SDK version 34.0.0)
    • Android SDK at PATH/Library/Android/sdk
    • Platform android-34, build-tools 34.0.0
    • Java binary at: /Applications/Android Studio.app/Contents/jbr/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 17.0.10+0-17.0.10b1087.21-11609105)
    • All Android licenses accepted.

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

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

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

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

[✓] Connected device (4 available)
    • sdk gphone64 arm64 (mobile)     • emulator-5554         • android-arm64  • Android 14 (API 34) (emulator)
    • macOS (desktop)                 • macos                 • darwin-arm64   • macOS 14.5 23F79 darwin-arm64
    • Mac Designed for iPad (desktop) • mac-designed-for-ipad • darwin         • macOS 14.5 23F79 darwin-arm64
    • Chrome (web)                    • chrome                • web-javascript • Google Chrome 126.0.6478.127

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

Checklist before submitting a bug

[X] I searched issues in this repository and couldn't find such bug/problem
[X] I Google'd a solution and I couldn't find it
[X] I searched on StackOverflow for a solution and I couldn't find it
[X] I read the README.md file of the plugin
[X] I'm using the latest version of the plugin
[X] All dependencies are up to date with flutter pub upgrade
[X] I did a flutter clean
[X] I tried running the example project

I just created a new project, added the dependency and built it. No issues.
I'd recommend comparing your android/app/build.gradle to one from a fresh flutter project and see what may be wrong. Or even delete the android folder and re-create it if you don't have any changes.

@miquelbeltran thanks for the help, issue ended up being the kotlin jvm version of the gradle.build for the plugin got changed to 22 somehow. I ran flutter pub cache repair and everything started working again.


Add support for Mac M1 computer

The current release doesn't seem to work on a M1 chip Mac, the reason seems to be that the netty libraries used are very old (4.1.63, released in April 2021) and don't support Mac computers with M1 chip. It will be very helpful that you upgrade the netty libs to 4.1.87, which seems to support both x86_64 and arm 64

@pangtg How do you figured it's 4.1.63?
I believe it's covered by this dependency, we can try to bump the version in the next release, if nothing unexpected pops up.

Hi,
Thanks for getting back to me.
First of all, The release didn't work on my M1 Mac computer with some error mesage complaining that some netty native libs are not working. I then checked the netty libs you have in the release are 4.1.63, which were released on April 1st, 2021, and the release does have native libs for MAC M1/ARM64 architecture.
I then looked more recently netty releases, at the time I reported this issue, the latest 4.x release is 4.1.87. As I looked more into this release, it looks to me the release does have both AMD64 and ARM64 support. For example, there is a netty-resolver-dns-native-macos-4.1.87.final.jar. With my experience, this kind of jar normally packs both ARM64 and AMD64 support init, and the jar will automatically detect the computer architecture and load the proper native lib it packed with.
Long story short, after I manually remove all netty 4.1.63 jars and slip in the 4.1.87 jars, and update the start up script, delta-sharing does start up normally and works.
However, as my company doesn't have the resource to QA the docker image I created, we use my image on M1 Mac computers but leave our production with what you provided in your release.
It looks to me that you would want to upgrade your libs with newer build in jars/libs, I believe a lot of Mac M1 users have the same issue I had
Again, thank you very much for getting back to me, hope we can see a new release soon that supports both AMD64 and ARM64 architectures


Writing CosMX segmentation+transcripts to Xenium explorer

Hi!
I've a feeling this may not be in the scope of what Sopa was designed to do, but my goal (for the moment) has been simply to take the CosMX outputs and visualise them as is in the Xenium explorer (i.e. with the segmentation calculated by AtoMX).
I've managed to generate a Xenium explorer file however there are several elements missing:

All images except for the histone channel seem to be missing (they are available to select on the explorer, but don't appear)
No transcripts available
No segmentation available

No segmentation I expected, and I'm unsure if it's possible to include the original segmentation. I'll show below my workings and a screenshot of the explorer. Thanks in advance for any assistance!
>>> from sopa.io import cosmx
>>> from sopa.io import write
>>>
>>> sdata = cosmx("Sam_reseg_30_10_2024_15_42_51_118", dataset_id="L1_SU500")
[WARNING] (sopa.io.reader.cosmx) Image stitching is currently experimental
/lustre/scratch/scratch/regmgbe/Projects/Sopa/sopa_env/lib/python3.9/site-packages/sopa/io/reader/cosmx.py:236: DtypeWarning: Columns (9) have mixed types. Specify dtype option on import or set low_memory=False.
  df = pd.read_csv(transcripts_file, compression="gzip")
>>> sdata
SpatialData object
├── Images
│     └── 'stitched_image': DataTree[cyx] (5, 92832, 95975), (5, 46416, 47987), (5, 23208, 23993), (5, 11604, 11996), (5, 5802, 5998)
└── Points
      └── 'points': DataFrame with shape: (<Delayed>, 12) (3D points)
with coordinate systems:
    ▸ 'global', with elements:
        stitched_image (Images), points (Points)
>>> write("./sopa_out", sdata)
[WARNING] (sopa._sdata) sdata object has no valid segmentation boundary. Consider running Sopa segmentation first.
[WARNING] (sopa.io.explorer.converter) The argument 'gene_column' has to be provided to save the transcripts
[INFO] (sopa.io.explorer.images) Writing multiscale image with procedure=semi-lazy (load in memory when possible)
Writing tiles:   0%|          | 0/42770 [00:00<?, ?it/s][INFO] (sopa.io.explorer.images)    > Image of shape (5, 92832, 95975)
Writing tiles: 100%|█████████▉| 42769/42770 [6:37:52<00:00,  1.79it/s]
Writing tiles:   0%|          | 0/10810 [00:00<?, ?it/s][INFO] (sopa.io.explorer.images)    > Image of shape (5, 46416, 47987)
Writing tiles: 100%|█████████▉| 10809/10810 [2:45:33<00:00,  1.09it/s]
Writing tiles:   0%|          | 0/2760 [00:00<?, ?it/s][INFO] (sopa.io.explorer.images)    > Image of shape (5, 23208, 23993)
Writing tiles: 100%|█████████▉| 2759/2760 [1:11:43<00:01,  1.56s/it]
[INFO] (sopa.io.explorer.images)    (Loading image of shape (5, 11604, 11996)) in memory
[INFO] (sopa.io.explorer.images)    > Image of shape (5, 11604, 11996)
[INFO] (sopa.io.explorer.images)    > Image of shape (5, 5802, 5998)
[INFO] (sopa.io.explorer.images)    > Image of shape (5, 2901, 2999)
[INFO] (sopa.io.explorer.converter) Saved files in the following directory: sopa_out
[INFO] (sopa.io.explorer.converter) You can open the experiment with 'open sopa_out/experiment.xenium'

Hi @GBeattie!
Regarding the cell segmentation
Actually, we could visualize any segmentation we want in theory, even the segmentation from AtomX. The blocker is that Sopa does not add the AtomX segmentation inside the SpatialData object, because we normally aim to run segmentation with Sopa.
If you find a way to add the segmentation to the SpatialData object (as shapes), it should be able to open it in the Xenium Explorer.
Regarding transcripts
In the current version of Sopa, you need to specify the name of the column containing the gene names (i.e., for CosMX, it should be gene_column="target"), else sopa.io.write doesn't know which are the gene names. Indeed, you can see the following warning:
[WARNING] (sopa.io.explorer.converter) The argument 'gene_column' has to be provided to save the transcripts

To save time, you can try only convert the transcripts, and keep the image / metadata you already have converted. That is, you can try:
# the mode specifies that only the transcripts will be converted
write("./sopa_out", sdata, gene_column="target", mode="+t")

Regarding the channel intensities
Maybe the original intensities are so low that they are very close to 0. Can you compute the maximum intensity per channel? This should be something like this:
sdata["stitched_image"]["scale0"]["image"].max(dim=["y", "x"]).compute()

@quentinblampey Thanks for the tips!
I'll look into the segmentation and see if I can come up with a way of reading in the AtoMX output (I'm not terribly hopeful I'll manage but we'll see!).
For the transcripts, of course yes missed that, I'll give that a try.
I've ran that line to extract the channel intensities, looks to me as if they are fairly reasonable across channels, but may be mistaken:
>>> sdata["stitched_image"]["scale0"]["image"].max(dim=["y", "x"]).compute()
<xarray.DataArray 'image' (c: 5)> Size: 10B
array([3750, 4040, 2726, 2730, 3969], dtype=uint16)
Coordinates:
  * c        (c) <U7 140B 'Histone' 'G' 'DAPI' 'rRNA' 'GFAP'

Okay, let me know!
For the channel intensity, it seems low compared to the max value. Indeed, the type is uint16, which means it goes up to 65536. For instance, 4000 is only 6% of the max value, meaning that you should see a few pixels of low intensity somewhere on the image.
You can try the following, to create a new image with clipped value to the 99th quantile:
from sopa.io.reader.utils import _clip_intensity_values

sdata["clipped_intensities"] = _clip_intensity_values(sdata["he_image"]["scale0"]["image"])

# now, we precise which image we want to convert via `image_key`
# and, again, I convert only the image
 write("./sopa_out", sdata, mode="+i", image_key="clipped_intensities")

Thanks! Will report back on transcripts and image rescaling soon!

@quentinblampey I can confirm the image rescaling and transcripts are now working in the Xenium browser (images are looking better than in the AtoMx explorer in fact), thanks! Hoping I get some time before the holidays to investigate including the segmentation as well.

Good to hear!
Regarding the segmentation, just out of curiosity, is there a reason why you prefer to use the AtomX segmentation rather than using Sopa?

As a facility provider I think it's best to keep our options open as segmentation choice will be down to the user, although I'd happily suggest to users to use Sopa, they may have reason to use AtoMx. So at the moment my main goal with Sopa is for it's Xenium explorer capabilities, as it's usability is much greater than AtoMx's viewer.

Okay thanks for your comment @GBeattie, makes sense!


cmd/cue: "let" comprehension clause doesn't appear to work

commit dd87908
This code gives a syntax error:
foo: {
	x: a: true
	y: a: false
	z: a: true
}

bar: {for x in foo let a=x.a {z: a}}

error:
expected '{', found 'let':
    ./n.cue:7:20

By my reading of the comprehensions specification, this should work OK.

I discovered this too and brought it up in the "language" Slack channel here.

I see that commit 724da18a66784fa6315ce343abf8fb1e23b2bf6e notes that let is only implemented at the top level, and not in comprehensions yet. That was only eleven days ago.

This issue has been migrated to https://github.com/cue-lang/cue/issues/284.
For more details about CUE's migration to a new home, please see https://github.com/cue-lang/cue/issues/1078.


mac m1 chip can not install android ndk

Describe the issue
Mac m1 chip can not install android ndk
Environment

OS: MacOS 12.2.1
NPM version 8.3.1
Node.js 16.4

Additional context
Please fix this problem, i already selled my older mac

Unfortunately, I don't have an M1 mac 😅 What happens when you install the components listed here? https://github.com/android/ndk/issues/1299#issuecomment-1026338583


Firefox Dev Edition blob: download fails

Describe the bug
This is on Firefox Developer Edition 76.0b8 aurora channel. So what happens is that when it finishes the processing and commences download it says the download of blob: failed. Retrying does nothing and keeps on failing. This was tested on watch.pokemon.tv
To Reproduce
Steps to reproduce the behavior:

Go to 'HLS downloader extension'
Download any video at watch.pokemon.tv
Wait for download to commence.
See error

Expected behavior
That it would download.
Desktop (please complete the following information):

OS: Win 8.1
Browser Firefox Dev Edition 76.0b8 aurora channel
Version 2.1.1

Additional context
It works on google chrome.

Thanks! @Phoenix-Starlight
Solved on https://github.com/puemos/hls-downloader/releases/tag/v3.2.1


Updating Rule: Switching to credphish

The rule FPs a considerable amount when using NLU for website evaluation. Switching to credphish should fix this.

The primary pickups on this seem to be Proofpoint urlprotect warnings. Are you seeing FP's beyond that? I think we should try negating urldefense.com from LA.  Thoughts?

agree with the negation. The FPs being addressed here were wide-ranging, didn't see any Proofpoint ones come up in my investigations.


Adds AirQuality groups

Dont merge yet!

Not working yet, cli works, but groups and clients are not there...maybe a race condition?

It seems that adding a nw group reuires to know the whole group structure, meaning the idea of having an init container to just add the required groups is not gonna be possible, unless we know all the groups in advanced....in that case I would rather add the groups to the keycloak chart, and that's it. https://github.com/adorsys/keycloak-config-cli/blob/main/src/test/resources/import-files/groups/01_update_realm_add_group.json#L6


linux-glibc-libssl1.1.0 downloaded, but not found. Photon looked in null but couldn't find it.

Hi Team,
I'm getting this error when using generated photon client

Invalid `photon.()` invocation in /home/.../server.js:15497:41

Photon binary for current platform linux-glibc-libssl1.1.0 could not be found.
Photon looked in null but couldn't find it.
Make sure to adjust the generator configuration in the schema.prisma file:
generator photon {
  provider      = "photonjs"
  binaryTargets = ["native", "linux-glibc-libssl1.1.0"]
}
Please run prisma2 generate for your changes to take effect.
Note, that by providing `native`, Photon automatically resolves `linux-glibc-libssl1.1.0`.
Read more about deploying Photon: https://github.com/prisma/prisma2/blob/master/docs/core/generators/photonjs.md

the code using photon client
 import { Photon } from '@generated/photon';

const photon = new Photon();
export async function get(req, res) {

	const respo = await photon.users.findMany();
	res.writeHead(200, {
		'Content-Type': 'application/json'
	});
	await photon.disconnect();
	res.end(JSON.stringify(respo));
}

schema:
//schema.prisma

generator photon {
  provider      = "photonjs"
  binaryTargets = ["native"]
}

datasource db {
  provider = "sqlite"
  url      = "file:dev.db"
  enabled  = true
}

model User {
  id             Int        @id
  createdAt      DateTime   @default(now())
  email          String?    @unique
  name           String
  active         Boolean    @default(true)
}

os:
Linux pcname 4.15.0-66-generic #75-Ubuntu SMP Tue Oct 1 05:24:09 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

Duplicate of https://github.com/prisma/prisma2/issues/836


Add missing docstrings in facility_port module

Resolves #312.
I'm unsure about what to state about get_template_context() and render_template() methods. Leaving in draft state, but open to feedback.

Pull Request Test Coverage Report for Build<PHONE_NUMBER>
Details

1 of 3 (33.33%)  changed or added relevant lines in 1 file are covered.
15 unchanged lines in 1 file lost coverage.
Overall coverage increased (+0.01%) to 18.309%

Changes Missing Coverage
Covered Lines
Changed/Added Lines
%

fabrictestbed_extensions/fablib/facility_port.py
1
3
33.33%

Files with Coverage Reduction
New Missed Lines
%

fabrictestbed_extensions/fablib/facility_port.py
15
40.22%

Totals

Change from base Build<PHONE_NUMBER>:
0.01%

Covered Lines:
1166

Relevant Lines:
4704

💛  - Coveralls

Pull Request Test Coverage Report for Build<PHONE_NUMBER>
Details

1 of 1 (100.0%)  changed or added relevant line in 1 file are covered.
8 unchanged lines in 1 file lost coverage.
Overall coverage increased (+0.01%) to 18.309%

Files with Coverage Reduction
New Missed Lines
%

fabrictestbed_extensions/fablib/facility_port.py
8
40.22%

Totals

Change from base Build<PHONE_NUMBER>:
0.01%

Covered Lines:
1166

Relevant Lines:
4704

💛  - Coveralls

Pull Request Test Coverage Report for Build<PHONE_NUMBER>
Details

1 of 1 (100.0%)  changed or added relevant line in 1 file are covered.
7 unchanged lines in 1 file lost coverage.
Overall coverage increased (+0.01%) to 18.309%

Files with Coverage Reduction
New Missed Lines
%

fabrictestbed_extensions/fablib/facility_port.py
7
40.22%

Totals

Change from base Build<PHONE_NUMBER>:
0.01%

Covered Lines:
1166

Relevant Lines:
4704

💛  - Coveralls

Pull Request Test Coverage Report for Build<PHONE_NUMBER>
Details

1 of 1 (100.0%)  changed or added relevant line in 1 file are covered.
7 unchanged lines in 1 file lost coverage.
Overall coverage increased (+0.01%) to 18.319%

Files with Coverage Reduction
New Missed Lines
%

fabrictestbed_extensions/fablib/facility_port.py
7
40.22%

Totals

Change from base Build<PHONE_NUMBER>:
0.01%

Covered Lines:
1167

Relevant Lines:
4705

💛  - Coveralls


Default pulling Image location is pointed to quay.io, what to do if I have to pull image from ECR.

I'm trying to deploy the kogito app (https://github.com/kiegroup/kogito-examples/tree/stable/process-knative-quickstart-quarkus) on knative using kogito-operator. I modified the image loacation to private ECR repository in "process-knative-quickstart-quarkus.yaml". But while deploying still its appending quay.io to the ecr image url because of which it is failing.
ex:
in yaml - 123456789.abc.ecr.us-east-1.amazonaws.com/process-knative-quickstart-quarkus
actual logs -  quay.io/123456789.abc.ecr.us-east-1.amazonaws.com/process-knative-quickstart-quarkus (this is inavalid as it appended quay.io)

Hey, do you mind to share how have you configured it?
This should allow you to configure custom images:
  image: domain: quay.io/kiegroup/kogito-travels:tag

I'm using the yaml files form this directory 'https://github.com/kiegroup/kogito-examples/tree/stable/process-knative-quickstart-quarkus/operator/kubernetes'. Just made one change in "process-knative-quickstart-quarkus.yaml" where I modified the image URL something like this
image: 123456789.abc.ecr.us-east-1.amazonaws.com/process-knative-quickstart-quarkus

Hi, @aajaykrishnareddy our operator right now thinks that the image would bring three parts:
<some_repo>/<some_namespace>/<some_image>
Example: quay.io/kiegroup/kogito-travels
```.
 Since the image that you used has only two parts (separator `/`) so the operator thinks that you forgot to give the `repo` so it appends the default `quay.io` as the repo.
 If possible can you try giving the image in the above pattern, :)

Hi @aajaykrishnareddy, were you able to test it as suggested By Kaitou in the comment above?

Hi @spolti, it didn't work for me. And as we got the quay repo setup, so was working with that.

@sutaakar @vaibhavjainwiz I believe we already solved this issue? Could you guys please take a look? If not, can you kindly open a new JIRA?

reported as https://issues.redhat.com/browse/KOGITO-5390


Add files via upload

Pace University

Pulling for access for Pace University

@ericmlantz pace.txt I am sorry, I have to close the request without merging, because you made a mistake in a request and did not specify any filepath. Please ensure that you are familiar with this repository rules located at the bottom of this page and make a new correct request. Thank you for your understanding!


Update curation guidelines for forks

Troubleshooting section - how to handle license info from original project when there's been a fork

Thanks Ariel, I think this captures the consensus expressed on our call well.

Thanks Ariel, I think this captures the consensus expressed on our call well.


Logs of Community meeting 05-12, 06-09

Tested on the following platforms:
| Edge | IE 11 | Chrome | Firefox | Opera | Vivaldi
-- | -- | -- | -- | -- | -- | --
Windows 7 | - | OK | OK | OK | OK | OK
Windows 10 | KO | OK | OK | OK | OK | OK
Ubuntu 18.04 | - | - | OK | OK | OK | OK
CentOS 7 | - | - | - | OK | OK | OK

Edge be ded.


How to start video automatically

Hi,
great job! But can you tell me, how I could start a video automatically without modifying your source?
Thanks

hi @kriztan
Well, you can call setShouldAutoplay(true) or call start() after setting video path. I think both will do the job ;)
Thanks

Hi @rtoshiro
setShouldAutoplay(true) does the trick.
Thanks a lot.


make 1.20 packer unable to find subnet by tag or id

What happened:
Using environment variables for make authentication, packer is able to connect to AWS through profile under assumed role and finds ami successfully, but is unable to find the subnet by subnet-id or tag.
  "source_ami_filter": {
    "filters": {
      "name": "{{user `source_ami_filter_name`}}",
      "architecture": "{{user `arch`}}",
      "root-device-type": "ebs",
      "state": "available",
      "virtualization-type": "hvm"
    },
  "subnet_filter": {
    "filters": {
       "tag:Name": "xxxx3-1c-ts"
    }
  },

ERROR:
==> amazon-ebs: Prevalidating any provided VPC information
==> amazon-ebs: Prevalidating AMI Name: amazon-eks-node-1.20-v20210519
amazon-ebs: Found Image ID: removed
==> amazon-ebs: No Subnets was found matching filters: {
==> amazon-ebs:   Filters: [{
==> amazon-ebs:       Name: "tag:Name",
==> amazon-ebs:       Values: xxxx3-1c-ts"]
==> amazon-ebs:     },{
==> amazon-ebs:       Name: "state",
==> amazon-ebs:       Values: ["available"]
==> amazon-ebs:     }]
==> amazon-ebs: }
Build 'amazon-ebs' errored after 3 seconds 304 milliseconds: No Subnets was found matching filters: {
Filters: [{
Name: "tag:Name",
Values: ["xxxx3-1c-ts"]
},{
Name: "state",
Values: ["available"]
}]
}
The aws cli command works  -
aws ec2 describe-subnets --region us-east-1 --profile rr --filters Name=tag:Name,Values="xxxx3-1c-ts"
SUBNETS False   us-east-1c      use1-az4        248     x.x.x.x/24   False   False   False   666666666    available       arn:aws:ec2:us-east-1:66666666:subnet/subnet-42      subnet-42        vpc-42
TAGS    aws:cloudformation:logical-id   TestSubnet
TAGS    Account DELETED
TAGS    Class   build
TAGS    aws:cloudformation:stack-name   networks
TAGS    Name    xxxx3-1c-ts
TAGS    Environment     ts
TAGS    Owner   Network
What you expected to happen:
I would expect the packer calls using the eks-worker-al2.json file to work for the ami, as well as the subnet and not fail on subnet.
How to reproduce it (as minimally and precisely as possible):
Master pull this morning.
json file updated with these parameters and filters.
Use a profile with an assumed role that works from aws cli v2+.
Anything else we need to know?:
Not that I can think of.
Environment:

AWS Region: us-east-1
Instance Type(s): Not getting far enough to matter, but using default.
EKS Platform version (use aws eks describe-cluster --name <name> --query cluster.platformVersion):  not making that far, but will be eks.1
Kubernetes version (use aws eks describe-cluster --name <name> --query cluster.version): 1.20
AMI Version: Attempting RHEL 8, but can't get past subnet.
Kernel (e.g. uname -a): 5.8.0-53-generic
Release information (run cat /etc/eks/release on a node):

Forgot to mention that I'm using packer 1.7.2 and GNU make 4.2.1

A few things on this:

Are you using the same IAM role/user for building the AMI as you are with the aws ec2 describe-subnets call?

As a sanity check, you can stick a get-caller-identity in one of the build scripts to confirm that it's the role you expect.

Does the role/user have sufficient permissions to call EC2?
The default region is us-west-2. Are you overriding that to us-east-1 when you're running make?

Yes, same role. There is no other one available, since I am building from a non-AWS environment (my local laptop).
Yes, I'm actually building with my full Cloud Admin role from my local Ubuntu 20.04 VM with the aws cli configured to operate as myself. The environment variables being used during make came from my personal keys and token in the RR profile.
Yes, i am setting region to us-east-1 and it finds/verifies the source AMI, then never is able to validate subnet by any means.

Why it obeys the environment upon initial call for the non-default local profile and then takes a turn, I am not sure. I suspect it is using another profile for the subsequent call after validating the source AMI, but I have not been able to prove it.

Have you tried passing in the subnet ID as an argument?

as an argument to the packer command in the Makefile? No, I have not.

Passing in the subnet_id as an argument had no effect. CloudTrail confirmed that the SESSION was being ignored. I switched providers to static, instead of environment. Usin the assume_role section to hard code the session and role_arn worked.
"assume_role": {
"role_arn"    :  "arn:aws:iam::ACCOUNT_ID:role/ROLE_NAME",
"session_name":  "SESSION_NAME",
"external_id" :  "EXTERNAL_ID"
}


Typing in line when element is folded bug

Folded

Typing

OS: Windows 10
VS Code: 1.13.1

This is being tracked in #28017
cc @rebornix


minor-fixes_examples

update link to latest restic release to install restic for restic user
correct typo in path to this app

What is the purpose of this change? What does it change?

Was the change discussed in an issue or in the forum before?

Checklist

[ ] I have read the Contribution Guidelines
[ ] I have added tests for all changes in this PR
[ ] I have added documentation for the changes (in the manual)
[ ] There's a new file in changelog/unreleased/ that describes the changes for our users (template here)
[ ] I have run gofmt on the code in all commits
[ ] All commit messages are formatted in the same style as the other commits in the repo
[ ] I'm done, this Pull Request is ready for review

Codecov Report

Merging #1927 into master will decrease coverage by 4.54%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master    #1927      +/-   ##
==========================================
- Coverage   50.62%   46.08%   -4.55%
==========================================
  Files         170      170
  Lines       13213    13213
==========================================
- Hits         6689     6089     -600
- Misses       5521     6176     +655
+ Partials     1003      948      -55

Impacted Files
Coverage Δ

internal/backend/b2/b2.go
0% <0%> (-78.54%)
:arrow_down:

internal/backend/swift/swift.go
0% <0%> (-78.45%)
:arrow_down:

internal/backend/gs/gs.go
0% <0%> (-73.61%)
:arrow_down:

internal/backend/azure/azure.go
0% <0%> (-69.46%)
:arrow_down:

internal/backend/swift/config.go
36.95% <0%> (-54.35%)
:arrow_down:

internal/archiver/blob_saver.go
95.06% <0%> (-2.47%)
:arrow_down:

internal/backend/s3/s3.go
60.15% <0%> (-2.26%)
:arrow_down:

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 dc39773...9de51d0. Read the comment docs.

My pleasure! Thank you for an amazing program. I discovered it recently and instantly became a huge fan.

Thanks for the praise :)


Update the dependencies and peerDependencies lists.

Drop a handful of dependencies that are no longer needed.
Remove any peerDependencies that can technically be a real dependency from the changes made during the 3.0.
Note: I didn't touch the ui or presentation packages yet.

@Mergifyio update


Add telemetry for v0.26.0

To keep the transparency with our users, here are the added telemetries to our product. We need to add them to the docs, @meilisearch/docs-team.

[ ] add telemetry for the CLI flags and options, see this spec changes.

⚠ User data are still anonymized and you can easily disable the analytics by passing the --no-analytics=true flag when launching MeiliSearch.
More about the MeiliSearch telemetry usage.

Description updated according to this comment https://github.com/meilisearch/specifications/pull/106#issuecomment-1016876691


Use default sbt-spark-package spIncludeMaven setting value

Remove spIncludeMaven from sparkPackagesSettings. It's false by
default, which means that Sparrow is not available on Maven Central.
Fixes publishing of Spark Package via spPublish.

+1

@gpoirier Thanks.


Not able to import fontawesome with standard loading configuration

Installed font awesome:
yarn add<EMAIL_ADDRESS>--exact
Simple Import in Index.jsx with:
import 'font-awesome/css/font-awesome.min.css';
Run npm start
Error:
`ERROR in ./node_modules/font-awesome/fonts/fontawesome-webfont.ttf?v=4.7.0
Module parse failed: Unexpected character ' ' (1:0)
You may need an appropriate loader to handle this file type.
(Source code omitted for this binary file)
@ ./node_modules/css-loader!./node_modules/font-awesome/css/font-awesome.min.css 7:615-666
@ ./node_modules/font-awesome/css/font-awesome.min.css
@ ./src/index.jsx
@ multi (webpack)-dev-server/client?http://<IP_ADDRESS>:8888 webpack/hot/dev-server core-js/fn/promise core-js/es6/object core-js/es6/array ./src/index.jsx
ERROR in ./node_modules/font-awesome/fonts/fontawesome-webfont.woff?v=4.7.0
Module parse failed: Unexpected character ' ' (1:4)
You may need an appropriate loader to handle this file type.
(Source code omitted for this binary file)
@ ./node_modules/css-loader!./node_modules/font-awesome/css/font-awesome.min.css 7:526-578
@ ./node_modules/font-awesome/css/font-awesome.min.css
@ ./src/index.jsx
@ multi (webpack)-dev-server/client?http://<IP_ADDRESS>:8888 webpack/hot/dev-server core-js/fn/promise core-js/es6/object core-js/es6/array ./src/index.jsx
ERROR in ./node_modules/font-awesome/fonts/fontawesome-webfont.woff2?v=4.7.0
Module parse failed: Unexpected character ' ' (1:4)
You may need an appropriate loader to handle this file type.
(Source code omitted for this binary file)
@ ./node_modules/css-loader!./node_modules/font-awesome/css/font-awesome.min.css 7:435-488
@ ./node_modules/font-awesome/css/font-awesome.min.css
@ ./src/index.jsx
@ multi (webpack)-dev-server/client?http://<IP_ADDRESS>:8888 webpack/hot/dev-server core-js/fn/promise core-js/es6/object core-js/es6/array ./src/index.jsx
ERROR in ./node_modules/font-awesome/fonts/fontawesome-webfont.eot?v=4.7.0
Module parse failed: Unexpected character '�' (1:1)
You may need an appropriate loader to handle this file type.
(Source code omitted for this binary file)
@ ./node_modules/css-loader!./node_modules/font-awesome/css/font-awesome.min.css 7:250-301
@ ./node_modules/font-awesome/css/font-awesome.min.css
@ ./src/index.jsx
@ multi (webpack)-dev-server/client?http://<IP_ADDRESS>:8888 webpack/hot/dev-server core-js/fn/promise core-js/es6/object core-js/es6/array ./src/index.jsx
ERROR in ./node_modules/font-awesome/fonts/fontawesome-webfont.eot
Module parse failed: Unexpected character '�' (1:1)
You may need an appropriate loader to handle this file type.
(Source code omitted for this binary file)
@ ./node_modules/css-loader!./node_modules/font-awesome/css/font-awesome.min.css 7:327-370
@ ./node_modules/font-awesome/css/font-awesome.min.css
@ ./src/index.jsx
@ multi (webpack)-dev-server/client?http://<IP_ADDRESS>:8888 webpack/hot/dev-server core-js/fn/promise core-js/es6/object core-js/es6/array ./src/index.jsx
ERROR in ./node_modules/font-awesome/fonts/fontawesome-webfont.svg?v=4.7.0
Module parse failed: Unexpected token (1:0)
You may need an appropriate loader to handle this file type.
|
|
|
@ ./node_modules/css-loader!./node_modules/font-awesome/css/font-awesome.min.css 7:707-758
@ ./node_modules/font-awesome/css/font-awesome.min.css
@ ./src/index.jsx
@ multi (webpack)-dev-server/client?http://<IP_ADDRESS>:8888 webpack/hot/dev-server core-js/fn/promise core-js/es6/object core-js/es6/array ./src/index.jsx
Child html-webpack-plugin for "index.html":
2 assets
4 modules`

The problem here is the config being ignored for node_modules
https://github.com/ReactJSResources/react-webpack-babel/blob/58a5fa90d993a84ddce8f9421af64fab878540d4/webpack.loaders.js#L53-L66

This might have been my fault cause I've recently submitted a PR for this 😆
I assumed all the fonts to be installed locally
This is a starter and for sure it can't satisfy everybody's needs, it should be modified for each project, but still probably most fonts are installed via npm so should we change this default? @alicoding what do you think?

@Leocardoso94 hehe no worries I guess we could just remove that exclusion or we could just document this somehow?

Being a starter, it should not 'assume' things in my view.

@alicoding you just mentioned someone else 😆
@emhamzahazeen without assumption the starter would not work for the majority of people, it would just not work for anybody IMO.
I've checked and the font loaders were excluding the node_packages even before my PR, but honestly I don't know what's the percentage of people loading font from npm vs locals, so fixing it for some people would break things for others, do you see my point @emhamzahazeen ?

Oopsy! So many people in my list and I just assumed the first one :P

@LeonardoGentile Maybe have two versions, one commented accordingly with instructions, and current one being the active one?

I tried using the react-audio-player but gave me the similar error for mp3 files.
Module parse failed: Unexpected token
You may need an appropriate loader to handle this file type.
|
|
|
How can I make the audio
library work?


🚀 [Feature] community selection page as 1st page of registration process

🚀 Feature

new page to select a community
shows a single selectable list with the names of all communities
the names of all communities and their registration URL has to be requested per service invocation at the community instanz ( see community creation process)
shows an Abbruch and Weiter Button
Weiter Button is enabled as soon a community is selected
optional: a given PID parameter check per request invocation against the GDT-Server, returns a valid PID - the given one or the default PID of the Förderkreis
pressing the Weiter button invokes the registration process on the selected community incuding the mandatory PID

I disagree completely with this feature - this is  centralized approach again. We should talk about this in a refinement @clauspeterhuebner @BerndHueckstaedt

Suggestion:


AngularJS asynchronous json messages browser header page title shows untranslated key and then takes time to display actual value

Subject of the issue
I'm using $translateProvider with default language 'en' although body content key values load fine, the browser header page title is not resolving quickly and shows untranslated key as title first and after few seconds the actual value of the key loads. Please let me know if there's a solution for this issue/bug.
Your environment
AngularJS 1.x
Chrome and Edge
Steps to reproduce
Load the json key value pairs data using the below code:
$translateProvider.useStaticFilesLoader(mention prefix and suffix details here);
$translateProvider.preferredLanguage('en');
Expected behaviour
The browser header title also should have shown the translated value similar to page body.
Actual behaviour
The browser page title shows the untranslated key page.home.title and then after few seconds shows the actual value "My home page".
page.home.title

I just found something useful. If you add translate-cloaked, key doesn't show up.
<title translate-cloaked translate="APP.TITLE"></title>

Thank you.


feat: XMTP

End-to-end encrypted messaging
AI is transforming consumer tech, with messaging becoming the main channel for interacting with agent services. This shift will scale message traffic astronomically, analogous to the web’s rise in the 2000s. Just as Cloudflare and https secured web traffic, messaging will need robust scalable end-to-end encrypted messages to protect sensitive information.
Risks
Risks of not using end-to-end encryption for agent interactions exposes the users to what is called as Man in the Middle Attacks.

Man in the Middle Attacks: Intercept requests in between to alter or manipulate data sent or received by the AI service

Phishing: Messages can be intercepted and manipulated.
Privacy: Sensitive information read by unwanted parties
Tampering: Content can be altered without detection.

:::tip
More concrete sensitive data could include credit card details, private keys and passwords which is not yet widely spread but as agents become smarter more use cases will include this type of sharing.
:::
XMTP
Eliza agents come with a ready to use client that uses XMTP providing end-to-end encrypted messaging for every agent intereaction, crucial for privacy, security, and compliance provided by the XMTP network.
Features:

E2EE: End to end encrypted MLS encryption
Multi-agent: Support multi-agent through group chats
Interoperable: Works across all platforms and frontends
Scalable: Decentralized, open-source
Anonymous: By default every identity is ephemeral and anonymous.

Installation
Install the xmtp package
bun install xmtp

Usage
This is how you can use the xmtp package to create an agent and handle messages.

WALLET_PRIVATE_KEY: This will encrypt all messages and make it available through its public address or ens domain.

import { XMTP } from "xmtp";

const xmtp = new XMTP(onMessage, {
    encryptionKey: WALLET_PRIVATE_KEY,
});
await xmtp.init();
const onMessage = async (message, user) => {
    console.log(`Decoded message: ${message.content.text} by ${user.address}`);
    // Your AI model response
    await xmtp.send({
        message: response,
        originalMessage: message,
    });
};

For more information visit XMTP website

We can continue the convo in here from #1285

This is the agent test file agent/paymentagent.eth
import { Character, Clients, ModelProviderName } from "@ai16z/eliza";
import { conciergePlugin } from "@ai16z/plugin-concierge";

export const paymentagent: Character = {
    name: "Payment Agent",
    username: "paymentagent",
    clients: [Clients.DIRECT, Clients.XMTP, Clients.TELEGRAM],
    modelProvider: ModelProviderName.OPENAI,
    plugins: [conciergePlugin],
    bio: [
        "24/7 crypto degen",
        "apes together strong 🦍",
        "probably nothing 👀",
    ],
    system: `You are a wise high-energy agent {{agentName}} that lives inside a web3 messaging app. You're always bullish, never sleeping, and ready to APE into the next big thing.`,
    lore: ["Survived multiple bear markets"],
    messageExamples: [],
    postExamples: [],
    topics: ["web3", "security", "agents"],
    style: {
        all: ["short answers", "be concise", "don't use hashtags"],
        chat: [],
        post: [],
    },
    adjectives: ["bullish", "based", "degen", "diamond-handed", "mooning"],
};

Hey @shakkernerd ! I just removed the plugin so we keep the scope clean for XMTP about this PR, wdyt?
I am going over the rest of the plugins and the DevSchool video and id like to spend more time into that to make them better and is not necessarily related to XMTP.


Move base css back out of React app

Short Description

Fixes problem with link colors in primary buttons.
Already merged to see if it fixes the problem on staging, but please have a look anyway!

Changes

Moves base.css back into the public folder.
Separates out "assorted" styles that aren't really global base styles. (base.css still contains loads of styles for which I'm not sure whether they're base styles, though…)
Fixes CSS load order to fix to observed behavior (components.css comes last).
Adds a duplicate base.css for Storybook - it needs to have any assets it loads under client/src or will fail to build and it also needs to be have any referenced assets there as well (symlinking works for CSS - see variables.css - but not for other assets).

Feedback

Having to duplicate the base styles / assets for storybook sucks, but I hope we can get rid of most of them in due course, so it doesn't become a maintenance burden.

LGTM!

Separates out "assorted" styles that aren't really global base styles. (base.css still contains loads of styles for which I'm not sure whether they're base styles, though…)

I agree. I hope that we will get that sorted one after the other when we refactor more and more into the react app


Add adaptive icon foreground and background designs

Relates to issue #868 . Add adaptive icon foreground and background files with short video of what it looks like implemented.

(Add .mpg to the video file in design so a media player can read it)
(The video should probably not be part of the PR and repo, but just link to an external host)

The new icon files look good to me. :)
I agree that the video should probably not be included directly in our repo though.

Thanks for the feedback! I deleted the video file. Where should I put the link? Here, on the issue, or somewhere else?

Please copy the SVG file itself into the Git repository's design folder, thanks!

Sure, I can add the regular SVG file that you linked to in the issue to design folder, just keep in mind that the adaptive logo designs are currently pngs because it was created before I had the link to the SVG.
Turned demo into gif here so it'll be easier see how it should look when implemented: https://imgur.com/a/F1gV0

Nice, thanks @thedeadline !


Persistent Motor Windings Overheat Message after Overload

I've come across a persistent error while using the Unitree Z1 arm. When the arm experiences an overload, it throws the
[ERROR] Motor 3 windings overheat message.
What's concerning is that the error message continues to appear even after the overload has been addressed and the z1_controller has been restarted.
Steps to reproduce:

Power on the Unitree Z1 arm.
Induce an overload on the arm (intentionally or unintentionally).
Remove the overload and notice the error message: [ERROR] Motor 3 windings overheat.
Restart the z1_controller.
Observe that the error message still persists.

Actual Behavior:
The error message [ERROR] Motor 3 windings overheat remains even after removing the overload and restarting the z1_controller. The only way to resolve this is by unplugging and re-plugging the arm to its power source.

I'm observing the same behavior with Motor 1 windings overheat without any overload


fix(deps): bump KMS with code change

Description
Update KMS all inclusive which removes key ring force delete because it is deprecated by the provider
Release required?

[x] No release
[ ] Patch release (x.x.X)
[ ] Minor release (x.X.x)
[ ] Major release (X.x.x)

Release notes content

Run the pipeline
If the CI pipeline doesn't run when you create the PR, the PR requires a user with GitHub collaborators access to run the pipeline.
Run the CI pipeline when the PR is ready for review and you expect tests to pass. Add a comment to the PR with the following text:
/run pipeline

Checklist for reviewers

[ ] If relevant, a test for the change is included or updated with this PR.
[ ] If relevant, documentation for the change is included or updated with this PR.

For mergers

Use a conventional commit message to set the release level. Follow the guidelines.
Include information that users need to know about the PR in the commit message. The commit message becomes part of the GitHub release notes.
Use the Squash and merge option.

The expectation is that this PR will need to skip upgrade test because of the key ring force delete state change. The changes are in example code, not the main module, so no release is required.

/run pipeline

/run pipeline

/run pipeline

TestRunCompleteUpgradeExample 2024-10-23T09:59:38Z command.go:185:   # module.key_protect_all_inclusive.module.kms_key_rings["icd-etcd"].ibm_kms_key_rings.key_ring will be updated in-place
TestRunCompleteUpgradeExample 2024-10-23T09:59:38Z command.go:185:   ~ resource "ibm_kms_key_rings" "key_ring" {
TestRunCompleteUpgradeExample 2024-10-23T09:59:38Z command.go:185:       ~ force_delete  = true -> false
TestRunCompleteUpgradeExample 2024-10-23T09:59:38Z command.go:185:         id            = "icd-etcd:keyRing:crn:v1:bluemix:public:kms:eu-de:a/abac0df06b644a9cabc6e44f55b3880e:d98cecc9-059a-4702-8efa-20c173aa3807::"
TestRunCompleteUpgradeExample 2024-10-23T09:59:38Z command.go:185:         # (3 unchanged attributes hidden)
TestRunCompleteUpgradeExample 2024-10-23T09:59:38Z command.go:185:     }

As expected, the value in the example is seen to change, which breaks update. This was the only error, so skipping upgrade.

/run pipeline

:tada: This PR is included in version 1.10.10 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


Where to find CarlaUE4.sh?

I build carla from source successfully, but I cannot find CarlaUE4.sh in my project folder. I do not find this file in the released 0.6.0 version either. Is something wrong with my build?

Hi,
"CarlaUE4.sh" is only present in the release version, inside the package CARLA_0.6.0.tar.gz.
If you build CARLA from source, you must open CARLA project with Unreal Editor. This can be done with
$ cd Unreal/CarlaUE4
$ ~/UnrealEngine_4.17/Engine/Binaries/Linux/UE4Editor "$PWD/CarlaUE4.uproject"

Adjust to match your Unreal Engine folder if necessary.

@nsubiron I've grabbed carla-0.8.2.tar.gz, and it doesn't contain CarlaUE4.sh either. On the other hand when I just open the project with ~/UnrealEngine_4.17/Engine/Binaries/Linux/UE4Editor "$PWD/CarlaUE4.uproject", it opens fine, but the Pyhton client(/client_example.py --autopilot) returns me just
ERROR: (localhost:2000) failed to connect: [Errno 111] Connection refused.
I can't find the port setting in the editor(first thing I wanted to check) -- could you advise plz?
Besides it would still good to have the shell script -- is it possible?
I believe I follow the guidelines in http://carla.readthedocs.io/en/latest/
TIA

@krydm The CARLA_0.8.2.tar.gz (compiled version) does have a "CarlaUE4.sh". If you grabbed the source code then it doesn't, in that case you need to compile dependencies and source code, open the Unreal project, enable networking in "Unreal/CarlaUE4/Config/CarlaSettings.ini", and press Play in the editor. But using the source code is only necessary if you want to modify and recompile CARLA, if you just want to run it you are just fine using the compiled version.

Hi,
I am trying to run carla on windows and I have built it using the automatic installation mentioned -
here
I couldn't find the CarlaUE4.sh file in any folder. I followed the instructions in this thread and am not understanding the last instruction given by @nsubiron. I did compile the dependencies and source code but could not find CarlaSettings.ini at the location mentioned.
Could you give more details as how to enable networking in the Carlasettings config file through the unreal editor, where the config file is located (Should we create our own config file like Example settings.ini?) and (just to clarify) what the sequence of commands to run carla in client server mode.
Also, in client_example.py it is mentioned we can use make_carla_client context manager, where does that fit in all this?

Hi @ishaan95.
First of all, if you just want to run carla on Windows I recommend you to go to release page and download the last Windows compiled version from there. Then you can run the .exe with the same parameters as CarlaUE4.sh (notice .sh files are for Linux), for example:
CarlaUE4.exe -carla-settings=Example.CarlaSettings.ini -windowed -resx=800 -resy=600

If you still want, not only use it, but modify the simulator with Unreal, please just copy carla\Docs\Example.CarlaSettings.ini to carla\Unreal\CarlaUE4\Config\CarlaSettings.ini and Unreal Engine will load the correct configuration from CarlaSettings.ini when you hit play on the editor.


[layout] Simple ❤  emoji aren't recognized as such anymore

Investigation: this isn't a problem with retina_layout::text::is_emoji()


chore: update metadata zip

And add npm command to bundle zip

I'm going to merge this in now so I can update the Salesforce repository


libreoffice container runs, reachable on internal network :9980, but traefik doesn't connect

While I specified

traefik.port=9980

in the labels for the libreoffice machine, traefik insists on directing traffic to
http://<IP_ADDRESS>:1025
How can it happen that traefik ignores the port definition???

See my develop branch for latest updates - I am stalling out at the LOOL build for some unknown reason when upgrading to Node 10, Buster, and new LOOL versions. At this time its a side project to get going as current version is suiting me fine, but if you were thinking of adding to the image this is the most up to date WIP

Studying this beast as well, I think I'll have a working compile in some days. Not only nodejs is an issue, also the compile flag --disable-werror for loleaflet.

looks good, nearly ready to commit a pull request (just draw back one).
will start to test tonight.

you'll be able to select arg for version build in docker-compose.yml
local font directory will be pulled into build


[composability] stable-fast + sd-turbo device mismatch

2023-12-07 17:35:10.128 [stderr   ]   File "/root/.cache/isolate/virtualenv/cb0c4d3222905a6bb1bceaa9f8e4dae878a144d056a139f4dbce875ede43363e/lib/python3.10/site-packages/torch/utils/_contextlib.py", line 115, in decorate_context
2023-12-07 17:35:10.128 [stderr   ]     return func(*args, **kwargs)
2023-12-07 17:35:10.128 [stderr   ]   File "/root/.cache/isolate/virtualenv/cb0c4d3222905a6bb1bceaa9f8e4dae878a144d056a139f4dbce875ede43363e/lib/python3.10/site-packages/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_img2img.py", line 926, in __call__
2023-12-07 17:35:10.128 [stderr   ]     image = self.vae.decode(latents / self.vae.config.scaling_factor, return_dict=False, generator=generator)[
2023-12-07 17:35:10.128 [stderr   ]   File "/root/.cache/isolate/virtualenv/cb0c4d3222905a6bb1bceaa9f8e4dae878a144d056a139f4dbce875ede43363e/lib/python3.10/site-packages/sfast/cuda/graphs.py", line 36, in dynamic_graphed_callable
2023-12-07 17:35:10.128 [stderr   ]     cached_callable = simple_make_graphed_callable(
2023-12-07 17:35:10.128 [stderr   ]   File "/root/.cache/isolate/virtualenv/cb0c4d3222905a6bb1bceaa9f8e4dae878a144d056a139f4dbce875ede43363e/lib/python3.10/site-packages/sfast/cuda/graphs.py", line 53, in simple_make_graphed_callable
2023-12-07 17:35:10.128 [stderr   ]     return make_graphed_callable(callable,
2023-12-07 17:35:10.128 [stderr   ]   File "/root/.cache/isolate/virtualenv/cb0c4d3222905a6bb1bceaa9f8e4dae878a144d056a139f4dbce875ede43363e/lib/python3.10/site-packages/sfast/cuda/graphs.py", line 98, in make_graphed_callable
2023-12-07 17:35:10.129 [stderr   ]     static_inputs = shadow_copy(static_inputs_)
2023-12-07 17:35:10.129 [stderr   ]   File "/root/.cache/isolate/virtualenv/cb0c4d3222905a6bb1bceaa9f8e4dae878a144d056a139f4dbce875ede43363e/lib/python3.10/site-packages/sfast/utils/copy.py", line 49, in shadow_copy
2023-12-07 17:35:10.129 [stderr   ]     return type(obj)(shadow_copy(x, detach=detach) for x in obj)
2023-12-07 17:35:10.129 [stderr   ]   File "/root/.cache/isolate/virtualenv/cb0c4d3222905a6bb1bceaa9f8e4dae878a144d056a139f4dbce875ede43363e/lib/python3.10/site-packages/sfast/utils/copy.py", line 49, in <genexpr>
2023-12-07 17:35:10.129 [stderr   ]     return type(obj)(shadow_copy(x, detach=detach) for x in obj)
2023-12-07 17:35:10.129 [stderr   ]   File "/root/.cache/isolate/virtualenv/cb0c4d3222905a6bb1bceaa9f8e4dae878a144d056a139f4dbce875ede43363e/lib/python3.10/site-packages/sfast/utils/copy.py", line 45, in shadow_copy
2023-12-07 17:35:10.129 [stderr   ]     return sfast._C._create_shadow_tensor(
2023-12-07 17:35:10.129 [stderr   ] RuntimeError: The specified pointer resides on host memory and is not registered with any CUDA device.

I think it's from the config.scaling_factor?

Ok, it seems to only occur when steps=1

I this is expected. Strength=0.6 with steps=1 is 0 steps


Fix ios build

Now it seems work ok. In fact the update did help https://github.com/selenide/selenide-appium/pull/170/commits/00d9cff49f13aec3c6f2182cbe74ec50df615a2d

This is fakin unbelievable!!!
٩(＾◡＾)۶


RFC: zk nullifiers in mina-signer + snarkyjs

Motivation
Nullifiers are a tool needed by privacy zkApps to keep track of actions that should be only allowed once per user, without revealing anything about the user. Examples:

ZCash uses nullifiers to ensure that a user can't spend a UTXO twice
Private voting zkApps use nullifiers to ensure a user can't vote twice

In concrete terms, a nullifier is a large number derived from a user's private key + some application data, which

is only recoverable by the user in question;
is hiding, i.e., can not be used to learn the user's private or public key.

To perform some action, like spending a UTXO, users need to check the nullifier inside a SNARK (in a way that proves its link to a certain public key) and "emit" the nullifier and public key as public output / event. The application then checks that it never saw the same nullifier before. If this is the case, the user is allowed to perform the action. The application then stores the nullifier in a list among all the other nullifiers ever spent. This ensures that, would the user attempt to  perform the action a second time, the application could reject it.
Problem statement: We don't currently support any nulilfier scheme where a user can derive their identity from their Mina wallet. This inhibits secure & practical implementations of anything using nullifiers, such as private voting, mixers etc.
Requirements for a nullifier implementation

Includes SnarkyJS code to verify nullifiers inside a SNARK
Does not require the user's private key as SNARK input
Creating nullifiers should be built into mina-signer, so that wallets can support it and users can use their normal wallet to interact with zkApps that rely on nullifiers

Proposal
I propose that we implement Aayush Gupta's "zk nullifier" scheme in mina-signer + snarkyjs.

Paper: https://eprint.iacr.org/2022/1255.pdf
Twitter discussion on implementing the only missing primitive: https://twitter.com/hdevalence/status/1630463319336435714

We add the following interfaces:
mina-signer

createNullifier(message: Field[], privateKey: PrivateKey): JsonNullifier

SnarkyJS
Nullifier which is a Struct with the following properties:

nullifier.publicKey which is used to check inclusion of the public key in a given set, e.g. Merkle tree
nullifier.message which attests that the nullifier is associated with the given message. The message is defined by the application and allows for application-specific checks such as "this is a valid nullifier for voting round no 3 of my voting zkApp"
nullifier.nullifier which is used as the key / Merkle leaf when we check that the nullifier isn't spent yet
extra data which won't be accessed by the developer directly but is necessary to verify the nullifier, see below

Nullifier comes with at least two essential methods:

Nullifier.fromJSON(n: JsonNullifier): Nullifier to read in the nullifier returned from mina-signer
nullifier.verify(): boolean which checks inside the SNARK that the nullifier belongs to the user + message

Other architectures considered, tradeoffs
A popular nullifier scheme that can easily be built with SnarkyJS (and has been built already) is Semaphore, where nullifiers are derived from a private key which also has to be input to the SNARK. In practice, this means the private key can't sit in the user wallet, since these wallets don't (and shouldn't) expose any private keys to websites. Thus, when advocating for this scheme we would shift a huge burden to zkApp developers to build their own scheme of managing user private keys from the browser.

I agree with the premise; it would be best to implement some nullified scheme that doesn’t require the private key as a private input and moreover that we should be providing some first class nullified built-in to our tool stack so other people don’t need to figure these things out.
Your proposed nullifier scheme seems like it could work! My question is: Are there other alternatives to consider before choosing this one?

Are there other alternatives to consider before choosing this one?

I'm not aware of others but also haven't looked for them!

So, the only thing wrong with just doing something like this in a circuit is that you need to use the secret_key directly?
// prove that the secret key is linked to the public key
generator.scale(secret_key).assert_equal(public_key);
// create the nullifier
let nullifier = poseidon(domain_separation, secret_key, public_key);

(I'm guessing this is what zcash-scheme nullifier looks like, although I haven't looked at these things in a long time.)
If that's the only downside is it worth fixing it now? My argument was that these things are simple enough that it might not be super useful to expose in a stdlib, but if we think it is maybe this is enough?
On the other hand, looking at the paper, you'd need an enclave to implement a number of operations (including a poseidon hash function) and I'm guessing this is not going to happen until a long time. So one idea could be to just offer the simple way (what zcash/tornadocash/etc. are doing) and mention that for schemes that want to take advantage of enclaves then they could implement that paper. wdyt?

On the other hand, looking at the paper, you'd need an enclave to implement a number of operations (including a poseidon hash function) and I'm guessing this is not going to happen until a long time.

The "enclave" in just refers to the software that has access tp the private key. In our case, this is the wallet. Wallets rely on mina-signer which already has Poseidon, EC arithmetic etc built in (needs it for signing transactions)

So, the only thing wrong with just doing something like this in a circuit is that you need to use the secret_key directly?

Yes!

If that's the only downside is it worth fixing it now? My argument was that these things are simple enough that it might not be super useful to expose in a stdlib, but if we think it is maybe this is enough?

I don't think this is enough, because an architecture that requires you to pass a private key into a smart contract (which is running on a website) is super awkward in practice and won't be adopted.
And I don't think the zk nullifier scheme is that hard to implement either -- it's basically just implementing that hashToCurve function plus stitching together a few already existing gadgets. But it's hard enough to be useful in the stdlib of snarkyjs, and super useful to include the nullifier generation method in mina-signer, because wallets won;t create this on their own and they rely on mina-signer as the lib to implement the hard stuff for them

Wallets rely on mina-signer which already has Poseidon, EC arithmetic etc built in (needs it for signing transactions)

Oh I see, so the ledger already has support for that you're saying : o? I'm wondering if we can use this scheme as a way to perform signing then (which might be cheaper than schnorr?)

Wallets rely on mina-signer which already has Poseidon, EC arithmetic etc built in (needs it for signing transactions)

Oh I see, so the ledger already has support for that you're saying : o? I'm wondering if we can use this scheme as a way to perform signing then (which might be cheaper than schnorr?)

Ah, no I was talking about browser wallets :D Like Auro wallet -- they will load mina-signer and they'll be able to create that nullifier when they have the users private key.
However, you bring up an excellent point that I didn't consider -- this won't support private keys which sit on a Ledger or similar. I think that's kind of OK for now; users would need to create a hot wallet for interactions where there nullifiers are needed, which presents a security trade-off but already enables a lot of useful applications where security requirements are not THAT huge, like private voting

However, you bring up an excellent point that I didn't consider -- this won't support private keys which sit on a Ledger or similar. I think that's OK for now; users would need to create a hot wallet for interactions where nullifiers are needed, which presents a security trade-off but already enables lots of useful applications where security requirements are not THAT high

I would actually argue that hardware wallets are the easier use case here, since they could simply delegate their rights to an auxiliary key (then it could also be input to the SNARK), so I wouldn't worry too much about hardware wallets at this stage

Indirectly Irresponsible Individual: @Trivo25

+1 on creating this too. Looks great. And +1 for making this part of SnarkyJS because, even if it's easy to implement, it's a fundamental piece to have and we can remove the need for people to think about it--to do research on properties it should have, etc. SnarkyJS aims to make things easy.
Sent a few small comments earlier via DM.

From the paper, my original impression was that the wallet needs to store the "secure randomness r" (see page 19) alongside the user's private key.
However, reading it again I understand that this value can actually be ephemeral. It is not used to produce the nullifier (which we potentially should be able to reproduce), but only the additional public output s which acts as a one-time hint for verifying correctness of the nullifier. Therefore, the value r can just be created from secure randomness in mina-signer during the createNullifier method, used to create the output, and not stored anywhere.
This resolves a remaining question we had @jasongitmail @bkase

Some research I have done on this:
I understand the RFC, by reading it for a day without sleep.
In this Circom test, hey verify the witnes with only public key and commitment/ without any secrets
test("a/b^c subcircuit", async () = {
const p = join(__dirname, ’a_div_b_pow_c_test.circom’)
const circuit = await wasm_tester(p)

// Verify that gPowS/pkPowC = gPowR outside the circuit, as a sanity check
const gPowS = Point.fromPrivateKey(s);
const pkPowC = testPublicKeyPoint.multiply(hexToBigInt(c))
expect(gPowS.add(pkPowC.negate()).equals(gPowR)).toBe(true);

// Verify that circuit calculates g^s / pk^c = g^r
const w = await circuit.calculateWitness({
a: pointToCircuitValue(gPowS),
b: pointToCircuitValue(testPublicKeyPoint),
c: scalarToCircuitValue(hexToBigInt(c)),
})
await circuit.checkConstraints(w)
await circuit.assertOut(w, {out: pointToCircuitValue(gPowR)});
});

https://github.com/zk-nullifier-sig/zk-nullifier-sig/blob/6052e45b8f7571b79247fb58eaef80d305dbcc82/circuits/test/vfy_nullifier.test.ts#L130
Which make it non-interactive, you only needs public key and the commitment which can be stored in Merkle Tree
But this Nullifier Scheme is a project it self
References:

https://docs.google.com/presentation/d/1mKtOI4XgKrWBEPpKFAYkRjxZsBomwhy6Cc2Ia87hAnY/edit#slide=id.g13e97fbcd2c_0_86
https://blog.aayushg.com/posts/nullifier
https://github.com/zk-nullifier-sig/zk-nullifier-sig
https://ethbogota-2022.netlify.app/
-https://github.com/piotr-roslaniec/ethbogota-2022

Wallets rely on mina-signer which already has Poseidon, EC arithmetic etc built in (needs it for signing transactions)

Oh I see, so the ledger already has support for that you're saying : o? I'm wondering if we can use this scheme as a way to perform signing then (which might be cheaper than schnorr?)

Ah, no I was talking about browser wallets :D Like Auro wallet -- they will load mina-signer and they'll be able to create that nullifier when they have the user's private key.
However, you bring up an excellent point that I didn't consider -- this won't support private keys which sit on a Ledger or similar. I think that's OK for now; users would need to create a hot wallet for interactions where nullifiers are needed, which presents a security trade-off but already enables lots of useful applications where security requirements are not THAT high

This scheme is specifically designed to be possible to run in 40kB of memory on a Ledger, and we are actively searching for devs down to take on this problem and make a PR to their wallet code!

Wallets rely on mina-signer which already has Poseidon, EC arithmetic etc built in (needs it for signing transactions)

Oh I see, so the ledger already has support for that you're saying : o? I'm wondering if we can use this scheme as a way to perform signing then (which might be cheaper than schnorr?)

Ah, no I was talking about browser wallets :D Like Auro wallet -- they will load mina-signer and they'll be able to create that nullifier when they have the user's private key.
However, you bring up an excellent point that I didn't consider -- this won't support private keys which sit on a Ledger or similar. I think that's OK for now; users would need to create a hot wallet for interactions where nullifiers are needed, which presents a security trade-off but already enables lots of useful applications where security requirements are not THAT high

This scheme is specifically designed to be possible to run in 40kB of memory on a Ledger, and we are actively searching for devs down to take on this problem and make a PR to their wallet code!

However, you bring up an excellent point that I didn't consider -- this won't support private keys which sit on a Ledger or similar. I think that's OK for now; users would need to create a hot wallet for interactions where nullifiers are needed, which presents a security trade-off but already enables lots of useful applications where security requirements are not THAT high

This scheme is specifically designed to be possible to run in 40kB of memory on a Ledger, and we are actively searching for devs down to take on this problem and make a PR to their wallet code!

Thanks @Divide-By-0 for the feedback! I'll close this as we got broad alignment on the RFC. Next step is to implement it :D


Implement methods to resize transposition table

Codecov Report

Merging #75 (ea101dd) into main (8901ee5) will decrease coverage by 0.12%.
The diff coverage is 72.72%.

@@            Coverage Diff             @@
##             main      #75      +/-   ##
==========================================
- Coverage   96.99%   96.86%   -0.13%
==========================================
  Files          59       59
  Lines        6150     6183      +33
==========================================
+ Hits         5965     5989      +24
- Misses        185      194       +9

Impacted Files
Coverage Δ

engine/src/engine.rs
92.13% <0.00%> (-2.12%)
:arrow_down:

search/src/negamax.rs
97.05% <0.00%> (-0.97%)
:arrow_down:

search/src/search.rs
79.16% <ø> (ø)

search/src/searcher.rs
87.50% <0.00%> (-12.50%)
:arrow_down:

movegen/src/transposition_table.rs
98.96% <100.00%> (+0.02%)
:arrow_up:

search/src/alpha_beta.rs
100.00% <100.00%> (ø)

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 8901ee5...ea101dd. Read the comment docs.


Several packages seem to be incompatible with the new react-native on platform Android with new-arch enabled

New Version
0.73.0-rc.1
Old Version
0.72.5
Build Target(s)
Android
Output of react-native info
System:
OS: Linux 6.1 Manjaro Linux
CPU: (16) x64 AMD Ryzen 7 5800H with Radeon Graphics
Memory: 5.39 GB / 13.51 GB
Shell:
version: 5.1.16
path: /bin/bash
Binaries:
Node:
version: 20.7.0
path: /tmp/yarn--1696745056791-0.4798124459808675/node
Yarn:
version: 1.22.19
path: /tmp/yarn--1696745056791-0.4798124459808675/yarn
npm:
version: 10.1.0
path: /usr/bin/npm
Watchman:
version: 2<IP_ADDRESS>
path: /usr/bin/watchman
SDKs:
Android SDK: Not Found
IDEs:
Android Studio: Not Found
Languages:
Java:
version: javac 21
path: /usr/bin/javac
Ruby: Not Found
npmPackages:
"@react-native-community/cli": Not Found
react:
installed: 18.2.0
wanted: 18.2.0
react-native:
installed: 0.73.0-rc.1
wanted: 0.73.0-rc.1
npmGlobalPackages:
"react-native": Not Found
Android:
hermesEnabled: true
newArchEnabled: true
iOS:
hermesEnabled: Not found
newArchEnabled: Not found
Issue and Reproduction Steps
Steps to reproduce:

Create a fresh<EMAIL_ADDRESS>project
Install react-native-webview
Edit android/gradle.properties and set newArchEnabled to true
Build application

Then, I can see the following error:
FAILURE: Build completed with 2 failures.

1: Task failed with an exception.
-----------
* Where:
Build file '/home/unidy/repos/proj/node_modules/react-native-webview/android/build.gradle' line: 54

* What went wrong:
A problem occurred evaluating project ':react-native-webview'.
> Failed to apply plugin 'com.facebook.react'.
   > The value for property 'languageVersion' is final and cannot be changed any further.

* 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.
==============================================================================

2: Task failed with an exception.
-----------
* What went wrong:
A problem occurred configuring project ':react-native-webview'.
> compileSdkVersion is not specified. Please add it to build.gradle

* 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.
==============================================================================

The same thing is happening to @react-native-async-storage/async-storage and some more packages.
Here is a real-world example that showcase this error:

https://github.com/thu-info-community/thu-info-app/actions/runs/6445847567/job/17500319634

Thanks!

@UNIDY2002 - Packages often require changes to support newer React Native versions. I don't think this is a bug.

I get it. But since it is a common problem, I am hoping to get a solution or guideline for how to make adaptions to these packages. Thank you in advance!

After further investigation, I tend to think that adaptions need to be made to RNGP in order for third-party libraries to build. I have little knowledge about RN under the hood, so be free to correct me if I am wrong.
First, I came across this doc from Gradle. While it seems to be specified for Gradle 8.3, its explanations instructed me to investigate further.
Then, I began to doubt whether it is related to multiple-updating of the property languageVersion.
As a common practice of supporting the new-arch, react-native-webview applies the plugin com.facebook.react when the new-arch is enabled. This may lead to RNGP being executed twice, which further results in setting the property languageVersion twice (just a hypothesis).
Then I simply commented out the following lines (of course, it will cause unexpected results):

https://github.com/facebook/react-native/blob/main/packages/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/JdkConfiguratorUtils.kt#L38-L39
https://github.com/facebook/react-native/blob/main/packages/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/JdkConfiguratorUtils.kt#L45
https://github.com/facebook/react-native/blob/main/packages/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/JdkConfiguratorUtils.kt#L48

And the issue "The value for property 'languageVersion' is final and cannot be changed any further" disappeared. And after properly setting kotlinOptions.jvmTarget and compileOptions.targetCompatibility, the project began to build successfully.
I understand that those changes stated above are definitely incorrect. I am sharing my findings to draw attention into this issue, and hoping to get a proper solution for this problem.
Thank you!

You may have a look at this patch: https://github.com/UNIDY2002/repro-rn-73-android-new-arch/blob/main/ReproducerApp/patches/%40react-native%2Bgradle-plugin%2B0.73.1.patch
Compare:

(Before patch) https://github.com/UNIDY2002/repro-rn-73-android-new-arch/actions/runs/6452787124/job/17515283126
(After patch) https://github.com/UNIDY2002/repro-rn-73-android-new-arch/actions/runs/6452817486/job/17515365242

Hi @UNIDY2002! Thank you so much for the thorough investigation. Would you mind opening a PR with the fix? So the commit, when we merge it, would properly associated to your user name. 😄
@cortinico will look at it as soon as he can!

Thanks for the PR @UNIDY2002
We're looking into this issue and we'll make sure it's fixed before 0.73 goes out

Thanks for sending this over @UNIDY2002 and also thank you very much for the thorough investigation. You're right that the function configureJavaToolChains was invoked too many times and we're going to include your fix https://github.com/facebook/react-native/pull/40757 inside the upcoming RC3 for 0.73.
Thanks for doing it!

I'm encountering this error after i bumped to 0.73.8. my android has two modules  app and instant-app. Is there any way to fix this issue?