Prevent awaitDone to run through unfinished execution

Previously some test where successful but caused exceptions because their assertion was met and the cleanup began before the execution of the query finished. The collect-results-job then failed to find the user.

@awildturtok sorry habe mich verklickt und schon gemerged


feat: support empty user-agent

set the user-agent with the user's value when the user set the user-agent by header.
If the user does not set the user-agent field, and the use_default_user_agent is also false, then the current library will not set this field.
If the user does not configure the user-agent field, and the use_default_user_agent  is true, then the current field is set it with the default value.

It is best not to change the default behavior

It is best not to change the default behavior

thx. fixed.


Adds more logging and cleanup logs in prow

Issue #, if available:
Description of changes:
Add more logging in common.mk, cleanup confusing log message in prow and improve cleanup to decrease build times.
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

/retest

/retest

/test all

/lgtm


MCMC

Adding support for performing Monte-Carlo marginalization of the hyperparameters. This integrates quite nicely into the framework. I haven't tested yet, but it seems that you would be able to construct acquisition hierarchies, mixing point estimates with MCMC.
There is one minor twist which has to addressed: the following code would currently result in errors:
....
model = GPflow.gpr.GPR(X,Y,RBF(2))
ei = ExpectedImprovement(model)
opt = BayesianOptimizer(domain, ei, hyper_draws=10)
opt.optimize(n_iter=10)
m.likelihood.variance.fixed = True
opt.optimize(n_iter=10)

The fix changes the size of the free state, but the copies still maintain the old one. Somehow, I should detect this change, and probably take new copies and replace the operands ParamList. I could verify the length of get_free_state but this is not a very robust fix: plenty of situations where no change would be detected. I could verify the position of every Param using the get_param_index, but I noticed this method does not take into account the fixed/unfixed state either (is this actually intended GPflow behaviour?)
Perhaps the easiest way out would be to detect the _needs_recompile flag in _optimize_models and maintain a flag indicating a change in the likelihood graph of the model. This would also catch changes in transforms which would also affect the semantics of the free state. Only changes of prior might introduce some overhead. Any thoughts on this?

Codecov Report

Merging #31 into master will decrease coverage by 0.15%.
The diff coverage is 100%.

@@            Coverage Diff             @@
##           master      #31      +/-   ##
==========================================
- Coverage   99.63%   99.47%   -0.16%
==========================================
  Files           7        7
  Lines         545      575      +30
==========================================
+ Hits          543      572      +29
- Misses          2        3       +1

Impacted Files
Coverage Δ

GPflowOpt/bo.py
98.18% <100%> (+0.1%)
:arrow_up:

GPflowOpt/acquisition.py
99.5% <100%> (-0.5%)
:arrow_down:

Continue to review full report at Codecov.

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

I thought about this, and the rebuilding on a free state change is a broader issue, and is also tightly coupled with the callback for setting model hyperparameters (#7), so I'll build a new PR which builds on this.


Move the --json option per subcommand

While it logically makes sense to have a global --json flag, it is rather incovenient.
As a user, it is common to play around not using json output and switching later on.
So the test command could be:
subwasm meta <args>

Currently, to get the result as json, the user needs to "go back" and stick a --json before the subcommand:
subwasm --json meta <args>

It would be convenient to also support it in the commands:
subwasm meta <args> --json

That allows people simply sticking a -j at the end of the command.

Or better make sub commands inherit from the main ones.

Which can be done using global.


Separate log file

I've saparate log file, but when i use
logger.info("test"); --> in infofile
logger.error("error"); --> in errorfile and infofile

This is my conf
var logger = new (winston.Logger)({
        transports: [
            new (winston.transports.File)({
                name: 'file.info',
                filename: './log/info.log',
                level: 'info'
            }),
            new (winston.transports.File)({
                name: 'file.error',
                filename: './log/error.log',
                level: 'error'
            })
        ]
    });

I want to separete completly the log.

Nobody???

Same issue.

@furyscript I figured out how that working)
Actually i didn't find where that mechanism is explained in explicity form, but after few google requests i realized what is going on)
Winston work with mechanizm of weights. Every level correspond to the specific weight.
By default weights is:
{ silly: 0, debug: 1, verbose: 2, info: 3, warn: 4, error: 5 }
Thats mean, when you set level: "info" in transport setting, this transporn will logging all levels which >= info, i.e >= 3
You can change default levels by logger.setLevels({ })

Uhm, but isn't pretty :(

Nobody?

There should be a minLevel and maxLevel per transport. That would resolve the issue. This would also be backward compatible by setting from level like this
options.minLevel = options.minLevel || options.level || 'info';
options.maxLevel = options.maxLevel || options.level || 'error';

Then filter logs accordingly.

So any fix from master?

A PR would be welcome for this.

Did some more triage and this is a duplicate of #614.

Only way is to create two instance of logger.


Use RecognizeOptions instead of individual parameters

Use RecognizeOptions instead of individual parameters in method calls

PollerFlux<OperationResult, IterableStream> beginRecognizeReceipts(
Flux data, long length, FormContentType formContentType, boolean includeTextDetails,
Duration pollInterval)

Following the guidelines on (Service Method Parameters)
Consider changing:

public SyncPoller<OperationResult, IterableStream<RecognizedForm>> beginRecognizeCustomFormsFromUrl(String fileSourceUrl, String modelId) {}

public SyncPoller<OperationResult, IterableStream<RecognizedForm>> beginRecognizeCustomFormsFromUrl(String fileSourceUrl, String modelId, boolean includeTextDetails, Duration pollInterval) {}

public SyncPoller<OperationResult, IterableStream<RecognizedForm>> beginRecognizeCustomForms(InputStream data, String modelId, long length, FormContentType formContentType) {}

public SyncPoller<OperationResult, IterableStream<RecognizedForm>> beginRecognizeCustomForms(InputStream data, String modelId, long length, FormContentType formContentType, boolean includeTextDetails, Duration pollInterval) {}

to

public SyncPoller<OperationResult, IterableStream<RecognizedForm>> beginRecognizeCustomFormsFromUrl(String fileSourceUrl, String modelId) {}

public SyncPoller<OperationResult, IterableStream<RecognizedForm>> beginRecognizeCustomForms(InputStream data, String modelId, long length, FormContentType formContentType) {}

public SyncPoller<OperationResult, IterableStream<RecognizedForm>> beginRecognizeCustomForms(RecognizeCustomFormOptions recognizeCustomFormOptions) {}

public class RecognizeOptions {
    public FormContentType contentType; //settable
    public boolelan includeTextContent; //settable
    public Duration pollInterval; //settable
    public RecognizeOptions();
}

public class RecognizeCustomFormsOptions extends RecognizeOptions {
    public String modelId;
    public InputStream data;
    public String formUrl;
    public RecognizeCustomFormsOptions(String modelId, InputStream data)
    public RecognizeCustomFormsOptions(String modelId, String formUrl)
}


Allow placement of cursor inside of atomic markings

Can we change the behavior of atomic to allow placement of the cursor inside the marking, but prevent editing? This would make it more intuitive to work with such markings. For instance, we want our users to click or otherwise put the cursor inside the marking in order to get information about it. The UX is weird when the cursor refuses to go in.
Better yet, maybe the cursor should turn into a selection on that whole marking, indicating what would happen if Backspace were hit.

Can we change the behavior of atomic to allow placement of the cursor inside the marking, but prevent editing?

No, that's what readOnly does.

Except that:

readOnly acts on the whole text
readOnly doesn't allow you to edit any of the text

No, I mean the readOnly option to markText

I see. I've just tested it, and, with readOnly, the marked text cannot be removed.


Export graph as a vectorgraph

Is there any way to export or save the visualisation as a vectorgraph? This might be a useful feature cuz screeshots will make the quality worse.

This is a good recommendation.  In my experience it is difficult to export an HTML svg.  However, I have had success in printing HTML pages to PDF and then cropping them to get a vectorized version.

I was about to creating the same issue,
I also tried to print the webpage as pdf but it seems I can only get half of the figure (even though the whole graph was shown in my browser)

I was about to creating the same issue,
I also tried to print the webpage as pdf but it seems I can only get half of the figure (even though the whole graph was shown in my browser)

I'm not sure it helps here, but I wrote a stac_to_tikz converter:
https://bitbucket.org/efokken/stac_to_tikz/src/master/
It transforms the resulting Layout.txt into a tex file that contains a tikz-picture of the graph. I hear that tikz can be converted to svg but have no experience with it:
https://tex.stackexchange.com/questions/51757/how-can-i-use-tikz-to-make-standalone-svg-graphics
The converter doesn't support much, only coloring Slack, PV and PQ nodes and nothing else, but maybe its a good starting point.


fix: C3 experimental template for Solid now uses correct preset

Fixes #0000
fix: C3 experimental template for Solid now uses correct preset

Tests

[ ] TODO (before merge)
[ ] Tests included
[x] Tests not necessary because: covered by current tests

E2E Tests CI Job required? (Use "e2e" label or ask maintainer to run separately)

[ ] I don't know
[x] Required
[ ] Not required because:

Public documentation

[ ] TODO (before merge)
[ ] Cloudflare docs PR(s):
[x] Documentation not necessary because: no change to the user flow.

Sorry same thing here - the experimental c3 tests are only for Next, if you can add one for solid that would be great :))

Will be tested once https://github.com/cloudflare/workers-sdk/pull/7409 lands


Module not loading

Due to security policies I can't use Install-module to install dbatools nor dbatools.library.  I downloaded the latest release of both and unzipped them into My Documents\WindowsPowershell\Modules directory.  I removed the -master and -main from the folder names.
When I try to import the module dbatools I get and error from the dbatools.library module:
import-module : The specified module 'C:\Users\adm-l2a-deanderson\Documents\WindowsPowerShell\Modules\dbatools.library
desktop\lib\Microsoft.Data.SqlClient.dll' was not loaded because no valid module file was found in any module
directory.
At line:1 char:1

import-module dbatools

  + CategoryInfo          : ResourceUnavailable: (C:\Users\adm-l2...a.SqlClient.dll:String) [Import-Module], FileNot
 FoundException
  + FullyQualifiedErrorId : Modules_ModuleNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand

The directory structure between the older version and the latest release of dbatool.library is totally different.  The older version I only see a folder named 2023.5.5 under the main folder, while the new version has several folders and files listed

Hi @dennisa72295 - when you download and unzip make sure you match the directory structure in My Documents\WindowsPowershell\Modules
I would expect

folder for the module - e.g. ...My Documents\WindowsPowershell\Modules\dbatools.library
folder for the version - e.g.  ...My Documents\WindowsPowershell\Modules\dbatools.library\2023.9.21
module files in that folder - e.g. ...My Documents\WindowsPowershell\Modules\dbatools.library\2023.9.21\dbatools.library.psd1

also when you download from the internet sometimes the files are blocked - you can unblock them all like this:
Get-ChildItem -Path '...My Documents\WindowsPowershell\Modules\dbatools.library\2023.9.21' -Recurse | Unblock-File

Which is the equivalent of checking this checkbox

Where do you download the zip from? PowerShell Gallery?

https://github.com/dataplat/dbatools.library

Gotcha - so I would suggest writing a PowerShell script to create the folder structure you need.. I'm not sure about how that zip gets generated - I don't believe it's something we can control I'm afraid.

It should be easy enough to take and installed version and upload it to the GitHub repo for download.  What is there seems to be source code that isn't compiled yet.


Some players remain after deleting player provider

What version of Music Assistant has the issue?
2.0.7
What version of the Home Assistant Integration have you got installed?
2024.6.2
Have you tried everything in the Troubleshooting FAQ and reviewed the Open and Closed Issues and Discussions to resolve this yourself?

[X] Yes

The problem
Some DLNA players still remain after deleting the DLNA/UPNP player provider
How to reproduce
I don't have a very specific test case for this, but I have seen this behavior on multiple occasions in the past.
Today, I was playing around with DLNA renders from JRiver and BubbleUPNP, to try to get MA to play audio on my PC and my Android phone respectively.
It went something like this.

install DLNA/UPNP player provider
try to play content on JRiver DLNA provider (it failed)
try to play content on BubbleUPNP DLNA provider (it failed, differently)
delete DLNA player provider
observe that 3 players remain

Music Providers
File system (network)
Player Providers
DLNA/UPNP
Full log output
log.txt
Additional information

I did not manually disable any of the players before runing into this
restarting the MA add-on does not fix it
adding/deleting the DLNA player provider again also doesn't fix it.
manually deleting all 3 players works

What version of Home Assistant Core are your running
2024.6.2
What type of installation are you running?
Home Assistant OS
On what type of hardware are you running?
Windows

Turns out it's not just the DLNA player provider. I just saw this with Airplay providers being left over as well. So, I have updated the description of this bug.
I just played with adding/disabling/removing the providers, and this time got quite a long list of Airplay and DLNA players left over. I probably would have Chromecast remaining as well, if I had added that provider, I just haven't tried.

Interestingly, the Airplay players hat remain are all in the disabled state (hourglass showing), but the DLNA players show as being available. While that might be considered a separate problem, it wouldn't happen at all if all players were properly removed when the corresponding player providers are.
The behavior is not exactly the same between every deletion attempt. It may be some sort of race condition.
I'm doing the provider deletion very quickly, one after the other in a matter of seconds.
Also, disabling the providers before deleting them seems to significantly increase the odds of reproducing the issue. So, I'm updating the test case.
1.start with  start with no player providers, and with the FS music provider (remote) installed, but disabled. I'm not sure if the state of the music provider has an impact on this or not, just listing what I used.
2. add airplay player provider
3. add DLNA/UPNP player provider
4. wait for all players to show in the player list in the settings
5. disable both player providers
6. wait for all players to show as disabled in the player list
7. quickly delete both player providers, with as little time in between as possible
8. go to the player list in the settings
9. some inconsistent number of players - from 0 to all of them - will remain, but not quite the same every time the test case is repeated. Some players may be shown in the disabled state (hourglass), while others lack the hourglass.
The only thing that consistently works to fix this is to delete all the remaining players one by one.
When trying to fix it by adding the providers back, the behavior is inconsistent. Once in that messed state with the remaining players, MA behavior appears to be unpredictable. It all stems from that invalid state, and I don't know if it's worth reporting separate issues, as they would all disappear if this one is resolved, but I'll list some of what happens anyway.

add the airplay and DLNA/UPNP providers back
the player list shows that none of the players are in the disabled state. The only context menu option available is "delete"
I tried re-enabling the FS music provider, as I had previously disabled it. I got an SMB error.
I tried adding the Qobuz provider also, and got an authentication error
I tried adding the Plex provider as well, and got a big red dialog with a long stack, but it was too short to capture
I did steps 12/13/14 to see if I could play content on one of those remaining "ghost" players that can only be deleted, but I didn't get that far. After getting to the state in step 9, the state of MA is really quite, and hopefully, eliminating that state will get rid of all these subsequent problems

log.txt

There have been a lot of changes since this report. Please check with 2.2.2 or later an advise if this is still an issue.

I can confirm that this is still an issue in 2.2.2 . Deleting all player providers in rapid succession resulted in the following non-functional leftover players. They were of all kinds - not just DLNA but also Airplay and Chromecast .

ma2.log

After restoring the add-on from backup, I repeated the test, this time with a reasonable delay between each provider deletion. I ended up with the exact same leftover player list. One thing that many of these devices have in common is that they are either in standby mode, or powered off by way of smartplug or other relay . The exceptions are :

Bar shelves CCA (actually a WiiM device)
Home theater google TV
Master bedroom Google TV

I did not try to power all the remaining devices on.  But I think the provider deletion should handle this case, anyway.

Thanks. This will be looked at in due course.

Please check this again on the lates stable/beta

We will close this soon assuming fixed

Unfortunately, this one is not fixed. When quickly deleting all the player providers, many players remain. Not all of them, but most of them. There doesn't seem to be any way to actually delete the remaining ones except one at a time, which is very tedious.

It seems you're actually looking for edge case situations here to break it. Under normal circumstances you would remove a single player or maybe even a single provider once in a blue moon. I'll put this on the long list as we have more pressing matters to fix first.
Also note that there is a way to cleanup orphaned players as you already pointed out.
I think it will probably not auto cleanup if a player is already orphaned (offline, unavailable) and then you remove the provider.

It's not just offline players remaining now. It's dozens of them. The deletion just doesn't seem to have much effect. I will reproduce and attach a log later when I'm home.
I wasn't looking for corner cases when I ran into this.

I can't recreate this. Just added and then removed the chromecast and airplay providers and the players appeared and disappeared without issue.

After deleting all the remaining players, then adding back all 3 providers (Airplay/Chromecast/DLNA), I also can't reproduce the issue when deleting the providers.
In this test, there were zero offline players, though.
Starting with no players, I powered all the players in the house through smartplugs.
I then added all 3 providers. All the players showed up.
Subsequently, I powered off some of the devices with smartplugs.
I then deleted the 3 providers once more.
6 players remained. These were only the ones that I physically powered off. There were some leftover players for each of the 3 providers.
So, having some players that are offline is definitely a trigger for this issue.
However, this result is different than the one I saw before, where dozens of players were left over. My configuration includes about 70 players. All of them have volume normalization off. All DLNA and Chromecast players have the queue flow on. I don't know if those settings affect this issue or not. In any case, I restored my add-on with those 70 players, then proceeded to delete all 3 providers. I ended up with 23 leftover players. Most of them are offline devices,, but there are also 4 Chromecast player groups that shouldn't be there.
ma_delete_players.log

Keeping open


Three facets of data

Dear @daviddmc,
I have information on three facets of a site with specific location coordinates. I was wondering, can we try the program directly with data from other organs.
Thanks!

Hi @LJJson, do you mean you have stacks of images of another organ? The algorithm should be able to handle generic grayscale data except that SVoRT and segmentation only work for fetal brain data.

#thanks for your reply， yes we  have some  MRI from  another organs , We have processed all these data in a unified coordinate system, and we want to achieve multiple facets (sag,tra,ax) to synthesize a high-resolution surface. It's like an SVR step. I wonder if your project has a similar feature. I have tried to run online fetal data, but it seems that I need to use your last registration project. But what I want to say is that our data all have accurate pixel coordinate information, I don't know whether this step of registration can be omitted. Thank you for your patience, I wish you a happy life.

If you want to disable registration, you may set --registration none.

thanks！  ， I will try  it.


Small bug in Quick disconnect (on Bluetooth)

First of all, thank you for this beautiful project.
I have fake ps3 controller (PANHAI) and it's working great without issues.
But when I Quick disconnect (on Bluetooth) by pressing L1 + R1 + PS, it disconnect and reconnect immediately,
I know that I can make it disconnect completely from DSHMC, but I also need L1 + R1 + PS, it's so beautiful feature.
Cheers.

If it reconnects again, it's the controllers doing, so not much the driver can do against I'm afraid.


Setup CI & add tests

Travis can be used as a CI provider and pytest can be used to test.

I will add some preliminary tests and set up a CI.

Installed travis but not codecov. I'd prefer to do this carefully and see how it goes with travis first. Let me know if you think codecov is a must.

@yunhailuo Although codecov is not must but as the codebase would get larger I think it is important to keep track of code coverage.


Remove mysql 5.7 from macos

Homebrew will no longer install mysql 5.7, so seems reasonable for us to drop it (at least for macos).

👍🏻 I removed them from the required checks


[cubestore] made initRouter image repository and tag configurable (removed static reference to dockerhub / busybox)

Thanks @W48B1T!
Can you add some documentation for the two new values?

Hello @lvauvillier, thanks for your reply! I added the documentation in the README.

Merged. Thanks!


Build error cross compiling 1.68.0 log for ARM

I'm attempting to cross compile v1.68 for ARM on Ubuntu (Cosmic), based on checking out that version of the code. I am unable to build some of the libraries I need. For example, I need boost log, but this fails to build.
I've set the compiler up in project.config.jam...
if ! gcc in [ feature.values  ]
{
using gcc : arm : /usr/bin/aarch64-linux-gnu-g++ ;
}
Running /b2 as follows gives errors:
./b2 install -a toolset=gcc-arm architecture=arm abi=aapcs address-model=64 --prefix=/opt/cross/boost --with-log
....

gcc.compile.c++ bin.v2/libs/atomic/build/gcc-arm/release/threading-multi/lockpool.o
In file included from ./boost/atomic/detail/operations_lockfree.hpp:21:0,
                 from libs/atomic/src/lockpool.cpp:22:
/usr/include/boost/atomic/detail/ops_gcc_atomic.hpp:217:74: error: wrong number of template arguments (2, should be 1)
     public gcc_atomic_operations< typename make_storage_type< 8u, Signed >::type >
                                                                          ^
In file included from /usr/include/boost/atomic/detail/ops_gcc_atomic.hpp:19:0,
                 from ./boost/atomic/detail/operations_lockfree.hpp:21,
                 from libs/atomic/src/lockpool.cpp:22:
./boost/atomic/detail/storage_type.hpp:66:8: note: provided for ‘template<long unsigned int Size> struct boost::atomics::detail::make_storage_type’
 struct make_storage_type
        ^
In file included from ./boost/atomic/detail/operations_lockfree.hpp:21:0,
                 from libs/atomic/src/lockpool.cpp:22:
/usr/include/boost/atomic/detail/ops_gcc_atomic.hpp:217:82: error: template argument 1 is invalid
     public gcc_atomic_operations< typename make_storage_type< 8u, Signed >::type >
                                                                                ^
/usr/include/boost/atomic/detail/ops_gcc_atomic.hpp:218:1: error: expected ‘::’ before ‘{’ token
 {
 ^
/usr/include/boost/atomic/detail/ops_gcc_atomic.hpp:218:1: error: expected class-name before ‘{’ token
/usr/include/boost/atomic/detail/ops_gcc_atomic.hpp:255:74: error: wrong number of template arguments (2, should be 1)
     public gcc_atomic_operations< typename make_storage_type< 4u, Signed >::type >
                                                                          ^
In file included from /usr/include/boost/atomic/detail/ops_gcc_atomic.hpp:19:0,
                 from ./boost/atomic/detail/operations_lockfree.hpp:21,
                 from libs/atomic/src/lockpool.cpp:22:
./boost/atomic/detail/storage_type.hpp:66:8: note: provided for ‘template<long unsigned int Size> struct boost::atomics::detail::make_storage_type’
 struct make_storage_type
        ^
In file included from ./boost/atomic/detail/operations_lockfree.hpp:21:0,
                 from libs/atomic/src/lockpool.cpp:22:
/usr/include/boost/atomic/detail/ops_gcc_atomic.hpp:255:82: error: template argument 1 is invalid
     public gcc_atomic_operations< typename make_storage_type< 4u, Signed >::type >
                                                                                ^
/usr/include/boost/atomic/detail/ops_gcc_atomic.hpp:256:1: error: expected ‘::’ before ‘{’ token
 {
 ^
/usr/include/boost/atomic/detail/ops_gcc_atomic.hpp:256:1: error: expected class-name before ‘{’ token
/usr/include/boost/atomic/detail/ops_gcc_atomic.hpp:301:74: error: wrong number of template arguments (2, should be 1)
     public gcc_atomic_operations< typename make_storage_type< 2u, Signed >::type >
                                                                          ^
In file included from /usr/include/boost/atomic/detail/ops_gcc_atomic.hpp:19:0,
                 from ./boost/atomic/detail/operations_lockfree.hpp:21,
                 from libs/atomic/src/lockpool.cpp:22:
./boost/atomic/detail/storage_type.hpp:66:8: note: provided for ‘template<long unsigned int Size> struct boost::atomics::detail::make_storage_type’
 struct make_storage_type
        ^
In file included from ./boost/atomic/detail/operations_lockfree.hpp:21:0,
                 from libs/atomic/src/lockpool.cpp:22:
/usr/include/boost/atomic/detail/ops_gcc_atomic.hpp:301:82: error: template argument 1 is invalid
     public gcc_atomic_operations< typename make_storage_type< 2u, Signed >::type >
                                                                                ^
/usr/include/boost/atomic/detail/ops_gcc_atomic.hpp:302:1: error: expected ‘::’ before ‘{’ token
 {
 ^
/usr/include/boost/atomic/detail/ops_gcc_atomic.hpp:302:1: error: expected class-name before ‘{’ token
/usr/include/boost/atomic/detail/ops_gcc_atomic.hpp:355:74: error: wrong number of template arguments (2, should be 1)
     public gcc_atomic_operations< typename make_storage_type< 1u, Signed >::type >
                                                                          ^
In file included from /usr/include/boost/atomic/detail/ops_gcc_atomic.hpp:19:0,
                 from ./boost/atomic/detail/operations_lockfree.hpp:21,
                 from libs/atomic/src/lockpool.cpp:22:
./boost/atomic/detail/storage_type.hpp:66:8: note: provided for ‘template<long unsigned int Size> struct boost::atomics::detail::make_storage_type’
 struct make_storage_type
        ^
In file included from ./boost/atomic/detail/operations_lockfree.hpp:21:0,
                 from libs/atomic/src/lockpool.cpp:22:
/usr/include/boost/atomic/detail/ops_gcc_atomic.hpp:355:82: error: template argument 1 is invalid
     public gcc_atomic_operations< typename make_storage_type< 1u, Signed >::type >
                                                                                ^
/usr/include/boost/atomic/detail/ops_gcc_atomic.hpp:356:1: error: expected ‘::’ before ‘{’ token
 {
 ^
/usr/include/boost/atomic/detail/ops_gcc_atomic.hpp:356:1: error: expected class-name before ‘{’ token
libs/atomic/src/lockpool.cpp:59:26: error: ‘storage_type’ in ‘boost::atomics::detail::{anonymous}::lock_operations {aka struct boost::atomics::detail::operations<1ul, false>}’ does not name a type
 typedef lock_operations::storage_type lock_type;
                          ^
libs/atomic/src/lockpool.cpp:64:28: error: ‘lock_type’ was not declared in this scope
     padding_size = (sizeof(lock_type) <= BOOST_ATOMIC_CACHE_LINE_SIZE ?
                            ^
libs/atomic/src/lockpool.cpp:65:48: error: ‘lock_type’ was not declared in this scope
         (BOOST_ATOMIC_CACHE_LINE_SIZE - sizeof(lock_type)) :
                                                ^
libs/atomic/src/lockpool.cpp:66:48: error: ‘lock_type’ was not declared in this scope
         (BOOST_ATOMIC_CACHE_LINE_SIZE - sizeof(lock_type) % BOOST_ATOMIC_CACHE_LINE_SIZE))
                                                ^
libs/atomic/src/lockpool.cpp:72:5: error: ‘lock_type’ does not name a type
     lock_type lock;
     ^
libs/atomic/src/lockpool.cpp:80:5: error: ‘lock_type’ does not name a type
     lock_type lock;
     ^
libs/atomic/src/lockpool.cpp: In constructor ‘boost::atomics::detail::lockpool::scoped_lock::scoped_lock(const volatile void*)’:
libs/atomic/src/lockpool.cpp:109:111: error: ‘boost::atomics::detail::{anonymous}::padded_lock_t {aka struct boost::atomics::detail::{anonymous}::padded_lock<0u>}’ has no member named ‘lock’
     m_lock(&g_lock_pool[reinterpret_cast< std::size_t >(addr) % (sizeof(g_lock_pool) / sizeof(*g_lock_pool))].lock)
                                                                                ^
libs/atomic/src/lockpool.cpp:111:12: error: ‘test_and_set’ is not a member of ‘boost::atomics::detail::{anonymous}::lock_operations {aka boost::atomics::detail::operations<1ul, false>}’
     while (lock_operations::test_and_set(*static_cast< lock_type* >(m_lock), memory_order_acquire))
            ^
libs/atomic/src/lockpool.cpp:111:56: error: ‘lock_type’ does not name a type
     while (lock_operations::test_and_set(*static_cast< lock_type* >(m_lock), memory_order_acquire))
                                                        ^
libs/atomic/src/lockpool.cpp:111:65: error: expected ‘>’ before ‘*’ token
     while (lock_operations::test_and_set(*static_cast< lock_type* >(m_lock), memory_order_acquire))
                                                                 ^
libs/atomic/src/lockpool.cpp:111:65: error: expected ‘(’ before ‘*’ token
libs/atomic/src/lockpool.cpp:111:67: error: expected primary-expression before ‘>’ token
     while (lock_operations::test_and_set(*static_cast< lock_type* >(m_lock), memory_order_acquire))
                                                                   ^
libs/atomic/src/lockpool.cpp:112:5: error: expected ‘)’ before ‘{’ token
     {
     ^
libs/atomic/src/lockpool.cpp:117:18: error: ‘load’ is not a member of ‘boost::atomics::detail::{anonymous}::lock_operations {aka boost::atomics::detail::operations<1ul, false>}’
         while (!!lock_operations::load(*static_cast< lock_type* >(m_lock), memory_order_relaxed));
                  ^
libs/atomic/src/lockpool.cpp:117:54: error: ‘lock_type’ does not name a type
         while (!!lock_operations::load(*static_cast< lock_type* >(m_lock), memory_order_relaxed));
                                                      ^
libs/atomic/src/lockpool.cpp:117:63: error: expected ‘>’ before ‘*’ token
         while (!!lock_operations::load(*static_cast< lock_type* >(m_lock), memory_order_relaxed));
                                                               ^
libs/atomic/src/lockpool.cpp:117:63: error: expected ‘(’ before ‘*’ token
libs/atomic/src/lockpool.cpp:117:65: error: expected primary-expression before ‘>’ token
         while (!!lock_operations::load(*static_cast< lock_type* >(m_lock), memory_order_relaxed));
                                                                 ^
libs/atomic/src/lockpool.cpp:117:98: error: expected ‘)’ before ‘;’ token
         while (!!lock_operations::load(*static_cast< lock_type* >(m_lock), memory_order_relaxed));
                                                                                ^
libs/atomic/src/lockpool.cpp: In destructor ‘boost::atomics::detail::lockpool::scoped_lock::~scoped_lock()’:
libs/atomic/src/lockpool.cpp:123:5: error: ‘clear’ is not a member of ‘boost::atomics::detail::{anonymous}::lock_operations {aka boost::atomics::detail::operations<1ul, false>}’
     lock_operations::clear(*static_cast< lock_type* >(m_lock), memory_order_release);
     ^
libs/atomic/src/lockpool.cpp:123:42: error: ‘lock_type’ does not name a type
     lock_operations::clear(*static_cast< lock_type* >(m_lock), memory_order_release);
                                          ^
libs/atomic/src/lockpool.cpp:123:51: error: expected ‘>’ before ‘*’ token
     lock_operations::clear(*static_cast< lock_type* >(m_lock), memory_order_release);
                                                   ^
libs/atomic/src/lockpool.cpp:123:51: error: expected ‘(’ before ‘*’ token
libs/atomic/src/lockpool.cpp:123:53: error: expected primary-expression before ‘>’ token
     lock_operations::clear(*static_cast< lock_type* >(m_lock), memory_order_release);
                                                     ^

    "/usr/bin/aarch64-linux-gnu-g++"   -fPIC -pthread -O3 -finline-functions -Wno-inline -Wall  -DBOOST_ALL_NO_LIB=1 -DBOOST_ATOMIC_DYN_LINK=1 -DBOOST_ATOMIC_SOURCE -DNDEBUG  -I"." -c -o "bin.v2/libs/atomic/build/gcc-arm/release/threading-multi/lockpool.o" "libs/atomic/src/lockpool.cpp"

...failed gcc.compile.c++ bin.v2/libs/atomic/build/gcc-arm/release/threading-multi/lockpool.o...
...skipped <pbin.v2/libs/atomic/build/gcc-arm/release/threading-multi>libboost_atomic.so.1.68.0 for lack of <pbin.v2/libs/atomic/build/gcc-arm/release/threading-multi>lockpool.o...
...skipped <p/opt/cross/boost/lib>libboost_atomic.so.1.68.0 for lack of <pbin.v2/libs/atomic/build/gcc-arm/release/threading-multi>libboost_atomic.so.1.68.0...
...skipped <p/opt/cross/boost/lib>libboost_atomic.so for lack of <p/opt/cross/boost/lib>libboost_atomic.so.1.68.0...

...

Any thoughts on how to get round this?

i got same problem when i tried to install boost on jetson tx2.
do you solve this problem?


Is it possible to add the -f parameter to this code so a force rendering could be done.

Thank you

I just noticed it's not in the readme but the -f parameter is in the code itself. Thank you. May be please update the help file adding the parameter. I guess this issue can be closed.


Exactly what I've been looking for!

Thanks for this project. I have a single tenant app that needs to be Kuberlogic-ified. I tried to follow what Mattermost did to saasify their single-tenant app and it was quite complicated.
The app is: https://www.getlago.com/ Actually, it's billing app like Chargebee and Stripe billing. I've talked to them about making this Saas and they're ok with it as long as I share the code I use to build it. We're all good. I also have access to SaasRocks in case that's required for any front-end stuff.  My Saas will be called: billstreams.com Cheers, Dave

Hi Dave,
Thank you for your issue.
I sent you an email.
Dmitry

I installed Kuberlogic on Minikube and everything deployed fine. I've got one question regarding the loadbalancers that get created. Here are all the services running:
osboxes@osboxes:~/kuberlogic$ kubectl get svc --all-namespaces

NAMESPACE       NAME                                           TYPE           CLUSTER-IP       EXTERNAL-IP      PORT(S)                      AGE

cert-manager    cert-manager                                   ClusterIP      <IP_ADDRESS>   <none>           9402/TCP                     98m

cert-manager    cert-manager-webhook                           ClusterIP      <IP_ADDRESS>    <none>           443/TCP                      98m

default         crd-hook-service                               ClusterIP      <IP_ADDRESS>    <none>           443/TCP                      6d4h

default         kubeplus                                       NodePort       <IP_ADDRESS>    <none>           90:31350/TCP                 6d4h

default         kubeplus-consumerui                            ClusterIP      <IP_ADDRESS>     <none>           5000/TCP                     6d4h

default         kubernetes                                     ClusterIP      <IP_ADDRESS>        <none>           443/TCP                      6d4h

hello1          hello-world-service-helloworldservice-hello1   NodePort       <IP_ADDRESS>    <none>           80:30077/TCP                 6d3h

hello2          hello-world-service-helloworldservice-hello2   NodePort       <IP_ADDRESS>    <none>           80:32393/TCP                 6d3h

ingress-nginx   ingress-nginx-controller                       NodePort       <IP_ADDRESS>    <none>           80:30990/TCP,443:32360/TCP   102m

ingress-nginx   ingress-nginx-controller-admission             ClusterIP      <IP_ADDRESS>    <none>           443/TCP                      102m

kong            kong-proxy                                     LoadBalancer   <IP_ADDRESS>      <IP_ADDRESS>      80:30691/TCP,443:30418/TCP   97m

kong            kong-validation-webhook                        ClusterIP      <IP_ADDRESS>   <none>           443/TCP                      97m

kube-system     kube-dns                                       ClusterIP      <IP_ADDRESS>       <none>           53/UDP,53/TCP,9153/TCP       6d4h

kuberlogic      kls-api-server                                 LoadBalancer   <IP_ADDRESS>   <IP_ADDRESS>   80:30007/TCP                 98m

kuberlogic      kls-controller-manager-metrics-service         ClusterIP      <IP_ADDRESS>   <none>           8443/TCP                     98m

kuberlogic      kls-webhook-service                            ClusterIP      <IP_ADDRESS>   <none>           443/TCP                      98m

tenant1         tenant1                                        ClusterIP      <IP_ADDRESS>   <none>           1337/TCP                     44m

As you can see I have two loadbalancers competing for port 80. When I try to run the sample deployed app I get the following message: {"message":"no Route matched with those values"} which I believe is Kong telling me there is something else running on port 80. Is there something I've missed?

Hi @gridworkz !
No, this error means that ingress object was not configured correctly. Could you share a list of ingress objects in your cluster?
kubectl get ingress --all-namespaces
Also please note that ingress object is created only when domain field is set (--domain when using cli).

Ah, I see:
osboxes@osboxes:~$ kubectl get ingress --all-namespaces
No resources found

I'm using the following ingress:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: planka
  namespace: kong
  annotations:
    konghq.com/strip-path: "true"
spec:
  ingressClassName: kong
  rules:
  - host: test1.local
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: tenant2
            port:
              number: 80

and I'm getting the following result from: curl -i tenant2.test.local (btw: I added a tenant2)
HTTP/1.1 404 Not Found
Date: Sun, 03 Jul 2022 03:21:20 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
Content-Length: 48
X-Kong-Response-Latency: 0
Server: kong/2.8.1

{"message":"no Route matched with those values"}

Ingress object should be created by Kuberlogic operator.
Also, ingress objects must reside in service namespace.
What is the reason for creating ingress objects manually?

Ah OK. That's what I thought. I'll remove the ingress.
On Tue, Jul 5, 2022 at 12:11 AM Arsenii Pastushenko <
@.***> wrote:

Ingress object should be created by Kuberlogic operator.
Also, ingress objects must reside in service namespace.
What is the reason for creating ingress objects manually?
—
Reply to this email directly, view it on GitHub
https://github.com/kuberlogic/kuberlogic/issues/154#issuecomment-1174586592,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AEVXNSENPQGTMMBNTA635ULVSOYWPANCNFSM5ZSHIENQ
.
You are receiving this because you were mentioned.Message ID:
@.***>

I was doing a bit of testing on a fresh code install (today). I'm getting a Crashbackoff loop on the chargebee-integration pod after doing make deploy
osboxes@osboxes:~/kuberlogic/modules/dynamic-operator$ kubectl describe pod kls-controller-manager-7ffb56bffb-q7pwr -n kuberlogic
Name:         kls-controller-manager-7ffb56bffb-q7pwr
Namespace:    kuberlogic
Priority:     0
Node:         minikube/<IP_ADDRESS>
Start Time:   Wed, 06 Jul 2022 16:21:25 -0400
Labels:       control-plane=controller-manager
              pod-template-hash=7ffb56bffb
Annotations:  kubectl.kubernetes.io/default-container: manager
Status:       Running
IP:           <IP_ADDRESS>
IPs:
  IP:           <IP_ADDRESS>
Controlled By:  ReplicaSet/kls-controller-manager-7ffb56bffb
Containers:
  manager:
    Container ID:  docker://0015dfc190c347edf88df92c51e83265cfca10a6acde95a8ce94360b2a71334a
    Image:         quay.io/kuberlogic/dynamic-operator:0.0.8
    Image ID:      docker-pullable://quay.io/kuberlogic/dynamic-operator@sha256:a03341db02a06dde9bf6d341d76214953c624c92906885b5ffeed1c190483028
    Port:          9443/TCP
    Host Port:     0/TCP
    Command:
      /manager
    Args:
      --health-probe-bind-address=:8081
      --metrics-bind-address=<IP_ADDRESS>:8080
      --leader-elect
    State:          Running
      Started:      Wed, 06 Jul 2022 16:21:54 -0400
    Ready:          True
    Restart Count:  0
    Limits:
      cpu:     500m
      memory:  128Mi
    Requests:
      cpu:      10m
      memory:   64Mi
    Liveness:   http-get http://:8081/healthz delay=15s timeout=1s period=20s #success=1 #failure=3
    Readiness:  http-get http://:8081/readyz delay=5s timeout=1s period=10s #success=1 #failure=3
    Environment:
      SVC_OPTS_TLS_SECRET_NAME:       kls-tls-secret-fk69dg8b55
      PLUGINS:                        {docker-compose,/docker-compose-plugin}
      KL_PLUGIN_DOCKER_COMPOSE_FILE:  /etc/compose-file/docker-compose.yaml
      NAMESPACE:                      kuberlogic (v1:metadata.namespace)
    Mounts:
      /etc/compose-file from compose-file (rw)
      /tmp/k8s-webhook-server/serving-certs from cert (ro)
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-52t2c (ro)
  kube-rbac-proxy:
    Container ID:  docker://31412e5eeb689ba3f47fbac731a14b3b9e8e148e04d621c6ec07deb5295c9cc7
    Image:         gcr.io/kubebuilder/kube-rbac-proxy:v0.8.0
    Image ID:      docker-pullable://gcr.io/kubebuilder/kube-rbac-proxy@sha256:db06cc4c084dd0253134f156dddaaf53ef1c3fb3cc809e5d81711baa4029ea4c
    Port:          8443/TCP
    Host Port:     0/TCP
    Args:
      --secure-listen-address=<IP_ADDRESS>:8443
      --upstream=http://<IP_ADDRESS>:8080/
      --logtostderr=true
      --v=10
    State:          Running
      Started:      Wed, 06 Jul 2022 16:22:03 -0400
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-52t2c (ro)
  apiserver:
    Container ID:  docker://cb363ce38695d9ab02354b6127127b13479ea7cde529f02997a8f8ac1ff6c43c
    Image:         quay.io/kuberlogic/dynamic-apiserver:0.0.8
    Image ID:      docker-pullable://quay.io/kuberlogic/dynamic-apiserver@sha256:c43f9fde198f987906860851fed4edbe126964ff53d811a460a4e0547c2b7e5f
    Port:          8001/TCP
    Host Port:     0/TCP
    Command:
      /cmd
    Args:
      --scheme=http
    State:          Running
      Started:      Wed, 06 Jul 2022 16:22:13 -0400
    Ready:          True
    Restart Count:  0
    Limits:
      cpu:     100m
      memory:  30Mi
    Requests:
      cpu:     100m
      memory:  20Mi
    Environment:
      KUBERLOGIC_APISERVER_TOKEN:  <set to the key 'token' in secret 'kls-apiserver-74ddg762g4'>  Optional: false
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-52t2c (ro)
  chargebee-integration:
    Container ID:  docker://88461c1d45fd3988e6f44f99c503ea393180c55ae6e2600edebad70badae9b19
    Image:         quay.io/kuberlogic/chargebee-integration:0.0.8
    Image ID:      docker-pullable://quay.io/kuberlogic/chargebee-integration@sha256:95881f8e0b51ec4043e6f5ccf1feb80dd8d6997813b22446fbfb1320494c39fd
    Port:          4242/TCP
    Host Port:     0/TCP
    Command:
      /cmd
    Args:
      --scheme=http
    State:          Waiting
      Reason:       CrashLoopBackOff
    Last State:     Terminated
      Reason:       Error
      Exit Code:    1
      Started:      Wed, 06 Jul 2022 16:25:09 -0400
      Finished:     Wed, 06 Jul 2022 16:25:09 -0400
    Ready:          False
    Restart Count:  5
    Limits:
      cpu:     50m
      memory:  30Mi
    Requests:
      cpu:     50m
      memory:  20Mi
    Environment:
      KUBERLOGIC_APISERVER_TOKEN:   <set to the key 'token' in secret 'kls-apiserver-74ddg762g4'>  Optional: false
      KUBERLOGIC_APISERVER_SCHEME:  http
      KUBERLOGIC_APISERVER_HOST:    localhost:8001
      CHARGEBEE_SITE:               <set to the key 'chargebee_site' in secret 'kls-chargebee-integration-kd9t9b6b9c'>     Optional: false
      CHARGEBEE_KEY:                <set to the key 'chargebee_key' in secret 'kls-chargebee-integration-kd9t9b6b9c'>      Optional: false
      KUBERLOGIC_DOMAIN:            <set to the key 'kuberlogic_domain' in secret 'kls-chargebee-integration-kd9t9b6b9c'>  Optional: false
      KUBERLOGIC_TYPE:              docker-compose
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-52t2c (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             False
  ContainersReady   False
  PodScheduled      True
Volumes:
  cert:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  webhook-server-cert
    Optional:    false
  compose-file:
    Type:      ConfigMap (a volume populated by a ConfigMap)
    Name:      kls-compose-file-2f57th8t6d
    Optional:  false
  kube-api-access-52t2c:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   Burstable
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type     Reason       Age                  From               Message
  ----     ------       ----                 ----               -------
  Normal   Scheduled    5m8s                 default-scheduler  Successfully assigned kuberlogic/kls-controller-manager-7ffb56bffb-q7pwr to minikube
  Warning  FailedMount  5m8s                 kubelet            MountVolume.SetUp failed for volume "cert" : secret "webhook-server-cert" not found
  Normal   Pulling      5m7s                 kubelet            Pulling image "quay.io/kuberlogic/dynamic-operator:0.0.8"
  Normal   Pulled       4m39s                kubelet            Successfully pulled image "quay.io/kuberlogic/dynamic-operator:0.0.8" in 27.466800125s
  Normal   Created      4m39s                kubelet            Created container manager
  Normal   Started      4m39s                kubelet            Started container manager
  Normal   Pulling      4m39s                kubelet            Pulling image "gcr.io/kubebuilder/kube-rbac-proxy:v0.8.0"
  Normal   Pulled       4m30s                kubelet            Successfully pulled image "gcr.io/kubebuilder/kube-rbac-proxy:v0.8.0" in 8.684005073s
  Normal   Created      4m30s                kubelet            Created container kube-rbac-proxy
  Normal   Started      4m30s                kubelet            Started container kube-rbac-proxy
  Normal   Pulling      4m30s                kubelet            Pulling image "quay.io/kuberlogic/dynamic-apiserver:0.0.8"
  Normal   Pulled       4m20s                kubelet            Successfully pulled image "quay.io/kuberlogic/dynamic-apiserver:0.0.8" in 9.504530123s
  Normal   Created      4m20s                kubelet            Created container apiserver
  Normal   Started      4m20s                kubelet            Started container apiserver
  Normal   Pulling      4m20s                kubelet            Pulling image "quay.io/kuberlogic/chargebee-integration:0.0.8"
  Normal   Pulled       4m16s                kubelet            Successfully pulled image "quay.io/kuberlogic/chargebee-integration:0.0.8" in 3.573430375s
  Normal   Created      4m (x3 over 4m16s)   kubelet            Created container chargebee-integration
  Normal   Started      4m (x3 over 4m16s)   kubelet            Started container chargebee-integration
  Normal   Pulled       4m (x2 over 4m16s)   kubelet            Container image "quay.io/kuberlogic/chargebee-integration:0.0.8" already present on machine
  Warning  BackOff      8s (x20 over 4m15s)  kubelet            Back-off restarting failed container

Just wondering if you've encountered this.

Cool, thanks.

I tried the new docker-compose.yaml and provisioned a new tenant (with the latest code from master). I'm still not getting an ingress created:
osboxes@osboxes:~/kuberlogic$ ./kuberlogic service list
  № |   ID    | SUBSCRIPTION ID |      TYPE      | REPLICA | VERSION | BACKUP SCHEDULE | STATUS  | ENDPOINT
----+---------+-----------------+----------------+---------+---------+-----------------+---------+-----------
  0 | tenant1 |                 | docker-compose |       1 |         |                 | Unknown |

and
osboxes@osboxes:~/kuberlogic$ kubectl get ingress --all-namespaces
No resources found

Could this be a Minikube thing? Where are you guys running your K8 cluster? I checked out the Lago URLs you sent in the email and they work great.

Where are you guys running your K8 cluster?
It will certainly run without problems on any managed Kubernetes (GKE, EKS, DigitalOcean, etc.). We would generally recommend using managed one (at least for the testing phase). On-prem K8s depends a lot on the configuration of Kubernetes and the components themselves.

Thanks, I'll checkout a managed service.

BTW: Got it running on Microk8s!:
osboxes@osboxes:~/kuberlogic$ ./kuberlogic service list
  № |   ID    | SUBSCRIPTION ID |      TYPE      | REPLICA | VERSION | BACKUP SCHEDULE |      STATUS       |            ENDPOINT
----+---------+-----------------+----------------+---------+---------+-----------------+-------------------+----------------------------------
  0 | tenant1 |                 | docker-compose |       1 |         |                 | ReadyConditionMet | http://tenant1.productname.site

Regarding your latest email - I was thinking if we go with your "passing env vars to the container" solution we could do something like this:
Let's assume we have this html section of the login form:
<form>
  ...
  <label for="organization">Organization</label>
  <input type="organization" name="organization" id="organization" />

  <button type="submit">Submit</button>
</form>

To handle submissions in JavaScript, we can use the FormData API like this:
function handleSubmit(event) {
  event.preventDefault();

  const data = new FormData(event.target);

  const value = data.get('organization');

  console.log({ value });
}

const form = document.querySelector('form');
form.addEventListener('submit', handleSubmit);

If we run this code and submit the form, the value we enter into the organization input will be logged.
At this point we can JSON.stringify it and pipe it to something like jq and convert it to a .env variable. Once that is complete we can pass the env var to the container. At this point organization is available in the container and we can provision the application using --id $organization.
I'm just spit-balling here - does this sound reasonable?

Hi @gridworkz !
Please see the documentation about templating docker-compose. It is possible to use templates to pass variables to the application container.

Cool - I'll check it out


Crash after trying to open an application

Microsoft PowerToys version
<IP_ADDRESS>
Running as admin

[ ] Yes

Area(s) with issue?
PowerToys Run
Steps to reproduce

Search application by typing "connect"
Open application "Ubisoft Connect"

✔ Expected Behavior
Opening the app "Ubisoft Connect"
❌ Actual Behavior
Crash with message
I actually don't know if this was the reason, but I missopened "connect" the executable command first then tried to open Ubisoft Connect and it crashed
Version: <IP_ADDRESS>
OS Version: Microsoft Windows NT 10.0.18363.0
IntPtr Length: 8
x64: True
Date: 18/07/2021 18:18:03
Exception:
System.InvalidCastException: Unable to cast object of type 'System.Windows.Documents.Run' to type 'System.Windows.FrameworkElement'.
at PowerLauncher.MainWindow.SuggestionsList_PreviewMouseLeftButtonUp(Object sender, MouseButtonEventArgs e)
at System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
at System.Windows.UIElement.ReRaiseEventAs(DependencyObject sender, RoutedEventArgs args, RoutedEvent newEvent)
at System.Windows.UIElement.OnPreviewMouseUpThunk(Object sender, MouseButtonEventArgs e)
at System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
at System.Windows.ContentElement.RaiseTrustedEvent(RoutedEventArgs args)
at System.Windows.Input.InputManager.ProcessStagingArea()
at System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport)
at System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel)
at System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr hwnd, WindowMessage msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
2021-07-18 log.txt
Other Software
No response

@VictorJozwicki
Please, update to 0.41.4, it was fixed there


Don't support region af-south-1

Describe the bug
when copy S3 objects from af-south-1, error happens.
To Reproduce

create data replication hub in ap-southeast-1 region
create data replication task, from af-south-1 to ZHY cn-northwest-1

Expected behavior
Support af-south-1 and me-south-1
Screenshots
==== CloudWatch Log ====
INFO:JobSender> Start comparing...
Traceback (most recent call last):
File "job_sender.py", line 105, in
find_and_send_jobs(src_client, des_client, sqs_queue_name,
File "job_sender.py", line 32, in find_and_send_jobs
job_sender.send_jobs(include_version)
File "/app/migration_lib/job.py", line 122, in send_jobs
self._get_delta_and_send(include_version)
File "/app/migration_lib/job.py", line 83, in _get_delta_and_send
src_file_set = self._get_source_set(src_list_gen, include_version)
File "/app/migration_lib/job.py", line 38, in _get_source_set
src_list = next(src_list_gen)
File "/app/migration_lib/client.py", line 218, in _list_objects_without_version
response = self._list_objects_func(**list_kwargs)
File "/app/migration_lib/client.py", line 202, in _list_objects_func
return self._client.list_objects_v2(**kwargs)
File "/usr/local/lib/python3.8/site-packages/botocore/client.py", line 357, in _api_call
return self._make_api_call(operation_name, kwargs)
File "/usr/local/lib/python3.8/site-packages/botocore/client.py", line 676, in _make_api_call
raise error_class(parsed_response, operation_name)
botocore.exceptions.ClientError: An error occurred (IllegalLocationConstraintException) when calling the ListObjectsV2 operation: The af-south-1 location constraint is incompatible for the region specific endpoint this request was sent to.
Please complete the following information about the solution:

[ ] Version: [e.g. v1.0.0]
[ ] Region: [af-south-1]
[x] Was the solution modified from the version published on this repository?
[ ] If the answer to the previous question was yes, are the changes available on GitHub?
[ ] Have you checked your service quotas for the sevices this solution uses?
[x] Were there any errors in the CloudWatch Logs?

Additional context
Add any other context about the problem here.

The S3 requests must be sent to the destination region. As in this case AWS Data Replication Hub have configured  default region to be the source region, It will need to do an override to destination region, for example:
From EC2 in SG, ap-southeast-1, do following s3 cp CLI:
$ aws s3 cp s3://xxin-package-af-south-1/cm6/x86_64/cloudera-manager-daemons-6.3.1-1466458.el7.x86_64.rpm /tmp
download failed: s3://xxin-package-af-south-1/cm6/x86_64/cloudera-manager-daemons-6.3.1-1466458.el7.x86_64.rpm to ../../tmp/cloudera-manager-daemons-6.3.1-1466458.el7.x86_64.rpm An error occurred (IllegalLocationConstraintException) when calling the GetObject operation: The af-south-1 location constraint is incompatible for the region specific endpoint this request was sent to.
If using "--region " override default one, it works.
$ aws s3 cp s3://xxin-package-af-south-1/cm6/x86_64/cloudera-manager-daemons-6.3.1-1466458.el7.x86_64.rpm /tmp --region=af-south-1
download: s3://xxin-package-af-south-1/cm6/x86_64/cloudera-manager-daemons-6.3.1-1466458.el7.x86_64.rpm to ../../tmp/cloudera-manager-daemons-6.3.1-1466458.el7.x86_64.rpm

Hi @xinlaoda
The cause of your failure is because you deployed the solution in ap-southeast-1 and when this tool assume the region of the bucket is ap-southeast-1.
We can't support the deployment directly in af-south-1 or me-south-1 for some reason.
However, you can still use this solution to replicate data from those two regions to China regions.  The suggestion is that you can deploy this tool in China regions directly and set the source region as those two.  If you have some issues deploying data replication hub in China regions like you don't have a ICP licensed domain name etc, you can directly deploy this plugin (follow the readme of this repo) instead.
Hope this clarifies, Thanks for using this solution.

Two issues & comments:

If I deploy it in CN region, then I guess it can not automatically trigger data replication worker(Lambda) when a S3 object CREATE in HK or other regions. It just can leverage ECS-docker checking the difference each 1 hour by default. Currently, the customer want to replicate the S3 objects into CN region ASAP, and must be completed 1G-size object in 30 minutes.
The S3 objects will be created in 6 WW regions in my case, include eu-, sa-, af-, me-, ap-, but from my test, only af-south-1 and me-south-1 happen error when deploying this hub in HK region, so I think fixing it is reasonable.

make sense. we will upgrade to support af-south-1 and me-south-1 regions.


Music Profiles Example

Hi everyone!
This is an initial implementation for the example of #23.
It also contains an additional example -Label Propagation- which is used as the community detection algorithm for the last step.
For the sake of the example I have used a made-up toy dataset, but I'm planning to test this with the echo nest dataset on a cluster.
Comments are welcome!
-V.

@ktzoumas test

Concerning the LabelPropagation algorithm: This one does not exploit the delta iteration behavior, because it always sets a new label, without checking if it is any different than the previous one.
Also: Is it guaranteed to converge? Or can there be a corner case where the most frequent neighbor label oscillates between two groups of vertices.
When you change it to exploit delta iteration behavior: This may have tricky implications on the "select most frequent neighbor label" strategy, as you may not see every neighbor in later steps (when they converged and do not send their label anymore).

The label propagation implementation is actually quite simplified :)
The original algorithm (see paper) is guaranteed to converge, but has 2 important differences: (a) initially every node has a different label and (b) a way to break ties needs to be defined.
Regarding the delta behavior: In the general case, the "most-frequent" operator is not incremental. For using a delta iteration, we should store something like a map of all previously seen labels with frequencies as the vertex value and then increase/decrease these frequencies, when only receiving messages from changed neighbors. The tricky part is that maintaining this state might be more expensive than using a bulk iteration.
In fact, this was one of the algorithms I had chosen in order to show the need for dependency iterations (only retrieve neighbor values if at least one of them has changed value). In some experiments I had run (maybe 4-5 months ago?) this was better than bulk and delta, but it also depends on the graph structure.
In any case, I would propose the following: I will change the implementation to make it follow the description of the algorithm from the paper to guarantee convergence, but not use the delta version for the moment. I think this is fair enough for an example ;)
Later, we can experiment a bit and design an optimized version for the graph library. What do you think?

Regarding the Label Propagation: sounds good

This is a very nice start :-) Two things came to my mind while reading this code:

All functions are defined somewhere else as inner classes. While that was previously necessary because of the non-serializable closure, the closure cleaning should solve this. The code is easier to read with anonymous inner classes, because you do not have to jump between function call and definition all the time. On the other hand, it introduces a hard requirement that closure cleaning is activated. Users that de-activate it on the environment (for whatever reason) will have problems.

Maybe the part about connected users could be extended a bit. Right now, everyone who ever shared a song is connected. Is everybody connected since Gangnam style? Maybe it makes sense to define it a bit different, a number connections above a the mean by some variance or so.

Thanks for all the feedback!
(1) I actually prefer the inner classes approach for the examples. If the names of the classes are descriptive enough and there are comments, I think it makes it much easier to quickly get an idea of what is happening. Also, I think it's easier to show how to use the gelly methods ;)
(2) This part can be extended a lot and I do have plans to do so :) We could have a threshold of how many common songs make two users connected, take into account the playcounts of each song, define a max number of neighbors per user, etc.


Add ArangoDB adapter

---
Want to back this issue? **[Post a bounty on it!](https://www.bountysource.com/issues/5782573-add-arangodb-adapter?utm_campaign=plugin&utm_content=tracker%2F155789&utm_medium=issues&utm_source=github)** We accept bounties via [Bountysource](https://www.bountysource.com/?utm_campaign=plugin&utm_content=tracker%2F155789&utm_medium=issues&utm_source=github).

we can use https://github.com/triAGENS/ashikawa-core as most popular ruby driver for arangodb


Support to Intel NPU by Intel NPU Acceleration Library

Should be great to add support to the new and future Intel Neural Processing Units
There is already a library for this https://github.com/intel/intel-npu-acceleration-library and i.e. for Phi-3 is great.
I am sure that NPUs will be everywhere, and they will be a viable alternative to CUDA and Nvidia GPUs, imho.

Any progress on this? ;)

I just got new laptop - ASUS Zenbook S 14 with Intel Core Ultra 7 258V and I was expecting Ollama will use it's NPU by default, so I was surprised it's not using NPU at all. I would also like to know if there is any progress on this, because using CPU only when there is 47 TOPS NPU is just sad.


arch: renesas: Author Gregory Nutt: update licenses to Apache

Summary
Gregory Nutt has submitted the SGA and we can migrate the licenses to Apache.
Impact
NONE
Testing
NONE

this one finished


guest user automaically created why?? and strategy to delete?

Is there any strategy to remove guest users to get stats about product and after a while to delete these guest users automatically??? or should we remove manually??

You can write a simple script for a simple background job to delete old guest users

Ok thanks great work.


Create 0000-01-02-Retrowrld.md

I have created a branch, created a file and made a commit, and opened a pull request.

Add Retrowrld's file

created a branch, created a file and made a commit, and opened a pull request


Non-encoded angle brackets

In the section Iterable parameters template parameters of IIterable use non-escaped angle brackets, as seen in the page source:

In some cases, the object that you have may actually implement the IIterable that you want. For example, the IVectorView<StorageFile> produced by FileOpenPicker.PickMultipleFilesAsync implements IIterable<StorageFile>. But it also implements IIterable<IStorageItem>; you just have to ask for it explicitly.

which renders them invisible:

In some cases, the object that you have may actually implement the IIterable that you want. For example, the IVectorView produced by FileOpenPicker.PickMultipleFilesAsync implements IIterable. But it also implements IIterable; you just have to ask for it explicitly.

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 6d6f6d3b-a97d-3660-fde8-cebf73ef7968
Version Independent ID: 8ff1309e-962a-d21e-7936-d2038c5839de
Content: Passing parameters into the ABI boundary - UWP applications
Content Source: windows-apps-src/cpp-and-winrt-apis/pass-parms-to-abi.md
Product: uwp
Technology: platform
GitHub Login: @stevewhims
Microsoft Alias: stwhi

Thanks, @paszklar! I have a fix for this in the publishing pipeline.
-Steve


feat: add a global debug flag

Added a global flag —debug  that sets the logging level to debug and passes the global flag —debug to Helm through subcommands’ —args. See: https://github.com/roboll/helmfile/issues/1104

Helm accepts the redundancy of the global flag --debug
argparser.GetArgs gets rid of the redundancy which seems to be used to parse all —args
what do you think about adding an Args field to state.ReleaseSpec ?
what about adding a Debug (as we do for —atomic and —wait e.g.) into state.HelmSpec state.ReleaseSpec for more granularity ?
sth still prevents the debug output from being displayed into stdout
tests

what do you think about adding an Args field to state.ReleaseSpec ?

Big no-no! I'm even wanting to deprecate --args. It's really a mess because we can't define which args should be passed to which helm commands.

what about adding a Debug (as we do for —atomic and —wait e.g.) into state.HelmSpec state.ReleaseSpec for more granularity ?

Sounds not bad, but what's the exact use-case? 🤔

@machine424 Anyway, I believe the primary goal of this PR - adding --debug to helmfile and its implementation - looks GREAT.
So can we just merge this and discuss about other bullet points in separate issues.
Would that be great for you as well?


Update Install Manifests For Release v0.18.0

/hold
This should not be merged until after the v0.18.0 release is officially available.

/approve


Please make the player buttons work

Problem
Create functionality for all buttons in player.tsx, including shuffle, previous, pause / play, next, repeat.
Suggested Solution
Get to it!
Alternatives
Previous shuffle algorithm is not efficient. Perhaps start with working on a more efficient algo for managing the onShuffle functionality  and shuffle state.
Additional Context
Creating this issue to also test GitHub Projects / Project Management view.

I can do some work on it within a month. I think...


Get InstantiationError

I've started getting this error:
java.lang.InstantiationError: Fatal execution error, caused by com.typesafe.scalalogging.Logger (Logger.scala:31)

I've tried this with 3.0.0, 3.1.0 and 3.2.0-SNAPSHOT. It consistently happens in one project that uses scala-logging but consistently does not happen in another project that uses exactly the same version of scala-logging. I've been scratching my head on this for a while now and thought I'd ask for help because it is not obvious to me how my compilation can yield the Logger class as being interpreted as an interface (trait).
I might be able to come up with a test case if that is needed, but first this is just an inquiry to see if someone else has run into this problem and knows how to fix it.

And .. just after I entered this I had the idea that it might be my class path. I tracked it down to the inclusion of livestream/scredis which includes scala-logging 2.1.2 in which the Logger class is a trait. Removal of livestream/scredis (woefully out of date) solved the problem.
Sorry to have bothered you with this.


multiprocessing: break down the main scan loop

Some of the architectural design decisions:
Decision 1
By default when creating a process - it gets created in spawn start method. But, as mentioned in the Python docs here, it is rather slow.

Starting a process using this method is rather slow compared to using fork or forkserver.

So, should we have separate start methods depending on the machine on which we run our tool? (This could have some impact, but would have to test to exactly quantify the values).
Some questions to help answer these questions:

Support for all 3 types of systems?
On which platform would our tool be running most of the time?

Decision 2
We have to break down the main scan loop into several atomic components like - get_project_list, crawl_client, and others.

[ ] I'll propose the design in a few hours, then we can have a discussion regarding this.

Decision 3
As discussed with @ZetaTwo, we might sometimes require to run some service requests before another (not as of now).
So, should we group the requests from the beginning and have them run as a group?
Decision 4
What should we go with multiprocessing.Process or concurrent.futures.ProcessPoolExecutor?
Differences: concurrent.futures.ProcessPoolExecutor handles everything for us like locks and process scheduling and is much safer. Whereas, multiprocessing.Process also handles everything for us like locks and process scheduling but provides optional control over things like locks, queues, and Managers. (this level of control is not needed for us as of now)

Hmm, I would go with multithreading for GCP resource crawler (e.g. use multiprocessing.pool.ThreadPool and concurrent.futures.ThreadPoolExecutor). Doing fork/spinning up new process for each request/set of requests might be expensive. I'd do actual multiprocessing per each GCP project and/or service account key where time spent on spinning up new process/forking is negligible comparing to scanning time. I think having one solution for all OSes will make maintenance and implementation easier.

Meeting Notes for 10/07/2023:
Decision 1
We would go with the default approach and support for all 3 types of systems. The primary reason is that the IO tasks are in terms of seconds and optimizing it using fork would optimize it in terms of milliseconds (which is negligible in comparison).
Decision 2
Discussion on further PRs and Issues. But a starting point would be paralleling Storage Bucket.
Decision 3
The projects list needs to be queried first. So, instead of going with groups and handling them, we can make an exception and query the projects list outside the loop.
Decision 4
Concurrent.futures.ProcessPoolExecutor is the way to go.

completed with PR #265 and #269
closing


⚠ ClamAV has degraded performance

In 873bf2d, ClamAV (https://spamassassin.apache.org/) experienced degraded performance:

HTTP code: 200
Response time: 191 ms

Resolved: ClamAV performance has improved in 2e613dd.


Configure CSS Folder Path

Is there a way we could configure the CSS path since Laravel 5.7 dropped the assets folder under resources?
Also, thank you so much for updating this project.

Nevermind, I am so foolish. Just updated my link  to ../../css/emails/foundation.min.css


Destructuring causes error for null/undefined properties

The following code:
interface Foo {
    x: number;
}

interface Bar {
    foo?: Foo;
}

function test( { foo: { x } }: Bar ) {
    alert( x );
}

test( {} ); // TypeError: Cannot read property 'x' of undefined

transpiles to:
function test(_a) {
    var x = _a.foo.x;
    alert(x);
}

instead of the (arguably) preferable:
function test(_a) {
    var x;
    if (_a.foo) x = _a.foo.x;
    alert(x);
}

The transpiled code does not check for the presence of optional property foo in the Bar interface.  This leads to an error at invocation.
I can see three possible solutions:

Always check for member existence when transpiling destructuring statements.
Check for member existence only when an element is optional in the interface or type declaration.
New syntax for destructuring that can indicate members should be checked.

E.g.
function test( { foo?: { x } }: Bar ) {}

This is just the ES6 destructuring behavior; we don't use type system data to change the runtime behavior.
That said, it's a bad idea to use a property of an optional property as part of a destructuring, and we should probably consider this an error.

I agree that it should be an error if not handled elsewhere.
Destructuring assignment is a great way to clear out boilerplate code, which makes it easier to focus on domain-specific logic.  It feels crippled without support for optional parameters (which are a TypeScript feature, not an ES feature).
I feel like if we extend destructuring with optional annotations - in a manner entirely consistent with conditional function parameters - it greatly enhances the utility and applicability of destructuring.
Strawman:
interface AjaxOptions {
	timeout?: number,
	onComplete?: () => void;
	onSuccess?: () => void;
	onError?: () => void;
}

type AjaxParams = { url: string, method?: string, body?: string, options?: AjaxOptions };

function send( { url, method = 'GET', data?, options?: { timeout, onComplete, onSuccess, onError } }: AjaxParams ) {
	// do stuff
}

The code in the body of the example can now check whether timeout is defined without worrying whether options is defined.  This reduces developer effort, makes the code less error prone (especially if refactoring a property into or out of the options object), and clarifies the function by removing boilerplate code.
Basically, use the same ? syntax optional parameters use, but for properties.  This cascades downward, so child properties of optional properties are themselves implicitly optional.  (Or make it an error to have a non-optional descendant of an optional property.)
Using the destructuring assignment expression itself here instead of the metadata means that you must opt-in to this behavior.  It is not inferred from the type definition.

Accepting PRs. Any property destructuring must be non-optional or have a default

@RyanCavanaugh Just to be clear, are you accepting PRs to make { foo: { x } }: Bar (where Bar.foo is optional) an error, or to add support for { foo?: { x } }: Bar with the emit @errorx666 is asking for?

I already said about this problem in #6125.

we are accepting PRs for flagging destructuring into a optional property as an error. We still do not want to do any type directed emit.

This implies that in cases where I know (because of program context) that the optional property is present in my object, I won't be able to destructure?
Even though that would be valid, working JS?
interface X { a?: { b: number } };
let x: X;

if (x.a) { // or some other domain rule that guarantees me 'a' is defined
  let { a: { b } } = x; // error: "a" is optional ?
}

I don't have any use for such code, just pointing out the possible implications if it becomes an error.

a should be optional in this context with https://github.com/Microsoft/TypeScript/issues/2388

@mhegazy Yes but this was just for illustration.
You could know that an optional member is not null because of some domain-specific knowledge.
In fact that's the whole purpose of x!.
So if we forbid destructing an optional member, should we be able to do this?
let { a!: { b } } = x;

Thinking about it, I guess it makes sense.
TS is about preventing errors and destructuring from null or undefined throws a runtime error so it should be caught by TS.
With the new work on null types and data flow analysis, one should be allowed to destructure an optional member that's proven to be present.
And if the program logic implies it is present I should be able to indicate this to TS with a bang.

I'd be concerned about throwing a compile error when trying to destructure from an optional property.
A common case for me is destructuring a react components state object. In my state interface I have all properties marked as optional so that I can call this.setState({ onlyOnePropertyOfMany: 'value' }). But I, as the developer, now that when I retrieve the state object all the properties are there, so I like to start my render function with const { onlyOnePropertyOfMany, anotherPropertyWhichIsAnObject: { foo, bar } } = this.state;. I also have optional properties on interfaces for objects I get from and pass to the API. I know that when I get the object it is fully populated, but when sending a PATCH I want to be able to send just the dirty fields while still having a type check that I'm not including any fields not on the object.
Even with all optional properties these interfaces provide value by making sure I spell my properties right with type checking... but this compile error would break some of my code.

@TheTedAdams I believe setState was the use-case for #4889.  If the property is optional, then it can be void, and so an error can (and likely will) arise if used with destructuring without a default value.  I would argue that, if the property is truly optional, then you should be forced to specify a default, and the property is not truly optional, then it shouldn't be marked as such.
See also the suggestion for ! indicating that you have situational knowledge that an optional parameter is not void.

These are good points and lead me to believe we should make this change contingent on #7355. I'll reraise for discussion.

I think you have the problem when destructuring arrays.
const [a, b, c] = ''.split('')

TypeScript will consider all three variables to be string while they should be string | undefined (because, they are totally undefined here)

@pauldijou Pretty sure that's unrelated to this issue (which is about nested destructuring that can cause a runtime error). See https://github.com/Microsoft/TypeScript/issues/9235.

The sample code in this issue correctly has a compile error now. Is this resolved?

@andy-ms can we have a syntax to indicate something nullable is actually set and so the error should be ignored? See my previous comment https://github.com/Microsoft/TypeScript/issues/6784#issuecomment-200602923

what about doing it same way as c# ?. operator: some random blog with explanation
var property  = some?.nested?.property?.name;
// with is equivallent to:
var property = some == null ? null
    : some.nested == null ? null
        : some.nested.property == null ? null
            : some.nested.property.name;

in ts this would be current syntax
var some: { nested?: { property?: { name: string } } } = ...;
var { nested: { property: { name } } } = some; // name has type string | undefined

transpiled into:
var property = ['nested', 'property', 'name'].reduce((obj, prop) => obj && obj[prop], some);

not sure how to handle multiple nested variables ...

What's the current status of this?

const [a, b] : string[] = [];
const d: string = b.toUpperCase();

In strict-mode should be invalid. Why only at runtime I get aTypeError: Cannot read property 'toUpperCase' of undefined ?
Thought in strict-mode it is guaranteed that values are not null implicitly :(((

This code will dramatically fail because destructuring an undefined value seems to be allowed:
const f1 = (something: string): { foo: string } | undefined => {
  return something == 'foo' ? { foo: 'bar' } : undefined;
};

const { foo } = f1('bar');

Shouldn't TypeScript throw an error if it's the case? Happy to put my hands in TS' code if we have agreement on this expected behaviour :)

@sroze it does error if you have strict null checks on.  When you run in sloppy mode, it behaves as expected and does not error.

Not sure if this is exactly related, but this should be a compile-time error:
type Foo = {a: string}
const bar: Foo = {a: 'baz'}
const {a, b} = bar
console.log(b) // undefined

Ran into the same problem. Any fixes?


remaining material flags and blending modes

I have encountered a problem with material errors. When will the remaining materials that require shaders be completed?

What materials require custom shaders?


Missing Readme

Hi, this seems to be a very small starting point for developing a sunton ESP32-3248S035c device for platformio (I hope) - I love it. Only missing, how to get it integrated in platformio? Is there a platformio.ini file? What do I need to do to compile your sources?
Next would be to ask, where&how to add own GUI elements? Is there a 'Hello world' available?
It would be great, if you could publish a Readme in git. Many thanks in advance MK_Munich

Hi, this project has been under active development the last few weeks and has changed quite a bit since inception. It seems mostly stable at this point — I'm not experiencing any bugs so far. I will gladly add a README.md with usage details and close this thread once completed.
Note that it is currently only being used with Arduino. I haven't tested it with PlatformIO, though it should integrate very easily because it has minimal 3rd-party dependencies. I will first work on getting a draft README written per existing implementation. Then I can try to integrate with PIO and will update README accordingly.

@MkMunich Still haven't made time to write up a proper README, but I wanted to address your principal question regarding PlatformIO integration:
I've added a pair of example projects here: https://github.com/ardnew/ESP32-3248S035/tree/main/examples. One for Arduino, and one for PlatformIO. Both of these examples are identical in behavior, the only difference is toolchain configuration.
There is a platformio.ini file included (with comments), and the example's source file main.cpp (with comments) shows how to create a basic GUI and access the other hardware peripherals on the board.
Please test the PlatformIO example and let me know what works and what doesn't. I quite liked this PlatformIO approach, and may begin using it more frequently.
Will follow up once more when I get the README written.


Need to think about a specific strategy for this.

@cmilloy You are well situated to think of how this could work in a way that would be most helpful.  Let's use this comment stream as a sounding board for proposals/ideas.   @wkf I know you suggested that blackhole exile could simply be temporary; after a configurable period of time, we start sending a black hole host tasks again as a trial run.

I'm not sold on this. I think if a host is blackholed, it should be
disabled until someone, or something, addresses the issues. We don't want
to overload satellite with concerns .
On Thu, Feb 25, 2016 at 2:26 PM Matthew Forsyth<EMAIL_ADDRESS>wrote:

@cmilloy https://github.com/cmilloy You are well situated to think of
how this could work in a way that would be most helpful. Let's use this
comment stream as a sounding board for proposals/ideas. @wkf
https://github.com/wkf I know you suggested that blackhole exile could
simply be temporary; after a configurable period of time, we start sending
a black hole host tasks again as a trial run.
—
Reply to this email directly or view it on GitHub
https://github.com/twosigma/satellite/issues/58#issuecomment-188941422.

After socializing this internally we have come up with a few ideas for implementation to start:

As you noted, being able to set an expiration when a host is black holed would be one. It would also be nice to have some way to increment the black hole duration upon recurrence.
Adding a test/canary job that can still target the de-whitelisted hosts and will re-whitelist if the job is successful
Allow some arbitrary command to be run on the slave after de-whitelisting the host. The command may try to remediate obvious problems and reboot the host and then re-whitelist after reboot (with a configurable # of retries). Perhaps this is decoupled from de-whitelisting and takes the form of a completely separate comet each node runs to see if it has been de-whitelisted?

@tnn1t1s We can certainly discuss further. This primarily came from the prediction that some issues which cause mesos task failures will not originate inside the cluster (such as those caused by infrastructure). They will occur and be fixed independently of the support team(s) operating the cluster. The concern is that without automatic re-whitelisting such outages will cause unnecessary work and dependency on the support team(s) who are operating the cluster to resume service to users.
I think it makes sense for satellite to have a facility for automatic re-whitelisting which is configurable enough to apply to multiple use-cases. If we decide not to use it, that's OK too.

@corey - i think black hole host detection only occurs on 'task-lost',
not 'task-failed'. If that's correct, massive job failures due to
downstream dependencies e.g. my database is down, should not trigger this.
Instead, it would catch events like, 'this host can't start jobs', 'this
host has a broken mesos-agent'. If we're worried, the black-hole host
detector doesn't actually have to take the action of adding to blacklist.
For starters, we can just start notifying on this event.
That said, I'd like to keep this very simple and not overload satellite
with concerns. A few of your suggestions require run-on-host semantics that
don't exist in a Mesos world. We'd rather not try to invent that here.
As an alternative, I can imagine a configurable callback that is triggered
on blacklist events (regardless of 'how' e.g. black hole host-detector, or,
some other check). This callback could call arbitrary code, of which
examples may be 'reboot host and remove from whitelist'.
Maybe, a process outside of Satellite can monitor the blacklist and try
remedial action as per your suggestion, but I wouldn't want to try to add
that to Satellite and if it were my ops team, i wouldn't use it. This could
be left as an opinionated effort by individual ops teams.
On Fri, Feb 26, 2016 at 4:40 PM, cmilloy<EMAIL_ADDRESS>wrote:

After socializing this internally we have come up with a few ideas for
implementation to start:

As you noted, being able to set an expiration when a host is black
holed would be one. It would also be nice to have some way to increment the
black hole duration upon recurrence.
Adding a test/canary job that can still target the de-whitelisted
hosts and will re-whitelist if the job is successful
Allow some arbitrary command to be run on the slave after
de-whitelisting the host. The command may try to remediate obvious problems
and reboot the host and then re-whitelist after reboot (with a configurable

of retries). Perhaps this is decoupled from de-whitelisting and takes the
form of a completely separate comet each node runs to see if it has been
de-whitelisted?
@tnn1t1s https://github.com/tnn1t1s We can certainly discuss further.
This primarily came from the prediction that some issues which cause mesos
task failures will not originate inside the cluster (such as those caused
by infrastructure). They will occur and be fixed independently of the
support team(s) operating the cluster. The concern is that without
automatic re-whitelisting such outages will cause unnecessary work and
dependency on the support team(s) who are operating the cluster to resume
service to users.
I think it makes sense for satellite to have a facility for automatic
re-whitelisting which is configurable enough to apply to multiple
use-cases. If we decide not to use it, that's OK too.
—
Reply to this email directly or view it on GitHub
https://github.com/twosigma/satellite/issues/58#issuecomment-189491828.

@tnn1t1s the Black hole detector does actually care about failed tasks (not lost tasks).
I really like the idea of, as a first step, just having the black hole detector alert admins, rather than removing the host from the whitelist.  That has some advantages:

It lets us introduce black hole detection in a way where it can only help, not harm, thus allowing the maintenance team (who are anxious about the idea of it possibly causing more work than it saves) to see when it kicks in before having to trust it to actually take hosts out of the rotation.
It's very clear functionality, and allows us to avoid (for now) what promises to be a lengthly negotiation for the functionality of both both this issue and https://github.com/twosigma/satellite/issues/57.
I believe it will basically be a one-line change to the config to make this change, meaning that we don't have to divert resources from Cook right now.

This seems like the way to go. We can alert and collect the data and build
confidence and understanding of the behavior before trying to design a
solution
On Sat, Feb 27, 2016 at 6:54 AM Matthew Forsyth<EMAIL_ADDRESS>wrote:

@tnn1t1s https://github.com/tnn1t1s the Black hole detector does
actually care about failed tasks (not lost tasks).
I really like the idea of, as a first step, just having the black hole
detector alert admins, rather than removing the host from the whitelist.
That has some advantages:

It lets us introduce black hole detection in a way where it can only
help, not harm, thus allowing the maintenance team (who are anxious about
the idea of it possibly causing more work than it saves) to see when it
kicks in before having to trust it to actually take hosts out of the
rotation.
It's very clear functionality, and allows us to avoid (for now) what
promises to be a lengthly negotiation for the functionality of both both
this issue and #57 https://github.com/twosigma/satellite/issues/57.
I believe it will basically be a one-line change to the config to make
this change, meaning that we don't have to divert resources from Cook right
now.

—
Reply to this email directly or view it on GitHub
https://github.com/twosigma/satellite/issues/58#issuecomment-189621863.


chore: remove mongoose.Promise

Mongoose 5 (onwards) uses native promises by default, so no longer need to default mongoose.Promise, see https://masteringjs.io/tutorials/mongoose/promise

Thank you!


POI Amenities search/filter

Ryan updating boolean columns in poi_info table to cover all filters.
Need to add tags (or whatever) for alt versions of filters. Example:

A search for "running" triggers the hiking filter.

Ryan will provide alt versions to Josh.

Version of this implemented based on @versatilehuman spreadsheet

Looks good. How are the popular searches currently ordered? What's the easiest way to prioritize the order?

Popular searches are ordered manually at the moment. I plan to make that something better.
Let me know if you want to adjust the popular search order now for launch.

@shua123 Here's the order for launch:
Hiking / Walking / Running
Biking
Nature Center
Camping
Picnic / Event Space
Volunteering
Dogs (with leash only)
Dog Park
Canoeing / Kayaking / Boating
Swimming
Cross-Country Skiing
Sledding

Reordered https://github.com/smartchicago/trailsy/commit/b1722aae9f0003f274e6e157541767dc5d41a79f

@shua123 Looks like we lost the seasonality. If we can't dynamically add that right now, can you remove:
Swimming
Cross-Country Skiing
Sledding

Yeah its manual for now. I've hidden those three from the popular section.

@shua123 Can you alpha-order the "Everything" -- these got tagged on the end: Swimming, Cross-Country Skiing, Sledding

Fixed on gh-pages.

Looks good.


4.x - Strict Types

Strict typing added everywhere.
This effectively closes #2596

Coverage decreased (-0.002%) to 98.485% when pulling 04d73b7507d175a09212d213afb46239d88d9a16 on l0gicgate:4.x-StrictTypes into 75666e3a7985ff7d4f7ac46b56645d55934ff5db on slimphp:4.x.


vm clone goes to default datastore

line 458 of vsphere_vm_clone.rb should be
rspec = RbVmomi::VIM.VirtualMachineRelocateSpec(datastore: find_datastore(get_config(:datastore)))
instead of
rspec.datastore = find_datastore(get_config(:datastore))
however if thin_provision is set then the line on 472 clobbers this
rspec = RbVmomi::VIM.VirtualMachineRelocateSpec(transform: :sparse, pool: find_pool(get_config(:resource_pool)))
It appears every 'rspec = RbVmomi::VIM.VirtualMachineRelocateSpec(' line overwrites the previous declaration thoughout the whole generate_clone_spec definition.
Pete.

Interesting find, thanks Pete.
I understand the second example -- we should set transform and pool on the existing rspec instead of creating a new one. However I don't follow the first statement that we should create a new rspec instead of setting the datastore attribute on the existing one. Can you elaborate, please?

For the clone to work it needs to have the datastore destination set within the VIM VM RelocateSpec (with vsphere version 5.5 at least).  Have tested this code change and it worked when other rspec issues are fixed - I didn't suggest my fixes as they were hacks.
http://pubs.vmware.com/vsphere-55/index.jsp?topic=%2Fcom.vmware.wssdk.apiref.doc%2Fvim.vm.RelocateSpec.html

Having the same issue. Both --datastore and --datastorecluster ends up in the same DS as the template instead of specified or the most free in DSC. I am using --thin-provision.

Hi, thanks for the confirmation. I will try and reproduce this locally so I can put together a fix.

--datastore appears to be working well on v1.2.5 with Linux VM deploys, but not Windows. With verbose logging it shows the correct datastore in both scenarios. Tested using vSphere 6.0.
I've had much better luck with the source being a powered off VM, and not a template.

Ah, that would explain why I couldn't reproduce it.

I confirm this case has been reproduced with Windows guest with 5.1 and 5.5 vSphere versions. No idea on Linux guest, also I am no longer have access to that environment so cannot test any further.

Is there any update about this issue?
I had same issue on VSphere 6.0 when trying to clone windows guest from template to another datastore.

Hi, this hasn't been fixed. We've found a few Windows problems recently so I'm going to try and get an environment set up to duplicate them in hopes of fixing. Thanks for the report of thin provisioning.

I have seen a similar issue if I issue a clone command but do not specify a destination datastore.  It looks like it's trying to create the VM on the default datastore instead of the source datastore and failing.  I get the following error:
ERROR: RbVmomi::Fault: CannotAccessVmConfig: Unable to access the virtual machine configuration: Unable to access file [DS1] Ubuntu/Ubuntu.vmtx
However, if I specify the target datastore and ensure it's the same where the source template for VM resides then all is well.
Perhaps:

You should clone locally and then s-Vmotion
You should default to target the same datastore as the source by default
There should be an error check for illegal storage configuration

LMK if you want me to separate these into separate issues.


SQL Log Shipping Windows -> Linux

Hi, it's possible to configure log shipping in a scenario where the primary server is running SQL Server 2017 on an Windows Server 2016, and the secondary server is running an Linux distro?

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: ae3bc9b9-65f5-13bb-53c5-ed929a94b638
Version Independent ID: eccef86a-10ea-2bbb-ab1b-c530b3fb758c
Content: Configure log shipping for SQL Server on Linux - SQL Server
Content Source: docs/linux/sql-server-linux-use-log-shipping.md
Product: sql
Technology: linux
GitHub Login: @VanMSFT
Microsoft Alias: vanto

Hello @viniciuskoberwc! Thanks for submitting this issue. I'm currently looking into this.

Hi @viniciuskoberwc! Thanks for your patience. I confirmed with our Product Group that there's currently no issues with log shipping from Windows to Linux with SQL Server. If our documentation is not clear on the steps, here are 3rd party examples:
https://www.sqlservercentral.com/articles/logshipping-to-sql-server-on-linux
I hope that helps!