[CRITICAL BUG] onSharedPreferenceChanged() does not fire in another process if that process is committing

I was seeing some occasional weirdness in my app after migrating over to Harmony. It looks like onSharedPreferenceChanged() does not fire in another process if that process happens to be committing at the same time.
Steps to reproduce:

In an activity, run this at the tap of a button:

sharedPrefsEditor.putBoolean("testKey1", false).commit();
sharedPrefsEditor.putBoolean("testKey2", false).commit();

In another process (in my case a foreground service):

@Override
            public void onSharedPreferenceChanged(@NotNull SharedPreferences sharedPreferences, @org.jetbrains.annotations.Nullable String prefKey) {

                if (prefKey == null) {
                    Utils.logWarn(TAG, "null key!");
                    return;
                }

                Utils.logDebug(TAG, "onSharedPreferenceChanged() prefKey: " + prefKey);

                if (prefKey.equals("testKey1") || prefKey.equals("testKey2")) {
                    sharedPrefsEditor.putBoolean("testKey3", false).commit();
                }
            }

The expected output is:
onSharedPreferenceChanged() prefKey: testKey1
onSharedPreferenceChanged() prefKey: testKey3
onSharedPreferenceChanged() prefKey: testKey2
onSharedPreferenceChanged() prefKey: testKey3

The actual output is USUALLY:
onSharedPreferenceChanged() prefKey: testKey1
onSharedPreferenceChanged() prefKey: testKey3

onSharedPreferenceChanged() does not fire for testKey2 changing at all!
I have also rarely seen:
onSharedPreferenceChanged() prefKey: 2
onSharedPreferenceChanged() prefKey: 1
onSharedPreferenceChanged() prefKey: 3
onSharedPreferenceChanged() prefKey: 3

... which would be fine, but this is not usually the case.
This does NOT happen to a listener in the same activity making the testKey1 and testKey2 commits.
This does NOT happen if you commit both keys at the same time:
sharedPrefsEditor.putBoolean("testKey1", false);
sharedPrefsEditor.putBoolean("testKey2", false);
sharedPrefsEditor.commit();

This does NOT happen if using sharedPrefsEditor.apply() in the activity instead of commit(), but I have a feeling that's just because the write in the service is being called after the commit is already persisted to disk, so it's not really happening at the same time in this test.
P.S. apply() seems to be preferred since it is asynchronous and leaves the writing to the background. Does onSharedPreferenceChanged() only fire once it's persisted to disk? In that case, when is using commit() necessary or preferred over apply()?
P.S. Super minor but the regular SharedPreferences listener is named OnSharedPreferenceChangeListener. The Harmony version is named OnHarmonySharedPreferenceChange**d**Listener. Is this on purpose?

I'm curious if this also happens in the Android SharedPreference as well. I believe it may be a deadlock of the main thread, as the call to commit() blocks the thread until it completes, and the callback of OnSharedPreferenceChangeListener occurs on the main thread.

apply() seems to be preferred since it is asynchronous and leaves the writing to the background. Does onSharedPreferenceChanged() only fire once it's persisted to disk? In that case, when is using commit() necessary or preferred over apply()?

If it's listened on the same process, it'll fire once it's committed to memory. If it's on a different process, the preference change will trigger once it's committed to disk.

Super minor but the regular SharedPreferences listener is named OnSharedPreferenceChangeListener. The Harmony version is named OnHarmonySharedPreferenceChangedListener. Is this on purpose?

That is totally a typo. I can make a new class with the correct name, and deprecate this class in the next version. Great catch!

Hard to say whether this happens with the Android SharedPreferences since that doesn't work correctly with multiple processes, which why we're here in the first place.
I'm not sure what thread deadlocking is, but if it's similar to a thread sleeping, shouldn't the listener still fire after the commit is done? It never ends up firing. Can this be fixed?
Is it safe to use apply() instead or could this manifest with apply() as well if the timing is just right?

Unfortunately after some more testing it looks like using apply() does not fix the issue. Steps to reproduce:

In the first process (in my case onStartCommand() of a foreground service), run a loop that will write every 10ms for 10s:

i = 0;
        handler = new Handler();
        runnable = new Runnable() {
            @Override
            public void run() {
                sharedPrefsEditor.putBoolean("testKey1", false).apply();
                if (i < 1000) {
                    handler.postDelayed(runnable, 10);
                    i++;
                }
            }
        };
        runnable.run();

Also set up a listener in this process:

@Override
            public void onSharedPreferenceChanged(@NotNull SharedPreferences sharedPreferences, @org.jetbrains.annotations.Nullable String prefKey) {

                Utils.logDebug(TAG, "onSharedPreferenceChanged() prefKey: " + prefKey);
            }

In a a second process (in my case activity onStart()), run a loop that will run for 5 seconds, writing 10 times every 500ms:

Utils.logDebug(TAG, "Starting loop in activity!");
        i = 0;
        handler = new Handler();
        runnable = new Runnable() {
            @Override
            public void run() {
                sharedPrefsEditor.putBoolean("testKey2", false).apply();
                if (i < 10) {
                    handler.postDelayed(runnable, 500);
                    i++;
                    //Utils.logDebug(TAG, "i: " + i);
                } else {
                    Utils.logDebug(TAG, "Ended loop in activity!");
                }
            }
        };
        runnable.run();

Start the service to run the loop for 10s. You have 5 seconds to start the activity so it can try to write prefKey2 while the service is writing prefKey1 frequently.

Expected output:
You should see "onSharedPreferenceChanged() prefKey: testKey2" 5 times in the logcat.
Actual output:
"onSharedPreferenceChanged() prefKey: testKey2" appears 3-4 times in the logcat. Some of the calls to onSharedPreferenceChanged are never received by the service in the second process.

Found another easier way to demonstrate the bug that also fails more often. Have 2 processes write at the same time and listen for changes from both. Here are the steps to reproduce.
1 ) In the first process' onCreate (my case a service) run a loop that will write testKey1 every 2 seconds on the second. Have it start when the second process tells it to via a sharedPrefs change:
@Override
            public void onSharedPreferenceChanged(@NotNull SharedPreferences sharedPreferences, @org.jetbrains.annotations.Nullable String prefKey) {

                Utils.logDebug(TAG, "onSharedPreferenceChanged() prefKey: " + prefKey);

                if (prefKey.equals("startLoopInSecondProcess")) {
                    Utils.logDebug(TAG, "Starting loop in service!");
                    i = 0;
                    handler = new Handler();
                    runnable = new Runnable() {
                        @Override
                        public void run() {
                            //Utils.logDebug(TAG, "---Running at SystemClock.uptimeMillis(): " + SystemClock.uptimeMillis());
                            sharedPrefsEditor.putBoolean("testKey1", true).apply();

                            if (i < 30) {
                                handler.postAtTime(runnable, (SystemClock.uptimeMillis() / 1000 * 1000) + 2000);
                                i++;
                            } else {
                                Utils.logDebug(TAG, "Ended loop in service!");
                            }
                        }
                    };
                    handler.postAtTime(runnable, (SystemClock.uptimeMillis() / 1000 * 1000) + 2000);
                }
            }

In the second process' onCreate (my case an activity) run a loop that will write testKey2 every 2 seconds on the second, and trigger the first process to start at the same time so that they are synced:

Utils.logDebug(TAG, "Starting loop in activity!");
        i = 0;
        handler = new Handler();
        runnable = new Runnable() {
            @Override
            public void run() {
                //Utils.logDebug(TAG, "---Running at SystemClock.uptimeMillis(): " + SystemClock.uptimeMillis());
                sharedPrefsEditor.putBoolean("testKey2", true).apply();

                if (i < 30) {
                    handler.postAtTime(runnable, (SystemClock.uptimeMillis() / 1000 * 1000) + 2000);
                    i++;
                } else {
                    Utils.logDebug(TAG, "Ended loop in activity!");
                }
            }
        };
        handler.postAtTime(runnable, (SystemClock.uptimeMillis() / 1000 * 1000) + 2000);
        sharedPrefsEditor.putBoolean("startLoopInSecondProcess", true);

Set up a listener in both processes:

@Override
            public void onSharedPreferenceChanged(@NotNull SharedPreferences sharedPreferences, @org.jetbrains.annotations.Nullable String prefKey) {

                Utils.logDebug(TAG, "onSharedPreferenceChanged() prefKey: " + prefKey);
            }

Clear the logcat, and start both processes.

Filter the logcat to one process at a time and look at what is written every 2 seconds. You can even clear the logcat after seeing the result, before the next result comes in, to make the output more clear.

Expected result:
You would expect each listener to fire both for the change made in its own process and the other process:
onSharedPreferenceChanged() prefKey: testKey1
onSharedPreferenceChanged() prefKey: testKey2
Actual result:
In my service process I usually only see the self change:
onSharedPreferenceChanged() prefKey: testKey1
In my activity process I usually see both, but occasionally only the self change:
onSharedPreferenceChanged() prefKey: testKey1
This is a blocking bug for me! I can't use the library like this since I can't guarantee different processes are not writing at the same time. I can try to help look at the code for Harmony but I'm afraid I can't read Kotlin very well.

I think I found the bug, and it has to do with the timing of the changes. Essentially, when you call the following on the first process:
// Primary process
sharedPrefsEditor.putBoolean("testKey1", false).commit();
sharedPrefsEditor.putBoolean("testKey2", false).commit();

You create two transactions in Harmony, each with their own timestamp. This gets stored, which notifies the other processes. So then what you have is this:
// Transactions
-> testKey1 transaction timestamp 1
-> testKey2 transaction timestamp2

What happens in your scenario is that you create a new transaction by committing the event of testKey3 on the alternate process. This means that when testKey2 transaction comes in, it's considered "old" (since testKey3 is now the "last" transaction), and it's basically ignored for the change listener (but not for storage). To illustrate this situation:
onSharedPrefChange -> emit testKey1
create transaction for testKey3
-> testKey3 transaction timestamp 3
receive testKey2 transaction
testKey2 transaction is old compared to testKey3, do not emit

I do want to make clear your data is stored. It's just that some logic meant to prevent re-emitting changed keys also was preventing the new keys from emitting in this particular circumstance.

Good work! Whether or not it's saved, I still need the notifications to work reliably, or else one process will continue with old data from local memory and end up updating the shared prefs later without the change from the other process included. Do my second and third ways to reproduce above also cover the same cause you found? Are you able to fix it relatively easily?


Add local integration test

There are 3 different Lambda functions; make sure they agree on the intermediate data formats

Consider using localstack

The live_test feature provides an end-to-end test, so I'm going to de-prioritize this

live_test has proven to be very effective, especially now that we have several native dependencies (upx, pdftotext, etc) that are very difficult to test locally.
Closing as not needed


node: Replace ipv[46]MasqAddrs with Table[NodeAddress]

Replace the global map of BPF masquerade addresses with a query to Table[NodeAddress] in the loader's patchHostNetdevDatapath and remove the now unused code around masquerade addresses in pkg/node.

@dylandreimerink Please take a look and let me know whether you're OK with these incremental changes. I don't think they're entirely taking the loader to the right direction, so if you have a better idea what steps we should take let me know and I'll refactor this.

/test

/test

A config flag starting with a verb (Derive in this case) typically conveys that this is a boolean, though. (e.g. derive the masq IP or not?) Also e2manywords; let's call this what it is: MasqueradeDevice. The fact that it's (currently) used to derive the masq IP can go in a comment on the field, though if it's extended later, that will go stale.

I would like to keep it as it was originally (as bad as it was) and not start changing it now.

Unless we can tackle https://github.com/cilium/cilium/issues/17158 in the very short term (1.16) and it's actually planned, let's not assume that this is temporary and just document this as a feature/requirement of the loader.

Good point, I'll adjust the comments.

One more thing, this string can be empty. It's not clear what the caller should expect when it's left empty. If it's optional, it needs to be specified why.

Will add comments to explain that default is empty which means the address is taken from the actual device and not overridden by this.

Adding reconciliation later is perfectly fine, of course. Though I'd prefer if the query happens as early as possible so we can get rid of the stringly input param asap and pass around link objects instead. Not sure if there's some kind of startup ordering here, I assume this device exists before the agent starts?

Yes for this particular hidden option it is assumed that the device exists before the agent starts.
And agreed on querying much earlier. This will follow!

One more thing, this string can be empty. It's not clear what the caller should expect when it's left empty. If it's optional, it needs to be specified why.

A Config struct is populated via Hive from command-line flags and config files and the defaults for it are specified when defining the flag. Only in tests is it manually populated. I added comments on the defaults and the optionality.

/test

/test

/test

CI triage (WIP)

Clustermesh Upgrade failed waiting for the clustermesh to become ready. Could be a real issue or a flake, investigating. https://github.com/cilium/cilium/actions/runs/8231576562/job/22507953395#step:24:3642 clustermesh-apiserver    1 pods of Deployment clustermesh-apiserver are not ready
Clustermesh conformance:

(6, vxlan, ipv4, disabled, none, clustermesh, cluster, cluster... also failed waiting for the mesh, this time both hubble relay and clustermesh apiserver:

Errors:                hubble-relay             hubble-relay             1 pods of Deployment hubble-relay are not ready
                      clustermesh-apiserver    clustermesh-apiserver    1 pods of Deployment clustermesh-apiserver are not ready

Installation and Connectivity Test (2, disabled, dual, wireguard, none, clustermesh, migration, m... failed all the external tests. Could be a real issue or a flake, investigating.

/test


Add Gymnasium München Moosach

Hi!
Our website: https://gym-muc-moosach.musin.de/
The students emails differs from the address (but afaik, there is no @gym-muc-moosach.musin.de address).
Yes, it is a secondary school, but we do have normal it classes where we are allowed to work with IntelliJ (and yes, it is installed on most of the student devices there). We learn SQL there and code with Java. I'd really appreciate the enterprise edition (I am also using it to develop my stuff at home). In addition we have extra lessons every week, where students can learn programming. We do pretty much all languages there (currently focused on python)
Thanks!

@Bixilon Thank you for your patience while waiting for a review and processing your request.
Pull request merged. Thank you!

Thanks!


docs: Add documentation for debounce operator

Close #88

cc @btroncone

Codecov Report

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

@@           Coverage Diff           @@
##           master     #136   +/-   ##
=======================================
  Coverage   86.88%   86.88%
=======================================
  Files           4        4
  Lines          61       61
  Branches        7        7
=======================================
  Hits           53       53
  Misses          5        5
  Partials        3        3

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 86bdde6...a37ddfa. Read the comment docs.

@ashwin-sureshkumar can you update the branch pls?

@ladyleet - Done

LGTM. Just need one more approved

@ashwin-sureshkumar yay! winning. thx @sumitarora


hoist target resolution to a different stage

blocks on elixir having a well-defined notion of what MIX_TARGET is.

now supports nerves, by using env variables to set target parts.  Not going to support burrito


Icom 9700 (Possible Icom 7300) Direct Connection idea

The Icom 9700 ci-v has a 3.5mm jack connection that can be used to send and receive ci-v commands. Could make a neat direct connection between m5 stack and IC MultiMeter with IC Multimeter sending those commands via serial port.
Just an idea I had ;)
Thanks for the great project!

Hi Tom,
Yes, this is the same on 7300. But I haven't got this sort of cable (USB to 3.5mm Jack).
Code will be the same, I think.
Armel.

I'll do some tests and get back to you
T

Hi,
I think there might be some misunderstanding. The CI-V port of 7300 and 9700 ( and other Icom trx) is purely a classic serial  one with combined rx and tx lines. So nothing to do with/ no need for USB .
Would be very useful to have a connection possibility via that port which is usually free or easily "multipliable".
Interfacing with the 3.5mm ci-v port could be easily done via the pins of the M5 stack i think.
Best 73
Felix


Remove pkg/integration and move it to testutil or integration-cli

The more I was thinking about, the less pkg/integration package made sence. It's either

some helper for tests (but general, could be used outside of the integration test), and that could go to the, already existing, pkg/testutil package
some go-check (or only-integration) helpers, and thus could go directly in a sub package of integratiion-cli

It changes a lot of files but does not much 🐻
/cc @thaJeztah @icecrime @dnephin @cpuguy83 @AkihiroSuda @tiborvass
🐸
Signed-off-by: Vincent Demeester<EMAIL_ADDRESS>

@thaJeztah there is definitely some cleaning to do, but baby steps, baby steps 👼

Agreed, no need to do in this PR


Prev footer nav

Overview

Fix bug causing next item to not be the correct one
Added prev item navigation
Refactor function to get items from tree
Added missing styles to footer nav links

Evidence

Link T-20284


WIP: Try killing declare_id! by moving it into the #[program] macro.

This is me attempting to kill the declare_id! macro/fix #695 by moving that ID declaration machinery inside #[program].
I first tried implementing a program_id!() macro, but I think it's actually a bit tricky since proc macros don't really give you access to the file in which they're invoked :/ There's https://docs.rs/proc-macro2/0.4.30/proc_macro2/struct.Span.html#method.source_file but I couldn't figure out how to actually get access to it (it's "semver exempt" and you have to go out of your way to turn it on, as far as I understand it). This is a bummer because it means if you have multiple programs, the individual program_id!() calls don't really know which program they're in.
So, this PR just sneaks the ID declaration into the #[program] macro—which conveniently knows the program's name, so I don't have to care which file I'm in.

Closing as stale.


Soften bias knee

Create a piecewise defined soft biasing function to reduce the buzz of biased monophone.

Here's the derivative of soft pulse function that can be integrated and used in the construction.
export function piecewisePulse(phase, sharpness, duty, knee) {
  phase -= Math.floor(phase);
  if (phase < knee) {
    return Math.sin(0.5 * Math.PI * phase / knee);
  } else if (phase < duty - knee) {
    return 1;
  } else if (phase < duty + knee) {
    return Math.sin(0.5 * Math.PI * (duty - phase) / knee);
  } else if (phase < 1 - knee) {
    return -1;
  } else {
    return Math.sin(0.5 * Math.PI * (phase - 1) / knee);
  }
}


SimpleBlinds Signature & Data Points

Describe the bug
I have added two smart blinds to my tuya setup (YiHao YH002 Smart Blind Motors), they do connect to the Home app (battery went out, showed device as not resposnive, recharged, back instantly), but I’m having a hard time figuring out the commands and datapoints for integrating them properly.
My signature is: {"1":"stop","2":50,"3":0,"5":false,"7":"opening","8":"cancel","9":0,"10":0,"11":32960}.
I assumed 1 would be the dpAction. I found the only mentions of these arguements to be in issue #66, in a comment here. I also tried setting my cmdOpen to 7, as well as switching between SimpleBlinds & SimpleBlinds2.
Here is my accessory layout:
        {
            "name": "Bedroom Left Blind",
            "type": "SimpleBlinds2",
            "manufacturer": "YiHao",
            "model": "YH002 Smart Blind Motor",
            "id": "###",
            "key": "###",
            "timeToOpen": 33,
            "cmdOpen": 7,
            "dpAction": 1
        },
        {
            "name": "Bedroom Middle Blind",
            "type": "SimpleBlinds2",
            "manufacturer": "YiHao",
            "model": "YH002 Smart Blind Motor",
            "id": "###",
            "key": "###",
            "timeToOpen": 33
        }

Is there any more details on the dp’s and cmd’s so I know what to plugin where? Sorry if this is the same issue as #66, I couldn’t find a lot of clear info/relevancy to my issue. The blinds are connected and responding correctly, I just can’t figure out how to make them work.
Thanks!
Environment (please complete the following information):

OS: Raspbian HOOBS Install
iOS version: 14.2
Homehubs: HOOBS 3.2.9
Node Version: 12.19.0
Plugin Version: 1.1.0
Accessory Type: SimpleBlinds/2

Console Log
Discovery
11/11/2020, 12:38:06 pm [TuyaLan] Discovered Bedroom Left Blind (###) identified as SimpleBlinds2 (3.3)
11/11/2020, 12:38:06 pm [TuyaAccessory] Changing ping gap for Bedroom Left Blind to 9s
11/11/2020, 12:38:06 pm [TuyaLan] Connected to Bedroom Left Blind
11/11/2020, 12:38:06 pm [TuyaAccessory] Sending first query to Bedroom Left Blind (3.3)
11/11/2020, 12:38:06 pm [TuyaAccessory] Heard back from Bedroom Left Blind with command 10
11/11/2020, 12:38:06 pm [TuyaLan] Ready to handle Bedroom Left Blind (SimpleBlinds2:3.3) with signature {"1":"stop","2":50,"3":0,"5":false,"7":"opening","8":"cancel","9":0,"10":0,"11":32960}

Trying to use the blinds
11/11/2020, 12:38:36 pm [TuyaAccessory] Blinds asked to move from 100 to 0
11/11/2020, 12:38:36 pm [TuyaAccessory] Sending Bedroom Left Blind {"1":"off"}
11/11/2020, 12:38:36 pm [TuyaAccessory] Blinds asked to move from 100 to 100
11/11/2020, 12:38:36 pm [TuyaAccessory] Blinds closing had started<PHONE_NUMBER>374; 270ms ago
11/11/2020, 12:38:36 pm [TuyaAccessory] Blinds' adjusted assumedPosition is 99.17878787878787
11/11/2020, 12:38:36 pm [TuyaAccessory] Sending Bedroom Left Blind {"1":"stop"}
11/11/2020, 12:38:36 pm [TuyaAccessory] Heard back from Bedroom Left Blind with command 8
11/11/2020, 12:38:37 pm [TuyaAccessory] Blinds asked to move from 99.17878787878787 to 0
11/11/2020, 12:38:37 pm [TuyaAccessory] Blinds closing had started<PHONE_NUMBER>374; 1038ms ago
11/11/2020, 12:38:37 pm [TuyaAccessory] Blinds' adjusted assumedPosition is 96.85454545454546
11/11/2020, 12:38:37 pm [TuyaAccessory] Sending Bedroom Left Blind {"1":"off"}
11/11/2020, 12:38:40 pm [TuyaAccessory] Blinds asked to move from 96.85454545454546 to 100
11/11/2020, 12:38:40 pm [TuyaAccessory] Blinds closing had started<PHONE_NUMBER>377; 4192ms ago
11/11/2020, 12:38:40 pm [TuyaAccessory] Blinds' adjusted assumedPosition is 87.2969696969697
11/11/2020, 12:38:40 pm [TuyaAccessory] Sending Bedroom Left Blind {"1":"7"}

UPDATE:
After looking into the accessory definition for SimpleBlinds, I figured out how to control the blinds properly.
      {
            "name": "Bedroom Left Blind",
            "type": "SimpleBlinds",
            "manufacturer": "YiHao",
            "model": "YH002 Smart Blind Motor",
            "id": "###",
            "key": "###",
            "timeToOpen": 33,
            "cmdOpen": "open",
            "cmdStop": "stop",
            "cmdClose": "close",
            "dpAction": 1
        },

I figured out what cmdOpen, cmdStop, and cmdClose actually meant. They are the text/value sent to dpAction. Doh.
Blinds work perfectly now.  Thank you @AndrewJ990 in issue #66 for this comment.


[do not merge] Fake change to run all tests and establish a baseline

Summary
(Summarize the problem solved by this PR, and how to verify it manually)
Please check the relevant options

[ ] Bug fix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change which adds functionality)
[ ] Dependency update
[ ] Refactoring
[ ] Breaking change (fix or feature that would cause existing functionality to change)
[ ] This change requires a documentation update
[ ] This change requires execution against OCP (use run tests phrase in comment)

Checklist:

[ ] Example scenarios has been updated / added
[ ] Methods and classes used in PR scenarios are meaningful
[ ] Commits are well encapsulated and follow the best practices

run tests

We can trigger jobs manually, we have weekly jobs ...


use  n-popover set trigger="manual"  has  bug   slot[trigger] is empty

TuSimple/naive-ui version (版本)
2.28.0
Vue version (Vue 版本)
3.2.33
Browser and its version (浏览器及其版本)
chrome latest
System and its version (系统及其版本)
none
Node version (Node 版本)
Reappearance link (重现链接)
https://www.naiveui.com/zh-CN/os-theme/components/popover#Popover-Props
Reappearance steps (重现步骤)
none
Expected results (期望的结果)
repair bug
Actual results (实际的结果)
use  n-popover set trigger="manual"  has  bug   slot[trigger] is empty
Remarks (补充说明)

Please give a peappearance demo link

no reproduction


Nuget package?

Is this published to Nuget and what is the name of the Nuget package?

The current nuget package is published here. It is only available via github packages, so that means you would need to use a Nuget.config file to specify the source.

Is this how you mean?
I am getting the error shown the console.

Did you add the correct link?

Currently, the organization settings don't allow for making the nuget package public, so I'll look toward pushing something to nuget.

Any update on this matter? @mightyshazam

Any update on this matter? @mightyshazam

We were looking at changing the API and implementation to incorporate delta-kernel-rs. We didn't want to publish a nuget package and then immediately publish a radically different one.

#78 should close this issue

@Yavari @diaconori  The nuget package is finally published at https://www.nuget.org/packages/DeltaLake.Net/0.1.0.
The next step is to get it automated within the CI pipeline.


LocalizationResourceManager question

Hello, I hope you are doing good!
My question is:
Why are you using Jon Skeet Singleton pattern on LocalizationResourceManager class?
This one: https://www.jonskeet.uk/csharp/singleton.html
Is it even needed? Won't it be registered as singleton on MAUI dependency injection anyways?

2 reasons.

This library is a replacement library for the LocalizationResourceManager in Xamarin Community Toolkit and I wanted to change as little as possible to upgrade from Xamarin to Maui.
For XAML, the IMarkupExtension is used to access resources and that is not resolved by the DI container. So injecting the ILocalizationResourceManage is not possible. Resolving it internally is possible, but then you need a reference to the ServiceProvider.

ILocalizationResourceManage will be registered with DI and is the prefered/recommended way of using for classes resolved by the DI Container. e.g. Views / ViewModels
Note: Please create a Discussion instead of an Issue for this kind of topics in the future, thanks!


Change antiaffinity match value to fixed "kibana"

Fixing "antiAffinity" value is not used in deployment.
README.md accepts value soft/hard, while actual deployment.yaml file not using the value, using the whole YAML instead.
The whole section is copied from elasticsearch's chart. Since no uname is defined, the antiaffinity match value is configured to fixed value "kibana"

[x] Chart version not bumped (the versions are all bumped and released at the same time)
[ ] README.md updated with any new values or changes
[ ] Updated template tests in ${CHART}/tests/*.py
[ ] Updated integration tests in ${CHART}/examples/*/test/goss.yaml

Since this is a community submitted pull request, a Jenkins build has not been kicked off automatically. Can an Elastic organization member please verify the contents of this patch and then kick off a build manually?


Foreach with nested Invocations breaking

                        foreach (
                            var childType in typesByName[type.name].fields.Select(
                                    field => field.type
                                )
                                .Where(isObject)
                        ) {
                            recurseReturned(childType);
                        }
// should be something like
                        foreach (
                            var childType in typesByName[type.name].fields
                                .Select(field => field.type)
                                .Where(isObject)
                        ) {
                            recurseReturned(childType);
                        }

This was resolves in #7


Formula version badges

See also, https://github.com/Homebrew/homebrew/issues/48299
It would be great for package authors to be able to include badges on their Github README.mds indicating which version of their package is currently available via Homebrew. Such badges exist for other package managers like PYPI. It seems that braumeister.org may be the correct service to provide at least a GET method to fetch the current version of a package, if not full on svg badge support.

A minimalistic API for the current formula versions is no problem. Is that everything that’s required for shields.io?

In short: I have no idea. But it's a step in the right direction. Let's see if anyone responds to the issue over there, and what they have to say. If all else fails I could roll my own using a simple API. I'm guessing it's a necessary condition, but I'm not sure if it's sufficient. I'll try to dig around some more.

Is that everything that’s required for shields.io?

@koraktor Yes...that is all that is needed. For example, badges for npm packages are based on API calls such as:
❯ curl https://api.npmjs.org/downloads/point/last-month/selectn
{"downloads":37834,"start":"2015-12-30","end":"2016-01-28","package":"selectn"}

❯ curl https://registry.npmjs.org/-/package/selectn/dist-tags
{"latest":"0.10.0"}

This is now available:
http://braumeister.org/formula/git/version
http://braumeister.org/repos/Homebrew/homebrew-versions/formula/tomcat7/version

:tada: :clap:

Is that everything that’s required for shields.io?
Sebastian Staudt Yes...that is all that is needed. For example, badges for npm packages are based on API calls such as:
❯ curl https://api.npmjs.org/downloads/point/last-month/selectn
{"downloads":37834,"start":"2015-12-30","end":"2016-01-28","package":"selectn"}
❯ curl https://registry.npmjs.org/-/package/selectn/dist-tags
{"latest":"0.10.0"}
REF: https://github.com/badges/shields/blob/master/server.js#L1341-L1523

If someone would put in a PR with shields.io that would be great. I am contemplating teaching myself enough JS to hack away at https://github.com/badges/shields/blob/master/server.js but I think someone else could do it much more expediently than I could.

This is excellent. :clap:

:+1:

I have just added a basic PR for this functionality here: https://github.com/badges/shields/pull/675 Hopefully this will get pulled in.

Thanks @gep13.
Example for Git:

@gep13 you have gittip or flatr? I'd shoot you a few bucks for beer or coffee! :tada:

@zbeekman thank you for the very kind offer, but this really isn't required.  I needed this for one of my own projects, so was happy to do it, but thank you, I very much appreciate the offer :smile:


fix: simulator mobile-UI for smaller devices

Fixed mobile Ui for smaller devices
Now, toggle new simulator Ui for devices smaller than 1000px

Coverage remained the same at 81.907% when pulling e15f29ced4c40ce303bd52449eb9f64d10f48b9c on pulkit-30:mobile-styles into 1e918ae327f7dc03eddec559cb0a0130211429d3 on CircuitVerse:master.

Merging this as the hotfix


fix: type error combine coverage fix

Added try catch to handle combine coverage error

OUCH

Oh no! It hurts!


Dependency in sbteclipse when using source generators.

In my build.sbt (sbt 0.13, sbteclipse 2.5.0) I have the following
sourceGenerators in Compile += Def.task {
  import SimplezGenerator._
  val result : Seq[(String, String)] = makeSomeSources()
  result.map{case (name, content) =>
    val file = (sourceManaged in Compile).value / "simplez" / name
    IO.write(file, content)
    file
  }
}.taskValue

EclipseKeys.createSrc := EclipseCreateSrc.Default + EclipseCreateSrc.Managed

Unfortunately I need to tell sbteclipse to put the managed sources in the classpath. How can I achieve the same, whilst not making sbteclipse a plugin dependency of my project and keep it in the global ~/.sbt/0.13 definition? I would prefer not to include IDE artifacts in the project. Hopefully sbteclipse could figure out on its own, that there are managed resources in the project and add them to the classpath.

sbteclipse 4.0.0-RC1 will puts managed sources on your classpath by default


Added documentation for the requirements on Linux

Description

Updated readme.md to inform users they should use the official mono-project packages on Linux.
Updated installation.md to inform users they should use the official mono-project packages on Linux.

Motivation and Context

This is important because the documentation mentioned mono-complete is required
but did not explicitly mention it requires the official mono-project packages.
The mono-complete packages provided by Linux distributions may or may not
include msbuild which is required by this extension.

Ubuntu for example, does not include msbuild in their mono-complete package

How Has This Been Tested?

By setting up the build environment for nanoFramework and nf-VSCodeExtension
on a brand new installation of Ubuntu 22.04. I had, following the instructions,
simply installed mono-complete like so: apt-get install mono-complete.
As a result, I ended up with a mono installation without msbuild
Installing mono-complete provided by the official mono-project solved the issue.

Types of changes

[ ] Improvement (non-breaking change that improves a feature, code or algorithm)
[ ] Bug fix (non-breaking change which fixes an issue with code or algorithm)
[ ] New feature (non-breaking change which adds functionality to code)
[ ] Breaking change (fix or feature that would cause existing functionality to change)
[ ] Config and build (change in the configuration and build system, has no impact on code or features)
[ ] Dependencies (update dependencies and changes associated, has no impact on code or features)
[ ] Unit Tests (add new Unit Test(s) or improved existing one(s), has no impact on code or features)
[x] Documentation (changes or updates in the documentation, has no impact on code or features)

Checklist:

[ ] My code follows the code style of this project (only if there are changes in source code).
[x] My changes require an update to the documentation (there are changes that require the docs website to be updated).
[ ] I have updated the documentation accordingly (the changes require an update on the docs in this repo).
[x] I have read the CONTRIBUTING document.
[ ] I have tested everything locally and all new and existing tests passed (only if there are changes in source code).
[ ] I have added new tests to cover my changes.

 Thank you for your submission, we really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.:x: timothyparez sign nowYou have signed the CLA already but the status is still pending? Let us recheck it.


Waypoint: More information and Go to my next Challenge(ctrl + enter) does not function in mobile layout

When trying to complete a lesson from my andriod phone in mobile or destkop version of the page the
More information and Go to my next Challenge(ctrl + enter) does not function.
I tried multiple lessons and in firefox and in the chrome browser from my andriod phone but no luck these two buttons are unclickable.

Closing as stale, please reopen if this is still an issue for you


Nolo cv1 not tracking

Im using Archlinux with the latest master openhmd but I can't get any tracking data from the nolo cv1. Using the simple example I see that it's recognized but it only sends zeroes as position. I've tried the nolo with my phone and it's working fine there so it shouldn't be a Hardware problem.
`OpenHMD version: 0.3.0
num devices: 7
device 0
vendor:  LYRobotix
product: NOLO CV1
path:    0001:0003:00
class:   HMD
flags:   06
null device:         no
rotational tracking: yes
positional tracking: yes
left controller:     no
right controller:    no
device 1
vendor:  LYRobotix
product: NOLO CV1: Controller 0
path:    0001:0003:00
class:   Controller
flags:   16
null device:         no
rotational tracking: yes
positional tracking: yes
left controller:     no
right controller:    yes
device 2
vendor:  LYRobotix
product: NOLO CV1: Controller 1
path:    0001:0003:00
class:   Controller
flags:   0e
null device:         no
rotational tracking: yes
positional tracking: yes
left controller:     yes
right controller:    no
device 3
vendor:  OpenHMD
product: External Device
path:    (none)
class:   HMD
flags:   06
null device:         no
rotational tracking: yes
positional tracking: yes
left controller:     no
right controller:    no
device 4
vendor:  OpenHMD
product: HMD Null Device
path:    (none)
class:   HMD
flags:   05
null device:         yes
rotational tracking: yes
positional tracking: no
left controller:     no
right controller:    no
device 5
vendor:  OpenHMD
product: Left Controller Null Device
path:    (none)
class:   Controller
flags:   0f
null device:         yes
rotational tracking: yes
positional tracking: yes
left controller:     yes
right controller:    no
device 6
vendor:  OpenHMD
product: Right Controller Null Device
path:    (none)
class:   Controller
flags:   17
null device:         yes
rotational tracking: yes
positional tracking: yes
left controller:     no
right controller:    yes
opening device: 0
resolution:              0 x 0
hsize:                   0.000000
vsize:                   0.000000
lens separation:         0.000000
lens vcenter:            0.000000
left eye fov:            0.000000
right eye fov:           0.000000
left eye aspect:         0.000000
right eye aspect:        0.000000
[EE] invalid type given to getf (18d)
distortion k:            -162948977790940663016414208761790464.000000 0.000000 -162938955428382608577708625452072960.000000 0.000000 0.000000 0.000000
control count:           0
controls:
rotation quat:           0.000000 0.000000 0.000000 0.000000
position vec:            0.000000 0.000000 0.000000
rotation quat:           0.000000 0.000000 0.000000 0.000000
position vec:            0.000000 0.000000 0.000000`

This could be a firmware related issue, I will see if i can upgrade the Nolo and see if i can reproduce.

This is currently being investigated, for firmware below version <2.0 the PR #227 will fix this, for firmware above 2.0, a driver rewrite is in progress.

many thanks your PR is working for me :)
should I close this for now or let it open for the driver rewrite?

I will leave this open until the driver rewrite is pushed, thanks!

The fix for the old firmware is in master now.

New driver rewrite is pushed as well! now in Master and in 0.3-rc2
Was part of #240


Fix update issue in kubefed Distribute

For update, a valid ResourceVersion must be specified. The API server/etcd
uses optimistic locking via CAS with the ResourceVersion, ie the input
ResourceVersion must match the existing ResourceVersion on update. The pattern
is to get the existing resource, modify it as needed but retain the ResourceVersion,
then issue the update. There's also a utility, retry.RetryOnConflict, to aid with
retries in case of a conflict due to a concurrent modification.
Also added some debug logging and more context to the error messages to aid
in troubleshooting.
Signed-off-by: Tom Pantelis<EMAIL_ADDRESS>

Perhaps it makes more sense to use CreateOrUpdate and simplify the logic here. What do you think?

It would make sense to use it but the link above is from the v0.2.0-rc.0 version which looks like the release candidate for the next version.  We're using v0.1.12. The signature for the MutateFn changed and the internal implementation was refactored.  Notice that the v0.1.12  version doesn't immediately check the error from the Get call on line 138 although it's not really a big deal.  So they've cleaned up the code in the newer version.
Another thing is that it calls the MutateFn on both create and update which means we'd have to either refactor our code a bit wrt createFederatedResource (and probably refactor UTs as they test/use it) or keep using createFederatedResource as is and incur an additional DeepCopyObject.
Given all that, I'd prefer to keep it as is for now and get this PR in.  We can consider using CreateOrUpdate later .


Task4 to Task 10 changes from Jetty

Hi,
Please verify the tasks and let me know if any changes are required.
Thanks,
Jetty

@pjetty16
Task -4
Code is incomplete. Check it and commit back
Task -5
Code verified.
Task -6
Code verified.
Task -7
Code verified.
Task -8
Code verified.
Task -9
Code verified.
Task -10
Code verified.


feat(pie-docs): DSW-868 replace tokenTable with simpleTokenTable for global typography tokens

"pie-docs": minor
[Changed] - global typography tokens to use simpleToken instead of tokenTable
[Removed] - globalSpacingTokens.json so tokens are retrieved from the Pie tokens package instead of hard coded

@FayeCarter do you have any idea why I can't see the Percy pipeline?

@FayeCarter do you have any idea why I can't see the Percy pipeline?

I think it was just the build restarting. It's starting up now


Apple AirPlay causes GLFW error in glfwInit ("Cocoa: Failed to find service port for display")

I'm getting GLFW errors when my MacBook (macOS 10.15.7) is connected via AirPlay. I'm new to macOS, so I'm not 100% sure about the package version I'm using, but I appear to be running on GLFW 3.3.2 (installed via brew).
Naively written applications will probably exit or trigger into a debugger when they get an GLFW error callback. For example, the mapbox GLFW platform sample:
Current executable set to '/tmp/mapbox-gl-native/build/platform/glfw/mbgl-glfw' (x86_64).
(lldb) r
Process 84490 launched: '/tmp/mapbox-gl-native/build/platform/glfw/mbgl-glfw' (x86_64)
Assertion failed: (false), function glfwError, file ../platform/glfw/glfw_view.cpp, line 112.
Process 84490 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = hit program assert
    frame #4: 0x000000010004bfb7 mbgl-glfw`glfwError(error=65544, description="Cocoa: Failed to find service port for display") at glfw_view.cpp:112:5
   109
   110 	void glfwError(int error, const char *description) {
   111 	    mbgl::Log::Error(mbgl::Event::OpenGL, "GLFW error (%i): %s", error, description);
-> 112 	    assert(false);
   113 	}
   114
   115 	GLFWView::GLFWView(bool fullscreen_, bool benchmark_, const mbgl::ResourceOptions &options)
Target 1: (mbgl-glfw) stopped.

Here is the backtrace for that situation (unfortunately, I don't have GLFW symbols):
(lldb) bt
* thread #1, queue = 'com.apple.main-thread', stop reason = hit program assert
    frame #0: 0x00007fff69d3533a libsystem_kernel.dylib`__pthread_kill + 10
    frame #1: 0x00007fff69df1e60 libsystem_pthread.dylib`pthread_kill + 430
    frame #2: 0x00007fff69cbc808 libsystem_c.dylib`abort + 120
    frame #3: 0x00007fff69cbbac6 libsystem_c.dylib`__assert_rtn + 314
  * frame #4: 0x000000010004bfb7 mbgl-glfw`glfwError(error=65544, description="Cocoa: Failed to find service port for display") at glfw_view.cpp:112:5
    frame #5: 0x00000001061d182e libglfw.3.dylib`_glfwInputError + 491
    frame #6: 0x00000001061d8244 libglfw.3.dylib`_glfwPollMonitorsNS + 733
    frame #7: 0x00000001061d7243 libglfw.3.dylib`_glfwPlatformInit + 1649
    frame #8: 0x00000001061d1bb6 libglfw.3.dylib`glfwInit + 74
    frame #9: 0x000000010004c34f mbgl-glfw`GLFWView::GLFWView(this=0x00007ffeefbfedd0, fullscreen_=false, benchmark_=false, options=0x00007ffeefbfd748) at glfw_view.cpp:124:10
    frame #10: 0x000000010005142c mbgl-glfw`GLFWView::GLFWView(this=0x00007ffeefbfedd0, fullscreen_=false, benchmark_=false, options=0x00007ffeefbfd748) at glfw_view.cpp:119:43
    frame #11: 0x000000010000ba17 mbgl-glfw`main(argc=1, argv=0x00007ffeefbff848) at main.cpp:107:14
    frame #12: 0x00007fff69bedcc9 libdyld.dylib`start + 1
    frame #13: 0x00007fff69bedcc9 libdyld.dylib`start + 1

I compared it to the code, and I assume it's this:
https://github.com/glfw/glfw/blob/a2674a903434b7dfc0b0bcc5d0b479da417367ff/src/cocoa_monitor.m#L87-L92
Ignoring that error will not cause any issues (or none that I noticed). The GLFW window will behave normally on the native display and the AirPlay display / mirror.
This case should be handled more gracefully. If there's an option to check for AirPlay, a respective name should be returned (ideally, the name of the AirPlay display?).

This should be fixed now with 955fbd9d265fa95adf9cb94896eb9a516aa50420. Thank you for the detailed bug report!

I also meet the problem


Benchmarking CLI is always compiled but the runtime method Benchmark_dispatch_benchmark is not

Problem
There is a bug in the new benchmarking CLI. While it is always built, the necessary runtime method Benchmark_dispatch_benchmark is gated by the option runtime-benchmarks which is turned off by default and cannot be provided when building Substrate from the repo root due to the Cargo constraint.
When you use the benchmark option, you get something like this:
$ cargo run --release -- benchmark --pallet im-online --extrinsic heartbeat
    Finished release [optimized] target(s) in 0.50s
     Running `target/release/substrate benchmark --pallet im-online --extrinsic heartbeat`
2020-04-03 08:53:28 new validator set of size 1 has been elected via ElectionCompute::OnChain for era 0
Error: Input("Error executing runtime benchmark: MethodNotFound(\"Benchmark_dispatch_benchmark\")")

Solution
Perhaps forcing runtime-benchmarks as standard for the CLI, that is:
diff --git a/bin/node/cli/Cargo.toml b/bin/node/cli/Cargo.toml
index 9842fd2ee..982eab209 100644
--- a/bin/node/cli/Cargo.toml
+++ b/bin/node/cli/Cargo.toml
@@ -133,7 +133,7 @@ path = "../../../client/cli"
 optional = true

 [features]
-default = [ "cli" ]
+default = [ "cli", "runtime-benchmarks" ]
 browser = [
        "browser-utils",
        "wasm-bindgen",

@shawntabrizi @marcio-diaz

The CLI should be disabled by default and not the other way around.


Frame 0

I deleted all the frames and then went to clear the frame on the screen green, it came up fully green on the sense hat however only one frame went green on the editor.

Also if I delete two of my two frames it appeares either as frame 002 of 001 or as frame 000 of 001.

The issue with incorrect frame numbering after deletion has been fixed. This has also fixed the single pixel issue which was related to the same problem.


Macros within comments are executed

Thanks for the update! I think it is very close to working for my purposes, but I still have one more round of nits.
If I write something like the following:
#= {{ my_macro(...) }} =#

Then currently the macros will be expanded first, which will mean my_macro is executed. This could cause problems, e.g. if my_macro isn't defined or my_macro contains an infinite loop or some bad side-effect.
I guess possibly applying comments before macros would help.
P.S. You will probably not be able to implement nested comments without actually parsing into a tree, but these are a bit unusual. I thought I would just note this since Julia itself does support nested comments and I think that might be a point at which the "lex and rewrite" approach might break down.

Thanks for your report.
I’ll fix this bug by removing comments before processing macros. Please wait for a while.
But, as you mentioned, parser which doesn't use syntax tree is not appropriate to make complex template engine. So, I will try implementing own parser which uses syntax tree(and then, I think I should release it as v1.0.0). This change  must take a lot of time, but I believe it’s necessary to make OteraEngine.jl practical.

Okay sounds great! I guess the argument against is simplicity. As long as there is a good correspondence between the template language and Julia then lex+rewrite works just fine. On the other hand it could well be useful for some cases beyond nested comments like certain custom tags or something. Good luck either way.

Now, v0.4.1 is available. But please note that this patch slows down the speed.

Great!


Timezone is a single word

Description
Timezone is a single word. It is not written TimeZone.
Checklist:

[x] Securely signed commits
[x] Conforms to style guide

Or Time Zone :)

Yes. And that also. 😂


Better error needed if job is not encapsulated by the user

If the statically defined child of a job F (that should be encapsulated but isn't) is passed a return value that was obtained from a dynamically defined child of F, then and EOFError is thrown. @hannes believes the error should rather be an unfulfilled promise error.
Toy code below reproduces error.
#!/usr/bin/env python2.7
'''
Author : Arjun Arkal Rao
Affiliation : UCSC BME, UCSC Genomics Institute
File : toy_code_for_unfulfilled_promise_error.py
'''
from __future__ import print_function
from toil.job import Job

import argparse
import time
import os

def sbe_job(job):
    '''
    This is a job that Should Be Encapsulated (SBE) for the logic to work.
    It will spawn 3 children, A, B and C that will each sleep for 5 seconds
    after which they will return their jobname.  The promises are store in dicts
    with the key=jobname and value=PromisedJobReturnValue
    '''
    return_dict = {}
    for jobname in ['A', 'B', 'C']:
        return_dict[jobname] = job.addChildJobFn(sleepy, jobname).rv()
    return return_dict

def sleepy(job, return_val):
    '''
    This function will sleep for 5 seconds and then return the value it was
    passed.
    '''
    time.sleep(5)
    return return_val

def dopey(job, test_val):
    '''
    This is a completely useless function.  It's only task is to be a child job
    of SBE_JOB.
    '''
    return None

def test_unfulfilled_promise_error_fail():
    '''
    This will run the code that fails. F should be encapsulated but it isn't.
    The DAG looks like
             F
        _____|_____
       /    /  \   \
      A     B   C   G
    since A, B and C are all sibling jobs and share the same parent as G.

    G is being passed the return values of A, B and C through F.rv() and since
    A, B and C sleep for 5 seconds, G starts running before they start and gets
    an EOFError when it whould really be returning an unfulfilled promise error.
    '''
    parser = argparse.ArgumentParser()
    parser.add_argument('--dummy', dest='dummy', default=None, required=False)
    Job.Runner.addToilOptions(parser)
    params = parser.parse_args()
    F = Job.wrapJobFn(sbe_job)
    G = Job.wrapJobFn(dopey, F.rv())
    F.addChild(G)
    Job.Runner.startToil(F, params)

def test_unfulfilled_promise_error_pass():
    '''
    This will run the code that passes. F should be encapsulated and is.
    The DAG looks like
          _____________
         |      A      |
         |   ___|___   |
         |  /   |   \  |
         | B    C    D |
         |_____________|
                |
                X

    G is being passed the return values of A, B and C through F.rv().  This time
    A, B and C sleep finish running before G starts running since they are
    encapsulated within A -- Hence no error is thrown.
    '''
    parser = argparse.ArgumentParser()
    parser.add_argument('--dummy', dest='dummy', default=None, required=False)
    Job.Runner.addToilOptions(parser)
    params = parser.parse_args()
    F = Job.wrapJobFn(sbe_job).encapsulate()
    G = Job.wrapJobFn(dopey, F.rv())
    F.addChild(G)
    Job.Runner.startToil(F, params)

if __name__ == '__main__':
    test_unfulfilled_promise_error_fail()  # This will FAIL
    test_unfulfilled_promise_error_pass()  # This will PASS

The EOFError occurs during unpickling of a job and it is completely baffling. @arkal, if you happen to have a stack trace, can you paste it here?
The problem might be more wide-spread than what the title suggests. @jpfeil ran into this, too, in a slightly different scenario. The general condition is that promises are wired in a way that is inconsistent with the job wiring, leading to a failure of promise resolution because the job producing the value for a promise hasn't been run yet.

@hannes, here's the stack trace
[centos@arjun-fake-podk toil_tests]$ python toy_code_for_unfulfilled_promise_error.py /tmp/toy
No handlers could be found for logger "toil.resource"
INFO:toil.lib.bioio:Logging set at level: INFO
INFO:toil.common:Using the single machine batch system
INFO:toil.jobStores.fileJobStore:Jobstore directory is: /tmp/toy
WARNING:toil.batchSystems.singleMachine:Limiting maxCores to CPU count of system (8).
INFO:toil.batchSystems.singleMachine:Setting up the thread pool with 80 workers, given a minimum CPU fraction of 0.100000 and a maximum CPU value of 8.
INFO:toil.common:Written the environment for the jobs to the environment file
WARNING:toil.resource:Can't globalize module ModuleDescriptor(dirPath='/data/test_docker/toil_tests', name='toy_code_for_unfulfilled_promise_error', extension='.py').
WARNING:toil.resource:Can't globalize module ModuleDescriptor(dirPath='/data/test_docker/toil_tests', name='toy_code_for_unfulfilled_promise_error', extension='.py').
INFO:toil.leader:Checked batch system has no running jobs and no updated jobs
INFO:toil.leader:Found 1 jobs to start and 0 jobs with successors to run
INFO:toil.leader:Starting the main loop
INFO:toil.batchSystems.singleMachine:Executing command: '/usr/local/bin/python -E /usr/local/lib/python2.7/site-packages/toil/worker.py /tmp/toy s/M/jobFyhHec'.
INFO:toil.batchSystems.singleMachine:Executing command: '/usr/local/bin/python -E /usr/local/lib/python2.7/site-packages/toil/worker.py /tmp/toy v/n/job1CCeE5'.
INFO:toil.batchSystems.singleMachine:Executing command: '/usr/local/bin/python -E /usr/local/lib/python2.7/site-packages/toil/worker.py /tmp/toy c/6/jobLkkyWy'.
INFO:toil.batchSystems.singleMachine:Executing command: '/usr/local/bin/python -E /usr/local/lib/python2.7/site-packages/toil/worker.py /tmp/toy O/0/jobMUjEkT'.
INFO:toil.batchSystems.singleMachine:Executing command: '/usr/local/bin/python -E /usr/local/lib/python2.7/site-packages/toil/worker.py /tmp/toy c/i/jobxGSHT4'.
WARNING:toil.leader:The jobWrapper seems to have left a log file, indicating failure: c/i/jobxGSHT4
WARNING:toil.leader:Reporting file: c/i/jobxGSHT4
WARNING:toil.leader:c/i/jobxGSHT4:	---TOIL WORKER OUTPUT LOG---
WARNING:toil.leader:c/i/jobxGSHT4:	WARNING:toil.resource:Can't find resource for leader path '/data/test_docker/toil_tests/toy_code_for_unfulfilled_promise_error.py'
WARNING:toil.leader:c/i/jobxGSHT4:	WARNING:toil.resource:Can't localize module ModuleDescriptor(dirPath='/data/test_docker/toil_tests', name='toy_code_for_unfulfilled_promise_error', extension='.py')
WARNING:toil.leader:c/i/jobxGSHT4:	INFO:toil.jobStores.fileJobStore:Jobstore directory is: /tmp/toy
WARNING:toil.leader:c/i/jobxGSHT4:	Traceback (most recent call last):
WARNING:toil.leader:c/i/jobxGSHT4:	  File "/usr/local/lib/python2.7/site-packages/toil/worker.py", line 272, in main
WARNING:toil.leader:c/i/jobxGSHT4:	    job = Job._loadJob(jobWrapper.command, jobStore)
WARNING:toil.leader:c/i/jobxGSHT4:	  File "/usr/local/lib/python2.7/site-packages/toil/job.py", line 835, in _loadJob
WARNING:toil.leader:c/i/jobxGSHT4:	    return cls._unpickle(userModule, fileHandle)
WARNING:toil.leader:c/i/jobxGSHT4:	  File "/usr/local/lib/python2.7/site-packages/toil/job.py", line 856, in _unpickle
WARNING:toil.leader:c/i/jobxGSHT4:	    return unpickler.load()
WARNING:toil.leader:c/i/jobxGSHT4:	EOFError
WARNING:toil.leader:c/i/jobxGSHT4:	Exiting the worker because of a failed jobWrapper on host arjun-fake-podk.novalocal
WARNING:toil.leader:c/i/jobxGSHT4:	ERROR:__main__:Exiting the worker because of a failed jobWrapper on host arjun-fake-podk.novalocal
WARNING:toil.leader:c/i/jobxGSHT4:	WARNING:toil.jobWrapper:Due to failure we are reducing the remaining retry count of job c/i/jobxGSHT4 to 0
WARNING:toil.leader:Job: c/i/jobxGSHT4 is completely failed
INFO:toil.leader:Only failed jobs and their dependents (1 total) are remaining, so exiting.
INFO:toil.leader:Finished the main loop
INFO:toil.leader:Waiting for stats and logging collator process to finish
INFO:toil.leader:Stats/logging finished collating in 0.261636972427 seconds
Traceback (most recent call last):
  File "toy_code_for_unfulfilled_promise_error.py", line 95, in <module>
    test_unfulfilled_promise_error_fail()  # This will FAIL
  File "toy_code_for_unfulfilled_promise_error.py", line 65, in test_unfulfilled_promise_error_fail
    Job.Runner.startToil(F, params)
  File "/usr/local/lib/python2.7/site-packages/toil/job.py", line 372, in startToil
    return mainLoop(config, batchSystem, jobStore, rootJob)
  File "/usr/local/lib/python2.7/site-packages/toil/leader.py", line 505, in mainLoop
    raise FailedJobsException( config.jobStore, totalFailedJobs )
toil.leader.FailedJobsException: The job store '/tmp/toy' contains 1 failed jobs

Promises are resolved by unplickling them during the unpickling of a job. IOW, nested unpickling. Hence the confusing error message.
In today's scrum it was decided that we split this up: this issue will be resolved by making a quick and dirty try-except and raising an exception with a more appropriate message. Benedict thinks that this can be caught even earlier by "adding a few more edges". That should be done in a separate issue which the resolver of this ticket shall create upon its resolution.

@arkal to triage.


fix: allow deserialize from anycase

This macro allows Serde to load a YAML representation of an os_info::Type and deserialise it, regardless of the case used within the YAML.
This shouldn't affect anything when not loading from YAML 👍🏻

Not sure why the bloat job failed, I believe it's unrelated!

Thanks for the pull request and sorry for the late reply! Feel free to ignore the cargo-bloat status.
Doesn't that affect not only YAML, but also any serialization format (for example JSON)? I guess it is a breaking change because the previously serialized data cannot be deserialized after that.

I guess it is a breaking change because the previously serialized data cannot be deserialized after that.

It shouldn't, the data can be deserialised no matter what case it is; as it'll be lowercases by serde first.

Perhaps I'm missing something, but it is a breaking change. Imagine a situation where someone stores a serialized operation system type. After applying these changes the previously stored data cannot be deserialized:
#[derive(Debug, Serialize, Deserialize)]
struct SomeStruct {
    os_type: Type,
}

#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
enum Type {
    Alpine,
    EndeavourOS,
}

fn main() {
    let json = r#"{ "os_type": "Alpine" }"#;
    let s: SomeStruct = serde_json::from_str(json).unwrap();
    println!("{:?}", s);
}

https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=2c1d896e5b665fa259c8b2bdcfe3ce37

Damn. I was sure in my tests it lowered the keys and the YAML. Sorry

I haven't tried it, but perhaps this can be worked around from your side using the deserialize_struct_case_insensitive attribute from the serde-aux crate?


Google HTML/CSS Style Guide: HTTPS Security concerns

Currently, Google's HTML/CSS Style Guide advocates in its "General Style Rules" under "Protocol" for an omission of "http:" and "https:". Correct me if I am wrong, but I have heard of security concerns where allowing the snippet to request over HTTP leads to attacks like China's Man-on-the-Side Attack on GitHub. I propose that the style guide remove the practice of omitting the protocol, and instead advocate for the practice of using explicit calls to HTTPS.

The recommendation uses HTTP when on HTTP and HTTPS when on HTTPS. If you are requesting the HTML page over HTTP, then you are already vulnerable. Specifying the HTTPS gains you little.


virt-manager: '/usr/libexec/qemu-bridge-helper' is not a suitable bridge helper

Issue description
I configured QEMU/KVM and connect virt-manager via "User session" to start a VM.
The VM has no network connection, so i try to set my ethernet interface as bridge. (I don't know what i'm doing)

Starting the VM fails now with this message:
Error starting domain: '/usr/libexec/qemu-bridge-helper' is not a suitable bridge helper: No such file or directory

Traceback (most recent call last):
  File "/nix/store/xv0z2k1cxi3jgp8kqmksq68gvi1n6sw1-virt-manager-1.4.2/share/virt-manager/virtManager/asyncjob.py", line 89, in cb_wrapper
    callback(asyncjob, *args, **kwargs)
  File "/nix/store/xv0z2k1cxi3jgp8kqmksq68gvi1n6sw1-virt-manager-1.4.2/share/virt-manager/virtManager/asyncjob.py", line 125, in tmpcb
    callback(*args, **kwargs)
  File "/nix/store/xv0z2k1cxi3jgp8kqmksq68gvi1n6sw1-virt-manager-1.4.2/share/virt-manager/virtManager/libvirtobject.py", line 82, in newfn
    ret = fn(self, *args, **kwargs)
  File "/nix/store/xv0z2k1cxi3jgp8kqmksq68gvi1n6sw1-virt-manager-1.4.2/share/virt-manager/virtManager/domain.py", line 1489, in startup
    self._backend.create()
  File "/nix/store/s3pr9pb9awj3b0fn1fgrlvqjvycycpqz-libvirt-python-3.6.0/lib/python2.7/site-packages/libvirt.py", line 1062, in create
    if ret == -1: raise libvirtError ('virDomainCreate() failed', dom=self)
libvirtError: '/usr/libexec/qemu-bridge-helper' is not a suitable bridge helper: No such file or directory

Steps to reproduce
  # hypervisor virtualization
  boot.kernelModules = [ "kvm-intel" ];
  virtualisation.libvirtd.enable = true;

Technical details

system: "x86_64-linux"
host os: Linux 4.9.80, NixOS, 17.09.3001.395fe7f8bcb (Hummingbird)
multi-user?: yes
sandbox: yes
version: nix-env (Nix) 1.11.16
channels(davidak): ""
channels(root): "nixos-17.09.3001.395fe7f8bcb, nixos-hardware"
nixpkgs: /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs

To set your ethernet interface as bridge
networking = {
  bridges.br0.interfaces = [ "eth0" ];
  interfaces.br0.ip4 = [{ address = "<IP_ADDRESS>"; prefixLength = 24; }];  /* former settings of eth0 */
};

Then it should look in virt-manager like this:

Thanks. Is '/usr/libexec/qemu-bridge-helper' is not a suitable bridge helper: No such file or directory an error that should be fixed?

@davidak It could be fixed. But it is not easy (it is a suid executable and suid executables are not first class citizens in NixOS, they require extra wrapper) and not very useful (it performs ad hoc network configuration which NixOS are usually done declarative)

So we let the issue open as "known problem" until someone wants to fix it? Or is there anything we can do easily to have a better user experience (aka don't get cryptic error messages)?

just to keep backlog of virt-manager-on-NixOS problems (maybe I fix some of them eventually).

too high CPU consumption sometimes when it expected to be idle. Maybe a spin loop or something
"shutdown" does not work with qemu guests. just no reaction
"force off" of lxc can put the system into strange state which would require reboot (a easy fix would to disable "force off" for them)

It's a problem, but what can we use instead?
Not having VMs isn't a useful alternative.

Adding a
    virtualisation.libvirtd.qemuVerbatimConfig = ''
      bridge_helper = "${pkgs.qemu}/libexec/qemu-bridge-helper"
    ''

seems to not help at all. The file at /var/lib/libvirtd/qemu.conf does get the line in it, but libvirtd itself seems to ignore the configuration entirely and still insists on using /usr/libexec/qemu-bridge-helper

Still a problem on 22.05.

This seems to be fixed in #187211, which I assume should be in upcoming NixOS 22.11.  It's working for me on unstable.


[Backport-1.x] Support list of objects for JSON

This a backport of https://github.com/datafaker-net/datafaker/pull/693 to 1.x
just a cherry pick + adapt to jdk8

Codecov Report

Merging #826 (f984fa2) into 1.x (b840846) will decrease coverage by 0.29%.
The diff coverage is 100.00%.

:mega: This organization is not using Codecov’s GitHub App Integration. We recommend you install it so Codecov can continue to function properly for your repositories. Learn more
@@             Coverage Diff              @@
##                1.x     #826      +/-   ##
============================================
- Coverage     92.14%   91.85%   -0.29%
- Complexity     2664     2676      +12
============================================
  Files           286      287       +1
  Lines          5487     5540      +53
  Branches        606      605       -1
============================================
+ Hits           5056     5089      +33
- Misses          274      292      +18
- Partials        157      159       +2

Impacted Files
Coverage Δ

...net/datafaker/transformations/JsonTransformer.java
94.91% <100.00%> (+0.17%)
:arrow_up:

... and 6 files with indirect coverage changes
:mega: We’re building smart automated test selection to slash your CI/CD build times. Learn more

snuyanzin thanks

Did the dependency on Maven get updated?

snapshot version is available
1.x release was not done yet


get_airspaces can crash

because not finding airspaces in defined files

There is data available, but it does not draw one.

INFO: MSS Version: 7.0.6.
INFO: Python Version: 3.9.13 | packaged by conda-forge | (main, May 27 2022, 16:58:50)
[GCC 10.3.0]
INFO: Platform: Linux-5.4.0-132-generic-x86_64-with-glibc2.27 (('64bit', 'ELF'))
INFO: Downloading to /home/reimar/.config/msui/ad_asp.xml. This might take a while.
INFO: 0KB Downloaded
INFO: Downloading to /home/reimar/.config/msui/ae_asp.xml. This might take a while.
INFO: 107KB Downloaded
INFO: Downloading to /home/reimar/.config/msui/af_asp.xml. This might take a while.
INFO: 0KB Downloaded
INFO: Downloading to /home/reimar/.config/msui/ag_asp.xml. This might take a while.
INFO: 0KB Downloaded
INFO: Downloading to /home/reimar/.config/msui/ai_asp.xml. This might take a while.
INFO: 0KB Downloaded
INFO: Downloading to /home/reimar/.config/msui/al_asp.xml. This might take a while.
INFO: 11KB Downloaded
INFO: Downloading to /home/reimar/.config/msui/am_asp.xml. This might take a while.
INFO: 0KB Downloaded
INFO: Downloading to /home/reimar/.config/msui/ao_asp.xml. This might take a while.
INFO: 0KB Downloaded
INFO: Downloading to /home/reimar/.config/msui/aq_asp.xml. This might take a while.
INFO: 0KB Downloaded
INFO: Downloading to /home/reimar/.config/msui/ar_asp.xml. This might take a while.
INFO: 952KB Downloaded
INFO: Downloading to /home/reimar/.config/msui/ba_asp.xml. This might take a while.
INFO: 74KB Downloaded
ERROR: Tried to draw airspaces without asp files.


update nlohmann_json to version 3.1.2

I just released JSON for Modern C++ 3.1.2, see https://github.com/nlohmann/json/releases/tag/v3.1.2. Could you please update the port nlohmann_json?

Updated in f1e9e41e, thanks for making a great library!


Command error

From today I have this type of error (the command is successful)
unexpected response layout: "{"controlResponses":[],"errors":[{"entity":{"entityId":"e6c25f74-92ff-41e0-8336-c886a730d9aa","entityType":null},"code":"TargetApplianceUnreachableException","message":"ENDPOINT_UNREACHABLE","data":null}]}"
Since yesterday, I have found two times stuck with the inscription: "iniy with proxy "

The problem was a change in logic. A command loop (on / off in a device) was created every 5 ms


chore: bdd-nh-1589448752 to 0.0.1

chore: Promote bdd-nh-1589448752 to version 0.0.1

[APPROVALNOTIFIER] This PR is NOT APPROVED
This pull-request has been approved by:
To fully approve this pull request, please assign additional approvers.
We suggest the following additional approvers:
If they are not already assigned, you can assign the PR to them by writing /assign  in a comment when ready.
The full list of commands accepted by this bot can be found here.
The pull request process is described here

Needs approval from an approver in each of these files:

OWNERS

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment


Slow Performance while loading Opening Inventory Balance

One of our retail customer  was having  slow posting while loading Opening inventory for their stores.  Analyzing the slowness, we have found the following code in function CalcRequiredQty in codeunit 23 was causing the issue.  Can you please amend the code see commend as //DOC K3-PERF in all the supportable and future versions of NAV and BC.
local procedure CalcRequiredQty(TempSKU: Record "Stockkeeping Unit" temporary; var ItemJnlLine: Record "Item Journal Line"): Decimal
var
SignFactor: Integer;
QtyinItemJnlLine: Decimal;
begin
QtyinItemJnlLine := 0;
ItemJnlLine.SETCURRENTKEY("Journal Template Name","Journal Batch Name","Item No.","Location Code","Variant Code"); //DOC K3-PERF
ItemJnlLine.SetRange("Item No.", TempSKU."Item No.");
ItemJnlLine.SetRange("Location Code", TempSKU."Location Code");
ItemJnlLine.SetRange("Variant Code", TempSKU."Variant Code");
ItemJnlLine.FindSet;
repeat
if (ItemJnlLine."Entry Type" in
[ItemJnlLine."Entry Type"::Sale,
ItemJnlLine."Entry Type"::"Negative Adjmt.",
ItemJnlLine."Entry Type"::Consumption]) or
(ItemJnlLine."Entry Type" = ItemJnlLine."Entry Type"::Transfer)
then
SignFactor := -1
else
SignFactor := 1;
QtyinItemJnlLine += ItemJnlLine."Quantity (Base)" * SignFactor;
until ItemJnlLine.Next = 0;
exit(QtyinItemJnlLine);
end;

Thanks for reporting this. We agree, and we’ll publish a fix asap, either in an update for the current version or in the next major release. We will update this issue with information about availability.


Supported Sites

[x] #14
[x] #15
[x] #16
[x] #17
[x] #5
[x] #6
[x] #11
[x] #7
[x] #9
[x] #10
[x] #8
[x] #12
[x] #13
[ ] ...

http://www.music-style.info/music-style/html/001_011.html


[BEAM-9547] Dataframe corrwith.

Thank you for your contribution! Follow this checklist to help us incorporate your contribution quickly and easily:

[ ] Choose reviewer(s) and mention them in a comment (R: @username).
[ ] Format the pull request title like [BEAM-XXX] Fixes bug in ApproximateQuantiles, where you replace BEAM-XXX with the appropriate JIRA issue, if applicable. This will automatically link the pull request to the issue.
[ ] Update CHANGES.md with noteworthy changes.
[ ] If this contribution is large, please file an Apache Individual Contributor License Agreement.

See the Contributor Guide for more tips on how to make review process smoother.

GitHub Actions Tests Status (on master branch)

See CI.md for more information about GitHub Actions CI.

R: @TheNeuralBit

On-call this week, I probably wont be able to give this enough attention until next Tuesday

Run PythonLint PreCommit


CBU curtain controller MOD001

Hello again, a device a bit similiar to previous one, but totally different function:

I wonder if how similar the binaries are, considering that first device was a two relays switch and this one is a curtain controller, but with same PCB...
MOD001_CBU.zip

Added as ModeMix MOD001 Smart Curtain Module pinout available at https://github.com/tuya-cloudcutter/tuya-cloudcutter.github.io/blob/b508321259668c9d1f373896d87cd4381618feb2/devices/modemix-mod001-smart-curtain-module.json#L81


TO-DO map the entire amount of memory in PageTable

Only 1gb of memory were mapped at the moment

Check out LongMode.asm


where is the name_

Hi
Well, its not a bug, but maybe im a little lost.
Im create a form, and use this library for select inputs.
THe problem is that i do not have a name to identify this input.
How can i fix it?

@GVALFER This component doesnt include an actual select input, so you need to handle the changes within onChange callback


save now returns boolean depending on success

Coverage remained the same at 83.41% when pulling 5660d83bcdb4230a16ed9ea41116f064c680d3b8 on settingsio into bd0dfdfd0ba91b2eb97e1fabeb252a03fbe7e175 on master.

LGTM


applied promotions e2e tests failing

applied promotions e2e tests are failing on dev-17.
Logs here: https://jkmaster.test.c3po.b2c.ydev.hybris.com/job/spartacus-regression-tests/724/consoleFull

This ticket seems to be no longer valid, because we are not using dev-17 for e2e anymore.
After merge feature/e2etests-1905.6 to develop there is only one failing e2e test regarding to applied promotions.
  1) Applied promotions Applied promotions as a logged user Should verify promotions in order confirmation details:
     CypressError: Timed out retrying: expected '<div.cx-promotions>' to contain 'EOS450D'

The problem is that currently applied promotions are not shown in the consigned entries.
We created separate ticket to fix that #6428


Add tests.yaml GitHub Action.

Codecov Report

:exclamation: No coverage uploaded for pull request base (main@925c4b3). Click here to learn what that means.
The diff coverage is n/a.

@@           Coverage Diff           @@
##             main      #12   +/-   ##
=======================================
  Coverage        ?   93.70%
=======================================
  Files           ?        4
  Lines           ?      397
  Branches        ?        0
=======================================
  Hits            ?      372
  Misses          ?       25
  Partials        ?        0

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 925c4b3...e5affbe. Read the comment docs.


feat: deterministic manifest naming based on path and filename

Codecov Report

Merging #134 (68fdb90) into main (bcda4ef) will increase coverage by 1.59%.
The diff coverage is 95.00%.

@@            Coverage Diff             @@
##             main     #134      +/-   ##
==========================================
+ Coverage   38.45%   40.05%   +1.59%
==========================================
  Files          44       45       +1
  Lines        1550     1583      +33
==========================================
+ Hits          596      634      +38
+ Misses        954      949       -5

Impacted Files
Coverage Δ

src/main.rs
0.00% <0.00%> (ø)

src/manifests/mod.rs
100.00% <100.00%> (ø)

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update bcda4ef...68fdb90. Read the comment docs.


Make Services.install be disposable

We frequently override services, and often see the 'Language Client services has been overridden' error message, even though it is working how we expect.
By having install return a Disposable, it allows us to dispose of our old services first, before setting up new ones - avoiding the console error.
Other methods considered:

Uninstall method
Removing console error
Adding parameter to install method to silence the console.error

Let me know if you'd prefer a different method than the current choice.

Hey @akosyakov, mind taking a look at this?

@johnwiseheart please rebase and merge

I've rebased and tested it, everything looks fine, thank you, merging as soon as CI is green.


Allow image cache folder to exist outside of the web root - so FCN doesn't become an issue

I've tried setting the IP cache to something like:
~/../TEMP/App_Data/TEMP/IP/cache
But it throws an exception saying it cannot traverse past the web root. However, more and more people are reporting issues with FCN and before we used to just set it to Single but this is only a band aid in hopes that it fixes the problem. Part of the problem with Single is that it still monitors every folder with a single watcher and the buffer with Single will overflow causing app domains to restart. Alternatively as we know if we set it to Default it will create watchers for every directory and that can be worse.
As it turns out, storing stuff outside of the web root will resolve a lot of the problem since ASP.Net and IIS will not watch these files. It would be super helpful if we could store the IP image cache outside of the www root and in a folder just above it, or by specifying an absolute path. Of course the IIS user will need access to this but that is up to the implementer.
IP creates a ton of folders and therefore a ton of watchers or paths to watch and I believe it would go a long way to help fix some of the recent issues we're seeing with app domain restarts due to FCN (things like overwhelming changes, etc... I can send  through the errors if you need)
We can probably make a PR for this soon but needed to write this info down here first. Similarly, I'll update CDF to allow this as well.

That sounds like both an excellent idea and one that you will have to create a PR for as I have literally no idea where to start. 😄
Looking forward to seeing the PR!

Working on this now, have also updated some of the FCN info and found out just how much is actually monitored, yikes! :/ fcn Single is better for Azure due to remote file systems and having far less watchers but the buffer is smaller and overflows more easily since every folder is still watched. Will report back more next week.

Ah good.... If you have the opportunity to log your findings somewhere please do. I'd be very keen to know more about how it works.

Here's the PR with lots of details :)

Great to see this in action! 💯


Doesn't let files open in windows 10 when you click on the files in file explorer

I told it to open the files it should be associated with it after running the install batch file as admin and instead of opening the files it just keeps asking me what I want to run it with. I hit ok I want to run it with the path to mpv and it just pops up again and again until I quit.

Ok so as a workaround it does work fine if you run it in compatibility mode for windows 7 :)

Sorry, I forgot about this issue. I'm not sure what would be causing it, since I develop and test this script on Windows 10 as well. I can't reproduce it, so it's possible that it's a temporary bug that's been fixed in Windows. As such, I'm tentatively closing this issue. Feel free to re-open if you can still reproduce it in the latest build of Windows 10 (Creators Update version 1703.)


Share example of how a business transaction could be wrapped in a database transaction

This seems like it would be an important thing to support/demonstrate for certain types of uses.

@timriley I have a sample btw https://gist.github.com/flash-gordon/64ebb082ec2a253db3a727bd7eafc393#file-transaction-example-rb-L2-L25
Haven't tried to use it with pub/sub yet though it's on my schedule

@flash-gordon that's neat! Thanks for sharing 😄
I've been thinking about database transactions and have been wondering whether we should support some sort of user-provided "around" operation that can wrap each of the steps in the transaction. The goal would be to make it more straightforward to achieve what you have done with your TransactionWrapper. What do you think?

I think we need to start with some wishful thinking of desired interface. It can be
Dry.Transaction(:container, wrap_with: suting_responding_to_call)

or
Dry.Transaction.register_wrapper(:db_transaction, Wrapper.new)
Dry.Transaction(:container) do
  step :pure_one
  step :pure_two
  wrap :db_transaction do
    # persisting
    step :dirty_three
  end
end

Not sure if I like this, why not just wrap it yourself in your object?

@solnic it's more about best practices. I know for sure people underestimate importance of DB transaction especially when the are well supported by the database (e.g. in PG). No matter which option we choose we must describe how to handle DB transactions properly. Look at my example, I use exceptions for flow control which is definitely is not what I would recommend to do at home, I'm really curious if there is a better way. At least I don't want people to reimplement this solution if it is possible.

Is there a recommended way to achieve this right now?

We are looking into this issue as well, not sure what the plan is to tackle this ? But we extended it so that you can have nested steps,
  step :process
  step :with_db_transaction do
    step :persist_a
    step :persist_b
  end

This then enables us to wrap the nested transactions within the with_db_transaction method.  This also gives the added benefit of wrapping steps which means that if you wanted to exit the dry transaction early you can.

@thil We actually just merged support for "around" steps to handle this: https://github.com/dry-rb/dry-transaction/pull/85

@timriley Thanks that looks awesome, but is around keyword a bit misleading, as its not actually around.

@thil what do you mean by that? A step defined as around will be called "around" indeed :) As in, it wraps all the following steps by yielding a block. I didn't try but it should even be able to short circuit the execution of a transaction (although, don't see why at this point).

I guess for me when I look at around I think around what, looking at that its not really explicit where its around to.  Maybe I am being nitpicky.  I was thinking it would be nice to have it like wrap is done in Trailblazer.
As for short circuit an example we use it is with applying coupons.  The user can apply a coupon, but it is not required to be entered, but we don't want to fail the use_case if its not entered.  So short circuit and return Right if it has not been entered otherwise continue along the use case.  So yes that would work with this solution.
@flash-gordon Thanks for adding this feature.

I guess for me when I look at around I think around what, looking at that its not really explicit where its around to.

I agree. It looks very strange right now.

Hi all, i'm just getting going using the Dry gems and looking forward to leveraging what you guys have put a great effort into.
I'm intending to use transactions as steps within other transactions as a means of composition, which I presume is what dry-transaction is designed for. I was going to suggest that maybe there's a way to use a block with the around step by building a transaction on which the nested steps are added.
I was starting to get confused about if/how that might be possible and it seems that the API docs are outdated (v0.5.0 - http://www.rubydoc.info/github/dry-rb/dry-transaction/Dry/Transaction). The old docs imply that you can build a transaction with a block, which would have worked perfectly with this around use case. However, it seems that the API has changed, but maybe a nested transaction is still an option to solve for making this DSL more intuitive?
Just my 2¢
Also, are nested transactions an intended use case - or is there a different way to compose steps? Anything to look out for as I go down that route?
Thanks!

We have http://dry-rb.org/gems/dry-transaction/around-steps/ now.

Really loving this feature, this is awesome.
I've got a few questions in regards to transaction and I'm hoping to get some advices

Looking at the example, I'm assuming that when you place an around step, using the DB transaction as an example, that means that all the subsequent steps in that operation would be wrapped in a transaction. Would it be possible though, to specify which steps I need to wrap around, and not all the steps? What would be the recommended approach to solve this issue?

If I need a different rollback strategy on each of the steps in the operation, how would I do that?

Any updates on @mengqing's questions?


Window resources refactor

This PR solves the issue of fps consumption by WindowResources. This is done by avoiding disk access on every update.
Also made a little change on the UI to split folders (header) and files (3 columns at the bottom).
I suck at UI so any suggestion or comment are more than welcome :)
Thanks!

The UI is a bit clonky but i don't know how to improve it either xD, we can work on it after. Maybe i miss a refresh button since when you import a new model for example it doesn't appear in the folder inmidiately (maybe updating it after a file is dropped into the engine?) but it the same that going back and opening the folder again so well done.

Thanks! What do you mean about clonky? When resizing? I'll work on the update button. Thanks for noticing

@miquelmiro3 wanna test now? Added reloading when importing resources, do you think the update button is still needed?


splashes do not get deleted

When something enters water there is a splash effect you can use which uses its own splashData class, similar to explosionData, but the problem with those are, they do not get deleted in the engine, so they accumulate over the whole gametime.
To replicate the issue add some "Splash =" to your projectileData or use the playerSplash that happens when a player jumps into water, then you create some splashes by shooting or jumping into the water, when you are done, go to the editor-> particle editor and load the splashParticle and set the emitter to "infinite" and then you will see all splashes you made before in the game are active again.
It will look simething like this:
http://duion.com/files/temp/bugs/bulletsplashbug.png
Possible solution is to delete that class and just use explosionData for those, since that is what is used for all other explosions as well and splashData and explosiondata are basically the same it seems.

I could reproduce it with the 3.10 release template, maybe someone else could try to reproduce it as well just to make sure. In the default template it is the "PlayerSplashMistEmitter" which appears when you jump into water.

That looks like a fun resource leak!

I disabled those for my game for now and in the long run this should probably be removed and replaced with regular explosion datas, since they do the same and explosions work.

https://github.com/Azaezel/Torque3D/commit/4a419f4b0dfc40a934fc060b390f2de52533ba5b -> https://www.youtube.com/watch?v=doqiI6AHs40&feature=youtu.be
bit of factfinding if folks wanna run with that route

Is it because its only being deleted on the server?  Take a look at void Splash::processTick(const Move*) and that first if statement.

I think @Duion is correct that there probably don't need to be separate classes for splashes and explosions unless they expose differing functionality.

I suspect the tie in conversation for this is going to wander for a bit given it ties quite strongly into overhaul work, so asked @Areloch to throw up an RFI: http://forums.torque3d.org/viewtopic.php?f=40&p=7679#p7678 to hash out long term specifications.


How fix and access ???

Help please how fix this error and login.

Hi @CemionCFG.
Please show what docker  ps -a returns. Also paste board container logs.


ADR14  M1 update

Support Milestone 1 of ADR14 implementation:

Rename old methods;
Add new methods.

 Can you check it out?

 Can you check it out?

Nevermind, it seems I had some leftovers from the old repo.

@matevz I have fixed the old tests that were not correct and added tests coverage for the new methods. Also tested it using a NanoS with the test mnemonic).
Regarding the UI (.vue) that example has some time, and we have deprecated it months ago.

I'm getting compilation error after applying https://github.com/oasisprotocol/ledger-js/pull/627/commits/ac681ad5b61bfd5d8b20cfabaa1d8c4dffb40d30. Can you take a look?
$ yarn build
yarn run v1.22.5
warning ../package.json: No license field
$ babel src --out-dir dist && yarn build-types
Successfully compiled 3 files with Babel (610ms).
warning ../package.json: No license field
$ tsc -p ./tsconfig.json
src/types.ts:39:30 - error TS2345: Argument of type 'Buffer | { return_code: number; error_message: string; } | { pk: Buffer; hex_address: string; return_code: any; error_message: string; }' is not assignable to parameter of type 'Response<Buffer | { pk: Buffer; hex_address: string; return_code: any; error_message: string; }>'.
  Type 'Buffer' is not assignable to type 'Response<Buffer | { pk: Buffer; hex_address: string; return_code: any; error_message: string; }>'.
    Type 'Buffer' is not assignable to type 'Buffer & { return_code: number; error_message: string; }'.
      Type 'Buffer' is missing the following properties from type '{ return_code: number; error_message: string; }': return_code, error_message

39   console.log(successOrThrow(await app.getAddressAndPubKey_secp256k1([44])).hex_address.trim());
                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

src/types.ts:39:77 - error TS2339: Property 'hex_address' does not exist on type 'Buffer | { pk: Buffer; hex_address: string; return_code: any; error_message: string; }'.
  Property 'hex_address' does not exist on type 'Buffer'.

39   console.log(successOrThrow(await app.getAddressAndPubKey_secp256k1([44])).hex_address.trim());
                                                                               ~~~~~~~~~~~

src/types.ts:40:30 - error TS2345: Argument of type 'Buffer | { return_code: number; error_message: string; } | { pk: Buffer; hex_address: string; return_code: any; error_message: string; }' is not assignable to parameter of type 'Response<Buffer | { pk: Buffer; hex_address: string; return_code: any; error_message: string; }>'.

40   console.log(successOrThrow(await app.showAddressAndPubKey_secp256k1([44])).hex_address.trim());
                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

src/types.ts:40:78 - error TS2339: Property 'hex_address' does not exist on type 'Buffer | { pk: Buffer; hex_address: string; return_code: any; error_message: string; }'.
  Property 'hex_address' does not exist on type 'Buffer'.

40   console.log(successOrThrow(await app.showAddressAndPubKey_secp256k1([44])).hex_address.trim());
                                                                                ~~~~~~~~~~~

Found 4 errors in the same file, starting at: src/types.ts:39

@matevz are we waiting for anything before merging this?

Looks like the tests did not run for some reason.

I'm getting an error when running yarn build-example. @chcmedeiros Can you take a look and then merge this so we can add ParaTime support for Ledger to our javascript wallets as well.

@matevz Regarding the vue-example that example has some time, and we have deprecated it months ago. If it's ok with you and since we have test coverage for the package with the real device we would remove that vue-example folder, avoiding more errors.

sure, sounds good. would reduce the dev dependency tree by a lot too

Vue example was removed. @matevz @pro-wh If you want to take a last look at it

Hey @matevz The M3-maintenance branch now has a version that is working here on the ledger-js, if you want to test. Regarding the ledger tests, I think the procedure would be to compile the app from the repository to get the .elf and then use our tool zemu (device emulator) combined with this repo to run the tests. This should require some more work, so maybe we can merge this, discuss this tests implementation and possibly do it in the future PR for SR25519.

Hey @matevz The M3-maintenance branch now has a version that is working here on the ledger-js, if you want to test. Regarding the ledger tests, I think the procedure would be to compile the app from the repository to get the .elf and then use our tool zemu (device emulator) combined with this repo to run the tests. This should require some more work, so maybe we can merge this, discuss these tests implementation and possibly do it in the future PR for SR25519.

I can confirm that tests now work with 9b9c85a304c114222601104309ac3d38b13a1d12 . Feel free to merge this PR.

@matevz I am not able to merge, probably don't haver permission to do so.


Tuxdiary doesn't work using HTTPS

Changed "https://tuxdiary.com/2015/02/17/hstr/" to "http://tuxdiary.com/2015/02/17/hstr/" because this website doesn't work using SSL.

@tuxiqae Thank you for the contribution :+1:


Remove Ant

The Ant build scripts duplicate the Gradle build scripts. Currently the build isn't working because all dependencies are Gradle managed.
Another point is that the Windows .bat files aren't portable as the version numbers are hardcoded.

Thanks 👍


Update relative path in manifest.json to match it's new location

I'm not sure if this matters at all.
But it seems like the correct way to do things?

@Its-Just-Nans recently changed this

@jnises it's here

https://github.com/emilk/eframe_template/pull/146
for information ^^


Add edge case for beforeinput event

The event onbeforeinput fails the check for lowercase attributes, leading to it being attached as BeforeInput instead. This PR corrects that.
https://github.com/developit/preact/blob/15d4d07d93ff5846e825da4ea81a14fb03327bbd/src/diff/props.js#L74
I'm not if there is a better approach. For now it seems fine but I'm worried that there will be more exceptions in the future. Would love to hear your thoughts @developit
Adds +13 bytes.
Fixes #1364 .

Coverage remained the same at 100.0% when pulling 44896ffa042884cd63c4067fe41b7aaca574eca9 on before_input into 15d4d07d93ff5846e825da4ea81a14fb03327bbd on master.

I worry about this. There may be more events that fall into this category (newere DOM events), and whitelists/mappings will grow unbounded.
What about recommending folks use onbeforeinput?

Agree, this issue has only come up with react libraries. Using the lowercase version in react doesn't work. Maybe we should move this to compat?

On second thought moving it to compat is more appropriate in my opinion. In the end were trying to normalize react specific behaviour here. Moved it to compat. Let me know what you think 👍

Agree, it's something we should keep an eye on when there are more edge cases :+1:


Use recoverWith instead of recover in SnapshotSerializer akka backwards compatibility

@pjfanning after taking another look I think this should make more sense, otherwise snapshotFromBinary can either return T or Try[T] (got bitten by AnyRef here..). I'm not sure why the previous version didn't blow up when testing this with real mongo and existing akka persistence snapshots.

@SakulK have you tried out this change in an end to end use case? I would like to avoid making a large number of PRs here. I'm happy to change this but I would prefer to get it right this time around.

@pjfanning yes, this works for me end-to-end


Add first & last functions

oh, Question: Did you implement this as
last(/nodeset/path)
?
That's actually not the semantics for the last method.
last should be implemented as a context aware counter that is based on the current predicate set, so insetad of
last(/nodeset/value)
you want
/nodeset/value[last()]

Closing this - the use case I wanted to address doesn't match XPath's actual first/last semantics.