class file for androidx.appcompat.app.AppCompatActivity not found

Describe the bug
Android app build fails upgrading to capacitor v3
To Reproduce
Following the upgrade steps here: https://capacitorjs.com/docs/v3/updating/3-0#update-android-variables
I installed the alpha release of this plugin:
package.json: "@capacitor-community/firebase-analytics": "^1.0.0-alpha.0",
I've tried
ext {
    minSdkVersion = 21
    compileSdkVersion = 30
    targetSdkVersion = 30
    androidxAppCompatVersion = '1.1.0'       // TRIED keeping 1.1.0 which was working before and tried the recommended 1.2.0. neither work
    androidxCoreVersion =  '1.3.2'
    androidxMaterialVersion =  '1.1.0-rc02'
    androidxBrowserVersion =  '1.3.0'
    androidxLocalbroadcastmanagerVersion =  '1.0.0'
    firebaseMessagingVersion = '21.0.1'
    playServicesLocationVersion =  '17.1.0'
    junitVersion =  '4.13.1'
    androidxJunitVersion =  '1.1.2'
    androidxEspressoCoreVersion =  '3.3.0'
    cordovaAndroidVersion =  '7.0.0'
}

Android studio output:
.../node_modules/@capacitor-community/firebase-analytics/android/src/main/java/com/getcapacitor/community/firebaseanalytics/FirebaseAnalytics.java:41: error: cannot access AppCompatActivity
        bridge.getActivity()
                          ^
  class file for androidx.appcompat.app.AppCompatActivity not found

(hence why I tried downgrading androidxAppCompatVersion
Expected behavior
Build to succeed
Screenshots
If applicable, add screenshots to help explain your problem.
Desktop (please complete the following information):
macOS running Android studio 4.1.2
Smartphone (please complete the following information):
Pixel 4
Additional context
Add any other context about the problem here.

I'm confused, if I look at the plugin src code in node_modules I see the changes to the 1.0.0-alpha.0 branch.
I run ionic capacitor build android which compiles my app's src code and then does all the npx cap sync stuff.
But in Android Studio, it looks like the plugin changes aren't showing up

I've tried cleaning Android Studio build, rebuilding, invalidating cache, restarting.
Any suggestions would be greatly appreciated, this seems bizarre.

Update. I removed the android platform and re-added it. In doing so, it looks like some gradle changes exist, in Android Studio all the gradle project files are now moved into one folder. I confirmed that the updated plugin code is actually in the right place and all the changes match the repo branch.
I updated the project MainActivity.java to use the new recommended syntax:
package com.revillager.iosapp;

import android.os.Bundle;

import com.getcapacitor.BridgeActivity;
import com.getcapacitor.Plugin;
import com.getcapacitor.community.firebaseanalytics.FirebaseAnalytics;

import java.util.ArrayList;

public class MainActivity extends BridgeActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        registerPlugin(FirebaseAnalytics.class);

        // Initializes the Bridge
//        this.init(
//                savedInstanceState,
//                new ArrayList<Class<? extends Plugin>>() {
//
//                    {
//                        // Additional plugins you've installed go here
//                        // Ex: add(TotallyAwesomePlugin.class);
//                        add(FirebaseAnalytics.class);
//                    }
//                }
//        );
    }
}

For reference this it the FirebaseAnalytics.java I have:
package com.getcapacitor.community.firebaseanalytics;

import android.Manifest;
import android.os.Bundle;
import com.getcapacitor.JSObject;
import com.getcapacitor.Plugin;
import com.getcapacitor.PluginCall;
import com.getcapacitor.PluginMethod;
import com.getcapacitor.annotation.CapacitorPlugin;
import com.getcapacitor.annotation.Permission;
import java.util.Iterator;
import org.json.JSONObject;

@CapacitorPlugin(
  name = "FirebaseAnalytics",
  permissions = {
    @Permission(
      strings = { Manifest.permission.ACCESS_NETWORK_STATE },
      alias = "network"
    ),
    @Permission(strings = { Manifest.permission.INTERNET }, alias = "internet"),
    @Permission(
      strings = { Manifest.permission.WAKE_LOCK },
      alias = "wakelock"
    ),
  }
)
public class FirebaseAnalytics extends Plugin {
  private com.google.firebase.analytics.FirebaseAnalytics mFirebaseAnalytics;

  private final String MISSING_REF_MSSG =
    "Firebase analytics is not initialized";

  @Override
  public void load() {
    super.load();

    // Obtain the FirebaseAnalytics instance.
    mFirebaseAnalytics =
      com.google.firebase.analytics.FirebaseAnalytics.getInstance(
        bridge.getActivity()
      );
  }

  /**
   * Sets the user ID property.
   * @param call - userId: unique identifier of the user to log
   */
  @PluginMethod
  public void setUserId(PluginCall call) {
    try {
      if (mFirebaseAnalytics == null) {
        call.reject(MISSING_REF_MSSG);
        return;
      }

      if (!call.hasOption("userId")) {
        call.reject("userId property is missing");
        return;
      }

      String userId = call.getString("userId");
      mFirebaseAnalytics.setUserId(userId);
    } catch (Exception ex) {
      call.reject(ex.getLocalizedMessage());
    }
  }

  /**
   * Sets a user property to a given value.
   * @param call - name: The name of the user property to set.
   *               value: The value of the user property.
   */
  @PluginMethod
  public void setUserProperty(PluginCall call) {
    try {
      if (mFirebaseAnalytics == null) {
        call.reject(MISSING_REF_MSSG);
        return;
      }

      if (!call.hasOption("name")) {
        call.reject("name property is missing");
        return;
      }

      if (!call.hasOption("value")) {
        call.reject("value property is missing");
        return;
      }

      String name = call.getString("name");
      String value = call.getString("value");

      mFirebaseAnalytics.setUserProperty(name, value);
      call.resolve();
    } catch (Exception ex) {
      call.reject(ex.getLocalizedMessage());
    }
  }

  /**
   * Retrieves the app instance id from the service.
   * @param call - instanceId: current instance if of the app
   */
  @PluginMethod
  public void getAppInstanceId(PluginCall call) {
    try {
      if (mFirebaseAnalytics == null) {
        call.reject(MISSING_REF_MSSG);
        return;
      }

      String instanceId = mFirebaseAnalytics.getAppInstanceId().toString();

      if (instanceId.isEmpty()) {
        call.reject("failed to obtain app instance id");
        return;
      }

      JSObject result = new JSObject();
      result.put("instanceId", instanceId);
      call.resolve(result);
    } catch (Exception ex) {
      call.reject(ex.getLocalizedMessage());
    }
  }

  /**
   * Sets the current screen name, which specifies the current visual context in your app.
   * @param call - screenName: the activity to which the screen name and class name apply.
   *               nameOverride: the name of the current screen. Set to null to clear the current screen name.
   */
  @PluginMethod
  public void setScreenName(final PluginCall call) {
    try {
      if (mFirebaseAnalytics == null) {
        call.reject(MISSING_REF_MSSG);
        return;
      }

      if (!call.hasOption("screenName")) {
        call.reject("screenName property is missing");
        return;
      }

      final String screenName = call.getString("screenName");
      final String nameOverride = call.getString("nameOverride", null);

      bridge
        .getActivity()
        .runOnUiThread(
          new Runnable() {

            @Override
            public void run() {
              mFirebaseAnalytics.setCurrentScreen(
                bridge.getActivity(),
                screenName,
                nameOverride
              );
              call.resolve();
            }
          }
        );
    } catch (Exception ex) {
      call.reject(ex.getLocalizedMessage());
    }
  }

  /**
   * Clears all analytics data for this app from the device and resets the app instance id.
   * @param call
   */
  @PluginMethod
  public void reset(PluginCall call) {
    try {
      if (mFirebaseAnalytics == null) {
        call.reject(MISSING_REF_MSSG);
        return;
      }

      mFirebaseAnalytics.resetAnalyticsData();
      call.resolve();
    } catch (Exception ex) {
      call.reject(ex.getLocalizedMessage());
    }
  }

  /**
   * Logs an app event.
   * @param call - name: unique name of the event
   *               params: the map of event parameters.
   */
  @PluginMethod
  public void logEvent(PluginCall call) {
    try {
      if (mFirebaseAnalytics == null) {
        call.reject(MISSING_REF_MSSG);
        return;
      }

      if (!call.hasOption("name")) {
        call.reject("name property is missing");
        return;
      }

      String name = call.getString("name");
      JSObject data = call.getData();
      JSONObject params = data.getJSObject("params");
      Bundle bundle = new Bundle();

      if (params != null) {
        Iterator<String> keys = params.keys();

        while (keys.hasNext()) {
          String key = keys.next();
          Object value = params.get(key);

          if (value instanceof String) {
            bundle.putString(key, (String) value);
          } else if (value instanceof Integer) {
            bundle.putInt(key, (Integer) value);
          } else if (value instanceof Double) {
            bundle.putDouble(key, (Double) value);
          } else if (value instanceof Long) {
            bundle.putLong(key, (Long) value);
          } else {
            call.reject("value for " + key + " is missing");
          }
        }
      }

      mFirebaseAnalytics.logEvent(name, bundle);
      call.resolve();
    } catch (Exception ex) {
      call.reject(ex.getLocalizedMessage());
    }
  }

  /**
   * Sets whether analytics collection is enabled for this app on this device.
   * @param call - enabled: boolean true/false to enable/disable logging
   */
  @PluginMethod
  public void setCollectionEnabled(PluginCall call) {
    if (mFirebaseAnalytics == null) {
      call.reject(MISSING_REF_MSSG);
      return;
    }

    boolean enabled = call.getBoolean("enabled", false);

    mFirebaseAnalytics.setAnalyticsCollectionEnabled(enabled);
    call.resolve();
  }

  /**
   * Deprecated: use setCollectionEnabled() instead
   * Enable analytics collection for this app on this device.
   * @param call - enabled: boolean true/false to enable/disable logging
   */
  @Deprecated
  @PluginMethod
  public void enable(PluginCall call) {
    if (mFirebaseAnalytics == null) {
      call.reject(MISSING_REF_MSSG);
      return;
    }

    mFirebaseAnalytics.setAnalyticsCollectionEnabled(true);
    call.resolve();
  }

  /**
   * Deprecated: use setCollectionEnabled() instead
   * Disable analytics collection for this app on this device.
   * @param call
   */
  @Deprecated
  @PluginMethod
  public void disable(PluginCall call) {
    if (mFirebaseAnalytics == null) {
      call.reject(MISSING_REF_MSSG);
      return;
    }

    mFirebaseAnalytics.setAnalyticsCollectionEnabled(false);
    call.resolve();
  }

  /**
   * Sets the duration of inactivity that terminates the current session.
   * @param call: options - duration: duration of inactivity
   */
  @PluginMethod
  public void setSessionTimeoutDuration(PluginCall call) {
    if (mFirebaseAnalytics == null) {
      call.reject(MISSING_REF_MSSG);
      return;
    }

    int duration = call.getInt("duration", 1800);

    mFirebaseAnalytics.setSessionTimeoutDuration(duration);
    call.resolve();
  }
}

After all those changes, cleaning and rebuilding the project a dozen+ times, this is what AndroidStudio is showing the error is:

Maybe you have forgotten to run npm install ?

Definitely ran npm i. All of the core capacitor plugins from ionic work,  it's just this one that cant access bridge. I looked through Bridge.java and BridgeActivity.java to see what's in there. I also looked into how ionic is implementing some of their plugins and the syntax looks very different from this one. there's something about .getActivity() that's missing. I could access bridge.getActivity() my guess is that the change from 1.1.0 to 1.2.0 of androidx.appcompat did something but that's beyond my pay grade.
I've gone back to capacitor 2.x for now. This is the only non-core plugin I'm using.
Anyone else have a working version? Can you post a demo and including the contents of android/variables.gradle

I am looking at the Android Variables, i think you are missing androidxActivityVersion = '1.2.0'
The recommended Variables are
minSdkVersion = 21
compileSdkVersion = 30
targetSdkVersion = 30
androidxActivityVersion = '1.2.0'
androidxAppCompatVersion = '1.2.0'
androidxCoordinatorLayoutVersion = '1.1.0'
androidxCoreVersion = '1.3.2'
androidxFragmentVersion = '1.3.0'
junitVersion = '4.13.1'
androidxJunitVersion = '1.1.2'
androidxEspressoCoreVersion = '3.3.0'
cordovaAndroidVersion = '7.0.0'

Hitting the same issue. My current work around is to add implementation "androidx.appcompat:appcompat:1.2.0" into the build.gradle dependencies block for the plugin (e.g. \node_modules@capacitor-community\firebase-analytics\android\build.gradle). This gets the build working for me and analytics is now working as it should but obviously isn't an ideal fix as I have to do it manually after every npm i.
Assuming this is something that needs adding to the plugin?

@adamiprinciples I can confirm that your fork works. So I hope this fix gets pulled into the main repository soon. Maybe alongside https://github.com/capacitor-community/firebase-analytics/issues/46?
Missing androidxActivityVersion = '1.2.0' definitely wasn't the issue.

Can everyone please give 1.0.0-alpha.2 a try to confirm the fix?

I tried it and it looks good.

I tried it and it looks good.

Great, I'm closing this out.


Add optimize-js-plugin to webpack.config.prod.js

This PR adds the optimize-js lib to the build process:

https://github.com/nolanlawson/optimize-js
https://github.com/vigneshshanmugam/optimize-js-plugin

Benchmarks from @nolanlawson:

Browser
Typical speed boost/regression using optimize-js

Chrome 55
20.63%

Edge 14
13.52%

Firefox 50
8.26%

Safari 10
-1.04%

Does(n't) Webpack 2 do it by default? Just asking.

I honestly have no idea. This comment makes me think that it doesn't do it.

Need to wait for this until https://github.com/vigneshshanmugam/optimize-js-plugin/issues/7 is fixed since we're moving to Webpack 2 soon.

As the author of optimize-js, I would not recommend it as a general-purpose tool for something like create-react-app.
Because optimize-js targets the existing behavior of JS engines using heuristics (one might say "hacks" even :wink:) and because this behavior varies depending on the shape of the JS bundle, it's essential for users to run their own measurements (in multiple browsers, ideally!) and determine if optimize-js is really an improvement. For some bundles it may actually make things slower, and for Safari/JSCore most of my tests show it's basically a wash.
In other words, "ask your doctor if optimize-js is right for you." 😃

Fair enough, thanks!


remove duplicate settings button in RAI dashboard for images

Description
Remove duplicate settings button in RAI dashboard for images.
The settings button is a duplicate of the settings button at the top of the dashboard.
Before changes:

After changes:

Checklist

[x] I have added screenshots above for all UI changes.
[ ] I have added e2e tests for all UI changes.
[x] Documentation was updated if it was needed.

Codecov Report

Merging #1747 (6b785c8) into main (7ba1f3e) will decrease coverage by 13.01%.
The diff coverage is n/a.

@@             Coverage Diff             @@
##             main    #1747       +/-   ##
===========================================
- Coverage   88.30%   75.29%   -13.02%
===========================================
  Files          90        9       -81
  Lines        5252      255     -4997
===========================================
- Hits         4638      192     -4446
+ Misses        614       63      -551

Flag
Coverage Δ

unittests
75.29% <ø> (-13.02%)
:arrow_down:

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files
Coverage Δ

raiutils/raiutils/common/retries.py

...ranalysis/erroranalysis/analyzer/error_analyzer.py

raiutils/raiutils/dataset/__init__.py

...sibleai/responsibleai/rai_insights/rai_insights.py

...tabalanceanalysis/distribution_balance_measures.py

...leai/responsibleai/modelanalysis/model_analysis.py

raiwidgets/raiwidgets/error_handling.py

raiwidgets/raiwidgets/fairness_dashboard.py

...is/erroranalysis/_internal/surrogate_error_tree.py

.../databalanceanalysis/aggregate_balance_measures.py

... and 71 more

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.


Feature Request : Reverse Geocode : LocalStorage/Cache

Dear Anton and All,
What is your opinion on a feature, where (traccar locally stores) the reverse geo-code results, (so that everytime a gps location is recieved) it reaches out to the geocode provider only if traccar itself does not have records for it.
?

Reverse geocoding cache is already available. You can control the size using geocoder.cacheSize configuration parameter. It's in-memory cache, so it will be cleared when you restart service.

Perfect,  I never knew this existed :)
However do you feel, it would make sense to implement a permanent cache, than an in-memory cache.
?

There is no plan for that at the moment. I don't want to over-complicate server side because of this. Mostly because I'm not so sure it's a good idea to do caching of reverse geocoding requests. I want to know some statistics to see if it actually works.

Hello, @nefertiti007
In addition
You can install separate cache for requests, for example https://github.com/tobias74/reverse-geocoder-cache
or even install your own nominatim https://github.com/twain47/Nominatim
And there are some more standalone solutions.


cannot build windows

I extracted the master and changed directory to /Build after getting there i runned following commands
cmake -G "MinGW Makefiles" ..
and then
mingw32-make
Output:
Scanning dependencies of target Box2D
[  2%] Building CXX object Box2D/CMakeFiles/Box2D.dir/Dynamics/Joints/b2DistanceJoint.cpp.obj
[  4%] Building CXX object Box2D/CMakeFiles/Box2D.dir/Dynamics/Joints/b2FrictionJoint.cpp.obj
[  6%] Building CXX object Box2D/CMakeFiles/Box2D.dir/Dynamics/Joints/b2GearJoint.cpp.obj
[  8%] Building CXX object Box2D/CMakeFiles/Box2D.dir/Dynamics/Joints/b2Joint.cpp.obj
[ 10%] Building CXX object Box2D/CMakeFiles/Box2D.dir/Dynamics/Joints/b2MotorJoint.cpp.obj
[ 13%] Building CXX object Box2D/CMakeFiles/Box2D.dir/Dynamics/Joints/b2MouseJoint.cpp.obj
[ 15%] Building CXX object Box2D/CMakeFiles/Box2D.dir/Dynamics/Joints/b2PrismaticJoint.cpp.obj
[ 17%] Building CXX object Box2D/CMakeFiles/Box2D.dir/Dynamics/Joints/b2PulleyJoint.cpp.obj
[ 19%] Building CXX object Box2D/CMakeFiles/Box2D.dir/Dynamics/Joints/b2RevoluteJoint.cpp.obj
[ 21%] Building CXX object Box2D/CMakeFiles/Box2D.dir/Dynamics/Joints/b2RopeJoint.cpp.obj
[ 23%] Building CXX object Box2D/CMakeFiles/Box2D.dir/Dynamics/Joints/b2WeldJoint.cpp.obj
[ 26%] Building CXX object Box2D/CMakeFiles/Box2D.dir/Dynamics/Joints/b2WheelJoint.cpp.obj
[ 28%] Building CXX object Box2D/CMakeFiles/Box2D.dir/Dynamics/Contacts/b2CircleContact.cpp.obj
[ 30%] Building CXX object Box2D/CMakeFiles/Box2D.dir/Dynamics/Contacts/b2Contact.cpp.obj
[ 32%] Building CXX object Box2D/CMakeFiles/Box2D.dir/Dynamics/Contacts/b2ContactSolver.cpp.obj
[ 34%] Building CXX object Box2D/CMakeFiles/Box2D.dir/Dynamics/Contacts/b2PolygonAndCircleContact.cpp.obj
[ 36%] Building CXX object Box2D/CMakeFiles/Box2D.dir/Dynamics/Contacts/b2EdgeAndCircleContact.cpp.obj
[ 39%] Building CXX object Box2D/CMakeFiles/Box2D.dir/Dynamics/Contacts/b2EdgeAndPolygonContact.cpp.obj
[ 41%] Building CXX object Box2D/CMakeFiles/Box2D.dir/Dynamics/Contacts/b2ChainAndCircleContact.cpp.obj
[ 43%] Building CXX object Box2D/CMakeFiles/Box2D.dir/Dynamics/Contacts/b2ChainAndPolygonContact.cpp.obj
[ 45%] Building CXX object Box2D/CMakeFiles/Box2D.dir/Dynamics/Contacts/b2PolygonContact.cpp.obj
[ 47%] Building CXX object Box2D/CMakeFiles/Box2D.dir/Dynamics/b2Body.cpp.obj
D:\C++\Lib\Box2D\Box2D\Box2D\Dynamics\b2Body.cpp: In member function 'void b2Body::DestroyFixture(b2Fixture*)':
D:\C++\Lib\Box2D\Box2D\Box2D\Dynamics\b2Body.cpp:216:17: error: 'nullptr' was not declared in this scope
if (fixture == nullptr)
^
Box2D\CMakeFiles\Box2D.dir\build.make:558: recipe for target 'Box2D/CMakeFiles/Box2D.dir/Dynamics/b2Body.cpp.obj' failed
mingw32-make[2]: *** [Box2D/CMakeFiles/Box2D.dir/Dynamics/b2Body.cpp.obj] Error 1
CMakeFiles\Makefile2:74: recipe for target 'Box2D/CMakeFiles/Box2D.dir/all' failed
mingw32-make[1]: *** [Box2D/CMakeFiles/Box2D.dir/all] Error 2
Makefile:74: recipe for target 'all' failed
mingw32-make: *** [all] Error 2

#412 fix this for me!


Add Cyber security university

https://github.com/brootware/Cyber-Security-University
Cyber Security University is A curated list of awesome and free educational resources that focuses on learn by doing.
By submitting this pull request I confirm I've read and complied with the below requirements 🖖
Please read it multiple times. I spent a lot of time on these guidelines and most people miss a lot.
Requirements for your pull request

Don't waste my time. Do a good job, adhere to all the guidelines, and be responsive.
You have to review at least 2 other open pull requests.
Try to prioritize unreviewed PRs, but you can also add more comments to reviewed PRs. Go through the below list when reviewing. This requirement is meant to help make the Awesome project self-sustaining. Comment here which PRs you reviewed. You're expected to put a good effort into this and to be thorough. Look at previous PR reviews for inspiration. Just commenting “looks good” or simply marking the pull request as approved does not count! You have to actually point out mistakes or improvement suggestions.
You have read and understood the instructions for creating a list.
This pull request has a title in the format Add Name of List.

✅ Add Swift
✅ Add Software Architecture
❌ Update readme.md
❌ Add Awesome Swift
❌ Add swift
❌ add Swift
❌ Adding Swift
❌ Added Swift

Your entry here should include a short description about the project/theme of the list. It should not describe the list itself. The first character should be uppercase and the description should end in a dot. It should be an objective description and not a tagline or marketing blurb.

✅ - [iOS](…) - Mobile operating system for Apple phones and tablets.
✅ - [Framer](…) - Prototyping interactive UI designs.
❌ - [iOS](…) - Resources and tools for iOS development.
❌ - [Framer](…)
❌ - [Framer](…) - prototyping interactive UI designs

Your entry should be added at the bottom of the appropriate category.
The title of your entry should be title-cased and the URL to your list should end in #readme.

Example: - [Software Architecture](https://github.com/simskij/awesome-software-architecture#readme) - The discipline of designing and building software.

The suggested Awesome list complies with the below requirements.

Requirements for your Awesome list

Has been around for at least 30 days.That means 30 days from either the first real commit or when it was open-sourced. Whatever is most recent.
Don't open a Draft / WIP pull request while you work on the guidelines. A pull request should be 100% ready and should adhere to all the guidelines when you open it. Instead use #2242 for incubation visibility.
Run awesome-lint on your list and fix the reported issues. If there are false-positives or things that cannot/shouldn't be fixed, please report it.
The default branch should be named main, not master.
Includes a succinct description of the project/theme at the top of the readme. (Example)

✅ Mobile operating system for Apple phones and tablets.
✅ Prototyping interactive UI designs.
❌ Resources and tools for iOS development.
❌ Awesome Framer packages and tools.

It's the result of hard work and the best I could possibly produce.
If you have not put in considerable effort into your list, your pull request will be immediately closed.
The repo name of your list should be in lowercase slug format: awesome-name-of-list.

✅ awesome-swift
✅ awesome-web-typography
❌ awesome-Swift
❌ AwesomeWebTypography

The heading title of your list should be in title case format: # Awesome Name of List.

✅ # Awesome Swift
✅ # Awesome Web Typography
❌ # awesome-swift
❌ # AwesomeSwift

Non-generated Markdown file in a GitHub repo.
The repo should have awesome-list & awesome as GitHub topics. I encourage you to add more relevant topics.
Not a duplicate. Please search for existing submissions.
Only has awesome items. Awesome lists are curations of the best, not everything.
Does not contain items that are unmaintained, has archived repo, deprecated, or missing docs. If you really need to include such items, they should be in a separate Markdown file.
Includes a project logo/illustration whenever possible.

Either centered, fullwidth, or placed at the top-right of the readme. (Example)
The image should link to the project website or any relevant website.
The image should be high-DPI. Set it to maximum half the width of the original image.

Entries have a description, unless the title is descriptive enough by itself. It rarely is though.
Includes the Awesome badge.

Should be placed on the right side of the readme heading.

Can be placed centered if the list has a centered graphics header.

Should link back to this list.

Has a Table of Contents section.

Should be named Contents, not Table of Contents.
Should be the first section in the list.
Should only have one level of nested lists, preferably none.
Must not feature Contributing or Footnotes sections.

Has an appropriate license.

We strongly recommend the CC0 license, but any Creative Commons license will work.

Tip: You can quickly add it to your repo by going to this URL: https://github.com/<user>/<repo>/community/license/new?branch=main&template=cc0-1.0 (replace <user> and <repo> accordingly).

A code license like MIT, BSD, Apache, GPL, etc, is not acceptable. Neither are WTFPL and Unlicense.
Place a file named license or LICENSE in the repo root with the license text.
Do not add the license name, text, or a Licence section to the readme. GitHub already shows the license name and link to the full text at the top of the repo.
To verify that you've read all the guidelines, please comment on your pull request with just the word unicorn.

Has contribution guidelines.

The file should be named contributing.md. Casing is up to you.
It can optionally be linked from the readme in a dedicated section titled Contributing, positioned at the top or bottom of the main content.
The section should not appear in the Table of Contents.

All non-important but necessary content (like extra copyright notices, hyperlinks to sources, pointers to expansive content, etc) should be grouped in a Footnotes section at the bottom of the readme. The section should not be present in the Table of Contents.
Has consistent formatting and proper spelling/grammar.

The link and description are separated by a dash. Example: - [AVA](…) - JavaScript test runner.
The description starts with an uppercase character and ends with a period.
Consistent and correct naming. For example, Node.js, not NodeJS or node.js.

Doesn't use hard-wrapping.
Doesn't include a Travis badge.You can still use Travis for list linting, but the badge has no value in the readme.
Doesn't include an Inspired by awesome-foo or Inspired by the Awesome project kinda link at the top of the readme. The Awesome badge is enough.

Go to the top and read it again.

Exception to 2 of the lint rules.

no-undefined-references -  I'd like to make this list like a checklist and thus when adding the markdown list like this * [ ] the lint will fail and thus added an exception.
double-link - For double link exception, I have added for moving back up to content page of the readme as a hyper link and added this exception as below.

[↑](#contents)
<!--lint enable double-link-->```

Thanks for making an Awesome list! 🙌
It looks like you didn't read the guidelines closely enough. I noticed multiple things that are not followed. Try going through the list point for point to ensure you follow it. I spent a lot of time creating the guidelines so I wouldn't have to comment on common mistakes, and rather spend my time improving Awesome.

Thank you @IAmCoder and @sindresorhus . I have revised and made necessary changes that I have missed. Below are the changes done to comply with the requirements.

[x] The repo name of your list should be in lowercase slug format: awesome-name-of-list.

✅ awesome-swift
✅ awesome-web-typography
❌ awesome-Swift
❌ AwesomeWebTypography

The repo name is renamed to awesome-cyber-security-university

[x] The heading title of your list should be in title case format: # Awesome Name of List.

✅ # Awesome Swift
✅ # Awesome Web Typography
❌ # awesome-swift
❌ # AwesomeSwift

The title is now renamed to # Awesome Cyber Security University

[x] Includes a project logo/illustration whenever possible.

Either centered, fullwidth, or placed at the top-right of the readme. (Example)
The image should link to the project website or any relevant website.
The image should be high-DPI. Set it to maximum half the width of the original image.

Added hyperlink in the project logo to the project website.

Just following up to see if there are any more items that needs to be addressed or we can proceed to merge. @sindresorhus

The image should be high-DPI. Set it to maximum half the width of the original image.

Because Education should be free. => Because education should be free.

Consistent and correct naming. For example, Node.js, not NodeJS or node.js.

For example: openvpn, ctf, python
Please ho through each description and make sure they have the correct casing, naming, and without typos.

Thank you @sindresorhus ,

The image should be high-DPI. Set it to maximum half the width of the original image.

[x] Set the image to half of the maximum width.

Consistent and correct naming. For example, Node.js, not NodeJS or node.js.

[x] Gone through each description to check for typos, standardized casing/naming and grammatical errors.

Incorrect vertical spacing:

[x] Gone through each line to check for incorrect vertical spacing.

Tweet: https://twitter.com/awesome__re/status/1534905352340520961


[AdmobApi] Impossible to obtain valid credentials.

I have downloaded the example for using the flutter googleapis package where usage of the PeopleAPI is shown, this example.
I configured my project on the google cloud platform and did every thing necessary to make the example work, which it did.
I then went ahead and tried to make the project work with the YoutubeAPI (v3). I added the scopes to the OAuth consent screen (on the google cloud platform), and also inside of my code.
final GoogleSignIn _googleSignIn = GoogleSignIn(
  scopes: <String>[
    PeopleServiceApi.contactsReadonlyScope,
    YouTubeApi.youtubeReadonlyScope,
  ],
);

This worked perfectly and I was able to use the YouTube API effectively.
I now want to use the AdmobAPI (v1). I added the necessary scopes to the OAuth consent screen (on the google cloud platform), and also inside of my code.

https://www.googleapis.com/auth/admob.readonly
https://www.googleapis.com/auth/admob.report

final GoogleSignIn _googleSignIn = GoogleSignIn(
  scopes: <String>[
    PeopleServiceApi.contactsReadonlyScope,
    YouTubeApi.youtubeReadonlyScope,
    AdMobApi.admobReadonlyScope,
    AdMobApi.admobReportScope
  ],
);

I then tried a basic example usage of the AdmobAPI. This does not work even though the setup process is exactly the same as for the Youtube API. Both APIs are enabled on the google cloud console.
Here is the error output by the AdmobAPI
[VERBOSE-2:ui_dart_state.cc(199)] Unhandled Exception: DetailedApiRequestError(status: 401, message: Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.)
#0      _validateResponse (package:_discoveryapis_commons/src/api_requester.dart:295:9)
<asynchronous suspension>
#1      ApiRequester.request (package:_discoveryapis_commons/src/api_requester.dart:73:16)
<asynchronous suspension>
#2      AccountsResource.list (package:googleapis/admob/v1.dart:152:23)
<asynchronous suspension>
#3      SignInDemoState._handleGetContact (package:admob_revenue/main.dart:76:11)
<asynchronous suspension>

The exact same authenticated client is used in both APIs
This app is being run on an iOS simulator
And here is the code I am using to produce this error:
https://pastebin.com/3uw4EtMS
See lines 62 - 76 for where I am calling the APIs
So essentially my question is, what am I doing wrong that makes the YouTubeAPI authentication work, but not the AdMobAPI authentication?
I was not able to find any docs saying that the authentication process would be different for these API's other than a change in scopes.

Alright guys, it turns out that, after weeks of trying to fix this, the only problem was my own stupidity.
To test this program I was signing in to a Gmail account which did not have an Admob account set up. All you need to do is go to Admob and setup your account with the email you want to use. Then everything works as intended.
Sorry for wasting anyone's time if you guys were trying to solve this.
Also something that I would help future people, is to make the error message is more precise. It would help out a lot if it said something about how the token is valid, but really it's just that the Admob account isn't set up yet.


Uninstantiated generic types as generic type arguments

Normally, all generic type arguments of a generic cannot themselves be uninstantiated generics:
Comparable(Array)            # Error: can't use Array(T) as generic type argument yet, use a more specific type
[1].is_a?(Comparable(Array)) # Error: can't use Array(T) as generic type argument yet, use a more specific type

But such generics can be formed nonetheless:
class Foo(T); end
module Moo(T); end

alias F = Foo(Foo) # okay
alias M = Moo(Moo) # okay

class Bar < F      # okay
  include Moo(Moo) # okay
end

{% Bar.ancestors %} # => [Moo(Moo(T)), Foo(Foo(T)), Reference, Object]

Bar.new.is_a?(F) # => true
Bar.new.is_a?(M) # => true

Formal type parameters can be leaked in this way too:
class Foo(T)
  @x : T?
end

module Moo(T)
  @y : T?
end

typeof(Bar.new.@x) # => (Foo(T) | Nil)
typeof(Bar.new.@y) # => (Moo(T) | Nil)

So far we have been using types like Comparable(Array) in the standard library without any significant issues. What should we do about these types?

Perhaps obvious, but it's important to mention that Bar.new.@x makes the program crush.
cast from Crystal::GenericModuleType to Crystal::SubclassObservable failed, at /build/crystal/src/crystal-1.4.1/src/compiler/crystal/semantic/call.cr:1229:5:1229 (TypeCastError)

I don't think we should let un instantiated generic types as instance variables. It's allowed for include to use T as a generic type restriction (Comparable is a good example of that).
Regarding ancestors... I guess uninstantiated generic types make sense In a hierarchy.

The argument type for Array#<=> is not really an unrestricted Array type. It's actually something like Array(Comparable(T)).
That's technically not entirely accurate, because the comparison is the other way around and it would be more like Array(Comparable(U)) for all U such that T < Comparable(U).
That's just too complex to express.
I believe we could probably reverse the call direction of the comparison in Array<=> so that we can make the argument an actual Array(Comparable(T)).
Implementing this triggers a compiler bug and sends it into an endless loop (https://github.com/straight-shoota/crystal/tree/test/array-comparable).

The argument type for Array#<=> is not really an unrestricted Array type

It is! Take a look at this:
class Foo
  getter x

  def initialize(@x : Int32)
  end

  def <=>(other : Foo)
    x <=> other.x
  end
end

ary = [Foo.new(3), Foo.new(2), Foo.new(1)]
p ary.sort

It just works ©

That's just too complex to express

This is something that I really like about Crystal: no need to delve into super complex type restrictions.
If we do restrict it to Array(Comparable(T)) then it's a breaking change. But don't feel it's the right thing to do. In my mind Comparable just defines < and others for you based on a single <=> method, but it doesn't signal that a type is comparable. Similar to how a type can respond to to_json or from_json without necessarily including JSON::Serializable. Whether that's something desireable or not is a different topic, but it's how things work (more like a duck-type way, which is what I really like about Ruby.)

@asterite I don't get your code example. We're talking about Array#<=>, not #sort (which is eventually T#<=>).
I sympathize with the ability to avoid complexity.
But there is a good motivation to adding such type restrictions: Better errors.
Right now, if you do something like [1] <=> ['c'] you get an error message that complains about undefined Int32#<=>(String). That's not very helpful. It might be good enough to figure out what's wrong.
But it would be more user friendly if Array#<=> wouldn't even compile when the item types are not comparable.

Ah, you are right. Here's a better example:
class Foo
  getter x

  def initialize(@x : Int32)
  end

  def <=>(other : Foo)
    x <=> other.x
  end
end

ary1 = [Foo.new(3), Foo.new(2), Foo.new(1)]
ary2 = [Foo.new(1), Foo.new(2), Foo.new(1)]
p ary1 <=> ary2

Right now, if you do something like [1] <=> ['c'] you get an error message that complains about undefined Int32#<=>(String)

That makes total sense if you look at the entire error trace... which is hidden by default 🤦

Right now, if you do something like [1] <=> ['c'] you get an error message that complains about undefined Int32#<=>(String)

A better answer that doesn't use the facepalm emoji (sorry about that): we could check if each element responds to <=> with the target type. If not, we can give a nice error message. But I don't think enforcing this at the type level is the best solution.


Cannot compile file serenity

Hello, I cannot compile file serenity. What should I do?

Do not use cargo run, use cargo build --target=i686-pc-windows-msvc --release and copy the dll next to the game directory.

Still something

Run rustup target add i686-pc-windows-msvc and then cargo build --target=i686-pc-windows-msvc --release

You need to install rustup first before you run it. https://www.rust-lang.org/tools/install

Idk. what should i do?

You must run these on a windows pc or msvc-like environment

Okay, I think I get it. What file should I save it as?

discord_bot.dll will be in the folder rustbot\target\i686-pc-windows-msvc\release after a successful compile. Hope this helps!

It's there

Now it's saying something

But i cannot join server (Server not responding)

Seems like something with the hosting provider, zap, because it should work fine. Is there a discord folder with the bot token and all that?

Is that right?

Yes, sorry for the late response. It seems like your hosting provider (zap!) does not allow for the dll to be loaded.


IsTakePhotoSupported Not Working on iOS?

If I do -not- grant camera permissions to the app on iOS, the IsTakePhotoSupported flag is still returning true. A subsequent call to TakePhotoAsync then results in a crash:
Plugin.Media.Abstractions.MediaPermissionException "Camera permission(s) are required"
I am correctly setting NSCameraUsageDescription.
Code snippet below. What am I doing wrong? Thanks in advance!
Version Number of Plugin:  5.0.1
Device Tested On:   iPhone 11 Pro
Simulator Tested On:   NA
Version of VS:   8.7.8
Version of Xamarin:   4.8.0
Versions of other things you are using:   iOS 13.7
		// Uses native camera control to take new photo
		async void OnTakeTapped()
		{
			var media = CrossMedia.Current;

			// Init library
			await media.Initialize();

			// Make sure camera accessible
			if ( media.IsCameraAvailable && media.IsTakePhotoSupported )
			{
				// Reduce size/quality slightly to save memory
				var options = new StoreCameraMediaOptions
				{
					PhotoSize = PhotoSize.Large,
					CompressionQuality = 92,
					SaveToAlbum = false,
					AllowCropping = true,
					DefaultCamera = CameraDevice.Rear,
					RotateImage = false
				};

				// Show native camera control
				var file = await media.TakePhotoAsync( options );

				// Convert to stream
				var source = (file == null) ? null : ImageSource.FromStream( file.GetStream );

				// Calback handler
				ImageSelected?.Invoke( source );
			}
			else
			{
				DXAlert.ShowError( "form.image.err.take", Reset );
			}
		}

Same problem here


Bug: 'ready' and 'error' events do not fire on

Checklist

[x] Verified whether your issue exists in the latest version Mux Element(s) release: npm install @mux-elements/[element_name] or yarn @mux-elements/[element_name].

(NOTE: If the issue is not occurring in the latest version, we may not resolve it.)

[x] Confirmed that this issue hasn't already been filed.

Which Mux Elements/Packages has a bug?

mux-video
mux-audio

(haven't checked audio, but I'm fairly certain the bug occurs on both)
Which browser(s) are you using?

Chrome

Which operating system(s) are you using?
(For example: macOS, Windows, iOS, Android)

macOS

How are you using Mux Elements?
(For example: npm package, <script> tag)

npm package

Describe the bug

The "ready" event and the "error" events do not fire on the <mux-video> element. These events fire on the <video> element, so I would expect <mux-video> to have the same behavior.
Other events, however, like timeupdate, play, playing, pause, ended, canplay all fire reliably

Steps To Reproduce

See code sandbox: https://codesandbox.io/s/mux-video-el-events-7wstz
Click play on the video, I wired up some javascript code that shows what events are firing

Link to code example:

The current behavior
"ready" and "error" events do not fire
The expected behavior
<mux-video> will emit "ready" and "error" events when event listeners are attached like so (the same way you would attach event listeners on a <video> element):
const muxVideo = document.getElementById("mux-video");
muxVideo.addEventListener("ready", () => { });
muxVideo.addEventListener("error", () => { });

Turns out addEventListener("ready") is not a thing, I was looking at some old code that was integrated with plyr -- so scratch that one.
And as a matter of fact addEventListener("error") works -- it just doesn't work in code sandbox with a URL that 404s because it looks like codesandbox intercepts the the network requests on a service worker and do something weird with it.
This is confirmed by running the same code outside of codesandbox the "error" event works. Inside codesandbox event the default <video> element error event does not work as expected.
We all good!


Include new Movebank reference terms

Ornitela and Interrex

alt-project-id (new field) = project_id
deploy-on-measurements (new field) = from new field animal_measurements
deployment-comments = track_session_remarks (and nothing more)
study-site = release_location
tag-firmware = not applicable, not added

UvA-BiTS
See separate commits.

alt-project-id (new field) = project_id
deploy-on-measurements (new field) = parsed out from ses.remarks
deployment-comments = reduced to last part of ses.remarks
study-site = first part of ses.remarks (rather than project_id)
tag-firmware (new field) = tag.firmware_version

All movebank_ref_data files are now updated and were uploaded to Movebank.


Publish & bump version

I did integrated Travis, it currently will only run on my fork. I will try to maintain a changelog.


FR: Colorized output

Brief Issue Summary
Feature Request: Colorized/Parsed output
If a compilation/execution in performed in the Terminal window the output is colorized. But for the compilation the output in "Output" is not. Interactive, colorized text in "Output" will be great.
### Parsed output
- [ ] Colorised output
- [ ] Clickable links
- [ ] Interactive/Filterable contents

Originally reported:
https://github.com/microsoft/vscode-cpptools/issues/10890

Thanks for the feedback. I'm closing as a duplicate of #478 which is currently one of our most highly upvoted issues to work on next.


Improvement Proposal: Configurable Pull Requests

Summary
Dependabot provides several pull requests all for the same repository. These diffs in the repository are pretty trivial and generally involve changes only relating to package managers. Pull Requests needs to be configurable from a dependabot.yml file.
Implementation
Commit Structure
Currently, commits are structured for only a single version change.
@dependabot
Bump elliptic from 6.5.0 to 6.5.3 …
00dff40
Bumps [elliptic](https://github.com/indutny/elliptic) from 6.5.0 to 6.5.3.
- [Release notes](https://github.com/indutny/elliptic/releases)
-<EMAIL_ADDRESS>
Instead, add all changes to a single commit and have it structured something like this.
@dependabot - Version Updates

Bump elliptic from 6.5.0 to 6.5.3 … 00dff40
Bumps [elliptic](https://github.com/indutny/elliptic) from 6.5.0 to 6.5.3.
- [Release notes](https://github.com/indutny/elliptic/releases)
-<EMAIL_ADDRESS>
Bump lodash from 4.17.15 to 4.17.20 ... 0e4a060
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.15 to 4.17.20.
- [Release notes](https://github.com/lodash/lodash/releases)
-<EMAIL_ADDRESS>
Configuration with dependabot.yml
For complete and full granular control of how @dependabot configures pull requests. A dependabot.yml file seems most ideal.
Example Configuration:
ignore:
  - list
  - packages
  - here

group:
  - list
  - packages
  - here

group:
  - multiple
  - iterations

Example Configuration Group All:
group:
  - *

Example Configuration Grouping Based on organization deps:
group
  - @org/*

ignore
The ignore key in the .yml file ignores all the packages
group
The group key in the .yml file groups all packages into the same pr.
Both keys can be iterated multiple times in the .yml file.
Project Structure
If the project is running on a monorepo. You can have multiple .yml files in each respective folder. @dependabot will walk through each folder to find the .yml file.

I would prefer to list not only individual packages, but to also have the ability to list entire organizations.
For example, organizations like @types or @symfony could be good candidates for an organization-wide grouping.
Please see https://github.com/dependabot/dependabot-core/issues/1190#issuecomment-718919532 for further details.
Listing individual packages is fine in some cases, but there are also cases where an organization-wide grouping is easier to maintain than individual packages.

@fkirc, would love to be able to do something like this.
group:
  - @symfony/*
  - @laravel/*
...

I agree with that!

This might be useful as a real world example, we had similar issues using a custom variant of the Dependabot script with our self-hosted gitlab server, developers complained about the number of Merge Requests that where being generated. To fix this we extended the dependabot configuration with group_updates which has similar traits with  ignored_updates and allowed_updates, where by you state package names that should be grouped.
version: 1
update_configs:
  - package_manager: dotnet:nuget
    directory: /Source
    update_schedule: daily
    ...
    group_updates:
      - match:
          dependency_name:*

The result of including all packages into a single, so not only do the developers get bothered less with merge messages, the number of auto-merge fails due to conflicts requiring a rebase has been almost reduced to zero.

I have a monorepo and even though it is not very large at the moment I expect the sheer volume of PR's will be difficult to handle as the repo grows. I'd love to be able to configure dependabot like this. Great idea!

@fkirc, would love to be able to do something like this.
group:
  - @symfony/*
  - @laravel/*
...

I agree with that!

That looks like a good idea for handling grouped dependencies, @ChrisCates why not update your proposal with these changes?

@Jacob-Morgan, thanks for the reference to that fork. It's actually very relevant.
@h-no, agreed, going to add that!

I am currently looking at the adoption of dependabot for the Kubeflow project, and as many others the amount of PRs that will be created for a given repository (and the resulting load on the AWS testing infra) are the man reasons for concern. The ability to group dependency updates together seems to be the most effective way to combat this issue, along with the problem that some dependencies need to be updated together to be functional. To me it seems the solution provided in https://github.com/dependabot/dependabot-core/issues/2672#issuecomment-719130140 is a good way forwards. What would be required to start getting this integrated into dependabot?

I am currently looking at the adoption of dependabot for the Kubeflow project, and as many others the amount of PRs that will be created for a given repository (and the resulting load on the AWS testing infra) are the man reasons for concern. The ability to group dependency updates together seems to be the most effective way to combat this issue, along with the problem that some dependencies need to be updated together to be functional. To me it seems the solution provided in https://github.com/dependabot/dependabot-core/issues/2672#issuecomment-719130140 is a good way forwards. What would be required to start getting this integrated into dependabot?

This would also help us out in the https://github.com/dotnet/aspnetcore repo.

Solving this is a more general way is a bit beyond dependabot's scope.  However, you should be able to solve this with a custom github workflow.  You would create an action that runs whenever a new PR is created by dependabot and it uses github-script to locate instances of PRs for related dependencies across your repo and then merges the changes from the new PR into the existing one and closes this new PR with a comment referring to the other PR.
Related to #3856 #1296 and #1190

Sorry for commenting on an issue that hasn't had activity for a while, but I think having wildcards could also be useful. For example, Vue CLI dependencies are released together all at once (https://github.com/vuejs/vue-cli/commit/ef08a08c41b028a2484f262414a8c91d151febc7), so it's useful to have one PR for them all.
Something like this, for example:
group:
  - @vue/cli*

I realize this is already very similar to the concept of "grouping all" and "grouping organizations", but I think those concepts can be combined into a more generalized pattern-matching for grouping/ignoring.
If you agree, maybe the proposal can be updated to specify that * is a pattern-matching wildcard in general, and not just for combining all deps or organization deps?

Hello everyone! We at Legal and General have just open sourced Dependabot Batcher, a GitHub Action that we've been trialling internally for some time. When run on a schedule (or ad-hoc, if you prefer), it will combine all open Dependabot PR changes into one.
The PR provides links to the original PRs, while closing them down. This can save a lot of CI time as well uncluttering your Pull Requests page.
Here's what the generated PR looks like:

We hope that someone finds this useful as we do, and look forward to hearing any feedback you might have!

Interesting @pauleustice, can you share a little about how this deals with conflicts?

@jurre Sure. Here's what we have in the readme:

ℹ When the Action is unable to merge a Dependabot PR, it will keep the original PR open. This usually happens when there are updates for consecutive dependency entries in your package.json file, which cause merge conflicts. Merging the batched PR will mean it gets picked up on the next run.
You will see the branches that could not be combined in the logs, for example:
🚫 These branches could not be combined:
dependabot/npm_and_yarn/nrwl/linter-14.5.1
dependabot/npm_and_yarn/nrwl/eslint-plugin-nx-14.5.1

Of course, you can manually add any merge conflicts to the combined PR if you wish. In our team we just merge the batched PR and then they get picked up on the next run.

:tada: https://github.com/github/combine-prs

Thanks @spenserblack I hadn't seen that. :grin
Hopefully it's a helpful workaround until we get a chance to actually get this solved upstream here in :dependabot:.
Looking through the comments, this is pretty clearly a duplicate of a combination of:

#1296
#1190


cover test line function length

I have below lines of code and want to know How to cover this line using test file. I tried  several but unable to cover as it always gives length 0
I want to cover else part.
var code='';
if(store.getState().inputValue.toString.length===0){
//do something
}else{
code=store.getState().inputValue.summary.username;
}

Please note this issue tracker is not a help forum. We recommend using StackOverflow or our discord channel for questions.


Replace http://aka.ms with https://aka.ms (under articles/logic-apps).

This PR is a simple text replacement for http://aka.ms links to the corresponding https:// link. The only targets are those files in the /articles/logic-apps path.

@scovetta : Thanks for your contribution! The author, @ecfan, has been notified to review your proposed change.

@scovetta Thanks, Scott! #sign-off


cgBusy no longer accepts string ids to represent promises/trackers

Hello,
I have a table loaded dynamically and its rows can be expanded with AJAX calls on user clicks. I'd like to show spinner while these secondary data is loaded. But I cannot use one promise variable for that since it shows the spinner in all rows. So I've tried to create the promise variables on the fly when the parent table is loaded. But when I try to access the dynamic variables I'm getting the error in the subject. How could I work around this?
html:

js:
$scope.loadRow(link){
  $scope['p'+link.fromId+'-'+link.toId] = $http.get('...');
}

The expression you're passing to cg-busy is evaluating to a string, not a promise.  Thats why you're getting that error.  Do this:
$scope.loadRow(link){
  if (!$scope.promises) {
    $scope.promises = {};
  }
  $scope.promises['p'+link.fromId+'-'+link.toId] = $http.get('...');
}

thank you!


Changing licence

Codecov Report

Merging #13 into master will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##             master    #13   +/-   ##
=======================================
  Coverage       100%   100%
  Complexity       11     11
=======================================
  Files             4      4
  Lines            43     43
=======================================
  Hits             43     43

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 6b3a658...9dda982. Read the comment docs.


Remove toggle for horizontal menu page demo

To align with the React demo we should remove the toggle.

:tada: This issue has been resolved in version 2.17.3 :tada:
The release is available on:

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


Tweaks to static site

A few small improvements to the dashboard:

Include the date in the tooltop
reduce the size of the html file a bit
if a test has failures, show them as a different marker shape

Kicking CI again, looks like something unexpected went wrong.

@ian-r-rose I believe the CI error is completely unrelated, however, it looks like we are still running into the issues reported in https://github.com/coiled/coiled-runtime/issues/166 and OSError https://github.com/coiled/coiled-runtime/runs/8021265888?check_suite_focus=true#step:6:938 which might be more on the Coiled side.
Outside of these issues that seem to be unrelated, I'd be happy to merge.
Thoughts?

I think we can move forwards with this -- the CI flakiness is definitely a problem, but there is no way this PR is contributing


Memoize stack chain

Done!

That also means that once a phase runs for the first time it will not be possible to change it afterward, right?

Everytime the phase-specific middleware stack mutates (a new handler is added) the memoized function will be automatically flushed, therefore there's no constrains in this sense, you can attach new handler whenever you want.
Also, I've done some bench tests and the benefit or doing memorization at this level seems to be really low (just a reduced set of nanoseconds of less computation), so we could remove this if after more tests in real use cases we don't have any significant benefit.

Oh I missed the "flush" part I guess. Sounds good to me :+1:


Display Backlight missing

Hi,
I am using pupper with ROS and it works fine so far. I managed to run lidar navigation and also could connect a pi camera. Is there a way to use the LCD Display? At the moment it boots with a text on it "Mini Pupper" and has no backlight. What is the smart way to control it on ROS?
Thanks and best regards
Daniel

Great job!
Will update the source code and open it soon, please wait, thanks!


Wotlk DK Armor error?

I am currently using the tanking simulator for my Blood DK in WotLK.  In game with no external buffs I have 31160 armor in frost presence.  On the SIM with full raid buffs I only have 25534.  Doing the math it seems that the simulator is not taking into account the full bonus armor from Frost Presence (60% of current armor value).
My base armor in game is 20767 (not in frost presence), and on the SIM it is showing as 20766 (armor value minus buffs).
Without trying to figure all the percentages from talents etc., if I just add all the values from my armor contributions (not trinkets, rings, or cloak), I get 17334 armor times 60% should be a bonus armor value of around 10400 armor.
20767 armor not in frost presence
10400 bonus armor
31167 total (very close to my in game value of 31160) in frost presence
I am not sure if certain armor slot items are not being calculated in the simulator or of the % is being calculated wrong?  The SIM is only currently giving me 4768 in bonus armor from frost presence which is about 2.75% not 6%.
https://wowsims.github.io/wotlk/tank_deathknight/#eJztVM1LVFEUf+fcN883F8Xna5Dr9aPxUSFDQ3dmVMzNTP0FggQtbZFEtIhc1cokNUdEihCdRUMWUotqkaBZA5UtNBBmoUIGYVoqRllUYPRBd+6bCRdiVLbrvA/OOb/f+Z17z3tcustECxkIPAYnoRXgOsAoQBpgBWAdMI3YinCw1AIGfhAQk6zzipUGnAdcB6hHC2yNX6VtYDScOHL66Ckzz6L8GdBCK9VL2FCFY1wbx6m7SL3WzUV0SEq6+daYxBbLHTKiokQnYc9LHLIko0LrRg9hL0ocQxZl4ALrTjdh8QpHl7Amw/uy9lIutK2PHYRdKHO8kp5MqgrbGpYVb8tVbnQJF5RsV5KwvjLHGHFlvVZvnLgtvdbLrqyrW8NdRL7H3mdK5tsJ65Q7kLryppoELsuiAlMX3gZymDR55DgG8RPSB6j9t78yW/xuxSpqZwwTGPqhDZFrcdgrRE11KByqiUQiQkREOCxCmScSjIgadUkLh4KSJsILwMy+abTevEI2OI3+3mms6p9BMTCDK6C/g7wEaI/wis4I9VGTG1Q3Oz+jY1LpBUOihe7IZhNT6ORRDyXB2hZaRA2uU2RF2VSoxdY51mt2BS+jdsAydZvMgcYVWi12K4X+b7gl/vA22RSvzeKz3zevz+HjX7fGlyVezktpUaDQNGzyROIyTbFaKHjtHrEZL6b5DqVmOJMZuUUU8mWK2JyzDciQROSIzLMdxA+2w/20OOCTTc3jOVQpR1rc0fUQu47X0oBdpRbnsT0XEU3kcnEUxMYcyeaU+jmlntuSZKwCmnqOkVvZPh6klXznRhVwOSHqHYQMLf0BlWBcCVLuftH11/jTl4xNZ1Pn9lluJxM4kTk258DnPZSxZCpW5P6hGPMbT7Mnw56Y0028ym1tzhF8sZLEQMYmo/vdTDpa2axsNhp+hv5G5gn847Olqiu2HTKtk49/odO4LX3+xNzZptZiB9x4PdoEPwAl5dlt
This is my current gear in sim and attached is a screen shot in game.

Thank you for your help

The sim casts frost presence for you.  If you look at results->log your first few casts should include something like this.

Thank you for the explanation and assistance.  I appreciate it!
On Sun, Apr 7, 2024 at 5:43 AM Teebown @.***> wrote:

Screenshot_20240407-074148.png (view on web)
https://github.com/wowsims/wotlk/assets/108202746/f17e2854-b54f-43b8-9483-890e08db4c12
The sim casts frost presence for you. If you look at results->log your
first few casts should include something like this.
—
Reply to this email directly, view it on GitHub
https://github.com/wowsims/wotlk/issues/4241#issuecomment-2041458774,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/BHUKJFEGSVRGTTMMAQY72CDY4E5QBAVCNFSM6AAAAABF2S3MYWVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDANBRGQ2TQNZXGQ
.
You are receiving this because you authored the thread.Message ID:
@.***>


feat: Import Assistant

use aem-import-builder
add assistant commands - start, cleanup, block, cells
use ImportBuilderFactory to start content removal detection
add puppeteer to load document to be used with assistant commands
add express server for serving up templates used by the import assistant

Waiting for https://github.com/arumsey/aem-import-builder/pull/1 to be merged and published first.


Try to test the recovery of FOM database

Describe the task
We can try to follow the documentation here https://github.com/bcgov/nr-old-growth/wiki/Database-Backup-and-Restore to restore the database from a backup file
Acceptance Criteria

[x] Test the restore backup in DEV namespace
[x] Grab the backup file from openshift
[x] Try the restore with dev database, open a pr for that
[x] Document the procedure

Additional context

Make the data change, wait a day, restore it back
Make another data change, wait a day, restore it again

https://github.com/bcgov/nr-fom/wiki/Database-Restore

I'm also not sure since for FOM we are sensitive to the date and FOM status. When we do restore that could cause FOM status change, we might need to be careful, if our cron job can pick up the FOM status change correctly.

So we have a process defined that only works in dev it seems. This is a start, but we need a process defined for test/prod environments more importantly than for dev. A process that only works for dev isn't enough.
I'm nervous about having a cron job scheduled for Feb 31st, is there another way we can set that up (e.g. by having no schedule at all). Does OpenShift support manually executed tasks. Why not just have yaml to create the OC job from scratch to run it, rather than creating from a cron job? See e.g. https://codergists.com/redhat/containers/openshift/2017/04/18/running-once-off-tasks-in-openshift.html

I was able to follow wiki procedure for the restore process and restore fom database from the point in the past, using currently deployed openshift DEV environment fom-24 deployment.
- Use "admin" page to search all FOMs at initial status.
- Create a new FOM at initial status and search to make sure the new FOM is there
- Use Openshift console to scale admin/public/api deployment down to 0.
- Intall oc command CLI tool and login to Openshift FOM dev project.
- Skip manual backend (before restore) for now.
- Use Openshift console to edit `fom-24-db-restore` pod yaml file to supply value for `BACKUP_FILE_DIR` to the latest backup and save.
- Follow command on wiki's Restore Process session and using oc CLI tool to restore database at past point `oc create job --from=cronjob/fom-24-db-restore db-backup-restore-2024-08-28`.
- Scale admin/public/api up to 1 pod and verify by searching on admin page for FOMs with initial status and make sure the new FOM previously created did not show up after restore process.

I also adjust the wiki process to include a step for how to install oc CLI command tool locally since initially I had no tool to oc command and had little bit trouble.
@basilv


build native fails in docker

Being new to rust and also docker, I have been struggling to build a project for quite some time now.
I am trying to use docker to build this project. I will be describing the problems along the way.
Since for some reason esp is not the default toolchain when running the docker env and since #67, I have uncommented the line ESP_IDF_VERSION = { value = "release/v4.4" } in config.toml, and my docker command is as follows:
docker run -it -v $PWD:/project -w /project espressif/idf-rust cargo +esp build --features "native"
This is the closest I got to building for now but I fail with:
``
Compiling esp-idf-sys v0.30.6
error: failed to run custom build command for "esp-idf-sys v0.30.6"
Caused by:
process didn't exit successfully: /project/target/debug/build/esp-idf-sys-1f8da36d2cb1c9ed/build-script-build (exit status: 1)
--- stdout
cargo:rerun-if-env-changed=ESP_IDF_TOOLS_INSTALL_DIR
cargo:rerun-if-env-changed=ESP_IDF_VERSION
cargo:rerun-if-env-changed=ESP_IDF_REPOSITORY
cargo:rerun-if-env-changed=ESP_IDF_SDKCONFIG_DEFAULTS
cargo:rerun-if-env-changed=ESP_IDF_SDKCONFIG
cargo:rerun-if-env-changed=MCU
PATH=/project/.embuild/espressif/esp-idf-release/v4.4/tools:$PATH
--- stderr
Error: Could not install esp-idf
Caused by:
command '"python3" "/project/.embuild/espressif/esp-idf-release/v4.4/tools/idf_tools.py" "--idf-path" "/project/.embuild/espressif/esp-idf-release/v4.4" "--quiet" "--non-interactive" "install-python-env"' exited with non-zero status code 1

I also had sometimes fatal: No names found, cannot describe anything. errors, but going into .embuild/espressif/esp-idf-release/v4.4 and running sudo git git fetch --depth=500 seemed to stop them..
Running the last command without --quiet I get
ERROR: This script was called from a virtual environment, can not create a virtual environment again
which python3:
/opt/esp/python_env/idf5.0_py3.8_env/bin/python3
tried to run the last command with /bin/python3 instead of python3 and it seemed to do what it was supposed to do but cargo build fails still with the same error.
Will be glad for any assistence

Hello, I am not using Docker but I have the same issue. I tried to remove the .embuild and target directory and set ESP_IDF_VERSION to release/v4.4 or master but both failed.

I created this experimental Dockerfile that builds everything from scratch from clean docker environment. No caching, so not particularly  fast.
https://github.com/ivmarkov/rust-esp32-std-demo/compare/main...brianmay:docker?expand=1
Build with:
docker build -t rust-esp32-std-demo .

At present it fails with a linker error: undefined reference to __sync_val_compare_and_swap_8'`. I suspect I might be missing a library or something.
No idea if this helps or not...

Remembered I forgot to select IDF 4.4. With that change, can now build in a Docker container.

I could not compile or burn using docker. Also tried brianmay's solution.
Finally I could compile and burn using https://github.com/esp-rs/rust-build native install instructions.


Updating both range values from code

Here's a simple example: (http://jsfiddle.net/tv8fdp6o/3/)
I'm trying to change a range value from one range to another range just by setting new model value for slider. Let's say I have a range configured to go from 1 to 10 and initially set range [2,4]. Then I try to set  range to [5,7] and I get [4,7] in slider instead. See fiddle for example. It seems that this is happening because new lower value is limited by previous upper value.

Yes indeed weird but your test case and explanations are perfect, I look asap

Tnx for the quick response, here's a workaround I'm using now:
var _resetValue = function() {
$scope.value = $scope.options.from + ';' + $scope.options.to;
};
Basically I'm resetting low and high range value before setting new range, then it works. Maybe it helps to create a bugfix.
Cheers.

Nice workaround I have not looked yet but it will help for sure, thx


Init shiori

Motivation for this change
Shiori, the simple bookmarks manager. I don't know much about the Go programming lanuage, and much less how to package it. Please tell me if there could be improvements.
This PR comes with a module and a test for the module
Things done

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

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

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

Thanks for all the feedback, @alexarice !

@GrahamcOfBorg build shiori

Thanks @minijackson and @alexarice


Implement markmap folding commands

Implements fold and unfold. See screenshots for keyboard shortcut examples (which is how I have been using this locally for rapid navigation).
I have found my use cases to be:

writing / editing a markdown and seeing it realtime update in the mind map (it updates about every second based on the mindmap-view.ts's registerActiveLeafUpdate())
viewing a mindmap and jumping to a specific fold level by keyboard shortcut
exploring in an ad-hoc way using my mouse and clicking nodes.

As a design decision / consideration, I did not implement expand / fold next level, because when I mapped to the keyboard shortcuts in the screenshot given, it was very nice for me to jump to a specific fold level, or unfold all. That provided me a muscle memory indication (specific key shortcuts) of exactly which level I was reading, which would not be possible if I was implementing an "increase fold" or "decrease fold" shortcut.

Ping @lynchjames please (:


feature: support multiline text

This PR adds multi-line text support for text detection and translation.

Coverage remained the same at 100.0% when pulling 7a37b153822d419339bfede3dad5ba41ddb43cdc on feature/support-multiline-text into a0c56a19e61c226a215e96db7d72cfae47badb4e on master.


Add Git Workflow Documentation to DEVELOPERS.md

Up to this point, we have merged pull requests into the master branch, cutting releases at significant milestones.
There is now a v0.7.0 release from master snapshotting the changes up to this point. There is also now a dev branch.
We should discuss what our pull request, merge, and release processes are for accepting changes:

Merge PRs into master or dev? If dev, disallow commits to master without a dev merge and subsequent release?
What is the release process (branches, tagging, builds)?

It might be useful to have a "release train" branch (master works for this, but I've seen a dedicated branch used as well - named release_train or similar).
When developers work on an issue or feature request, they open a PR to the release train.  When finished, the PR is merged to release train.  When we have a set of features we want to release, we cut a branch (usually named rel-x.y.z, depending on the upcoming version).  This is useful if there are bugs found and we need to release a patch from the stable release.  If bugs are found and fixed, the release branch is merged back down to master before the next release branch is cut (or if the next branch exists, we merge to the new rel branch, then merge the new rel branch back down to master).
This is just how I've worked for the past few years, so I figured  I'd throw out the suggestion.

Fixed in #23


Extension pdf viewer

A primitive pdfviewer using PDFKit,
TO-DO:
error handling
preview?

Looks great! I will add remote file support and merge this.

Merged in https://github.com/thebaselab/codeapp/commit/bb70a7858a180e46264b758be7af44a9199abd93

Closes #624

What I have changed on https://github.com/thebaselab/codeapp/commit/c360952a1d930ea866782eab3fec4153013f1841:

.xcodeproj needs to be committed because the structure of the source files are stored inside it, but make sure it doesn't include unwanted changes like Development Team ID
Create PDFView in onInitialize so that it is not recreated every time the view is destroyed and created

UIViewRepresentable is a struct to turn UIViews (UIKit) into Views (SwiftUI)
makeUIView() is called every time the view is destroyed and appeared
Thus a new instance of PDFView is created every time the view is shown
This wastes resources and pdfView will loses its scrolling position when changing between editors
By storing it it Storage we hold reference to the view throughout the life cycle of the EditorInstance so that pdfView is only created once

Use app.workSpaceStorage.contents to read to content of the url and passes it to PDFDocument

Code App support custom file system provider like SFTP and FTP
PDFDocument(url: url) only supports local files
Therefore we use PDFDocument(data: data) instead

Also add loading state in case of huge pdf files from remote servers
Remove isNonLocalResource

I added this flag in VideoViewerExtension because it is not currently possible to stream video files through remote servers and it is not feasible to store a multiple gigabytes video files in memory
Therefore VideoViewer only supports local files
We need to create an api for workspace storage to download large files into a temporary directory through SSH / FTP to support large remote files


move away from $id

Model objects could always have an id field, but then the particular store take care of translating into an _id

This has been pretty much solved, Model.id now always is an id, and Model.constructor.$id gives the field name to put there. Model.$get() will drop back a JSONAPI object that looks like {id: 1, attributes: {_id: 1}} if the $id field is _id


20190603 ci tweaks

tACK https://github.com/digitalbitbox/bitbox-base/pull/36/commits/f291e86bee81dfc29d47983e1588ecf55c4008c6


Can't run cloned and/or downloaded project

Hello,
I am trying to run the demo to see what type of controls are available. I am getting some errors when trying to run any of the MobileDemo projects using VS 22.
Here is an image of the errors I am getting when running MobileDemo.Desktop (Debug) (Any CPU)

Any clues?

These kind of silly errors sometimes appeared when upgrading Nuget package previews, so I guess that a Nuget restore, clean solution, etc .. could help.
The xplat template is usually really less stable so I'm not surprised. I struggled myself in all the upgrades ..
Do the SukiTest project runs ?
If you want to run on mobile I suggest you to start from the xplat template and then use SukiUI when the template runs
If you want to just see the controls, I tried to use as much gif as possible in the wiki to show the animations 👍

Looks like there are local package references left over in SukiUI.csproj:
      <Reference Include="Avalonia.Controls">
        <HintPath>..\..\..\..\..\.nuget\packages\avalonia\0.10.999-cibuild0019213-beta\lib\netstandard2.0\Avalonia.Controls.dll</HintPath>
      </Reference>
      <Reference Include="Avalonia.ReactiveUI">
        <HintPath>..\..\..\..\..\.nuget\packages\avalonia.reactiveui\0.10.999-cibuild0019213-beta\lib\netstandard2.0\Avalonia.ReactiveUI.dll</HintPath>
      </Reference>

Looks like there are local package references left over in SukiUI.csproj:

Oh nice catch, thank you you are my hero 👍
I commited the changes, it can run only better without that !

Hello,
I am trying to run the demo to see what type of controls are available. I am getting some errors when trying to run any of the MobileDemo projects using VS 22.
Here is an image of the errors I am getting when running MobileDemo.Desktop (Debug) (Any CPU)
Any clues?

I updated all the Avalonia related packages to the latest (mainly 11.0.0-preview4 at the time of writing, but there are 1 or 2 with a different version) and it built and ran fine.

Or, having looked a bit closer, there is an AvaloniaVersion variable in each of the project files which can be set using a Directory.Build.props file like this
<Project>
    <PropertyGroup>
        <AvaloniaVersion>11.0.0-preview4</AvaloniaVersion>
    </PropertyGroup>
</Project>

in the root of the solution.

After updating all packages to version 11.0.0-preview4 I still get an error:

Are you running the SukiTest project or a project of yours ?

I get this error in the user control  SukiUI/Controls/Stepper.axaml.cs in line 85.

I get this error in the user control SukiUI/Controls/Stepper.axaml.cs in line 85.

Sure, but which code is running ? It seems the "Steps" Property of the Stepper is not set.
Are you running the SukiTest project or a project of your own ?

I updated all the Avalonia related packages to the latest in nuget (mainly 11.0.0-preview4 at the time of writing, but there are 1 or 2 with a different version), rather than AvaloniaCI, and it built and ran fine.

To complete this answer, the MobileDemo project (cross-platform) is always more "sensitive" to dependencies change, but upgrading all the Avalonia packages to 11.4 preview works fine (just verified it on linux too).
SukiUI is on preview 11.1 right now and some small bugs can appear between the previews version. (For example the ToggleSwitch was broken between preview2 ans preview3 because the Thumb name changed in control, etc ..)
Nothing really serious, I am personally using 11preview4 on professional projects, but I'm waiting for Avalonia 11 Official Release to update SukiUI nuget package.

I run the MobileDemo.Desktop project.


OHHTTPSTubs interfering with Task countOfBytesSent

When I have a stubbed method the countOfBytesSent seems to strip the content length and even prevent countOfBytesSent from being updated for a nsurlsessiontask.
Removing the stubs however causes it to work perfectly.

up

Sorry, sort of let this one slip, I'll get a example prepared


bugfix for tags validation

Description
bugfix for tags validation
Check List

[ ] Commits are signed per the DCO using --signoff

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
For more information on following Developer Certificate of Origin and signing off your commits, please check here.

This fixes broken functionality and has no tests?


Create devcontainer.json

Looks like this was created by accident, closing. If needed, feel free to reopen with more details, thank you!


cfe/SCH deadlocks on exit on Linux

using modules
95f34d25cb2843b8ba9db6338bb0b53cb3e38f92 cfe
c2bcebbc4d7e60a41b604e9acfc8af3c60b8536a osal
37ee8eb2d7ce006dc1570b920ae75a7ac5f89d27 psp
there seems to be a deadlock upon exit for timers being used by SCH.
See stacktrace
Thread 2 (Thread 0xef3ffb40 (LWP 19797)):
#0  0xf7766430 in __kernel_vsyscall ()
#1  0xf773e436 in __pause_nocancel () from /lib/libpthread.so.0
#2  0xf7734995 in __pthread_mutex_lock_full () from /lib/libpthread.so.0
#3  0x0807bbbe in OS_BinSemGive_Impl (sem_id=4) at /home/tbrain/cert_testbed/osal/src/os/posix/src/os-impl-binsem.c:250
#4  0x0807558c in OS_BinSemGive (sem_id=262148) at /home/tbrain/cert_testbed/osal/src/os/shared/src/osapi-binsem.c:187
#5  0xf7750628 in SCH_MinorFrameCallback (TimerId=589826) at /home/tbrain/cert_testbed/apps/sch_g/fsw/src/sch_custom.c:442
#6  0x0807b3a8 in OS_Timer_NoArgCallback (objid=589826, arg=0xf77503fe <SCH_MinorFrameCallback>) at /home/tbrain/cert_testbed/osal/src/os/shared/src/osapi-time.c:227
#7  0x0807b072 in OS_TimeBase_CallbackThread (timebase_id=524290) at /home/tbrain/cert_testbed/osal/src/os/shared/src/osapi-timebase.c:526
#8  0x0807df44 in OS_TimeBasePthreadEntry (arg=0x80002) at /home/tbrain/cert_testbed/osal/src/os/posix/src/os-impl-timebase.c:305
#9  0xf7736bbc in start_thread () from /lib/libpthread.so.0
#10 0xf76550de in clone () from /lib/libc.so.6

Thread 1 (Thread 0xf7555700 (LWP 19780)):
#0  0xf7766430 in __kernel_vsyscall ()
#1  0xf773497f in __pthread_mutex_lock_full () from /lib/libpthread.so.0
#2  0x0807dc46 in OS_TimeBaseLock_Impl (local_id=2) at /home/tbrain/cert_testbed/osal/src/os/posix/src/os-impl-timebase.c:108
#3  0x0807b63a in OS_TimerDelete (timer_id=589826) at /home/tbrain/cert_testbed/osal/src/os/shared/src/osapi-time.c:422
#4  0x08075ab8 in OS_CleanUpObject (object_id=589826, arg=0xffc049e8) at /home/tbrain/cert_testbed/osal/src/os/shared/src/osapi-common.c:263
#5  0x08078877 in OS_ForEachObject (creator_id=0, callback_ptr=0x8075a1c <OS_CleanUpObject>, callback_arg=0xffc049e8) at /home/tbrain/cert_testbed/osal/src/os/shared/src/osapi-idmap.c:1015
#6  0x08075b0a in OS_DeleteAllObjects () at /home/tbrain/cert_testbed/osal/src/os/shared/src/osapi-common.c:299
#7  0x08074ebe in OS_Application_Run () at /home/tbrain/cert_testbed/psp/fsw/pc-linux/src/cfe_psp_start.c:458
#8  0x080801d1 in main (argc=1, argv=0xffc04b64) at /home/tbrain/cert_testbed/osal/src/bsp/pc-linux/src/bsp_start.c:198

Is this just an order thing?  Shouldn't applications get deleted before the timers?

Is this reproducible or is it a race condition during shutdown?  If a thread is canceled while it is holding a lock, this type of thing can happen.  That's the risk with any sort of forced exit situation, which is why its preferable to get tasks to self-shutdown rather than forcibly delete them.

right.. as far as I can tell, Ctrl-C'ing the process is immediately killing the apps which prevents them from doing any clean shutdown which means cfe needs to do the cleanup. However, this behavior hasn't been a problem for the SCH code base for many versions of cfe. The question is, what changed? What should the app do? what should the cfe/osal/psp do?

this is an intermittent problem but occurs often enough that it isn't rare for it to occur

However, this behavior hasn't been a problem for the SCH code base for many versions of cfe

Is this to say you are finding this more frequently occurring in the latest baseline vs. older baselines?
If I'm interpreting correctly you are running the latest bleeding-edge baseline - which would have changed the CTRL+C handling to being treated as an exception and thereby flowing through the ER log/processor reset sequence.  This still will do a forced delete of all tasks but it will possibly change the timing of when that occurs, and maybe order of operations?  But that would have only changed in the most recent baseline.

as far as I know, it never occurred in the older baselines. and, yes, I am working with the bleeding edge master branches. (see initial comment for hashes).

I am looking into this one, but unable to replicate the issue as I'm not sure what version/config of SCH is used here.  However it could be simply that the OS_ForEachObject, which drives the cleanup operations, finds the tasks and semaphores before the timers.

@excaliburtb  Is the backtrace posted in the initial summary showing every thread that still existed in the process or just the ones that were "stuck"?
In particular I'm wondering about the task which runs SCH_AppMain, which is not shown above.  This would normally be inside a pthread_condwait() call, but may have gotten woken up due to the SIGINT.  My hypothesis is that maybe it got woken up, but was deleted before it could release the lock.

Resolved by nasa/osal#470


Anyone can explain why delete so many go files under pkg/v1?

Here is the commit id :https://github.com/kubernetes/client-go/commit/d82cfb70ddc9faa25f41e39a8f73d7ccd20d7a55#diff-5c755714d0649f91c00269ed3d88e19c
The author deleted so many go files, so our project failed to run . I know I don't complaint that too much. But that change is too too big!

Use vendoring to lock your dependencies.
This particular change is even mentioned in the CHANGELOG: https://github.com/kubernetes/client-go/blob/master/CHANGELOG.md#head-changes-that-will-go-into-v5


Update standard suite to standard1 and standard2

Which issue(s) this PR addresses:

Closes USHIFT-2190

/approve

/assign ggiguash

/lgtm

This fix first needs to be implemented in the main branch and then cherry-picked to release-4.15.
/lgtm cancel

to be created first in main branch


Add support for reporting the CgroupDriver runtime config

KEP-4033: Discover cgroup driver from CRI
https://github.com/kubernetes/enhancements/tree/master/keps/sig-node/4033-group-driver-detection-over-cri#cri-api

https://github.com/kubernetes/kubernetes/pull/118770

Requires CRI API 1.28

According to the KEP, you use the brand new command to try it:
$ sudo crictl runtime-config
cgroup driver:   SYSTEMD

Once RuntimeService / RuntimeConfig has been implemented, that is.


Add support for resuming after execution timeout

Currently, there is a ~20 minute execution timeout on the server-side of the script
We should add support for resuming the run from the client-side.
With support for folder merging already in, a lot of the times the script can be just re-run, however, there is an issue with files that get copied over - if #3 is implemented, the script could really just be re-ran. Otherwise, some more complex logic for saving move state is required.
https://medium.com/geekculture/bypassing-the-maximum-script-runtime-in-google-apps-script-e510aa9ae6da

POST request response:
)]}'

[["op.exec",null,[4,[],"Exceeded maximum execution time","ScriptError"]],["di",1800602,null,null,null,null,[],[],null,null,[],[],[]]]


Figure out a better story around optional proc_macro

Registering @alexcrichton's ideas from https://github.com/alexcrichton/proc-macro2/issues/137#issuecomment-425733988 so they don't get lost:

We've got the following state of affairs:

This report saying we don't compile by default on alpine
This report saying the same
This comment indicating that some musl builds have proc_macro
This report saying that if proc_macro2 doesn't link to proc_macro then the dependencies of proc_macro2 aren't ready for that.

I think it's sort of a bummer that this crate doesn't work by default on the standard musl target, and I think it'd be great to fix this. Here's an idea, though, of how we could get this working:

Somehow in this crate's build script we deterine whether or not to link to proc_macro
This crate also indicates links = "proc-macro2-04x"
This crate's build script now prints out whether or not it links to proc_macro
Crates like syn have a build script.
syn reads the env var DEP_PROC_MACRO2_04X, learning about whether proc_macro was linked.
syn's build script then prints out something like cargo:rustc-args=--cfg proc_macro_works and is compiled appropriately

This is sort of heinously complex unfortunately though. It also requires this crate's build script to figure out whether to depend on proc_macro or not (which I'm not sure how to do)

I would put this effort into https://github.com/rust-lang/rust/pull/49219 instead. In a perfect world:

libproc_macro would be just as well behaved build-wise as libcore,
available on all the same targets as liballoc,
proc macros run out-of-process using ipc with the compiler rather than dynamic linking,
proc-macro2 is superseded by syn/quote using proc_macro directly.

To pave a way to not use proc-macro2 (which does seem laudable!) we'd have to add token stream parsing and such to rust-lang/rust#49219 as well for when it's not linked to the compiler, which it doesn't currently contain. I do largely agree, though, that rust-lang/rust#49219 is a better solution than what I mentioned.

^ @eddyb any issues with providing token stream parsing in proc_macro to make it possible to use standalone from a build script or main.rs?

IIRC there was some resistance to supporting libproc_macro when not linked into the compiler, due to not wanting to link a portion of libsyntax statically into all created binaries.
Perhaps we could factor out the pieces of libsyntax which are needed to get the minimal pieces working & share them?
Unless we can do that, I think we're going to continue to need proc-macro2.

@mystor If a binary crate depends on proc_macro, wouldn't only the parts of libsyntax that are used by proc_macro end up in the result? How would we do better by refactoring libsyntax? This seems like the intended behavior.

@mystor If a binary crate depends on proc_macro, wouldn't only the parts of libsyntax that are used by proc_macro end up in the result? How would we do better by refactoring libsyntax? This seems like the intended behavior.

Currently libsyntax is a dylib, so depending on it would create a dynamic dependency, rather than a static one. We'd have to be able to link libsyntax both statically & dynamically IIRC.

So if you really wanted, you could put a copy of proc-macro2's internals in proc_macro and have that as the default "loopback" server.

I think that would be a potential solution here to eliminate proc-macro2. It would be nice to have some mechanism for proc_macro-based code to run as a standalone library without dynamically linking to or using RPC to talk to the compiler in any way. From my POV, the nicest solution there would be to have a fallback "loopback" server built into proc_macro which is used when there is no compiler session, and doesn't work against real rustc objects.
This would have to be done within rustc itself, as we wouldn't want to require an perma-unstable API to do this. I don't think the way that proc-macro2 implements it is a solution we'd want to upstream, but if we want to do that I can try to find some time to write up a cleaner & more maintainable loopback implementation.

Also, yes, I still need to finish that PR...

:heart:

This would have to be done within rustc itself,

It'd be done entirely within libproc_macro (which only depends on libstd, in my PR).
(I guess you meant Rust in general, not rustc, the program, specifically)

@eddyb yup, that's more accurate. Should've said something like "within rust-lang/rust" or "not crates.io" :-)

Any update on this? I was rather disappointed to find that many of the programs I use fail to compile on my new musl based system due to this crate.

@ifreund proc-macros work on musl / Alpine if you set RUSTFLAGS=-C target-feature=-crt-static. https://github.com/rust-lang/rust/pull/69519 makes this happen for proc-macro crates by default, so it may "just work" on 1.44 (currently beta).

@kevinmehall thats great to hear thanks!


Error compiling example from README.md

nim   c --run  astar_tst.nim
Hint: used config file '/home/dvyal/tmp/nim-0.14.2/config/nim.cfg' [Conf]
Hint: system [Processing]
Hint: astar_tst [Processing]
Hint: astar [Processing]
Hint: binaryheap [Processing]
Hint: strutils [Processing]
Hint: parseutils [Processing]
Hint: math [Processing]
Hint: tables [Processing]
Hint: hashes [Processing]
Hint: etcpriv [Processing]
Hint: options [Processing]
Hint: typetraits [Processing]
astar_tst.nim(46, 18) Error: type mismatch: got (Grid) but expected 'Graph = astar'

% nim -v
Nim Compiler Version 0.14.2 (2016-06-11) [Linux: amd64]
Copyright (c) 2006-2016 by Andreas Rumpf

git hash: abf4e204c2f1a8a6915a8d32c970b5ce64f58e10
active boot switches: -d:release

Looks like something changed in the Nim compiler to break this. A rebuild of trunk is now failing, despite passing when originally committed.

I ran a git bisect on Nim. Looks like this commit is the culprit:
https://github.com/nim-lang/Nim/commit/e04f3195407cc99f958dd81e0a9d58fe5414e631

That's weird, apart breaking astar that commit says it fixes the issue 4084, but looks like it isn't fixed :(

I did some fiddling this morning and found that explicitly importing the hashes module in the client code resolves this: 5f885c42a6bce5aa9bfdcc5907a6a16f622ce6b6. It's a bit of an arbitrary change, but it seems to solve the problem.
That commit also changes references from THash to just Hash as it looks like that is a thing now: https://github.com/nim-lang/Nim/commit/6914244f3054a60b7f12622c8d5fbe5e880f7c56


FloatingActionButton Anchored On Card?

Is it possible to anchor a FloatingActionButton on the corner of the card with the current code?
For example, see attached image. Similar to in Android development.

It looks implemented in the current version.
http://materializecss.com/cards.html

This was added in version v0.98.0 :)


chore(storybook): remove unused @storybook/addon-interactions addon

Summary
The Storybook build output was pointing at a missing registered addon.
Since the configuration tree didn't have any playback control feature enabled (interactionsDebugger: true) and the dev dependency was absent:
I took the liberty to assume the @storybook/addon-interactions addon wasn't used anymore and removed it from the list of addons.
Type

Chore

Environment + Reproduction
volta install node@latest pnpm@latest

Fresh clone.
pnpm i
pnpm start

Relevant logs and/or screenshots
Storybook's missing add-on (kinda cryptic) "error":
ERR! TypeError [ERR_INVALID_ARG_TYPE]: The "id" argument must be of type string. Received an instance of Object
ERR!     at new NodeError (node:internal/errors:387:5)
ERR!     at validateString (node:internal/validators:116:11)
ERR!     at Module.require (node:internal/modules/cjs/loader:1015:3)
ERR!     at require (node:internal/modules/cjs/helpers:102:18)
ERR!     at interopRequireDefault (<redacted>/scaleway-ui/node_modules/.pnpm/@storybook+core-common@6.5.10_o3mauctgtumsl5j4kwehbgms54/node_modules/@storybook/core-common/dist/cjs/presets.js:178:16)
ERR!     at getContent (<redacted>/scaleway-ui/node_modules/.pnpm/@storybook+core-common@6.5.10_o3mauctgtumsl5j4kwehbgms54/node_modules/@storybook/core-common/dist/cjs/presets.js:194:10)
ERR!     at loadPreset (<redacted>/scaleway-ui/node_modules/.pnpm/@storybook+core-common@6.5.10_o3mauctgtumsl5j4kwehbgms54/node_modules/@storybook/core-common/dist/cjs/presets.js:203:20)
ERR!     at <redacted>/scaleway-ui/node_modules/.pnpm/@storybook+core-common@6.5.10_o3mauctgtumsl5j4kwehbgms54/node_modules/@storybook/core-common/dist/cjs/presets.js:256:18
ERR!     at Array.reduce (<anonymous>)
ERR!     at loadPresets (<redacted>/scaleway-ui/node_modules/.pnpm/@storybook+core-common@6.5.10_o3mauctgtumsl5j4kwehbgms54/node_modules/@storybook/core-common/dist/cjs/presets.js:255:18)
ERR!     at loadPreset (<redacted>/scaleway-ui/node_modules/.pnpm/@storybook+core-common@6.5.10_o3mauctgtumsl5j4kwehbgms54/node_modules/@storybook/core-common/dist/cjs/presets.js:225:81)
ERR!     at <redacted>/scaleway-ui/node_modules/.pnpm/@storybook+core-common@6.5.10_o3mauctgtumsl5j4kwehbgms54/node_modules/@storybook/core-common/dist/cjs/presets.js:256:18
ERR!     at Array.reduce (<anonymous>)
ERR!     at loadPresets (<redacted>/scaleway-ui/node_modules/.pnpm/@storybook+core-common@6.5.10_o3mauctgtumsl5j4kwehbgms54/node_modules/@storybook/core-common/dist/cjs/presets.js:255:18)
ERR!     at getPresets (<redacted>/scaleway-ui/node_modules/.pnpm/@storybook+core-common@6.5.10_o3mauctgtumsl5j4kwehbgms54/node_modules/@storybook/core-common/dist/cjs/presets.js:313:23)
ERR!     at loadAllPresets (<redacted>/scaleway-ui/node_modules/.pnpm/@storybook+core-common@6.5.10_o3mauctgtumsl5j4kwehbgms54/node_modules/@storybook/core-common/dist/cjs/presets.js:365:10)
ERR!  TypeError [ERR_INVALID_ARG_TYPE]: The "id" argument must be of type string. Received an instance of Object
ERR!     at new NodeError (node:internal/errors:387:5)
ERR!     at validateString (node:internal/validators:116:11)
ERR!     at Module.require (node:internal/modules/cjs/loader:1015:3)
ERR!     at require (node:internal/modules/cjs/helpers:102:18)
ERR!     at interopRequireDefault (<redacted>/scaleway-ui/node_modules/.pnpm/@storybook+core-common@6.5.10_o3mauctgtumsl5j4kwehbgms54/node_modules/@storybook/core-common/dist/cjs/presets.js:178:16)
ERR!     at getContent (<redacted>/scaleway-ui/node_modules/.pnpm/@storybook+core-common@6.5.10_o3mauctgtumsl5j4kwehbgms54/node_modules/@storybook/core-common/dist/cjs/presets.js:194:10)
ERR!     at loadPreset (<redacted>/scaleway-ui/node_modules/.pnpm/@storybook+core-common@6.5.10_o3mauctgtumsl5j4kwehbgms54/node_modules/@storybook/core-common/dist/cjs/presets.js:203:20)
ERR!     at <redacted>/scaleway-ui/node_modules/.pnpm/@storybook+core-common@6.5.10_o3mauctgtumsl5j4kwehbgms54/node_modules/@storybook/core-common/dist/cjs/presets.js:256:18
ERR!     at Array.reduce (<anonymous>)
ERR!     at loadPresets (<redacted>/scaleway-ui/node_modules/.pnpm/@storybook+core-common@6.5.10_o3mauctgtumsl5j4kwehbgms54/node_modules/@storybook/core-common/dist/cjs/presets.js:255:18)
ERR!     at loadPreset (<redacted>/scaleway-ui/node_modules/.pnpm/@storybook+core-common@6.5.10_o3mauctgtumsl5j4kwehbgms54/node_modules/@storybook/core-common/dist/cjs/presets.js:225:81)
ERR!     at <redacted>/scaleway-ui/node_modules/.pnpm/@storybook+core-common@6.5.10_o3mauctgtumsl5j4kwehbgms54/node_modules/@storybook/core-common/dist/cjs/presets.js:256:18
ERR!     at Array.reduce (<anonymous>)
ERR!     at loadPresets (<redacted>/scaleway-ui/node_modules/.pnpm/@storybook+core-common@6.5.10_o3mauctgtumsl5j4kwehbgms54/node_modules/@storybook/core-common/dist/cjs/presets.js:255:18)
ERR!     at getPresets (<redacted>/scaleway-ui/node_modules/.pnpm/@storybook+core-common@6.5.10_o3mauctgtumsl5j4kwehbgms54/node_modules/@storybook/core-common/dist/cjs/presets.js:313:23)
ERR!     at loadAllPresets (<redacted>/scaleway-ui/node_modules/.pnpm/@storybook+core-common@6.5.10_o3mauctgtumsl5j4kwehbgms54/node_modules/@storybook/core-common/dist/cjs/presets.js:365:10) {
ERR!   code: 'ERR_INVALID_ARG_TYPE'
ERR! }

@gcoguiec Thank you for your contribution it is a real pleasure to have feedback on our work!
Unfortunately @storybook/addon-interactions is yet not much being used but has a true usage in future. As you may see from CI we are making visual testing of all our components through loki. This storybook add-on allows us to make interaction before making a screenshot of our tested components.
For example a tooltip require a hover event in order to be displayed, @storybook/addon-interactions allows us to do that.
I will dig to see where could this error come from and get back to you if I find anything :)