en-GB update

13-08

Resolved / Related Issues
Items resolved / related issues by this PR.

Closes #issue...
Related #issue...

Details of Changes
Add details of changes here.

Added...
Fixed...

Validation
How did you test these changes?

[ ] Built and ran the app
[ ] Tested the changes for accessibility

Screenshots (optional)
Add screenshots here.

my mistake, sorry


Sharp bits cond signature is wrong

Sharp bits doc uses cond as lax.cond(pred, true_operand, true_fun, false_operand, false_fun)
but cond's docs say it's actually jax.lax.cond(pred, true_fun, false_fun, operand)

Thanks - that's an outdated signature. I'll make sure it gets fixed


Problems with the config - How to train more epochs

I seem to be having issues with the config, as said in a previous issue. Is there a way to train more epochs?

Yes, of course, it's the "actual epoch" line in the config:
"train" : {
"actual_epoch":         5,
Do you think the name is confusing?

Yes, I feel like the name is a little bit confusing. Maybe something like number_epochs would make more sense. Thank you for everything, with more epochs I am managing to recognize things.


Set idle timer disabled when waiting for a live game to start

Before this change the app would let the device go to sleep while waiting for a new game. Then when you unlock the screen, the app reconnects and your game request is gone and you have to request a new one. And the idle timer was only being disabled when you open the live game. Now the idle timer is disabled whenever you have a live game or an outbound live challenge.
I had to make other changes to get this to build with Xcode 14.3.1. There were places where if let x = y was being used where y wasn't an optional, and the newer Swift compiler doesn't allow that. Let me know if you want me to remove those changes from this PR or separate them into another PR.
I ran this in the simulator to confirm that the idle timer gets disabled when you request a game. But it'd be worth testing this on your phone before shipping it.

Hi @raylillywhite,
Thank you very much for the pull request, and sorry for the late reply, somehow I did not see any notification about this one.


[WIP] Migration from Antd 3.* to Antd 4.9

Motivation and context
Current Antd version is outdated. To get new features and solve some bugs (that have been solved in antd 4.*) we need to migrate to the latest version.
Resolve #1703
How has this been tested?
Manual testing, cypress tests
Checklist

[x] I submit my changes into the develop branch
[ ] I have added description of my changes into CHANGELOG file
[ ] I have updated the documentation accordingly
[ ] I have added tests to cover my changes
[ ] I have linked related issues (read github docs)
[ ] I have increased versions of npm packages if it is necessary (cvat-canvas,
cvat-core, cvat-data and cvat-ui)

License

[x] I submit my code changes under the same MIT License that covers the project.
Feel free to contact the maintainers if that's a concern.
[x] I have updated the license header for each file (see an example below)

# Copyright (C) 2020 Intel Corporation
#
# SPDX-License-Identifier: MIT

There aren't any features that have been changed in this PR. All the changes are related with changing API of Antd library.
When testing, I would recommend pay attention to forms (especially create task, label constructor).
One more way to test is to compare page by page with cvat.org.

@bsekachev , if you find here any problems which are not covered by tests, it is a good idea to add such test cases.


Add devcontainer for building SK-LSP

Uses swiftlang/swift:nightly-6.0-jammy as a base image
Installs sqlite3, libsqlite3-dev, libncurses5-dev and python3.
Adds build arguments -Xcxx -I/usr/lib/swift -Xcxx -I/usr/lib/swift/Block
Includes swift extension

Thanks for the PR @adam-fowler. There is already a PR up to add a dev container to SourceKit-LSP, let’s iterate on that: https://github.com/apple/sourcekit-lsp/pull/916.
I would appreciate your feedback on that PR. I think the pieces that differ are

You run apt-get dist-uprgrade. I am curious if that’s a recommended thing to do, I don’t do it on Dockerfiles I run at home. Is there any reason to not stick with the distro that comes with the base swiftlang Docker image?
You set the following options, I’m not sure if they are necessary?

        "ghcr.io/devcontainers/features/common-utils:2": {
            "installZsh": "false",
            "username": "vscode",
            "userUid": "1000",
            "userGid": "1000",
            "upgradePackages": "false"
        },
        "ghcr.io/devcontainers/features/git:1": {
            "version": "os-provided",
            "ppa": "false"
        },

You set "seccomp=unconfined". Do you remember what that’s needed for?
You set "remoteUser": "vscode", is that needed?


emit a warning on a component/group page if a custom processor cannot process it

Feature Suggestion
So, when you have a custom processor and it is encountering an error and cannot process it further you want to display this on the component it self or on the owner page. It is currently possible to emit such an error/warning on the component page but only if the component was already registered. If it wasn't registered before then it is not possible to show this to the owner of the component.
Because you cannot show this on the component if it isn't registered, you'd like to emit this warning on the groups own page. But I don't think this is currently possible because the emit function takes in a location parameter and every group has the same location. So, I think you would be essentially showing this error on every groups page (at least for LDAP).
Possible Implementation
Not sure how an implementation could look like. But in my discussion with @benjdlambert this were hist thoughts:
'Just read through the original message again, I wonder if there is a use case for creating a shell component for things that fail processing for custom processors. Like we can be pretty sure that our processors that we provide should succeed otherwise things will break, but custom provided stuff maybe doesn't need to happen if we can still build some form of entity out of it, and be able to display those errors on an entity page
...
There's a question about wether this should be in the catalog processors or not, but I think we can talk about that in the ticket, I don't think right now that this warrants some form of checking service, and it could be that the processor could first warn, and then hard fail after a few weeks or something.'
Context
Basically when a custom processor encounters an error I want to notify the owner of that Component. Either by displaying a warning on the group or the components page.

Yep, definitely need this!
I could've sworn we already had an issue laying around that tracked this, but can't find it 😅

@Rugvip nice! Is this something the maintainers want to do themselves?

Totally agree we need/want this but it requires some exploration and finally a mapping on how and where different errors should be surfaced almost in a case by case bases to be able to come up with a good implementation, especially with new and unexperienced users in mind.
The tricky bit is how to surface some of these errors. Discovery processors for example where you automatically scan your org for new catalog-info files. Let's say one of the files are malformed and the entity does not show up, where should the user expect to find the error?

@jhaals Ideally you have some sort of error/tasklist/notification hub which displays the error you and/or parent ancestries have. This would be then displayed in the frontend for example, on the homepage. Obviously this is way bigger then what this issue describes. I guess what I am describing is more related to #639 , but maybe we can start small?

It's what we're thinking at a high level and it can be small/simple as a start but it's important that the trickier use cases that might require rearchitecting certain parts are taken into account.
I'm interpreting #639 more as a way of displaying arbitrary events from other systems in Backstage since kubernetes events are mentioned in the example. This is trickier as many of these "failed to process" cases might not have a user/group that the error can be tied to. For example a broken location does not have any of it. In that case it might make sense to somehow be able to find it by the URL. Discovery is perhaps the one to tackle first since the many of the others are simpler. The errors or processors probably need some identifier that make them possible to query for the user.

@jhaals @Rugvip , would it be possible to re-open this? I know the linked issue kind of handles a more general case, but this would be a good follow-on. Or as OP stated, could this could potentially start small before 639 is completed.


Friendly dev environment

Make it easier to hit the ground running with a development environment.
.rspec should never be checked in. This overrides ~/.rspec, which dev's may have configured to their taste.

Since the tests in this project take long to run, --fail-fast is a good default in my opinion.
Same thing with colored and formatted output.
You can still disable these behavior on the command line by running rspec --no-fail-fast and so on.

The issue is that those are YOUR opinions. If that's the way you want it to run, set the options that way in your ~/.rspec or a project-level .rspec that is not checked in. RSpec is made to work that way. You are enforcing your opinions on how to use/view RSpec output on others unnecessrily.


Proper curl invocation in Testing section

@brian-brazil for your review
The Basic Auth guide explains how to configure nginx to listen on localhost:12321,  but in the Testing section curl invocations are missing the port number.

Thanks!


Deploy on zkFair Mainnet

Chain Name
zkFair Mainnet
Chain ID
42766
RPC URL
https://rpc.zkfair.io
Block Explorer URL
https://scan.zkfair.io
Deployment Funds
Yes

Done, thanks!


Zoom link

Hello,
Could you provide a zoom link to the meeting so people can join?
Thanks

Can we get a zoom link to the meeting please?

Today's lesson will be uploaded as a recording, from next lesson there will be zoom links


Example of forwardRef usage

Thanks for the great tool.
Would you be able to share a brief example of how to pass a component as a child to the SortableKnob using React.forwardRef()?

Sure, here you go: https://codesandbox.io/s/react-easy-sort-custom-knob-demo-ij37h?file=/src/App.tsx
I'm also adding this to the Readme.

Thank you for your reply.
I was thinking that perhaps it would be possible not to have a wrapper div within the CustomKnob component, and pass on the ref directory to the DragIndicatorIcon instead.
const CustomKnob = React.forwardRef<HTMLDivElement, {}>((props, ref) => {
  const classes = useKnobStyles();
  return (
    <div ref={ref} className={classes.root}> { /* Referring to this line */ }
      <DragIndicatorIcon />
      <Typography variant="caption">drag me</Typography>
    </div>
  );
});

Yes this should be possible if the icon can hold a ref.


Shameless Plug

Hey! These kind of repos only pop up once a year, and they're very rarely maintained. I have a repo that accomplishes exactly the same thing as this repo, but it's built for the long haul. In fact, we even write articles explaining our code snippets.
It's just as easy to contribute to our repo, so consider sharing your code snippets with us: https://github.com/TheRenegadeCoder/sample-programs

hey we believe in diversity

Agreed! We use the Contributor Covenant Code of Conduct over at Sample Programs. But, how does that apply here?

this is not about sample programs we help newcomers to get started only! they can learn to contribute in more flexible repo and learn the way to more maintained repo

Agreed! Then, our repos have a lot in common.


RDK-29971: Thunder Messenger Restrictions

Reason for change: Add method "create" and modify the flow,
now if security enabled only apps that match the regex
will be allowed to join the room.
Test Procedure: See ticket
Risks: Medium
Signed-off-by: Nikita Poltorapavlo<EMAIL_ADDRESS>

Changes look good. We need to wait for Apps to update their code to call create before join().

#1121


Sync the callback API

Sync the callback API. on the new tf.keras API: on_train_batch_begin added, on_batch_begin and on_batch_end have new semantics.
Note created by @fchollet in the "Requests for contributions".

I am interested to work on this if anyone else has not started yet?!

No one replied or made a pull request yet, so it seems you're the first.


LC-462: stage conditions paradigm asserts that provided operator is valid

The Conditions constructor now requires the provided operator to be valid and throws a runtime exception otherwise. Since the condition object is created at validation time (before a run) this validates the conditions clauses "statically"

this test failed: StageTest.testProcessMultipleConditions
that's actually good
I believe it's because multipleConditions.conf has operator = "must not" which should now be illegal
this PR needs some dedicated test coverage for operator validation
also, we want to make sure that when someone runs lucille in validation mode, if there's an illegal operator in a stage condition, they still get useful output -- the validation error should say what's wrong


feat: allow providing custom runner per transform file thru codeshiftConfig

depends on:

https://github.com/CodeshiftCommunity/CodeshiftCommunity/pull/63

(base needs to be set to kiprasmel:patch-1 but cannot do that here),
and regardless, we need to merge it first, before this one.

example on how it could be used:

https://github.com/pipedrive/CodeshiftCommunity/pull/22

though note we might refactor into separate PRs, idk,
preferably would use directly from upstream (you).

fixes a lot of cases for us:

we have a postcss codemod that we want to run,
while still utilizing the @codeshift/cli.

though, i don't know if these changes will work
if we're using a remote package, will they?

we'll want to do some global pre-processing
on files before running our codemod.

though, there's still no way to provide the codemod
as a function instead of an import path to jscodeshift,
which will force us to do dependency injection
instead of just passing the pre-processed results
as an argument to a function.
this is where the considerations to fork jscodeshift
come into play again:

https://github.com/CodeshiftCommunity/CodeshiftCommunity/issues/67

would be great to review if possible @danieldelcore 🙏

Really interesting, could you give me some more background as to how this all fits together? As I understand it, instead of only being able to modify js / ts files you want to be able to provide a custom runner to begin to support other types of files like css?
Can you share an example codeshift.config with me?

@danieldelcore hey! yes, correct, we want to have independance from upstream (you) so that we don't need to wait to get some custom runner merged (sometimes it could be very specific even, and you might not even need it merged, and that's fine), while still utilizing your CLI w/o publishing our own, and this unlocks the door.
an example I already linked to -- https://github.com/pipedrive/CodeshiftCommunity/pull/22

codeshift.config.js: https://github.com/pipedrive/CodeshiftCommunity/blob/0f9fa7119abdc7afcd38022a7a235cf433be0030/community/%40pipedrive__convention-ui-react/src/codeshift.config.js
the custom runner, for postcss this time: https://github.com/pipedrive/CodeshiftCommunity/blob/0f9fa7119abdc7afcd38022a7a235cf433be0030/community/%40pipedrive__convention-ui-react/src/misc-utils/runPostcssCodemod.ts
& how we use the custom runner: https://github.com/pipedrive/CodeshiftCommunity/blob/0f9fa7119abdc7afcd38022a7a235cf433be0030/community/%40pipedrive__convention-ui-react/src/5.0.0/codemod.postcss.ts

and you can read on how to use the codemods (we have a simple wrapper run.js which by now the only unique functionality it has is shorthands.json.

https://github.com/pipedrive/CodeshiftCommunity/tree/fork/community/%40pipedrive__convention-ui-react#readme

you can try running the demo files. though they're all js, didn't add postcss ones because i lacked examples, but we tried & it worked just fine.

https://github.com/pipedrive/CodeshiftCommunity/tree/fork/community/%40pipedrive__convention-ui-react/src/5.0.0/demo

the only concern is -- will this work if we publish our npm package. i haven't had a chance to try that; i need to first extract into a separate repository.
wdyt? would be very useful.


Link to ponyfill explanation

https://ponyfill.com
I coined the term ponyfill, and was finally able to create a page for it.

ping @bfred-it


Kestrel & IIS Express StackOverflowException leading to access violation submitting empty form

Describe the bug
Since upgrading (although it may be a coincidence!) to Visual Studio 16.0 Preview 4, in an ASP.NET Core 2.2 project I'm working on I have a 100% reproducible issue with iisexpress.exe crashing with an access violation error each and every time that I submit (via plain html over http, no ajax) a particular form, but only if I do not populate any of the inputs. As soon as a single form field is filled out, the issue is avoided.
When this happens, the following is displayed in the output window:

The program '[76704] iisexpress.exe' has exited with code -1073741819 (0xc0000005) 'Access violation'.

The issue also exhibits when using the in-app kestrel hosting method as well, in which case slightly more information becomes available:
...
info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[1]
      Route matched with {action = "Charge", controller = "Payment"}. Executing action EasyRE.Controllers.PaymentController.Charge (EasyRE)

Process is terminating due to StackOverflowException.

C:\Program Files\dotnet\dotnet.exe (process 77712) exited with code -1073741819.

My first thought was that the validation code I'm using (newly implemented) is causing infinite recursion, avoided when a form field is populated. But that does not explain why the iisexpress host would crash and the exception would not be caught anywhere (even for debugging).
I attempted to debug the issue by launching the webapp then detaching all; then in a separate devenv instance I attached to the iisexpress.exe instance with native debugging enabled but even that does not catch the crash, it just quits on me (and the debugger).
(I'm not presuming that the StackOverflowException isn't my fault - I'm pretty sure it is. But why isn't the debugger catching the exception? I'm not using any COM or WIN32 interop or loading non-managed assemblies; which is why I am considering this to be a bug.)
Platform details:

Windows 10 17763 x64
.NET Core 2.2
ASP.NET Core 2.2.0 packages via nuget

I was able to use WinDBG to catch the exception and tracked it down to an infinite recursion in one of the properties of an object bound to an input box with asp-for=...
I still have the same question: shouldn't this be caught handled by the framework?

Thank you for filing this issue. In order for us to investigate this issue, please provide a minimalistic repro project that illustrates the problem.

@mkArtakMSFT it's literally this simple:
Index.cshtml:
@page
@model IndexModel
@{
    ViewData["Title"] = "Home page";
}

<form method="post">
    <input asp-for="Value1" />
</form>

Index.cshtml.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;

namespace WebOverflow.Pages
{
    public class IndexModel : PageModel
    {
        string _value1;
        [BindProperty]
        public string Value1
        {
            get => _value1;
            set => Value2 = value;
        }

        string _value2;
        [BindProperty]
        public string Value2
        {
            get => _value2;
            set => Value1 = value;
        }

        public void OnGet()
        {
        }

        public void OnPost()
        {
        }
    }
}

Type something in the text box and press Enter to reproduce.

I still have the same question: shouldn't this be caught handled by the framework?

The framework can't catch a StackOverflowException (see: https://docs.microsoft.com/en-us/dotnet/api/system.stackoverflowexception?redirectedfrom=MSDN&view=netframework-4.7.2#remarks), as hitting a StackOverflowExecption is considered an unrecoverable state. At that point, the program is in an unknown state and the correct action is to crash the process as soon as possible. So the Access Violation you are seeing with IISExpress is probably a side effect of a stack overflow occurring.
Fundamentally, debugging StackOverflows is difficult in C#, as you don't have a callstack printed. Here is a thread on StackOverflow (the website) that is pretty much the same problem you had: https://stackoverflow.com/questions/4733878/how-to-debug-a-stackoverflowexception-in-net. I usually debug StackOverflows with WinDBG like you did.

Closing as answered.


add logging functionality

I will add Boost.Log to support debug and trace behavior.

I recently started using Boost.Log as well. I think it would be an improvement.

I already have some boost log function calls in my copy of test_broker.hpp.
Should I submit those changes in a PR?

Before sending the PR, I want to discuss how to use Boost.Log.
The points I come up with are:

Format. e.g. Cloud service (e.g AWS cloud watch) friendly date-time representation.
Console log, File log, and OS(syslog) combination.
File log rolling model (size, duration, date, etc)
Console log flush timing (by default, not flush. It is inconvenient to debug for process finish such as SEGV). I think that always flush by default, and user can disable always flush. I'm not sure it is for all logs (console, file, and os log) or individually set.
Log level (fatal, error, warning, info, debug, trace) policy. I think that the current mqtt_cpp might overuse BOOST_ASSERT() some of them should be replaced with fatal log.
Complete log code remove option at compile time. I think it is macro.

I used Boost.Log on another project and noticed some of above list after log code inserted. Some of them might affect inserted log code and log option setter. So for mqtt_cpp, I want to consider them from the beginning.

Boost log provides the ability to create custom attributes and formatting, which allow for timestamps to be represented in whatever format you want. However, this can potentially impact both frontend and backend code.
This functionality is 100% handled by the boost log backend, no need for mqtt_cpp to be knowledgeable about this.
Same.
I'm fairly certain that this is the same as 2. and 3., but not 100% certain.
This is certainly something we need to be careful of. For my projects, I'm currently setting everything as info, but am planning to be more detailed soon.
A macro is the correct way to do this. However, it's also important that the object being logged to be provided as a constructor parameter to endpoint, so that custom front ends and custom backends can be used with full flexibility.

For test_broker.hpp, I also think that the log object provided to the broker should be a constructor parameter to the broker. This way each endpoint object can potentially have a different log interface.

We should also look into setting up thread ID, and strand ID, which boost.log probably already has attributes for, to help with debugging multi-threaded problems.

Here is a draft proposal of log for discussion.
https://wandbox.org/permlink/N34MVz9N3T6Qen0t
I use BOOST_LOG_TRIVIAL but I think that it should be replaced with custom log object.

I don't think there's any need for MQTT_NS::log_init.
Boost log provides several configuration systems. For example: https://www.boost.org/doc/libs/1_57_0/libs/log/doc/html/utilities.html#header.boost.log.utility.setup.from_stream_hpp

Thank you for the comments. I understand the configuration way but still not sure how to implement it. Could you update my wandbox example that remove log_init and achieve the same output format, if you have a time?
Edit, Run, and Share, you can get the new permalink.
I will study Boost.Log more, but I'm doing other issues so I don't have much time now.

This is the code I use to read a config file:
    boost::log::add_common_attributes();
    boost::log::core::get()->add_global_attribute("Scope", boost::log::attributes::named_scope());
    if(vm.count("log-config"))
    {
        std::string const& logFile = vm["log-config"].as<std::string>();
        std::ifstream configFile(logFile);
        boost::log::init_from_stream(configFile);
    }

and the config file
# Comments are allowed. Comment line begins with the '#' character
# and spans until the end of the line.

# Logging core settings section. May be omitted if no parameters specified within it.
[Core]
DisableLogging=false
#Filter="%Severity% > 3"

# Sink settings sections
[Sinks.ConsoleSink]

# Sink destination type
Destination=Console

# Sink-specific filter. Optional, by default no filter is applied.
# Filter="%Target% contains \"MySink1\""

# Formatter string. Optional, by default only log record message text is written.
Format="%Scope% - %Message%"

# The flag shows whether the sink should be asynchronous
Asynchronous=false

# Enables automatic stream flush after each log record.
AutoFlush=true

# Sink settings sections
[Sinks.FileSink]

# Sink destination type
Destination=TextFile

# Sink-specific filter. Optional, by default no filter is applied.
# Filter="%Target% contains \"MySink1\""

# The file name pattern for the sink backend. This parameter is mandatory.
FileName="cloud-connector_%2N.log"

# Target directory name, in which the rotated files will be stored. If this parameter is specified, rotated file collection is enabled. Otherwise the feature is not enabled, and all corresponding parameters are ignored.
Target="/tmp/"

# Formatter string. Optional, by default only log record message text is written.
Format="<%TimeStamp%> - %Scope% - %Message%"

# The flag shows whether the sink should be asynchronous
Asynchronous=false

# Enables automatic stream flush after each log record.
AutoFlush=true

# Sink settings sections
[Sinks.FileSink]

# Sink destination type
Destination=TextFile

# Sink-specific filter. Optional, by default no filter is applied.
# Filter="%Target% contains \"MySink1\""

# The file name pattern for the sink backend. This parameter is mandatory.
FileName="cloud-connector_%2N.log"

# Target directory name, in which the rotated files will be stored. If this parameter is specified, rotated file collection is enabled. Otherwise the feature is not enabled, and all corresponding parameters are ignored.
Target="/tmp/"

# Formatter string. Optional, by default only log record message text is written.
Format="<%TimeStamp%> - %Scope% - %Message%"

# The flag shows whether the sink should be asynchronous
Asynchronous=false

# Enables automatic stream flush after each log record.
AutoFlush=true

# File size, in bytes, upon which file rotation will be performed. If not specified, no size-based rotation will be made.
# 1 * 1024 * 1024
RotationSize=1048576

# Time interval, in seconds, upon which file rotation will be performed. See also the RotationTimePoint parameter and the note below.
# 60 * 60
RotationInterval=3600

# Enables or disables final file rotation on sink destruction, which typically happens on program termination. If not specified, the default value true is assumed.
EnableFinalRotation=true

# Total size of files in the target directory, in bytes, upon which the oldest file will be deleted. If not specified, no size-based file cleanup will be performed.
# 10 * 1024 * 1024
MaxSize=10485760

# Minimum free space in the target directory, in bytes, upon which the oldest file will be deleted. If not specified, no space-based file cleanup will be performed.
# 100 * 1024 * 1024
MinFreeSpace=104857600

# Total number of files in the target directory, upon which the oldest file will be deleted. If not specified, no count-based file cleanup will be performed.
MaxFiles=10

# Mode of scanning for old files in the target directory, see scan_method. If not specified, no scanning will be performed.
ScanForFiles=Matching

Or a small example for how to do it with an interface similar to std::map.
boost::log::settings setts;
setts["Core"]["DisableLogging"] = false;

// Subsections can be referred to with a single path
setts["Sinks.ConsoleSink"]["Destination"] = "Console";
setts["Sinks.ConsoleSink"]["AutoFlush"]   = true;
setts["Sinks.ConsoleSink"]["Format"]      = "%Scope% - %Message%";

boost::log::init_from_settings(std::move(setts));

If mqtt_cpp::endpoint and mqtt_cpp::test_broker take the logging object they should use as a constructor parameter, then the end user can provide a logging object that's configured the way they want, and you only need to use the above code examples for the example applications.
Note: If mqtt_cpp defines any custom attributes that will be logged, then the end user will need to configure their logging object that they pass as a constructor argument to accept those attributes. If they don't configure their logger to accept those attributes, I'm pretty sure the custom attribute will be ignored entirely when it's logged. But that's still the end users responsibility to configure.

Curious if there was any progress on this? Would be great to have debug/trace logging support!

@shantanu1singh , I'm still studying Boost.Log.
It's very difficult for me.
I tried to use log setup file.
It seems that it is globally affected. I couldn't find a way to use log setup file only for mqtt_cpp. That means the user program that uses mqtt_cpp can use different log setup file.
mqtt_cpp logger ----- mqtt_cpp sink ----- mqtt_cpp output
                              A
                              |
log setup file for mqtt_cpp --+

uusr program logger ----- user program_sink ----- user_program output
                                  A
                                  |
log setup file for user program --+

See https://wandbox.org/permlink/f2LsynKlZiPqwZQD
(middle is mqtt_cpp)
I also tried adding custom attribute for filename and line.  And outputting file and line can be controlled from the setup file.
# Formatter string. Optional, by default only log record message text is written.
Format="%TimeStamp% %ThreadID% %File% %Line% %LineID% %Message%"

It works well for mqtt_cpp. However, it affects user program logging. It is not expected behavior.
Because the user program doesn't know mqtt_cpp introduces custom attribute globally.
Here is boost log architecture.
https://www.boost.org/doc/libs/1_73_0/libs/log/doc/html/log/design.html
Formatter is applied at sink.
My goal is coexistence mqtt_cpp logger and user program logger.
For file and line, https://wandbox.org/permlink/su5V5wOWsqG5HS6Y is better because it doesn't affect user program. I know it is less flexible than introducing custom attribute. file and line regard to a part of message (body) in this approach.
I'm still looking for the best way to implement log on mqtt_cpp.
The key point is working well with user programs that use mqtt_cpp without side effect  of their log.

@jonesmz ,
At https://github.com/redboltz/mqtt_cpp/issues/292#issuecomment-575411671, you use BOOST_LOG_STREAM_CHANNEL_SEV().
Do you think mqtt_cpp should use channel functionality ?
If it does, mqtt_cpp should use only "mqtt" channel, or should have sub category something like "mqtt_api" and "mqtt_callback" ?
Another question. Is there any way to filter by channel using config file you mentioned ad https://github.com/redboltz/mqtt_cpp/issues/292#issuecomment-527348291. I couldn't find the way.
It seems that I can control very limited functionalities using config file.

I think sub-channel would be good.
mqtt_api
mqtt_packet_serialize
mqtt_packet_parse
mqtt_callback
etc.
You can filter on channel
E.g. see log config
# Logging core settings section. May be omitted if no parameters specified within it.
[Core]
DisableLogging=false
#Filter="%Severity% >= Normal"

# Sink settings sections
[Sinks.ConsoleSink]

# Sink destination type
Destination=Console

# Sink-specific filter. Optional, by default no filter is applied.
Filter="%Severity% >= Warning"

# Formatter string. Optional, by default only log record message text is written.
Format="%Process%/%Channel% - [%Severity%] %Message%"

# The flag shows whether the sink should be asynchronous
Asynchronous=false

# Enables automatic stream flush after each log record.
AutoFlush=true

# Sink settings sections
[Sinks.FileSink]

# Sink destination type
Destination=TextFile

# Sink-specific filter. Optional, by default no filter is applied.
Filter="%Severity% >= Normal"

# The file name pattern for the sink backend. This parameter is mandatory.
FileName="/log/myprogram_%2N.log"

# Target directory name, in which the rotated files will be stored. If this parameter is specified, rotated file collection is enabled. Otherwise the feature is not enabled, and all corresponding parameters are ignored.
Target="/log/"

# Formatter string. Optional, by default only log record message text is written.
Format="<%TimeStamp%> - %Scope% - %Message%"

# The flag shows whether the sink should be asynchronous
Asynchronous=false

# Enables automatic stream flush after each log record.
AutoFlush=true

# File size, in bytes, upon which file rotation will be performed. If not specified, no size-based rotation will be made.
# 1 * 1024 * 1024
RotationSize=1048576

# Time interval, in seconds, upon which file rotation will be performed. See also the RotationTimePoint parameter and the note below.
# 60 * 60
RotationInterval=3600

# Enables or disables final file rotation on sink destruction, which typically happens on program termination. If not specified, the default value true is assumed.
EnableFinalRotation=true

# Total size of files in the target directory, in bytes, upon which the oldest file will be deleted. If not specified, no size-based file cleanup will be performed.
# 10 * 1024 * 1024
MaxSize=10485760

# Minimum free space in the target directory, in bytes, upon which the oldest file will be deleted. If not specified, no space-based file cleanup will be performed.
# 100 * 1024 * 1024
# MinFreeSpace=104857600

# Total number of files in the target directory, upon which the oldest file will be deleted. If not specified, no count-based file cleanup will be performed.
MaxFiles=10

# Mode of scanning for old files in the target directory, see scan_method. If not specified, no scanning will be performed.
ScanForFiles=Matching

See helper functions, with boost::program_options
namespace
{

static constexpr auto sgc_logConfig = "log-config";
static constexpr auto sgc_logFormat = "log-format";
static constexpr auto sgc_logFilter = "log-filter";

} // namespace ()

boost::program_options::options_description get_logger_cli_options(void)
{
    namespace po = boost::program_options;
    po::options_description opts("logging options");
    opts.add_options()
        (sgc_logConfig, po::value<std::string>(), "Path to logging config file to use. Overrides format and filter strings.")
        (sgc_logFormat, po::value<std::string>(), "Raw log format string.")
        (sgc_logFilter, po::value<std::string>(), "Raw log filter string.")
        ;
    return opts;
}

void setup_from_program_options(boost::program_options::variables_map const& vm, bool enableLoggingByDefault)
{
    boost::log::add_common_attributes();
    boost::log::core::get()->add_global_attribute("Scope",   boost::log::attributes::named_scope());
    boost::log::core::get()->add_global_attribute("Process", boost::log::attributes::current_process_name());

    boost::log::register_simple_filter_factory<ESeverityLevel, char>("Severity");
    boost::log::register_simple_formatter_factory<ESeverityLevel, char>("Severity");

    if(vm.count(sgc_logConfig) && meshpp::file::exists(vm[sgc_logConfig].as<std::string>()))
    {
        std::ifstream configFile(vm[sgc_logConfig].as<std::string>());
        boost::log::init_from_stream(configFile);
    }
    else if(enableLoggingByDefault)
    {
        /**
         * See https://www.boost.org/doc/libs/1_65_0/libs/log/doc/html/log/detailed/utilities.html#log.detailed.utilities.setup.settings
         * for the full list of options.
         */
        boost::log::settings setts;

        setts["Core"]["DisableLogging"] = false;

        // Subsections can be referred to with a single path
        setts["Sinks.ConsoleSink"]["Destination"] = "Console";
        setts["Sinks.ConsoleSink"]["AutoFlush"]   = true;

        if(vm.count(sgc_logFormat))
        {
            setts["Sinks.ConsoleSink"]["Format"] = vm[sgc_logFormat].as<std::string>();
        }
        else
        {
            setts["Sinks.ConsoleSink"]["Format"] = "%Process%/%Channel% -- [%Severity%] %Message%";
        }

        if(vm.count(sgc_logFilter))
        {
            setts["Sinks.ConsoleSink"]["Filter"] = vm[sgc_logFilter].as<std::string>();
        }
        else
        {
            setts["Sinks.ConsoleSink"]["Filter"] = "%Severity% >= Normal";
        }

        boost::log::init_from_settings(std::move(setts));
    }
    else
    {
        boost::log::settings setts;

        setts["Core"]["DisableLogging"] = true;

        boost::log::init_from_settings(std::move(setts));
    }
} // setup_from_program_options

Use like:
int main(int argc, char *argv[])
{
    namespace po = boost::program_options;
    po::variables_map vm;
    {
        // Declare the supported options.
        po::options_description desc("Allowed options");
        desc.add(log::get_logger_cli_options());
        desc.add_options()
            ("help", "produce help message")
            ;

        po::store(po::parse_command_line(argc, argv, desc), vm);
        if(vm.count("help"))
        {
            std::cout << desc << std::endl;
            return -1;
        }

        po::notify(vm);
    }

    /**
     * Configure logging
     */
    log::setup_from_program_options(vm);

See helper macros / functions to automatically declare function scope: https://www.reddit.com/r/cpp/comments/g5f0ol/thelartiansstatictypeinfo_a_small_library_for/fo42ngn/?context=1

You can see code example of filtering log with channel here: https://stackoverflow.com/questions/34362871/use-channel-hiearchy-of-boost-log-for-severity-and-sink-filtering

You can see code example of filtering log with channel here:
https://stackoverflow.com/questions/34362871/use-channel-hiearchy-of-boost-log-for-severity-and-sink-filtering

It seems that the example doesn't use config file.
If I write the configuration code instead of config file, then it works.
I wrote the code. If I enable the filter in log.cfg, then no output.
https://wandbox.org/permlink/Z3n8Jjjedk6FsCGK
# How should I use Cannel filter ???
# Filter="%Channel% = \"aaa\""

# Formatter string. Optional, by default only log record message text is written.
Format="%TimeStamp% %ThreadID% %File% %Line% %LineID% %Channel% %Message%"

I also added %Channel% to the Format. But no output.

I believe you must first add a filter factory.
    boost::log::register_simple_filter_factory<ESeverityLevel, char>("Severity");
    boost::log::register_simple_formatter_factory<ESeverityLevel, char>("Severity");

The channel logger is defined in /usr/include/boost/log/sources/channel_feature.hpp, and it does not define a filter factory that I can tell.

I tried again and again.
Finally I got the following code and result.
https://wandbox.org/permlink/qZH7lBuDmXBfgqBf
I still don't find how to filter by channel but I can set min sev level for individual channel.
I think that it fits practical situation.
However, it works only hard coded setup. There is no way to do the same thing using setup file.
I think that it is limitation.
One problem, if user uses boost log such as BOOST_LOG_TRIVIAL, the setup affects user code. It is technically OK because setup log is user's responsibility.
But if user don't use channel e.g.)BOOST_LOG_TRIVIAL, then channel string becomes empty.
    // Set up the minimum severity levels for different channels
    min_severity["mqtt_api"] = boost::log::trivial::debug;
    min_severity["mqtt_cb"] = boost::log::trivial::error;
    min_severity[""] = boost::log::trivial::warning; // for BOOST_LOG_TRIVIAL (user code) but it doesn't work

The last line is empty matching. However it doesn't work.
If I solved the problem, I think that mqtt_cpp provides some default log initialize setup function. If use want to mqtt_cpp default setup, then call the function.
From my experience, setting up log is extremely difficult for user who is mainly interested in MQTT communication. Logging is not essential part for them.

Maybe we should ask on the boost mailing list?
This seems like very basic and expected functionality. Maybe it is a bug?

During I was preparing to ask boost ML, I found the way by myself.
https://wandbox.org/permlink/By4H4w3mlBvzRN7X
I also achieved that output CHANNEL part only if channel is set.
Why I felt it is very difficult
There are many ways to configure logging. Some of them look simple and convenient but usually have limitation. In order to overcome the limitation, I need to use lower level configuration way. It's difficult for me that which way is lower enough to achieve my goal. I'm still not sure my solution is appropriate level (layer).
Other difficult point. I need to user Boost.Phoenix to configure filter and formatter. To write conditional expression using phoenix, I need to remember the phoenix way. I used to use Boost.Phoenix to write lambda expressions. Since C++11 released I moved to standard lambda expressions, If Boost.Log accept standard lambda expressions, configuration would become easier.
Perhaps Boost.Log might already has been supported standard lambda expression, but I'm not sure. so far. I guess it isn't supported.
NOTE: It is similar situation to Boost.Spirit, but Spirit.X3 support standard lambda expressions.

https://wandbox.org/permlink/ZIxnJNIC88Jg6CwT
Now I understand how to mixed setup user side logging and library (mqtt_cpp) side logging.
So, __FILE__ and __LINE__ can be attribute now. It is more flexible that place them on the message body.
Now, I'm trying to solve a new problem.
                << boost::log::expressions::if_(boost::log::expressions::has_attr(mylib_file))
                [
                    // how to get filename from full path here ?
                    boost::log::expressions::stream << mylib_file << ":"
                ]

__FILE__ returns full path on compile time. The fullpath is often too much. It spend much space.
So getting filename from the fullpath is convenient.
I can get the filename using the following way.
https://stackoverflow.com/a/31160870/1922763
void my_formatter(logging::record_view const& rec, logging::formatting_ostream& strm)
{
    // Get the LineID attribute value and put it into the stream
    strm << logging::extract< unsigned int >("LineID", rec) << ": ";
    strm << logging::extract< int >("Line", rec) << ": ";
    logging::value_ref< std::string > fullpath = logging::extract< std::string >("File", rec);
    strm << boost::filesystem::path(fullpath.get()).filename().string() << ": ";

However, I couldn't find a way to do the same thing on the following style setup.
    boost::log::add_console_log(
        // output
        std::clog
        ,
        // format
        boost::log::keywords::format =
            boost::log::expressions::stream

Perhaps it might be impossible. If it is, I need to go to different way. It means using lower level APIs.
The API is function pointer style set_formatter.
    sink->set_formatter(&my_formatter);

I need to study more.

https://wandbox.org/permlink/n9Qf9lLRkdHphL79
Runtime lambda expression style formatter.

https://wandbox.org/permlink/JfernYfH5c12lCvh
Remove double quote from filename.

The next problem is how to avoid attribute redefinition.
My idea is introducing macro.
https://wandbox.org/permlink/lFsYVBawjsuFb2D6
#if defined(MYLIB_REGISTER_LOG_SERERITY)
BOOST_LOG_ATTRIBUTE_KEYWORD(severity, "Severity", boost::log::trivial::severity_level)
#endif

#if defined(MYLIB_REGISTER_LOG_CHANNEL)
BOOST_LOG_ATTRIBUTE_KEYWORD(channel, "Channel", std::string)
#endif

Looking for better way.
I tried to define mylib_severity and mylib_channel as attributes. However it doesn't work for filter. Maybe channel and severity are different from normal attribute.

https://wandbox.org/permlink/vZFnnVpuYWC1PK6k
Done.
It is still a little weird but I think that it is an acceptable solution.
Filterable attributes:

attribute variable
attribute string
note

mylib::severity
"Severity"
integral type

mylib::channel
"Channel"
std::string type

User can define the following attribute keyword in user code. No conflict happens thanks to the namespace.
BOOST_LOG_ATTRIBUTE_KEYWORD(severity, "Channel", std::string)

The attribute strings don't have "Mylib" prefix. "Severity" and "Channel" are defined in Boost.Log internally. In order to filter, they should be used. But the library can use attribute variable as the aliases of the attribute.
class diagram:

    attribute variable
        |1..*
        |
        |1    1   1
    arrtibute ----- attribute string
        |1
        |
        |1
      value

object diagram:

   channel  mylib::channel
        |   |
        |   |
        |   |
       channel ----- "Channel"
        |
        |
        |
      "mylib_api"

Non filterable attributes:
The following attributes cannot be used for filtering but user can formatting them.

attribute variable
attribute string
note

mylib::file
"MylibFile"
std::string

mylib::line
"MylibLine"
unsigned int

mylib::function
"MylibFunction"
std::string

I removed "Severity" and "Channel" dependency using scoped attributes and C++17 if (valus; cond) {} else hack.
https://wandbox.org/permlink/8XfDahTmE3YlNDtZ
Important point.
We need to use scoped attributes in order to filter by custom attributes.
See
https://www.boost.org/doc/libs/1_73_0/libs/log/doc/html/log/rationale/why_attribute_manips_dont_affect_filters.html
https://www.boost.org/doc/libs/1_73_0/libs/log/doc/html/log/detailed/attributes.html#log.detailed.attributes.related_components.scoped_attributes
User should be able to write as MYLIB_LOG(...) << 1 << "ABC";
So the difficult point is how to end the scope correctly.
#define MYLIB_LOG(chan, sev) \
    if (auto mylib_scope_attrs = \
        std::make_tuple( \
            boost::log::add_scoped_logger_attribute(logger::get(), "MylibChannel", boost::log::attributes::make_constant(chan)), \
            boost::log::add_scoped_logger_attribute(logger::get(), "MylibSeverity", boost::log::attributes::make_constant(boost::log::trivial::sev)) \
        ) \
        ; \
        false \
    ) { \
        (void)mylib_scope_attrs; \
    } \
    else \
        BOOST_LOG(logger::get()) \
            << boost::log::add_value(file, __FILE__) \
            << boost::log::add_value(line, __LINE__) \
            << boost::log::add_value(function, BOOST_CURRENT_FUNCTION)

So I use else without {}. User can add output stream operators naturally.
In order to scope-out the scoped attributes, I use attr(optional) if constexpr(optional) ( init-statement(optional) condition ) statement else statement
https://en.cppreference.com/w/cpp/language/statements

Maybe this is the final version for logging mechanism PoC.
https://wandbox.org/permlink/szkKVTYTSbgQONjX
It only uses C++14 feature.
Any number of filterable params can be passed.

@redboltz Wow, you really dug into this. That's fantastic.
I would like to contact the boost mailing list and ask them about the configuration file based filtering, and use this github issue as an example of what we want to do.
I assume that's OK with you.

 That's fantastic.
I would like to contact the boost mailing list and ask them about the configuration file based filtering, and use this github issue as an example of what we want to do.
I assume that's OK with you.

Thanks, it's OK. Please go ahead.

Question:
Instead of
#define MYLIB_LOG_FP(...) \
    if (auto mylib_scoped_attrs = make_scoped_attrs_cond(logger::get(), __VA_ARGS__) \
    ) { \
        (void)mylib_scoped_attrs; \
        std::cout << "hoge" << std::endl; \
    } \
    else \
        BOOST_LOG(logger::get()) \
            << boost::log::add_value(file, __FILE__) \
            << boost::log::add_value(line, __LINE__) \
            << boost::log::add_value(function, BOOST_CURRENT_FUNCTION)

What about using
boost::log::attributes::named_scope::sentry macro-generated-unique-name-here("functionname", __FILE__, __LINE__, boost::log::attributes::named_scope_entry::function);

I'm not sure how to use it.
Could you modify https://wandbox.org/permlink/Dt2LqIm4J1OCBcNB using it ?
It helps understanding.

Added more formatting example code.
Added different thread logging test code.
https://wandbox.org/permlink/KzfxwvCc7w3LSgkF

Test for updating filter on run time.
https://wandbox.org/permlink/Lq5XiLHpLy9PjcbM

@redboltz
I intend to do what you asked.
My work is very busy recently, very sorry for delay.

@redboltz
I intend to do what you asked.
My work is very busy recently, very sorry for delay.

Ok, no problem :)
I found a way to write filter more natural and flexible way. It uses normal function or lambda expression.
https://wandbox.org/permlink/bWwXzsGvfrejXTNC

Now, I have good enough logging mechanism. I just started adding logging code.
See #644
I understand that https://github.com/redboltz/mqtt_cpp/issues/292#issuecomment-649696203 is still pending. I think that we can discuss based on the PR #644

Hi,
I know that I am extremely late to the party, but:
Will there be a way not to use this mechanism at all? We have our own logging library that we use throughout our code and I don't think using Boost.Log in addition to it will be healthy.
Optionally - maybe you (@redboltz ) could implement logging simply as series of macros that we could override in our code so that our own logger is called? Something along the lines:
#define MQTT_LOGLEVEL_DEBUG 4
#define MQTT_LOGLEVEL_ERROR 2
#define MQTT_LOG(level, ...) some_logging_function(level, ...)
#define MQTT_LOG_DEBUG(...) some_logging_function(MQTT_LOGLEVEL_DEBUG, ...)
#define MQTT_LOG_ERROR(...) some_logging_function(MQTT_LOGLEVEL_ERROR, ...)

with obvious (I think) usage:
if (something_went_wrong()) {
    MQTT_LOG_ERROR("Something went wrong: ", what, " error: ", error);
}

This would be great - everyone could either use logger provided by the library (by default) or with some work use their own.
But if it is far too late then at least option to not use Boost.Log would be great.

@ineffective , I've already decided using Boost.Log.
You can configure Boost.Log to no output. I think that it is enough.
I might provide completely disabling MQTT_LOG from compiling time option. But it is lower priority for me.
Consider the following code (it is not actual implementation).
// User can define your own macro
// but it must support variadic params and output stream operator
// to match our convention.

#if !defined(MQTT_LOG)
#define MQTT_LOG(...) our_default_impl(__VA_ARGS_)
#endif

void async_publish(std::string topic, async_callback_t cb) {
    buffer buf = topic; //
    async_send(
        buf,
        [this, topic, cb] { // capture params only for logging
            MQTT_LOG(this) << topic; // output stream operator must be supported
            if (cb) cb();
        }
    );
}

If you some how provide empty MQTT_LOG() macro, then you might get warnings that this and topic are not used in the lambda expression. If you don't want to suppress the warnings, you need to some implementation to do that.
But I guess that you can do that.

Here is PoC implementation disabling MYLIB_LOG:
https://wandbox.org/permlink/didwMpKoakCRRvP3
NOTE: Output is from client code, not mylib.
You can not only disabling MYLIB_LOG but also dispatch to your own logging mechanism.
I guess that logging spec is frequently changed at first. And I will regard to it as non breaking change.
If you use your own mechanism, please keep up with the change.

@redboltz  Thank you for an answer. Could you please consider using macro that is similar to this one in your library:
#include <boost/preprocessor/list/for_each.hpp>
#include <boost/preprocessor/variadic/to_list.hpp>

#define MACRO(r, data, elem) data elem
#define MY_LOG(level, facility, ...) do { logger_object << level << facility BOOST_PP_LIST_FOR_EACH(MACRO, <<, BOOST_PP_VARIADIC_TO_LIST(__VA_ARGS__)); } while(0)

Usage would be similar to this:
MY_LOG(ERROR, "facility", "error: variable 'x' has invalid value: ", local_variable_x, ". Can't proceed.");

This results in the following code:
do { logger_object << ERROR << "facility" << "error: variable 'x' has invalid value: " << local_variable_x << ". Can't proceed." ; } while(0);

As you can see it expands to something that can be used to call Boost.Log.
do {} while(0) code is here to force comma at the end of MY_LOG() macro.
This has at least two nice properties:

Boost.Log can be replaced with any other logging mechanism, especially one that does not use streams, while at the same time Boost.Log loses nothing (I think).
Logging can be disabled completely and leaves no trace - important for those that care about such things (e.g. we had a project where logging was enabled for debug builds, but we had to be completely sure that there is not even a trace of strings used for logging in the resulting binary).

In addition if you were to use it, you could define macros for each logging level, e.g. MQTT_LOG_DEBUG, MQTT_LOG_ERROR and so on - this way one could for example enable at compile time only macros for errors at EMERGENCY, ALERT, CRITICAL, ERROR and WARNING while at the same time completely remove NOTICE, INFORMATIONAL and DEBUG (these levels are taken from RFC 5424, RFC for syslog).
Note that this by no means accomodates all cases: for example it still does not solve my problem - I'd like to have logs available, but our logger uses format strings, so call to logger looks more like call to printf:
LOGD("var x is % and var y is %", x, y);

but this can be worked around by us locally and pretty easy at that - but this is specific to our use case, so I'll not dwell upon that any further.
If you are certain that you want to proceed with raw Boost.Log with its use of streams, will you be willing to accept patch (pull request) provided after you are finished with full logging implementation that would change logging mechanism to the one I described above? This would be really nice - people use different logging mechanisms (e.g. raw syslog) and allowing for complete replacement would be a boon - also I think that this is an approach that library writer should take because of its flexibility.
No matter what your decision will be, thank you for great library and all the work that went into it.

@ineffective , unfortunately I don't accept your approach.
It is too fixed, and less flexible.
Boost.Log is more flexible than yours.
For example, Boost.Log is output streamable, so we can use it similar to std::cout. For example we can insert io manipulator.
I don't want to use the logger that supports only comma separated value.

Logging can be disabled completely and leaves no trace - important for those that care about such things (e.g. we had a project where logging was enabled for debug builds, but we had to be completely sure that there is not even a trace of strings used for logging in the release binary).

If you define your own MQTT_LOG, then Boost.Log code is completely disappeared from the binary. The source code is remained but not instantiated.

@ineffective , unfortunately I don't accept your approach.
It is too fixed, and less flexible.

It is a pity, but still fair enough.

Boost.Log is more flexible than yours.
For example, Boost.Log is output streamable, so we can use it similar to std::cout. For example we can insert io manipulator.
I don't want to use the logger that supports only comma separated value.

Values are comma separated in macro call, but in the end they are separated by operator<<, which means that you can easily put io manipulators in macro call and they will be sent to stream - of course this would be a problem for people with other loggers, but it is their problem (and mine, but I'm willing to accept it) to avoid logging them as if they were normal objects.

Logging can be disabled completely and leaves no trace - important for those that care about such things (e.g. we had a project where logging was enabled for debug builds, but we had to be completely sure that there is not even a trace of strings used for logging in the release binary).

If you define your own MQTT_LOG, then Boost.Log code is completely disappeared from the binary. The source code is remained but not instantiated.

Fair enough. It is somewhat sad that this way I will lose ability to have any logs from mqtt_cpp, but they aren't here right now so I can live with that. I will see how replacing MQTT_LOG with my own works when you are done - maybe there will be some way to use it at least in debug builds to see what happens during tests.
Thanks.


How to get Revert payload from PSR-7 compliant request object?

Summary
I'm trying to incorporate the revert action into my server code, however, I'm having trouble getting the ID from a PSR-7 compliant request object. I thought that it may be a problem with the revert action using the DELETE method which may not be widely supported, but after customizing the revert action through setOptions to use the POST method, I still can't get the ID.
I've unsuccessfully tried the following methods for retrieving the ID:

$body = $request->getParsedBody();
$params = $request->getParams();
$body2 = $request->getBody();

Google Chrome developer tools network tab does show that there is a Request Payload with the correct ID value in the revert requests.

$request->getBody()->getContents() seems to be the right way to get plaintext payload.
This post inspired me to try this option.


VS2022: msbuild can not be located, only Build Tools are installed

As discussed in https://github.com/cake-build/cake/discussions/3476,
VS2022 BuildTools should be searched in Program Files (x86), too.

It sure would have been nice to see this fix in a Cake 1.3.1 release.  My Cake 1.3.0 build doesn't recognize the VS2022 Build Tools on my build server, and in order to fix it, I have to rework all my build script to be compatible with Cake.Tools 2.0.0, which appears to be non-trivial (I'm currently using the full framework runner).  So I'm basically stuck without investing significant effort.

In case someone comes behind me looking for a work-around, I basically used a method as suggested here: https://github.com/cake-build/cake/discussions/3476
I got the MSBuild path using VSWhere:
#tool nuget:?package=vswhere&version=2.8.4

    public FilePath LatestMSBuildPath { get; private set; }

    LatestMSBuildPath = GetLatestMSBuildPath();

    private FilePath GetLatestMSBuildPath()
    {
        var latestMSBuildPath = context.VSWhereLatest(new VSWhereLatestSettings { Products = "*", Requires = "Microsoft.Component.MSBuild"});
        return new FilePath($"{latestMSBuildPath}\\MSBuild\\Current\\Bin\\MSBuild.exe");
    }

And then when compiling for VS2022, I override the ToolPath in my MSBuildSettings:
    private Func<MSBuildSettings, DirectoryPath, MSBuildSettings> GetMSBuildSettings()
    {
        return (msbuildSettings, path) =>
        {
            msbuildSettings
                .WithTarget("Build")

			...

			if (this.VSVersion == MSBuildToolVersion.VS2022)
			{
				context.Information($"MSBuildPath: {this.LatestMSBuildPath}");
				msbuildSettings.ToolPath = this.LatestMSBuildPath;
			}

            return msbuildSettings;
        };
    }


Update configuring-sdn-manager-using-the-config-file.md

Docs Build status updates of commit 501b197:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

Skype/SDN/articles/configuring-sdn-manager-using-the-config-file.md
:white_check_mark:Succeeded

For more details, please refer to the build report.
Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.


TcpSocket now supports pinning publicKeys for TLS

The TcpSocket previously only supported 2 types of TLS connections:
enum class TLS {
   SAFE, UNSAFE_CERTIFICATES
}

This PR adds support for pinning. The motivation is to increase security for Electrum connections. Since many (most?) of them are using self-signed certificates.
sealed class TLS {
   object DISABLED: TLS()
   object TRUSTED_CERTIFICATES: TLS()
   object UNSAFE_CERTIFICATES: TLS()
   data class PINNED_PUBLIC_KEY(
      // DER-encoded publicKey as base64 string.
      // (I.e. same as PEM format, without BEGIN/END header/footer)
      val pubKey: String
   ): TLS()
}

One other minor change I made was to make the TLS parameter required.
suspend fun connect(host: String, port: Int, tls: TLS): TcpSocket
//                                           ^^^^^^^^

Seems safer - no longer possible to forget the parameter, and end up with a non-secure connection when a secure connection was expected.
Important
The initial commit only includes support for the iOS socket. We need another commit to add support for the Android socket.

Related to https://github.com/ACINQ/phoenix/issues/182

Support for certificate pinning added in 9b019b16f7e6c3fab69a1ce122b2d0061e842d5e.
@sstone you may want to take a look. The idea is :

create a default X509TrustManager with default behaviour ;
create a new X509TrustManager with a special checkServerTrusted method that whitelists the pinned pubkey ;
if the server's pubkey does not match the pinned pubkey, fall back to default behaviour.

Rebased on master (to fix conflicts), and force-pushed.

Changes in commit 357b415:
When a connection was closed, we previously didn't tell the client why the connection was closed. We only exposed the state:
enum class Connection { CLOSED, ESTABLISHING, ESTABLISHED }

We now expose the reason for the closure:
sealed class Connection {
    data class CLOSED(val reason: TcpSocket.IOException?): Connection()
    object ESTABLISHING: Connection()
    object ESTABLISHED: Connection()
}

This allows clients to react to certain situations. For example:

if client has custom electrum server configured (with pinned public key)
and electrum connection starts failing with "bad certificate" errors
then the UI can display an error message with helpful information

the reason [...] is not the same between iOS and Android when the connection is closed because the server's key does not match the pinned key

That's correct. These errors are specific to their respective networking stacks. And that's not even the end of the story.
It's expected that the exact error messages may differ by OS version too. For example, the iOS networking stack has undergone huge changes in the last few years, as they've transitioned from BSD sockets to NSURLSession to NetworkFramework. So I anticipate OS-version-specific checks will be required in the future. That's why I'm comfortable moving this logic out of the shared library and into the platform specific code.

Rebased on master


⚠ Quirk Club Argentina (Payment Gateway) has degraded performance

In 37cbe21, Quirk Club Argentina (Payment Gateway) (https://us-central1-quirkclub-dev.cloudfunctions.net/api/check/payment-gateway-ml) experienced degraded performance:

HTTP code: 200
Response time: 10530 ms

Resolved: Quirk Club Argentina (Payment Gateway) performance has improved in 1ad144d after 10 minutes.


Consider removing unnecessary result return

I noticed bunch of trivial methods have result return types that are barely due to ffi or barely end in error. For example, the Mat::size, Mat::rows and Mat::cols. I think it can simply panic if it's due to implementation error.
In my opinion, we can look at tch::Tensor's approach. It's a crate that ports libtorch to rust. It generates a series of methods named  f_METHOD(), indicating a fallible method, along with METHOD() that wraps around the former. For example, add() always return the value of f_add() and panics if f_add() fails.
EDIT:
Plus that we can add a fallible f_clone() and implement Clone trait for Mat. I would give us some convenience in the case that I can derive Clone on struct with a Mat field.

That's a nice idea. But I feel that we should limit it to some specific simple methods, inflating the whole API with those mirror panicking methods would be too much. Do you maybe have an idea of which methods merit having a panicking version besides those you already mentioned?

Find those methods on OpenCV reference without error returns. Once the C++ side promises non-failure return, the Rust side should work accordingly. Otherwise, panic at linking or implementation error.
Based on this rule, the comprehensive non-failure methods for Mat would be at, col, clone, copySize, create, cross, empty, etc. Maybe we can follow tch's way to have separate mod for f_* methods.

Some progress on that is done in v0.30.0. Property setters and getters + those functions marked as CV_NOEXCEPT (very few in total) now return value directly instead of Result. Please note that this version comes with the totally rewritten binding generator and you will need llvm installed instead of python to be able to correctly regenerate bindings. Please see the changelog and readme for more details.


Deprecate using arguments starting with $, @, & and % as literal values

We are planning to support $var syntax in addition to ´${var}in the future (#4674). The plan was to do that already in RF 7.0, but it turned out that this would be too badly backwards incompatible. Probably the biggest problem would be that the Browser library accepts passwords in format$secretand resolves the variable value internally to avoid the value being logged automatically. After the planned change$secret, would be considered exactly the same as ${secret}` meaning that a confidential value could leak.
We still believe that supporting the $var syntax is a good idea, but we need to first deprecate using values starting with $ or any other variable identifier. That means that using, for example,
Log Many    $value    @another

will cause a deprecation warning and the value needs to be escaped like
Log Many    \$value    \@another

This is actually pretty complicated to do. The problem is that we in general want to deprecate usages like
Keyword    $foo

but there are special case like
Evaluate    $foo

and
IF    $foo

where it absolutely shouldn't be done.
In practice we'd need to separate the above cases somehow. It's doable and we need to do that before adding support for the $var syntax anyway, but we don't have time for that now. Moving this issue forward.

@pekkaklarck before that, consider please CLI switch to keep old behavior.

I am curious if the goal is to get to a point where

${var} --> $var
@{list} --> @list
&{dict} -->  &dict
%{env} --> %env

Why do you have to deprecate arguments starting with $, @, & and % first? so this means for a period of time both formats will not work, what the new temporary variable syntax will be?
Perhaps I've misunderstood this change? I don't see why new and old variable syntax can't be supported for a few releases and then old style removed after a few releases with the deprecation warning.

The problem is that if someone nowadays uses
Keyword    $xxx

so that $xxx is a literal value, the behavior will change and the usage needs to be changed to
Keyword    \$xxx

As a concrete example, Browser library uses the $name style with passwords ro avoid their values being accidentally disclosed.

Ah so it's only literal values not variables that start with those characters that are being depreciated and now need to be escaped? That wasn't clear, I thought this was deprecating variables (e.g. ${xxx}) that started with those characters, and that had me worried.

This requires more discussion and design. We decided to move it RF 7.3 to be able to get RF 7.2 out soon.


Usage failure

After installing godaddy-dns, I can't execute it. I typed:
$ sudo npm install -g godaddy-dns
/usr/local/bin/godaddy-dns -> /usr/local/lib/node_modules/godaddy-dns/godaddy-dns.
/usr/local/lib
└─┬<EMAIL_ADDRESS>├──<EMAIL_ADDRESS>└─┬<EMAIL_ADDRESS>├──<EMAIL_ADDRESS>├──<EMAIL_ADDRESS>├──<EMAIL_ADDRESS>├─┬<EMAIL_ADDRESS>│ └──<EMAIL_ADDRESS>├──<EMAIL_ADDRESS>├──<EMAIL_ADDRESS>├─┬<EMAIL_ADDRESS>│ └──<EMAIL_ADDRESS>├─┬<EMAIL_ADDRESS>│ ├─┬<EMAIL_ADDRESS>│ │ ├──<EMAIL_ADDRESS>│ │ ├──<EMAIL_ADDRESS>│ │ ├──<EMAIL_ADDRESS>│ │ └──<EMAIL_ADDRESS>│ └──<EMAIL_ADDRESS>├─┬<EMAIL_ADDRESS>│ ├──<EMAIL_ADDRESS>│ ├─┬<EMAIL_ADDRESS>│ │ └──<EMAIL_ADDRESS>│ ├──<EMAIL_ADDRESS>│ └──<EMAIL_ADDRESS>├─┬<EMAIL_ADDRESS>│ ├──<EMAIL_ADDRESS>│ ├─┬<EMAIL_ADDRESS>│ │ ├──<EMAIL_ADDRESS>│ │ ├──<EMAIL_ADDRESS>│ │ └─┬<EMAIL_ADDRESS>│ │   └──<EMAIL_ADDRESS>│ └─┬<EMAIL_ADDRESS>│   ├──<EMAIL_ADDRESS>│   ├──<EMAIL_ADDRESS>│   ├──<EMAIL_ADDRESS>│   ├──<EMAIL_ADDRESS>│   ├──<EMAIL_ADDRESS>│   ├──<EMAIL_ADDRESS>│   └──<EMAIL_ADDRESS>├──<EMAIL_ADDRESS>├──<EMAIL_ADDRESS>├──<EMAIL_ADDRESS>├─┬<EMAIL_ADDRESS>│ └──<EMAIL_ADDRESS>├──<EMAIL_ADDRESS>├──<EMAIL_ADDRESS>├──<EMAIL_ADDRESS>├──<EMAIL_ADDRESS>├──<EMAIL_ADDRESS>├─┬<EMAIL_ADDRESS>│ └──<EMAIL_ADDRESS>├──<EMAIL_ADDRESS>└──<EMAIL_ADDRESS>Then, I run $ godaddy-dns -V returning the following exception:
`module.js:471
throw err;
^
Error: Cannot find module 'request-promise'
at Function.Module._resolveFilename (module.js:469:15)
at Function.Module._load (module.js:417:25)
at Module.require (module.js:497:17)
at require (internal/module.js:20:19)
at Object. (/usr/local/lib/node_modules/godaddy-dns/godaddy-dns.js:9:17)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)`
How can I solve it?
Installed NodeJS version is v6.11.4 and NPM's 3.5.2. I'm running Ubuntu 17.10 Desktop 64 bit.
Thanks.

Oops i accidentally moved it in the dev dependencies during the last update. I will address it later this evening, but feel free to submit a PR if you have time.
Thanks for reporting the issue

Thanks for your fast reply. I'm new to NodeJS and never coded before. Anyway, I'll try it.

Should I move only "request-promise": "^4.2.2" from devDependencies to dependencies? What else and/or versions should I write into dependencies?
Thanks

That's right, if you can also change the version of the package (the one at
the top) to be "1.1.1" in your PR i should be able to approve it directly
from my mobile. The CI should take care of publishing the new version then
😉
Thanks
On Nov 29, 2017 15:08, "Jon I."<EMAIL_ADDRESS>wrote:

Should I move only "request-promise": "^4.2.2" from devDependencies to
dependencies? What else and/or versions should I write into dependencies?
Thanks
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/lmammino/godaddy-dns/issues/21#issuecomment-347870566,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAMjPfiuQRoip7dIhPTZwzHcdHbNSCQoks5s7WVYgaJpZM4Qu_xx
.

done!

Thanks a million. New version Just released. Let me know if notte works as expected.

Working! Thanks a lot to you.

It's all your merit 😉


Add the search user interface

Closes #161, #165. It's rudimentary, but enables the user to search by both custom links and their target URLs.
Since the underlying database is Redis, it accepts any glob-style pattern that can be passed as an argument to scan().
cc: @unhuman, @mpdatx

Coverage increased (+0.03%) to 98.247% when pulling e677ba77f0bfce37165f2826e5a7dfed49ec5d81 on search-ui into c3129a8f5c085de1261ae4f8ddcd063952cd9b71 on master.


GMM.py doesnot seem to run

I tried running the gmm.py example. The following errors appear.
In the other examples, eventhough similar errors appear, output and plots run fine. But, in this one, it doesn't go past the first iteration and throws up these errors.
/home/usr/anaconda/lib/python3.6/site-packages/autograd/numpy/numpy_vjps.py:444: FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use arr[tuple(seq)]instead ofarr[seq]. In the future this will be interpreted as an array index, arr[np.array(seq)], which will result either in an error or a different result.   return lambda g: g[idxs]
/home/usr/anaconda/lib/python3.6/site-packages/autograd/numpy/numpy_boxes.py:13: FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use arr[tuple(seq)]instead ofarr[seq]. In the future this will be interpreted as an array index, arr[np.array(seq)], which will result either in an error or a different result.   def __getitem__(A, idx): return A[idx]
/home/usr/anaconda/lib/python3.6/site-packages/autograd/numpy/numpy_vjps.py:597: FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use arr[tuple(seq)]instead ofarr[seq]. In the future this will be interpreted as an array index, arr[np.array(seq)], which will result either in an error or a different result.   onp.add.at(A, idx, x)
/home/usr/anaconda/lib/python3.6/site-packages/autograd/numpy/numpy_vjps.py:601: FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use arr[tuple(seq)]instead ofarr[seq]. In the future this will be interpreted as an array index, arr[np.array(seq)], which will result either in an error or a different result.   defvjp(untake, lambda ans, x, idx, _: lambda g: g[idx])
/home/usr/anaconda/lib/python3.6/site-packages/autograd/numpy/numpy_vjps.py:444: FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use arr[tuple(seq)]instead ofarr[seq]. In the future this will be interpreted as an array index, arr[np.array(seq)], which will result either in an error or a different result.   return lambda g: g[idxs]

I am having this problem as well. It seems only to happen for certain versions of numpy.


Getting 'no match of right hand side value: {:error, :nofile}' error with MnesiaCach

Hey, first of all thanks for this awesome library. Most of what I've tried to do so far has gone well but I ran into one issue I can't quite figure out.
Im trying to convert from ETS to Mnesia for the session store but I every time I do I receive a no match of right hand side value: {:error, :nofile} error from lib/pow/store/base.ex:155
This is my config.ex
config :myapp, :pow,
  user: MyApp.Users.User,
  repo: MyApp.Repo,
  web_module: MyAppWeb,
  web_mailer_module: MyAppWeb,
  mailer_backend: MyAppWeb.Pow.Mailer,
  extensions: [PowResetPassword, PowPersistentSession, PowInvitation],
  controller_callbacks: Pow.Extension.Phoenix.ControllerCallbacks,
  cache_store_backend: Pow.Store.Backend.MnesiaCach

and then in application.ex
def start(_type, _args) do
  topologies = Application.get_env(:libcluster, :topologies) || []

  children = [
    MyApp.Repo,
    MyAppWeb.Telemetry,
    {Phoenix.PubSub, name: MyApp.PubSub},
    {Cluster.Supervisor, [topologies, [name: MyApp.ClusterSupervisor]]},
    {Pow.Store.Backend.MnesiaCache, extra_db_nodes: Node.list()},
    Pow.Store.Backend.MnesiaCache.Unsplit,
    MyAppWeb.Endpoint,
    MyApp.Scheduler
  ]

  opts = [strategy: :one_for_one, name: MyApp.Supervisor]
  Supervisor.start_link(children, opts)
end

I also have this pow related code in my endpoint.ex
@session_options [
    store: :cookie,
    key: "a_key",
    signing_salt: "a_salt"
  ]

  plug Plug.Session, @session_options
  plug Pow.Plug.Session, otp_app: :myapp
  plug PowPersistentSession.Plug.Cookie

Im using libcluster but I still get the error even if I remove it. I feel like i'm probably missing something really obvious here.  Like maybe I need to specify cache_store_backend somewhere else. But I've tried adding it anywhere I can find.
I'll admit i'm not extremely knowledgeable about mnesia but it seems like its writing files successfully at least.

Ok. Wow. Not my day today. In typing this up I realized I spelled  cache_store_backend: Pow.Store.Backend.MnesiaCach wrong. And it should be  cache_store_backend: Pow.Store.Backend.MnesiaCache.

I'm glad you figured it out, don't hesitate to write again if something else doesn't work as expected!


add thread and ternary plots

Description
DON'T MERGE as this is only rewrites of matplotlib routines that function on data. Presently no integration with QCA.
Todos

[x] plotly threads plot
[x] plotly ternary plot
[ ] plotly threads plot of qcf data
[ ] plotly ternary plot of qcf data
[ ] find a decent RGB colormap in plotly -- their "Jet" is very dark so that red/blue are hard to distinguish

Questions

[ ] Using the plotly built-in ternary would be nice, but I don't see plotting two at once or turning one upside down. If anyone sees a better path, let me know.

Status

[ ] Changelog updated
[ ] Ready to go

Cool! This looks great.
I agree that we need to hand code the ternaries from Plotly basics rather than their built in function.
You may want to turn off the grid lines, like so..

turn off the blue bkgd + white grid lines for both ternary and threads or just the former?

For ternary for sure. For the threads you may want to consider shifting the chart +/- 0.5 to have the grid correctly line up, may with a view.


Adding blocks to an existing token

Given an encoded token, it'd be nice to be able to add blocks.
I'm not sure how that would look like though. (as soon as we display a token that's been generated by the component, it should become uneditable)

Done in #21


Add poetry-dynamic-versioning for PyPI builds

Description
This PR adds poetry-dynamic-versioning for automated PyPI builds in order to ensure the proper version is used. Without this, the version won't be inferred properly on PyPI.
Closes #27
What kind of change(s) are included?

[ ] Feature (adds or updates new capabilities)
[x] Bug fix (fixes an issue).
[ ] Enhancement (adds functionality).
[ ] Breaking change (these changes would cause existing functionality to not work as expected).

Checklist
Please ensure that all boxes are checked before indicating that this pull request is ready for review.

[x] I have read and followed the CONTRIBUTING.md guidelines.
[x] I have searched for existing content to ensure this is not a duplicate.
[x] I have performed a self-review of these additions (including spelling, grammar, and related).
[x] These changes pass all pre-commit checks.
[ ] I have added comments to my code to help provide understanding
[ ] I have added a test which covers the code changes found within this PR
[x] I have deleted all non-relevant text in this pull request template.

Thanks @jenna-tomkinson for the review!


d_out

Hi Siqi,
Thank you for release your work.
I am tring to use your LFA in my network but am confused about some code.
The dimension of f_lc, shortcut, and f_gc is d_out2, so makes the returned dimension be d_out4 in this case. But in RandLA-Net, the output dimension should be d_out*2. Are they different in the architecture? Or should the dimensions of each layer be the same in your network and RandLA-Net?
Appreciate if you could help me with this problem.
in SCFNet.py:
line 276-285
    # MLP 2
    f_lc = helper_tf_util.conv2d(f_lc, d_out * 2, [1, 1], name + 'mlp2', [1, 1], 'VALID', True, is_training, activation_fn=None)
    # MLP Shotcut
    shortcut = helper_tf_util.conv2d(feature, d_out * 2, [1, 1], name + 'shortcut', [1, 1], 'VALID', activation_fn=None, bn=True, is_training=is_training)

    # Global Contextual Features
    f_gc = tf.expand_dims(tf.concat([xyz, lg_volume_ratio], axis=-1), -2)
    f_gc = helper_tf_util.conv2d(f_gc, d_out * 2, [1, 1], name + 'lg', [1, 1], 'VALID', activation_fn=None, bn=True, is_training=is_training)

    return tf.nn.leaky_relu(tf.concat([f_lc + shortcut, f_gc], axis=-1))

These are hyper parameters in the network, so you can manually adjust them to fit your own network accordingly. The selection of them need some ablation studies.

Thank you for prompt reply.
I totally agree with you about the selection of these hyperparameters. I am trying to understand your architecture so I really wanna understand each part of your module.
I am using pytorch so I need to specify the input channel number of each MLP or other modules. To my best knowledge, the outout channel number of SCF module is 4*d_out, twice as that of RandLA-Net. So if I want to compare your LFA module and LFA in RandLA-Net by ablation experiments, should I double the output channel number in RandLA-Net? Does it make sense?
Again, Thank you for your help.
BW,
Wei

The dimensions of the Local Contextual feature are the same in the SCFNet and RandLA-Net, while the output dimension of the SCF module is doubled due to the additional Global Contextual feature ([f_lc + shortcut, f_gc]).

Thank you for your reply. I have tested your modules on my dataset with the same channel numbers (which are half of yours) as RandLA-Net. The results show shat SCF module still outperforms the LFA module in RandLA-Net. Thank you for your work and releasing your codes. 👍


[Bug] barWidth not work in bar chart, but can work in bar series

Version
1.0.0
Link to Minimal Reproduction
none
Steps to Reproduce
const spec = {
  type: 'bar',
  data: [
    {
      id: 'barData',
      values: [
        { month: 'Monday', sales: 22 },
        { month: 'Tuesday', sales: 13 },
        { month: 'Wednesday', sales: 25 },
        { month: 'Thursday', sales: 29 },
        { month: 'Friday', sales: 38 }
      ]
    }
  ],
  xField: 'month',
  yField: 'sales',
  barWidth: 10
};

Current Behavior
none
Expected Behavior
none
Environment
- OS:
- Browser:
- Framework:

Any additional comments?
No response

repeate with #131


Flash Driver

Hi I'm looking for a flash driver for stm32f091, can you help me with that?

There is no flash driver in this codebase yet.  If you want to create one there is usually a section on flash memory erase & program in the reference manual.

There is no flash driver in this codebase yet. If you want to create one there is usually a section on flash memory erase & program in the reference manual.

@newAM Okay thank you.


Min settings causes slider value to not go to zero when entity is off

Checklist:

[X] I updated to the latest version available
[X] I cleared the cache of my browser

Release with the issue:
1.1.4
Last working release (if known):
NA
Browser and Operating System:
Windows Chrome
iPadOS Safari
Description of problem:
When using min setting on a light entity turning off the light shows the slider value stuck at the min value instead of going down to zero like you’d expect for an off light. As a result it becomes quite difficult to tell a light is on, with only the colour of the icon as an indicator.
Light on with dimmer level:

Light off:

I just started using this card, and noticed the same issue.

Tbh I think the best way to implement min/max values would be that sliding cannot go past these values. If the entity has a value outside of the min/max range (set by other cards/automations), then it should be shown correctly on the slider.


i have a issue with paper 1.16.5

[TCPShield] Unhandled exception occured in onPacketReceiving(PacketEvent) for TCPShield

We need the full error to help you.


Visibility

Change .Private to Visibility. By default, Visibility is public unless set otherwise: https://indieweb.org/Micropub-extensions#Visibility
This supports both unlisted and private posts.

Unlisted + Not Logged In: entries are there, but hidden
Unlisted + Logged In (me): they show up in the feeds
Unlisted + Logged In (others): entries are there, but hidden
Private + Not Logged In: not listed, not accessible
Private + Logged In (me): listed, accessible
Private + Logged In (others): listed and accessible depending on audience

Audience is empty: all logged in users
Audience is array: only for those users


Async options?

Hey man, I know you removed them but could we have async options again? Possibly just duplicate the current methods but have async in the name? I can help out...

I mean if you want you can just duplicate every Method name to contain "Async" at the end of the name. I've seen a few libraries in the past do that, but what purpose does it serve.
I'd prefer a "AsyncClient" and "AsyncSecretClient" instead so it leaves the none-async classes pure which would probably mess with unity 3d less and cause less confusion for devs that don't know what async is.

Yeh the wording isn't quite right Async clients would be a nice to have
On Wed, 19 Jan 2022, 7:03 pm Taranasus, @.***> wrote:

I mean if you want you can just duplicate every Method name to contain
"Async" at the end of the name. I've seen a few libraries in the past do
that, but what purpose does it serve.
I'd prefer a "AsyncClient" and "AsyncSecretClient" instead so it leaves
the none-async classes pure which would probably mess with unity 3d less
and cause less confusion for devs that don't know what async is.
—
Reply to this email directly, view it on GitHub
https://github.com/taranasus/LoopringSharp/issues/9#issuecomment-1016223442,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ABIDWT7JTSIPUNK42GFFK5DUWZ46XANCNFSM5MJDONQQ
.
You are receiving this because you authored the thread.Message ID:
@.***>


Allow a new target option to configure whether all items should be required

Adds a new option when creating a target: 'itemsAny? = bool`. If itemsAny is set to true, the "items" option will be joined with an or statement rather than an and statement, meaning that the items option will be treated like an "array of items, where at least one of the items is required to show the option".
This gives developers the option to, for instance - allow using one of multiple items to slash a tire.

With https://github.com/overextended/ox_target/commit/13608d3a967759ba80d0e4763d92ea5b65e5a37a cleaning up PlayerHasItems, I've implemented this slightly differently in https://github.com/overextended/ox_target/commit/2d6bd9465d513c9b76e89e31c5e0bdd73346c243.


In RTL, while editing a number field, the negative sign is on the incorrect side

Expected Behavior
The negative sign should always appear on the correct side while typing in a number.
Actual Behavior
In RTL, while editing a number, the negative sign incorrectly appears on the right side. Once the edit is accepted, the negative sign moves to the correct side (after https://github.com/LLK/scratch-blocks/pull/1702):

This seems to have been fixed? I can't replicate it.


feat(docs): Mention @react-email/components package

Hey,
when integrating with react-email package I noticed that there are no mentions of @react-email/components package. I've decided to include it in docs. If there are places that I missed, please lmk.
Example of component code block after change:

Awesome, thanks @aadamw

I just cherry-picked the commits to main.
https://github.com/resendlabs/react-email/commit/ade98ab43600db357b5ac9365015ff605ebc93c4
https://github.com/resendlabs/react-email/commit/243977e36c4b387775413dc07be19a1e7b09cf7b
Thanks @aadamw!


Refer to FontAwesome icons by their class names

Forgive me if this has been asked and answered already, I couldn't find it in issues. It would be great for legibility if we could fetch icons by their class names, so text=fa-plus instead of text=.
They do exactly this at imgplaceholder.com:
https://imgplaceholder.com/400x400/ddd/fff/fa-plus?font-size=96

that's a good point, i haven't checked ligature support for icon fonts yet


Tenant nginx ingress (fixes)

I am testing install with this PR #183 and I had some issues, these should help

I guess that makefile doesn't export local variables to forked processes unless you set them explicitly like this


Inviting contributors/maintainer(s) to the project

Hello everyone,
First of all, I want to take a moment to thank all contributors and people who supported this project in any way ;) you are awesome!
The deep-translator package contains now 9 famous translators, which can be used simply just by importing the right one. I tried to keep the API very simple and as consistent as it can be, which will hopefully make contributors' lives easier if they want to implement/add a new translator to the chain.
If you like the project and have any interest in contributing, you can contact me here or send me a msg privately:

Email<EMAIL_ADDRESS>

Great tool! Can find sometime to contribute. Amazon translator maybe 👍

@sou-joshi Good idea, just go for it ;) I would happily review your PR

Hi @singhaditya28 thanks for the info, but how can I do that?

Go to --> hacktoberfest.digitalocean.com
Then click start hacking, register yourself as a maintainer and provide the required details.

@nidhaloff Did you get it?

Hi Nidal
I just tried Deep translator and loved it.
Although I'm new to Github but would love to contribute
Thank you for creating an Amazing tool :)
-Dani

Hi Nidal
I just tried Deep translator and loved it.
Although I'm new to Github but would love to contribute
Thank you for creating an Amazing tool :)

Hi Nidhal
I just tried Deep translator and loved it.
Although I'm new to Github but would love to contribute
Thank you for creating an Amazing tool :)

Hi @nidhaloff I would like to contribute to your project. Please let me know how I can assist you :)

I'm not sure how I can hep but I would love to contribute, so count me in!

@LordUbuntu @rishi-kai21 @Dani-Google Thanks, please take a look at the issues page and see what you can work on/improve. If you have any specific question, you can ask there.

I'm new to open-source contribution but I would love to help in anyway.

I love to contribute, so count me in.


[Persistence] Change root hash calculation to use an SMT

Description

Summary generated by Reviewpad on 20 Jun 23 21:01 UTC
This pull request contains changes to multiple files. One file contains a table summarizing infrastructural components and implementation options, while another modifies a unit test. There are also changes to import statements and the addition of a new method to an interface, as well as updates to hardcoded state hashes used in a test. Additionally, the trees_test.go file has been modified to import additional packages and add a TODO comment in a test function.

Issue
Fixes #834
Type of change
Please mark the relevant option(s):

[x] New feature, functionality or library
[ ] Bug fix
[ ] Code health or cleanup
[ ] Major breaking change
[x] Documentation
[ ] Other

List of changes

Update root hash computation to insert different trees hashes and tree name into the tree then compute the root of the tree giving the root hash

Testing

[x] make develop_test; if any code changes were made
[x] make test_e2e on k8s LocalNet; if any code changes were made
[x] e2e-devnet-test passes tests on DevNet; if any code was changed
[x] Docker Compose LocalNet; if any major functionality was changed or introduced
[x] k8s LocalNet; if any infrastructure or configuration changes were made

Required Checklist

[x] I have performed a self-review of my own code
[x] I have commented my code, particularly in hard-to-understand areas
[x] I have added, or updated, godoc format comments on touched members (see: tip.golang.org/doc/comment)
[x] I have tested my changes using the available tooling
[ ] I have updated the corresponding CHANGELOG

If Applicable Checklist

[ ] I have updated the corresponding README(s); local and/or global
[ ] I have added tests that prove my fix is effective or that my feature works
[ ] I have added, or updated, mermaid.js diagrams in the corresponding README(s)
[ ] I have added, or updated, documentation and mermaid.js diagrams in shared/docs/* if I updated shared/*README(s)

@dylanlott I think this one is close to approving but figured we should probably merge persistence/tree-store to main first and rebase/merge this with main?
Lmk if you have a preference


Convergence time

Hello!
How many epoches does the training set iterate before it converges? In stanford cars dataset.

The results in our paper can be obtained with 200 epochs.

Hello!
How many epoches does the training set iterate before it converges? In stanford cars dataset.

The results in our paper can be obtained with 200 epochs.

Do you encounter the problem that loss does not decline when mutil-GPU  training.

Do you encounter the problem that loss does not decline when mutil-GPU  training.

I've never encountered the similar problem. Make sure your torch version is correct.

I solve the problem by using pytorch1.3, thank you!


Downloading Soundcloud link with Soundcloud gives different song

System OS
Windows
Python Version
3.11 (CPython)
Install Source
pip / PyPi
Install version / commit hash
Version: 4.2.4
Expected Behavior vs Actual Behavior
I expected for SpotDL to download directly from the Soundcloud link I provided, yet it found a different song from Soundcloud and downloaded that instead
Steps to reproduce - Ensure to include actual links!

Run this command spotdl --audio "soundcloud" --ffmpeg-args '-c:a libvorbis -b:a 128k -ar 44100 -ac 2 -af "loudnorm=I=-12:LRA=10:TP=-2, equalizer=f=100:width_type=h:width=50:g=5"' --format ogg --print-errors download https://soundcloud.com/skychaserr/1045-sky-fm
Instead of https://soundcloud.com/skychaserr/1045-sky-fm downloaded, (for me at least) this is downloaded https://soundcloud.com/jacob-steinberg-736370838/skychaser-1045-sky-fm-best-part-extended

Traceback
Processing query: https://soundcloud.com/skychaserr/1045-sky-fm
Downloaded "skychaser - 104.5 sky fm":
https://soundcloud.com/jacob-steinberg-736370838/skychaser-1045-sky-fm-best-part-extended

Other details
No response

meet the same error when trying to download "https://soundcloud.com/leaf-7/90sjag8gwk39"

We don't support downloading directly from soundcloud, but you can use YT-DLP to do that.
But you can use the spotify link, and match it to the soundcloud link to force the download from soundcloud.
spotdl download "SoundcloudURL|SpotifyURL"


Remaining issues with odds math

According to the site you linked in issue #5 it looks like 4 should payout 9:5, not 2:1. Or am I misunderstanding which odds are supposed to be used?

On second look, there are multiple sections. Would this be for the "Place Bets" phase or the "Pass Line Odds/Come Bet Odds/Buy Bets" phase? I'm afraid I'm not too familiar with the rules and terminology for craps.

Hey @JeremyBowyer , I understand how that could be confusing. This program currently only supports pass line betting because there is no GUI for place or proposition betting. See attached.

@rfaile313 Makes sense. I'll update that and round the payout amounts to integers this evening.

This looks good @JeremyBowyer . Nice work. Closed.


add fsnotify-backed cache for reading TLS PKI material

Summary
If the PKI material used to expose a TLS endpoint changes while an instance is running, the instance must be restarted to read the new material. This change adds an fsnotify-based watcher for the certificate, and caches the value of the cert in process memory to save file I/O during the establishment of each TLS connection.
This scenario is likely in Kubernetes where PKI material may be refreshed by a renewal process and exposed to Fulcio through a volume mount.

Yes, negligible. Getting a reader lock is simply an atomic check and
increment an int, and the writer lock should only block readers temporarily
for the file I/O to read the new cert from disk and parse it. Even if it’s
rotated every 24h that’s extremely minimal.
On Fri, Jul 7, 2023 at 12:41 AM Hayden B @.***> wrote:

@.**** commented on this pull request.
In cmd/app/grpc.go
https://github.com/sigstore/fulcio/pull/1256#discussion_r1255237364:

		}

		log.Logger.Error("fsnotify grpc-tls-certificate error:", err)

	}

}

}()

// Add a path.
if err = cachedTLSCert.Watcher.Add(certPath); err != nil {

return nil, err

}
return cachedTLSCert, nil
+}

+func (c *cachedTLSCert) GetCertificate() *tls.Certificate {

// get reader lock
c.RLock()

Do you expect this would have negligible performance impact? I would
assume it's fine given it's a reader lock, but it is introducing a lock for
every call.
—
Reply to this email directly, view it on GitHub
https://github.com/sigstore/fulcio/pull/1256#pullrequestreview-1517798998,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAVWTJOKAPIJODGCQ2USCG3XO6HPVANCNFSM6AAAAAAZ3NL2MY
.
You are receiving this because you authored the thread.Message ID:
@.***>


Add --verbose command line flag and improve logging

Logging levels should be standardized, and generally more logs added to the most verbose level.
After doing that, a --verbose flag can greatly help in debugging issues

Alternatively, a DAGSHUB_LOG_LEVEL command that allows you to set the logging level

All the CLI commands have a -v flag that makes the output more and more verbose


[Bug]: Environment variables are not added after the initial deployment

Description
I deployed a glitchtip service from template services. And I noticed a strange bug. If you deploy the service, then after that you will not be able to add your new environment variables. I went into the container and they weren't there. Although they were displayed in my project in coolify.
Minimal Reproduction (if possible, example repository)

Create and deploy a glitchtip service from template services
Add a new environment variable
Press the restart button
After this, the new environment variable will be visible in the coolify project, but inside the docker container it will not be. However, if you immediately add a new variable during the very first deployment, then everything will be ok

Exception or Error
No response
Version
v4.0.0-beta.294

A small note, I added new variables by opening the tab 'Developer view'

I can confirm this. If you want to disable user registration in Glitchtip you have to set ENABLE_USER_REGISTRATION=FALSE. I added the environment variable but nothing changed. A quick run of env in the web container shows:
CELERY_WORKER_MAX_TASKS_PER_CHILD=10000
<EMAIL_ADDRESS>EMAIL_URL=consolemail://
ENABLE_USER_REGISTRATION=FALSE
POSTGRESQL_DATABASE=glitchtip
SERVICE_BASE64_64_ENCRYPTION=REDACTED
SERVICE_FQDN_GLITCHTIP=REDACTED
SERVICE_FQDN_GLITCHTIP_8080=REDACTED
SERVICE_PASSWORD_POSTGRESQL=REDACTED
SERVICE_USER_POSTGRESQL=REDACTED

but my custom env is missing.
Does Coolify have the option of adding variables to services that already have variables in the docker-compose?

Same issue, cannot disable user registration. Is there any workaround for this?

Adding the environment variables to the developer view will not add them to your compose file, so you will also need to manually add the environment variables to the compose file to make it work.


Start server keyword

Originally submitted to Google Code by @yanne on 8 May 2009

This could also be exposed as module level function

Originally submitted to Google Code by @yanne on 13 May 2009

Implemented in r172


Problems installing FB v0.8.4 on Viviana's MacOS

Likely related to #3456
I'll have a video call now with @vv-monsalve to try to understand what's wrong in her setup.

ok, we figured out what was wrong. For some reason @vv-monsalve had fontbakery 0.8.3 installed system-wide. Uninstalling it solved the issue.