Ngrok listener returning url but then isn't online

I have a script that gets a ngrok url and puts it in the .env file, but it doesn't work, do you guys have any idea why ? 🤔
Here is my code:
import fs from "fs";

import getPort from "get-port";
import ngrok from "@ngrok/ngrok";
import { config } from "dotenv";

config();

function insertEnv({ name, value }: { name: string; value: string }) {
  // eslint-disable-next-line no-console
  console.log(`Inserting ${name} into .env with value ${value}`);
  const envPath = ".env";
  const env = fs.readFileSync(envPath, "utf8");
  // eslint-disable-next-line lodash/prefer-lodash-method
  const envs = env.split("\n");
  // eslint-disable-next-line lodash/prefer-lodash-method
  const existingEnv = envs.find((env) => env.startsWith(name));
  if (existingEnv) {
    // eslint-disable-next-line lodash/prefer-lodash-method
    const newEnv = existingEnv.replace(new RegExp(`${name}=.*`), `${name}=${value}`);
    envs[envs.indexOf(existingEnv)] = newEnv;
  } else {
    envs.push(`${name}=${value}`);
  }
  fs.writeFileSync(envPath, envs.join("\n"));
}

async function extractUrl(port: number) {
  // eslint-disable-next-line no-console
  console.log(`Forwarding port ${port} with ngrok`);
  const listener = await ngrok.forward({ authtoken_from_env: true, addr: port });
  const url = listener.url();
  if (!url) {
    throw new Error("Could not extract ngrok URL");
  }
  return url;
}

export async function initializeNgrok() {
  const port = await getPort();
  const url = await extractUrl(port);
  if (!url) {
    throw new Error("No URL returned from ngrok");
  }
  insertEnv({ name: "SERVER_URL", value: url });
  insertEnv({ name: "PORT", value: port.toString() });
  return url;
}

void initializeNgrok();

and when I do tsx ngrok-initalizer.ts
I get:
Forwarding port 55984 with ngrok
Inserting SERVER_URL into .env with value https://f513-2a02-a03f-6b2d-101-487a-2ac2-23cc-2744.ngrok-free.app
Inserting PORT into .env with value 55984

Process finished with exit code 0

Then when I visit https://f513-2a02-a03f-6b2d-101-487a-2ac2-23cc-2744.ngrok-free.app I get:

And in my dashboard on ngrok.com, nothing appears as when doing the classic command ngrok http 3000.
Do you guys have any ideas why ? Help is much appreciated!

Hello, thanks for writing in! It looks like the process is exiting, so the ngrok session is being torn down, and then there is no longer a way to connect through to the local application. If you add a sleep or something else to block the process from exiting, the remote connection should be able to be established. Let us know if that doesn't solve the issue!
The line that appears to be the process shutting down: Process finished with exit code 0.

But I don't get the point of this package then, i would assume running this code would open a listener in the background or something. But there, I create the listener, then it simply exits ?
I fixed it by doing:
import fs from "fs";
import { execSync } from "child_process";

import getPort from "get-port";
import ngrok from "@ngrok/ngrok";
import { config } from "dotenv";
import dotenv from "dotenv";
import replace from "lodash/replace";
import find from "lodash/find";
import startsWith from "lodash/startsWith";
import split from "lodash/split";

config();

/**
 * Inserts a new environment variable into the .env file.
 * If the environment variable already exists, its value is updated.
 *
 * @param {Object} param0 - An object containing the name and value of the environment variable.
 * @param {string} param0.name - The name of the environment variable.
 * @param {string} param0.value - The value of the environment variable.
 */
function insertEnv({ name, value }: { name: string; value: string }) {
  // eslint-disable-next-line no-console
  console.log(`Inserting ${name} into .env with value ${value}`);
  const envPath = ".env";
  const env = fs.readFileSync(envPath, "utf8");
  const envs = split(env, "\n");
  const existingEnv = find(envs, (env) => startsWith(env, name));
  if (existingEnv) {
    const newEnv = replace(existingEnv, new RegExp(`${name}=.*`), `${name}=${value}`);
    envs[envs.indexOf(existingEnv)] = newEnv;
  } else {
    envs.push(`${name}=${value}`);
  }
  fs.writeFileSync(envPath, envs.join("\n"));
}

/**
 * Forwards a local port using ngrok and returns the public URL.
 *
 * @param {number} port - The local port to forward.
 * @returns {Promise<string>} - The public URL provided by ngrok.
 */
async function extractUrl(port: number) {
  // eslint-disable-next-line no-console
  console.log(`Forwarding port ${port} with ngrok`);
  const listener = await ngrok.forward({
    authtoken_from_env: true,
    addr: port
  });
  const url = listener.url();
  if (!url) {
    throw new Error("Could not extract ngrok URL");
  }
  return url;
}

/**
 * Initializes ngrok, forwards a local port, and inserts the public URL and port into the .env file.
 *
 * @returns {Promise<string>} - The public URL provided by ngrok.
 */
export const initializeNgrok = async (): Promise<string> => {
  const port = await getPort();
  const url = await extractUrl(port);
  if (!url) {
    throw new Error("No URL returned from ngrok");
  }
  insertEnv({
    name: "SERVER_URL",
    value: url
  });
  insertEnv({
    name: "PORT",
    value: port.toString()
  });
  return url;
};

/**
 * Main function that initializes ngrok and starts the development server with environment variables loaded from the .env file.
 */
const main = async () => {
  await initializeNgrok();

  // Load environment variables from .env file
  const envConfig = dotenv.parse(fs.readFileSync(".env"));

  // Pass the environment variables to execSync
  execSync("next dev", { stdio: "inherit", env: { ...process.env, ...envConfig } });
};

void main();

Basically it does the next dev in the same process through a execsync now, so it doesn't close the ngrok process. I feel like it's a hack, and it prevented me a clean yarn run dev with
script: "tsx ngrok-initalizer.ts && next dev"
What do you think ?

Hi there, the library does create the listener in the background, but the node process has to keep running in order for that connection to remain established. Often the SDK's are used within the same process as what is serving the traffic, so instead of pushing environment variables to a child process, it would all run in the same process. Depending on what framework is being used to serve traffic, there may be an example of this in the examples directory to show how this could be done.
That said, as long as this parent process is blocking until the child process exits, that will allow the listener to remain open.

Hello, hopefully that answers the question, it looks like you have a way forward either in a parent process or baking into the main process. Going to close the issue, feel free to reopen if there are more questions or something else comes up. Thanks for writing in!

Hi, I'm trying to follow the nextJS example
But for some reason, I get
npm run dev

> next dev

node:internal/modules/cjs/loader:1077
  const err = new Error(message);
              ^

Error: Cannot find module './scripts/ngrok-init.script'
Require stack:
- /Users/embie/WebstormProjects/work/jeunes-et-nature/next.config.js
    at Module._resolveFilename (node:internal/modules/cjs/loader:1077:15)
    at /Users/embie/WebstormProjects/work/jeunes-et-nature/node_modules/next/dist/server/require-hook.js:55:36
    at Module._load (node:internal/modules/cjs/loader:922:27)
    at Module.require (node:internal/modules/cjs/loader:1143:19)
    at mod.require (/Users/embie/WebstormProjects/work/jeunes-et-nature/node_modules/next/dist/server/require-hook.js:65:28)
    at require (node:internal/modules/cjs/helpers:121:18)
    at Object.<anonymous> (/Users/embie/WebstormProjects/work/jeunes-et-nature/next.config.js:2:1)
    at Module._compile (node:internal/modules/cjs/loader:1256:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1310:10)
    at Module.load (node:internal/modules/cjs/loader:1119:32) {
  code: 'MODULE_NOT_FOUND',
  requireStack: [
    '/Users/embie/WebstormProjects/work/jeunes-et-nature/next.config.js'
  ]
}

Node.js v18.17.1

Process finished with exit code 1

I see that in the example, the next version is 13, could that be the reason ?

Hello! It looks like Next has change how they do their process management, I've made an update which deals with forked processes more generally which will work in 14, see this change: https://github.com/ngrok/ngrok-javascript/pull/136
The important part is changing: makeListener = true; to makeListener = process.send === undefined; to default it off when in a forked process. Thanks for sending this in!

@bobzilladev Hi Bob, now it seems to be only launched once. But There is this weird thing that went I push to my git remote, the script gets launched:
~/WebstormProjects/work/jeunes-et-nature git:[feat-automatic-ngrok-initializer]
gp

><EMAIL_ADDRESS>lint
> next lint

Forwarding port 3000 with ngrok
Killing ngrok
Forwarding port 3000 with ngrok
Killing ngrok
Forwarding port 3000 with ngrok
✔ No ESLint warnings or errors
Enumerating objects: 7, done.
Counting objects: 100% (7/7), done.
Delta compression using up to 10 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 697 bytes | 697.00 KiB/s, done.
Total 4 (delta 3), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (3/3), completed with 3 local objects.
To github.com:JeunesEtNature/jeunes-et-nature.git
   a42e2d7..f50a9b3  feat-automatic-ngrok-initializer -> feat-automatic-ngrok-initializer

So that's a bit weird in my opinion?
Here is my script:
const fs = require("fs");

const ngrok = require("@ngrok/ngrok");
const { config } = require("dotenv");
const replace = require("lodash/replace");
const find = require("lodash/find");
const startsWith = require("lodash/startsWith");
const split = require("lodash/split");
const forEach = require("lodash/forEach");
const includes = require("lodash/includes");

config();

const ENV_FILENAME = ".env";

// setup ngrok ingress in the parent process,
// in forked processes "send" will exist.
const makeListener = process.send === undefined;
let host = "localhost";
let port = process.env.PORT || "3000";

forEach(process.argv, (item, index) => {
if (includes(["--hostname", "-H"], item)) host = process.argv[index + 1];
if (includes(["--port", "-p"], item)) port = process.argv[index + 1];
});

/**
* Inserts a new environment variable into the .env file.
* If the environment variable already exists, its value is updated.
*
* @param {Object} param0 - An object containing the name and value of the environment variable.
* @param {string} param0.name - The name of the environment variable.
* @param {string} param0.value - The value of the environment variable.
*/
function insertOrReplaceEnv({ name, value }) {
// eslint-disable-next-line no-console
console.log(`Inserting ${name} into .env with value ${value}`);

const env = fs.readFileSync(ENV_FILENAME, "utf8");
const envs = split(env, "\n");
const existingEnv = find(envs, (env) => startsWith(env, name));
if (existingEnv) {
 const newEnv = replace(existingEnv, new RegExp(`${name}=.*`), `${name}=${value}`);
 envs[envs.indexOf(existingEnv)] = newEnv;
} else {
 envs.push(`${name}=${value}`);
}
fs.writeFileSync(ENV_FILENAME, envs.join("\n"));
}

const killNgrok = async () => {
// eslint-disable-next-line no-console
console.log("Killing ngrok");
await ngrok.kill();
};

/**
* Forwards a local port using ngrok and returns the public URL.
*
* @param {number} port - The local port to forward.
* @returns {Promise<string>} - The public URL provided by ngrok.
*/
async function extractUrl(port) {
// eslint-disable-next-line no-console
console.log(`Forwarding port ${port} with ngrok`);
const authtoken = process.env.NGROK_AUTH_TOKEN;
if (!authtoken) {
 throw new Error("NGROK_AUTH_TOKEN environment variable is not set");
}
try {
 const listener = await ngrok.forward({
   authtoken,
   addr: port
 });
 const url = listener.url();
 if (!url) {
   throw new Error("Could not extract ngrok URL");
 }
 return url;
} catch (e) {
 //Your account is limited to 1 simultaneous ngrok agent sessions.
 // eslint-disable-next-line lodash/prefer-lodash-method
 if (e.message.includes("Your account is limited to 1 simultaneous ngrok agent sessions")) {
   await killNgrok();
   return extractUrl(port);
 }
}
}

/**
* Initializes ngrok, forwards a local port, and inserts the public URL and port into the .env file.
*
* @returns {Promise<string>} - The public URL provided by ngrok.
*/
const initializeNgrok = async () => {
const port = process.env.PORT;
if (!port) {
 throw new Error("PORT environment variable is not set");
}
const url = await extractUrl(parseInt(port));
if (!url) {
 throw new Error("Ngrok couldn't extract the URL");
}
insertOrReplaceEnv({
 name: "SERVER_URL",
 value: url
});
return url;
};

if (makeListener) void initializeNgrok();

The reason I insert the url in the env is that I have a service that needs to call a webhook

Interesting, looks like next lint is using Next itself to do the lint checks, which must run through the same initialization code, so might have to put a check on what is on the command line to check for lint and not turn on the ngrok session.


Add Users.authenticate_with_magic_auth()

Description
Documentation
Does this require changes to the WorkOS Docs? E.g. the API Reference or code snippets need updates.
[ ] Yes

If yes, link a related docs PR and add a docs maintainer as a reviewer. Their approval is required.

Current dependencies on/for this PR:

users

PR #191

PR #192

PR #193

PR #195

PR #196   👈

This comment was auto-generated by Graphite.

Codecov Report

Merging #196 (b8aa973) into feature/usrld-760-add-addusertoorganization-to-python (e6db8d4) will increase coverage by 1.04%.
The diff coverage is 100.00%.

:exclamation: Your organization is not using the GitHub App Integration. As a result you may experience degraded service beginning May 15th. Please install the Github App Integration for your organization. Read more.
@@                                    Coverage Diff                                    @@
##           feature/usrld-760-add-addusertoorganization-to-python     #196      +/-   ##
=========================================================================================
+ Coverage                                                  86.61%   87.66%   +1.04%
=========================================================================================
  Files                                                         30       32       +2
  Lines                                                       1061     1151      +90
=========================================================================================
+ Hits                                                         919     1009      +90
  Misses                                                       142      142

Files Changed
Coverage Δ

workos/resources/authentication_response.py
100.00% <100.00%> (ø)

workos/resources/session.py
100.00% <100.00%> (ø)

workos/users.py
90.76% <100.00%> (+2.30%)
:arrow_up:

:mega: We’re building smart automated test selection to slash your CI/CD build times. Learn more


Color picker

Color picker
A color picker should be a nice addition to the pickers list. In particular I'm working with a UI where you can choose the colour of certain visualization options.
Inspiration link:
https://casesandberg.github.io/react-color/

unstale ^_^


Add license notice space

Related issue https://github.com/scylladb/java-driver/issues/165
Add a new section for LICENSE information after content.
How to test this PR

Edit sphinx_scylladb_theme/notice.html and add the following content:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut tincidunt sapien vitae elementum cursus.
Maecenas dignissim libero sapien, pretium posuere sem imperdiet eget.

Build the docs with make preview. You should see the notice after the prev / next navigation buttons on every page.

Preview:

Once we merge this pull request, we can release a new patch to release a new version of the theme.
Then, we will override the notice.html template in the repos java-driver and python-driver.

The spacing didn't look quite right:

So I added the
 tag to the notice.html file, and now it looks great:


TS doesn't allow to modify exported variable from a ES6 module

TypeScript Version:  2.5.2
Code
// counter.ts
export let c = 0;

// main.ts
import { c } from './counter';

c++;

Expected behavior:
Variable is modified
Actual behavior:
Error:(17, 9) TS2539: Cannot assign to 'c' because it is not a variable.

https://stackoverflow.com/questions/39289463/are-import-values-disconnected-from-their-export-values-still-read-only

Apparently we let you do import counter = require("./counter"); counter.c++;.

@RyanCavanaugh , @andy-ms
Thanks guys


Public DRM does not render correctly, is hard to navigate

Expected Behavior
I want to discover the layout rules in human-readable form without knowing the rule numbers up front.
Actual Behavior
When I land on the readthedocs.io web page, the menu entries do not have any menus suggesting sub-entries or any depth.

I click through them and by sheer luck end up something that says "Design Manual", under Physical Verification. An arrow has now appeared next to that menu entry but I don't notice it at all.

I see in the list in the right pane 7.0 Layout Rule Description, so I click that.
I am now here. There is nothing clickable. Where do I go?

With the help of others I have learned that if I now expand the menu item, I can see all the relevant sub-documents. But I had to get two people to help me.

Version: Google Chrome 104.0.5112.101, 64-bit
Platform: Debian 11.4

@umarcor / @kgugala - Would you mind taking a look at this? I think it is just a sphinx configuration issue?


Thermostat Device addition

Hi,
I just installed a thermostat for our electric underfloor heating in the bathroom.
It works with the Tuya App.
When I add it to my config.json as a dimmer I am able to turn the thermostat it self (not the heat, just the screen) on/off and with the slider I am able to set the temperature and if the temapratur is set to higher than the room temperature it turns on the heat
Let me know if you need a package capture or anything else.

Then, please post the output of tuya-cli get --id "<id>" --ip "<ip>" --key "<key>" -all.

dps:
{ '1': true,
'2': 350,
'3': 200,
'4': 'Manual',
'6': true,
'12': 4,
'101': false,
'102': false,
'103': 0,
'104': 1,
'105': 15,
'106': true,
'107': true,
'108': true,
'109': 0,
'110': 10,
'111': 2,
'112': 45,
'113': 5,
'114': 35,
'115': 5,
'116': 'all',
'117': 'keep',
'118': '2days' } }

Looks good, can you also provide a screenshot of the app and/or the current room temperature, the set temperature, etc.?  Need to figure out what each property maps to.

https://m.imgur.com/a/znIA3E8

Ok, I'm guessing that
{
  '2': targetTempC * 10,
  '3': currentTempC * 10,
  '4': mode
}

Would you want to be able to control / see anything else, or is that good?

I have a few eve thermo’s. Which are automated radiator valves. In the home app they display current temp and you can set the temp using a slider or you can turn the heat off using a “switch” (https://imgur.com/a/BpDQxnZ). This would be all I need. I’m thinking that ‘4’ : mode refers to a manual and a scheduled mode. The scheduled mode being an option you configure in the Tuya app. Seeing as the home app allows you to schedule and automate this would be redundant. Long story short; heating/not heating and temperature set and current temp is all that’s needed. Everything else can be achieved through the home app’s automation. Let me know if there is anything else I can do! Appreciate all the hard work!

Ok, sounds good.
Can you please try to pin down the DPS index for turning the system on and off by controlling it through the app and taking note of the boolean values returned by the tuya-cli get command?

There is no option for turning the heat off in the Tuya app other than setting the desired temperature lower than the room temperature.
So your implementation in your previous comment is perfect!
Thanks again!

Ok, hopefully will get to this tomorrow.

(I'm copy/pasting this into every open issue and PR.)
This plugin is now deprecated, as I don't have enough time to maintain it along with other TuyAPI related projects. Please use AMoo-Miki's homebridge-tuya-lan plugin instead. (Or, you can continue to use this plugin, but I will not be giving support or adding any new devices.)
I'm sorry about this, but this plugin is taking a disproportionate amount of my time that I believe is better spent making TuyAPI more stable and adding more tools to the ecosystem.

Closing; inactive thread. If you need support please re-open this issue.


[Snyk] Upgrade i18next from 23.11.5 to 23.15.2

Snyk has created this PR to upgrade i18next from 23.11.5 to 23.15.2.
:information_source: Keep your dependencies up-to-date. This makes it easier to fix existing vulnerabilities and to more quickly identify and fix newly disclosed vulnerabilities when they affect your project.

The recommended version is 13 versions ahead of your current version.

The recommended version was released on a month ago.

[!IMPORTANT]

Check the changes in this PR to ensure they won't cause issues with your project.
This PR was automatically created by Snyk using the credentials of a real user.

Note: You are seeing this because you or someone else with access to this repository has authorized Snyk to open upgrade PRs.
For more information:

🧐 View latest project report
📜 Customise PR templates
🛠 Adjust upgrade PR settings
🔕 Ignore this dependency or unsubscribe from future upgrade PRs

Check out a preview of your pull request here: https://app-servicecanadalabs-dev-pr-preview-1.azurewebsites.net


[SMALLFIX] add Nullable notation for MountTable.java

add Nullable notation for MountTable.java

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/Alluxio-Pull-Request-Builder/16830/
Test PASSed.


Bad display of information

Code of Conduct

[X] I have read and agree to the GitHub Docs project's Code of Conduct

What article on docs.github.com is affected?
https://docs.github.com/es/apps/oauth-apps/building-oauth-apps/scopes-for-oauth-apps#available-scopes
What part(s) of the article would you like to see updated?
Available scope table is not correctly rendered
Additional information
No response

@a10pepo Thank you for opening an issue and linking it to your PR! ✨

i am praising and inspired from the command

Closing per comment https://github.com/github/docs/pull/25396#issuecomment-1536278870


fix(HealthChecks): fix IPv6 support to set right values

This fixes the earlier introduced feature for IPv6 Support. The problem was that the field is
setting a string but is providing a boolean. By parsing the JSON we made it possible to have the
value true and IPv6 as valid values for the checkbox to be ticked.
The solution to the problem was to change the name of the field to something else and set the value
based on the boolean. And have the parsed JSON set the boolean based on the input.
Because code explains better then a thousand words see this exert:
if (`healthChecks.${index}.ipProtocol` === joinedPath) {
  state[index].ipProtocolCheckbox = value === "IPv6";
  state[index].ipProtocol = value;
}
if (`healthChecks.${index}.ipProtocolCheckbox` ===
    joinedPath) {
  state[index].ipProtocolCheckbox = value;
  state[index].ipProtocol = value ===
    true ? "IPv6" : "IPv4";
}

For testing create a new single container service.
Add a Healthcheck
Select the HTTP type
Go to the JSON editor
Add to the HealthCheck the ipProtocol field with arbitrary values

Expected behavior is that only the value "IPv6" should add the check mark to the check box. Please
do test "IPv4", true and false.

hold merge because this fix introduces another issue. I was able to get ipProtocolCheckbox: true in JSON

For me there seems to be an issue. Although the IPv6 is set in the JSON it is not mapping with the checkbox

Sorry https://github.com/dcos/dcos-ui/pull/2549


Unable to upload Mapping file

No matching variant of com.datadoghq:dd-sdk-android-gradle-plugin:1.3.0 was found. The consumer was configured to find a runtime of a library compatible with Java 8, packaged as a jar, and its dependencies declared externally, as well as attribute 'org.gradle.plugin.api-version' with value '7.3.3' but:
- Variant 'apiElements' capability com.datadoghq:dd-sdk-android-gradle-plugin:1.3.0 declares a library, packaged as a jar, and its dependencies declared externally:
- Incompatible because this component declares an API of a component compatible with Java 11 and the consumer needed a runtime of a component compatible with Java 8

Hi @shubhamMonga777, can you please give us more information about this issue:

your gradle configuration
the steps to reproduce this issue

Issue resolved.
My System java version was different from studio jdk version, after updating to JDK11 on system ,Its working now
Thanks


Wrong handling of the global resourceList in combination with livesim

[ ] When both the global resourceList and the livesim missing resource contain the same resource kind (e.g., pods), the resources from the global resourceList are ignored.
See example tests/istio_testcases/example_policies/sidecar_examples_w_onlineboutique/sidecars-and-gateways-test-scheme.yaml:
when the resource ../online_boutique/new_online_boutique_manifests_istio/all_deployments.yaml appears only in global resourceList (remove it from the network config resourceList), then on the livesim run this resource is ignored, resulting in all the pods missing.

[ ] When none of global resourceList/podList/namespaceList exist, there is a (time consuming) attempt to load resources from live cluster, even if there is local resourceList/podList/namespaceList in a network config.
Example - comment out the global resourceList in the test above.

Indeed, it looks that the current issue relates to the similar problem as described in Issue https://github.com/IBM/network-config-analyzer/issues/593.
However, it seems that the current issue specifies the problem in more details.
Also, the second part of the current issue describes an additional problem related to livesim.

Moved to NP-Guard repo. See here


Unable to resume video in background in Safari on ios 12.5.7

Bug
When locking the screen, or otherwise putting Safari in the background, on iOS 12.5.7 while playing a video, playback is stopped and the video is removed from Control Center, making it impossible to resume playback in order to listen without watching.
This puts Odysee on equal footing with YouTube in this aspect, undermining my incentive to use Odysee to begin with. It's literally the reason I went from watching the same video on YouTube to playing it on Odysee.
To Reproduce
Steps to reproduce the behavior:

Start playing a (any?) video in Safari on iPhone. I used an iPhone 6 in this case.
Lock the screen or press the home button to put Safari in a background state.
Playback stops
The video is removed from control center and can not be resumed

Expected behavior
If I want to listen to a video I should be able to not waste battery on illuminating the screen.
System Configuration

LBRY Daemon version: -
LBRY App version: -
LBRY Installation ID: -
Operating system: iOS 12.5.7

Additional context
Tested on an iPhone 6. This can not be upgraded to run the iOS Odysee app.
Can Safari do this normally? Yes. E.g. videos on EEVBlog.org/video can be resumed in the background.

In fact, after testing this repeatedly and failing every time, now it suddenly doesn't stop playback when putting Safari in the background.
Very difficult to pinpoint whether the problem is in Safari or in the web app...

Sorry to hear. Seems to also be broken on latest IOS, I had to enable some experimental features to even get it to show in the control center. We'll see if there's any easy fixes related to VideoJS and this issue.

Yeah, I think it might have to do with Safari the more I think about it.
I seem to recall struggling with this inconsistent behavior previously, as well as exploit it to actually play Youtube in the background (which was possible with some messing about with the timing of when Safari went into the background.)
I haven't really tried it on iOS 16 since I can just use the Odysee app there.
As long as it's not intended behavior I'm available to test on iOS 10, 12 and 16. Also open to enabling experimental features if that would help.


[CT-772] numPartitions spark option not been picked up

Describe the bug
I want to set the number of partitions in the spark options configuration. This is the configuration I used:
{{ config(
file_format='parquet',
location_root='/mnt/mountname/folder',
options={
'numPartitions': '30'
}
) }}
Steps To Reproduce
When I run a DBT transform using the above configuration, there are 800 partitions in the resulting dataset.
Expected behavior
I would have expected 30 partitioned in the resulting dataset.
Additional context
PR171 by @JCZuurmond was designed to accept spark options so numPartitions should have been picked up.

I think the numPartitions is not a configuration you set like that. I think it is a table property you see after the table is created.
Did you try the repartition hint?

Hi @JCZuurmond
Thanks for following up with me on this.
I was expecting it to work like
dataframe
.repartition(30)
.write
.save("tablename")"
I'll try a repartition hint.
Thanks,
Aiden

Hi @JCZuurmond
The repartition hint worked.
Thanks for your help on this.
 Could you close this issue?

Yes of course. Done.


slidev build is exposing local directory paths

Describe the bug
The files generated by slidev build are unnecessarily exposing local directory paths.
To reproduce

Create a new Slidev project.
Run npm run build.
Open, for example, dist/index.html and dist/assets/slidev/Arrow-[hash].js.
Check that your local directory (e.g., /home/user/...) is indeed there.

To get the full list of offending files, you may run
grep "/home/" dist/ -r -l

Desktop:

OS: Fedora Linux 40
Browser: Firefox 127.0.
Slidev version: 0.49.10

It seems that process.env.NODE_ENV is still "development" when running slidev build

Thank you for your work on this!
As of version 0.49.11, most files are now free from local directory paths. However, the following files still expose local paths:
dist/assets/index-[hash].js
dist/index.html
dist/404.html

Additionally, as a side effect of the patch, some filenames now have unusual suffixes before the hash, which did not appear before. For example:
Arrow.vue_vue_type_script_setup_true_lang-[hash].js

instead of just:
Arrow-[hash].js

@rwnobrega Thank you for noticing these! Opened #1690 to track these issues.


iOS App Store - Locations

Hi, when I try to get this app it tells me that it's not available in my location. Has this app been pulled? Or can we add Europe (or specifically Austria) to the available locations?

This is probably due to some update privacy forms I didn't fill out. I'll
take a look (if I still have access)
On Sun, Jan 14, 2024, 4:39 AM cyber-vi-king @.***>
wrote:

Hi, when I try to get this app it tells me that it's not available in my
location. Has this app been pulled? Or can we add Europe (or specifically
Austria) to the available locations?
—
Reply to this email directly, view it on GitHub
https://github.com/PantryParty/pantry_party/issues/149, or unsubscribe
https://github.com/notifications/unsubscribe-auth/AABQ6MWMSECNWXKYUC24OZLYOORUBAVCNFSM6AAAAABBZ7ATEOVHI2DSMVQWIX3LMV43ASLTON2WKOZSGA4DANRVGU2TONA
.
You are receiving this because you are subscribed to this thread.Message
ID: @.***>


Help debugging

Hi!
Thank you so much in fixing the pin issue.  I now have a new issue via debug log and I was wondering if you could help me through it.
I followed the steps via proxyman and was able to intercept the token, but still am getting the following error which seems to be related.
any help would be greatly appreciated!
Best Regards,
Jason
8/15/2021, 8:48:53 AM] [Xfinity Home] There was an error while communicating with iControl(system: Xfinity Home). Status code was 200 and error was: Error: Bad status code 200
at iControl. (/usr/lib/node_modules/homebridge-xfinityhome/iControl.js:258:22)
at Request.self.callback (/usr/lib/node_modules/homebridge-xfinityhome/node_modules/request/request.js:185:22)
at Request.emit (node:events:394:28)
at Request. (/usr/lib/node_modules/homebridge-xfinityhome/node_modules/request/request.js:1154:10)
at Request.emit (node:events:394:28)
at IncomingMessage. (/usr/lib/node_modules/homebridge-xfinityhome/node_modules/request/request.js:1076:12)
at Object.onceWrapper (node:events:513:28)    at IncomingMessage.emit (node:events:406:35)
at endReadableNT (node:internal/streams/readable:1331:12)
at processTicksAndRejections (node:internal/process/task_queues:83:21)
Stack:Error:
at iControl._notifyError (/usr/lib/node_modules/homebridge-xfinityhome/iControl.js:521:226)
at iControl. (/usr/lib/node_modules/homebridge-xfinityhome/iControl.js:259:14)
at Request.self.callback (/usr/lib/node_modules/homebridge-xfinityhome/node_modules/request/request.js:185:22)
at Request.emit (node:events:394:28)
at Request. (/usr/lib/node_modules/homebridge-xfinityhome/node_modules/request/request.js:1154:10)
at Request.emit (node:events:394:28)
at IncomingMessage. (/usr/lib/node_modules/homebridge-xfinityhome/node_modules/request/request.js:1076:12)
at Object.onceWrapper (node:events:513:28)    at IncomingMessage.emit (node:events:406:35)
at endReadableNT (node:internal/streams/readable:1331:12)
Response:

Sign in to Xfinity

                                    <link rel="stylesheet" type="text/css" href="/static/css/junket/fonts-remote.min.css?v=9aca8b1">
                                         <link rel="stylesheet" type="text/css" href="/static/css/junket/styles-light.min.css?v=9aca8b1">
                                         <link rel="shortcut icon" href="/static/images/favicon/favicon.ico">
            <link rel="apple-touch-icon" sizes="57x57" href="static/images/favicon/apple-icon-57x57.png">
            <link rel="apple-touch-icon" sizes="60x60" href="static/images/favicon/apple-icon-60x60.png">
            <link rel="apple-touch-icon" sizes="72x72" href="static/images/favicon/apple-icon-72x72.png">
            <link rel="apple-touch-icon" sizes="76x76" href="static/images/favicon/apple-icon-76x76.png">
            <link rel="apple-touch-icon" sizes="114x114" href="static/images/favicon/apple-icon-114x114.png">
            <link rel="apple-touch-icon" sizes="120x120" href="static/images/favicon/apple-icon-120x120.png">
            <link rel="apple-touch-icon" sizes="144x144" href="static/images/favicon/apple-icon-144x144.png">
            <link rel="apple-touch-icon" sizes="152x152" href="static/images/favicon/apple-icon-152x152.png">
            <link rel="apple-touch-icon" sizes="180x180" href="static/images/favicon/apple-icon-180x180.png">
                            <link rel="icon" type="image/png" sizes="192x192"  href="static/images/favicon/android-icon-192x192.png">
            <link rel="icon" type="image/png" sizes="32x32" href="static/images/favicon/favicon-32x32.png">
            <link rel="icon" type="image/png" sizes="96x96" href="static/images/favicon/favicon-96x96.png">
            <link rel="icon" type="image/png" sizes="16x16" href="static/images/favicon/favicon-16x16.png">
            <link rel="manifest" href="static/images/favicon/manifest.json">


IGNITE-13620 : Bind ignite node to 1 address in the ducktests.

Iginite node should use 1 address to make diascovery test results clear.

wrong branch


Create the ds-prep-course-testers-2021 repo

Create the ds-prep-course-testers-2021 repo and populate it with

Readme

Shall we close this?


Handle fire anchestor depending on state

Is possible to fire anchestors and handle that differently depending on state?
In my case I'm using the same component to handle enter but in one state of the parent I need to make some API calls otherwise in another state I do not need that.

Yeah,
static _states(){
 return [
 class Foo extends this{
    // will call this in state: Foo on fireAncestors("$bar")
    $bar(){ }
  },
  class Foo1 extends this{
    // will call this in state: Foo1 on fireAncestors("$bar")
    $bar(){ }
  }
]
}

Thanks!
I want to split hairs saying that in this case states are siblings and not anchestors by each other but of course the feature of communication is usefull! I'll implements It ASAP.
Best regards


use command broken in cygwin

Using sdk use on cygwin, I get following error:
__sdk_use:export:35: not valid in this context: Files/TortoiseGit/bin:/cygdrive/c/Program

I think the reason is that I have blank spaces in my PATH variable. It seems the problem is similar to #378 .

Thanks for your contribution. I will be releasing this in the very near future.


Add support for ScheduleOffset attribute for AWS::SSM::Association

Issue #, if available:
Description of changes:
Add support for ScheduleOffset attribute for AWS::SSM::Association
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

lgtm


travis tests need to be enabled for this repository

it's time...let's start building CI tests for this project before things get too crazy.

why not dramatic sound efx brigade tests ... ?

there still needs to be some sort of instance available for CI somewhere. travis should facilitate this aspect and then of course brigade tests make sense.


problem with train_agent and self.get_gaes

deltas = [r + gamma * (1 - d) * nv - v for r, d, nv, v in zip(rewards, dones, next_values, values)]
TypeError: unsupported operand type(s) for +: 'NoneType' and 'float'

rewards = [0 if reward is None else reward for reward in rewards]
Add 1 line above deltas = [r + ....

deltas = [r + gamma * (1 - d) * nv - v for r, d, nv, v in zip(rewards, dones, next_values, values)]
TypeError: unsupported operand type(s) for +: 'NoneType' and 'float'

Where you able to solve this?

rewards = [0 if reward is None else reward for reward in rewards]
Add this above deltas = [r + ....

Mind elaborating a bit more? It didnt solved the issue at my end, any help is highly appreciated. Thanks!


New Chat - Avatar image is displayed instead of the uploaded display picture.

If you haven’t already, check out our contributing guidelines for onboarding and email<EMAIL_ADDRESS>to request to join our Slack channel!

Action Performed:

Login to app
Click on FAB menu
Click on New Chat
Type email to search a user

Expected Result:
Correct Display Image Should Be Displayed Instead Of Avatar For The First Time.
Actual Result:
Avatar Is Displayed Instead
Workaround:
Unknown
Platforms:

Which of our officially supported platforms is this issue occurring on?

[x] Android / native
[x] Android / Chrome
[x] iOS / native
[x] iOS / Safari
[x] MacOS / Chrome / Safari
[x] MacOS / Desktop

Version Number: <IP_ADDRESS>
Reproducible in staging?: yes
Reproducible in production?: yes
If this was caught during regression testing, add the test name, ID and link from TestRail:
Email or phone of affected tester (no customers):
Logs: https://stackoverflow.com/c/expensify/questions/4856
Notes/Photos/Videos: Any additional supporting documentation
https://github.com/Expensify/App/assets/93399543/83359c29-a84f-40f9-b3fb-57e1c445e3e7
https://github.com/Expensify/App/assets/93399543/3c38b9fc-4ae3-41fc-9803-8ba3cc52f955
Expensify/Expensify Issue URL:
Issue reported by: @syedsaroshfarrukhdot
Slack conversation: https://expensify.slack.com/archives/C049HHMV9SM/p1686108168579789
View all open jobs on GitHub

Here we can show the loader while fetching the user's data.

 You need to make sure your email is registered with expensify. (new.staging.expensify or new.expensify.com).

it's registered with the same email id.

Contributor details
Your Expensify account email<EMAIL_ADDRESS>Upwork Profile Link: https://www.upwork.com/freelancers/~018f1a33b14bc5e0a1

Contributor details
Your Expensify account email<EMAIL_ADDRESS>Upwork Profile Link: https://www.upwork.com/freelancers/~018f1a33b14bc5e0a1

I don't know why this bot gives me an invalid message. my Expensify account is registered with the same email id that I am trying to save is this 👇 on https://new.expensify.com/

can i mention on expensify-bugs channel and here i am not able to find thiennam

Contributor details
Your Expensify account email<EMAIL_ADDRESS>Upwork Profile Link: www.upwork.com/freelancers/~0112ce8c179ace5849

Please re-state the problem that we are trying to solve in this issue.
Avatar image is displayed instead of the uploaded display picture.
What is the root cause of that problem?
When typing search term to find the user for first time, it does not come personal data from api. It is coming from date that is already stored.
What changes do you think we should make in order to solve the problem?
When the use type search term, it must call api to get personal data and store it.
updateOptionsWithSearchTerm(searchTerm = '') {
const {recentReports, personalDetails, userToInvite} = OptionsListUtils.getNewChatOptions(
this.props.reports,
this.props.personalDetails,
this.props.betas,
searchTerm,
[],
this.props.isGroupChat ? this.excludedGroupEmails : [],
);
this.setState({
searchTerm,
userToInvite,
recentReports,
personalDetails,
});
}
What alternative solutions did you explore? (Optional)
At that time when the user update profile picture, the stored date might be updated  from api.

I'm nearly certain we've have several versions of this report, and they are all on hold for image improvements. @Beamanator @trjExpensify does that sound right?

This one specifically should probably be on hold for the big Onyx Re-key PR that should get merged today

I don't think this is a caching issue is it? Also, maybe Alex you can unpack why the re-key will fix it?

Contributor details
Your Expensify account email<EMAIL_ADDRESS>Upwork Profile Link: https://www.upwork.com/freelancers/~018f1a33b14bc5e0a1

Putting this on hold and weekly in the meantime, though I'm still not clear how this relates to the re-key?

Ohhhh interesting maybe this isn't due to the re-key, sorry 😅
Is this only happening for "brand new" chats being created?

Yeah, if this is happening for brand new chats you're starting, I actually don't think this is a bug. We don't obtain the personal details until you confirm and open the chat. So all in all, I think you can close this Mills.

Cool, closing.


copytranslator: Add version 10.0.1

copytranslator
Foreign language reading and translation assistant based on copy and translate
Github 14k stars

[x] I have read the Contributing Guide.

/verify

config location: $Env:AppData\copytranslator
(This is a reminder. No need to modify anything regard to this.)


NATS Jetstream MQT goes in a loop if function returns code other than 200

Fission/Kubernetes version
Fission version 1.17 / Kubernetes version 1.24

$ fission --version
client:
  fission/core:
    BuildDate: "2022-09-16T13:24:57Z"
    GitCommit: b36e0516
    Version: v1.17.0
server:
  fission/core:
    BuildDate: "2022-09-16T13:24:57Z"
    GitCommit: b36e0516
    Version: v1.17.0

$ kubectl version
Client Version: v1.25.3
Kustomize Version: v4.5.7
Server Version: v1.24.8

Kubernetes platform (e.g. Google Kubernetes Engine)
On-prem
Describe the bug

I am building a data pipeline and workflow looks something like Producer -> NATS Jetstream -> MQT -> Consumer. I am following fission documentation available here - https://fission.io/docs/usage/triggers/message-queue-trigger-kind-keda/nats-jetstream/#producer-function.
While testing the workflow, if I return an error (it is 400) from the consumer function I can see MQT keeps calling consumer function in a loop with the same message and it never stops. To reproduce the issue all you need to do is just return 400 from the handler function of hello.go file. I thought of investigating this further and I came across a keda-connectors code for NATS Jetstream which is available here(https://github.com/fission/keda-connectors/blob/main/nats-jetstream-http-connector/main.go). As we can see in the code, the handleHTTPRequest function ack messages received from Jetstream only if http request is successful. In the case of failure it doesn't send out ack to Jetstream. According to Jetstream documentation (see here https://docs.nats.io/nats-concepts/jetstream/consumers) if ack is not received by the server within the AckWait time, Jetstream will redeliver the message. Since new delivered message is also result in the error (since request is bad) this will go in a loop.
To Reproduce
To reproduce the issue all you need to do is just return 400 from the handler function of hello.go file. The sample is available here - https://fission.io/docs/usage/triggers/message-queue-trigger-kind-keda/nats-jetstream/#producer-function.

Expected result

MQT shouldn't go into the never ending loop
Actual result
We can see MQT keeps calling the consumer function again and again with the same message
Screenshots/Dump file

$ fission support dump

Additional context

May be potential fix would be to just ack the message regardless of the success or failure. And failure scenarios are handled by fission in two different ways. Once is retry and if it fails even after retry messages will be pushed to error queue. So I believe it would be safe to just ack as soon as message is received from the Jetstream. The bigger problem is - in case if authentication fails the function will never get a chance to execute since router will return auth failure error. In such a scenario loop is unavoidable.

Big issue indeed,Same bug with Keda-Rabbitmq, Unacked message keep consuming in a loop without any act move.


V0.17.0

any outstanding work for this?

This is blocked by https://github.com/fishtown-analytics/dbt/issues/2548

It looks like https://github.com/fishtown-analytics/dbt/issues/2548 will be fixed in 0.18.0 . Does that mean no release for 0.17 for dbt-sqlserver?

Yes. We have to skip 0.17. I am having vacation for a couple of weeks but will look at an 0.18 adapter after that.
Sent with GitHawk

@camfrout , this is great news! I'll try to have a test run soon so we can get this going again.

Since v.018.0 is now released I'm closing this


Fixed forwarding from spring boot -> vuejs.

Forwarding from spring boot -> vuejs is currently busted.
Right now, it's handled inside the BackendController which is problematic because (a) it's a RestController and (b) it's only handling /api/** paths since it has a RequestMapping at the top of the class.
This PR introduces a Controller called VueForwardController whose only job is to properly handle the forwarding to the view app in case a user puts a full URL directly in the browser.

I think this PR might be very helpful. As a side consideration I am wondering if the regex here could be too much restrictive (e.g. it seems not forwarding routes with more than one token, such as /hello/world/yada/yada). What about to have a route more restrictive like the following?
 @RequestMapping({"/{path:[^\\.]*}", "/**/{path:^(?!index\\.html|api|actuator).*}/{path:[^\\.]*}"})

I think this PR might be very helpful. As a side consideration I am wondering if the regex here could be too much restrictive (e.g. it seems not forwarding routes with more than one token, such as /hello/world/yada/yada). What about to have a route more restrictive like the following?
 @RequestMapping({"/{path:[^\\.]*}", "/**/{path:^(?!index\\.html|api|actuator).*}/{path:[^\\.]*}"})

@isneezy also fixed the problem with https://github.com/jonashackt/spring-boot-vuejs/pull/92, but that might be more comprehensive. So I went with his solution and will close your PR in favour of https://github.com/jonashackt/spring-boot-vuejs/pull/92. Thanks anyway and I hope you test your scenario also with the new version 😃


[resolves #557] Create TypeHandlers for Java 8 Date and Time API

As this PR introduces support JSR-310 Date and Time API, it requires upgrading to Java 8. I've created a PR for MyBatis parent: https://github.com/mybatis/parent/pull/38

@trohovsky I think it would make more sense to add a project called mybatis-extensions-jdk8 or something like that.  This won't otherwise build regardless of what the parent was set to in animal sniffer.  mybatis core needs to remain compatible with java 6 and if it's changed, it won't be as it's going to require jdk 8 up compile and presumbably run.
@emacarron Any thoughts to bringing this in separately as a mybatis extension?  It looks like it should be somewhat simple.  Only thing I don't fully know at the moment is ability to extend the typehandlers or if those just need registered separately.

+1 for a separated extension
Probably it is just needed to have a "Configurator" object that takes an SqlSessionFactlry as a parameter, gets the typehandlerreigstry and registers the extra typehandlers.
Default typehandlers are registered this way.
https://github.com/mybatis/mybatis-3/blob/master/src/main/java/org/apache/ibatis/type/TypeHandlerRegistry.java

+1 for a separated extension :smile:

Hi @hazendaz @emacarron, I am also for a separate extension (I am for mybatis-java8-extensions or -extension). It would be nice if everyone switched to Java 8 :), but compatibility has a precedence. I haven't had time yet to find out how to simply use this extension in mybatis, I will look at this soon. But if it is somehow difficult/invasive it will not to be a big deal to continue with standard registration via
<!-- mybatis-config.xml -->
<typeHandlers>
  <typeHandler handler="org.mybatis.example.ExampleTypeHandler"/>
</typeHandlers>

or this way: https://github.com/mybatis/mybatis-3/blob/master/src/test/java/org/apache/ibatis/submitted/typehandlerinjection/TypeHandlerInjectionTest.java#L44

As it's the official package, we can do try & fail in the core TypeHandlerRegistry.
    try {
      registerByFqn("java.time.Instant", "org.apache.ibatis.type.InstantTypeHandler");
      registerByFqn("java.time.LocalDateTime", "org.apache.ibatis.type.LocalDateTimeTypeHandler");
      registerByFqn("java.time.LocalDate", "org.apache.ibatis.type.LocalDateTypeHandler");
      registerByFqn("java.time.LocalTime", "org.apache.ibatis.type.LocalTimeTypeHandler");
      registerByFqn("java.time.OffsetDateTime", "org.apache.ibatis.type.OffsetDateTimeTypeHandler");
      registerByFqn("java.time.OffsetTime", "org.apache.ibatis.type.OffsetTimeTypeHandler");
      registerByFqn("java.time.ZonedDateTime", "org.apache.ibatis.type.ZonedDateTimeTypeHandler");
    } catch (Exception e) {
      // No JSR-310 handlers.
    }

Is this too ugly?

Iwao. I would definitely go that way. The less the end user has to do, the less errors.

Thanks, Eduardo!
Then I'll setup the new repo and make the change after taking a shower.
Let me know if someone is already working on it.

Thank you Iwao!
Regarding the name, what about "typehandlers-jsr310" with an artifact id "mybatis-typehandlers-jsr310" so it is self explanatory?
This is more or less what Jackson did
http://mvnrepository.com/artifact/com.fasterxml.jackson.datatype/jackson-datatype-jsr310/2.5.4

There are some Java 8 related issues like #228 #549 .
I imagined that the fixes for those issues will be added to this new extension someday (no idea how to fix them at this point, though :stuck_out_tongue_closed_eyes: ).
What do you think?

@harawata While the try & fail solution is not the clearest, it's the simplest, so I also vote for it.
@emacarron Could be both the repo and the artifact named as mybatis-typehandlers-jsr310? So, it is clear that the repository contains type handlers for mybatis?
Iwao, if you don't mind I will update this PR to the checked registration of type handlers. Once you setup a new repo, I will create a PR with the type handlers.

Hi everyone,
I vote "mybatis-typehandlers-jsr310" similar with Jackson.
I think that Optional or -parameter supported by Java 8 should be provided by other artifact.
When mybatis's required java version will be java8+, these artifacts should will be included as mybatis-3's standard components.
What do everyone think ?

I've created a new repo https://github.com/mybatis/typehandlers-jsr310
The artifac id is mybatis-typehandlers-jsr310.
We can rename it later. :-)
@trohovsky Please send the PRs when ready. Thank you!

@harawata , :+1:

@trohovsky ,
Could you use the Resources for loading the classes?
It would look like this.
    register(Resources.classForName(javaTypeClassName),
        (TypeHandler<?>) Resources.classForName(typeHandlerClassName)).newInstance());

Thanks!


Routing

Is your feature request related to a problem? Please describe.
Converting https://github.com/traccar/traccar-web/pull/1293 to a feature request
Would be nice to have routing. I see two use cases:

Estimate the distance / time taken from any vehicle to a specific point. This could help the user check, for example, in real time, which is the nearest vehicle (in distance or time) to a specific job / service.
Compare the actual trip / route of the vehicle with an estimated one. It would help customers check delays, device kms problems, wrong route decisions, etc. We could draw both lines on the map, actual vs estimated.

Describe the solution you'd like
As stated by @jinzo, maplibre-gl-directions would be a good starting point.

I don't think maplibre-gl-directions is a good starting point. I think we should just call an API on backend and support different providers.

The problem is also that it connects directly to the provider. Ideally it connects to Traccar backend.

What do you mean? It connects to whatever url you put in the configuration, which like I said, could be the traccar backend.

Then we would have to implement a very specific API format compatible with the library.

Two popular open source routing engines are osrm and valhalla. And valhalla has an option to use osrm format, so it looks like a good choice.

I second this, if it has to be proxied thorough traccar backend, OSRM API is probably the way to go.

@jcardus Did you find any possible solution to help us? :/


Support Retries in the Generated Client

Is your feature request related to a problem? Please describe.
It would be nice if the generated client could allow for retry hooks out of the box. For instance, currently when using requests we are able to hook into urllib3's retries to automatically retry certain failing status codes like temporary connection issues. Something like:
retries = Retry(
        total=5,
        method_whitelist=False,  # the default whitelist excludes PATCH, False retries on all HTTP methods
        backoff_factor=0.5,
        status_forcelist=[429,502,503,504]
    )

adapter = HTTPAdapter(max_retries=retries)
session = requests.Session()
session.mount("http://", adapter)
session.mount("https://", adapter)

response = session.request("get", "http://example.com/")

Describe the solution you'd like
It would be great if we could somewhat similarly hook into the underlying retry mechanisms of httpx.
I would be OK exposing the direct hooks to HTTPX's retries, or introducing an abstraction in case the underlying HTTP library changed.
I imagine generated method signatures might look like:
def get_endpoint(*, client: Client, retries: Optional[Retry] = None)

Alternatively, as a superset of retry functionality we could perhaps expose a factory to create the httpx session itself since that's how it performs retries and might allow for further configuration.
def get_endpoint(*, client: Client, session_factory: Optional[Callable[[], Session]] = None)

It could also make sense to expose this at the Client level instead since I imagine most uses cases would be satisfied with a common configuration.
Describe alternatives you've considered
Without hooks into the direct HTTP client itself, the best approximation is to catch ApiResponseErrors and evaluate the response to attempt a manual retry.

So the httpx team seems to have been going back and forth on a retry API for some time. I think we should wait on adding our own retry functionality until they iron it out so we can take advantage of it. Latest issue tracking it is https://github.com/encode/httpx/issues/1141 though this keeps changing.
It sure seems like they'll have it in place for 1.0 which they're moving pretty quickly toward.

Thanks for the follow-up, I understand if httpx is a moving target on retry functionality it's worth waiting on.

Looks like this might be possible now via https://github.com/encode/httpcore/pull/221 , but I don't see any clear documentation on how to do it. Anyone is free to give it a shot if they want. Also, it'll be easier to do manually (without inbuilt support here) once #202 is done.

I found in the documentation that retries can be used via Custom Transports:
https://www.python-httpx.org/advanced/#custom-transports
>>> import httpx
>>> transport = httpx.HTTPTransport(retries=1)
>>> client = httpx.Client(transport=transport)

Looking at the changelog, the minimum version to support this is httpx >= 0.17.1


Update docs to use new bearing

Bearing used in rocker-bogie ( 1601-0014-0008 )has been discontinued and replaced with 1611-0514-0008.
This may require testing and validation, as the replacement is 1mm thicker.

Tried replacing within OnShape. The spacers are a fraction of a mm too thick now, but I believe that won't cause much of an issue. Will submit a PR for the change, let me know if you think this will create issues.

Looks good to me, if anything you might be right with what you said in the Slack, this could actually be positive.

I just noticed that the parts list is already pointing to the newer version. It seems like only the OnShape model was outdated.


Error when passing javascript true/false as sqlite parameters

const Database = require('better-sqlite3');
const db = new Database(null, { memory: true });
db.exec('CREATE TABLE example ( col BOOLEAN NOT NULL );');
const stmt = db.prepare('INSERT INTO example (col) VALUES (?)');
stmt.run(true);

Error Msg: TypeError: SQLite3 can only bind numbers, strings, Buffers, and null

Sqlite doesn't have boolean types - https://www.sqlite.org/datatype3.html#boolean_datatype
Perhaps numbers need to be used directly? eg stmt.run(1) (Just a guess)

I'm not submitting this as a bug because I can't figure out that I need to use a "1" in my code instead of a "true".  It just seems strange that a library for a language that generally allows using true/false 1/0 interchangeably throws errors in this case.  I get that this is an opinionated issue with no right answer.  You could take the view that because data goes both in and out of the database that no conversion of data should be done unless the conversion can be done transparently on both sides.  Or you could take the view that booleans should be auto converted because it's Javascript and it's the way everything else works 🤷

You could take the view that because data goes both in and out of the database that no conversion of data should be done unless the conversion can be done transparently on both sides

This was the decision I made when designing the library.

If that's the case I'm happy for this to be closed: it makes sense.


Disable past dates

I have started to use flatpickr version 4.6.3 and is working fine and using firefox and chrome and just seeing if there is a way to disable past dates?
Sorted it using minDate: 'today',

@ianhaneybeechwood yes, please refer to documentation.


[build_mac_app] update identifier used to looked up the bundle ID when parsing provisioning profile

Checklist

[ ] I've run bundle exec rspec from the root directory to see all new and existing tests pass

there are a few test failures currently (expected, due to not supporting the old key name yet)

[x] I've followed the fastlane code style and run bundle exec rubocop -a to ensure the code style is valid
[x] I've read the Contribution Guidelines
[x] I've updated the documentation if necessary.

none needed

Motivation and Context

This is just a quick draft of trying to resolve https://github.com/fastlane/fastlane/issues/17864. This is my first time contributing to Fastlane (and also my first time using it) so I just wanted to file the issue and get a draft up to see if I'm going in the right direction.
Description

When using the build_mac_app action, Fastlane parses the provisioning profile, but it errors out (see linked issue for more details) when it tries to read the application identifier from a key application-identifier. The profile contains the required info in the com.apple.application-identifier key, which I suppose was a change made by Apple, but I'm not entirely sure.
Testing Steps

I made this change locally and it resolved my issue with parsing the provisioning profile.

@googlebot I signed it!

This looks great! Thanks for finding this 😊 How do you feel about this suggestion so that it keeps backwards compatibility? 😇

@joshdholtz yep I expected we'd change this, all good.

This looks great! Thanks for finding this 😊 How do you feel about this suggestion so that it keeps backwards compatibility? 😇

@joshdholtz yep I expected we'd change this, all good.

@joshdholtz I think this is good to go now. Not sure what is failing on CircleCI and I can't get access to the output without giving them read access to all private repositories on my account.

@joshdholtz I think this is good to go now. Not sure what is failing on CircleCI and I can't get access to the output without giving them read access to all private repositories on my account.

@johndbritton if you update your branch with fastlane's latest master, those CI issues should be gone 🙏

@johndbritton if you update your branch with fastlane's latest master, those CI issues should be gone 🙏

@rogerluan rebased off the latest master.

@rogerluan rebased off the latest master.

@rogerluan This is what I get when I run the linter locally:
bundle exec rubocop fastlane/lib/fastlane/actions/build_mac_app.rb
Inspecting 1 file
.

1 file inspected, no offenses detected

The run method is indeed quite complex, but I believe that's out of the scope of this pull request. Maybe someone else who is more familiar with this codebase can tidy that method up. Or we could ignore the complexity check for this method.

@rogerluan This is what I get when I run the linter locally:
bundle exec rubocop fastlane/lib/fastlane/actions/build_mac_app.rb
Inspecting 1 file
.

1 file inspected, no offenses detected

The run method is indeed quite complex, but I believe that's out of the scope of this pull request. Maybe someone else who is more familiar with this codebase can tidy that method up. Or we could ignore the complexity check for this method.

@googlebot I consent.

@googlebot I consent.

@johndbritton huh weird that it doesn't show the issue locally 🤔
Anyway, usually I'd be against skipping these kind of lints because master is fine and this PR is supposedly adding the extra complexity that makes this function "too complex". However, I'm fine with adding a rubocop comment to disable complexity check for this function, because it already looks overly complex, and it looks like the # rubocop:disable Metrics/PerceivedComplexity should already be there anything (since there's a :enable matching comment at the end of that function).
I've added it, since I was already at it 😊 hope you don't mind.
be rubocop fastlane/lib/fastlane/actions/build_app.rb
Inspecting 1 file
.

1 file inspected, no offenses detected

@johndbritton huh weird that it doesn't show the issue locally 🤔
Anyway, usually I'd be against skipping these kind of lints because master is fine and this PR is supposedly adding the extra complexity that makes this function "too complex". However, I'm fine with adding a rubocop comment to disable complexity check for this function, because it already looks overly complex, and it looks like the # rubocop:disable Metrics/PerceivedComplexity should already be there anything (since there's a :enable matching comment at the end of that function).
I've added it, since I was already at it 😊 hope you don't mind.
be rubocop fastlane/lib/fastlane/actions/build_app.rb
Inspecting 1 file
.

1 file inspected, no offenses detected

I've added it, since I was already at it 😊 hope you don't mind.

Thanks!

I've added it, since I was already at it 😊 hope you don't mind.

Thanks!

@joshdholtz I think this needs your approval to be merged.

@joshdholtz I think this needs your approval to be merged.

@johndbritton Ah sorry! Merging now and releasing today 💪 Being new parent has got me all sorts of behind 😅

@johndbritton Ah sorry! Merging now and releasing today 💪 Being new parent has got me all sorts of behind 😅


Why to use this ?

I really didn't understand the use of this library. What are it's features?
Why do we need an external cache extention even if the official firebase SDK manages the cache internally.

Your question is valid; however, there is one problem that we faced. When we were saving the data on rtdb (real-time database), it started costing us a lot of money because it stores data in the cloud rtdb along with the local cache. Since user data is limited to personal devices, we don't actually need the cloud storage. Consequently, we looked for different libraries that could store data in the same JSON structure (like Firebase rtdb) with the feature of listening on any particular node. Unfortunately, we couldn't find any such libraries, so we decided to build our own.
Coming to its features - If you are aware of MVVM architecture in Android or any event-driven architecture where you need to update the state of the User Interface whenever there is a change in data, you can use this library as a local cache. By placing it between the business logic and the UI state, you can automatically update the state whenever there is a change in data. Additionally, if you want to store this local cache of user data, you can easily take the JSON files and store them in bucket storage, which is more cost-effective. Whenever a user reinstalls the app, you can just load these JSON files for that particular user in the app, and it will restore the state of the app.
I hope you now have a better understanding of this library. If you have any further questions, feel free to ask. Thanks!

Alright, got it......
It looks great for the smaller data but will fail for large datasets as you are reading the whole JSON into the memory. For just changing/reading one child at some x/y/z/node1/name path, loading whole tree is not good practice.
This project is neither a database nor a caching solution as it lacks both in memory management and caching algorithm.


Correction to example in README

Description
Example needs quotes. Plus added space for rubocop compliancy.
Issues Resolved
None
Check List

[ ] All tests pass. See https://github.com/chef-cookbooks/community_cookbook_documentation/blob/master/TESTING.MD
[ ] New functionality includes testing.
[ ] New functionality has been documented in the README if applicable
[ ] The CLA has been signed. See https://github.com/chef-cookbooks/community_cookbook_documentation/blob/master/CONTRIBUTING.MD

Example needed quotes. Plus added space for rubocop compliancy.

Hi. I am an automated pull request bot named Curry. There are commits in this pull request whose authors are not yet authorized to contribute to Chef Software, Inc. projects or are using a non-GitHub verified email address. To become authorized to contribute, you will need to sign the Contributor License Agreement (CLA) as an individual or on behalf of your company. You can read more on Chef's blog.
GitHub Users Who Are Not Authorized To Contribute
The following GitHub users do not appear to have signed a CLA:

@dbarrell

Please sign the CLA here.

Hi. Your friendly Curry bot here. Just letting you know that all commit authors have become authorized to contribute. I have added the "Signed CLA" label to this issue so it can easily be found in the future.

Why yes it does.  Thanks for noticing that


column assist for RPGLE fixed-format does not work

I have the following setting active:
"vscode-rpgle.rpgleLinterSupportEnabled": true,
"vscode-rpgle.showFixedFormatOutline": true,
"vscode-rpgle.rpgleLanguageToolsEnabled": true,

And as soon as I open a XXX.RPG file and I press shift + f4, nothing happens.

worksofliam

You are right, but it doesn't make sense.
Because RPGLE is mostly used for the Free format and only the old RPG applications also set the Fixe format.


Night CI 2023-04-21: Failed

action url: https://github.com/spidernet-io/spiderpool/actions/runs/4761147960

The same issue as #1682.


[BUG] EventHub .NET Sample. Wrong instructions in README

Following https://github.com/Azure/azure-sdk-for-net/blob/master/sdk/eventhub/Azure.Messaging.EventHubs/samples/Sample01_HelloWorld.md I found missing instructions:
Expected behavior
I can follow and complete the tutorial
Actual behavior (include Exception or Stack Trace)
The sample code does not compile
I fixed by following the next steps.

Add main NuGet dotnet add package Azure.Messaging.EventHubs
Update AMQP to workaround: https://github.com/Azure/azure-amqp/issues/165
Add dotnet add package System.Memory.Data to be able to use BinaryData
Update code to avoid using partitionEvent.Data.EventBody

I update the code from
await foreach (PartitionEvent partitionEvent in consumer.ReadEventsAsync(cancellationSource.Token))
{
    eventDataRead.Add(partitionEvent.Data.EventBody.ToString());
    if (eventDataRead.Count >= maximumEvents)
    {
        break;
    }
}

to:

await foreach (PartitionEvent partitionEvent in consumer.ReadEventsAsync(cancellationSource.Token))
{
    var data = BinaryData.FromBytes(partitionEvent.Data.Body);
    eventDataRead.Add(data.ToString());

    if (eventDataRead.Count >= maximumEvents)
    {
        break;
    }
}

Hi @rido-min.  Thank you for your feedback.   Looks like we missed updating the samples README to reference the 5.3.0-beta.4 package.   I'll get that patched up.

Fixed by #17315

This issue also happens on other documentation pages like:
https://github.com/Azure/azure-sdk-for-net/blob/master/sdk/eventhub/Azure.Messaging.EventHubs/samples/Sample05_ReadingEvents.md

This issue also happens on other documentation pages like:
https://github.com/Azure/azure-sdk-for-net/blob/master/sdk/eventhub/Azure.Messaging.EventHubs/samples/Sample05_ReadingEvents.md


When overwriting native Map, use one internally for O(1) lookups

Even when overwriting native Map that doesn't comply with the spec, we should use the native Map internally rather than our O(n) slow path for object keys.

Quite possibly.  Right now we test a variety of things, and if any of them are not spec-compliant, we fall back to our own from-scratch implementation.
Maps (and Sets) are common enough that we perhaps should add a middle-ground type of fallback, where we substantially use the native implementation but only override a few things.
But profiling seems to indicate that's not actually the problem/common case with our current Map implementation.  Instead, the slow thing seems to be the defineProperties calls on each instance.  If we restructure to inherit property definitions from a prototype object (since assignment preserved enumerability we can still assign to our child object) we could potentially see a substantial speedup.
Not sure that optimizing the "object key" case is really the thing that needs doing.  Few people are using non-string/non-numeric keys as far as I can tell.
But in any case, we should take care so as not to explode the set of possible configurations we need to test.

The shim's primary goal is correctness, but performance is next, so I'd love to get both whenever possible.
I'd love to see PRs that made any "clobber the broken native implementation" code more performant.

If you interesting, how works collection polyfilling in core-js:

If collection not convert -0 key to +0 - wrap collections methods
If collection not support chaining - wrap set or add
If collection can't be init from iterable or not support iterator closing - wrap constructor
If collection hasn't [Symbol.iterator] - set method
Only with other problems - replace collection fully

In most case we have fully spec-complying native collection.
If you wanna fake subclassing - you can also add subclassing-friendly wrapper to this logic ;)

@zloirock what do you do for browsers like Safari 8 which has entries/keys/values methods that work in for..of but not as independent iterators?
What do you do in engines that don't have a native Map at all? (Note that mutating objects to add an ID is a far worse violation of the spec than O(n))

@ljharb

what do you do for browsers like Safari 8 which has entries/keys/values methods that work in for..of but not as independent iterators?

Additional buggy iterators check - fully replace collection. Possible emulate iterators by using forEach (used it before), but it creates some problems and slow.

mutating objects to add an ID is a far worse violation of the spec than O(n))

Strongly disagree.

What do you do in engines that don't have a native Map at all

Entries chain and O(1) index for all keys except frozen objects.

Mutation is clearly a violation of the spec. You can certainly make your own decision about which violation is worse or better, but I'd be surprised if many developers expected mutation more than they expected slowness.

That's your opinion, I will not persuade you. I just suggest ways to fix native collections without complete replacement.

With #328, there's still some browsers on the Map/Set` spectrum between IE 9 and latest Chrome that do have native collections, but have been totally clobbered - but that PR should preserve much or all of the native implementation.
I've also corrected the subclassing tests that were incorrectly using Map.call(this) - basically, to subclass Map and Set, Object.setPrototypeOf must be supported or shimmable.

There's still a few browers (Safari 8 in particular) where we're clobbering the entire implementation, so we still need to look into that here.
@zloirock Thanks for your persistence! Despite that we disagree on priorities of performance versus non-performance-correctness, your suggestions have helped me to improve the former without sacrificing the latter, so it's much appreciated.

If I read the spec correctly, it describes key search with O(n) algorithm.
Of course I don't mean that it should be followed, but my question is: On which basis it is assumed that native implementations internally do O(1)?
Is it observed from benchmarks, read from their source code, or is it just no-brainer assumption, taking that they may have some kind of id references to objects in C layer?

@medikoo

Map object must be implemented using either hash tables or other mechanisms that, on average, provide access times that are sublinear on the number of elements in the collection.

@zloirock great thanks, that answers perfectly.

The reality is that prior to native ES6, there is no "other mechanism" available. The spec doesn't mention mutating in http://people.mozilla.org/~jorendorff/es6-draft.html#sec-map.prototype.set, which means that that must never be any mutation of key or value.
Any way to implement O(1) without mutation or native Maps is welcome, but I've not seen it yet.


[Feature] Introduce extra substitute variable(s) for Collection Log notifier

Checklist

[X] I've searched the issues and pull requests for similar looking suggestions.
[X] I've checked the Unreleased section of the changelog for newly added features that sound like my suggestion.

Describe your Suggestion
I'd wanna have an ability to add a substitute variable to Dink for amount of collection logs a player has gotten to the notifier. For example, say I'd be called LOGS_AMOUNT and so using %LOGS_AMOUNT% inside the notifier message would be simply substituted with 592 in this scenario below:

Also, introducing an another variable for the total amount is perhaps not needed, but if user were to hardcode the amount of collection logs (for example, to made their message look like what's available in the in-game inferface) available then every once in a while, when new items are added to the game & collection log, it'd be a silly thing to update, which I could also see it tedious to keep having users have to "upkeep" that.
Names for variables are up for discussion though - don't get hung up on my original suggestion with LOGS_AMOUNT; I think it's not good, especially with how ambiguous it could get, especially if there was the second one added too, as described in paragraph above.
Reasoning
Friend of mine has reached out saying they were looking for a way to include the amount of collection logs, similar to how it's presented in the in-game interface, in the posted messaged, I do think it'd be nice, albeit niche, addition for whoever wants to personalize their messages.

honestly the entire input box could be %ONE% %TWO% %THREE% %USERNAME%, %FOUR% %TOTAL_LEVEL with no actual text by default and I wouldn't even mind it (even tho that's probably not user friendly), so any new ones we want to add are 🆒


[Release-1.31] - Custom agent/etc/containerd/certs.d/* files are deleted by k3s on startup

Backport fix for Custom agent/etc/containerd/certs.d/* files are deleted by k3s on startup

#10787

Validated on Version:
-$ k3s version v1.31.0+k3s-d926e690 (d926e690)

Environment Details
Infrastructure
Cloud EC2 instance
Node(s) CPU architecture, OS, and Version:
ubuntu
AMD
Cluster Configuration:
-1 node server
Steps to validate the fix

Install k3s
Create your own host dir at /var/lib/rancher/k3s/agent/etc/containerd/certs.d/MYREGISTRY and add custom hosts.toml and/or certs.
Add an entry for MYREGISTRY in registries.yaml and restart k3s, note that the custom files are cleaned up and replaced with the K3s-managed hosts.toml
Edit the file at /var/lib/rancher/k3s/agent/etc/containerd/certs.d/MYREGISTRY/hosts.toml to remove the DO NOT EDIT header and restart k3s; note that it is reverted to the managed content.
Remove MYREGISTRY from registries.yaml and restart k3s. Note that /var/lib/rancher/k3s/agent/etc/containerd/certs.d/MYREGISTRY is removed.

Reproduction Issue:

k3s version v1.30.4+k3s1 (98262b5d)

:~$  sudo mkdir -p /var/lib/rancher/k3s/agent/etc/containerd/certs.d/fran.test

:~$  sudo tee /var/lib/rancher/k3s/agent/etc/containerd/certs.d/fran.test/hosts.toml <<EOF
server = "https://fran.test:443"
[host."https://fran.test:443"]
  capabilities = ["pull", "resolve"]
EOF

:~$   ls /var/lib/rancher/k3s/agent/etc/containerd/certs.d/fran.test
ls: cannot access '/var/lib/rancher/k3s/agent/etc/containerd/certs.d/fran.test': No such file or directory

:~$  sudo systemctl restart k3s

:~$ sudo tee /etc/rancher/k3s/registries.yaml <<EOF
mirrors:
  "fran.test:443":
    endpoint:
      - "https://fran.test:443"
EOF

:~$  sudo systemctl restart k3s

~$  sudo sed -i '/DO NOT EDIT/d' /var/lib/rancher/k3s/agent/etc/containerd/certs.d/fran.test/hosts.toml

~$ cat /var/lib/rancher/k3s/agent/etc/containerd/certs.d/fran.test/hosts.toml
cat: /var/lib/rancher/k3s/agent/etc/containerd/certs.d/fran.test/hosts.toml: No such file or directory

sudo sed -i '/fran.test.test/d' /etc/rancher/k3s/registries.yaml

sudo systemctl restart k3s

 $ ls /var/lib/rancher/k3s/agent/etc/containerd/certs.d/
ls: cannot access '/var/lib/rancher/k3s/agent/etc/containerd/certs.d/': No such file or directory

Validation Results:

Step 2:

 sudo mkdir -p /var/lib/rancher/k3s/agent/etc/containerd/certs.d/localhost:5000

$  sudo tee /var/lib/rancher/k3s/agent/etc/containerd/certs.d/localhost:5000/hosts.toml <<EOF
server = "https://localhost:5000"
[host."https://localhost:5000"]
  capabilities = ["pull", "resolve"]
EOF

~$ sudo cat /var/lib/rancher/k3s/agent/etc/containerd/certs.d/localhost:5000/hosts.toml
server = "https://localhost:5000"
[host."https://localhost:5000"]
  capabilities = ["pull", "resolve"]

$  sudo systemctl restart k3s

~$ sudo ls /var/lib/rancher/k3s/agent/etc/containerd/certs.d/localhost:5000
hosts.toml

Step 3:

~$  sudo tee /etc/rancher/k3s/registries.yaml <<EOF
mirrors:
  "localhost:5000":
    endpoint:
      - "https://localhost:5000"
EOF

$ sudo cat /etc/rancher/k3s/registries.yaml
mirrors:
  "localhost:5000":
    endpoint:
      - "https://localhost:5000"

$  sudo systemctl restart k3s

~$ sudo cat /var/lib/rancher/k3s/agent/etc/containerd/certs.d/localhost:5000/hosts.toml
# File generated by k3s. DO NOT EDIT.

server = "http://localhost:5000/v2"
capabilities = ["pull", "resolve", "push"]

[host]
[host."https://localhost:5000/v2"]
  capabilities = ["pull", "resolve"]

 Step 4:
sudo sed -i '/DO NOT EDIT/d' /var/lib/rancher/k3s/agent/etc/containerd/certs.d/localhost:5000/hosts.toml

$  sudo systemctl restart k3s

$ sudo cat /var/lib/rancher/k3s/agent/etc/containerd/certs.d/localhost:5000/hosts.toml
# File generated by k3s. DO NOT EDIT.

server = "http://localhost:5000/v2"
capabilities = ["pull", "resolve", "push"]

[host]
[host."https://localhost:5000/v2"]
  capabilities = ["pull", "resolve"]

~$  sudo truncate -s 0 /etc/rancher/k3s/registries.yaml

$ cat /etc/rancher/k3s/registries.yaml
 <EMPTY>

~$ sudo systemctl restart k3s

Step 5:
$ sudo ls /var/lib/rancher/k3s/agent/etc/containerd/certs.d/
<EMPTY>


add option to track call IDs

would be nice if we had a reasonable scheme for testing these things at some point. Maybe we could use the stderr regex replacement schemes to hide the actual ids?

Sure, would be nice -- but also I don't think we have ever had trouble with a bug in these tracking flags.

I removed the rustup as it actually requires a test change; will do that separately.
Fine to land as-is?

@bors r+

:pushpin: Commit c379793cdee2ef6e777fce7e4f19993d29e77f9d has been approved by oli-obk

:hourglass: Testing commit c379793cdee2ef6e777fce7e4f19993d29e77f9d with merge e7ef64fb7477cc77d5b32e7060690c0c9c54015b...

Looks fine to me. Do you know if it's possible to detect a protector-caused stacked borrows violation and thus add a suggestion to the diagnostic telling you to add the new flag to your invocation to learn more?

:sunny: Test successful - checks-travis, status-appveyor
Approved by: oli-obk
Pushing e7ef64fb7477cc77d5b32e7060690c0c9c54015b to master...

Yes, that is possible. It's this code path:
https://github.com/rust-lang/miri/blob/e7ef64fb7477cc77d5b32e7060690c0c9c54015b/src/stacked_borrows.rs#L290


Assign not working for target min and max

Hello,
First when i open the assign window , the target min and max values do not correspond to what i have in the looper. Second if i modify the values click apply and close the assign window, if i reopen it later the values are back to the default ones (so my modification was not taken into account).
I tried with both tempo and cur level1.
It is really paintaking to do that directly in the looper because the default value is very far (in particular for the tempo) from the targetted one, so one has to turn the button many times until reaching the wanted value.
Even in your software it would be much quicker to be able to change these values by entering digits with the keyboard.
if the assignment worked completely on one memory  i could copy it to many other memories which seems to work well with your tool.
regards,
Fred

Hi,
you are correct,  I have tried in the assigment window to change the values for CUR LEVEL1, they are written in the file but not applied in the window when you reopen the assign window.
I will check that when I have some time.
Thanks for the report.

OK thank you, please let me know when you fix the issue.
best


Port flavortext.h from Singularitron to Python

This would make it much easier to use the super cool flavortext from the Singularitron project elsewhere.
I will work on this but I have no idea how C++ works. Wish me luck.

found some code written by @1minus4
I'm making some changes and will make a pull request later tonight

Just finished the changes.
The code kinda sucks and uses 2 different files but it works.
Closing this issue and making a PR now.