Daily cases count is incorrect

Describe the bug
Team, starting form 03.55 pm IST today, there is a glitch in values getting displayed for Daily counts. Showing incorrect values. Please take a look. I'm using your API in my https://devdashboard.github.io
Screenshots

Should be fixed now. But if this happens again, please open an issue on the API repo instead of posting here


Multiple repeatable ArgGroups with positional parameters

Hi, I was wondering what is expected behaviour for the following code
class Issue1027 {
    @ArgGroup(exclusive = false, multiplicity = "1..4")
    List<StudentGrade> gradeList;

    @ArgGroup(exclusive = false, multiplicity = "1")
    List<StudentGrade> anotherList;
}

Issue1027 bean = new Issue1027();
new CommandLine(bean).parseArgs("Abby 4.0 Billy 3.5 Caily 3.5 Danny 4.0 Frank 3.5".split(" "));

The current master branch will throw a MaxValuesExceededException, and if I modify the condition to skip fully matched GroupMatchContainer, it will throw a UnmatchedArgumentException:

Unmatched arguments from index 8: 'Frank', '3.5'

It turns out anotherList[0] is filled with {Abby, 4.0}, and the last StudentGrade is unmatched.
If the multiplicity of anotherList is set to *, then gradeList.size() == 4 and anotherList.size() == 5 with no exception thrown.

Since there’s no group configured to capture the 5th occurrence, a MaxValuesExceededException sounds about right.
That said, I am looking at some other additional edge cases for #1027.
ArgCount also includes options, so the current solution doesn’t always work. I’m thinking to enhance GroupMatch and GroupMatchContainer to make them do fine grained position tracking...

Agreed, GroupMatch and GroupMatchContainer indeed need some enhancement to completely fix the issue.
On a side note, I am running SpotBugs on picocli and found some minor issues (possible NPE, inefficient calls), would you love to have a PR to address these? No behaviour will be changed. (except possibly less NullPointerException)

Yes please!


Create openapi-appengine.yaml

Have you verified this works? If it's for appengine we should be able to add testing to the existing deployment tests!

I don't think a new test is necessary. This is a cosmetic change that makes the code more accurately follow the Endpoints on App Engine quickstart.

This is a copy of openapi.yaml, with the host field changed. @p-buse will add a comment to the existing openapi.yaml instead


merge from arlac77/template-github,arlac77/template-kronos-component

.github/workflows/ci.yml

chore(deps): add 14.10.0 remove 14.9.0 (jobs.build.strategy.matrix.node-version)

.github/workflows/update_readme_api.yml

chore: add 14.10.0 (jobs.update_readme_api.steps.with.node-version)

Codecov Report

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

@@           Coverage Diff           @@
##           master     #885   +/-   ##
=======================================
  Coverage   96.22%   96.22%
=======================================
  Files           2        2
  Lines          53       53
  Branches        2        2
=======================================
  Hits           51       51
  Misses          2        2

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 801424d...81cd8b1. Read the comment docs.


Configure as virtual controller - potential vJoy alternative?

I've been working on a robust Twitch Plays bot, which utilizes vJoy, a virtual controller driver for Windows. The bot feeds inputs to vJoy to make it "press" buttons. For example, setting "button 0" causes it to press that button, and when mapped to an emulator or other game, essentially allows playing a game with it.
The bot itself runs on Linux, but since vJoy is Windows-only, inputs won't work on any other platform. To solve this, I've been looking for virtual controllers and came across MoltenGamepad. However, after reading through everything and giving it a brief test-run myself, I'm still not sure if it can act as an alternative to vJoy and want some advice since I'm not experienced with it.
In short, I want to know if MoltenGamepad can do the following:

Configure up to 4 virtual controllers recognized by the OS
Set up to 6 axes on each controller
Set up to 32 buttons (or more) on each controller with numerical names (Ex. "Button 0")
Handle pressing/releasing inputs through code and without an existing device

After all my searching, MoltenGamepad looks to be the most solid virtual controller I can find for Linux, and I greatly appreciate any help!

Not sure if you could make a software based system to handle that kind of mapping in MoltenGamepad. Your main requirements would likely be doable when using a physical device.

I ended up taking your advice and writing a C program to create virtual gamepads in uinput, and everything is working great.
I searched for a software-based virtual controller on Linux for a long time with no luck, so here's my simple implementation to help anyone else in the future looking for this.


Update description for ID field

Resolves #10

Thank you @mdanish-kh. Choosing id was a personal choice to not confuse it with display name or version name. As version names are set with --name flag in CLI.
I plan to revisit this sometimes in future and align all fields with CLI and API equivalents.


Can Callback function return dom element also?

$scope.menuOptions = [
['Copy Url', function ($itemScope) {
console.log($itemScope.element);
}]
];
Is it possible to get the element?

It's now passed as a parameter in the callback (you can't get it from the itemScope). See the updated README.md


Reference error when dev-phone-ui is run

Hi @ayyrickay,
Problem:
I've come across another bug when dev-phone-ui is run within the frontend env. The issue is not happening when the app is run with twilio dev-phone. and also it does not happen every time.
Here is the error in the console:
PhoneNumberPicker.jsx:48 Uncaught (in promise) ReferenceError: selectedPn is not defined
    at _callee$ (PhoneNumberPicker.jsx:48:19)
    at tryCatch (PhoneNumberPicker.jsx:2:1)
    at Generator.eval (PhoneNumberPicker.jsx:2:1)
    at Generator.eval [as next] (PhoneNumberPicker.jsx:2:1)
    at asyncGeneratorStep (PhoneNumberPicker.jsx:2:1)
    at _next (PhoneNumberPicker.jsx:2:1)
    at eval (PhoneNumberPicker.jsx:2:1)
    at new Promise (<anonymous>)
    at eval (PhoneNumberPicker.jsx:2:1)
    at numPicker (PhoneNumberPicker.jsx:48:16)

Here is the function which is causing the trouble (it is using the state from the component):
https://github.com/twilio-labs/dev-phone/blob/ae08110f3d551b2fbd12c980268df7b2c65aa174/packages/dev-phone-ui/src/components/PhoneNumberPicker/PhoneNumberPicker.jsx#L49-L79
Solution:
I would either move this function underneath the states or pass the states/setStateActions as params.
Also IMO it would not be a bad idea to move all the smaller functions at least into the sibling file with the suffix *.util/helper.ts. I can see there is a similar issue for the backend: #43
Let me know what you think and I can make the changes after I will have permission for the push.
Edit 1: The issue is not happening every time, but most of the time. I use the latest Chrome on the latest MacOS.

Good find. Looks like this is the same issue as what I encountered in #176.
I think this has always been one of the hardest parts of the code base to reason about. I agree that passing the selectedPn variable explicitly is a good idea here. That could also give us the opportunity to give the variable a clearer name that articulates what it's doing in relation to this function.


Turn on version.go except for -v check

Currently podman -v does not work but the other version checks all pass.
enabling tests to that we can get more tests running in CI.
Signed-off-by: Daniel J Walsh<EMAIL_ADDRESS>

LGTM

/lgtm


Empty values found on the CSSE data

The recent data has unfortunate empty values; therefore, it causes an internal error
https://github.com/CSSEGISandData/COVID-19/issues/286

This should do the trick
https://github.com/nat236919/Covid2019API/commit/d0896dd1084b8fe5e7a5cc4263cd0af925b4eb2a


Flow: fix few FlatList issues

Summary
This PR fixes the two suppressed Flow issues marked as errors.
I'm not sure if viewabilityConfig fallback to empty object is the best solution, maybe the viewabilityConfig type should be adjusted instead. I'm looking for feedback for this change.
Introducing those fixes also exposed one more Flow issue with props spread, but after a bit of research on Diff I was able to fix it too.
Changelog

[General] [Fixed] - Flow: fix few FlatList issues
Test Plan
Successful yarn flow check run.

@lunaleaps Can you also look at this PR? 🙂


This error originates from a subprocess, and is likely not a problem with pip.   ERROR: Failed building wheel for pyjq

Please mention the following:

What command was run? pip install -r requirements.txt
Are you working out of a virtualenv environment, Docker, or something else?virtualenv
While running this command, I am getting failed building wheel for pyjq

For me, this problem occurred because my Python 3.12.3 on Ubuntu 24.04 didn't have lib2to3 installed anymore. I fixed it with sudo apt install python3-lib2to3.

same issue here

Hi @suprajasutti, I've resolved this error by following these steps:

Install necessary packages:
sudo apt-get install autoconf automake libtool
Install pyjq
pip3 install pyjq - This installs pyjq version 2.6.0 without any issues.
Update requirements.txt:
Replace pyjq version with pyjq==2.6.0
Reinstall dependencies:
pip3 install -r requirements.txt

Please ensure you execute these commands within the virtual environment created for cloudmapper.
Let me know if this fixes your error.

Same error on macos m3.
`
Getting requirements to build wheel ... error
error: subprocess-exited-with-error
× Getting requirements to build wheel did not run successfully.
│ exit code: 1
╰─> [40 lines of output]
:34: SetuptoolsDeprecationWarning: The test command is disabled and references to it are deprecated.
!!
          ********************************************************************************
          Please remove any references to `setuptools.command.test` in all supported versions of the affected package.

          By 2024-Nov-15, you need to update your project and remove deprecated calls
          or your builds will no longer be supported.
          ********************************************************************************

  !!
  Traceback (most recent call last):
    File "/Users/az/Slmn/tmp/cloudmapper/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 353, in <module>
      main()
    File "/Users/az/Slmn/tmp/cloudmapper/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 335, in main
      json_out['return_val'] = hook(**hook_input['kwargs'])
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "/Users/az/Slmn/tmp/cloudmapper/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 118, in get_requires_for_build_wheel
      return hook(config_settings)
             ^^^^^^^^^^^^^^^^^^^^^
    File "/private/var/folders/zz/1dl16zh96ds00ydgls8s08k80000gp/T/pip-build-env-q8gw5y53/overlay/lib/python3.12/site-packages/setuptools/build_meta.py", line 332, in get_requires_for_build_wheel
      return self._get_build_requires(config_settings, requirements=[])
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "/private/var/folders/zz/1dl16zh96ds00ydgls8s08k80000gp/T/pip-build-env-q8gw5y53/overlay/lib/python3.12/site-packages/setuptools/build_meta.py", line 302, in _get_build_requires
      self.run_setup()
    File "/private/var/folders/zz/1dl16zh96ds00ydgls8s08k80000gp/T/pip-build-env-q8gw5y53/overlay/lib/python3.12/site-packages/setuptools/build_meta.py", line 503, in run_setup
      super().run_setup(setup_script=setup_script)
    File "/private/var/folders/zz/1dl16zh96ds00ydgls8s08k80000gp/T/pip-build-env-q8gw5y53/overlay/lib/python3.12/site-packages/setuptools/build_meta.py", line 318, in run_setup
      exec(code, locals())
    File "<string>", line 54, in <module>
    File "/private/var/folders/zz/1dl16zh96ds00ydgls8s08k80000gp/T/pip-install-_57vroka/matplotlib_d174e27a7cc2409ba85bb712e92009cb/versioneer.py", line 1410, in get_version
      return get_versions()["version"]
             ^^^^^^^^^^^^^^
    File "/private/var/folders/zz/1dl16zh96ds00ydgls8s08k80000gp/T/pip-install-_57vroka/matplotlib_d174e27a7cc2409ba85bb712e92009cb/versioneer.py", line 1344, in get_versions
      cfg = get_config_from_root(root)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "/private/var/folders/zz/1dl16zh96ds00ydgls8s08k80000gp/T/pip-install-_57vroka/matplotlib_d174e27a7cc2409ba85bb712e92009cb/versioneer.py", line 401, in get_config_from_root
      parser = configparser.SafeConfigParser()
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  AttributeError: module 'configparser' has no attribute 'SafeConfigParser'. Did you mean: 'RawConfigParser'?
  [end of output]

note: This error originates from a subprocess, and is likely not a problem with pip.
error: subprocess-exited-with-error
× Getting requirements to build wheel did not run successfully.
│ exit code: 1
╰─> See above for output.
note: This error originates from a subprocess, and is likely not a problem with pip.
`
I followed the installation guide exactly as it was written on reame.md.

Same error as above:
AttributeError: module 'configparser' has no attribute 'SafeConfigParser'. Did you mean: 'RawConfigParser'?


[FEATURE] Add support for PSR/Log

Add PSR/Log as dependency
Add a new SimpleLogger
Use the NullLogger per default

Helps with #461

@oliverklee would this be the direction you thought of?

So I am thinking that the logging should be taking place where the exceptions are handled (if the conditional bLenientParsing comes into play), rather than where they are thrown.  Though in cases where !bLenientParsing causes an exception to be thrown, logging should take place there (and we can later remove the throw as part of #462).

@oliverklee Any chance I could a quick 👍🏻 or 👎🏻 for this? Yes, this is a work in progress, but before I invest more time, I'd like to know if this is going in the right direction or if I'm completely off track.

@ziegenberg I regret that you didn't get feedback from us on the general direction of this PR. I'm sorry for this.
I personally am currently in a conflict in another open source project, which impacts my mental wellbeing, and I try to stick to the smaller/easier reviews during this time.
I'll do my best to write something on the architecture and direction of this PR in a few days.
Until then, please bear with me/us.

In the meantime, I've had another brief look.
I think the use of LoggerAwareInferface, LoggerAwareTriat, etc., looks perfect: exact;ly what we want.  (I just noticed you had a bunch of static methods to deal with too.  I like the solution there too.)
My main concern is the duplication where exceptions are thrown and something identical is logged.  Can the logging be done downstream, using the data from the exception where it is caught?  This would have to be reviewed on a case-by-case basis; I appreceiate, @ziegenberg, that you probably don't have 100% familiarity with the code base (neither do I, FWIW - you're probaby now as familiar with it as me; we really appreciate your top-notch contributions so far; besides the actual improvements, your involvment has, I think, helped motivate the rest of us to move this project forwards; much kudos).
HTH <3
@oliverklee, hope you resolved the disupute/conflict (hope it wasn't with me - if it was, I was unaware :) )

Can the logging be done downstream, using the data from the exception where it is caught? This would have to be reviewed on a case-by-case basis.

Sorry, I haven't had time to review the specific cases, though I suspect in most it can be.

Can wie have the introduction of the logger interfaces in solo, without any actual logging, as a separate initial pre-PR?
I feel there should be some unit testing for that, but am out of ideas right now.

I ... am out of ideas right now.

``mplementsLogger` might be one such test.

hope you resolved the disupute/conflict (hope it wasn't with me - if it was, I was unaware :) )

@JakeQZ Well, it's mostly over (though not resolved). And no, it's not with you - if there was something to resolve with you, I would do my best to let you know so we can work together to resolve it. :heart:

I regret that it took me so long to give some general feedback on this. So here we go. :-)
All classes should use the same logger instance when a document is parsed. This will allow users to get all logged warnings/errors in one place. For this, we need a class that gets the original logger instance and then passes it on to the other classes. Maybe the parser?
Also, the instance should be provided when the corresponding classes are instantiated so the desired logger will be always available. (I think for the parser, it's fine to start with the NullLogger by default and allow setting a different logger later.
Also, maybe it would help if we split this up into smaller PRs to get this reviewed and merged faster:

introduce the NullLogger and provide it to the classes
add the non-null logger
actually log stuff

We also need to either allow the logger getting set via dependency injection (particularly, Symfony DI), or at least paint us into a corner with our API DI-wise.

All classes should use the same logger instance when a document is parsed ... For this, we need a class that gets the original logger instance and then passes it on to the other classes. Maybe the parser?

I think the Settings class can handle this.  The logger instance can be added as a property of that.

Also, the instance should be provided when the corresponding classes are instantiated so the desired logger will be always available.

An instance of ParserState is passed around everywhere during parsing.  This has a getSettings method.

(I think for the parser, it's fine to start with the NullLogger by default and allow setting a different logger later.)

If the logger instance is a property of Settings, it can be switched midway through parsing, or later, if the various classes are referencing the Settings (if they need to) rather than the logger directly.  (If that's what you meant.)

2. add the non-null logger

Should we be providing a non-null logger in the release package?  Shouldn't users be providing a logger of their choice (from a library)?  For development/testing, is there some kind of mock/testing logger available that plays well with PHPUnit?

Should we be providing a non-null logger in the release package? Shouldn't users be providing a logger of their choice (from a library)? For development/testing, is there some kind of mock/testing logger available that plays well with PHPUnit?

I think packaging the NullLogger should be enough. We can use our non-null logger in the tests (and move it the the testing namespace/folder, e.g., some Fixtures folder).

I think the Settings class can handle this.  The logger instance can be added as a property of that.
…
An instance of ParserState is passed around everywhere during parsing.  This has a getSettings method.

Having the logger attached to the Settings class doesn't feel right to me. Logging is not part of configuration. Having it attached to the ParserState sounds okay to me.

I think packaging the NullLogger should be enough. We can use our non-null logger in the tests (and move it the the testing namespace/folder, e.g., some Fixtures folder).

Agree.

Having the logger attached to the Settings class doesn't feel right to me. Logging is not part of configuration. Having it attached to the ParserState sounds okay to me.

This is debatable (in the literal sense, asking a philosophical question).  I'm happy either way.
I the practical sense, I don't think it makes much difference, as ParserState is always available during parsing, and we are primarily, for now, only interested in logging parsing issues.  However, the library also provides for manipulation of the CSS objects after parsing (though, offhand, I'm not sure a Settings object is any more readily-available then); this is worth bearing in mind but I don't think anything of particular concern for the time being.

@sabberworm, does what we're saying seem reasonable approach-wise?  (Not asking for specific code changes review at this stage, but if you spot a flaw in the plan, that would be good to know.)


Move agents handling out of tornado request handler

It's not necessarily tight with request handler, by moving
it to the outter scope, it is possible to re-trigger agent
processing during verifier startup.
Resolves: #393

It's weird that CI is failing on pylinting, but the code it's complaining about (registrar_common.py) isn't being touched here:
32.25s$ make check
scripts/check_codestyle.sh
************* Module keylime.registrar_common
keylime/registrar_common.py:332:20: W0707: Consider explicitly re-raising using the 'from' keyword (raise-missing-from)
keylime/registrar_common.py:376:20: W0707: Consider explicitly re-raising using the 'from' keyword (raise-missing-from)
keylime/registrar_common.py:332:20: W0707: Consider explicitly re-raising using the 'from' keyword (raise-missing-from)
keylime/registrar_common.py:376:20: W0707: Consider explicitly re-raising using the 'from' keyword (raise-missing-from)
keylime/registrar_common.py:332:20: W0707: Consider explicitly re-raising using the 'from' keyword (raise-missing-from)
keylime/registrar_common.py:376:20: W0707: Consider explicitly re-raising using the 'from' keyword (raise-missing-from)
------------------------------------
Your code has been rated at 10.00/10
Makefile:4: recipe for target 'check' failed
make: *** [check] Error 4
The command "make check" failed and exited with 2 during .

It's weird that CI is failing on pylinting, but the code it's complaining about (registrar_common.py) isn't being touched here:
32.25s$ make check
scripts/check_codestyle.sh
************* Module keylime.registrar_common
keylime/registrar_common.py:332:20: W0707: Consider explicitly re-raising using the 'from' keyword (raise-missing-from)
keylime/registrar_common.py:376:20: W0707: Consider explicitly re-raising using the 'from' keyword (raise-missing-from)
keylime/registrar_common.py:332:20: W0707: Consider explicitly re-raising using the 'from' keyword (raise-missing-from)
keylime/registrar_common.py:376:20: W0707: Consider explicitly re-raising using the 'from' keyword (raise-missing-from)
keylime/registrar_common.py:332:20: W0707: Consider explicitly re-raising using the 'from' keyword (raise-missing-from)
keylime/registrar_common.py:376:20: W0707: Consider explicitly re-raising using the 'from' keyword (raise-missing-from)
------------------------------------
Your code has been rated at 10.00/10
Makefile:4: recipe for target 'check' failed
make: *** [check] Error 4
The command "make check" failed and exited with 2 during .

It's weird that CI is failing on pylinting, but the code it's complaining about (registrar_common.py) isn't being touched here:

NVM, I see your comment in https://github.com/keylime/keylime/pull/504 Thanks for tracking that down

It's weird that CI is failing on pylinting, but the code it's complaining about (registrar_common.py) isn't being touched here:

NVM, I see your comment in https://github.com/keylime/keylime/pull/504 Thanks for tracking that down


JDK-Tool falsely assumes extension of required tool.

Running the JDK-Tool stage on Windows assumes that the extension of the desired tool will be ".exe", while some tools are known to use other extensions, such .cmd. This can be reproduced by caching a version of GraalVM, and attempting to run the "gu" tool which results in the following error.
[INFO] --- mvn-jlink-wrapper:1.2.0:jdk-tool (call-tool) @ {PACKAGE_NAME}---
[ERROR] Can't find file: C:\Users\{USERNAME}\.jdks\graalvm-ce-19\bin\gu.exe

aqnd could you provide some example of your pom to recognize how you make a call to the "gu" tool?

I've made some improvements in 1.2.1_SNAPSHOT so you can provide specific extenstion for selected OS
<forceOsExtensions>
   <windows>cmd</windows>
</forceOsExtensions>

just provide the parameter for task where you call gu.cmd and it will be using cmd extension


Add webstorm support

In this case, add support means to publish the extension to webstorm marketplace? 🤔

Exactly

I'm gonna pick this one

@brenoepics I am not familiar with webstorm plugins. For vscode we have a separate repo.
Should I create a separate repo for the webstorm plugin?


TypeError: 'float' object cannot be interpreted as an integer

Line 125, mnist_tfrecord_mgpu.py causing float type error
steps_per_epoch = train_samples / batch_size
Should change to
steps_per_epoch = train_samples // batch_size

Thanks, I'll update the code.

Fixed in commit 6856b9e.


Make MapType Comparable

Fix https://github.com/facebook/presto/issues/2454

@cberner Thank you, comments addressed

@cberner updated with the new map encoding

@cberner thank you, comments addressed

I don't think this works because of the hash collisions. If you have two maps with the keys in different orders, they may not or may not compare equal or hash to the same value. Take a look at how MapEqualOperator works, I'd do it similar to that

@cberner Thanks you, I updated the PR

Had a few more comments, let me know when you've addressed those

@cberner thank you, comments addressed

Two more minor comments. Let me know when those are addressed

@cberner thank you so much, get comments addressed

Looks like there's a test failure in com.facebook.presto.type.TestBigintVarcharMapType could you look at that?

@cberner sure, find a bug in hash computing. get it fixed

Merged. Thanks!


spirv-fuzz transformation: Swap order of operands to commutative operation

SPIR-V has many instructions that have operands whose order does not matter, for example OpIAdd.
Add:

TransformationSwapCommutativeOperands - takes an instruction descriptor and two input operand indices.  Is applicable if these operands to the instruction are known to be commutative.
FuzzerPassSwapCommutativeOperands - considers each possibility of applying TransformationSwapCommutativeOperands in the module, and probabilistically applies some of them.

This fuzzer pass should probably be applied as one of the final passes, as there is no point swapping operands and then swapping them back.

Closed via #3205.


Dependency "LNPreviewToContextMenu" has no shared framework schemes

Hi,
I get the error "Dependency "LNPreviewToContextMenu" has no shared framework schemes" when running Carthage update.

Hello,
That's odd; the scheme is shared:

I think it was a git ignore issue.

Should work now. Happy coding!

Thanks, it works now.


Plugin command

I would like to add a command to Install / uninstall redpen plugins.

TODO: detailed specification

Features: install / uninstall / test

https://gist.github.com/takahi-i/b84e1234f2fa0b871a909d1ce7ebee44

test format https://gist.github.com/takahi-i/e24685bafc348e582863ea21eed629b6


CAVS Interrupt controller - using undefined Kconfig symbols

The following Kconfig symbols are used in drivers/interrupt_controller/cavs_ictl.c but aren't defined.
CONFIG_CAVS_ICTL_0_IRQ_PRI
CONFIG_CAVS_ICTL_1_IRQ_PRI
CONFIG_CAVS_ICTL_2_IRQ_PRI
CONFIG_CAVS_ICTL_3_IRQ_PRI

@SavinayDharmappa please take a look.

@rgundi ping


How to get raw data?

Is it possible to get the raw data?
I just want to read the CAN bus pass it directly to the serial port for a pcap log.
Thanks!

If you look at the example it will only print byte 0 of the received message, you simply modify in this way:
if ( !rxTimer ) {
while ( CANbus.read(rxmsg) ) {
Serial.write(rxmsg.msg.id);
Serial.write("-");
Serial.write(rxmsg.buf[0]);
Serial.write("-");
Serial.write(rxmsg.buf[1]);
Serial.write("-");
Serial.write(rxmsg.buf[2]);
Serial.write("-");
Serial.write(rxmsg.buf[3]);
Serial.write("-");
Serial.write(rxmsg.buf[4]);
Serial.write("-");
Serial.write(rxmsg.buf[5]);
Serial.write("-");
Serial.write(rxmsg.buf[6]);
Serial.write("-");
Serial.writeln(rxmsg.buf[7]);
rxCount++;
}

Thanks for the prompt reply. I tried that but it's missing the initial flags, length, and i think a timestamp.
The full can frame (flags + id + len + timestamp+ data)  is needed so it can be decoded properly in wireshark.   See:

The first 3 bits are the 3 flags. The bytes 0-3 (excluding the flag bits) is the id. The byte 4 is the length. Bytes 5-7 are the timestamp (i think) and bytes 8-(8+len) the rest is the data.
It can be rebuilt if all the flags and timestamp are available (RTR and Error flag are missing).
Was just wondering if there's an easy way to do this, if not I'll attempt to make one

I had a quick look to the code, in the msg  structure there are only this fields:
typedef struct CAN_message_t {   uint32_t id; // can identifier   uint8_t ext; // identifier is extended   uint8_t len; // length of data   uint16_t timeout; // milliseconds, zero will disable waiting   uint8_t buf[8]; } CAN_message_t;
I think what you need has to be implemented.

Thanks. Made some modifications to add the missing flags. Working great now.

cool, please make a pull request!


Allow specifying an order of jenkins::sysconfig resources

When passing a config_hash to puppet-jenkins from hieradata it's possible to end up with a config file which can't be parsed, for example:
JENKINS_ARGS="--ajp13Port=$AJP_PORT"
AJP_PORT=-1

It would be useful for the config_hash to respect the order of config lines, or to be able to pass in an order for the config lines.

AFAIK there is little coding to do about this since we are using create_resources and you know how puppet feels about order of resources.
On the other hand, there is literally no need to make adjustments for this. Since we ARE using create_resources, you can the default require => Jenkins::Sysconfig[AJP_PORT] for this. I created this mock in hiera:
jenkins::config_hash:
  BARFOO:
    value: '${FOOBAR}'
    require: 'Jenkins::Sysconfig[FOOBAR]'
  FOOBAR:
    value: test

I'm going to close this since systemd's EnvironmentFile won't do variable interpolation in the sysconf file.  The solution is to directly set the desired value.


How to allow push from server to repo on protected branch?

Gitea version (or commit ref):
Git version: 2.17.1
Operating system: Ubuntu 18.04
Database (use [x]):

[x] PostgreSQL
[ ] MySQL
[ ] MSSQL
[ ] SQLite

Can you reproduce the bug at https://try.gitea.io:

[x] Yes (provide example URL)
[ ] No
[ ] Not relevant

Log gist:

So I am using a deployment service (Laravel Forge) and I want to automatically push production updates back to a protected branch before I deploy new updates. I am encountering this issue though and I'm not sure what the recommended approach would be. I had this working fine in Gitlab with a protect branch and the same SSH deploy key. (write access is enabled in Gitea for this branch.)
remote: Gitea: protected branch master can not be pushed to

What is the recommend approach with Gitea for pushing updates from production back to the repo on a protected brach?

You could add a whitelist.
Deploy keys act as the repository owner so if you add the repository owner to the whitelist that should work.
(Now, that might be difficult with an organisation but let me think)
We could add another option to the protection to allow writing deploy keys to push.

I solved this by adding my individual key (as organization and repository owner) to the server and setting .ssh/config to use that key when pushing back to the Gitea server.
The additional option sounds like a great idea @zeripath.


Cilium v1.6.0 fails to start on GKE cos_containerd images

Cilium agent fails to start because it cannot configure transparent proxying iptables rules, likely due to a missing xt_socket kernel module (and friends nf_socket_ipv4, nf_socket_ipv6).
level=warning msg="Unable to flush Cilium iptables chain" error="exit status 1" obj="[-w 5 -t filter -F CILIUM_TRANSIENT_FORWARD]" subsys=iptables
level=warning msg="Unable to delete Cilium iptables chain" error="exit status 1" obj="[-w 5 -t filter -X CILIUM_TRANSIENT_FORWARD]" subsys=iptables
level=error msg="Command execution failed" cmd="[iptables -w 5 -t mangle -A CILIUM_PRE_mangle -m socket --transparent --nowildcard -m comment --comment cilium: mark transparent proxy traffic to be routed locally -j MARK --set-mark 0x00000200]" error="exit status 1" subsys=iptables
level=warning msg="iptables: No chain/target/match by that name." subsys=iptables
level=error msg="Error while initializing daemon" error="exit status 1" subsys=daemon
level=fatal msg="Error while creating daemon" error="exit status 1" subsys=daemon

Quote from slack regarding this issue on v1.6.0:

btw we tried on regular cos image and it fails also

This will be addressed in v1.6.1.


Typo: Replace French words by English ones

:smile: thanks!
Looks bon for moi!
/cc @vdemeester

LGTM 🐯


#1363 - Corrects permissions allowing HTTP Cache to write to the JCR …

…Cache space under /var/acs-commons/httpcache

Coverage remained the same at 40.271% when pulling 54d29feeaa23bc9f1e546b3e09ad1c8ab3ee0f8b on davidjgonzalez:feature/1363 into c2f99a5d44dff2e6f5a7be8f39fc5017fe7b4c5c on Adobe-Consulting-Services:master.

Thanks david!!


UP-4424: Changed footer to be sticky; added top padding to header; removed styles from skin.less

https://issues.jasig.org/browse/UP-4424
A number of small UI changes:

Made the footer sticky (so if content height is less than the height of the viewport, the footer will always remain at the bottom of the viewport) (screenshot below)
Moved anchor styles from styles.less into navigation.less
Added top padding to portal-header (to pull notifications icon down from the edge)

:+1: . We did this at first, but ran into issues on small screens. Basically it makes the header/footer take up majority of the screen.  I wrote up a simplified version of our solution on jsfiddle. http://jsfiddle.net/ys3n2nna/
If you want to see what happens when you have a lot of portlets just add a bunch of .box divs.

Thanks!
We are having this problem with favorites in the sidebar, especially if
there are too many links there.
Cindy Duggan
Manhattan College
On Tue, Mar 17, 2015 at 9:35 AM, Tim Levett<EMAIL_ADDRESS>wrote:

[image: :+1:] . We did this at first, but ran into issues on small
screens. Basically it makes the header/footer take up majority of the
screen. I wrote up a simplified version of our solution on jsfiddle.
http://jsfiddle.net/ys3n2nna/
If you want to see what happens when you have a lot of portlets just add a
bunch of .box divs.
—
Reply to this email directly or view it on GitHub
https://github.com/Jasig/uPortal/pull/529#issuecomment-82355292.

I've added a pull request which addresses the issue with the sidebar. It seems that the Bootstrap collapsible navbar has a default max-height property set, which was causing a problem for the containing div not to resize when new links were added to the 'Favorites' portlet. You can find it here:
https://github.com/Jasig/uPortal/pull/531

@doodelicious if the portal content is larger than the vertical viewport size, is the footer pushed down so the content takes up the viewport or does the footer always cover the bottom of the screen?

@jameswennmacher There isn't a problem with the content being longer than the viewport, as the properties of the footer are bottom: 0; position: absolute; which pushes the footer at the bottom of the wrapper by the following properties: min-height: 100%; position: relative;
However, your comment brought up another issue (slightly unrelated). The height of the uPortal footer is varied based on how many tabs and how many portlets each tab contains. This is a problem, because as of this writing there is no reasonable variable height sticky footer solution that does not involve jQuery or a pure CSS solution that [supports IE8+] (https://wiki.jasig.org/display/UPM41/Supported+Web+Browsers). A variable sticky footer solution is available using [CSS flexbox] (http://stackoverflow.com/questions/9126777/keep-footer-with-variable-height-on-bottom), but at this time IE11 is the only IE browser that supports flexbox.
The solution I wrote is for a fixed-height footer only; meaning, the footer height can be set using the LESS variable @footer-height, which is also used to set padding-bottom to the wrapper, clearing the space needed for the footer content.
My suggestion is to reject this solution for now. I will document the Jira ticket with this issue and once we update the browser support list, this is something that can be implemented in master. If other adopters prefer a fixed-height footer, this is a solution they can use to implement one.

A lesser but uncomplicated/uncontroversial fix was distilled from this PR and merged out-of-band.


Dynamic connection String

Hi,
Is it possible to have a dynamic connection string for entitygraphql? I want to connect to two different databases say A1 and B1 Dbs, The models are same for both dbs. I would like this db name to be passed somehow and read that value and use connection string accordingly. I can maintain multiple connection strings for the same in config json file.
But my question is that how can we pass this value in entitygraphql? I would like to pass it as a header or within body.
If there are alternative ways also, please help on that.

EntityGraphQL doesn't do the connection to the DB. It just builds expressions against an object graph, which can be a EntityFramework context.
You will have to work with EF and ASP.NET to solve this.
You will likely need to implement the controller yourself and resolve the right EntityGraphQL or context based on a header etc.
[Route("graphql")]
public class QueryController : Controller
{
    [HttpPost]
    public async Task<object> Post([FromBody]QueryRequest query, [FromServices]IServiceProvider serviceProvider, [FromServices]ISchemaProvider<MyBaseContext> schemaProvider)
    {
        var dbContext = serviceProvider.... // read header and figure out the right DbContext to fetch.
        var results = await schemaProvider.ExecuteRequestWithContextAsync(query, dbContext, HttpContext.RequestServices, null);
        // gql compile errors show up in results.Errors
        return results;
    }
}

you could register 2 DbContexts each set up for different connections and 1 schema provider or register 2 schema providers for each DB context/connection and look that up.
There may be a better/different way to dynamically change connection strings in asp.net but I do not know and it sits outside this library.

Hi,
I am looking for an answer how we can pass the database name while executing this app. WE have only API body which will accpet query{}....I am looking for an option to send the value through header or body or some other ways....
If we pass through header, whats the format,...and how can we read the header value in code.

If you use the default endpoint the dbcontext is created via dependency injection, this means you can basically register a custom factory to create your dbcontext for you reading any value you like.
eg it's pretty normal to do something like this
    services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer("name=ConnectionStrings:DefaultConnection"));

you could set the connection string to anything you have access to in that scope.
you could also register a dbcontextfactory instead
public class DbContextFactory : IDbContextFactory<DbContext>
{
    private readonly IServiceProvider provider;

    public DbContextFactory(IServiceProvider provider)
    {
        this.provider = provider;
    }

    public DbContext CreateDbContext()
    {
        if (provider == null)
        {
            throw new InvalidOperationException($"You must configure an instance of IServiceProvider");
        }

      var httpContextAccessor = provider.GetService<IHttpContextAccessor>();

    var headerIfno =  httpContextAccessor.HttpContext.Request.Headers["blah"]
        return new DbContext(headerInfo);
    }
}

essentially it's an EFCore/ASP.NET iss you're facing not an EntityGraphQL one.
https://learn.microsoft.com/en-us/ef/core/dbcontext-configuration/

Its not an issue. I am checking if there is an option within the API to pass connection string information like db name.
While querying the API, if i can pass the db name i body or header, Is that possible??
Or If we can have differernt end points say https://:8080/graphql/A1 or https://:8080/graphql/B1....If I have different end points, how can I read A1 and B1 and set my connection string accordingly.

This library never sees the connection string - you have to do similar to the above suggestions.
If you passed it in the GraphQL query it would be too late - the DbContext needs to be resolved. So your only options are in the request HTTP headers as above or you can have 2 endpoints and resolve the DbContext based on those.


Add property :through and fix stack overflow in SelectorGenerator

Signed-off-by: Dane Jensen<EMAIL_ADDRESS>

LGTM


Ford: add new autonomic api

Fix https://github.com/evcc-io/evcc/issues/10260

Thanks for the quick fix. When will the next release containing the fix be released?


Fallback to ASCII encoding while loading string data with non UTF-8 data

Hi,
In my case, we have some CSV files that are non UTF-8 encoding, so I just add a little fallback check to load string data with ASCII encoding, so we could make sure to get the result image from data finally.
Thanks for this awesome library!

@KeanuPang Thank you for your contribution! In my personal talk, this is my first time to receive pull-request from others, so I am very excited now.
As for your change, I am a little bit unclear about how csv file this problem will happen to, but your code does not affect to the csv file which is encodable with utf-8. So I approve this pull-request. Thank you ! :)

There is a legacy system that generates CSV files as my data source, the files are not necessarily encoded in UTF-8 (unknown encoding), fallback to ASCII encoding to ensure that results can be generated.

(We know there is wrong encoding in that file, but we have to generate the result anyway, so... 😂😂)

Finally, I would like to pick up you as a contributor at the next relase-note on GitHub. Could it be okay ?
Like the following image, I am going to announce your work if you are akay.

OK, Its my pleasure! 🙏❤

@KeanuPang
Thank you for your detail response !
I see 😊👍


add new exit code to sdk (INSUFFICIENT_PRIVILEGES 109)

Did y'all want to add back 110 too?

Also would you add to our docs as well https://docs.preludesecurity.com/docs/understanding-results

Did y'all want to add back 110 too?

cc'ing @smprelude on this one. I don't think we should i can make the pr to remove it from endpoint if Scott agree's. if not we should discuss re-definition as its defined as being health check related really.

let's not necro 110. health-check style tests aren't in active production and so there won't be any reason to have it save for backwards compatibility with old test assets that utilize it.

let's not necro 110. health-check style tests aren't in active production and so there won't be any reason to have it save for backwards compatibility with old test assets that utilize it.

After some discussion. We should have it on until we refresh / update the agent potentially so I will add it back.
We do have tests that use it currently.


Support for Air Purifier 3/3H (zhimi.airpurifier.mb3)

Today, I got the newest Xiaomi's Air Purifier delivered - it's Xiaomi Air Purifier 3/3H (and identifies itself as zhimi.airpurifier.mb3).
Soon after, I found out it's not supported by miio yet (and therefore neither by Home Assistant which I use).
I'm a developer myself and happy to contribute & implement the support for it. I'll try to work on this in my spare time (kicking off by reading instructions here https://github.com/aholstenson/miio/blob/master/docs/missing-devices.md).
If somebody else has this device, I'd be happy to collaborate on the implementation.

Related efforts:

https://github.com/rytilahti/python-miio/issues/543
https://github.com/YinHangCode/homebridge-mi-airpurifier/issues/36

I'm now to turn ON/OFF the device:
miio protocol call <IP_ADDRESS> set_properties '[{"did":"MYDID","piid":2,"siid":2,"value":true}]' #ON
miio protocol call <IP_ADDRESS> set_properties '[{"did":"MYDID","piid":2,"siid":2,"value":false}]' #OFF

Change fan speed, e.g.:
miio protocol call <IP_ADDRESS> set_properties '[{"did":"MYDID","siid":2,"piid":4,"value":1}]' # level 1
miio protocol call <IP_ADDRESS> set_properties '[{"did":"MYDID","siid":2,"piid":4,"value":2}]' # level 2
miio protocol call <IP_ADDRESS> set_properties '[{"did":"MYDID","siid":2,"piid":4,"value":3}]' # level 3

(Big thanks to https://github.com/rytilahti/python-miio/issues/543#issuecomment-531528340 / https://github.com/rytilahti/python-miio/issues/543#issuecomment-544745035)

I just realised that Home Assistant actually uses https://github.com/rytilahti/python-miio
Closing this thread.

Petrkotek: this library is used by homebridge so if you ever need to get proper homekit integration of your 3h (as air purifier not just fan), you'll need this library then.


Suggestion: support directories on drag and drop

Hello Harold, I really appreciate your great work!
I would like to implement the ability to extract files from folders and subfolders using drag and drop.
If you don't mind, I'll start a pull request in the near future.
Greetings from Bavaria!

Hi there,
I just released the latest version for Angular v17 which includes support for dropping folders by default.
Please let me know if this helps you. I used your implementation for inspiration.
Releases

Hello there,
I just tested it, it works great! Thank you very much.
One detail i noticed is that in Chrome if you drop a folder containing more than 100 files, it just gets 100 files and not the whole content. For that issue i wrote the _breakDirectoryReaderFilesLimit* method in my Pull Request to solve this problem. It would be nice to also solve this within your solution.
It is arguably not the prettiest solution, but it does its job (maybe you are able to find a better solution):
`
private async _breakDirectoryReaderFilesLimit(directoryEntry: FileSystemDirectoryEntry) {
const reader = directoryEntry.createReader();
let resultEntries: FileSystemEntry[] = [];
const recurse = async () => {
const entries = await this._readDirectoryEntries(reader);
if ((entries).length > 0) {
resultEntries = resultEntries.concat(entries);
await recurse();
}
};
await recurse();
return resultEntries;
}
`
Thank you in  advance,
I'm looking forward to your solution!

Hi @michaelmdr,
thanks for your feedback. As stated in MDN, the readEntries() method will only return the first 100 entries.
I am just curious, what's your use case for uploading more than a hundred files using a single file input?
In my opinion, we should use an optional limit property to keep this default behaviour for users which are less involved in this topic.

Hi @michaelmdr,
I just released v17.2.0 which skips the limit by default.
After thinking about it, I decided not to create a property for this. We're basically creating a consistent cross-browser experience by ignoring Chrome's behavior here.

How to obtain the relative path of each file being uploaded?

Would be great to include file relative path information (now it is always ''). The reason this might be needed it if we need to recreate a directory structure on server.
So I had to use an ugly method for that - in fact, now the original field (formControl) is useless:(
onDropCases(event: DragEvent) {
    var items = event.dataTransfer.items;
    this.files = [];
    const traverseDirectory = (entry: FileSystemEntry, path: string): Promise<void> => {
      return new Promise<void>((resolve, reject) => {
        if (entry.isFile) {
          const fileEntry = entry as FileSystemFileEntry;
          fileEntry.file((file: File) => {
            this.files.push(this.copyFile(file, fileEntry.fullPath));
            resolve();
          });
        }
        else if (entry.isDirectory) {
          const directoryEntry = entry as FileSystemDirectoryEntry;
          const dirReader = directoryEntry.createReader();
          dirReader.readEntries(entries => {
            const promises = entries.map(childEntry => traverseDirectory(childEntry, path + entry.name + '/'));
            Promise.all(promises).then(() => resolve());
          });
        }
      });
    };
    const promises = [];
    for (var i = 0; i < items.length; i++) {
      var item = items[i];
      if (item.kind === 'file') {
        var webkitGetAsEntry = item.webkitGetAsEntry();
        promises.push(traverseDirectory(webkitGetAsEntry, ''));
      }
    }
    Promise.all(promises).then(() => {});
  }

Uhm... too much on my plate now, sorry. But the client wants drag-n-drop mechanism. Now - just a quick question: is there currently some limitation on the amount of files I can drag-n-drop. Just checked a multiselection now using a "file" mode, the folder contained 700+ files. All of them were uploaded (to memory). However, when I drag-n-droped the folder, only 100 were... I wonder what's wrong: is it my method above or something deeper in the component code...

Hi @hackingharold.
Drag-n-drop behavior was a client requirement (as usual it happens :-D).
Besides, I have noticed, that Native OS dialog does not allow selecting multiples folders (which is strange, since multiple attribute is present).
All in all, I am stick to my own custom method to handle drop event. But I've noticed, that I bumped onto the same limitation which was mentioned before, 100 files per readEntries. Does it mean I need to copy-paste the code already implemented in your library?

Yes, you cannot select multiple directories from the file picker. The multiple attribute only works for files, which is a native behavior.
To work around the file limit, I've written the readDirectoryWithoutLimit method, maybe this helps.


[ONNX] [#8838] QLinearLeakyRelu contrib op

This PR implements com.microsoft.QLinearLeakyRelu.  Ci is a little flaky :/

@gayatripk1 think you need to jostle ci once more. Ci is a little flaky :/

Done

thanks @gayatripk1


Show traffic for some operations after switching the proxy from 'Use app proxy settings' to 'Do not use proxy'

Storage Explorer Version: 1.16.0
Build Number: 20201111.5
Branch: main
Platform/OS: Windows 10/ Linux Ubuntu 16.04
Architecture: ia32/x64
Regression From:  Not a regression
Bug Description
When switching the proxy setting from ‘Use app proxy settings’ to ‘Do not use proxy’, show traffic for some actions.
Steps to Reproduce

Launch Fiddler.
Launch Storage Explorer, and configure proxy to use localhost:8888.
Open a file share -> Create a new folder.
Observe traffic in Fiddler.
Switch the proxy setting to 'Do not use proxy'.
Open the file share -> Create a new folder.
Observe traffic in Fiddler.

Expected Experience
No traffic in Fiddler.
Actual Experience
Show traffic in Fiddler.
Additional Context
This issue also reproduces for the below scenarios:

[x] ADLS Gen2: All actions except action ‘Manage Access’.
[x] Blobs: Actions except ‘Get Shared Access Signature/ Manage Access Policies/ Download/ Open’.
[x] Files: Actions except ‘Get Shared Access Signature/ Create Snapshot/ View Snapshot/ Connect VM/ Properties/ Manage Access Policies/ Download/ Open’.
[x] Queues: All actions.
[x] Tables: All actions.
[x] Managed Disks: All actions.

@v-xianya I have merged a fix for this issue. Could you please help verify it?

@JasonYeMSFT
Verified this issue on build main/20201201.3.
This issue reproduces against the table service's actions (Like: Create a table/ Generate SAS/ Add to Quick Access/ Refresh/ Add or Delete entities/ Execute Query etc.)

I found why table is not taking proxy updates.

Verified this issue on build main/20201203.3. Fixed.

Another fix has been merged for Table. I actually also fixed it for the ADLS Gen1 folder stats command.


Strapi 5

Do you plan to support strapi v5?

@yevhenskakun, we have taken over the maintainership of this project and will proceed with the update to version 5 as soon as possible.
Kind regards,
PluginPal

test

Hi @TMSchipper ,
I’ve been using the amazing Publisher plugin with Strapi v4, and I deeply appreciate the efforts of your development team!
Could you kindly share if there’s an expected migration date for Strapi v5? I’m eagerly looking forward to the new features and improvements in the upcoming version.
Thank you again for your fantastic work, and I look forward to supporting this great project further!

Hi @LinkX-shomasakamoto, thank you for your support! We will start coming week with the Strapi V5 update

Keep up the good work, looking forward to an update!


Conversions with predictable oracle prices

PegNet conversions allow unlimited volume at a predetermined price, so any case where the price is stale or predictable provides users with a free embedded option no resourced by the network. For volatile crypto-assets these options are very valuable, and users could extract about 8% per day of value from PNT holders, compounded indefinitely with no limit.
For example I ran an Excel simulation with ETH and USD pairs, using 5 days worth of price data at 10 second intervals. At 9 minutes and 30 seconds into each block, current ETH prices are compared to average prices for the block so far. If the current ETH price is higher than the average then the simulation converts any USD to ETH. If the current price is lower then it converts any ETH to USD. Otherwise it waits for the next block. I assumed the oracle price for the block converged on the average over the period
For the data period I looked at the simulation made a conversion about every 2.8 blocks and had an average profit of 15 bps per conversion. This equated to about 8% a day, or ~10x if extrapolated to a month. The results were positive (although with more variance) if I assumed oracle prices converged to a single random price over each 10 minute block, or converged to the median block price (which is closest to what I think the grading method will actually return assuming continuous polling). Although the algorithm can certainly lose in any specific conversion, any variance is pretty quickly washed away since gains and losses are realized in 10 minute blocks.
I think there are two general approaches to addressing this, both which have problems:
1. Ensure transaction requests happen before OPR mining. The most obvious way to do this is to process conversions in the next block, but that requires users waiting up to 20 minutes.
2. Force miners to converge on prices near the end of the block. This strategy has its own issues, because even if you define the target as prices at minute 9, or example, it's in miners' interest to continue mining in the first 9 minutes at the most recent available price, since this is their best prediction for the minute 9 price and the alternative is idling.
One possibility would be to include in the hash an externally verifiable, public, random value that appears in minute 9. For example you could force OPRs to include the POW value of the next Ethereum block mined after minute 9. That would be difficult to implement, adds dependencies on another blockchain, and adds a ton of complexity.
I don't know the best solution, but I think one needs to be found before pM2, and possibly at least discussed before pM1 is complete.
EDIT: Related to issue 187

2. Force miners to converge on prices near the end of the block. This strategy has its own issues, because even if you define the target as prices at minute 9, or example, it's in miners' interest to continue mining in the first 9 minutes at the most recent available price, since this is their best prediction for the minute 9 price and the alternative is idling.

This would leave miners with less than a minute of mining. Adding entries to factom isn't instant and has some time overhead. I haven't measured it but you'll likely have to give it at least a five second buffer for your #oprs*2 messages to be propagated through the p2p network. More if the network is busy, which it would be if every miner is submitting their OPRs.

We could mine twice in a block, and conversions in minute 1 to 5 are done at the prices that settle in minute 9, and prices in minute 6 to 9 settle in minute 5 of the next block.
Conversions would settle in 10 minutes, and we would be doing more mining, but that's not necessarily a bad thing.

@AroundTheBox I was pondering this too, and was going to write a script that would go back in the last year as a simulation. I figured this would be possible. Can you post your findings/excel somewhere?
Do you believe if we take the prices from the next block vs the current on a conversion, that would prevent the ability to do this kind of converting?

Also this conversion affects the conversion price: https://github.com/pegnet/pegnet/issues/11

I think this is interesting and compelling enough to say that the current mining approach will require 20 minutes to settle.
While mining twice in a block is easily possible, it is too complex to drop in right now, and isn't needed if we have a work around for conversions (the 20 minute settlement works for that)
A huge range of solutions are possible, but this takes time to consider.  Fees, different weightings on values to give later prices an edge over earlier prices.

Do you believe if we take the prices from the next block vs the current on a conversion, that would prevent the ability to do this kind of converting?

Yes, to formalize the issue a little bit, the conversion price will be some function of prices between:
St - The mining start time
Et - The mining end time
We'll call Ct the conversion request deadline time.
Right now there's a long period between St and Et, allowing for significant price movements over the period. Because Ct is roughly equal to Et, users can predict the oracle price and compare it to current prices and execute on an embedded option.
One way to solve the problem is to change the function to somehow weight prices near the end of the period, but I can't think of a way to do that. Another way is to significantly shorten St to Et period, but as Who pointed out that has other problems.
The only way to guarantee users can't take advantage of price information is to require Ct to be before St. With the current setup that means processing transactions in the next block.

Can you post your findings/excel somewhere?

I stuck a 3 day subset of the data in the attached Excel file. The larger set I was looking at was non contiguous and it's simpler not to worry about the breaks. It's nothing fancy, but you can copy any column you want from the "block data" tab into the conversions tab. So for example you can pick a random trial and drop it in and it will act as if the oracle prices converged to that result. It's also really easy to add a gap threshold or transaction costs or whatever you'd like to columns F and G in the trading tab, but it won't really impact the conclusions.
I also left Bitcoin data if you want to experiment with that as well. You can get a very small boost from finding 3 way conversions between BTC, ETH, and USD, but it's smaller than you'd think because BTC and ETH are so heavily correlated over short time frames.
Also note in the trading formula that the current price has no impact at all on the conversion except as a information on whether to convert or not. In the end the oracle prices are all that matter, but the next block's oracle price is correlated more heavily with the current price than it is the last block's oracle price. That's where the information advantage is actually realized.
Stale OPR Trading Data.xlsx

thanks @AroundTheBox for providing the 3 day data.
I just ran a very simple arbitrage script on the data that followed two very simple rules:

If at minute 9, BTC is worth more than 9 minutes ago, convert all USD to BTC
otherwise, convert all BTC to USD

I started with $100 and after three days ended up with $179.12 minus $1.85 worth of transactions. There's no way this is a feasible system.
Not processing transactions until the next block is an unfortunate solution from an UX standpoint but it would fix the problem.
Another potential solution that no one has brought up is transaction fees. The fees could be recycled to the miners to give additional incentive. I tried it with both a 0.1% and a flat 5 us-cent fee, and both broke my arbitrage script, so it likely doesn't have to be very high.

Another potential solution that no one has brought up is transaction fees. The fees could be recycled to the miners to give additional incentive. I tried it with both a 0.05% and a flat 20 us-cent fee, and both broke my arbitrage script, so it likely doesn't have to be very high.

Fees would help the issue, but not fix it. Even for a very high fee like 20 bps, if you set your script to only trade when the difference is above the fee you'll still see a decent profit.
Processing transactions in the next block helps from a process perspective, but as you said has drawbacks from a UX perspective and could have big impacts on appetite for arbitrage. An arbitrager would be trading spot prices on an exchange against processing through the protocol at an unknown price at least 10 minutes into the future. As a result pure arbitrage would no longer be possible.
I don't think there are any easy answers.

How does a commitment to conversion prior to Oracle data settlement not fix the issue?

With your proposed method I'd just check every minute 4.5 and minute 8.5 to see how spot prices compare to predicted OPR prices. I haven't done the math but I bet I'd get similar results. Two OPRs per block allows for less profit per transaction but twice the transaction opportunities. The only way to ensure you can't take ever take advantage of the protocol is to require that transactions happen before the start of the OPR mining period.
Besides UX being worse, I'm saying an issue with requiring the wait is it kills any opportunities for pure arbitrage as described in the whitepaper. If pBTC is trading for $1,050 on an exchange while BTC is at $1,000, an arb trade is to sell my pBTC on the exchange and convert pUSD to pBTC through the protocol. If we force waiting a block, however, I end up selling pBTC on exchange at current prices while my conversion will happen at a future unknown price. On average it will still be profitable, but it's no longer the risk free arb opportunity I think you're hoping will attract liquidity providers.

But can't you do that with simple trades on an Exchange?  Guess that the price isn't going to change for 30 seconds?  Most arbitrage has to deal with slippage on trades between exchanges, so it isn't risk free.
As you approach a boundary where you are pretty sure the price isn't going to change much, you can arbitrage on that basis against a token off its peg on an exchange.  And traders can do that even with the 20 minute max settlement, because they can do a conversion in minute 9 of one block, and the prices of minute 0 (or minute 1) will not likely change so much, even if 10 minutes are required to see the settlement.

A very good off peg price on an exchange isn't going to carry that much currency risk even earlier, as PegNet conversions (at least in the beginning) isn't going to move the market on real exchanges.

...because they can do a conversion in minute 9 of one block, and the prices of minute 0 (or minute 1) will not likely change so much, even if 10 minutes are required to see the settlement.

Great point. OPRs converging to prices at the beginning of a mining period is a liability with conversions in the same block, but it's an asset with conversions submitted the block before.

Right, so as long as we create two conversion points (minute 5 and minute 9) then I think this solves the issue, and gives two good points for arbitrage.  We would need a data element in minute 5 to prove the prices were collected in minute 5.  Right now that doesn't easily exist.  Until then, we realize that arbitrage will be safer towards the end of the block.

Also, arbitrage is quite complex. Simple arbitrage is relatively risk free, but there are other strategies that gain more return for more risk. I'm not deep enough into the process to make strong statements, but I do get the sense that the liquidity in the PegNet for the conversion of assets benefits the process.  Particularly with assets that otherwise would have very little liquidity in some markets.

I've been thinking the more-than-once-per-block approach and I'd like to pitch the following idea:
Part One: One Entry, Multiple OPRs
More OPRs mean both more TPS required as well as a higher cost of mining. If we replace the massively bloated JSON format with binary, we could fit multiple OPRs into a single factom entry. We would lose human readability in the factom explorer but gain a lot of additional space.
What the OPR (a factom entry) would look like:
ExtId[0] = Nonce0
ExtId[1] = Nonce1
...
ExtId[X] = NonceX
Content:
    32 bytes    payout address in bytes (decoded base58 address)
    variable    id as string
    4 bytes     height
    32 bytes    winners (sha256 hash of the previous 10 winners)

    assets {
        256 bytes   the 0th list of 32 assets with 8 bytes per assets
        256 bytes   the 1st list of 32 assets
        ...
        256 bytes   the Xth list of 32 assets
    }

The formula if we wanted to write our own binary format would be:
       asset data          nonces          overhead
(#assets * 8 * #oprs) + (#oprs * 8) + (32 + 32 + 4 + #id)

For 3 samples per block and 32 assets, that'd be 860 + space for factom's overhead and the miner id.
If we used protobuf, there'd be some additional protobuf overhead. I wrote a sample and with a 20-byte miner id, the protobuf was 911 bytes vs the 880 theoretical minimum. Protobuf is however highly compatible with all other programming languages.
Part Two: How would it work?
The difficulty continues to be the first 8 bytes of LXRHash(SHA256(data) | nonce).
Each section has its own difficulty. Miners would:

Start mining a nonce0 for base0 = SHA256(payout | id | height | winners | 0th list of assets), starting at minute 1
At the next breakpoint, get your highest difficulty and now start mining nonce1 for base1 = SHA256(base0 | nonce0 | 1st list of assets)
At every breakpoint X, mine nonceX for baseX = SHA256(baseX-1 | nonceX-1 | Xth list of assets)

This approach would force miners to mine these records sequentially, since X depends upon data from X-1. If we now grade that OPR like before, only we compare all X breakpoints at once, miners would have to spend equal time on all sections in order to maximize their difficulty for each breakpoint. This would make the grading algorithm a lot harder but filtering by deviation should still work.
Part Three: How many breakpoints
At 1 EC, the most we can do with 32 assets is three: at minute, ie at minutes 1-3, 3-6, 6-9.
In order to have one opr per minute (9 total), we'd need 3 EC. (theoretical 2464 bytes, protobuf 2532 bytes, each with a few bytes of factom overhead).
To have 9 entries and 2 EC, we'd need to drop down to 25 assets.
To have 9 entries and 1 EC, we'd need to drop down to 10 assets.
To have 4 entries and 1 EC, we'd need to drop down to 26 assets.
We can do 4 entries and 2 EC with 32 assets. (~1182 bytes)
Part Four: Transactions
Transactions would be subject to the price for the factom minute they were submitted in for that block. This would present a problem if we ever have a block that doesn't have any winners, though.
Anyway, just wanted to provide this as an alternative to submitting multiple factom entries per block. Doing it in one go is possible and you can soft-enforce miners to mine each breakpoint for an equal amount of time.

Wow. Really interesting proposal. The technical points on format of the binary are beyond me, but I have a question on how you'd grade the final resulting difficulty.
With a single breakpoint per block, mining is linear in that if I have 10 times the hashpower I should expect 10 times the payout.
How are you proposing we calculate the difficultly with two breakpoints per block, for example? If you sum the difficulty or use a minimum threshold per block I think you get nonlinear results, where with 10 times the hashpower I might expect 100 times the payout. This would of course quickly lead to centralization.

I really like the increases resolution of the 1min vs 10min between prices.
I was assuming the payout is still 5k per block, where the winner has to win the overall across all 10 breakpoints. We'd have to tighten down the grading for sure.
If we took the average hashpower across all 10 breakpoints, than if you mine super hard on 1, it doesn't leave you much time for another. But I think we'd have to see the discovery rates to see what the best way to prevent over mining 1 min on purpose to rank higher. Maybe take the quartile ranges to exclude like the top 3 difficult breakpoints, and average the rest? Whisker box plots can get rid of outliers pretty easily.

Emyrk,
I don't think you can just add or average the hashpower for each segment because a mining pool or large entity can easily dominate and the protocol will either quickly centralize or be 51% attacked.
Right now if you have 5 times the hashpower as me you'll get a higher PoW score than me 5 times as often, just as you'd hope. With the average of PoW scores over 10 segments/breakpoints, if you have 5 times the hashpower as me you'll get a higher PoW over 99.9% of the time.
One solution would be to grade and payout for each segment individually, although as usual this creates its own problems.

How are you proposing we calculate the difficultly with two breakpoints per block, for example?

Part Five: Grading & Difficulty
Right now we're already grading 32 different assets. There shouldn't be any functional difference if we start grading 64, 96, etc. Grade all sets of assets at the same time using the current process and then one entry wins and decides the prices-per-section for that block.
I don't think we should have a separate winner for every minute, that doesn't make sense in my format. The point is that people can't just mine an individual section, they have to mine all sections.
For the difficulty, I would use the minimum of all breakpoints. Theoretically, mining the same amount of time for every section will result in a similar difficulty, in which case the minimum is okay. If someone wants to spend more time mining a section because they want a higher difficulty, it leaves them less time to mine the next section, which increases the likelihood they get an even lower difficulty there.

Right now if you have 5 times the hashpower as me you'll get a higher PoW score than me 5 times as often, just as you'd hope. With the average of PoW scores over 10 segments/breakpoints, if you have 5 times the hashpower as me you'll get a higher PoW over 99.9% of the time.

99.756% :cat:
I agree that taking the average of 10 entries eliminates a lot of the variance, which is not good.

I think taking the minimum PoW across the segments has the same issue as taking the average, where with 5x the hashpower you'll beat me... lets say over 99% of the time.

I think taking the minimum PoW across the segments has the same issue as taking the average, where with 5x the hashpower you'll beat me... lets say over 99% of the time.

Can you elaborate? My thought was that taking the minimum difficulty is no different than what we're doing now, which is one difficulty per factom entry.
I do think there's a different problem, though and that is that it would be harder to submit different OPRs.
In the first round, you have miners all trying to get the highest difficulty, so you end up with a top X records. In the second round, why would you ever take anything but the highest difficulty from round 1 to continue from?
Essentially you'd end up with a list of OPRs where the first N-1 sections all use the same nonce, only nonceN is different. If the lowest difficulty is somewhere in nonce0...nonceN-1, then all those records would be identical.

Let's say PoW is just rolling a 20 sided dice and the highest roll wins. I have one dice and you have 5.
Score after one trial and you'll beat me 5 times as often as I beat you. Take the minimum score out of 10 trials and how often will you beat me?
If each of your five dice (die?) was an independent entity then we'd be on an even playing field, but you get the advantage of picking your best result from all 5 dice in round 1, the best result from all 5 in round 2, etc.

If each of your five dice (die?) was an independent entity then we'd be on an even playing field, but you get the advantage of picking your best result from all 5 dice in round 1, the best result from all 5 in round 2, etc.

Just doublechecked it via a simulation and you're right. Turns out to be exactly the same as taking the average.

@WhoSoup I do like the idea of a finer resolution for the pricing. As with 10 breakpoints, a trade is only maximum 1min away from a price point (assuming miners actually poll at 1min intervals).
From @AroundTheBox's comments, it is obvious this complicates things like grading. There other side effects like bumping us out of the free tier limits for I think every data source we support. This would take a development effort to effectively rewrite the grading, update the miner, find out polling solutions.
Do you think it would be feasible to see this as a protocol upgrade? And therefore not need it at launch of pM1 (where we are focued on mining and PNT distribution). I'm not sure at what point we'd say this finer resolution is required (pM2? Future?).
Does the current worst case of 20min resolution provide any problems that someone can profit from?

To level set, I think we have time to figure this out.  I do think this can be done as an upgrade later.  It would be best to do prior to being on the exchanges, but we have some time to do so.

Tried these tests using the median instead of arithmetic mean?
Offered a few other suggestions for robust methods of statistical averaging here: https://github.com/pegnet/pegnet/issues/106
In particular Winsorizing to balance outliers: https://en.wikipedia.org/wiki/Winsorizing
Though I suspect it's not ideal, especially for smaller miners that may get lucky.

If each of your five dice (die?) was an independent entity then we'd be on an even playing field, but you get the advantage of picking your best result from all 5 dice in round 1, the best result from all 5 in round 2, etc.

Okay, I triple checked this and we're both right. Your math relies on the assumption that each miner only submits one OPR. If you only submit one OPR, then someone with 5 times the hashpower will always beat your submissions. However, this is not the case. The goal is to just get into the top 10 in order to get paid.
With my system, submitting ten OPRs would mean the first 9 difficulties are the same, but the last one contains your top ten mined in the last minute. That means in order for diff1 to diff9 containing the minimum, you'd have to find ten difficulties all better than what you mined in the first nine. Since all sections have equal time, that's not very likely.
More realistically, you end up with one entry where the minimum is in the first 9. and nine entries where the minimum is in the last entry. Statistically, that's the same as if you just ignore the first 9 sections.
I wrote another simulator that simulates this, and if someone has 5 times your hashpower, the likelihood of your best entry beating at least one of their ten entries is about 25%.

You're right, I left it at two participants because it gets really complex with more, and i hadn't fully thought through the math like you're doing now, but I think the basic premise holds that there's a network effect which makes it unsustainable. In any other PoW scheme I have no incentive to join one mining pool over another except for reliability, frequency of payout, etc. With this scheme my only incentive is to join the largest mining pool because it provides the largest expected return. The bigger the pool the larger the advantage over any other participants.
In your simulation, what's the total difference in expected payout? If the 5x miner is getting 100% of it 75% of the time and 80-90% of it 25% of the time the total must still be really high given only a 5x advantage in hashpower.

@AroundTheBox Almost all mining pools split up their rewards across the pools, so the largest pool does get the biggest reward, but it pays the most people too.  As these numbers grow, the payout begins to better fit the proportion of hashing power of each pool.
One of the other ideas was to not sort by difficulty but to promote to the top 50 a survey of the entries submitted.  So you sort by difficulty, then take the entries by difficulty, so you make 50 bins that have the same hash power.  You take a few per bin at the top, and many more OPRS in bins at the bottom, to more or less get the same difficulty in each bin.  Then take the highest difficulty in each bin.
Now a mining pool's difficulty increases the odds of winning, but doesn't exclude other pools from winning.

Paul, I agree. As long as mining pools or large entities receive payouts proportional to hashpower there's no problem. Any system with network effects, where a mining pool or large entity gets a greater payout than their proportion of hashpower, will be unsustainable. This applies even if we find clever ways to lower the effect, so if a mining pool with 30% of the hashpower gets 40% of the rewards (instead of the 90%+ we're talking about in these examples) everyone still has an incentive to consolidate into the biggest pool.
I think most schemes that have some kind of private checkpoint, where you select your best hash before continuing to the next step will have this kind of network effect, even if we change how we rank and select by difficulty.
I think the obvious solution from a PoW perspective would be to incentivize the partial OPR data to be made public at each step. If everyone can build the minute 2 OPR off of the best minute 1 hash then you basically have a mini blockchain within each 10 minute block and there wouldn't be a problem.
The way to do this would be to have payouts shared for each step in the final OPR. So as part of the segment 1 hash I include my address and publicize the partial OPR. It's then in everyone's interest to use the segment 1 OPR data since it has the best PoW score so far, even though it contains my address. The final OPR submitted could include payouts to up to 10 addresses.
Unfortunately this would solve the PoW grading but at the cost of consolidating the asset price data too early (the top 50 records would all have the same asset prices for the first 9 minutes).  The challenge is to find a system that both encourages submitting unconsolidated asset prices for each breakpoint and has expected rewards proportional to hashpower, assuming asset prices are submitted honestly.

Had some more time to think about my multi-opr and one way to make the difficulty work would be to filter non-unique nonce0s, just like we're doing now. This would force the multi-opr to have a unique nonce0 as a "starting point" (the top 10 for minute 1). Since the following breakpoints are all based on nonce0, you'd have to find an individual best result for each chain. This would mean every OPR you submit has a unique chain of X difficulties, rather than X-1 being the same. We still take the minimum from that.
The drawback is that it would be basic miners to still submit ten OPRs. We've seen LXRHash perform best at one opr per core, so an 8 core miner would likely only be able to submit 8 oprs. Personally, I think that would be an acceptable tradeoff. Mining has strong hardware requirements, it's reasonable to expect that someone just running a miner for fun on consumer hardware would not be able to reach the best conditions.
If mining pools get involved, personal miners would be shut out anyway, and mining pools would have no problems dealing with the above system.

With this scheme my only incentive is to join the largest mining pool because it provides the largest expected return. The bigger the pool the larger the advantage over any other participants.

This is the case for any proof of work system, in my opinion, though mining pools typically do take a cut. The higher the overall hashpower of the network is, the less likely an individual will be able to win. Mining pools would compete each other through their cut %. Three mining pools make up 51% of the bitcoin network.

Who, I think your proposal to require a unique nonce0 is a simple but great idea. There's still a network effect / nonlinear response to hashpower, but you're now mostly focusing it to be at the level of the OPR. This leaves a mining pool or large entity with an interesting strategy. After the first segment they should decide how many OPRs they will attempt to complete. Choose a low enough number of OPRs and you can virtually guarantee they all make it to the top 50. Choose more and you may lower the chance of each one making it, but increase your overall expected value. This is different from the current system where you just submit as many OPRs as make a threshold.
The two open questions I'm curious about (and If I get a chance I might write a simulation for) are:

In equilibrium what would be the minimum hashpower to effectively contribute, as a percent of the network? After X% you'd need to join a mining pool or you'll end up with no rewards.

Once an entity has over 2% of the total hashpower (so enough to efficiently submit at least one OPR) what advantage remains for having a greater proportion of the total network's power? There is definitely some advantage, but it might be small. For example if I'm working on segment 3 of a single OPR and I find a PoW score higher than the minimum of segments 1 and 2, there's no point in working further on this segment. I'd just idle until segment 4 starts, unless I want to risk working on segment 4 early with early prices. If I'm working on segment 3 with multiple OPRs then I would have all my resources find a PoW hash higher than the minimum for OPR 1, and then instead of idling all my resources I'd find a PoW hash higher than the minimum for OPR2, and so on. More efficient use of resources must be an advantage, but I don't know how big.

We've seen LXRHash perform best at one opr per core

Can you explain that? Maybe there's something I'm missing. From each core's perspective, why does it matter if the data it is hashing is from one OPR, a second OPR, or is shifted halfway through the segment?

an 8 core miner would likely only be able to submit 8 oprs

A single person with an 8 core miner would realistically be able to work on at most 1 OPR. A single OPR with 8 cores should be hundreds or thousands of times more likely to make the top 50 than 8 individual OPRs with a single core running each.

The higher the overall hashpower of the network is, the less likely an individual will be able to win. Mining pools would compete each other through their cut %. Three mining pools make up 51% of the bitcoin network.

As long as expected return is proportional to hashpower that's fine. In Bitcoin if I have 0.01% of the total hashpower I have the same expected return whether I solo mine, join a pool that has 5% of the hashpower, or a pool that has 30%. The only difference is the frequency of payment and specifics like the miner's cut.
If the return is not proportional I might have an expectation of ~0% as a solo miner and maybe 0.02% if I join the pool with 30% of the hashpower. It's not just the payout frequency that changes, but the actual expected return.

I think we should re-initiate discussion about conversions.
The current implementation of conversions creates a delay 3-11 minutes between a moment, when you create conversion, and a moment, when exchange rate for your transaction is calculated.
This makes completely unable to make arbitrage trading on Pegnet — show me an arbitrage trader, who agrees on any of 2 options, that PegNet is provided:

Unknown exchange rate (delay 3-11 minutes)
Limiting the exchange rate while create tx, but at the same time you create possibility that your conversion will never happen

As arbitrage trading is about creating 2 reverse transactions at the same time, using PegNet for 1 of this txs may result:

Losing money cause unknown exchange rate
Completing 1st leg of tx on traditional exchange, and not completing 2nd leg of tx on PegNet

This makes arbitrage trading with PegNet completely useless, cause a risk appears in any case of above, and arbitrage is about being risk-less.

I have not heard complaints from arbitrage traders either though. So there's no data at this point. Just speculation from developers and product managers :-)
I think we need to host the trading/arbitrage competition and seek feedback from experienced traders.


poetry run python -m strava_to_fittrackee.s2f --sync returning erros

Hello,
I'm running into the next problem. Set all up like in the instructions and used poetry with pyenv 3.10.10
Using virtualenv: /home/pierre/.cache/pypoetry/virtualenvs/strava-to-fittrackee-JaUpv7uk-py3.10
but poetry run python -m strava_to_fittrackee.s2f --sync returns:
INFO:s2f:No FitTrackee workouts were found, so syncing all!
Traceback (most recent call last):
  File "/usr/lib/python3.10/runpy.py", line 196, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/lib/python3.10/runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "/home/pierre/strava-to-fittrackee/strava_to_fittrackee/s2f.py", line 1189, in <module>
    sync_strava_with_fittrackee()
  File "/home/pierre/strava-to-fittrackee/strava_to_fittrackee/s2f.py", line 1095, in sync_strava_with_fittrackee
    activities = strava.get_activities(after=latest_dt, limit=None)
  File "/home/pierre/strava-to-fittrackee/strava_to_fittrackee/s2f.py", line 386, in get_activities
    custom_raise_for_status(r)
  File "/home/pierre/strava-to-fittrackee/strava_to_fittrackee/s2f.py", line 184, in custom_raise_for_status
    fifteen_usage, daily_usage = dict(r.headers)["X-RateLimit-Usage"].split(",")
KeyError: 'X-RateLimit-Usage'

I'm using Fittrackee behind traefik but all headers are forwarded correct (it also works with nextcloud what needs the headers).
Thanks!

My best guess is that Traefik isn't actually forwarding all the headers? So X-RateLimit-Usage isn't present as expected?
The strava API explicitly states that they send that header: https://developers.strava.com/docs/rate-limits/, and I haven't seen this in any of my deployments before. You'd have to debug to see what keys are present in dict(r.headers) at that point


I couldn't run

I couldn't find the launcher.

Same for me, seems like the launcher.bat is missing

There is no launcher.bat. Just double click on main.pyw


Upgraded to helm 2.15.0 fixes #102

This commit initialises our transition to the updated version of Helm
(2.15+) which should solve our old issue with yaml converting digit-only
docker image tags to scientific notation and breaks it all around.
The commit that fixes it was merged into helm v2 in version 2.15.0:
https://github.com/helm/helm/commit/9014bd9c502d92fb78bfee553abdba5cf35e878f
The PR is going to stay in draft mode until helm 2.15 stable is released.
Signed-off-by: Oleg Sidorov<EMAIL_ADDRESS>

I'm closing this PR because we had to revert the changes in Helm: both dev-v2 and dev-v3. The change caused a major regression in numeric functions (see https://github.com/helm/helm/issues/6708 for more details). Our attempt to close the breach turned into an unreasonably massive and ugly change https://github.com/helm/helm/pull/6709, which didn't look like a small fix at all. Taking into consideration potential risks, the fixing PR has been closed with no merge and the initial change reverted. There is a possibility the problem would be fixed in the future versions of Helm3 (the idea is to use reflect-based function overloads; we've made some initial progress here: https://github.com/icanhazbroccoli/helm/commit/8b359af3c3e246e90c0e3f7667be494f19d8e716, but it's not close to anything working yet). My apologies for being over-optimistic and wasting so much time on it.


More informative errors for : Requested region is outside level boundaries

Is your feature request related to a problem? Please describe.
I'm always frustrated when errors related to requested region outside boundaries does not inform what was the requested region and what were the boundaries.
Line in question:
read_region
Describe the solution you'd like
An error like raise ValueError(f"Requested region is outside level boundaries: {location}, {size}, {level_size}")
Describe alternatives you've considered
Run entirely separate script / inject logging into dlup.
Additional context
Does not occur on all slides, but usually happens when requesting a thumbnail of the whole slide at high mpp ( low zoom ).

So basically adding a little bit of information to the exception and nothing more?

Yes, exactly! Thank you for the quick response!


Add CSS tool 3rd party license file to az branch

@troettinger for approval

@troettinger Can you please approve this one as well? Needs to be added to another branch.

@bganapa Can you please merge? It's the same as the last PR that Thomas approved, just going into a different branch.


A Sample Doc for generating the Service Client Proxy code, using the NSwag CLI

Am proposing a markdown file documenting a "generic version" of a recently encountered scenario, where NSwag CLI was used successfully.
My team thinks it is good idea to re-share our learnings back here as a Sample, after collating the information from a few sources for the many supported arguments of openApiToCSharpClient, from the following locations:

This Repo's Wiki
Various searches through the Repo itself for sample.nswag configurations and test cases
The Tutorials found on: https://blog.rsuter.com/tags/#NSwag
Other forums such as: https://stackoverflow.com/questions/tagged/nswag
Other documentation such as: https://docs.microsoft.com/en-us/search/?terms=nswag

Please let me know if there is a better location or directory in the Repo than src/Samples, for adding this type of Sample Doc, or if this information is more appropriate to add to the Wiki instead.
cc:@RicoSuter

Hi @RicoSuter, as we discussed, I've moved the 'sample' docs in this PR over to a new /docs/tutorials folder.
Am proposing the 2 files be placed in a subfolder named GenerateProxyClientWithCLI.
Thank you for you time and guidance this week!


Add generic config check for required fields, including warnings for unused fields

Required config fields without valid entries should result in a meaningful error
Provided fields that are not used by the current config type should result in warnings

Check for required fields is in with v0.2.0. Warnings for unused fields is not.


Failing scraper slack notification

What does this PR do?
Sends a slack message if a scrapper fails
Description of Task to be completed?
Notification on Slack of failing scraper
How should this be manually tested?
run the following command:
nosetests healthtools.tests.test_scrapers:TestDoctorsScraper.test_scrapper_sends_slack_notification
Screenshots (if appropriate)

@DavidLemayian this PR Depends on the Indexing PR. every change there is also here but I have updated the README on this PR

@DavidLemayian this is the other branch I keep referring to. 😄

@Gathondu The #9 has caused conflicts with this. Make the pull and do the necessary.

@DavidLemayian i've handled the conflicts..we good to go

@Gathondu Have you also checked out whether this could be useful? - https://github.com/mathiasose/slacker_log_handler

I've checked this out https://github.com/mathiasose/slacker_log_handler and i noticed it uses an API KEY. From slack's documentation we need to use OAuth to get the access token and this means using a web server and I was shy to use that approach since this is just a scrapper and adding a web server just to get a token was an overkill hence the webhook approach. We could use the legacy token approach but that's for testing purposes and this is how it was posting on slack:

and I had no control whatsoever on the handle's title

@DavidLemayian I have already made the requested changes


Update $RAKER Operational Wallets

Update $RAKER Operational Wallets and ran formatter on code.

Hi @cobuscoetsee  I will close this PR and move to new one https://github.com/minswap/market-cap/pull/213


advanced pagination

Please describe the problem that your request should resolve.

Describe the solution you'd like
some variation of this

First / last
close listing
direct input
entries per apge
Is it already possible to achieve the same outcome in any other way? If so, how?

Additional context

related https://github.com/aeternity/aescan/issues/218


Update Bug

This bug is ultimately annoying - you have to uninstall the previous version manually before you can do anything. A fix is in progress.

This bug is almost fixed - A update will be posted if it its resolved.

Not sure how to fix this bug, so it will be left open - until then - Just continue uninstalling the previous version.


Stop using deprecated set-output API

set-output has been deprecated for a while. Instead, use $GITHUB_OUTPUT like this: https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#example-masking-a-generated-output-within-a-single-job.

@Eric-Arellano thank you! this is a duplicate of https://github.com/Qiskit/gh-actions/pull/43
which i just merged. i think we can close this PR. please re-open if you think additional changes are needed for this.
thanks again


Fix Alert "close" button colors on dark/light backgrounds

This fixes a visual bug which made the "Close" button on dismissable alerts hard to see or invisible in some cases (e.g. the black X icon in the alert-dark component).
Before:

Light mode:

Dark mode:

After:

Light mode:

Dark mode:

Edit:
This doesn't seem to fully work yet... Any help is appreciated

this should be .btn-close

Thanks! Updated this PR, it should be working now!

@AnTheMaker TYSM!!


Pronoun Support (will need some privacy settings) and ofc timezone support

CREATE TABLE USER_TIMEZONES(
user_id BIGINT,
timezone TEXT
)

Suggestion:
Another book column for opt in "public"

How else do you make it private if not 'private to a guild'

me:
I was going to use it universal but i suppose that make sense
I do like 0 as global so this makes things a bit easier

One moment
CREATE TABLE SINCRONI_PRONOUNS(
user_id BIGINT,
pronouns TEXT,
guild BIGINT,
)

Only options:
he/him
she/her
they/them
other
(any mix of the 4)
maybe but this is mostly due to safety


Regression: Allowing NULL as the audio spatializer is disallowing selection in the config dialog

The recent change to allow null for the audio spatializer has resulted in disallowing the setting to be changed in the configuration dialog.

I propose that we never disallow changing the spatializer, even if the setting is acceptable.

This is starting to look like a side effect of not having any spatializers installed (default in Unity 2019.3)

Confirmed that after installing a Unity package containing a spatializer, the dialog behaves as expected


Profile configuration file

In here, save where windows are closed, and re-open them at those coordinates

who cares


CSV Structure for SNS Bank

CSV from SNS Bank does not have headers. The format is like this:
02-03-2019,NL01SNSB0123456789,,,,,,EUR,123.45,EUR,-1.23,02-03-2019,02-03-2019,1234,BEA,12345678,'1abcde/123456','Description',4
02-03-2019,NL01SNSB0123456789,,,,,,EUR,123.45,EUR,1.23,02-03-2019,02-03-2019,1234,BEA,12345678,'1abcde/123456','Description',4

Missing Headers:

I know, I have the same problem with the ASN bank (same parent company I think). I fail to see why in god's name you'd create CSV files without headers for things like this. But yeah, I am thinking of a good solution to add support for headerless CSV files

What about a regex match on the first line / second column to ID the bank? Pseudo code:
`if ( line[0]["col"][1].match('NL\d{2}SNSB\d{10}') ) {'SNSBANK'}

Hmm could be a good idea. I'll look at it tomorrow!

So yeah, this is gonna take some time. I have to implement my own fileStreamer to handle both headerless and headered files, while still being able to recognize the bank 😞

@javydekoning Hey! It should be working now! Took me some time to create everything from scratch. Can you please test it with your SNS csv files?

Awesome, I'll test today

Almost correct Daniel. Problem is that there is no Payee for PIN transactions. "incasso" / "overboeking" looks correct.
Suggested fix: if column 'D' is null, take the first part of column 'R' as payee.
Example line:
02-03-2019,NL01SNSB0123456789,,,,,,EUR,123.01,EUR,-2.41,02-03-2019,02-03-2019,7903,BEA,81349482,'8kdvqh/684577','Kruidvat 7039         >AMSTERDAM 2.03.2019 17U21 KV009 SYD0M0   MCC:5331 Contactloze betaling',4

Looks like all are split by '>', so if you could split that column and trim the trailing whitespace you can use it as payee

Hmm looks like this is a specific SNS/ASN issue.  I'll look into a solution. I dislike adding code which is very bank-specific. I'll update you. Thanks for the email btw

@javydekoning I have added the extra fallback for asn and sns bank, when it comes to dealing with MCC payments 👌


Sendings datas... OK but empty

Hi !
I have launch the script with all ID key and pin, script say OK in the end, but trakt.tv is always empty :/
2nd :
It's possible to export/import the film with an another script ?
Thanks !

Hi! Thank for reporting it.
You know what? I'm gonna entirely check this script again, I don't like the way I've done it before :P
I will let you know

Thanks !! :D
(And they have surely changed method since, that will be the opportunity !)

You can use the new script :)
I switch to python, movies are now handled and I build a Docker image now too!
Note: the watched date can't be synchronized, it's not present in the csv file, and neither in beteseries API it seems so i use the release date.

Ok thx !! :)