Crashing Mono when scanning devices in a C# .NET Framework 4.8 WinForms app running on Raspberry Pi 3B+

Device: Raspberry Pi 3B+
OS: Raspbian GNU/Linux 11 (bullseye) 32-bit
Mono: <IP_ADDRESS>
Bluez: 5.55
.NET Framework: 4.8
Linux.Bluetooth: 5.64.0
I am attempting to make a simple WinForms app with a single button that scans for and prints Bluetooth devices to the console.  As soon as  adapter.StartDiscoveryAsync() is called it crashes mono.  I have plans to use Linux.Bluetooth at a larger scale, but not until I can get this very simple example working correctly and robustly.
Any help would be much appreciated.  Let me know if you need any additional information.
Here is the code from Form1.cs:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Linux.Bluetooth;
using Linux.Bluetooth.Extensions;

namespace scan
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private async void button1_Click(object sender, EventArgs e)
        {
            int scanSeconds = 5;

            IAdapter1 adapter = (await BlueZManager.GetAdaptersAsync()).FirstOrDefault();

            var adapterPath = adapter.ObjectPath.ToString();
            var adapterName = adapterPath.Substring(adapterPath.LastIndexOf("/") + 1);
            Console.WriteLine($"Using Bluetooth adapter {adapterName}");
            Console.WriteLine($"Adapter's full path:    {adapterPath}");

            Console.WriteLine("Starting discovery...");
            await adapter.StartDiscoveryAsync();
            Console.WriteLine("Delaying 5 seconds...");
            await Task.Delay(TimeSpan.FromSeconds(scanSeconds));
            Console.WriteLine("Stopping discovery...");
            await adapter.StopDiscoveryAsync();

            // Print out the devices we already know about.
            Console.WriteLine();
            Console.WriteLine("Getting devices...");
            var devices = await adapter.GetDevicesAsync();
            foreach (var device in devices)
            {
                string deviceDescription = await GetDeviceDescriptionAsync(device);
                Console.WriteLine($" - {deviceDescription}");
            }

        }
        private static async Task<string> GetDeviceDescriptionAsync(IDevice1 device)
        {
            var deviceProperties = await device.GetAllAsync();
            return $"{deviceProperties.Alias} (Address: {deviceProperties.Address}, RSSI: {deviceProperties.RSSI})";
        }
    }
}

And here is the crash report from mono:
$ sudo ./scan.exe
Using Bluetooth adapter hci0
Adapter's full path:    /org/bluez/hci0
Starting discovery...
Delaying 5 seconds...

=================================================================
	Native Crash Reporting
=================================================================
Got a SIGSEGV while executing native code. This usually indicates
a fatal error in the mono runtime or one of the native libraries
used by your application.
=================================================================

=================================================================
	Native stacktrace:
=================================================================
	 (No frames)

=================================================================
	Telemetry Dumper:
=================================================================
Pkilling 0x1889530880x from 0x1888478208x
Pkilling 0x1898968064x from 0x1888478208x
Pkilling 0x1985803264x from 0x1888478208x
Pkilling 0x1895822336x from 0x1888478208x
Pkilling 0x1905259520x from 0x1888478208x
Pkilling 0x1908343808x from 0x1888478208x
Pkilling 0x1892676608x from 0x1888478208x
Pkilling 0x1995820288x from 0x1888478208x
Pkilling 0x1902113792x from 0x1888478208x
Pkilling 0x1887425536x from 0x1888478208x
Entering thread summarizer pause from 0x1888478208x
Finished thread summarizer pause from 0x1888478208x.
Failed to create breadcrumb file (null)/crash_hash_0x0

Waiting for dumping threads to resume

=================================================================
	External Debugger Dump:
=================================================================
[New LWP 28518]
[New LWP 28519]
[New LWP 28520]
[New LWP 28521]
[New LWP 28522]
[New LWP 28523]
[New LWP 28524]
[New LWP 28525]
[New LWP 28526]
[New LWP 28527]
[New LWP 28528]
[New LWP 28552]
Mono support loaded.
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/arm-linux-gnueabihf/libthread_db.so.1".
__GI___poll (timeout=1000, nfds=2, fds=0x76203938) at ../sysdeps/unix/sysv/linux/poll.c:29
29	../sysdeps/unix/sysv/linux/poll.c: No such file or directory.
  Id   Target Id                                       Frame
* 1    Thread 0x76f5cd00 (LWP 28516) "cli"             __GI___poll (timeout=1000, nfds=2, fds=0x76203938) at ../sysdeps/unix/sysv/linux/poll.c:29
  2    Thread 0x75fff400 (LWP 28518) "SGen worker"     futex_wait_cancelable (private=0, expected=0, futex_word=0x40d290) at ../sysdeps/nptl/futex-internal.h:186
  3    Thread 0x765cf400 (LWP 28519) "Finalizer"       futex_abstimed_wait_cancelable (private=0, abstime=0x0, clockid=0, expected=1, futex_word=0x405528) at ../sysdeps/nptl/futex-internal.h:323
  4    Thread 0x71bf0400 (LWP 28520) "Thread Pool I/O" __GI___poll (timeout=-1, nfds=2, fds=0xbdcbd0) at ../sysdeps/unix/sysv/linux/poll.c:29
  5    Thread 0x718ff400 (LWP 28521) "Thread Pool I/O" futex_abstimed_wait_cancelable (private=<optimized out>, abstime=0x718fecac, clockid=<optimized out>, expected=0, futex_word=0x40d6b8) at ../sysdeps/nptl/futex-internal.h:323
  6    Thread 0x715ff400 (LWP 28522) "Thread Pool Wor" futex_abstimed_wait_cancelable (private=0, abstime=0x715fed5c, clockid=0, expected=1, futex_word=0x405a88) at ../sysdeps/nptl/futex-internal.h:323
  7    Thread 0x712ff400 (LWP 28523) "Thread Pool Wor" futex_abstimed_wait_cancelable (private=0, abstime=0x712fed5c, clockid=0, expected=1, futex_word=0x405a88) at ../sysdeps/nptl/futex-internal.h:323
  8    Thread 0x70fff400 (LWP 28524) "Thread Pool Wor" futex_abstimed_wait_cancelable (private=0, abstime=0x70ffed5c, clockid=0, expected=1, futex_word=0x405a88) at ../sysdeps/nptl/futex-internal.h:323
  9    Thread 0x70cff400 (LWP 28525) "Thread Pool Wor" futex_abstimed_wait_cancelable (private=0, abstime=0x70cfed5c, clockid=0, expected=1, futex_word=0x405a88) at ../sysdeps/nptl/futex-internal.h:323
  10   Thread 0x709ff400 (LWP 28526) "Thread Pool Wor" futex_abstimed_wait_cancelable (private=0, abstime=0x709fed5c, clockid=0, expected=1, futex_word=0x405a88) at ../sysdeps/nptl/futex-internal.h:323
  11   Thread 0x708fe400 (LWP 28527) "Thread Pool Wor" 0x76bb1824 in __GI___wait4 (pid=28658, stat_loc=0x708fbf54, options=0, usage=0x0) at ../sysdeps/unix/sysv/linux/wait4.c:27
  12   Thread 0x707fd400 (LWP 28528) "Thread Pool Wor" futex_abstimed_wait_cancelable (private=0, abstime=0x707fcd5c, clockid=0, expected=1, futex_word=0x405a88) at ../sysdeps/nptl/futex-internal.h:323
  13   Thread 0x6fd72400 (LWP 28552) "Timer-Scheduler" futex_abstimed_wait_cancelable (private=<optimized out>, abstime=0x6fd712d4, clockid=<optimized out>, expected=0, futex_word=0x6b1da0) at ../sysdeps/nptl/futex-internal.h:323

Thread 13 (Thread 0x6fd72400 (LWP 28552) "Timer-Scheduler"):
#0  futex_abstimed_wait_cancelable (private=<optimized out>, abstime=0x6fd712d4, clockid=<optimized out>, expected=0, futex_word=0x6b1da0) at ../sysdeps/nptl/futex-internal.h:323
#1  __pthread_cond_wait_common (abstime=0x6fd712d4, clockid=<optimized out>, mutex=0x85ed, cond=0x6b1d78) at pthread_cond_wait.c:520
#2  __pthread_cond_timedwait (cond=0x6b1d78, mutex=0x85ed, abstime=0x6fd712d4) at pthread_cond_wait.c:656
#3  0x00303b0c in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)

Thread 12 (Thread 0x707fd400 (LWP 28528) "Thread Pool Wor"):
#0  futex_abstimed_wait_cancelable (private=0, abstime=0x707fcd5c, clockid=0, expected=1, futex_word=0x405a88) at ../sysdeps/nptl/futex-internal.h:323
#1  do_futex_wait (sem=sem@entry=0x405a88, abstime=abstime@entry=0x707fcd5c, clockid=0) at sem_waitcommon.c:117
#2  0x76e98078 in __new_sem_wait_slow (sem=0x405a88, abstime=0x707fcd5c, clockid=0) at sem_waitcommon.c:285
#3  0x002a36b0 in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)

Thread 11 (Thread 0x708fe400 (LWP 28527) "Thread Pool Wor"):
#0  0x76bb1824 in __GI___wait4 (pid=28658, stat_loc=0x708fbf54, options=0, usage=0x0) at ../sysdeps/unix/sysv/linux/wait4.c:27
#1  0x0009d030 in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)

Thread 10 (Thread 0x709ff400 (LWP 28526) "Thread Pool Wor"):
#0  futex_abstimed_wait_cancelable (private=0, abstime=0x709fed5c, clockid=0, expected=1, futex_word=0x405a88) at ../sysdeps/nptl/futex-internal.h:323
#1  do_futex_wait (sem=sem@entry=0x405a88, abstime=abstime@entry=0x709fed5c, clockid=0) at sem_waitcommon.c:117
#2  0x76e98078 in __new_sem_wait_slow (sem=0x405a88, abstime=0x709fed5c, clockid=0) at sem_waitcommon.c:285
#3  0x002a36b0 in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)

Thread 9 (Thread 0x70cff400 (LWP 28525) "Thread Pool Wor"):
#0  futex_abstimed_wait_cancelable (private=0, abstime=0x70cfed5c, clockid=0, expected=1, futex_word=0x405a88) at ../sysdeps/nptl/futex-internal.h:323
#1  do_futex_wait (sem=sem@entry=0x405a88, abstime=abstime@entry=0x70cfed5c, clockid=0) at sem_waitcommon.c:117
#2  0x76e98078 in __new_sem_wait_slow (sem=0x405a88, abstime=0x70cfed5c, clockid=0) at sem_waitcommon.c:285
#3  0x002a36b0 in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)

Thread 8 (Thread 0x70fff400 (LWP 28524) "Thread Pool Wor"):
#0  futex_abstimed_wait_cancelable (private=0, abstime=0x70ffed5c, clockid=0, expected=1, futex_word=0x405a88) at ../sysdeps/nptl/futex-internal.h:323
#1  do_futex_wait (sem=sem@entry=0x405a88, abstime=abstime@entry=0x70ffed5c, clockid=0) at sem_waitcommon.c:117
#2  0x76e98078 in __new_sem_wait_slow (sem=0x405a88, abstime=0x70ffed5c, clockid=0) at sem_waitcommon.c:285
#3  0x002a36b0 in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)

Thread 7 (Thread 0x712ff400 (LWP 28523) "Thread Pool Wor"):
#0  futex_abstimed_wait_cancelable (private=0, abstime=0x712fed5c, clockid=0, expected=1, futex_word=0x405a88) at ../sysdeps/nptl/futex-internal.h:323
#1  do_futex_wait (sem=sem@entry=0x405a88, abstime=abstime@entry=0x712fed5c, clockid=0) at sem_waitcommon.c:117
#2  0x76e98078 in __new_sem_wait_slow (sem=0x405a88, abstime=0x712fed5c, clockid=0) at sem_waitcommon.c:285
#3  0x002a36b0 in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)

Thread 6 (Thread 0x715ff400 (LWP 28522) "Thread Pool Wor"):
#0  futex_abstimed_wait_cancelable (private=0, abstime=0x715fed5c, clockid=0, expected=1, futex_word=0x405a88) at ../sysdeps/nptl/futex-internal.h:323
#1  do_futex_wait (sem=sem@entry=0x405a88, abstime=abstime@entry=0x715fed5c, clockid=0) at sem_waitcommon.c:117
#2  0x76e98078 in __new_sem_wait_slow (sem=0x405a88, abstime=0x715fed5c, clockid=0) at sem_waitcommon.c:285
#3  0x002a36b0 in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)

Thread 5 (Thread 0x718ff400 (LWP 28521) "Thread Pool I/O"):
#0  futex_abstimed_wait_cancelable (private=<optimized out>, abstime=0x718fecac, clockid=<optimized out>, expected=0, futex_word=0x40d6b8) at ../sysdeps/nptl/futex-internal.h:323
#1  __pthread_cond_wait_common (abstime=0x718fecac, clockid=<optimized out>, mutex=0x9ddf, cond=0x40d690) at pthread_cond_wait.c:520
#2  __pthread_cond_timedwait (cond=0x40d690, mutex=0x9ddf, abstime=0x718fecac) at pthread_cond_wait.c:656
#3  0x00303b0c in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)

Thread 4 (Thread 0x71bf0400 (LWP 28520) "Thread Pool I/O"):
#0  __GI___poll (timeout=-1, nfds=2, fds=0xbdcbd0) at ../sysdeps/unix/sysv/linux/poll.c:29
#1  __GI___poll (fds=0xbdcbd0, nfds=2, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:26
#2  0x002532f4 in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)

Thread 3 (Thread 0x765cf400 (LWP 28519) "Finalizer"):
#0  futex_abstimed_wait_cancelable (private=0, abstime=0x0, clockid=0, expected=1, futex_word=0x405528) at ../sysdeps/nptl/futex-internal.h:323
#1  do_futex_wait (sem=sem@entry=0x405528, abstime=0x0, clockid=0) at sem_waitcommon.c:117
#2  0x76e97c90 in __new_sem_wait_slow (sem=0x405528, abstime=0x0, clockid=0) at sem_waitcommon.c:285
#3  0x00292b38 in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)

Thread 2 (Thread 0x75fff400 (LWP 28518) "SGen worker"):
#0  futex_wait_cancelable (private=0, expected=0, futex_word=0x40d290) at ../sysdeps/nptl/futex-internal.h:186
#1  __pthread_cond_wait_common (abstime=0x0, clockid=0, mutex=0x0, cond=0x40d268) at pthread_cond_wait.c:508
#2  __pthread_cond_wait (cond=0x40d268, mutex=0x0) at pthread_cond_wait.c:638
#3  0x002f512c in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)

Thread 1 (Thread 0x76f5cd00 (LWP 28516) "cli"):
#0  __GI___poll (timeout=1000, nfds=2, fds=0x76203938) at ../sysdeps/unix/sysv/linux/poll.c:29
#1  __GI___poll (fds=0x76203938, nfds=2, timeout=1000) at ../sysdeps/unix/sysv/linux/poll.c:26
#2  0x7214a778 in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
[Inferior 1 (process 28516) detached]
Stopping discovery...

=================================================================
	Basic Fault Address Reporting
=================================================================
instruction pointer is NULL, skip dumping
=================================================================
	Managed Stacktrace:
=================================================================
=================================================================
Aborted

I was able to get the following using gdb on the crash:
(gdb) run --debug scan.exe
Starting program: /usr/bin/mono --debug scan.exe
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/arm-linux-gnueabihf/libthread_db.so.1".
[New Thread 0x75fff400 (LWP 17834)]
[New Thread 0x743bc400 (LWP 17835)]
[New Thread 0x716e5400 (LWP 17836)]
[New Thread 0x713ff400 (LWP 17837)]
[New Thread 0x710ff400 (LWP 17838)]
[New Thread 0x70dff400 (LWP 17839)]
[New Thread 0x70aff400 (LWP 17840)]
[New Thread 0x707ff400 (LWP 17841)]
[New Thread 0x704ff400 (LWP 17842)]
[New Thread 0x703fe400 (LWP 17843)]
[New Thread 0x702fd400 (LWP 17844)]
Using Bluetooth adapter hci0
Adapter's full path:    /org/bluez/hci0
Starting discovery...
Delaying 5 seconds...
[New Thread 0x701fc400 (LWP 17846)]

Thread 9 "Thread Pool Wor" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x707ff400 (LWP 17841)]
0x00000000 in ?? ()
(gdb) where
#0  0x00000000 in ?? ()
#1  0x715c3748 in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
(gdb) p (char*)mono_pmip (0x715c3748)
[Thread 0x702fd400 (LWP 17844) exited]
[Thread 0x710ff400 (LWP 17838) exited]
$2 = 0x7052ed40 " (wrapper delegate-invoke) Tmds.DBus.CodeGen.ReadMethodDelegate`1<Tmds.DBus.PropertyChanges>:invoke_T_MessageReader (Tmds.DBus.Protocol.MessageReader) [{0x7051e510} + 0xf0]  (0x715c3658 0x715c38d8) [0"...

Hopefully, that can help locate the issue. Any help is appreciated.
Doug

At this time, Linux Bluetooth has only been tested against .NET 5, .NET 6, and .NET 7, not the classic Mono (.NET Framework).
The most recent gdb crash log was most helpful, the folks over at Tmds.Dbus may have more insight into this issue.

I believe the version of Tmds.Dbus that is used in Linux.Bluetooth is 0.11.0? Not the most current 0.15.0? I expect that will likely be the first question they ask.
Doug

I agree, an update with the latest Tmds.Dbus version will be published soon

Hi @DougShuffield, the latest package v5.66 has been published which uses Tmds v0.15.0.

@DougShuffield I updated to the package to use the latest Tmds.DBus to v0.20.
Give it a shot and let me know if you're still having issues


Added SurveyHound Website and Email

@wolfthefallen @zeroSteiner

please provide a README.md file for the Website SurveyHound directory describing which webpage is the landing page is, and required or recommend changes to the template prior to conducting the phish.

@guitarmanj Awsome templates!


Will Infracost work or support OpenTofu?

With the recent drama surrounding the Terraform licensing model and the subsequent creation of OpenTofu based on https://opentofu.org/manifesto/ will Infracost look to support OpenTofu either now or into the future as some people look to move over from Terraform?

Closing as a dup of https://github.com/infracost/infracost/issues/2638


Cannot access steaming NATS connection's NATS connection.

Unless I'm mistaken, there is no way to get access to a streaming NATS connection's underlying NATS connection!  I think the library should either:

Provide a stanConnection_GetNATSConnection() that returns the nc field, or

Provide an alternative stanConnection_Create() that allows you to provide your own NATS conneciton (and expects the caller to close it themselves).

Or am I missing something?

@edam I departed intentionally from what we did in the Go client. The Streaming connection needs a NATS Connection, but I think it is a bad idea to have it accessible from the outside because then the Streaming connection does not have the control.
What I did instead is to be able to pass a natsOptions so that you can configure the Streaming's NATS connection this way. Still, the library will override certain settings and at least I know that it can't be closed by the user while the streaming connection is still alive.
Please check this and also how I do it in one of the examples: https://github.com/nats-io/cnats/blob/master/examples/stan/pub.c#L63.

What if your application needs to be able to use NATS and NATS streaming?
This is a legitimate use-case... For example, as I understand it, it is not appropriate to use STAN to perform RPC-like "requests" (i.e., with an inbox) like you would with NATS.  And services may separately pub/sub via NATS or STAN depending on whether they care about message delivery or not. We have all of these scenarios where I work now!
As it stands, an application would have to have a separate and thoroughly redundant connection to the server to be able to use NATS and STAN. Multiply this by however many  instances you run, and you start getting a lot of unnecessary connections!
Would you consider at least allowing access to the existing NATS connection in stanConnection?

I may but then I would probably make it such that it would not be possible for the returned connection to be closed. That is, set an internal field that would reject a close if done directly on the returned connection. Makes sense?

That would be fantastic! 😁

Want a PR?

Ok, thanks for the feedback, keep it coming 👍

I can do it, unless you really want to have a go.

something like this? #166

There's still nothing to stop the caller obtaining the NATS connection, closing the STAN connection and then attempting to use the NATS connection.  If you cared about this, you could use a ref count on the NATS connection object.  But the the caller would always have to close it, or it would leak (and not close).

@edam Did you find any other API design issue that should be addressed before getting out of beta status? If no answer, I may release 1.8.0 this week. Thanks!


The "Syntax ?" link doesn't work

Reproduction procedure

Search "?=".
Click "Syntax ?" from the candidates and go "https://docs.perl6.org/syntax/?" page.

@coke plz look at htmlify.p6, right now when we deal with URI/URL, we use both uri_escape and the logic in lib/Pod/Htmlify.pm6. It ruins many link auto-generated(@AlexDaniel #561 ). We should try to rewrite these logic.
For this specific issue, it's because
# https://docs.perl6.org/js/search.js
{ category: "Syntax", value: "?", url: " /syntax/?" },

which should be /syntax/%3f

Also related to #1851 . Looks like all operators, or many of them, including ? might be wrong. Working on that now.


Time zone for offer start and end dates should be stated

Issue in ./help/using/offers/offer-library/creating-personalized-offers.md
In Step 2 "Specify the offer’s name as well as its start and end date and time. Outside of these dates, the offer won’t be selected by the Decisioning engine." we should specify which time zone is used for the start and end dates - UTC, user's time zone, sandbox time zone, US Eastern Time etc.

Thanks for your feedback @abhardwaj-dev. We'll check and update shortly.
Internal Ref > DOCAC-9540

Sorry I missed that one. I asked the PMs to confirm before I update the documentation.


rotationSpeed is 0 on service restart

Hey!
Thanks for sharing this great plugin. I noticed that when rotationSpeed is set to true homekit show 0% on first boot of accessory, e.g. after power loss. I'm using it for my ventilation system and after power loss it recovers to the previous rotation speed so I think this plugin could consume that value to show it correctly in homekit - what do you think?
{
    "currentState": INT_VALUE,
    "rotationSpeed": INT_VALUE     <--- to add
}

Hi there, would you be able to run homebridge in debug mode and verify you receive a Updated rotationSpeed to: INT message when you get shown 0%?
As long as rotationSpeed is set to true, you should get a poll on startup as well as at each poll interval (5 minutes by default) - as per lines 101 to 104 in the index.js

You're right, my api didn't return rotationSpeed, only allowed to set it. Thanks!


How to understand the word "taint" in the new APIs taintObjectReference and taintUniqueValue?

I used to open an issue on react.dev to discuss the meaning of the word taint in the APIs. You can see https://github.com/reactjs/react.dev/issues/6343.
My opinion is that while taint can be directly understood as 污染 or 污点 in the field of computer science and in some related concepts (such as in Kubernetes), considering its current meaning in React-related APIs, I believe that when translating it into Chinese, we should not use words with a clearly negative connotation.
From the perspective of APIs, the meaning of "taint" seems more like labeling objects with special behavior. So, I think translating it as 标记 is appropriate. I will also use this meaning in the translated documentation.
Welcome everyone to discuss this issue.

See https://github.com/reactjs/react.dev/issues/6343#issuecomment-1767420377


Addon don't active

HA version is 2021.7.4

Can you please post debug logs related to the problem?
Can you uninstall and reinstall  the component?
Thanks!
I’m currently working on new version...

ago 05 19:18:59 sdomotica homeassistant[20007]: 2021-08-05 19:18:59 ERROR (MainThread) [custom_components.dpc] Timeout error fetching information from https://mappe.protezionecivile.gov.it/it/mappe-rischi/bollettino-di-criticita -
ago 05 19:18:59 sdomotica homeassistant[20007]: 2021-08-05 19:18:59 ERROR (MainThread) [custom_components.dpc] Error fetching dpc data:
ago 05 19:18:59 sdomotica homeassistant[20007]: 2021-08-05 19:18:59 WARNING (MainThread) [homeassistant.config_entries] Config entry 'Allerta_Meteo' for dpc integration not ready yet: None; Retrying in background

Uhm Is the hardware a raspberry PI? What model? Do you use a wifi or lan connection?
Soon, I will release a new version, I will increase the timeout.

FYI, timeout (30sec) has been added to version 2021.8.0 if you wish to give it a go!

I tryed the new version ma the problem is present .. boh...
2021-08-06 09:30:49 ERROR (MainThread) [custom_components.dpc] Timeout error fetching information from https://mappe.protezionecivile.gov.it/it/mappe-rischi/bollettino-di-criticita -
2021-08-06 09:30:49 ERROR (MainThread) [custom_components.dpc] Timeout error fetching information from https://mappe.protezionecivile.it/it/mappe-rischi/bollettino-di-vigilanza -
2021-08-06 09:30:56 ERROR (MainThread) [custom_components.dpc] Error fetching dpc data:
2021-08-06 09:30:56 WARNING (MainThread) [homeassistant.config_entries] Config entry 'Allerta_Meteo' for dpc integration not ready yet: None; Retrying in background
I have raspberry PI3B+ with cable connection

Richiesta HTTP inviata, in attesa di risposta... 302 Moved Temporarily
Posizione: /it/mappe-rischi/bollettino-di-criticita/ [segue]

Good news. I think I understand the problem.
If you look at response 302, it indicates a redirect ...
the problem is the incomplete url, a slash is missing at the end.
I make a new version with the fix.

If you want to try again ... version 2021.8.1 is out.

I try new version , the problem persist for me
I would try to look better what happens on my rasp

Ok.
Also check that the coordinates entered are decimal. (example Milan 45.4773 9.1815)
You could also turn on debug logging for the component.
In configuration.yaml
logger:
  default: warn
  logs:
    custom_components.dpc: debug

I have tried to replicate your error on a RPI3b+, and I have not encountered this problem ... 😖
Anyway, I have made a new beta, where, as a first attempt, it tries to take bulletin ID directly from GitHub.
If you want to try it, turn on the beta switch in HACS, and install version 2021.8.1b.

NOW is working

Okay, glad it works for you now. I put the beta in master. Thanks for the test: 0)


I can't find how to install or even use this package!

I can't wait to use this tool in my tailwindcss project but I can't see instructions on how to install it anywhere, please your help is highly welcome.

https://brc-dd.github.io/animated-tailwindcss/installation


K8SPS-20: Rework deployment

New versions of Operator SDK is more aligned with kubebuilder.
Kubebuilder creates YAML config for installing CRDs, RBAC and operator
deployment under config/ directory. It uses kustomize and with the
help of markes, it automatically updates CRD, RBAC etc. Rather than
breaking this setup, we integrated it with our approach in our other
operators. We have a deploy/ directory that contains cr.yaml,
crd.yaml, rbac.yaml, operator.yaml and these files are generated
by kustomize from config/. If you want to change something in the
manifest, you need to change files in config/. Files in deploy/ will
be overwritten by make targets.
We have a Makefile that helps maintaining manifests and install
CRDs/operator. Basic commands are the following:

make manifests: Create crd.yaml, rbac.yaml and operator.yaml and
put them under deploy/.
make install: Apply crd.yaml and rbac.yaml to Kubernetes.
make build: Build the docker image for operator.
make deploy: Apply operator.yaml to Kubernetes.

We're using perconalab/percona-server-mysql-operator:main as our
default image. If you want to override the tag for development:
$ make deploy VERSION=k8sps-20

If you want to override the image:
$ make manifest IMG=percona/percona-server-mysql-operator:0.1.0

Test name
Status

commit: https://github.com/percona/percona-server-mysql-operator/pull/12/commits/4e6fd8367be4da6cee9bc0adfa5f4de4e01ec1d5
image: perconalab/percona-server-mysql-operator:PR-12-4e6fd83

Test name
Status

commit: https://github.com/percona/percona-server-mysql-operator/pull/12/commits/def7c33fb4066ac75217d361b878be9bf170fcca
image: perconalab/percona-server-mysql-operator:PR-12-def7c33

Test name
Status

commit: https://github.com/percona/percona-server-mysql-operator/pull/12/commits/4f42ba6720d549a775760fa3b0c56b56793cd7f3
image: perconalab/percona-server-mysql-operator:PR-12-4f42ba6

Test name
Status

commit: https://github.com/percona/percona-server-mysql-operator/pull/12/commits/38d6e66842d97b3e5f4e9039385f502163d0a195
image: perconalab/percona-server-mysql-operator:PR-12-38d6e66

Test name
Status

commit: https://github.com/percona/percona-server-mysql-operator/pull/12/commits/bf98e315fa14d9f1d74d9e8d3e55f7338add2d01
image: perconalab/percona-server-mysql-operator:PR-12-bf98e31


Add MPIJob controller

What type of PR is this?
/kind feature

What this PR does / why we need it:
Which issue(s) this PR fixes:

Fixes #65
Special notes for your reviewer:
The follow ups:

extract the code common code into a library
use the released version of MPI operator 0.4.0 (https://github.com/kubeflow/mpi-operator/issues/507)

@mimowo Can we use a job interface (#537)? Or would you like to switch implementation using a job interface after #544 is completed?

@mimowo Can we use a job interface (#537)? Or would you like to switch implementation using a job interface after #544 is completed?

As mentioned here: https://github.com/kubernetes-sigs/kueue/issues/65#issuecomment-1432778824. For now, I'm doing a rough prototype by copy-paste to see what the obstacles are. I guess once it is working we could also abstract out the library based on the two implementations. This could also give us better clues of how the final interface should look like. I guess we need to sync up on this.

/retest
The failure does seem to be an unrelated flake

/assign @alculquicondor @mwielgus
Please review

@tenzen-y do you mind taking a look as well?

@tenzen-y do you mind taking a look as well?

Thanks for pinging me.
/assign

Can we use MPIJob or mpijob in messages and comments instead of Job or job?

I have applied the suggestions. I think this will be easier to maintain once we commonize the code, which is planned, based on the interface: https://github.com/kubernetes-sigs/kueue/tree/main/keps/369-job-interface.

Can we use MPIJob or mpijob in messages and comments instead of Job or job?

I have applied the suggestions. I think this will be easier to maintain once we commonize the code, which is planned, based on the interface: https://github.com/kubernetes-sigs/kueue/tree/main/keps/369-job-interface.

Ah, I see. sgtm

/assign @kerthcet
Please complete the review and lgtm.

I'll take a look but maybe later(tomorrow I think), stuck with other things. Hope you don't mind. ^_^

@kerthcet thank you for the review! I think I have addressed the remarks. Let me know if something more is needed.

/lgtm

Rebased and squashed. @alculquicondor please renew lgtm :)

Thanks @mimowo that's a great start!


ocaml syntaxchecker

There is no syntax checker for OCaml. Here is one (supports .ml, .mli, .mll and .mly):
https://gist.github.com/1605686

Pull request?

ok, sent a pull request instead


change example class name to variable name

I guess there is a typo on Named Containers section on Readme. Description have both {name} variable and example class name 'name' in it. Better to write variable names on both places in description.

Thanks!


apt install riscv64-* fails on both Ubuntus (and properly all others)

Description
There is a missing binutils archive on the Azure repo.
E: Failed to fetch http://azure.archive.ubuntu.com/ubuntu/pool/main/b/binutils/binutils-riscv64-linux-gnu_2.38-4ubuntu2_amd64.deb  404  Not Found [IP: <IP_ADDRESS> 80]

Anything that requires the 64-bit RISC-V binutils fails with a 404. I checked the directory and it is indeed missing that particular .deb file, but there are other binutils deb files for 64-bit RISC-V binutils. So, maybe a typo?
I only checkmarked the platforms I have tested on, but I assume all are affected.
Platforms affected

[ ] Azure DevOps
[X] GitHub Actions - Standard Runners
[ ] GitHub Actions - Larger Runners

Runner images affected

[ ] Ubuntu 18.04
[X] Ubuntu 20.04
[X] Ubuntu 22.04
[ ] macOS 10.15
[ ] macOS 11
[ ] macOS 12
[ ] Windows Server 2019
[ ] Windows Server 2022

Image version and build link
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2

    - name: Install dependencies
      run: |
        sudo apt install -y gcc-10-riscv64-linux-gnu g++-10-riscv64-linux-gnu

Is it regression?
Yes
Expected behavior
The .deb file should be present, or perhaps named differently.
Actual behavior
The file is missing, it's a 404.
Repro steps
$ curl  -D - http://azure.archive.ubuntu.com/ubuntu/pool/main/b/binutils/binutils-riscv64-linux-gnu_2.38-4ubuntu2_amd64.deb
HTTP/1.1 404 Not Found
Date: Thu, 08 Dec 2022 16:32:53 GMT
Server: Apache/2.4.29 (Ubuntu)
Content-Length: 283
Content-Type: text/html; charset=iso-8859-1
X-Cache: MISS from <IP_ADDRESS>
X-Cache-Lookup: MISS from <IP_ADDRESS>:8000
Via: 1.1 <IP_ADDRESS> (squid/5.2)

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">

<title>404 Not Found</title>

Not Found

The requested URL was not found on this server.

<address>Apache/2.4.29 (Ubuntu) Server at gb.archive.ubuntu.com Port 80</address>

Hello @fwsGonzo!
Link you mentioned return the same result outside of runners. So it is an issue on other side. We are not responsible for the operation of third-party mirrors. If you have any questions or concerns on how runner images work, then feel free to ask here or open a new issue.


macro future proofing: extend analysis to detect unfortunate interaction across arms

spawned off of https://github.com/rust-lang/rust/issues/30531#issuecomment-170080470
(transcribed relevant material from that comment below.)

when we released 1.0, we set some parameters for what sorts of changes we could make to the Rust grammar. In particular, for things like expressions and types, which can be referenced from macro definitions, we established (in RFC 550) a set of legal "follow" tokens that must never be added to the grammar. For example, the follow set for an expression was defined as =>, ,, and ;. These sets were derived by looking at the existing Rust grammar and finding expression terminators we were already committed to: for example, expressions can already be followed by , in a tuple expression or function call. Under those rules, the change to implement type ascription is legal.
RFC 550 also defined a static analysis that was intended to reject macro definitions which might be affected by (legal) changes to the expression grammar. For example, that analysis would reject a macro arm such as $e:expr : $t:ty because, there, $e is followed by :, which is not in the follow set for an expression. This means that if we were to add something like type ascription, the macro would break, and we did not want that to happen. However, as this issue demonstrates, that static anlysis contains a "soundness bug" when it comes to multiple macro arms.
In the medium to long term, we need to patch RFC 550 to correctly account for multiple macro arms. In the short term, however, macro authors will have to look at their own macros to check whether they might be broken by changes to the extension grammar.

cc #550

So from the previous issue, it seems the goal is to look at these two macro arms
($e:expr) => { ... }
($i:ident : $t:ty => { ... }

and detect that the same input could be valid for both arms (assuming #![feature(type_ascription)], in this example). Depending on whether you count type ascription syntax as already added or not, this becomes either a future-proofing hazard or a straight-up ambiguity which makes the meaning of the macro depend on the order of the arms.
We have to be careful though, because macro evaluation is already dependent, and usefully so, on the order of the arms, for example this pattern:
(A ...) => { /* case A */ }
(B ...) => { /* case B */ }
($i:ident ...) => { /* other */ }

Also, are there ideas on how to do the actual ambiguity checking? Not sure if we know what class of parsers macro_rules! creates, but the problem may not even be decidable...

the problem may not even be decidable

I haven't put much thought into it,  but I am willing to use a conservative analysis that just emits a lint style warning to the macro author.
(Also,  another potential option that has been suggested: expand the macro input matching system so that the expander can "back out" of one arm and try the next.  (Ie it becomes a backtracking parser)  I am not saying the latter is my preferred solution, but it will be good for us to consider all options when we tackle this problem. )

Backtracking would definitely be the preferred solution.  Without it, for example, there's no way to parse generic parameters in macro_rules! even if we did have a lifetime matcher.

cc #1384


Reduce Action Queue Slowdown

When the action queue is busy, the website can take a bit to respond. Needs to be fixed.
Also limit weekly profile refresh action to the same profiles that have their scores pulled for the week.

should be fixed


Gas#Recieved Capability

We need to include a test where:

Creates a procedure A
Procedure A is given a gas#received capability (type 0x10), that designates it is allowed to read how much gas it's has received.
The kernel instance is sent 9000 gas and Procedure A reads how much gas it received using it's gas#received capability

Getting the gas received is something that's not currently blocked by the verification process. For this to be useful that would need to be added.

Closing based on #56


Provide details of long DBS queries

Impact of the new feature
We have quite long DBS queries which we need to understand and optimize. Most of the cases the following APIs provide long time in DBS response: listFiles (files DBS REST API) and listFileArray (filearray DBS REST API).
Is your feature request related to a problem? Please describe.
I'm analyzing usage of different DBS APIs based on monitoring timber dashboard. In particular, I noticed that the longest DBS APIs are files and filearray (in Python they are listFiles and listFileArray, respectively). For example here are the longest requests I found in our frontend logs
115352027 us "POST /dbs/prod/global/DBSReader/fileArray "/DC=org/DC=incommon/C=US/ST=Illinois/O=Fermi Research Alliance/OU=Fermilab/CN=wmagent.fnal.gov" 425 in 260682856 out
125224558 us "POST /dbs/prod/global/DBSReader/fileArray "/DC=ch/DC=cern/OU=computers/CN=tw/crab-preprod-tw01.cern.ch" "-" ] 432 in 48219184 out
147394037 us "POST /dbs/prod/global/DBSReader/fileArray "/DC=org/DC=incommon/C=US/ST=Illinois/O=Fermi Research Alliance/OU=Fermilab/CN=wmagent.fnal.gov" 411 in 85617052 out

As you can see the POST fileArray takes more than 100seconds to complete and extract quite significant amount of data from DBS (in range of O(10-100MB). Since POST requests are not recorded their payload in out FEs we have no idea which parameters were passed in this API calls. But it would be good to understand what are those parameters.
Describe the solution you'd like
We need to have proper logging of filesarray POST requests which should include

the input parameters send in POST request
time spend fetching the data
amount of fetched data in bytes
To reduce amount of logging, we may need to introduce a proper threshold, e.g. we should dump information about all requests which take more than 100 seconds.

Moreover, such code can be generalized to provide details about ANY DBS API whose time exceed certain threshold. This will allow to generalize this code, and help everyone to identify long DBS queries.
Describe alternatives you've considered
None
Additional context
@belforte CRAB should also provide such dumps to allow us debug these long requests.
@amaltaro , @todor-ivanov , @klannon  This analysis will be required in improve DBS queries, its schema and data management.

Valentin, I made a quick update to your initial description because you were tagging the wrong person (instead of Kevin L.).

@vkuznet CRAB code does not directly call listFileArrays, those must be coming via WMCore/DBS3Reader, I presume via listDatasetFileDetails which takes a dataset name as input [1] and hence can indeed extract quite a lot of data (all those lumis.. as well known). I suspect it would be quite easy to reproduce large output here by passing any AOD sample as input. OTOH... the payload of the POST is surely available to DBS itself, you can find all those information server-side. Do you really want scattered logs from all clients ?
[1] https://github.com/dmwm/CRABServer/blob/7eff2be4c2ce51b07fc5104cc314f364d001daa0/src/python/TaskWorker/Actions/DBSDataDiscovery.py#L483-L486

@belforte , the new DBS server code is small and does the streaming by default. As such I can't change streaming parts to capture details of requests. Moreover, every POST is unknown a-priory how much time and resources it will take. What you suggest will require DBS server to keep and track this information which means blow up DBS server resources, e.g. I need to read all POST, estimate size of output, keep track of how much time it took, etc. This is very costly and unnecessary on a server. I ask the clients to do the bookkeeping of their requests since client knows what it sends to DBS server via POST, and it will know how much time it will take and how much data it will receive and only dump request above certain threshold. At the end we only interested to know which requests takes more than 100 seconds and which input parameters trigger such long requests, but we are not interested in every request.
To sum-up, I think delegating to DBS server to do bookkeeping of ALL requests (because it does not know which one will take short or long time) and therefore blowing up its resources is not an option here. I still think it is appropriate and easier to do it in a client even if it will take us some time to parse clients log.

@belforte just log those long requests in your application logs. Then we can scan the logs for certain pattern and easily see these long requests. What we need is common data-format which should include:

date
IP address
DBS status response code
DBS API
time of response
size of request payload
size of response payload
DBS API parameters (JSON POST payload)
DN of the app/user who made this request

Of course it would be nice to implement common data-format in WMCore and use it everywhere. But, again, the code need to setup initial time and time after response, and only trigger logging of requests which goes above certain threshold. To me the threshold of 100sec is a good one.

thanks Valentin. I have open an issue to improve CRAB logs in this way: https://github.com/dmwm/CRABServer/issues/7225


English (and other languages) support and translation support

An external request in the Laut.fm forum asked for the player to be available in English as well.
If I do this, I'll do it “properly” and add language support and language switching to the player in the same go.
I'll create the ticket here so that I can think about it later. As soon as a concept is ready and there are first test versions, there will be new informations on about this topic here.

Because it is currently being requested so often, a first test version of language support is coming in <IP_ADDRESS> Gardenia, but until it becomes stable, I have to ask for patience, it will certainly be the case that the next releases will only be test releases and there will be some language confusion. The whole thing is still very basic.

The language management already works. The most time-consuming thing is to replace the German hard-coded with the language management queries. Please be patient.

And to avoid questions directly, yes, the language can also be preset in the URL. I use the hl parameter for this, which is quite common and is also used by the big players like google and so on.

The language support has been running very well for several versions now.
However, there are still a few bugs:

if the user has selected a language that does not support the extension he uses in the player (or technically speaking: the language file does not exist) > crash. Fatal PHP error. The only way to fix this is to set the hl-partmater in the URL line to a code whose language is supported. In my tests, however, this only occurs if the user has selected the language via the URL parameter. This overwrites the automatic detection of the system language - which in turn switches to English if the language file does not exist.
Possible solution: Add a similar routine to the manual query.

the code should actually also use cookies. Cookies should store the language value and then override the automatic detection. This should help users who do not want to use the player in the language of their system to use a different language in the long term without having to use the URL parameter.
The code does not work yet.

However, as there is a relatively easy workaround for this (simply use the parameter), this is not a high priority. Apart from these small bugs, the language code runs.
Therefore, I will soon publish a guide that explains to translators how to translate and what they need to consider.


youtube-dl: 2019.06.21 -> 2019.06.27

Motivation for this change
Update youtube-dl to the latest release.
https://github.com/ytdl-org/youtube-dl/releases/tag/2019.06.27
NOTE: Updates to youtube-dl should be backported, thanks!
Things done

[x] Tested using sandboxing (nix.useSandbox on NixOS, or option sandbox in nix.conf on non-NixOS)
Built on platform(s)

[x] NixOS
[ ] macOS
[ ] other Linux distributions

[ ] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
[ ] Tested compilation of all pkgs that depend on this change using nix-shell -p nix-review --run "nix-review wip"
[x] Tested execution of all binary files (usually in ./result/bin/)
[ ] Determined the impact on package closure size (by running nix path-info -S before and after)
[ ] Assured whether relevant documentation is up to date
[x] Fits CONTRIBUTING.md.

@fpletz Thank you!


Support state to prevent CSRF

Hi,
I was wondering if you'd be interesting in adding support for the state field to prevent CSRF attacks. I think you'd just need to modify the callback dispatch like oauth2GithubScoped does.
JP

I don't know a ton about this. Generally, if adding something makes things safer and doesn't require anything from existing or new end-users of the library, then I don't see why not.

I took a shot at this here: d33cc46b87a9efce5421cc076b1b243363fe8b72
The main compatibility issue I see is when plugins manually set the state (like Github). I think it should be relatively painless to change these though.

The diff looks reasonable enough to me. Would you like to move it to a proper PR and pickup discussion/review there?


Received an error when tried to switch parameter

Problem Description

=====
Error while running event factoryplanner::on_gui_switch_state_changed (ID 160)
factoryplanner/backend/calculation/solver.lua:153: attempt to index field '?' (a nil value)
stack traceback:
factoryplanner/backend/calculation/solver.lua:153: in function 'determine_satisfaction'
factoryplanner/backend/calculation/solver.lua:174: in function 'update_ingredient_satisfaction'
factoryplanner/backend/calculation/solver.lua:232: in function 'determine_ingredient_satisfaction'
factoryplanner/ui/dialogs/preferences_dialog.lua:259: in function 'handler'
factoryplanner/ui/event_handler.lua:169: in function <factoryplanner/ui/event_handler.lua:121>
Uploading _autosave1.zip…
Uploading factorio-current.log…
Reproduction
No response

I'm sorry but I can't reproduce this issue. Your save didn't upload either unfortunately. Do you have any more details on this? Or a reliable reproduction?


[IDP-569] Add unique name rule analyser

Core changes
Added a rule to validate unique names for events.
Performance of the analysers

The analyzer project is still not bundled with the abstractions package. Here's how to do it:

https://github.com/gsoft-inc/wl-extensions-mongo/blob/1.3.2/src/Workleap.Extensions.Mongo.Abstractions/Workleap.Extensions.Mongo.Abstractions.csproj#L38-L60
There's going to be a warning/error in the Build.ps1, compare what to change with this mongo project too

We should also add a 'Included Roslyn Analyzers' section just like in Mediatr and Mongo


[Telink] Readme files update & Add USB target to CI

Change overview

Readme files update
Add USB target to CI

@s07641069  need to fix the unit test after target updates:
AssertionError: DIFFERENCE between expected and generated output in testdata/all_targets_linux_x64.txt
Expected file can be found in all_targets_linux_x64.txt.actual
   ---
   +++
   @@ -23,5 +23,5 @@
   qpg-qpg6105-{lock,light,shell,persistent-storage,light-switch,thermostat}[-updateimage]
   stm32-stm32wb5mm-dk-light
   tizen-arm-{all-clusters,all-clusters-minimal,chip-tool,light,tests}[-no-ble][-no-thread][-no-wifi][-asan][-ubsan][-with-ui]
   -telink-{tlsr9118bdk40d,tlsr9518adk80d,tlsr9528a,tlsr9528a_retention,tlsr9258a,tlsr9258a_retention}-{air-quality-sensor,all-clusters,all-clusters-minimal,bridge,contact-sensor,light,light-switch,lock,ota-requestor,pump,pump-controller,shell,smoke-co-alarm,temperature-measurement,thermostat,window-covering}[-ota][-dfu][-shell][-rpc][-factory-data][-4mb][-mars]
   +telink-{tlsr9118bdk40d,tlsr9518adk80d,tlsr9528a,tlsr9528a_retention,tlsr9258a,tlsr9258a_retention}-{air-quality-sensor,all-clusters,all-clusters-minimal,bridge,contact-sensor,light,light-switch,lock,ota-requestor,pump,pump-controller,shell,smoke-co-alarm,temperature-measurement,thermostat,window-covering}[-ota][-dfu][-shell][-rpc][-factory-data][-4mb][-mars][-usb]
   openiotsdk-{shell,lock}[-mbedtls][-psa]


update tests and ci so only testing ui components not database

Completed with: https://github.com/ryanAllMad/js-job-helper/commit/5992fde8342fe729178010824bda64589d712693


style(Other): Add Apache License 2.0

Description
This PR adds the Apache 2.0 License to the SDK. This only applies to files with the permissive, open-source version of the Maxim Integrated Copyright notice.
Checklist Before Requesting Review

[x] PR Title follows correct guidelines.
[x] Description of changes and all other relevant information.
[ ] (Optional) Link any related GitHub issues using a keyword
[ ] (Optional) Provide info on any relevant functional testing/validation.  For API changes or significant features, this is not optional.

Jacob and I did a spot check on all file types (.cpp, .c, .h, .s, .S, .ld, .mk, Makefiles, .py, and .txt).

/clang-format-run

Looks like we need to blacklist SecureROM_BL_Host/test_images for the format checker or // clang-format off / //clang-format on the contents of the blinkled file

/clang-format-run

/clang-format-run

/clang-format-run

The labeler is getting confused because GitHub only goes through the first 3000 files of a PR. The rest of the files are ignored.


After laptop ran out of battery, Keybase was logged out and device keys were gone

Keybase GUI Version: 1.0.18-20161116172108+b3e405d
I signed up for Keybase online, then downloaded the client and set up my laptop as a device. Later that day, my laptop died when it ran out of battery (forgot to plug it in). When I restarted it, Keybase was logged out. I went to log in, and it asked me to log in with one of my other devices, including this laptop. I've had to create a new device for it with a different name, and then revoke the old device.

That's weird and not great.  Can you do a keybase log send
Cc: @patrickxb

Done. My log id: 63422d072c0c3a9761a88e1c